; LLVM IR from Water-Melon/Melon :: src (mln_websocket)

; 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.mln_chain_s = type { ptr, ptr }
%struct.mln_buf_s = type { ptr, ptr, ptr, ptr, ptr, ptr, i64, i64, i64, ptr, i8 }
%struct.mln_websocket_s = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i64, i16, i16, i32 }

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

declare ptr @mln_alloc_m(ptr noundef, i64 noundef) #1

declare void @mln_alloc_free(ptr noundef) #1

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

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

; Function Attrs: nounwind uwtable
define dso_local i32 @mln_websocket_parse(ptr noundef nonnull %0, ptr noundef %1) #3 {
  %3 = alloca i32, align 4
  %4 = alloca ptr, 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 i64, align 8
  %11 = alloca i64, align 8
  %12 = alloca i64, align 8
  %13 = alloca i32, align 4
  %14 = alloca i8, align 1
  %15 = alloca i8, align 1
  %16 = alloca i32, align 4
  %17 = alloca i16, align 2
  %18 = alloca [4 x i8], align 1
  %19 = alloca i16, align 2
  %20 = alloca i32, align 4
  %21 = alloca ptr, align 8
  store ptr %0, ptr %4, align 8, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %6) #4
  %22 = load ptr, ptr %5, align 8, !tbaa !5
  %23 = load ptr, ptr %22, align 8, !tbaa !5
  store ptr %23, ptr %6, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #4
  store ptr null, ptr %7, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #4
  store ptr null, ptr %8, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #4
  store ptr null, ptr %9, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #4
  store i32 0, ptr %13, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %14) #4
  store i8 0, ptr %14, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 1, ptr %15) #4
  store i8 0, ptr %15, align 1, !tbaa !11
  store i64 0, ptr %11, align 8, !tbaa !12
  br label %24

24:                                               ; preds = %118, %2
  %25 = load ptr, ptr %6, align 8, !tbaa !5
  %26 = icmp ne ptr %25, null
  br i1 %26, label %27, label %122

27:                                               ; preds = %24
  %28 = load ptr, ptr %6, align 8, !tbaa !5
  %29 = getelementptr inbounds %struct.mln_chain_s, ptr %28, i32 0, i32 0
  %30 = load ptr, ptr %29, align 8, !tbaa !14
  %31 = icmp eq ptr %30, null
  br i1 %31, label %79, label %32

32:                                               ; preds = %27
  %33 = load ptr, ptr %6, align 8, !tbaa !5
  %34 = getelementptr inbounds %struct.mln_chain_s, ptr %33, i32 0, i32 0
  %35 = load ptr, ptr %34, align 8, !tbaa !14
  %36 = icmp eq ptr %35, null
  br i1 %36, label %37, label %38

37:                                               ; preds = %32
  br label %76

38:                                               ; preds = %32
  %39 = load ptr, ptr %6, align 8, !tbaa !5
  %40 = getelementptr inbounds %struct.mln_chain_s, ptr %39, i32 0, i32 0
  %41 = load ptr, ptr %40, align 8, !tbaa !14
  %42 = getelementptr inbounds %struct.mln_buf_s, ptr %41, i32 0, i32 10
  %43 = load i8, ptr %42, align 8
  %44 = lshr i8 %43, 3
  %45 = and i8 %44, 1
  %46 = zext i8 %45 to i32
  %47 = icmp ne i32 %46, 0
  br i1 %47, label %48, label %60

48:                                               ; preds = %38
  %49 = load ptr, ptr %6, align 8, !tbaa !5
  %50 = getelementptr inbounds %struct.mln_chain_s, ptr %49, i32 0, i32 0
  %51 = load ptr, ptr %50, align 8, !tbaa !14
  %52 = getelementptr inbounds %struct.mln_buf_s, ptr %51, i32 0, i32 8
  %53 = load i64, ptr %52, align 8, !tbaa !16
  %54 = load ptr, ptr %6, align 8, !tbaa !5
  %55 = getelementptr inbounds %struct.mln_chain_s, ptr %54, i32 0, i32 0
  %56 = load ptr, ptr %55, align 8, !tbaa !14
  %57 = getelementptr inbounds %struct.mln_buf_s, ptr %56, i32 0, i32 6
  %58 = load i64, ptr %57, align 8, !tbaa !18
  %59 = sub nsw i64 %53, %58
  br label %74

60:                                               ; preds = %38
  %61 = load ptr, ptr %6, align 8, !tbaa !5
  %62 = getelementptr inbounds %struct.mln_chain_s, ptr %61, i32 0, i32 0
  %63 = load ptr, ptr %62, align 8, !tbaa !14
  %64 = getelementptr inbounds %struct.mln_buf_s, ptr %63, i32 0, i32 2
  %65 = load ptr, ptr %64, align 8, !tbaa !19
  %66 = load ptr, ptr %6, align 8, !tbaa !5
  %67 = getelementptr inbounds %struct.mln_chain_s, ptr %66, i32 0, i32 0
  %68 = load ptr, ptr %67, align 8, !tbaa !14
  %69 = getelementptr inbounds %struct.mln_buf_s, ptr %68, i32 0, i32 0
  %70 = load ptr, ptr %69, align 8, !tbaa !20
  %71 = ptrtoint ptr %65 to i64
  %72 = ptrtoint ptr %70 to i64
  %73 = sub i64 %71, %72
  br label %74

74:                                               ; preds = %60, %48
  %75 = phi i64 [ %59, %48 ], [ %73, %60 ]
  br label %76

76:                                               ; preds = %74, %37
  %77 = phi i64 [ 0, %37 ], [ %75, %74 ]
  %78 = icmp eq i64 %77, 0
  br i1 %78, label %79, label %80

79:                                               ; preds = %76, %27
  br label %118

80:                                               ; preds = %76
  %81 = load ptr, ptr %6, align 8, !tbaa !5
  %82 = getelementptr inbounds %struct.mln_chain_s, ptr %81, i32 0, i32 0
  %83 = load ptr, ptr %82, align 8, !tbaa !14
  %84 = getelementptr inbounds %struct.mln_buf_s, ptr %83, i32 0, i32 0
  %85 = load ptr, ptr %84, align 8, !tbaa !20
  store ptr %85, ptr %7, align 8, !tbaa !5
  %86 = load ptr, ptr %6, align 8, !tbaa !5
  %87 = getelementptr inbounds %struct.mln_chain_s, ptr %86, i32 0, i32 0
  %88 = load ptr, ptr %87, align 8, !tbaa !14
  %89 = getelementptr inbounds %struct.mln_buf_s, ptr %88, i32 0, i32 4
  %90 = load ptr, ptr %89, align 8, !tbaa !21
  store ptr %90, ptr %8, align 8, !tbaa !5
  br label %91

91:                                               ; preds = %110, %80
  %92 = load ptr, ptr %7, align 8, !tbaa !5
  %93 = load ptr, ptr %8, align 8, !tbaa !5
  %94 = icmp ult ptr %92, %93
  br i1 %94, label %95, label %113

95:                                               ; preds = %91
  %96 = load i64, ptr %11, align 8, !tbaa !12
  %97 = icmp eq i64 %96, 0
  br i1 %97, label %98, label %103

98:                                               ; preds = %95
  %99 = load ptr, ptr %7, align 8, !tbaa !5
  %100 = load i8, ptr %99, align 1, !tbaa !11
  store i8 %100, ptr %14, align 1, !tbaa !11
  %101 = load i64, ptr %11, align 8, !tbaa !12
  %102 = add i64 %101, 1
  store i64 %102, ptr %11, align 8, !tbaa !12
  br label %109

103:                                              ; preds = %95
  %104 = load ptr, ptr %7, align 8, !tbaa !5
  %105 = getelementptr inbounds i8, ptr %104, i32 1
  store ptr %105, ptr %7, align 8, !tbaa !5
  %106 = load i8, ptr %104, align 1, !tbaa !11
  store i8 %106, ptr %15, align 1, !tbaa !11
  %107 = load i64, ptr %11, align 8, !tbaa !12
  %108 = add i64 %107, 1
  store i64 %108, ptr %11, align 8, !tbaa !12
  br label %113

109:                                              ; preds = %98
  br label %110

110:                                              ; preds = %109
  %111 = load ptr, ptr %7, align 8, !tbaa !5
  %112 = getelementptr inbounds i8, ptr %111, i32 1
  store ptr %112, ptr %7, align 8, !tbaa !5
  br label %91, !llvm.loop !22

113:                                              ; preds = %103, %91
  %114 = load i64, ptr %11, align 8, !tbaa !12
  %115 = icmp uge i64 %114, 2
  br i1 %115, label %116, label %117

116:                                              ; preds = %113
  br label %122

117:                                              ; preds = %113
  br label %118

118:                                              ; preds = %117, %79
  %119 = load ptr, ptr %6, align 8, !tbaa !5
  %120 = getelementptr inbounds %struct.mln_chain_s, ptr %119, i32 0, i32 1
  %121 = load ptr, ptr %120, align 8, !tbaa !24
  store ptr %121, ptr %6, align 8, !tbaa !5
  br label %24, !llvm.loop !25

122:                                              ; preds = %116, %24
  %123 = load i64, ptr %11, align 8, !tbaa !12
  %124 = icmp ult i64 %123, 2
  br i1 %124, label %125, label %126

125:                                              ; preds = %122
  store i32 3, ptr %3, align 4
  store i32 1, ptr %16, align 4
  br label %1226

126:                                              ; preds = %122
  %127 = load i8, ptr %15, align 1, !tbaa !11
  %128 = zext i8 %127 to i32
  %129 = and i32 %128, 127
  %130 = sext i32 %129 to i64
  store i64 %130, ptr %10, align 8, !tbaa !12
  %131 = load i64, ptr %10, align 8, !tbaa !12
  %132 = icmp eq i64 %131, 127
  br i1 %132, label %133, label %269

133:                                              ; preds = %126
  %134 = load ptr, ptr %7, align 8, !tbaa !5
  %135 = load ptr, ptr %8, align 8, !tbaa !5
  %136 = ptrtoint ptr %134 to i64
  %137 = ptrtoint ptr %135 to i64
  %138 = sub i64 %136, %137
  store i64 %138, ptr %12, align 8, !tbaa !12
  %139 = load i64, ptr %12, align 8, !tbaa !12
  %140 = icmp ugt i64 %139, 8
  br i1 %140, label %141, label %142

141:                                              ; preds = %133
  store i64 8, ptr %12, align 8, !tbaa !12
  br label %142

142:                                              ; preds = %141, %133
  store i64 0, ptr %10, align 8, !tbaa !12
  store i64 0, ptr %11, align 8, !tbaa !12
  br label %143

143:                                              ; preds = %266, %142
  br label %144

144:                                              ; preds = %161, %143
  %145 = load i64, ptr %11, align 8, !tbaa !12
  %146 = load i64, ptr %12, align 8, !tbaa !12
  %147 = icmp ult i64 %145, %146
  br i1 %147, label %148, label %164

148:                                              ; preds = %144
  %149 = load ptr, ptr %7, align 8, !tbaa !5
  %150 = getelementptr inbounds i8, ptr %149, i32 1
  store ptr %150, ptr %7, align 8, !tbaa !5
  %151 = load i8, ptr %149, align 1, !tbaa !11
  %152 = zext i8 %151 to i32
  %153 = load i64, ptr %11, align 8, !tbaa !12
  %154 = sub i64 7, %153
  %155 = shl i64 %154, 3
  %156 = trunc i64 %155 to i32
  %157 = shl i32 %152, %156
  %158 = sext i32 %157 to i64
  %159 = load i64, ptr %10, align 8, !tbaa !12
  %160 = or i64 %159, %158
  store i64 %160, ptr %10, align 8, !tbaa !12
  br label %161

161:                                              ; preds = %148
  %162 = load i64, ptr %11, align 8, !tbaa !12
  %163 = add i64 %162, 1
  store i64 %163, ptr %11, align 8, !tbaa !12
  br label %144, !llvm.loop !26

164:                                              ; preds = %144
  %165 = load i64, ptr %12, align 8, !tbaa !12
  %166 = icmp ult i64 %165, 8
  br i1 %166, label %167, label %268

167:                                              ; preds = %164
  %168 = load ptr, ptr %6, align 8, !tbaa !5
  %169 = getelementptr inbounds %struct.mln_chain_s, ptr %168, i32 0, i32 1
  %170 = load ptr, ptr %169, align 8, !tbaa !24
  store ptr %170, ptr %6, align 8, !tbaa !5
  br label %171

171:                                              ; preds = %238, %167
  %172 = load ptr, ptr %6, align 8, !tbaa !5
  %173 = icmp ne ptr %172, null
  br i1 %173, label %174, label %242

174:                                              ; preds = %171
  %175 = load ptr, ptr %6, align 8, !tbaa !5
  %176 = getelementptr inbounds %struct.mln_chain_s, ptr %175, i32 0, i32 0
  %177 = load ptr, ptr %176, align 8, !tbaa !14
  %178 = icmp eq ptr %177, null
  br i1 %178, label %226, label %179

179:                                              ; preds = %174
  %180 = load ptr, ptr %6, align 8, !tbaa !5
  %181 = getelementptr inbounds %struct.mln_chain_s, ptr %180, i32 0, i32 0
  %182 = load ptr, ptr %181, align 8, !tbaa !14
  %183 = icmp eq ptr %182, null
  br i1 %183, label %184, label %185

184:                                              ; preds = %179
  br label %223

185:                                              ; preds = %179
  %186 = load ptr, ptr %6, align 8, !tbaa !5
  %187 = getelementptr inbounds %struct.mln_chain_s, ptr %186, i32 0, i32 0
  %188 = load ptr, ptr %187, align 8, !tbaa !14
  %189 = getelementptr inbounds %struct.mln_buf_s, ptr %188, i32 0, i32 10
  %190 = load i8, ptr %189, align 8
  %191 = lshr i8 %190, 3
  %192 = and i8 %191, 1
  %193 = zext i8 %192 to i32
  %194 = icmp ne i32 %193, 0
  br i1 %194, label %195, label %207

195:                                              ; preds = %185
  %196 = load ptr, ptr %6, align 8, !tbaa !5
  %197 = getelementptr inbounds %struct.mln_chain_s, ptr %196, i32 0, i32 0
  %198 = load ptr, ptr %197, align 8, !tbaa !14
  %199 = getelementptr inbounds %struct.mln_buf_s, ptr %198, i32 0, i32 8
  %200 = load i64, ptr %199, align 8, !tbaa !16
  %201 = load ptr, ptr %6, align 8, !tbaa !5
  %202 = getelementptr inbounds %struct.mln_chain_s, ptr %201, i32 0, i32 0
  %203 = load ptr, ptr %202, align 8, !tbaa !14
  %204 = getelementptr inbounds %struct.mln_buf_s, ptr %203, i32 0, i32 6
  %205 = load i64, ptr %204, align 8, !tbaa !18
  %206 = sub nsw i64 %200, %205
  br label %221

207:                                              ; preds = %185
  %208 = load ptr, ptr %6, align 8, !tbaa !5
  %209 = getelementptr inbounds %struct.mln_chain_s, ptr %208, i32 0, i32 0
  %210 = load ptr, ptr %209, align 8, !tbaa !14
  %211 = getelementptr inbounds %struct.mln_buf_s, ptr %210, i32 0, i32 2
  %212 = load ptr, ptr %211, align 8, !tbaa !19
  %213 = load ptr, ptr %6, align 8, !tbaa !5
  %214 = getelementptr inbounds %struct.mln_chain_s, ptr %213, i32 0, i32 0
  %215 = load ptr, ptr %214, align 8, !tbaa !14
  %216 = getelementptr inbounds %struct.mln_buf_s, ptr %215, i32 0, i32 0
  %217 = load ptr, ptr %216, align 8, !tbaa !20
  %218 = ptrtoint ptr %212 to i64
  %219 = ptrtoint ptr %217 to i64
  %220 = sub i64 %218, %219
  br label %221

221:                                              ; preds = %207, %195
  %222 = phi i64 [ %206, %195 ], [ %220, %207 ]
  br label %223

223:                                              ; preds = %221, %184
  %224 = phi i64 [ 0, %184 ], [ %222, %221 ]
  %225 = icmp eq i64 %224, 0
  br i1 %225, label %226, label %227

226:                                              ; preds = %223, %174
  br label %238

227:                                              ; preds = %223
  %228 = load ptr, ptr %6, align 8, !tbaa !5
  %229 = getelementptr inbounds %struct.mln_chain_s, ptr %228, i32 0, i32 0
  %230 = load ptr, ptr %229, align 8, !tbaa !14
  %231 = getelementptr inbounds %struct.mln_buf_s, ptr %230, i32 0, i32 0
  %232 = load ptr, ptr %231, align 8, !tbaa !20
  store ptr %232, ptr %7, align 8, !tbaa !5
  %233 = load ptr, ptr %6, align 8, !tbaa !5
  %234 = getelementptr inbounds %struct.mln_chain_s, ptr %233, i32 0, i32 0
  %235 = load ptr, ptr %234, align 8, !tbaa !14
  %236 = getelementptr inbounds %struct.mln_buf_s, ptr %235, i32 0, i32 4
  %237 = load ptr, ptr %236, align 8, !tbaa !21
  store ptr %237, ptr %8, align 8, !tbaa !5
  br label %242

238:                                              ; preds = %226
  %239 = load ptr, ptr %6, align 8, !tbaa !5
  %240 = getelementptr inbounds %struct.mln_chain_s, ptr %239, i32 0, i32 1
  %241 = load ptr, ptr %240, align 8, !tbaa !24
  store ptr %241, ptr %6, align 8, !tbaa !5
  br label %171, !llvm.loop !27

242:                                              ; preds = %227, %171
  %243 = load ptr, ptr %6, align 8, !tbaa !5
  %244 = icmp eq ptr %243, null
  br i1 %244, label %245, label %246

245:                                              ; preds = %242
  store i32 3, ptr %3, align 4
  store i32 1, ptr %16, align 4
  br label %1226

246:                                              ; preds = %242
  %247 = load i64, ptr %12, align 8, !tbaa !12
  %248 = sub i64 8, %247
  %249 = load ptr, ptr %7, align 8, !tbaa !5
  %250 = load ptr, ptr %8, align 8, !tbaa !5
  %251 = ptrtoint ptr %249 to i64
  %252 = ptrtoint ptr %250 to i64
  %253 = sub i64 %251, %252
  %254 = icmp ugt i64 %248, %253
  br i1 %254, label %255, label %265

255:                                              ; preds = %246
  %256 = load i64, ptr %12, align 8, !tbaa !12
  %257 = load ptr, ptr %7, align 8, !tbaa !5
  %258 = load ptr, ptr %8, align 8, !tbaa !5
  %259 = ptrtoint ptr %257 to i64
  %260 = ptrtoint ptr %258 to i64
  %261 = sub i64 %259, %260
  %262 = trunc i64 %261 to i32
  %263 = zext i32 %262 to i64
  %264 = add i64 %256, %263
  br label %266

265:                                              ; preds = %246
  br label %266

266:                                              ; preds = %265, %255
  %267 = phi i64 [ %264, %255 ], [ 8, %265 ]
  store i64 %267, ptr %12, align 8, !tbaa !12
  br label %143

268:                                              ; preds = %164
  br label %409

269:                                              ; preds = %126
  %270 = load i64, ptr %10, align 8, !tbaa !12
  %271 = icmp eq i64 %270, 126
  br i1 %271, label %272, label %408

272:                                              ; preds = %269
  %273 = load ptr, ptr %7, align 8, !tbaa !5
  %274 = load ptr, ptr %8, align 8, !tbaa !5
  %275 = ptrtoint ptr %273 to i64
  %276 = ptrtoint ptr %274 to i64
  %277 = sub i64 %275, %276
  store i64 %277, ptr %12, align 8, !tbaa !12
  %278 = load i64, ptr %12, align 8, !tbaa !12
  %279 = icmp ugt i64 %278, 2
  br i1 %279, label %280, label %281

280:                                              ; preds = %272
  store i64 2, ptr %12, align 8, !tbaa !12
  br label %281

281:                                              ; preds = %280, %272
  store i64 0, ptr %10, align 8, !tbaa !12
  store i64 0, ptr %11, align 8, !tbaa !12
  br label %282

282:                                              ; preds = %405, %281
  br label %283

283:                                              ; preds = %300, %282
  %284 = load i64, ptr %11, align 8, !tbaa !12
  %285 = load i64, ptr %12, align 8, !tbaa !12
  %286 = icmp ult i64 %284, %285
  br i1 %286, label %287, label %303

287:                                              ; preds = %283
  %288 = load ptr, ptr %7, align 8, !tbaa !5
  %289 = getelementptr inbounds i8, ptr %288, i32 1
  store ptr %289, ptr %7, align 8, !tbaa !5
  %290 = load i8, ptr %288, align 1, !tbaa !11
  %291 = zext i8 %290 to i32
  %292 = load i64, ptr %11, align 8, !tbaa !12
  %293 = sub i64 1, %292
  %294 = shl i64 %293, 3
  %295 = trunc i64 %294 to i32
  %296 = shl i32 %291, %295
  %297 = sext i32 %296 to i64
  %298 = load i64, ptr %10, align 8, !tbaa !12
  %299 = or i64 %298, %297
  store i64 %299, ptr %10, align 8, !tbaa !12
  br label %300

300:                                              ; preds = %287
  %301 = load i64, ptr %11, align 8, !tbaa !12
  %302 = add i64 %301, 1
  store i64 %302, ptr %11, align 8, !tbaa !12
  br label %283, !llvm.loop !28

303:                                              ; preds = %283
  %304 = load i64, ptr %12, align 8, !tbaa !12
  %305 = icmp ult i64 %304, 2
  br i1 %305, label %306, label %407

306:                                              ; preds = %303
  %307 = load ptr, ptr %6, align 8, !tbaa !5
  %308 = getelementptr inbounds %struct.mln_chain_s, ptr %307, i32 0, i32 1
  %309 = load ptr, ptr %308, align 8, !tbaa !24
  store ptr %309, ptr %6, align 8, !tbaa !5
  br label %310

310:                                              ; preds = %377, %306
  %311 = load ptr, ptr %6, align 8, !tbaa !5
  %312 = icmp ne ptr %311, null
  br i1 %312, label %313, label %381

313:                                              ; preds = %310
  %314 = load ptr, ptr %6, align 8, !tbaa !5
  %315 = getelementptr inbounds %struct.mln_chain_s, ptr %314, i32 0, i32 0
  %316 = load ptr, ptr %315, align 8, !tbaa !14
  %317 = icmp eq ptr %316, null
  br i1 %317, label %365, label %318

318:                                              ; preds = %313
  %319 = load ptr, ptr %6, align 8, !tbaa !5
  %320 = getelementptr inbounds %struct.mln_chain_s, ptr %319, i32 0, i32 0
  %321 = load ptr, ptr %320, align 8, !tbaa !14
  %322 = icmp eq ptr %321, null
  br i1 %322, label %323, label %324

323:                                              ; preds = %318
  br label %362

324:                                              ; preds = %318
  %325 = load ptr, ptr %6, align 8, !tbaa !5
  %326 = getelementptr inbounds %struct.mln_chain_s, ptr %325, i32 0, i32 0
  %327 = load ptr, ptr %326, align 8, !tbaa !14
  %328 = getelementptr inbounds %struct.mln_buf_s, ptr %327, i32 0, i32 10
  %329 = load i8, ptr %328, align 8
  %330 = lshr i8 %329, 3
  %331 = and i8 %330, 1
  %332 = zext i8 %331 to i32
  %333 = icmp ne i32 %332, 0
  br i1 %333, label %334, label %346

334:                                              ; preds = %324
  %335 = load ptr, ptr %6, align 8, !tbaa !5
  %336 = getelementptr inbounds %struct.mln_chain_s, ptr %335, i32 0, i32 0
  %337 = load ptr, ptr %336, align 8, !tbaa !14
  %338 = getelementptr inbounds %struct.mln_buf_s, ptr %337, i32 0, i32 8
  %339 = load i64, ptr %338, align 8, !tbaa !16
  %340 = load ptr, ptr %6, align 8, !tbaa !5
  %341 = getelementptr inbounds %struct.mln_chain_s, ptr %340, i32 0, i32 0
  %342 = load ptr, ptr %341, align 8, !tbaa !14
  %343 = getelementptr inbounds %struct.mln_buf_s, ptr %342, i32 0, i32 6
  %344 = load i64, ptr %343, align 8, !tbaa !18
  %345 = sub nsw i64 %339, %344
  br label %360

346:                                              ; preds = %324
  %347 = load ptr, ptr %6, align 8, !tbaa !5
  %348 = getelementptr inbounds %struct.mln_chain_s, ptr %347, i32 0, i32 0
  %349 = load ptr, ptr %348, align 8, !tbaa !14
  %350 = getelementptr inbounds %struct.mln_buf_s, ptr %349, i32 0, i32 2
  %351 = load ptr, ptr %350, align 8, !tbaa !19
  %352 = load ptr, ptr %6, align 8, !tbaa !5
  %353 = getelementptr inbounds %struct.mln_chain_s, ptr %352, i32 0, i32 0
  %354 = load ptr, ptr %353, align 8, !tbaa !14
  %355 = getelementptr inbounds %struct.mln_buf_s, ptr %354, i32 0, i32 0
  %356 = load ptr, ptr %355, align 8, !tbaa !20
  %357 = ptrtoint ptr %351 to i64
  %358 = ptrtoint ptr %356 to i64
  %359 = sub i64 %357, %358
  br label %360

360:                                              ; preds = %346, %334
  %361 = phi i64 [ %345, %334 ], [ %359, %346 ]
  br label %362

362:                                              ; preds = %360, %323
  %363 = phi i64 [ 0, %323 ], [ %361, %360 ]
  %364 = icmp eq i64 %363, 0
  br i1 %364, label %365, label %366

365:                                              ; preds = %362, %313
  br label %377

366:                                              ; preds = %362
  %367 = load ptr, ptr %6, align 8, !tbaa !5
  %368 = getelementptr inbounds %struct.mln_chain_s, ptr %367, i32 0, i32 0
  %369 = load ptr, ptr %368, align 8, !tbaa !14
  %370 = getelementptr inbounds %struct.mln_buf_s, ptr %369, i32 0, i32 0
  %371 = load ptr, ptr %370, align 8, !tbaa !20
  store ptr %371, ptr %7, align 8, !tbaa !5
  %372 = load ptr, ptr %6, align 8, !tbaa !5
  %373 = getelementptr inbounds %struct.mln_chain_s, ptr %372, i32 0, i32 0
  %374 = load ptr, ptr %373, align 8, !tbaa !14
  %375 = getelementptr inbounds %struct.mln_buf_s, ptr %374, i32 0, i32 4
  %376 = load ptr, ptr %375, align 8, !tbaa !21
  store ptr %376, ptr %8, align 8, !tbaa !5
  br label %381

377:                                              ; preds = %365
  %378 = load ptr, ptr %6, align 8, !tbaa !5
  %379 = getelementptr inbounds %struct.mln_chain_s, ptr %378, i32 0, i32 1
  %380 = load ptr, ptr %379, align 8, !tbaa !24
  store ptr %380, ptr %6, align 8, !tbaa !5
  br label %310, !llvm.loop !29

381:                                              ; preds = %366, %310
  %382 = load ptr, ptr %6, align 8, !tbaa !5
  %383 = icmp eq ptr %382, null
  br i1 %383, label %384, label %385

384:                                              ; preds = %381
  store i32 3, ptr %3, align 4
  store i32 1, ptr %16, align 4
  br label %1226

385:                                              ; preds = %381
  %386 = load i64, ptr %12, align 8, !tbaa !12
  %387 = sub i64 2, %386
  %388 = load ptr, ptr %7, align 8, !tbaa !5
  %389 = load ptr, ptr %8, align 8, !tbaa !5
  %390 = ptrtoint ptr %388 to i64
  %391 = ptrtoint ptr %389 to i64
  %392 = sub i64 %390, %391
  %393 = icmp ugt i64 %387, %392
  br i1 %393, label %394, label %404

394:                                              ; preds = %385
  %395 = load i64, ptr %12, align 8, !tbaa !12
  %396 = load ptr, ptr %7, align 8, !tbaa !5
  %397 = load ptr, ptr %8, align 8, !tbaa !5
  %398 = ptrtoint ptr %396 to i64
  %399 = ptrtoint ptr %397 to i64
  %400 = sub i64 %398, %399
  %401 = trunc i64 %400 to i32
  %402 = zext i32 %401 to i64
  %403 = add i64 %395, %402
  br label %405

404:                                              ; preds = %385
  br label %405

405:                                              ; preds = %404, %394
  %406 = phi i64 [ %403, %394 ], [ 2, %404 ]
  store i64 %406, ptr %12, align 8, !tbaa !12
  br label %282

407:                                              ; preds = %303
  br label %408

408:                                              ; preds = %407, %269
  br label %409

409:                                              ; preds = %408, %268
  %410 = load i8, ptr %15, align 1, !tbaa !11
  %411 = zext i8 %410 to i32
  %412 = and i32 %411, 128
  %413 = icmp ne i32 %412, 0
  br i1 %413, label %414, label %549

414:                                              ; preds = %409
  %415 = load ptr, ptr %7, align 8, !tbaa !5
  %416 = load ptr, ptr %8, align 8, !tbaa !5
  %417 = ptrtoint ptr %415 to i64
  %418 = ptrtoint ptr %416 to i64
  %419 = sub i64 %417, %418
  store i64 %419, ptr %12, align 8, !tbaa !12
  %420 = load i64, ptr %12, align 8, !tbaa !12
  %421 = icmp ugt i64 %420, 4
  br i1 %421, label %422, label %423

422:                                              ; preds = %414
  store i64 4, ptr %12, align 8, !tbaa !12
  br label %423

423:                                              ; preds = %422, %414
  store i64 0, ptr %11, align 8, !tbaa !12
  br label %424

424:                                              ; preds = %546, %423
  br label %425

425:                                              ; preds = %441, %424
  %426 = load i64, ptr %11, align 8, !tbaa !12
  %427 = load i64, ptr %12, align 8, !tbaa !12
  %428 = icmp ult i64 %426, %427
  br i1 %428, label %429, label %444

429:                                              ; preds = %425
  %430 = load ptr, ptr %7, align 8, !tbaa !5
  %431 = getelementptr inbounds i8, ptr %430, i32 1
  store ptr %431, ptr %7, align 8, !tbaa !5
  %432 = load i8, ptr %430, align 1, !tbaa !11
  %433 = zext i8 %432 to i32
  %434 = load i64, ptr %11, align 8, !tbaa !12
  %435 = sub i64 3, %434
  %436 = shl i64 %435, 3
  %437 = trunc i64 %436 to i32
  %438 = shl i32 %433, %437
  %439 = load i32, ptr %13, align 4, !tbaa !9
  %440 = or i32 %439, %438
  store i32 %440, ptr %13, align 4, !tbaa !9
  br label %441

441:                                              ; preds = %429
  %442 = load i64, ptr %11, align 8, !tbaa !12
  %443 = add i64 %442, 1
  store i64 %443, ptr %11, align 8, !tbaa !12
  br label %425, !llvm.loop !30

444:                                              ; preds = %425
  %445 = load i64, ptr %12, align 8, !tbaa !12
  %446 = icmp ult i64 %445, 4
  br i1 %446, label %447, label %548

447:                                              ; preds = %444
  %448 = load ptr, ptr %6, align 8, !tbaa !5
  %449 = getelementptr inbounds %struct.mln_chain_s, ptr %448, i32 0, i32 1
  %450 = load ptr, ptr %449, align 8, !tbaa !24
  store ptr %450, ptr %6, align 8, !tbaa !5
  br label %451

451:                                              ; preds = %518, %447
  %452 = load ptr, ptr %6, align 8, !tbaa !5
  %453 = icmp ne ptr %452, null
  br i1 %453, label %454, label %522

454:                                              ; preds = %451
  %455 = load ptr, ptr %6, align 8, !tbaa !5
  %456 = getelementptr inbounds %struct.mln_chain_s, ptr %455, i32 0, i32 0
  %457 = load ptr, ptr %456, align 8, !tbaa !14
  %458 = icmp eq ptr %457, null
  br i1 %458, label %506, label %459

459:                                              ; preds = %454
  %460 = load ptr, ptr %6, align 8, !tbaa !5
  %461 = getelementptr inbounds %struct.mln_chain_s, ptr %460, i32 0, i32 0
  %462 = load ptr, ptr %461, align 8, !tbaa !14
  %463 = icmp eq ptr %462, null
  br i1 %463, label %464, label %465

464:                                              ; preds = %459
  br label %503

465:                                              ; preds = %459
  %466 = load ptr, ptr %6, align 8, !tbaa !5
  %467 = getelementptr inbounds %struct.mln_chain_s, ptr %466, i32 0, i32 0
  %468 = load ptr, ptr %467, align 8, !tbaa !14
  %469 = getelementptr inbounds %struct.mln_buf_s, ptr %468, i32 0, i32 10
  %470 = load i8, ptr %469, align 8
  %471 = lshr i8 %470, 3
  %472 = and i8 %471, 1
  %473 = zext i8 %472 to i32
  %474 = icmp ne i32 %473, 0
  br i1 %474, label %475, label %487

475:                                              ; preds = %465
  %476 = load ptr, ptr %6, align 8, !tbaa !5
  %477 = getelementptr inbounds %struct.mln_chain_s, ptr %476, i32 0, i32 0
  %478 = load ptr, ptr %477, align 8, !tbaa !14
  %479 = getelementptr inbounds %struct.mln_buf_s, ptr %478, i32 0, i32 8
  %480 = load i64, ptr %479, align 8, !tbaa !16
  %481 = load ptr, ptr %6, align 8, !tbaa !5
  %482 = getelementptr inbounds %struct.mln_chain_s, ptr %481, i32 0, i32 0
  %483 = load ptr, ptr %482, align 8, !tbaa !14
  %484 = getelementptr inbounds %struct.mln_buf_s, ptr %483, i32 0, i32 6
  %485 = load i64, ptr %484, align 8, !tbaa !18
  %486 = sub nsw i64 %480, %485
  br label %501

487:                                              ; preds = %465
  %488 = load ptr, ptr %6, align 8, !tbaa !5
  %489 = getelementptr inbounds %struct.mln_chain_s, ptr %488, i32 0, i32 0
  %490 = load ptr, ptr %489, align 8, !tbaa !14
  %491 = getelementptr inbounds %struct.mln_buf_s, ptr %490, i32 0, i32 2
  %492 = load ptr, ptr %491, align 8, !tbaa !19
  %493 = load ptr, ptr %6, align 8, !tbaa !5
  %494 = getelementptr inbounds %struct.mln_chain_s, ptr %493, i32 0, i32 0
  %495 = load ptr, ptr %494, align 8, !tbaa !14
  %496 = getelementptr inbounds %struct.mln_buf_s, ptr %495, i32 0, i32 0
  %497 = load ptr, ptr %496, align 8, !tbaa !20
  %498 = ptrtoint ptr %492 to i64
  %499 = ptrtoint ptr %497 to i64
  %500 = sub i64 %498, %499
  br label %501

501:                                              ; preds = %487, %475
  %502 = phi i64 [ %486, %475 ], [ %500, %487 ]
  br label %503

503:                                              ; preds = %501, %464
  %504 = phi i64 [ 0, %464 ], [ %502, %501 ]
  %505 = icmp eq i64 %504, 0
  br i1 %505, label %506, label %507

506:                                              ; preds = %503, %454
  br label %518

507:                                              ; preds = %503
  %508 = load ptr, ptr %6, align 8, !tbaa !5
  %509 = getelementptr inbounds %struct.mln_chain_s, ptr %508, i32 0, i32 0
  %510 = load ptr, ptr %509, align 8, !tbaa !14
  %511 = getelementptr inbounds %struct.mln_buf_s, ptr %510, i32 0, i32 0
  %512 = load ptr, ptr %511, align 8, !tbaa !20
  store ptr %512, ptr %7, align 8, !tbaa !5
  %513 = load ptr, ptr %6, align 8, !tbaa !5
  %514 = getelementptr inbounds %struct.mln_chain_s, ptr %513, i32 0, i32 0
  %515 = load ptr, ptr %514, align 8, !tbaa !14
  %516 = getelementptr inbounds %struct.mln_buf_s, ptr %515, i32 0, i32 4
  %517 = load ptr, ptr %516, align 8, !tbaa !21
  store ptr %517, ptr %8, align 8, !tbaa !5
  br label %522

518:                                              ; preds = %506
  %519 = load ptr, ptr %6, align 8, !tbaa !5
  %520 = getelementptr inbounds %struct.mln_chain_s, ptr %519, i32 0, i32 1
  %521 = load ptr, ptr %520, align 8, !tbaa !24
  store ptr %521, ptr %6, align 8, !tbaa !5
  br label %451, !llvm.loop !31

522:                                              ; preds = %507, %451
  %523 = load ptr, ptr %6, align 8, !tbaa !5
  %524 = icmp eq ptr %523, null
  br i1 %524, label %525, label %526

525:                                              ; preds = %522
  store i32 3, ptr %3, align 4
  store i32 1, ptr %16, align 4
  br label %1226

526:                                              ; preds = %522
  %527 = load i64, ptr %12, align 8, !tbaa !12
  %528 = sub i64 4, %527
  %529 = load ptr, ptr %7, align 8, !tbaa !5
  %530 = load ptr, ptr %8, align 8, !tbaa !5
  %531 = ptrtoint ptr %529 to i64
  %532 = ptrtoint ptr %530 to i64
  %533 = sub i64 %531, %532
  %534 = icmp ugt i64 %528, %533
  br i1 %534, label %535, label %545

535:                                              ; preds = %526
  %536 = load i64, ptr %12, align 8, !tbaa !12
  %537 = load ptr, ptr %7, align 8, !tbaa !5
  %538 = load ptr, ptr %8, align 8, !tbaa !5
  %539 = ptrtoint ptr %537 to i64
  %540 = ptrtoint ptr %538 to i64
  %541 = sub i64 %539, %540
  %542 = trunc i64 %541 to i32
  %543 = zext i32 %542 to i64
  %544 = add i64 %536, %543
  br label %546

545:                                              ; preds = %526
  br label %546

546:                                              ; preds = %545, %535
  %547 = phi i64 [ %544, %535 ], [ 4, %545 ]
  store i64 %547, ptr %12, align 8, !tbaa !12
  br label %424

548:                                              ; preds = %444
  br label %549

549:                                              ; preds = %548, %409
  %550 = load i64, ptr %10, align 8, !tbaa !12
  %551 = icmp ne i64 %550, 0
  br i1 %551, label %552, label %851

552:                                              ; preds = %549
  %553 = load i8, ptr %14, align 1, !tbaa !11
  %554 = zext i8 %553 to i32
  %555 = and i32 %554, 15
  %556 = icmp eq i32 %555, 8
  br i1 %556, label %557, label %705

557:                                              ; preds = %552
  %558 = load i64, ptr %10, align 8, !tbaa !12
  %559 = icmp ugt i64 %558, 1
  br i1 %559, label %560, label %705

560:                                              ; preds = %557
  call void @llvm.lifetime.start.p0(i64 2, ptr %17) #4
  store i16 0, ptr %17, align 2, !tbaa !32
  %561 = load ptr, ptr %7, align 8, !tbaa !5
  %562 = load ptr, ptr %8, align 8, !tbaa !5
  %563 = ptrtoint ptr %561 to i64
  %564 = ptrtoint ptr %562 to i64
  %565 = sub i64 %563, %564
  store i64 %565, ptr %12, align 8, !tbaa !12
  %566 = load i64, ptr %12, align 8, !tbaa !12
  %567 = icmp ugt i64 %566, 2
  br i1 %567, label %568, label %569

568:                                              ; preds = %560
  store i64 2, ptr %12, align 8, !tbaa !12
  br label %569

569:                                              ; preds = %568, %560
  store i64 0, ptr %11, align 8, !tbaa !12
  br label %570

570:                                              ; preds = %694, %569
  br label %571

571:                                              ; preds = %589, %570
  %572 = load i64, ptr %11, align 8, !tbaa !12
  %573 = load i64, ptr %12, align 8, !tbaa !12
  %574 = icmp ult i64 %572, %573
  br i1 %574, label %575, label %592

575:                                              ; preds = %571
  %576 = load ptr, ptr %7, align 8, !tbaa !5
  %577 = getelementptr inbounds i8, ptr %576, i32 1
  store ptr %577, ptr %7, align 8, !tbaa !5
  %578 = load i8, ptr %576, align 1, !tbaa !11
  %579 = zext i8 %578 to i32
  %580 = load i64, ptr %11, align 8, !tbaa !12
  %581 = sub i64 1, %580
  %582 = shl i64 %581, 3
  %583 = trunc i64 %582 to i32
  %584 = shl i32 %579, %583
  %585 = load i16, ptr %17, align 2, !tbaa !32
  %586 = zext i16 %585 to i32
  %587 = or i32 %586, %584
  %588 = trunc i32 %587 to i16
  store i16 %588, ptr %17, align 2, !tbaa !32
  br label %589

589:                                              ; preds = %575
  %590 = load i64, ptr %11, align 8, !tbaa !12
  %591 = add i64 %590, 1
  store i64 %591, ptr %11, align 8, !tbaa !12
  br label %571, !llvm.loop !34

592:                                              ; preds = %571
  %593 = load i64, ptr %12, align 8, !tbaa !12
  %594 = icmp ult i64 %593, 2
  br i1 %594, label %595, label %696

595:                                              ; preds = %592
  %596 = load ptr, ptr %6, align 8, !tbaa !5
  %597 = getelementptr inbounds %struct.mln_chain_s, ptr %596, i32 0, i32 1
  %598 = load ptr, ptr %597, align 8, !tbaa !24
  store ptr %598, ptr %6, align 8, !tbaa !5
  br label %599

599:                                              ; preds = %666, %595
  %600 = load ptr, ptr %6, align 8, !tbaa !5
  %601 = icmp ne ptr %600, null
  br i1 %601, label %602, label %670

602:                                              ; preds = %599
  %603 = load ptr, ptr %6, align 8, !tbaa !5
  %604 = getelementptr inbounds %struct.mln_chain_s, ptr %603, i32 0, i32 0
  %605 = load ptr, ptr %604, align 8, !tbaa !14
  %606 = icmp eq ptr %605, null
  br i1 %606, label %654, label %607

607:                                              ; preds = %602
  %608 = load ptr, ptr %6, align 8, !tbaa !5
  %609 = getelementptr inbounds %struct.mln_chain_s, ptr %608, i32 0, i32 0
  %610 = load ptr, ptr %609, align 8, !tbaa !14
  %611 = icmp eq ptr %610, null
  br i1 %611, label %612, label %613

612:                                              ; preds = %607
  br label %651

613:                                              ; preds = %607
  %614 = load ptr, ptr %6, align 8, !tbaa !5
  %615 = getelementptr inbounds %struct.mln_chain_s, ptr %614, i32 0, i32 0
  %616 = load ptr, ptr %615, align 8, !tbaa !14
  %617 = getelementptr inbounds %struct.mln_buf_s, ptr %616, i32 0, i32 10
  %618 = load i8, ptr %617, align 8
  %619 = lshr i8 %618, 3
  %620 = and i8 %619, 1
  %621 = zext i8 %620 to i32
  %622 = icmp ne i32 %621, 0
  br i1 %622, label %623, label %635

623:                                              ; preds = %613
  %624 = load ptr, ptr %6, align 8, !tbaa !5
  %625 = getelementptr inbounds %struct.mln_chain_s, ptr %624, i32 0, i32 0
  %626 = load ptr, ptr %625, align 8, !tbaa !14
  %627 = getelementptr inbounds %struct.mln_buf_s, ptr %626, i32 0, i32 8
  %628 = load i64, ptr %627, align 8, !tbaa !16
  %629 = load ptr, ptr %6, align 8, !tbaa !5
  %630 = getelementptr inbounds %struct.mln_chain_s, ptr %629, i32 0, i32 0
  %631 = load ptr, ptr %630, align 8, !tbaa !14
  %632 = getelementptr inbounds %struct.mln_buf_s, ptr %631, i32 0, i32 6
  %633 = load i64, ptr %632, align 8, !tbaa !18
  %634 = sub nsw i64 %628, %633
  br label %649

635:                                              ; preds = %613
  %636 = load ptr, ptr %6, align 8, !tbaa !5
  %637 = getelementptr inbounds %struct.mln_chain_s, ptr %636, i32 0, i32 0
  %638 = load ptr, ptr %637, align 8, !tbaa !14
  %639 = getelementptr inbounds %struct.mln_buf_s, ptr %638, i32 0, i32 2
  %640 = load ptr, ptr %639, align 8, !tbaa !19
  %641 = load ptr, ptr %6, align 8, !tbaa !5
  %642 = getelementptr inbounds %struct.mln_chain_s, ptr %641, i32 0, i32 0
  %643 = load ptr, ptr %642, align 8, !tbaa !14
  %644 = getelementptr inbounds %struct.mln_buf_s, ptr %643, i32 0, i32 0
  %645 = load ptr, ptr %644, align 8, !tbaa !20
  %646 = ptrtoint ptr %640 to i64
  %647 = ptrtoint ptr %645 to i64
  %648 = sub i64 %646, %647
  br label %649

649:                                              ; preds = %635, %623
  %650 = phi i64 [ %634, %623 ], [ %648, %635 ]
  br label %651

651:                                              ; preds = %649, %612
  %652 = phi i64 [ 0, %612 ], [ %650, %649 ]
  %653 = icmp eq i64 %652, 0
  br i1 %653, label %654, label %655

654:                                              ; preds = %651, %602
  br label %666

655:                                              ; preds = %651
  %656 = load ptr, ptr %6, align 8, !tbaa !5
  %657 = getelementptr inbounds %struct.mln_chain_s, ptr %656, i32 0, i32 0
  %658 = load ptr, ptr %657, align 8, !tbaa !14
  %659 = getelementptr inbounds %struct.mln_buf_s, ptr %658, i32 0, i32 0
  %660 = load ptr, ptr %659, align 8, !tbaa !20
  store ptr %660, ptr %7, align 8, !tbaa !5
  %661 = load ptr, ptr %6, align 8, !tbaa !5
  %662 = getelementptr inbounds %struct.mln_chain_s, ptr %661, i32 0, i32 0
  %663 = load ptr, ptr %662, align 8, !tbaa !14
  %664 = getelementptr inbounds %struct.mln_buf_s, ptr %663, i32 0, i32 4
  %665 = load ptr, ptr %664, align 8, !tbaa !21
  store ptr %665, ptr %8, align 8, !tbaa !5
  br label %670

666:                                              ; preds = %654
  %667 = load ptr, ptr %6, align 8, !tbaa !5
  %668 = getelementptr inbounds %struct.mln_chain_s, ptr %667, i32 0, i32 1
  %669 = load ptr, ptr %668, align 8, !tbaa !24
  store ptr %669, ptr %6, align 8, !tbaa !5
  br label %599, !llvm.loop !35

670:                                              ; preds = %655, %599
  %671 = load ptr, ptr %6, align 8, !tbaa !5
  %672 = icmp eq ptr %671, null
  br i1 %672, label %673, label %674

673:                                              ; preds = %670
  store i32 3, ptr %3, align 4
  store i32 1, ptr %16, align 4
  br label %702

674:                                              ; preds = %670
  %675 = load i64, ptr %12, align 8, !tbaa !12
  %676 = sub i64 2, %675
  %677 = load ptr, ptr %7, align 8, !tbaa !5
  %678 = load ptr, ptr %8, align 8, !tbaa !5
  %679 = ptrtoint ptr %677 to i64
  %680 = ptrtoint ptr %678 to i64
  %681 = sub i64 %679, %680
  %682 = icmp ugt i64 %676, %681
  br i1 %682, label %683, label %693

683:                                              ; preds = %674
  %684 = load i64, ptr %12, align 8, !tbaa !12
  %685 = load ptr, ptr %7, align 8, !tbaa !5
  %686 = load ptr, ptr %8, align 8, !tbaa !5
  %687 = ptrtoint ptr %685 to i64
  %688 = ptrtoint ptr %686 to i64
  %689 = sub i64 %687, %688
  %690 = trunc i64 %689 to i32
  %691 = zext i32 %690 to i64
  %692 = add i64 %684, %691
  br label %694

693:                                              ; preds = %674
  br label %694

694:                                              ; preds = %693, %683
  %695 = phi i64 [ %692, %683 ], [ 2, %693 ]
  store i64 %695, ptr %12, align 8, !tbaa !12
  br label %570

696:                                              ; preds = %592
  %697 = load i16, ptr %17, align 2, !tbaa !32
  %698 = load ptr, ptr %4, align 8, !tbaa !5
  %699 = getelementptr inbounds %struct.mln_websocket_s, ptr %698, i32 0, i32 12
  store i16 %697, ptr %699, align 2, !tbaa !36
  %700 = load i64, ptr %10, align 8, !tbaa !12
  %701 = sub i64 %700, 2
  store i64 %701, ptr %10, align 8, !tbaa !12
  store i32 0, ptr %16, align 4
  br label %702

702:                                              ; preds = %696, %673
  call void @llvm.lifetime.end.p0(i64 2, ptr %17) #4
  %703 = load i32, ptr %16, align 4
  switch i32 %703, label %1226 [
    i32 0, label %704
  ]

704:                                              ; preds = %702
  br label %708

705:                                              ; preds = %557, %552
  %706 = load ptr, ptr %4, align 8, !tbaa !5
  %707 = getelementptr inbounds %struct.mln_websocket_s, ptr %706, i32 0, i32 12
  store i16 0, ptr %707, align 2, !tbaa !36
  br label %708

708:                                              ; preds = %705, %704
  %709 = load ptr, ptr %4, align 8, !tbaa !5
  %710 = getelementptr inbounds %struct.mln_websocket_s, ptr %709, i32 0, i32 1
  %711 = load ptr, ptr %710, align 8, !tbaa !38
  %712 = load i64, ptr %10, align 8, !tbaa !12
  %713 = call ptr @mln_alloc_m(ptr noundef %711, i64 noundef %712)
  store ptr %713, ptr %9, align 8, !tbaa !5
  %714 = load ptr, ptr %9, align 8, !tbaa !5
  %715 = icmp eq ptr %714, null
  br i1 %715, label %716, label %717

716:                                              ; preds = %708
  store i32 1, ptr %3, align 4
  store i32 1, ptr %16, align 4
  br label %1226

717:                                              ; preds = %708
  %718 = load ptr, ptr %7, align 8, !tbaa !5
  %719 = load ptr, ptr %8, align 8, !tbaa !5
  %720 = ptrtoint ptr %718 to i64
  %721 = ptrtoint ptr %719 to i64
  %722 = sub i64 %720, %721
  store i64 %722, ptr %12, align 8, !tbaa !12
  %723 = load i64, ptr %12, align 8, !tbaa !12
  %724 = load i64, ptr %10, align 8, !tbaa !12
  %725 = icmp ugt i64 %723, %724
  br i1 %725, label %726, label %728

726:                                              ; preds = %717
  %727 = load i64, ptr %10, align 8, !tbaa !12
  store i64 %727, ptr %12, align 8, !tbaa !12
  br label %728

728:                                              ; preds = %726, %717
  store i64 0, ptr %11, align 8, !tbaa !12
  br label %729

729:                                              ; preds = %848, %728
  %730 = load i64, ptr %12, align 8, !tbaa !12
  %731 = icmp ugt i64 %730, 0
  br i1 %731, label %732, label %738

732:                                              ; preds = %729
  %733 = load ptr, ptr %9, align 8, !tbaa !5
  %734 = load i64, ptr %11, align 8, !tbaa !12
  %735 = getelementptr inbounds i8, ptr %733, i64 %734
  %736 = load ptr, ptr %7, align 8, !tbaa !5
  %737 = load i64, ptr %12, align 8, !tbaa !12
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %735, ptr align 1 %736, i64 %737, i1 false)
  br label %738

738:                                              ; preds = %732, %729
  %739 = load i64, ptr %12, align 8, !tbaa !12
  %740 = load i64, ptr %11, align 8, !tbaa !12
  %741 = add i64 %740, %739
  store i64 %741, ptr %11, align 8, !tbaa !12
  %742 = load i64, ptr %12, align 8, !tbaa !12
  %743 = load ptr, ptr %7, align 8, !tbaa !5
  %744 = getelementptr inbounds i8, ptr %743, i64 %742
  store ptr %744, ptr %7, align 8, !tbaa !5
  %745 = load i64, ptr %12, align 8, !tbaa !12
  %746 = load i64, ptr %10, align 8, !tbaa !12
  %747 = icmp ult i64 %745, %746
  br i1 %747, label %748, label %850

748:                                              ; preds = %738
  %749 = load ptr, ptr %6, align 8, !tbaa !5
  %750 = getelementptr inbounds %struct.mln_chain_s, ptr %749, i32 0, i32 1
  %751 = load ptr, ptr %750, align 8, !tbaa !24
  store ptr %751, ptr %6, align 8, !tbaa !5
  br label %752

752:                                              ; preds = %819, %748
  %753 = load ptr, ptr %6, align 8, !tbaa !5
  %754 = icmp ne ptr %753, null
  br i1 %754, label %755, label %823

755:                                              ; preds = %752
  %756 = load ptr, ptr %6, align 8, !tbaa !5
  %757 = getelementptr inbounds %struct.mln_chain_s, ptr %756, i32 0, i32 0
  %758 = load ptr, ptr %757, align 8, !tbaa !14
  %759 = icmp eq ptr %758, null
  br i1 %759, label %807, label %760

760:                                              ; preds = %755
  %761 = load ptr, ptr %6, align 8, !tbaa !5
  %762 = getelementptr inbounds %struct.mln_chain_s, ptr %761, i32 0, i32 0
  %763 = load ptr, ptr %762, align 8, !tbaa !14
  %764 = icmp eq ptr %763, null
  br i1 %764, label %765, label %766

765:                                              ; preds = %760
  br label %804

766:                                              ; preds = %760
  %767 = load ptr, ptr %6, align 8, !tbaa !5
  %768 = getelementptr inbounds %struct.mln_chain_s, ptr %767, i32 0, i32 0
  %769 = load ptr, ptr %768, align 8, !tbaa !14
  %770 = getelementptr inbounds %struct.mln_buf_s, ptr %769, i32 0, i32 10
  %771 = load i8, ptr %770, align 8
  %772 = lshr i8 %771, 3
  %773 = and i8 %772, 1
  %774 = zext i8 %773 to i32
  %775 = icmp ne i32 %774, 0
  br i1 %775, label %776, label %788

776:                                              ; preds = %766
  %777 = load ptr, ptr %6, align 8, !tbaa !5
  %778 = getelementptr inbounds %struct.mln_chain_s, ptr %777, i32 0, i32 0
  %779 = load ptr, ptr %778, align 8, !tbaa !14
  %780 = getelementptr inbounds %struct.mln_buf_s, ptr %779, i32 0, i32 8
  %781 = load i64, ptr %780, align 8, !tbaa !16
  %782 = load ptr, ptr %6, align 8, !tbaa !5
  %783 = getelementptr inbounds %struct.mln_chain_s, ptr %782, i32 0, i32 0
  %784 = load ptr, ptr %783, align 8, !tbaa !14
  %785 = getelementptr inbounds %struct.mln_buf_s, ptr %784, i32 0, i32 6
  %786 = load i64, ptr %785, align 8, !tbaa !18
  %787 = sub nsw i64 %781, %786
  br label %802

788:                                              ; preds = %766
  %789 = load ptr, ptr %6, align 8, !tbaa !5
  %790 = getelementptr inbounds %struct.mln_chain_s, ptr %789, i32 0, i32 0
  %791 = load ptr, ptr %790, align 8, !tbaa !14
  %792 = getelementptr inbounds %struct.mln_buf_s, ptr %791, i32 0, i32 2
  %793 = load ptr, ptr %792, align 8, !tbaa !19
  %794 = load ptr, ptr %6, align 8, !tbaa !5
  %795 = getelementptr inbounds %struct.mln_chain_s, ptr %794, i32 0, i32 0
  %796 = load ptr, ptr %795, align 8, !tbaa !14
  %797 = getelementptr inbounds %struct.mln_buf_s, ptr %796, i32 0, i32 0
  %798 = load ptr, ptr %797, align 8, !tbaa !20
  %799 = ptrtoint ptr %793 to i64
  %800 = ptrtoint ptr %798 to i64
  %801 = sub i64 %799, %800
  br label %802

802:                                              ; preds = %788, %776
  %803 = phi i64 [ %787, %776 ], [ %801, %788 ]
  br label %804

804:                                              ; preds = %802, %765
  %805 = phi i64 [ 0, %765 ], [ %803, %802 ]
  %806 = icmp eq i64 %805, 0
  br i1 %806, label %807, label %808

807:                                              ; preds = %804, %755
  br label %819

808:                                              ; preds = %804
  %809 = load ptr, ptr %6, align 8, !tbaa !5
  %810 = getelementptr inbounds %struct.mln_chain_s, ptr %809, i32 0, i32 0
  %811 = load ptr, ptr %810, align 8, !tbaa !14
  %812 = getelementptr inbounds %struct.mln_buf_s, ptr %811, i32 0, i32 0
  %813 = load ptr, ptr %812, align 8, !tbaa !20
  store ptr %813, ptr %7, align 8, !tbaa !5
  %814 = load ptr, ptr %6, align 8, !tbaa !5
  %815 = getelementptr inbounds %struct.mln_chain_s, ptr %814, i32 0, i32 0
  %816 = load ptr, ptr %815, align 8, !tbaa !14
  %817 = getelementptr inbounds %struct.mln_buf_s, ptr %816, i32 0, i32 4
  %818 = load ptr, ptr %817, align 8, !tbaa !21
  store ptr %818, ptr %8, align 8, !tbaa !5
  br label %823

819:                                              ; preds = %807
  %820 = load ptr, ptr %6, align 8, !tbaa !5
  %821 = getelementptr inbounds %struct.mln_chain_s, ptr %820, i32 0, i32 1
  %822 = load ptr, ptr %821, align 8, !tbaa !24
  store ptr %822, ptr %6, align 8, !tbaa !5
  br label %752, !llvm.loop !39

823:                                              ; preds = %808, %752
  %824 = load ptr, ptr %6, align 8, !tbaa !5
  %825 = icmp eq ptr %824, null
  br i1 %825, label %826, label %828

826:                                              ; preds = %823
  %827 = load ptr, ptr %9, align 8, !tbaa !5
  call void @mln_alloc_free(ptr noundef %827)
  store i32 3, ptr %3, align 4
  store i32 1, ptr %16, align 4
  br label %1226

828:                                              ; preds = %823
  %829 = load i64, ptr %10, align 8, !tbaa !12
  %830 = load i64, ptr %12, align 8, !tbaa !12
  %831 = sub i64 %829, %830
  %832 = load ptr, ptr %7, align 8, !tbaa !5
  %833 = load ptr, ptr %8, align 8, !tbaa !5
  %834 = ptrtoint ptr %832 to i64
  %835 = ptrtoint ptr %833 to i64
  %836 = sub i64 %834, %835
  %837 = icmp ugt i64 %831, %836
  br i1 %837, label %838, label %844

838:                                              ; preds = %828
  %839 = load ptr, ptr %7, align 8, !tbaa !5
  %840 = load ptr, ptr %8, align 8, !tbaa !5
  %841 = ptrtoint ptr %839 to i64
  %842 = ptrtoint ptr %840 to i64
  %843 = sub i64 %841, %842
  br label %848

844:                                              ; preds = %828
  %845 = load i64, ptr %10, align 8, !tbaa !12
  %846 = load i64, ptr %12, align 8, !tbaa !12
  %847 = sub i64 %845, %846
  br label %848

848:                                              ; preds = %844, %838
  %849 = phi i64 [ %843, %838 ], [ %847, %844 ]
  store i64 %849, ptr %12, align 8, !tbaa !12
  br label %729

850:                                              ; preds = %738
  br label %851

851:                                              ; preds = %850, %549
  %852 = load ptr, ptr %4, align 8, !tbaa !5
  %853 = getelementptr inbounds %struct.mln_websocket_s, ptr %852, i32 0, i32 11
  %854 = load i16, ptr %853, align 8
  %855 = and i16 %854, 1
  %856 = icmp ne i16 %855, 0
  br i1 %856, label %857, label %866

857:                                              ; preds = %851
  %858 = load ptr, ptr %4, align 8, !tbaa !5
  %859 = getelementptr inbounds %struct.mln_websocket_s, ptr %858, i32 0, i32 8
  %860 = load ptr, ptr %859, align 8, !tbaa !40
  call void @mln_alloc_free(ptr noundef %860)
  %861 = load ptr, ptr %4, align 8, !tbaa !5
  %862 = getelementptr inbounds %struct.mln_websocket_s, ptr %861, i32 0, i32 11
  %863 = load i16, ptr %862, align 8
  %864 = and i16 %863, -2
  %865 = or i16 %864, 0
  store i16 %865, ptr %862, align 8
  br label %866

866:                                              ; preds = %857, %851
  %867 = load ptr, ptr %9, align 8, !tbaa !5
  %868 = load ptr, ptr %4, align 8, !tbaa !5
  %869 = getelementptr inbounds %struct.mln_websocket_s, ptr %868, i32 0, i32 8
  store ptr %867, ptr %869, align 8, !tbaa !40
  %870 = load ptr, ptr %9, align 8, !tbaa !5
  %871 = icmp ne ptr %870, null
  br i1 %871, label %872, label %878

872:                                              ; preds = %866
  %873 = load ptr, ptr %4, align 8, !tbaa !5
  %874 = getelementptr inbounds %struct.mln_websocket_s, ptr %873, i32 0, i32 11
  %875 = load i16, ptr %874, align 8
  %876 = and i16 %875, -2
  %877 = or i16 %876, 1
  store i16 %877, ptr %874, align 8
  br label %878

878:                                              ; preds = %872, %866
  %879 = load i64, ptr %10, align 8, !tbaa !12
  %880 = load ptr, ptr %4, align 8, !tbaa !5
  %881 = getelementptr inbounds %struct.mln_websocket_s, ptr %880, i32 0, i32 10
  store i64 %879, ptr %881, align 8, !tbaa !41
  %882 = load i8, ptr %14, align 1, !tbaa !11
  %883 = zext i8 %882 to i32
  %884 = and i32 %883, 128
  %885 = icmp ne i32 %884, 0
  br i1 %885, label %886, label %892

886:                                              ; preds = %878
  %887 = load ptr, ptr %4, align 8, !tbaa !5
  %888 = getelementptr inbounds %struct.mln_websocket_s, ptr %887, i32 0, i32 11
  %889 = load i16, ptr %888, align 8
  %890 = and i16 %889, -3
  %891 = or i16 %890, 2
  store i16 %891, ptr %888, align 8
  br label %898

892:                                              ; preds = %878
  %893 = load ptr, ptr %4, align 8, !tbaa !5
  %894 = getelementptr inbounds %struct.mln_websocket_s, ptr %893, i32 0, i32 11
  %895 = load i16, ptr %894, align 8
  %896 = and i16 %895, -3
  %897 = or i16 %896, 0
  store i16 %897, ptr %894, align 8
  br label %898

898:                                              ; preds = %892, %886
  %899 = load i8, ptr %14, align 1, !tbaa !11
  %900 = zext i8 %899 to i32
  %901 = and i32 %900, 64
  %902 = icmp ne i32 %901, 0
  br i1 %902, label %903, label %909

903:                                              ; preds = %898
  %904 = load ptr, ptr %4, align 8, !tbaa !5
  %905 = getelementptr inbounds %struct.mln_websocket_s, ptr %904, i32 0, i32 11
  %906 = load i16, ptr %905, align 8
  %907 = and i16 %906, -5
  %908 = or i16 %907, 4
  store i16 %908, ptr %905, align 8
  br label %915

909:                                              ; preds = %898
  %910 = load ptr, ptr %4, align 8, !tbaa !5
  %911 = getelementptr inbounds %struct.mln_websocket_s, ptr %910, i32 0, i32 11
  %912 = load i16, ptr %911, align 8
  %913 = and i16 %912, -5
  %914 = or i16 %913, 0
  store i16 %914, ptr %911, align 8
  br label %915

915:                                              ; preds = %909, %903
  %916 = load i8, ptr %14, align 1, !tbaa !11
  %917 = zext i8 %916 to i32
  %918 = and i32 %917, 32
  %919 = icmp ne i32 %918, 0
  br i1 %919, label %920, label %926

920:                                              ; preds = %915
  %921 = load ptr, ptr %4, align 8, !tbaa !5
  %922 = getelementptr inbounds %struct.mln_websocket_s, ptr %921, i32 0, i32 11
  %923 = load i16, ptr %922, align 8
  %924 = and i16 %923, -9
  %925 = or i16 %924, 8
  store i16 %925, ptr %922, align 8
  br label %932

926:                                              ; preds = %915
  %927 = load ptr, ptr %4, align 8, !tbaa !5
  %928 = getelementptr inbounds %struct.mln_websocket_s, ptr %927, i32 0, i32 11
  %929 = load i16, ptr %928, align 8
  %930 = and i16 %929, -9
  %931 = or i16 %930, 0
  store i16 %931, ptr %928, align 8
  br label %932

932:                                              ; preds = %926, %920
  %933 = load i8, ptr %14, align 1, !tbaa !11
  %934 = zext i8 %933 to i32
  %935 = and i32 %934, 16
  %936 = icmp ne i32 %935, 0
  br i1 %936, label %937, label %943

937:                                              ; preds = %932
  %938 = load ptr, ptr %4, align 8, !tbaa !5
  %939 = getelementptr inbounds %struct.mln_websocket_s, ptr %938, i32 0, i32 11
  %940 = load i16, ptr %939, align 8
  %941 = and i16 %940, -17
  %942 = or i16 %941, 16
  store i16 %942, ptr %939, align 8
  br label %949

943:                                              ; preds = %932
  %944 = load ptr, ptr %4, align 8, !tbaa !5
  %945 = getelementptr inbounds %struct.mln_websocket_s, ptr %944, i32 0, i32 11
  %946 = load i16, ptr %945, align 8
  %947 = and i16 %946, -17
  %948 = or i16 %947, 0
  store i16 %948, ptr %945, align 8
  br label %949

949:                                              ; preds = %943, %937
  %950 = load i8, ptr %14, align 1, !tbaa !11
  %951 = zext i8 %950 to i32
  %952 = and i32 %951, 15
  %953 = trunc i32 %952 to i16
  %954 = load ptr, ptr %4, align 8, !tbaa !5
  %955 = getelementptr inbounds %struct.mln_websocket_s, ptr %954, i32 0, i32 11
  %956 = load i16, ptr %955, align 8
  %957 = and i16 %953, 15
  %958 = shl i16 %957, 5
  %959 = and i16 %956, -481
  %960 = or i16 %959, %958
  store i16 %960, ptr %955, align 8
  %961 = load i8, ptr %15, align 1, !tbaa !11
  %962 = zext i8 %961 to i32
  %963 = and i32 %962, 128
  %964 = icmp ne i32 %963, 0
  br i1 %964, label %965, label %971

965:                                              ; preds = %949
  %966 = load ptr, ptr %4, align 8, !tbaa !5
  %967 = getelementptr inbounds %struct.mln_websocket_s, ptr %966, i32 0, i32 11
  %968 = load i16, ptr %967, align 8
  %969 = and i16 %968, -513
  %970 = or i16 %969, 512
  store i16 %970, ptr %967, align 8
  br label %977

971:                                              ; preds = %949
  %972 = load ptr, ptr %4, align 8, !tbaa !5
  %973 = getelementptr inbounds %struct.mln_websocket_s, ptr %972, i32 0, i32 11
  %974 = load i16, ptr %973, align 8
  %975 = and i16 %974, -513
  %976 = or i16 %975, 0
  store i16 %976, ptr %973, align 8
  br label %977

977:                                              ; preds = %971, %965
  %978 = load i8, ptr %15, align 1, !tbaa !11
  %979 = zext i8 %978 to i32
  %980 = and i32 %979, 128
  %981 = icmp ne i32 %980, 0
  br i1 %981, label %982, label %986

982:                                              ; preds = %977
  %983 = load i32, ptr %13, align 4, !tbaa !9
  %984 = load ptr, ptr %4, align 8, !tbaa !5
  %985 = getelementptr inbounds %struct.mln_websocket_s, ptr %984, i32 0, i32 13
  store i32 %983, ptr %985, align 4, !tbaa !42
  br label %989

986:                                              ; preds = %977
  %987 = load ptr, ptr %4, align 8, !tbaa !5
  %988 = getelementptr inbounds %struct.mln_websocket_s, ptr %987, i32 0, i32 13
  store i32 0, ptr %988, align 4, !tbaa !42
  br label %989

989:                                              ; preds = %986, %982
  %990 = load ptr, ptr %4, align 8, !tbaa !5
  %991 = getelementptr inbounds %struct.mln_websocket_s, ptr %990, i32 0, i32 11
  %992 = load i16, ptr %991, align 8
  %993 = lshr i16 %992, 9
  %994 = and i16 %993, 1
  %995 = icmp ne i16 %994, 0
  br i1 %995, label %996, label %1095

996:                                              ; preds = %989
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #4
  call void @llvm.lifetime.start.p0(i64 2, ptr %19) #4
  %997 = load ptr, ptr %4, align 8, !tbaa !5
  %998 = getelementptr inbounds %struct.mln_websocket_s, ptr %997, i32 0, i32 12
  %999 = load i16, ptr %998, align 2, !tbaa !36
  store i16 %999, ptr %19, align 2, !tbaa !32
  %1000 = load i32, ptr %13, align 4, !tbaa !9
  %1001 = lshr i32 %1000, 24
  %1002 = and i32 %1001, 255
  %1003 = trunc i32 %1002 to i8
  %1004 = getelementptr inbounds [4 x i8], ptr %18, i64 0, i64 0
  store i8 %1003, ptr %1004, align 1, !tbaa !11
  %1005 = load i32, ptr %13, align 4, !tbaa !9
  %1006 = lshr i32 %1005, 16
  %1007 = and i32 %1006, 255
  %1008 = trunc i32 %1007 to i8
  %1009 = getelementptr inbounds [4 x i8], ptr %18, i64 0, i64 1
  store i8 %1008, ptr %1009, align 1, !tbaa !11
  %1010 = load i32, ptr %13, align 4, !tbaa !9
  %1011 = lshr i32 %1010, 8
  %1012 = and i32 %1011, 255
  %1013 = trunc i32 %1012 to i8
  %1014 = getelementptr inbounds [4 x i8], ptr %18, i64 0, i64 2
  store i8 %1013, ptr %1014, align 1, !tbaa !11
  %1015 = load i32, ptr %13, align 4, !tbaa !9
  %1016 = and i32 %1015, 255
  %1017 = trunc i32 %1016 to i8
  %1018 = getelementptr inbounds [4 x i8], ptr %18, i64 0, i64 3
  store i8 %1017, ptr %1018, align 1, !tbaa !11
  store i64 0, ptr %11, align 8, !tbaa !12
  %1019 = load ptr, ptr %4, align 8, !tbaa !5
  %1020 = getelementptr inbounds %struct.mln_websocket_s, ptr %1019, i32 0, i32 11
  %1021 = load i16, ptr %1020, align 8
  %1022 = lshr i16 %1021, 5
  %1023 = and i16 %1022, 15
  %1024 = zext i16 %1023 to i32
  %1025 = icmp eq i32 %1024, 8
  br i1 %1025, label %1026, label %1068

1026:                                             ; preds = %996
  %1027 = load i16, ptr %19, align 2, !tbaa !32
  %1028 = zext i16 %1027 to i32
  %1029 = icmp ne i32 %1028, 0
  br i1 %1029, label %1030, label %1068

1030:                                             ; preds = %1026
  %1031 = load i16, ptr %19, align 2, !tbaa !32
  %1032 = zext i16 %1031 to i32
  %1033 = ashr i32 %1032, 8
  %1034 = and i32 %1033, 255
  %1035 = load i64, ptr %11, align 8, !tbaa !12
  %1036 = add i64 %1035, 1
  store i64 %1036, ptr %11, align 8, !tbaa !12
  %1037 = urem i64 %1035, 4
  %1038 = getelementptr inbounds [4 x i8], ptr %18, i64 0, i64 %1037
  %1039 = load i8, ptr %1038, align 1, !tbaa !11
  %1040 = zext i8 %1039 to i32
  %1041 = xor i32 %1034, %1040
  %1042 = shl i32 %1041, 8
  %1043 = load i16, ptr %19, align 2, !tbaa !32
  %1044 = zext i16 %1043 to i32
  %1045 = and i32 %1044, 255
  %1046 = or i32 %1042, %1045
  %1047 = trunc i32 %1046 to i16
  store i16 %1047, ptr %19, align 2, !tbaa !32
  %1048 = load i16, ptr %19, align 2, !tbaa !32
  %1049 = zext i16 %1048 to i32
  %1050 = ashr i32 %1049, 8
  %1051 = and i32 %1050, 255
  %1052 = shl i32 %1051, 8
  %1053 = load i16, ptr %19, align 2, !tbaa !32
  %1054 = zext i16 %1053 to i32
  %1055 = and i32 %1054, 255
  %1056 = load i64, ptr %11, align 8, !tbaa !12
  %1057 = add i64 %1056, 1
  store i64 %1057, ptr %11, align 8, !tbaa !12
  %1058 = urem i64 %1056, 4
  %1059 = getelementptr inbounds [4 x i8], ptr %18, i64 0, i64 %1058
  %1060 = load i8, ptr %1059, align 1, !tbaa !11
  %1061 = zext i8 %1060 to i32
  %1062 = xor i32 %1055, %1061
  %1063 = or i32 %1052, %1062
  %1064 = trunc i32 %1063 to i16
  store i16 %1064, ptr %19, align 2, !tbaa !32
  %1065 = load i16, ptr %19, align 2, !tbaa !32
  %1066 = load ptr, ptr %4, align 8, !tbaa !5
  %1067 = getelementptr inbounds %struct.mln_websocket_s, ptr %1066, i32 0, i32 12
  store i16 %1065, ptr %1067, align 2, !tbaa !36
  br label %1068

1068:                                             ; preds = %1030, %1026, %996
  %1069 = load ptr, ptr %9, align 8, !tbaa !5
  %1070 = icmp ne ptr %1069, null
  br i1 %1070, label %1071, label %1094

1071:                                             ; preds = %1068
  store i64 0, ptr %12, align 8, !tbaa !12
  br label %1072

1072:                                             ; preds = %1090, %1071
  %1073 = load i64, ptr %12, align 8, !tbaa !12
  %1074 = load i64, ptr %10, align 8, !tbaa !12
  %1075 = icmp ult i64 %1073, %1074
  br i1 %1075, label %1076, label %1093

1076:                                             ; preds = %1072
  %1077 = load i64, ptr %11, align 8, !tbaa !12
  %1078 = add i64 %1077, 1
  store i64 %1078, ptr %11, align 8, !tbaa !12
  %1079 = urem i64 %1077, 4
  %1080 = getelementptr inbounds [4 x i8], ptr %18, i64 0, i64 %1079
  %1081 = load i8, ptr %1080, align 1, !tbaa !11
  %1082 = zext i8 %1081 to i32
  %1083 = load ptr, ptr %9, align 8, !tbaa !5
  %1084 = load i64, ptr %12, align 8, !tbaa !12
  %1085 = getelementptr inbounds i8, ptr %1083, i64 %1084
  %1086 = load i8, ptr %1085, align 1, !tbaa !11
  %1087 = zext i8 %1086 to i32
  %1088 = xor i32 %1087, %1082
  %1089 = trunc i32 %1088 to i8
  store i8 %1089, ptr %1085, align 1, !tbaa !11
  br label %1090

1090:                                             ; preds = %1076
  %1091 = load i64, ptr %12, align 8, !tbaa !12
  %1092 = add i64 %1091, 1
  store i64 %1092, ptr %12, align 8, !tbaa !12
  br label %1072, !llvm.loop !43

1093:                                             ; preds = %1072
  br label %1094

1094:                                             ; preds = %1093, %1068
  call void @llvm.lifetime.end.p0(i64 2, ptr %19) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #4
  br label %1095

1095:                                             ; preds = %1094, %989
  %1096 = load ptr, ptr %4, align 8, !tbaa !5
  %1097 = getelementptr inbounds %struct.mln_websocket_s, ptr %1096, i32 0, i32 9
  %1098 = load ptr, ptr %1097, align 8, !tbaa !44
  %1099 = icmp ne ptr %1098, null
  br i1 %1099, label %1100, label %1114

1100:                                             ; preds = %1095
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #4
  %1101 = load ptr, ptr %4, align 8, !tbaa !5
  %1102 = getelementptr inbounds %struct.mln_websocket_s, ptr %1101, i32 0, i32 9
  %1103 = load ptr, ptr %1102, align 8, !tbaa !44
  %1104 = load ptr, ptr %4, align 8, !tbaa !5
  %1105 = call i32 %1103(ptr noundef %1104)
  store i32 %1105, ptr %20, align 4, !tbaa !9
  %1106 = load i32, ptr %20, align 4, !tbaa !9
  %1107 = icmp ne i32 %1106, 0
  br i1 %1107, label %1108, label %1110

1108:                                             ; preds = %1100
  %1109 = load i32, ptr %20, align 4, !tbaa !9
  store i32 %1109, ptr %3, align 4
  store i32 1, ptr %16, align 4
  br label %1111

1110:                                             ; preds = %1100
  store i32 0, ptr %16, align 4
  br label %1111

1111:                                             ; preds = %1110, %1108
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #4
  %1112 = load i32, ptr %16, align 4
  switch i32 %1112, label %1226 [
    i32 0, label %1113
  ]

1113:                                             ; preds = %1111
  br label %1114

1114:                                             ; preds = %1113, %1095
  %1115 = load ptr, ptr %6, align 8, !tbaa !5
  %1116 = icmp ne ptr %1115, null
  br i1 %1116, label %1117, label %1128

1117:                                             ; preds = %1114
  %1118 = load ptr, ptr %6, align 8, !tbaa !5
  %1119 = getelementptr inbounds %struct.mln_chain_s, ptr %1118, i32 0, i32 0
  %1120 = load ptr, ptr %1119, align 8, !tbaa !14
  %1121 = icmp ne ptr %1120, null
  br i1 %1121, label %1122, label %1128

1122:                                             ; preds = %1117
  %1123 = load ptr, ptr %7, align 8, !tbaa !5
  %1124 = load ptr, ptr %6, align 8, !tbaa !5
  %1125 = getelementptr inbounds %struct.mln_chain_s, ptr %1124, i32 0, i32 0
  %1126 = load ptr, ptr %1125, align 8, !tbaa !14
  %1127 = getelementptr inbounds %struct.mln_buf_s, ptr %1126, i32 0, i32 0
  store ptr %1123, ptr %1127, align 8, !tbaa !20
  br label %1128

1128:                                             ; preds = %1122, %1117, %1114
  br label %1129

1129:                                             ; preds = %1186, %1128
  %1130 = load ptr, ptr %6, align 8, !tbaa !5
  %1131 = icmp ne ptr %1130, null
  br i1 %1131, label %1132, label %1190

1132:                                             ; preds = %1129
  %1133 = load ptr, ptr %6, align 8, !tbaa !5
  %1134 = getelementptr inbounds %struct.mln_chain_s, ptr %1133, i32 0, i32 0
  %1135 = load ptr, ptr %1134, align 8, !tbaa !14
  %1136 = icmp eq ptr %1135, null
  br i1 %1136, label %1184, label %1137

1137:                                             ; preds = %1132
  %1138 = load ptr, ptr %6, align 8, !tbaa !5
  %1139 = getelementptr inbounds %struct.mln_chain_s, ptr %1138, i32 0, i32 0
  %1140 = load ptr, ptr %1139, align 8, !tbaa !14
  %1141 = icmp eq ptr %1140, null
  br i1 %1141, label %1142, label %1143

1142:                                             ; preds = %1137
  br label %1181

1143:                                             ; preds = %1137
  %1144 = load ptr, ptr %6, align 8, !tbaa !5
  %1145 = getelementptr inbounds %struct.mln_chain_s, ptr %1144, i32 0, i32 0
  %1146 = load ptr, ptr %1145, align 8, !tbaa !14
  %1147 = getelementptr inbounds %struct.mln_buf_s, ptr %1146, i32 0, i32 10
  %1148 = load i8, ptr %1147, align 8
  %1149 = lshr i8 %1148, 3
  %1150 = and i8 %1149, 1
  %1151 = zext i8 %1150 to i32
  %1152 = icmp ne i32 %1151, 0
  br i1 %1152, label %1153, label %1165

1153:                                             ; preds = %1143
  %1154 = load ptr, ptr %6, align 8, !tbaa !5
  %1155 = getelementptr inbounds %struct.mln_chain_s, ptr %1154, i32 0, i32 0
  %1156 = load ptr, ptr %1155, align 8, !tbaa !14
  %1157 = getelementptr inbounds %struct.mln_buf_s, ptr %1156, i32 0, i32 8
  %1158 = load i64, ptr %1157, align 8, !tbaa !16
  %1159 = load ptr, ptr %6, align 8, !tbaa !5
  %1160 = getelementptr inbounds %struct.mln_chain_s, ptr %1159, i32 0, i32 0
  %1161 = load ptr, ptr %1160, align 8, !tbaa !14
  %1162 = getelementptr inbounds %struct.mln_buf_s, ptr %1161, i32 0, i32 6
  %1163 = load i64, ptr %1162, align 8, !tbaa !18
  %1164 = sub nsw i64 %1158, %1163
  br label %1179

1165:                                             ; preds = %1143
  %1166 = load ptr, ptr %6, align 8, !tbaa !5
  %1167 = getelementptr inbounds %struct.mln_chain_s, ptr %1166, i32 0, i32 0
  %1168 = load ptr, ptr %1167, align 8, !tbaa !14
  %1169 = getelementptr inbounds %struct.mln_buf_s, ptr %1168, i32 0, i32 2
  %1170 = load ptr, ptr %1169, align 8, !tbaa !19
  %1171 = load ptr, ptr %6, align 8, !tbaa !5
  %1172 = getelementptr inbounds %struct.mln_chain_s, ptr %1171, i32 0, i32 0
  %1173 = load ptr, ptr %1172, align 8, !tbaa !14
  %1174 = getelementptr inbounds %struct.mln_buf_s, ptr %1173, i32 0, i32 0
  %1175 = load ptr, ptr %1174, align 8, !tbaa !20
  %1176 = ptrtoint ptr %1170 to i64
  %1177 = ptrtoint ptr %1175 to i64
  %1178 = sub i64 %1176, %1177
  br label %1179

1179:                                             ; preds = %1165, %1153
  %1180 = phi i64 [ %1164, %1153 ], [ %1178, %1165 ]
  br label %1181

1181:                                             ; preds = %1179, %1142
  %1182 = phi i64 [ 0, %1142 ], [ %1180, %1179 ]
  %1183 = icmp eq i64 %1182, 0
  br i1 %1183, label %1184, label %1185

1184:                                             ; preds = %1181, %1132
  br label %1186

1185:                                             ; preds = %1181
  br label %1190

1186:                                             ; preds = %1184
  %1187 = load ptr, ptr %6, align 8, !tbaa !5
  %1188 = getelementptr inbounds %struct.mln_chain_s, ptr %1187, i32 0, i32 1
  %1189 = load ptr, ptr %1188, align 8, !tbaa !24
  store ptr %1189, ptr %6, align 8, !tbaa !5
  br label %1129, !llvm.loop !45

1190:                                             ; preds = %1185, %1129
  %1191 = load ptr, ptr %6, align 8, !tbaa !5
  %1192 = icmp eq ptr %1191, null
  br i1 %1192, label %1193, label %1197

1193:                                             ; preds = %1190
  %1194 = load ptr, ptr %5, align 8, !tbaa !5
  %1195 = load ptr, ptr %1194, align 8, !tbaa !5
  call void @mln_chain_pool_release_all(ptr noundef %1195)
  %1196 = load ptr, ptr %5, align 8, !tbaa !5
  store ptr null, ptr %1196, align 8, !tbaa !5
  br label %1225

1197:                                             ; preds = %1190
  %1198 = load ptr, ptr %6, align 8, !tbaa !5
  %1199 = load ptr, ptr %5, align 8, !tbaa !5
  %1200 = load ptr, ptr %1199, align 8, !tbaa !5
  %1201 = icmp ne ptr %1198, %1200
  br i1 %1201, label %1202, label %1224

1202:                                             ; preds = %1197
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #4
  %1203 = load ptr, ptr %5, align 8, !tbaa !5
  %1204 = load ptr, ptr %1203, align 8, !tbaa !5
  store ptr %1204, ptr %21, align 8, !tbaa !5
  %1205 = load ptr, ptr %6, align 8, !tbaa !5
  %1206 = load ptr, ptr %5, align 8, !tbaa !5
  store ptr %1205, ptr %1206, align 8, !tbaa !5
  %1207 = load ptr, ptr %21, align 8, !tbaa !5
  store ptr %1207, ptr %6, align 8, !tbaa !5
  br label %1208

1208:                                             ; preds = %1216, %1202
  %1209 = load ptr, ptr %6, align 8, !tbaa !5
  %1210 = getelementptr inbounds %struct.mln_chain_s, ptr %1209, i32 0, i32 1
  %1211 = load ptr, ptr %1210, align 8, !tbaa !24
  %1212 = load ptr, ptr %5, align 8, !tbaa !5
  %1213 = load ptr, ptr %1212, align 8, !tbaa !5
  %1214 = icmp ne ptr %1211, %1213
  br i1 %1214, label %1215, label %1220

1215:                                             ; preds = %1208
  br label %1216

1216:                                             ; preds = %1215
  %1217 = load ptr, ptr %6, align 8, !tbaa !5
  %1218 = getelementptr inbounds %struct.mln_chain_s, ptr %1217, i32 0, i32 1
  %1219 = load ptr, ptr %1218, align 8, !tbaa !24
  store ptr %1219, ptr %6, align 8, !tbaa !5
  br label %1208, !llvm.loop !46

1220:                                             ; preds = %1208
  %1221 = load ptr, ptr %6, align 8, !tbaa !5
  %1222 = getelementptr inbounds %struct.mln_chain_s, ptr %1221, i32 0, i32 1
  store ptr null, ptr %1222, align 8, !tbaa !24
  %1223 = load ptr, ptr %21, align 8, !tbaa !5
  call void @mln_chain_pool_release_all(ptr noundef %1223)
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #4
  br label %1224

1224:                                             ; preds = %1220, %1197
  br label %1225

1225:                                             ; preds = %1224, %1193
  store i32 0, ptr %3, align 4
  store i32 1, ptr %16, align 4
  br label %1226

1226:                                             ; preds = %1225, %1111, %826, %716, %702, %525, %384, %245, %125
  call void @llvm.lifetime.end.p0(i64 1, ptr %15) #4
  call void @llvm.lifetime.end.p0(i64 1, ptr %14) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #4
  %1227 = load i32, ptr %3, align 4
  ret i32 %1227
}

declare void @mln_chain_pool_release_all(ptr noundef) #1

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!7, !7, i64 0}
!12 = !{!13, !13, i64 0}
!13 = !{!"long", !7, i64 0}
!14 = !{!15, !6, i64 0}
!15 = !{!"mln_chain_s", !6, i64 0, !6, i64 8}
!16 = !{!17, !13, i64 64}
!17 = !{!"mln_buf_s", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !13, i64 48, !13, i64 56, !13, i64 64, !6, i64 72, !10, i64 80, !10, i64 80, !10, i64 80, !10, i64 80, !10, i64 80, !10, i64 80, !10, i64 80, !10, i64 80}
!18 = !{!17, !13, i64 48}
!19 = !{!17, !6, i64 16}
!20 = !{!17, !6, i64 0}
!21 = !{!17, !6, i64 32}
!22 = distinct !{!22, !23}
!23 = !{!"llvm.loop.mustprogress"}
!24 = !{!15, !6, i64 8}
!25 = distinct !{!25, !23}
!26 = distinct !{!26, !23}
!27 = distinct !{!27, !23}
!28 = distinct !{!28, !23}
!29 = distinct !{!29, !23}
!30 = distinct !{!30, !23}
!31 = distinct !{!31, !23}
!32 = !{!33, !33, i64 0}
!33 = !{!"short", !7, i64 0}
!34 = distinct !{!34, !23}
!35 = distinct !{!35, !23}
!36 = !{!37, !33, i64 90}
!37 = !{!"mln_websocket_s", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !6, i64 56, !6, i64 64, !6, i64 72, !13, i64 80, !33, i64 88, !33, i64 88, !33, i64 88, !33, i64 88, !33, i64 88, !33, i64 88, !33, i64 89, !33, i64 89, !33, i64 90, !10, i64 92}
!38 = !{!37, !6, i64 8}
!39 = distinct !{!39, !23}
!40 = !{!37, !6, i64 64}
!41 = !{!37, !13, i64 80}
!42 = !{!37, !10, i64 92}
!43 = distinct !{!43, !23}
!44 = !{!37, !6, i64 72}
!45 = distinct !{!45, !23}
!46 = distinct !{!46, !23}


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

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

declare ptr @mln_alloc_m(ptr noundef, i64 noundef) local_unnamed_addr #1

declare void @mln_alloc_free(ptr noundef) local_unnamed_addr #1

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

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

; Function Attrs: nounwind uwtable
define dso_local i32 @mln_websocket_parse(ptr noundef nonnull %0, ptr nocapture noundef %1) local_unnamed_addr #3 {
  %3 = alloca [4 x i8], align 1
  %.0285523 = load ptr, ptr %1, align 8, !tbaa !5
  %.not524 = icmp eq ptr %.0285523, null
  %.14326.sroa.gep = getelementptr inbounds i8, ptr %3, i64 2
  %.14326.sroa.gep993 = getelementptr inbounds i8, ptr %3, i64 2
  br i1 %.not524, label %.thread440, label %.lr.ph531

.lr.ph531:                                        ; preds = %2, %._crit_edge
  %.0285529 = phi ptr [ %.0285, %._crit_edge ], [ %.0285523, %2 ]
  %.0298528 = phi i8 [ %.2300, %._crit_edge ], [ 0, %2 ]
  %.0312527 = phi i64 [ %.3315, %._crit_edge ], [ 0, %2 ]
  %4 = load ptr, ptr %.0285529, align 8, !tbaa !9
  %5 = icmp eq ptr %4, null
  br i1 %5, label %._crit_edge, label %6

6:                                                ; preds = %.lr.ph531
  %7 = getelementptr inbounds i8, ptr %4, i64 80
  %8 = load i8, ptr %7, align 8
  %9 = and i8 %8, 8
  %.not393 = icmp eq i8 %9, 0
  br i1 %.not393, label %16, label %10

10:                                               ; preds = %6
  %11 = getelementptr inbounds i8, ptr %4, i64 64
  %12 = load i64, ptr %11, align 8, !tbaa !11
  %13 = getelementptr inbounds i8, ptr %4, i64 48
  %14 = load i64, ptr %13, align 8, !tbaa !15
  %15 = sub nsw i64 %12, %14
  br label %23

16:                                               ; preds = %6
  %17 = getelementptr inbounds i8, ptr %4, i64 16
  %18 = load ptr, ptr %17, align 8, !tbaa !16
  %19 = load ptr, ptr %4, align 8, !tbaa !17
  %20 = ptrtoint ptr %18 to i64
  %21 = ptrtoint ptr %19 to i64
  %22 = sub i64 %20, %21
  br label %23

23:                                               ; preds = %10, %16
  %24 = phi i64 [ %15, %10 ], [ %22, %16 ]
  %25 = icmp eq i64 %24, 0
  br i1 %25, label %._crit_edge, label %26

26:                                               ; preds = %23
  %27 = load ptr, ptr %4, align 8, !tbaa !17
  %28 = getelementptr inbounds i8, ptr %4, i64 32
  %29 = load ptr, ptr %28, align 8, !tbaa !18
  %30 = icmp ult ptr %27, %29
  br i1 %30, label %.lr.ph.preheader, label %._crit_edge

.lr.ph.preheader:                                 ; preds = %26
  %31 = icmp eq i64 %.0312527, 0
  br i1 %31, label %32, label %.thread430

32:                                               ; preds = %.lr.ph.preheader
  %33 = load i8, ptr %27, align 1, !tbaa !19
  %34 = getelementptr inbounds i8, ptr %27, i64 1
  %exitcond.peel.not = icmp eq ptr %34, %29
  br i1 %exitcond.peel.not, label %._crit_edge, label %.thread430

._crit_edge:                                      ; preds = %26, %32, %.lr.ph531, %23
  %.3315 = phi i64 [ %.0312527, %.lr.ph531 ], [ %.0312527, %23 ], [ %.0312527, %26 ], [ 1, %32 ]
  %.2300 = phi i8 [ %.0298528, %.lr.ph531 ], [ %.0298528, %23 ], [ %.0298528, %26 ], [ %33, %32 ]
  %35 = getelementptr inbounds i8, ptr %.0285529, i64 8
  %.0285 = load ptr, ptr %35, align 8, !tbaa !5
  %.not = icmp eq ptr %.0285, null
  br i1 %.not, label %.thread440, label %.lr.ph531, !llvm.loop !20

.thread430:                                       ; preds = %32, %.lr.ph.preheader
  %.1299520.lcssa = phi i8 [ %33, %32 ], [ %.0298528, %.lr.ph.preheader ]
  %.1355518.lcssa = phi ptr [ %34, %32 ], [ %27, %.lr.ph.preheader ]
  %36 = getelementptr inbounds i8, ptr %.1355518.lcssa, i64 1
  %37 = load i8, ptr %.1355518.lcssa, align 1, !tbaa !19
  %38 = and i8 %37, 127
  %39 = icmp eq i8 %38, 127
  br i1 %39, label %40, label %110

40:                                               ; preds = %.thread430
  %41 = ptrtoint ptr %36 to i64
  %42 = ptrtoint ptr %29 to i64
  %43 = sub i64 %41, %42
  %spec.store.select = tail call i64 @llvm.umin.i64(i64 %43, i64 8)
  br label %44

44:                                               ; preds = %98, %40
  %.5359 = phi ptr [ %36, %40 ], [ %99, %98 ]
  %.3340 = phi ptr [ %29, %40 ], [ %101, %98 ]
  %.0328 = phi i64 [ 0, %40 ], [ %.1329.lcssa, %98 ]
  %.5317 = phi i64 [ 0, %40 ], [ %.6318.lcssa, %98 ]
  %.0305 = phi i64 [ %spec.store.select, %40 ], [ %109, %98 ]
  %.1286 = phi ptr [ %.0285529, %40 ], [ %.2287564, %98 ]
  %45 = icmp ult i64 %.5317, %.0305
  br i1 %45, label %.lr.ph556.preheader, label %._crit_edge557

.lr.ph556.preheader:                              ; preds = %44
  %46 = sub i64 %.0305, %.5317
  %.neg995 = add i64 %.5317, 1
  %xtraiter987 = and i64 %46, 1
  %lcmp.mod988.not = icmp eq i64 %xtraiter987, 0
  br i1 %lcmp.mod988.not, label %.lr.ph556.prol.loopexit, label %.lr.ph556.prol

.lr.ph556.prol:                                   ; preds = %.lr.ph556.preheader
  %47 = getelementptr inbounds i8, ptr %.5359, i64 1
  %48 = load i8, ptr %.5359, align 1, !tbaa !19
  %49 = zext i8 %48 to i32
  %.6318.tr.prol = trunc i64 %.5317 to i32
  %50 = shl i32 %.6318.tr.prol, 3
  %51 = sub i32 56, %50
  %52 = shl i32 %49, %51
  %53 = sext i32 %52 to i64
  %54 = or i64 %.0328, %53
  %55 = add nuw i64 %.5317, 1
  br label %.lr.ph556.prol.loopexit

.lr.ph556.prol.loopexit:                          ; preds = %.lr.ph556.prol, %.lr.ph556.preheader
  %.lcssa957.unr = phi i64 [ poison, %.lr.ph556.preheader ], [ %54, %.lr.ph556.prol ]
  %.6318554.unr = phi i64 [ %.5317, %.lr.ph556.preheader ], [ %55, %.lr.ph556.prol ]
  %.1329553.unr = phi i64 [ %.0328, %.lr.ph556.preheader ], [ %54, %.lr.ph556.prol ]
  %.6360552.unr = phi ptr [ %.5359, %.lr.ph556.preheader ], [ %47, %.lr.ph556.prol ]
  %56 = icmp eq i64 %.0305, %.neg995
  br i1 %56, label %._crit_edge557.loopexit, label %.lr.ph556

.lr.ph556:                                        ; preds = %.lr.ph556.prol.loopexit, %.lr.ph556
  %.6318554 = phi i64 [ %73, %.lr.ph556 ], [ %.6318554.unr, %.lr.ph556.prol.loopexit ]
  %.1329553 = phi i64 [ %72, %.lr.ph556 ], [ %.1329553.unr, %.lr.ph556.prol.loopexit ]
  %.6360552 = phi ptr [ %65, %.lr.ph556 ], [ %.6360552.unr, %.lr.ph556.prol.loopexit ]
  %57 = getelementptr inbounds i8, ptr %.6360552, i64 1
  %58 = load i8, ptr %.6360552, align 1, !tbaa !19
  %59 = zext i8 %58 to i32
  %.6318.tr = trunc i64 %.6318554 to i32
  %60 = shl i32 %.6318.tr, 3
  %61 = sub i32 56, %60
  %62 = shl i32 %59, %61
  %63 = sext i32 %62 to i64
  %64 = or i64 %.1329553, %63
  %65 = getelementptr inbounds i8, ptr %.6360552, i64 2
  %66 = load i8, ptr %57, align 1, !tbaa !19
  %67 = zext i8 %66 to i32
  %68 = trunc i64 %.6318554 to i32
  %.6318.tr.1 = shl i32 %68, 3
  %69 = sub i32 48, %.6318.tr.1
  %70 = shl i32 %67, %69
  %71 = sext i32 %70 to i64
  %72 = or i64 %64, %71
  %73 = add nuw i64 %.6318554, 2
  %exitcond707.not.1 = icmp eq i64 %73, %.0305
  br i1 %exitcond707.not.1, label %._crit_edge557.loopexit, label %.lr.ph556, !llvm.loop !22

._crit_edge557.loopexit:                          ; preds = %.lr.ph556, %.lr.ph556.prol.loopexit
  %.lcssa957 = phi i64 [ %.lcssa957.unr, %.lr.ph556.prol.loopexit ], [ %72, %.lr.ph556 ]
  %scevgep706 = getelementptr i8, ptr %.5359, i64 %46
  br label %._crit_edge557

._crit_edge557:                                   ; preds = %._crit_edge557.loopexit, %44
  %.6360.lcssa = phi ptr [ %.5359, %44 ], [ %scevgep706, %._crit_edge557.loopexit ]
  %.1329.lcssa = phi i64 [ %.0328, %44 ], [ %.lcssa957, %._crit_edge557.loopexit ]
  %.6318.lcssa = phi i64 [ %.5317, %44 ], [ %.0305, %._crit_edge557.loopexit ]
  %74 = icmp ult i64 %.0305, 8
  br i1 %74, label %.preheader466, label %.loopexit468

.preheader466:                                    ; preds = %._crit_edge557
  %.2287.in561 = getelementptr inbounds i8, ptr %.1286, i64 8
  %.2287562 = load ptr, ptr %.2287.in561, align 8, !tbaa !23
  %.not424563 = icmp eq ptr %.2287562, null
  br i1 %.not424563, label %.thread440, label %.lr.ph565

.lr.ph565:                                        ; preds = %.preheader466, %97
  %.2287564 = phi ptr [ %.2287, %97 ], [ %.2287562, %.preheader466 ]
  %75 = load ptr, ptr %.2287564, align 8, !tbaa !9
  %76 = icmp eq ptr %75, null
  br i1 %76, label %97, label %77

77:                                               ; preds = %.lr.ph565
  %78 = getelementptr inbounds i8, ptr %75, i64 80
  %79 = load i8, ptr %78, align 8
  %80 = and i8 %79, 8
  %.not425 = icmp eq i8 %80, 0
  br i1 %.not425, label %87, label %81

81:                                               ; preds = %77
  %82 = getelementptr inbounds i8, ptr %75, i64 64
  %83 = load i64, ptr %82, align 8, !tbaa !11
  %84 = getelementptr inbounds i8, ptr %75, i64 48
  %85 = load i64, ptr %84, align 8, !tbaa !15
  %86 = sub nsw i64 %83, %85
  br label %94

87:                                               ; preds = %77
  %88 = getelementptr inbounds i8, ptr %75, i64 16
  %89 = load ptr, ptr %88, align 8, !tbaa !16
  %90 = load ptr, ptr %75, align 8, !tbaa !17
  %91 = ptrtoint ptr %89 to i64
  %92 = ptrtoint ptr %90 to i64
  %93 = sub i64 %91, %92
  br label %94

94:                                               ; preds = %81, %87
  %95 = phi i64 [ %86, %81 ], [ %93, %87 ]
  %96 = icmp eq i64 %95, 0
  br i1 %96, label %97, label %98

97:                                               ; preds = %.lr.ph565, %94
  %.2287.in = getelementptr inbounds i8, ptr %.2287564, i64 8
  %.2287 = load ptr, ptr %.2287.in, align 8, !tbaa !23
  %.not424 = icmp eq ptr %.2287, null
  br i1 %.not424, label %.thread440, label %.lr.ph565, !llvm.loop !24

98:                                               ; preds = %94
  %99 = load ptr, ptr %75, align 8, !tbaa !17
  %100 = getelementptr inbounds i8, ptr %75, i64 32
  %101 = load ptr, ptr %100, align 8, !tbaa !18
  %102 = sub nuw nsw i64 8, %.0305
  %103 = ptrtoint ptr %99 to i64
  %104 = ptrtoint ptr %101 to i64
  %105 = sub i64 %103, %104
  %106 = icmp ugt i64 %102, %105
  %107 = and i64 %105, 4294967295
  %108 = add nuw nsw i64 %107, %.0305
  %109 = select i1 %106, i64 %108, i64 8
  br label %44

110:                                              ; preds = %.thread430
  %111 = zext nneg i8 %38 to i64
  %112 = icmp eq i8 %38, 126
  br i1 %112, label %113, label %.loopexit468

113:                                              ; preds = %110
  %114 = ptrtoint ptr %36 to i64
  %115 = ptrtoint ptr %29 to i64
  %116 = sub i64 %114, %115
  %spec.store.select2 = tail call i64 @llvm.umin.i64(i64 %116, i64 2)
  br label %117

117:                                              ; preds = %170, %113
  %.8362 = phi ptr [ %36, %113 ], [ %171, %170 ]
  %.5342 = phi ptr [ %29, %113 ], [ %173, %170 ]
  %.2330 = phi i64 [ 0, %113 ], [ %.3331.lcssa, %170 ]
  %.7319 = phi i64 [ 0, %113 ], [ %.8320.lcssa, %170 ]
  %.1306 = phi i64 [ %spec.store.select2, %113 ], [ %181, %170 ]
  %.3288 = phi ptr [ %.0285529, %113 ], [ %.4289550, %170 ]
  %118 = icmp ult i64 %.7319, %.1306
  br i1 %118, label %.lr.ph542.preheader, label %._crit_edge543

.lr.ph542.preheader:                              ; preds = %117
  %119 = sub i64 %.1306, %.7319
  %.neg = add i64 %.7319, 1
  %xtraiter = and i64 %119, 1
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.lr.ph542.prol.loopexit, label %.lr.ph542.prol

.lr.ph542.prol:                                   ; preds = %.lr.ph542.preheader
  %120 = getelementptr inbounds i8, ptr %.8362, i64 1
  %121 = load i8, ptr %.8362, align 1, !tbaa !19
  %122 = zext i8 %121 to i32
  %.8320.tr.prol = trunc i64 %.7319 to i32
  %123 = shl i32 %.8320.tr.prol, 3
  %124 = sub i32 8, %123
  %125 = shl i32 %122, %124
  %126 = sext i32 %125 to i64
  %127 = or i64 %.2330, %126
  %128 = add nuw i64 %.7319, 1
  br label %.lr.ph542.prol.loopexit

.lr.ph542.prol.loopexit:                          ; preds = %.lr.ph542.prol, %.lr.ph542.preheader
  %.lcssa972.unr = phi i64 [ poison, %.lr.ph542.preheader ], [ %127, %.lr.ph542.prol ]
  %.8320540.unr = phi i64 [ %.7319, %.lr.ph542.preheader ], [ %128, %.lr.ph542.prol ]
  %.3331539.unr = phi i64 [ %.2330, %.lr.ph542.preheader ], [ %127, %.lr.ph542.prol ]
  %.9363538.unr = phi ptr [ %.8362, %.lr.ph542.preheader ], [ %120, %.lr.ph542.prol ]
  %129 = icmp eq i64 %.1306, %.neg
  br i1 %129, label %._crit_edge543.loopexit, label %.lr.ph542

.lr.ph542:                                        ; preds = %.lr.ph542.prol.loopexit, %.lr.ph542
  %.8320540 = phi i64 [ %145, %.lr.ph542 ], [ %.8320540.unr, %.lr.ph542.prol.loopexit ]
  %.3331539 = phi i64 [ %144, %.lr.ph542 ], [ %.3331539.unr, %.lr.ph542.prol.loopexit ]
  %.9363538 = phi ptr [ %138, %.lr.ph542 ], [ %.9363538.unr, %.lr.ph542.prol.loopexit ]
  %130 = getelementptr inbounds i8, ptr %.9363538, i64 1
  %131 = load i8, ptr %.9363538, align 1, !tbaa !19
  %132 = zext i8 %131 to i32
  %.8320.tr = trunc i64 %.8320540 to i32
  %133 = shl i32 %.8320.tr, 3
  %134 = sub i32 8, %133
  %135 = shl i32 %132, %134
  %136 = sext i32 %135 to i64
  %137 = or i64 %.3331539, %136
  %138 = getelementptr inbounds i8, ptr %.9363538, i64 2
  %139 = load i8, ptr %130, align 1, !tbaa !19
  %140 = zext i8 %139 to i32
  %141 = trunc i64 %.8320540 to i32
  %.8320.tr.1.neg = mul i32 %141, -8
  %142 = shl i32 %140, %.8320.tr.1.neg
  %143 = sext i32 %142 to i64
  %144 = or i64 %137, %143
  %145 = add nuw i64 %.8320540, 2
  %exitcond.not.1 = icmp eq i64 %145, %.1306
  br i1 %exitcond.not.1, label %._crit_edge543.loopexit, label %.lr.ph542, !llvm.loop !25

._crit_edge543.loopexit:                          ; preds = %.lr.ph542, %.lr.ph542.prol.loopexit
  %.lcssa972 = phi i64 [ %.lcssa972.unr, %.lr.ph542.prol.loopexit ], [ %144, %.lr.ph542 ]
  %scevgep705 = getelementptr i8, ptr %.8362, i64 %119
  br label %._crit_edge543

._crit_edge543:                                   ; preds = %._crit_edge543.loopexit, %117
  %.9363.lcssa = phi ptr [ %.8362, %117 ], [ %scevgep705, %._crit_edge543.loopexit ]
  %.3331.lcssa = phi i64 [ %.2330, %117 ], [ %.lcssa972, %._crit_edge543.loopexit ]
  %.8320.lcssa = phi i64 [ %.7319, %117 ], [ %.1306, %._crit_edge543.loopexit ]
  %146 = icmp ult i64 %.1306, 2
  br i1 %146, label %.preheader469, label %.loopexit468

.preheader469:                                    ; preds = %._crit_edge543
  %.4289.in547 = getelementptr inbounds i8, ptr %.3288, i64 8
  %.4289548 = load ptr, ptr %.4289.in547, align 8, !tbaa !23
  %.not394549 = icmp eq ptr %.4289548, null
  br i1 %.not394549, label %.thread440, label %.lr.ph551

.lr.ph551:                                        ; preds = %.preheader469, %169
  %.4289550 = phi ptr [ %.4289, %169 ], [ %.4289548, %.preheader469 ]
  %147 = load ptr, ptr %.4289550, align 8, !tbaa !9
  %148 = icmp eq ptr %147, null
  br i1 %148, label %169, label %149

149:                                              ; preds = %.lr.ph551
  %150 = getelementptr inbounds i8, ptr %147, i64 80
  %151 = load i8, ptr %150, align 8
  %152 = and i8 %151, 8
  %.not395 = icmp eq i8 %152, 0
  br i1 %.not395, label %159, label %153

153:                                              ; preds = %149
  %154 = getelementptr inbounds i8, ptr %147, i64 64
  %155 = load i64, ptr %154, align 8, !tbaa !11
  %156 = getelementptr inbounds i8, ptr %147, i64 48
  %157 = load i64, ptr %156, align 8, !tbaa !15
  %158 = sub nsw i64 %155, %157
  br label %166

159:                                              ; preds = %149
  %160 = getelementptr inbounds i8, ptr %147, i64 16
  %161 = load ptr, ptr %160, align 8, !tbaa !16
  %162 = load ptr, ptr %147, align 8, !tbaa !17
  %163 = ptrtoint ptr %161 to i64
  %164 = ptrtoint ptr %162 to i64
  %165 = sub i64 %163, %164
  br label %166

166:                                              ; preds = %153, %159
  %167 = phi i64 [ %158, %153 ], [ %165, %159 ]
  %168 = icmp eq i64 %167, 0
  br i1 %168, label %169, label %170

169:                                              ; preds = %.lr.ph551, %166
  %.4289.in = getelementptr inbounds i8, ptr %.4289550, i64 8
  %.4289 = load ptr, ptr %.4289.in, align 8, !tbaa !23
  %.not394 = icmp eq ptr %.4289, null
  br i1 %.not394, label %.thread440, label %.lr.ph551, !llvm.loop !26

170:                                              ; preds = %166
  %171 = load ptr, ptr %147, align 8, !tbaa !17
  %172 = getelementptr inbounds i8, ptr %147, i64 32
  %173 = load ptr, ptr %172, align 8, !tbaa !18
  %174 = sub nuw nsw i64 2, %.1306
  %175 = ptrtoint ptr %171 to i64
  %176 = ptrtoint ptr %173 to i64
  %177 = sub i64 %175, %176
  %178 = icmp ugt i64 %174, %177
  %179 = and i64 %177, 4294967295
  %180 = add nuw nsw i64 %179, %.1306
  %181 = select i1 %178, i64 %180, i64 2
  br label %117

.loopexit468:                                     ; preds = %._crit_edge543, %._crit_edge557, %110
  %.11365 = phi ptr [ %36, %110 ], [ %.6360.lcssa, %._crit_edge557 ], [ %.9363.lcssa, %._crit_edge543 ]
  %.7344 = phi ptr [ %29, %110 ], [ %.3340, %._crit_edge557 ], [ %.5342, %._crit_edge543 ]
  %.4332 = phi i64 [ %111, %110 ], [ %.1329.lcssa, %._crit_edge557 ], [ %.3331.lcssa, %._crit_edge543 ]
  %.5 = phi ptr [ %.0285529, %110 ], [ %.1286, %._crit_edge557 ], [ %.3288, %._crit_edge543 ]
  %.not396 = icmp sgt i8 %37, -1
  br i1 %.not396, label %.loopexit465, label %182

182:                                              ; preds = %.loopexit468
  %183 = ptrtoint ptr %.11365 to i64
  %184 = ptrtoint ptr %.7344 to i64
  %185 = sub i64 %183, %184
  %spec.store.select3 = tail call i64 @llvm.umin.i64(i64 %185, i64 4)
  br label %186

186:                                              ; preds = %235, %182
  %.12366 = phi ptr [ %.11365, %182 ], [ %236, %235 ]
  %.8345 = phi ptr [ %.7344, %182 ], [ %238, %235 ]
  %.9321 = phi i64 [ 0, %182 ], [ %.10322.lcssa, %235 ]
  %.2307 = phi i64 [ %spec.store.select3, %182 ], [ %246, %235 ]
  %.0302 = phi i32 [ 0, %182 ], [ %.1303.lcssa, %235 ]
  %.6 = phi ptr [ %.5, %182 ], [ %.7578, %235 ]
  %187 = icmp ult i64 %.9321, %.2307
  br i1 %187, label %.lr.ph570.preheader, label %._crit_edge571

.lr.ph570.preheader:                              ; preds = %186
  %188 = sub i64 %.2307, %.9321
  %min.iters.check = icmp ult i64 %188, 8
  br i1 %min.iters.check, label %.lr.ph570.preheader939, label %vector.ph

vector.ph:                                        ; preds = %.lr.ph570.preheader
  %n.vec = and i64 %188, -8
  %ind.end = add i64 %.9321, %n.vec
  %ind.end855 = getelementptr i8, ptr %.12366, i64 %n.vec
  %189 = insertelement <4 x i32> <i32 poison, i32 0, i32 0, i32 0>, i32 %.0302, i64 0
  %190 = trunc i64 %.9321 to i32
  %.splatinsert = insertelement <4 x i32> poison, i32 %190, i64 0
  %.splat = shufflevector <4 x i32> %.splatinsert, <4 x i32> poison, <4 x i32> zeroinitializer
  %induction = add <4 x i32> %.splat, <i32 0, i32 1, i32 2, i32 3>
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %vec.phi = phi <4 x i32> [ %189, %vector.ph ], [ %199, %vector.body ]
  %vec.phi857 = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %200, %vector.body ]
  %vec.ind = phi <4 x i32> [ %induction, %vector.ph ], [ %vec.ind.next, %vector.body ]
  %next.gep = getelementptr i8, ptr %.12366, i64 %index
  %191 = getelementptr i8, ptr %next.gep, i64 4
  %wide.load = load <4 x i8>, ptr %next.gep, align 1, !tbaa !19
  %wide.load860 = load <4 x i8>, ptr %191, align 1, !tbaa !19
  %192 = zext <4 x i8> %wide.load to <4 x i32>
  %193 = zext <4 x i8> %wide.load860 to <4 x i32>
  %194 = shl <4 x i32> %vec.ind, <i32 3, i32 3, i32 3, i32 3>
  %step.add = shl <4 x i32> %vec.ind, <i32 3, i32 3, i32 3, i32 3>
  %195 = sub <4 x i32> <i32 24, i32 24, i32 24, i32 24>, %194
  %196 = sub nuw nsw <4 x i32> <i32 -8, i32 -8, i32 -8, i32 -8>, %step.add
  %197 = shl nuw <4 x i32> %192, %195
  %198 = shl nuw <4 x i32> %193, %196
  %199 = or <4 x i32> %197, %vec.phi
  %200 = or <4 x i32> %198, %vec.phi857
  %index.next = add nuw i64 %index, 8
  %vec.ind.next = add <4 x i32> %vec.ind, <i32 8, i32 8, i32 8, i32 8>
  %201 = icmp eq i64 %index.next, %n.vec
  br i1 %201, label %middle.block, label %vector.body, !llvm.loop !27

middle.block:                                     ; preds = %vector.body
  %bin.rdx = or <4 x i32> %200, %199
  %202 = tail call i32 @llvm.vector.reduce.or.v4i32(<4 x i32> %bin.rdx)
  %cmp.n = icmp eq i64 %188, %n.vec
  br i1 %cmp.n, label %._crit_edge571.loopexit, label %.lr.ph570.preheader939

.lr.ph570.preheader939:                           ; preds = %middle.block, %.lr.ph570.preheader
  %.1303568.ph = phi i32 [ %.0302, %.lr.ph570.preheader ], [ %202, %middle.block ]
  %.10322567.ph = phi i64 [ %.9321, %.lr.ph570.preheader ], [ %ind.end, %middle.block ]
  %.13367566.ph = phi ptr [ %.12366, %.lr.ph570.preheader ], [ %ind.end855, %middle.block ]
  br label %.lr.ph570

.lr.ph570:                                        ; preds = %.lr.ph570.preheader939, %.lr.ph570
  %.1303568 = phi i32 [ %209, %.lr.ph570 ], [ %.1303568.ph, %.lr.ph570.preheader939 ]
  %.10322567 = phi i64 [ %210, %.lr.ph570 ], [ %.10322567.ph, %.lr.ph570.preheader939 ]
  %.13367566 = phi ptr [ %203, %.lr.ph570 ], [ %.13367566.ph, %.lr.ph570.preheader939 ]
  %203 = getelementptr inbounds i8, ptr %.13367566, i64 1
  %204 = load i8, ptr %.13367566, align 1, !tbaa !19
  %205 = zext i8 %204 to i32
  %.10322.tr = trunc i64 %.10322567 to i32
  %206 = shl i32 %.10322.tr, 3
  %207 = sub i32 24, %206
  %208 = shl nuw i32 %205, %207
  %209 = or i32 %208, %.1303568
  %210 = add nuw i64 %.10322567, 1
  %exitcond709.not = icmp eq i64 %210, %.2307
  br i1 %exitcond709.not, label %._crit_edge571.loopexit, label %.lr.ph570, !llvm.loop !30

._crit_edge571.loopexit:                          ; preds = %.lr.ph570, %middle.block
  %.lcssa817 = phi i32 [ %202, %middle.block ], [ %209, %.lr.ph570 ]
  %scevgep708 = getelementptr i8, ptr %.12366, i64 %188
  br label %._crit_edge571

._crit_edge571:                                   ; preds = %._crit_edge571.loopexit, %186
  %.13367.lcssa = phi ptr [ %.12366, %186 ], [ %scevgep708, %._crit_edge571.loopexit ]
  %.10322.lcssa = phi i64 [ %.9321, %186 ], [ %.2307, %._crit_edge571.loopexit ]
  %.1303.lcssa = phi i32 [ %.0302, %186 ], [ %.lcssa817, %._crit_edge571.loopexit ]
  %211 = icmp ult i64 %.2307, 4
  br i1 %211, label %.preheader464, label %.loopexit465

.preheader464:                                    ; preds = %._crit_edge571
  %.7.in575 = getelementptr inbounds i8, ptr %.6, i64 8
  %.7576 = load ptr, ptr %.7.in575, align 8, !tbaa !23
  %.not422577 = icmp eq ptr %.7576, null
  br i1 %.not422577, label %.thread440, label %.lr.ph579

.lr.ph579:                                        ; preds = %.preheader464, %234
  %.7578 = phi ptr [ %.7, %234 ], [ %.7576, %.preheader464 ]
  %212 = load ptr, ptr %.7578, align 8, !tbaa !9
  %213 = icmp eq ptr %212, null
  br i1 %213, label %234, label %214

214:                                              ; preds = %.lr.ph579
  %215 = getelementptr inbounds i8, ptr %212, i64 80
  %216 = load i8, ptr %215, align 8
  %217 = and i8 %216, 8
  %.not423 = icmp eq i8 %217, 0
  br i1 %.not423, label %224, label %218

218:                                              ; preds = %214
  %219 = getelementptr inbounds i8, ptr %212, i64 64
  %220 = load i64, ptr %219, align 8, !tbaa !11
  %221 = getelementptr inbounds i8, ptr %212, i64 48
  %222 = load i64, ptr %221, align 8, !tbaa !15
  %223 = sub nsw i64 %220, %222
  br label %231

224:                                              ; preds = %214
  %225 = getelementptr inbounds i8, ptr %212, i64 16
  %226 = load ptr, ptr %225, align 8, !tbaa !16
  %227 = load ptr, ptr %212, align 8, !tbaa !17
  %228 = ptrtoint ptr %226 to i64
  %229 = ptrtoint ptr %227 to i64
  %230 = sub i64 %228, %229
  br label %231

231:                                              ; preds = %218, %224
  %232 = phi i64 [ %223, %218 ], [ %230, %224 ]
  %233 = icmp eq i64 %232, 0
  br i1 %233, label %234, label %235

234:                                              ; preds = %.lr.ph579, %231
  %.7.in = getelementptr inbounds i8, ptr %.7578, i64 8
  %.7 = load ptr, ptr %.7.in, align 8, !tbaa !23
  %.not422 = icmp eq ptr %.7, null
  br i1 %.not422, label %.thread440, label %.lr.ph579, !llvm.loop !31

235:                                              ; preds = %231
  %236 = load ptr, ptr %212, align 8, !tbaa !17
  %237 = getelementptr inbounds i8, ptr %212, i64 32
  %238 = load ptr, ptr %237, align 8, !tbaa !18
  %239 = sub nuw nsw i64 4, %.2307
  %240 = ptrtoint ptr %236 to i64
  %241 = ptrtoint ptr %238 to i64
  %242 = sub i64 %240, %241
  %243 = icmp ugt i64 %239, %242
  %244 = and i64 %242, 4294967295
  %245 = add nuw nsw i64 %244, %.2307
  %246 = select i1 %243, i64 %245, i64 4
  br label %186

.loopexit465:                                     ; preds = %._crit_edge571, %.loopexit468
  %.15369 = phi ptr [ %.11365, %.loopexit468 ], [ %.13367.lcssa, %._crit_edge571 ]
  %.10347 = phi ptr [ %.7344, %.loopexit468 ], [ %.8345, %._crit_edge571 ]
  %.2304 = phi i32 [ 0, %.loopexit468 ], [ %.1303.lcssa, %._crit_edge571 ]
  %.8 = phi ptr [ %.5, %.loopexit468 ], [ %.6, %._crit_edge571 ]
  %.not397 = icmp eq i64 %.4332, 0
  br i1 %.not397, label %364, label %247

247:                                              ; preds = %.loopexit465
  %248 = and i8 %.1299520.lcssa, 15
  %249 = icmp eq i8 %248, 8
  %250 = icmp ne i64 %.4332, 1
  %or.cond = select i1 %249, i1 %250, i1 false
  br i1 %or.cond, label %251, label %315

251:                                              ; preds = %247
  %252 = ptrtoint ptr %.15369 to i64
  %253 = ptrtoint ptr %.10347 to i64
  %254 = sub i64 %252, %253
  %spec.store.select5 = tail call i64 @llvm.umin.i64(i64 %254, i64 2)
  br label %255

255:                                              ; preds = %301, %251
  %.16370 = phi ptr [ %.15369, %251 ], [ %302, %301 ]
  %.11348 = phi ptr [ %.10347, %251 ], [ %304, %301 ]
  %.11323 = phi i64 [ 0, %251 ], [ %.12324.lcssa, %301 ]
  %.3308 = phi i64 [ %spec.store.select5, %251 ], [ %312, %301 ]
  %.0290 = phi i16 [ 0, %251 ], [ %.1291.lcssa, %301 ]
  %.9 = phi ptr [ %.8, %251 ], [ %.10592, %301 ]
  %256 = icmp ult i64 %.11323, %.3308
  br i1 %256, label %.lr.ph584.preheader, label %._crit_edge585

.lr.ph584.preheader:                              ; preds = %255
  %257 = sub i64 %.3308, %.11323
  %min.iters.check863 = icmp ult i64 %257, 8
  br i1 %min.iters.check863, label %.lr.ph584.preheader923, label %vector.ph864

vector.ph864:                                     ; preds = %.lr.ph584.preheader
  %n.vec866 = and i64 %257, -8
  %ind.end867 = add i64 %.11323, %n.vec866
  %ind.end869 = getelementptr i8, ptr %.16370, i64 %n.vec866
  %258 = insertelement <8 x i16> <i16 poison, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>, i16 %.0290, i64 0
  %259 = trunc i64 %.11323 to i32
  %.splatinsert874 = insertelement <8 x i32> poison, i32 %259, i64 0
  %.splat875 = shufflevector <8 x i32> %.splatinsert874, <8 x i32> poison, <8 x i32> zeroinitializer
  %induction876 = add <8 x i32> %.splat875, <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
  br label %vector.body871

vector.body871:                                   ; preds = %vector.body871, %vector.ph864
  %index872 = phi i64 [ 0, %vector.ph864 ], [ %index.next882, %vector.body871 ]
  %vec.phi873 = phi <8 x i16> [ %258, %vector.ph864 ], [ %265, %vector.body871 ]
  %vec.ind877 = phi <8 x i32> [ %induction876, %vector.ph864 ], [ %vec.ind.next879, %vector.body871 ]
  %next.gep880 = getelementptr i8, ptr %.16370, i64 %index872
  %wide.load881 = load <8 x i8>, ptr %next.gep880, align 1, !tbaa !19
  %260 = zext <8 x i8> %wide.load881 to <8 x i32>
  %261 = shl <8 x i32> %vec.ind877, <i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3>
  %262 = sub <8 x i32> <i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8>, %261
  %263 = shl <8 x i32> %260, %262
  %264 = trunc <8 x i32> %263 to <8 x i16>
  %265 = or <8 x i16> %vec.phi873, %264
  %index.next882 = add nuw i64 %index872, 8
  %vec.ind.next879 = add <8 x i32> %vec.ind877, <i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8>
  %266 = icmp eq i64 %index.next882, %n.vec866
  br i1 %266, label %middle.block861, label %vector.body871, !llvm.loop !32

middle.block861:                                  ; preds = %vector.body871
  %267 = tail call i16 @llvm.vector.reduce.or.v8i16(<8 x i16> %265)
  %cmp.n883 = icmp eq i64 %257, %n.vec866
  br i1 %cmp.n883, label %._crit_edge585.loopexit, label %.lr.ph584.preheader923

.lr.ph584.preheader923:                           ; preds = %middle.block861, %.lr.ph584.preheader
  %.1291582.ph = phi i16 [ %.0290, %.lr.ph584.preheader ], [ %267, %middle.block861 ]
  %.12324581.ph = phi i64 [ %.11323, %.lr.ph584.preheader ], [ %ind.end867, %middle.block861 ]
  %.17371580.ph = phi ptr [ %.16370, %.lr.ph584.preheader ], [ %ind.end869, %middle.block861 ]
  br label %.lr.ph584

.lr.ph584:                                        ; preds = %.lr.ph584.preheader923, %.lr.ph584
  %.1291582 = phi i16 [ %275, %.lr.ph584 ], [ %.1291582.ph, %.lr.ph584.preheader923 ]
  %.12324581 = phi i64 [ %276, %.lr.ph584 ], [ %.12324581.ph, %.lr.ph584.preheader923 ]
  %.17371580 = phi ptr [ %268, %.lr.ph584 ], [ %.17371580.ph, %.lr.ph584.preheader923 ]
  %268 = getelementptr inbounds i8, ptr %.17371580, i64 1
  %269 = load i8, ptr %.17371580, align 1, !tbaa !19
  %270 = zext i8 %269 to i32
  %.12324.tr = trunc i64 %.12324581 to i32
  %271 = shl i32 %.12324.tr, 3
  %272 = sub i32 8, %271
  %273 = shl i32 %270, %272
  %274 = trunc i32 %273 to i16
  %275 = or i16 %.1291582, %274
  %276 = add nuw i64 %.12324581, 1
  %exitcond711.not = icmp eq i64 %276, %.3308
  br i1 %exitcond711.not, label %._crit_edge585.loopexit, label %.lr.ph584, !llvm.loop !33

._crit_edge585.loopexit:                          ; preds = %.lr.ph584, %middle.block861
  %.lcssa805 = phi i16 [ %267, %middle.block861 ], [ %275, %.lr.ph584 ]
  %scevgep710 = getelementptr i8, ptr %.16370, i64 %257
  br label %._crit_edge585

._crit_edge585:                                   ; preds = %._crit_edge585.loopexit, %255
  %.17371.lcssa = phi ptr [ %.16370, %255 ], [ %scevgep710, %._crit_edge585.loopexit ]
  %.12324.lcssa = phi i64 [ %.11323, %255 ], [ %.3308, %._crit_edge585.loopexit ]
  %.1291.lcssa = phi i16 [ %.0290, %255 ], [ %.lcssa805, %._crit_edge585.loopexit ]
  %277 = icmp ugt i64 %.3308, 1
  br i1 %277, label %.thread452, label %.preheader463

.preheader463:                                    ; preds = %._crit_edge585
  %.10.in589 = getelementptr inbounds i8, ptr %.9, i64 8
  %.10590 = load ptr, ptr %.10.in589, align 8, !tbaa !23
  %.not398591 = icmp eq ptr %.10590, null
  br i1 %.not398591, label %.thread440, label %.lr.ph593

.lr.ph593:                                        ; preds = %.preheader463, %300
  %.10592 = phi ptr [ %.10, %300 ], [ %.10590, %.preheader463 ]
  %278 = load ptr, ptr %.10592, align 8, !tbaa !9
  %279 = icmp eq ptr %278, null
  br i1 %279, label %300, label %280

280:                                              ; preds = %.lr.ph593
  %281 = getelementptr inbounds i8, ptr %278, i64 80
  %282 = load i8, ptr %281, align 8
  %283 = and i8 %282, 8
  %.not399 = icmp eq i8 %283, 0
  br i1 %.not399, label %290, label %284

284:                                              ; preds = %280
  %285 = getelementptr inbounds i8, ptr %278, i64 64
  %286 = load i64, ptr %285, align 8, !tbaa !11
  %287 = getelementptr inbounds i8, ptr %278, i64 48
  %288 = load i64, ptr %287, align 8, !tbaa !15
  %289 = sub nsw i64 %286, %288
  br label %297

290:                                              ; preds = %280
  %291 = getelementptr inbounds i8, ptr %278, i64 16
  %292 = load ptr, ptr %291, align 8, !tbaa !16
  %293 = load ptr, ptr %278, align 8, !tbaa !17
  %294 = ptrtoint ptr %292 to i64
  %295 = ptrtoint ptr %293 to i64
  %296 = sub i64 %294, %295
  br label %297

297:                                              ; preds = %284, %290
  %298 = phi i64 [ %289, %284 ], [ %296, %290 ]
  %299 = icmp eq i64 %298, 0
  br i1 %299, label %300, label %301

300:                                              ; preds = %.lr.ph593, %297
  %.10.in = getelementptr inbounds i8, ptr %.10592, i64 8
  %.10 = load ptr, ptr %.10.in, align 8, !tbaa !23
  %.not398 = icmp eq ptr %.10, null
  br i1 %.not398, label %.thread440, label %.lr.ph593, !llvm.loop !34

301:                                              ; preds = %297
  %302 = load ptr, ptr %278, align 8, !tbaa !17
  %303 = getelementptr inbounds i8, ptr %278, i64 32
  %304 = load ptr, ptr %303, align 8, !tbaa !18
  %305 = sub nuw nsw i64 2, %.3308
  %306 = ptrtoint ptr %302 to i64
  %307 = ptrtoint ptr %304 to i64
  %308 = sub i64 %306, %307
  %309 = icmp ugt i64 %305, %308
  %310 = and i64 %308, 4294967295
  %311 = add nuw nsw i64 %310, %.3308
  %312 = select i1 %309, i64 %311, i64 2
  br label %255

.thread452:                                       ; preds = %._crit_edge585
  %313 = getelementptr inbounds i8, ptr %0, i64 90
  store i16 %.1291.lcssa, ptr %313, align 2, !tbaa !35
  %314 = add i64 %.4332, -2
  br label %317

315:                                              ; preds = %247
  %316 = getelementptr inbounds i8, ptr %0, i64 90
  store i16 0, ptr %316, align 2, !tbaa !35
  br label %317

317:                                              ; preds = %.thread452, %315
  %.20 = phi ptr [ %.15369, %315 ], [ %.17371.lcssa, %.thread452 ]
  %.14351 = phi ptr [ %.10347, %315 ], [ %.11348, %.thread452 ]
  %.6334 = phi i64 [ %.4332, %315 ], [ %314, %.thread452 ]
  %.12 = phi ptr [ %.8, %315 ], [ %.9, %.thread452 ]
  %318 = getelementptr inbounds i8, ptr %0, i64 8
  %319 = load ptr, ptr %318, align 8, !tbaa !38
  %320 = tail call ptr @mln_alloc_m(ptr noundef %319, i64 noundef %.6334) #5
  %321 = icmp eq ptr %320, null
  br i1 %321, label %.thread440, label %322

322:                                              ; preds = %317
  %323 = ptrtoint ptr %.20 to i64
  %324 = ptrtoint ptr %.14351 to i64
  %325 = sub i64 %323, %324
  %spec.select = tail call i64 @llvm.umin.i64(i64 %325, i64 %.6334)
  br label %326

326:                                              ; preds = %355, %322
  %.21 = phi ptr [ %.20, %322 ], [ %356, %355 ]
  %.13325 = phi i64 [ 0, %322 ], [ %330, %355 ]
  %.5310 = phi i64 [ %spec.select, %322 ], [ %., %355 ]
  %.13 = phi ptr [ %.12, %322 ], [ %.14602, %355 ]
  %.not400 = icmp eq i64 %.5310, 0
  br i1 %.not400, label %329, label %327

327:                                              ; preds = %326
  %328 = getelementptr inbounds i8, ptr %320, i64 %.13325
  tail call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 1 %328, ptr align 1 %.21, i64 %.5310, i1 false)
  br label %329

329:                                              ; preds = %327, %326
  %330 = add i64 %.5310, %.13325
  %331 = icmp ult i64 %.5310, %.6334
  br i1 %331, label %.preheader461, label %.loopexit462

.preheader461:                                    ; preds = %329
  %.14.in599 = getelementptr inbounds i8, ptr %.13, i64 8
  %.14600 = load ptr, ptr %.14.in599, align 8, !tbaa !23
  %.not420601 = icmp eq ptr %.14600, null
  br i1 %.not420601, label %.preheader461._crit_edge, label %.lr.ph603

.lr.ph603:                                        ; preds = %.preheader461, %354
  %.14602 = phi ptr [ %.14, %354 ], [ %.14600, %.preheader461 ]
  %332 = load ptr, ptr %.14602, align 8, !tbaa !9
  %333 = icmp eq ptr %332, null
  br i1 %333, label %354, label %334

334:                                              ; preds = %.lr.ph603
  %335 = getelementptr inbounds i8, ptr %332, i64 80
  %336 = load i8, ptr %335, align 8
  %337 = and i8 %336, 8
  %.not421 = icmp eq i8 %337, 0
  br i1 %.not421, label %344, label %338

338:                                              ; preds = %334
  %339 = getelementptr inbounds i8, ptr %332, i64 64
  %340 = load i64, ptr %339, align 8, !tbaa !11
  %341 = getelementptr inbounds i8, ptr %332, i64 48
  %342 = load i64, ptr %341, align 8, !tbaa !15
  %343 = sub nsw i64 %340, %342
  br label %351

344:                                              ; preds = %334
  %345 = getelementptr inbounds i8, ptr %332, i64 16
  %346 = load ptr, ptr %345, align 8, !tbaa !16
  %347 = load ptr, ptr %332, align 8, !tbaa !17
  %348 = ptrtoint ptr %346 to i64
  %349 = ptrtoint ptr %347 to i64
  %350 = sub i64 %348, %349
  br label %351

351:                                              ; preds = %338, %344
  %352 = phi i64 [ %343, %338 ], [ %350, %344 ]
  %353 = icmp eq i64 %352, 0
  br i1 %353, label %354, label %355

354:                                              ; preds = %.lr.ph603, %351
  %.14.in = getelementptr inbounds i8, ptr %.14602, i64 8
  %.14 = load ptr, ptr %.14.in, align 8, !tbaa !23
  %.not420 = icmp eq ptr %.14, null
  br i1 %.not420, label %.preheader461._crit_edge, label %.lr.ph603, !llvm.loop !39

.preheader461._crit_edge:                         ; preds = %.preheader461, %354
  tail call void @mln_alloc_free(ptr noundef nonnull %320) #5
  br label %.thread440

355:                                              ; preds = %351
  %356 = load ptr, ptr %332, align 8, !tbaa !17
  %357 = getelementptr inbounds i8, ptr %332, i64 32
  %358 = load ptr, ptr %357, align 8, !tbaa !18
  %359 = sub i64 %.6334, %.5310
  %360 = ptrtoint ptr %356 to i64
  %361 = ptrtoint ptr %358 to i64
  %362 = sub i64 %360, %361
  %. = tail call i64 @llvm.umin.i64(i64 %359, i64 %362)
  br label %326

.loopexit462:                                     ; preds = %329
  %363 = getelementptr inbounds i8, ptr %.21, i64 %.5310
  br label %364

364:                                              ; preds = %.loopexit462, %.loopexit465
  %.23 = phi ptr [ %.15369, %.loopexit465 ], [ %363, %.loopexit462 ]
  %.0336 = phi ptr [ null, %.loopexit465 ], [ %320, %.loopexit462 ]
  %.7335 = phi i64 [ 0, %.loopexit465 ], [ %.6334, %.loopexit462 ]
  %.15 = phi ptr [ %.8, %.loopexit465 ], [ %.13, %.loopexit462 ]
  %365 = getelementptr inbounds i8, ptr %0, i64 88
  %366 = load i16, ptr %365, align 8
  %367 = and i16 %366, 1
  %.not401 = icmp eq i16 %367, 0
  br i1 %.not401, label %373, label %368

368:                                              ; preds = %364
  %369 = getelementptr inbounds i8, ptr %0, i64 64
  %370 = load ptr, ptr %369, align 8, !tbaa !40
  tail call void @mln_alloc_free(ptr noundef %370) #5
  %371 = load i16, ptr %365, align 8
  %372 = and i16 %371, -2
  br label %373

373:                                              ; preds = %368, %364
  %374 = phi i16 [ %372, %368 ], [ %366, %364 ]
  %375 = getelementptr inbounds i8, ptr %0, i64 64
  store ptr %.0336, ptr %375, align 8, !tbaa !40
  %.not402 = icmp ne ptr %.0336, null
  %376 = zext i1 %.not402 to i16
  %377 = getelementptr inbounds i8, ptr %0, i64 80
  store i64 %.7335, ptr %377, align 8, !tbaa !41
  %.masked785 = and i16 %374, -1023
  %378 = or i16 %.masked785, %376
  %379 = lshr i8 %.1299520.lcssa, 6
  %380 = and i8 %379, 2
  %masksel = zext nneg i8 %380 to i16
  %storemerge = or disjoint i16 %378, %masksel
  %381 = lshr i8 %.1299520.lcssa, 4
  %382 = and i8 %381, 4
  %383 = lshr i8 %.1299520.lcssa, 2
  %384 = and i8 %383, 8
  %storemerge405615 = or disjoint i8 %384, %382
  %storemerge405 = zext nneg i8 %storemerge405615 to i16
  %storemerge407 = or disjoint i16 %storemerge, %storemerge405
  %385 = and i8 %.1299520.lcssa, 16
  %masksel459 = zext nneg i8 %385 to i16
  %storemerge409 = or disjoint i16 %storemerge407, %masksel459
  %386 = and i8 %.1299520.lcssa, 15
  %387 = zext nneg i8 %386 to i16
  %388 = shl nuw nsw i16 %387, 5
  %389 = and i8 %37, -128
  %390 = zext i8 %389 to i16
  %masksel460 = shl nuw nsw i16 %390, 2
  %391 = or disjoint i16 %storemerge409, %masksel460
  %storemerge410 = or disjoint i16 %391, %388
  store i16 %storemerge410, ptr %365, align 8
  %392 = getelementptr inbounds i8, ptr %0, i64 92
  store i32 %.2304, ptr %392, align 4
  %.not411 = icmp eq i8 %389, 0
  br i1 %.not411, label %455, label %393

393:                                              ; preds = %373
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %3) #5
  %394 = getelementptr inbounds i8, ptr %0, i64 90
  %395 = load i16, ptr %394, align 2, !tbaa !35
  %396 = lshr i32 %.2304, 24
  %397 = trunc nuw i32 %396 to i8
  store i8 %397, ptr %3, align 1, !tbaa !19
  %398 = lshr i32 %.2304, 16
  %399 = trunc i32 %398 to i8
  %400 = getelementptr inbounds i8, ptr %3, i64 1
  store i8 %399, ptr %400, align 1, !tbaa !19
  %401 = lshr i32 %.2304, 8
  %402 = trunc i32 %401 to i8
  %403 = getelementptr inbounds i8, ptr %3, i64 2
  store i8 %402, ptr %403, align 1, !tbaa !19
  %404 = trunc i32 %.2304 to i8
  %405 = getelementptr inbounds i8, ptr %3, i64 3
  store i8 %404, ptr %405, align 1, !tbaa !19
  %406 = icmp eq i8 %386, 8
  %407 = icmp ne i16 %395, 0
  %or.cond8 = select i1 %406, i1 %407, i1 false
  br i1 %or.cond8, label %408, label %416

408:                                              ; preds = %393
  %409 = trunc nuw nsw i32 %396 to i16
  %410 = shl nuw i16 %409, 8
  %.masked = and i16 %395, -256
  %411 = xor i16 %.masked, %410
  %412 = trunc nuw i32 %398 to i16
  %413 = xor i16 %395, %412
  %414 = and i16 %413, 255
  %415 = or disjoint i16 %411, %414
  store i16 %415, ptr %394, align 2, !tbaa !35
  br label %416

416:                                              ; preds = %408, %393
  %.14326.sroa.phi = phi ptr [ %.14326.sroa.gep, %408 ], [ %3, %393 ]
  %.14326.sroa.phi992 = phi ptr [ %.14326.sroa.gep993, %408 ], [ %3, %393 ]
  %.14326 = phi i64 [ 2, %408 ], [ 0, %393 ]
  %417 = icmp ne i64 %.7335, 0
  %or.cond613 = and i1 %.not402, %417
  br i1 %or.cond613, label %iter.check, label %.loopexit

iter.check:                                       ; preds = %416
  %min.iters.check887 = icmp ult i64 %.7335, 8
  br i1 %min.iters.check887, label %.lr.ph607.preheader, label %vector.scevcheck

.lr.ph607.preheader:                              ; preds = %vector.scevcheck, %iter.check
  %xtraiter989 = and i64 %.7335, 1
  %418 = icmp eq i64 %.7335, 1
  br i1 %418, label %.loopexit.loopexit.unr-lcssa, label %.lr.ph607.preheader.new

.lr.ph607.preheader.new:                          ; preds = %.lr.ph607.preheader
  %unroll_iter = and i64 %.7335, -2
  br label %.lr.ph607

vector.scevcheck:                                 ; preds = %iter.check
  %419 = add i64 %.7335, -1
  %420 = trunc nuw i64 %.14326 to i2
  %421 = trunc i64 %419 to i2
  %422 = xor i2 %420, -1
  %423 = icmp ult i2 %422, %421
  %424 = icmp ugt i64 %419, 3
  %425 = or i1 %423, %424
  br i1 %425, label %.lr.ph607.preheader, label %vector.main.loop.iter.check

vector.main.loop.iter.check:                      ; preds = %vector.scevcheck
  %min.iters.check889 = icmp ult i64 %.7335, 32
  br i1 %min.iters.check889, label %vec.epilog.vector.body, label %vector.body893.preheader

vector.body893.preheader:                         ; preds = %vector.main.loop.iter.check
  %426 = getelementptr inbounds i8, ptr %.14326.sroa.phi, i64 16
  %wide.load896 = load <16 x i8>, ptr %426, align 1, !tbaa !19
  br label %vector.body893

vector.body893:                                   ; preds = %vector.body893.preheader, %vector.body893
  %index894 = phi i64 [ %index.next899, %vector.body893 ], [ 0, %vector.body893.preheader ]
  %wide.load895 = load <16 x i8>, ptr %.14326.sroa.phi, align 1, !tbaa !19
  %427 = getelementptr inbounds i8, ptr %.0336, i64 %index894
  %428 = getelementptr inbounds i8, ptr %427, i64 16
  %wide.load897 = load <16 x i8>, ptr %427, align 1, !tbaa !19
  %wide.load898 = load <16 x i8>, ptr %428, align 1, !tbaa !19
  %429 = xor <16 x i8> %wide.load897, %wide.load895
  %430 = xor <16 x i8> %wide.load898, %wide.load896
  store <16 x i8> %429, ptr %427, align 1, !tbaa !19
  store <16 x i8> %430, ptr %428, align 1, !tbaa !19
  %index.next899 = add nuw i64 %index894, 32
  br label %vector.body893, !llvm.loop !42

vec.epilog.vector.body:                           ; preds = %vector.main.loop.iter.check, %vec.epilog.vector.body
  %index907 = phi i64 [ %index.next911, %vec.epilog.vector.body ], [ 0, %vector.main.loop.iter.check ]
  %wide.load909 = load <8 x i8>, ptr %.14326.sroa.phi992, align 1, !tbaa !19
  %431 = getelementptr inbounds i8, ptr %.0336, i64 %index907
  %wide.load910 = load <8 x i8>, ptr %431, align 1, !tbaa !19
  %432 = xor <8 x i8> %wide.load910, %wide.load909
  store <8 x i8> %432, ptr %431, align 1, !tbaa !19
  %index.next911 = add nuw i64 %index907, 8
  br label %vec.epilog.vector.body, !llvm.loop !43

.lr.ph607:                                        ; preds = %.lr.ph607, %.lr.ph607.preheader.new
  %.6311606 = phi i64 [ 0, %.lr.ph607.preheader.new ], [ %448, %.lr.ph607 ]
  %.15327605 = phi i64 [ %.14326, %.lr.ph607.preheader.new ], [ %440, %.lr.ph607 ]
  %niter = phi i64 [ 0, %.lr.ph607.preheader.new ], [ %niter.next.1, %.lr.ph607 ]
  %433 = and i64 %.15327605, 2
  %434 = getelementptr inbounds [4 x i8], ptr %3, i64 0, i64 %433
  %435 = load i8, ptr %434, align 1, !tbaa !19
  %436 = getelementptr inbounds i8, ptr %.0336, i64 %.6311606
  %437 = load i8, ptr %436, align 1, !tbaa !19
  %438 = xor i8 %437, %435
  store i8 %438, ptr %436, align 1, !tbaa !19
  %439 = or disjoint i64 %.6311606, 1
  %440 = add i64 %.15327605, 2
  %441 = and i64 %.15327605, 2
  %442 = or disjoint i64 %441, 1
  %443 = getelementptr inbounds [4 x i8], ptr %3, i64 0, i64 %442
  %444 = load i8, ptr %443, align 1, !tbaa !19
  %445 = getelementptr inbounds i8, ptr %.0336, i64 %439
  %446 = load i8, ptr %445, align 1, !tbaa !19
  %447 = xor i8 %446, %444
  store i8 %447, ptr %445, align 1, !tbaa !19
  %448 = add nuw i64 %.6311606, 2
  %niter.next.1 = add i64 %niter, 2
  %niter.ncmp.1 = icmp eq i64 %niter.next.1, %unroll_iter
  br i1 %niter.ncmp.1, label %.loopexit.loopexit.unr-lcssa, label %.lr.ph607, !llvm.loop !44

.loopexit.loopexit.unr-lcssa:                     ; preds = %.lr.ph607, %.lr.ph607.preheader
  %.6311606.unr = phi i64 [ 0, %.lr.ph607.preheader ], [ %448, %.lr.ph607 ]
  %.15327605.unr = phi i64 [ %.14326, %.lr.ph607.preheader ], [ %440, %.lr.ph607 ]
  %lcmp.mod990.not = icmp eq i64 %xtraiter989, 0
  br i1 %lcmp.mod990.not, label %.loopexit, label %.lr.ph607.epil

.lr.ph607.epil:                                   ; preds = %.loopexit.loopexit.unr-lcssa
  %449 = and i64 %.15327605.unr, 3
  %450 = getelementptr inbounds [4 x i8], ptr %3, i64 0, i64 %449
  %451 = load i8, ptr %450, align 1, !tbaa !19
  %452 = getelementptr inbounds i8, ptr %.0336, i64 %.6311606.unr
  %453 = load i8, ptr %452, align 1, !tbaa !19
  %454 = xor i8 %453, %451
  store i8 %454, ptr %452, align 1, !tbaa !19
  br label %.loopexit

.loopexit:                                        ; preds = %.lr.ph607.epil, %.loopexit.loopexit.unr-lcssa, %416
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %3) #5
  br label %455

455:                                              ; preds = %.loopexit, %373
  %456 = getelementptr inbounds i8, ptr %0, i64 72
  %457 = load ptr, ptr %456, align 8, !tbaa !45
  %.not412 = icmp eq ptr %457, null
  br i1 %.not412, label %460, label %458

458:                                              ; preds = %455
  %459 = tail call i32 %457(ptr noundef nonnull %0) #5
  %.not413 = icmp eq i32 %459, 0
  br i1 %.not413, label %460, label %.thread440

460:                                              ; preds = %458, %455
  %cond614 = icmp eq ptr %.15, null
  br i1 %cond614, label %._crit_edge612, label %461

461:                                              ; preds = %460
  %462 = load ptr, ptr %.15, align 8, !tbaa !9
  %.not415 = icmp eq ptr %462, null
  br i1 %.not415, label %.lr.ph611.preheader, label %463

463:                                              ; preds = %461
  store ptr %.23, ptr %462, align 8, !tbaa !17
  br label %.lr.ph611.preheader

.lr.ph611.preheader:                              ; preds = %461, %463
  br label %.lr.ph611

.lr.ph611:                                        ; preds = %.lr.ph611.preheader, %486
  %.16609 = phi ptr [ %488, %486 ], [ %.15, %.lr.ph611.preheader ]
  %464 = load ptr, ptr %.16609, align 8, !tbaa !9
  %465 = icmp eq ptr %464, null
  br i1 %465, label %486, label %466

466:                                              ; preds = %.lr.ph611
  %467 = getelementptr inbounds i8, ptr %464, i64 80
  %468 = load i8, ptr %467, align 8
  %469 = and i8 %468, 8
  %.not417 = icmp eq i8 %469, 0
  br i1 %.not417, label %476, label %470

470:                                              ; preds = %466
  %471 = getelementptr inbounds i8, ptr %464, i64 64
  %472 = load i64, ptr %471, align 8, !tbaa !11
  %473 = getelementptr inbounds i8, ptr %464, i64 48
  %474 = load i64, ptr %473, align 8, !tbaa !15
  %475 = sub nsw i64 %472, %474
  br label %483

476:                                              ; preds = %466
  %477 = getelementptr inbounds i8, ptr %464, i64 16
  %478 = load ptr, ptr %477, align 8, !tbaa !16
  %479 = load ptr, ptr %464, align 8, !tbaa !17
  %480 = ptrtoint ptr %478 to i64
  %481 = ptrtoint ptr %479 to i64
  %482 = sub i64 %480, %481
  br label %483

483:                                              ; preds = %470, %476
  %484 = phi i64 [ %475, %470 ], [ %482, %476 ]
  %485 = icmp eq i64 %484, 0
  br i1 %485, label %486, label %490

486:                                              ; preds = %.lr.ph611, %483
  %487 = getelementptr inbounds i8, ptr %.16609, i64 8
  %488 = load ptr, ptr %487, align 8, !tbaa !23
  %cond = icmp eq ptr %488, null
  br i1 %cond, label %._crit_edge612, label %.lr.ph611, !llvm.loop !46

._crit_edge612:                                   ; preds = %486, %460
  %489 = load ptr, ptr %1, align 8, !tbaa !5
  tail call void @mln_chain_pool_release_all(ptr noundef %489) #5
  store ptr null, ptr %1, align 8, !tbaa !5
  br label %.thread440

490:                                              ; preds = %483
  %491 = load ptr, ptr %1, align 8, !tbaa !5
  %.not418 = icmp eq ptr %.16609, %491
  br i1 %.not418, label %.thread440, label %492

492:                                              ; preds = %490
  store ptr %.16609, ptr %1, align 8, !tbaa !5
  br label %493

493:                                              ; preds = %493, %492
  %.17 = phi ptr [ %491, %492 ], [ %495, %493 ]
  %494 = getelementptr inbounds i8, ptr %.17, i64 8
  %495 = load ptr, ptr %494, align 8, !tbaa !23
  %.not419 = icmp eq ptr %495, %.16609
  br i1 %.not419, label %496, label %493, !llvm.loop !47

496:                                              ; preds = %493
  %497 = getelementptr inbounds i8, ptr %.17, i64 8
  store ptr null, ptr %497, align 8, !tbaa !23
  tail call void @mln_chain_pool_release_all(ptr noundef %491) #5
  br label %.thread440

.thread440:                                       ; preds = %._crit_edge, %.preheader469, %169, %.preheader466, %97, %.preheader464, %234, %.preheader463, %300, %2, %._crit_edge612, %496, %490, %317, %458, %.preheader461._crit_edge
  %.4 = phi i32 [ 3, %.preheader461._crit_edge ], [ %459, %458 ], [ 1, %317 ], [ 0, %490 ], [ 0, %496 ], [ 0, %._crit_edge612 ], [ 3, %2 ], [ 3, %300 ], [ 3, %.preheader463 ], [ 3, %234 ], [ 3, %.preheader464 ], [ 3, %97 ], [ 3, %.preheader466 ], [ 3, %169 ], [ 3, %.preheader469 ], [ 3, %._crit_edge ]
  ret i32 %.4
}

declare void @mln_chain_pool_release_all(ptr noundef) local_unnamed_addr #1

; 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 i32 @llvm.vector.reduce.or.v4i32(<4 x i32>) #4

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i16 @llvm.vector.reduce.or.v8i16(<8 x i16>) #4

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !6, i64 0}
!10 = !{!"mln_chain_s", !6, i64 0, !6, i64 8}
!11 = !{!12, !13, i64 64}
!12 = !{!"mln_buf_s", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !13, i64 48, !13, i64 56, !13, i64 64, !6, i64 72, !14, i64 80, !14, i64 80, !14, i64 80, !14, i64 80, !14, i64 80, !14, i64 80, !14, i64 80, !14, i64 80}
!13 = !{!"long", !7, i64 0}
!14 = !{!"int", !7, i64 0}
!15 = !{!12, !13, i64 48}
!16 = !{!12, !6, i64 16}
!17 = !{!12, !6, i64 0}
!18 = !{!12, !6, i64 32}
!19 = !{!7, !7, i64 0}
!20 = distinct !{!20, !21}
!21 = !{!"llvm.loop.mustprogress"}
!22 = distinct !{!22, !21}
!23 = !{!10, !6, i64 8}
!24 = distinct !{!24, !21}
!25 = distinct !{!25, !21}
!26 = distinct !{!26, !21}
!27 = distinct !{!27, !21, !28, !29}
!28 = !{!"llvm.loop.isvectorized", i32 1}
!29 = !{!"llvm.loop.unroll.runtime.disable"}
!30 = distinct !{!30, !21, !29, !28}
!31 = distinct !{!31, !21}
!32 = distinct !{!32, !21, !28, !29}
!33 = distinct !{!33, !21, !29, !28}
!34 = distinct !{!34, !21}
!35 = !{!36, !37, i64 90}
!36 = !{!"mln_websocket_s", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !6, i64 56, !6, i64 64, !6, i64 72, !13, i64 80, !37, i64 88, !37, i64 88, !37, i64 88, !37, i64 88, !37, i64 88, !37, i64 88, !37, i64 89, !37, i64 89, !37, i64 90, !14, i64 92}
!37 = !{!"short", !7, i64 0}
!38 = !{!36, !6, i64 8}
!39 = distinct !{!39, !21}
!40 = !{!36, !6, i64 64}
!41 = !{!36, !13, i64 80}
!42 = distinct !{!42, !21, !28, !29}
!43 = distinct !{!43, !21, !28, !29}
!44 = distinct !{!44, !21, !28}
!45 = !{!36, !6, i64 72}
!46 = distinct !{!46, !21}
!47 = distinct !{!47, !21}


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