; LLVM IR from intel/qpl :: tools/ref (ref_own_copy)

; 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"

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

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

; Function Attrs: inlinehint nounwind uwtable
declare hidden zeroext i16 @ref_cvt_le_2_be_16u(i16 noundef zeroext) #1

; Function Attrs: inlinehint nounwind uwtable
declare hidden i32 @ref_cvt_le_2_be_32u(i32 noundef) #1

; Function Attrs: nounwind uwtable
define dso_local i32 @ref_copy_mask_be_be_nu(ptr noundef %0, ptr noundef %1, i32 noundef %2, ptr noundef %3, i32 noundef %4, ptr noundef %5, i32 noundef %6, i32 noundef %7, i32 noundef %8) #2 {
  %10 = alloca i32, align 4
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca i32, align 4
  %14 = alloca ptr, align 8
  %15 = alloca i32, align 4
  %16 = alloca ptr, align 8
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca i8, align 1
  %21 = alloca i8, align 1
  %22 = alloca i8, align 1
  %23 = alloca i8, align 1
  %24 = alloca i32, align 4
  %25 = alloca i8, align 1
  %26 = alloca i32, align 4
  %27 = alloca i64, align 8
  %28 = alloca i64, align 8
  %29 = alloca ptr, align 8
  %30 = alloca ptr, align 8
  %31 = alloca ptr, align 8
  %32 = alloca i32, align 4
  %33 = alloca i32, align 4
  %34 = alloca i32, align 4
  %35 = alloca ptr, align 8
  %36 = alloca i32, align 4
  %37 = alloca i8, align 1
  %38 = alloca i32, align 4
  %39 = alloca ptr, align 8
  %40 = alloca i32, align 4
  %41 = alloca i16, align 2
  %42 = alloca i32, align 4
  %43 = alloca ptr, align 8
  %44 = alloca i32, align 4
  %45 = alloca i32, align 4
  %46 = alloca i32, align 4
  store ptr %0, ptr %11, align 8, !tbaa !5
  store ptr %1, ptr %12, align 8, !tbaa !5
  store i32 %2, ptr %13, align 4, !tbaa !9
  store ptr %3, ptr %14, align 8, !tbaa !5
  store i32 %4, ptr %15, align 4, !tbaa !9
  store ptr %5, ptr %16, align 8, !tbaa !5
  store i32 %6, ptr %17, align 4, !tbaa !9
  store i32 %7, ptr %18, align 4, !tbaa !9
  store i32 %8, ptr %19, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %20) #3
  store i8 1, ptr %20, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 1, ptr %21) #3
  store i8 1, ptr %21, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 1, ptr %22) #3
  store i8 0, ptr %22, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 1, ptr %23) #3
  %47 = load i32, ptr %13, align 4, !tbaa !9
  %48 = icmp ne i32 %47, 0
  %49 = zext i1 %48 to i64
  %50 = select i1 %48, i32 128, i32 1
  %51 = trunc i32 %50 to i8
  store i8 %51, ptr %23, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #3
  store i32 0, ptr %24, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %25) #3
  %52 = load ptr, ptr %12, align 8, !tbaa !5
  %53 = load i8, ptr %52, align 1, !tbaa !11
  store i8 %53, ptr %25, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #3
  %54 = load i32, ptr %15, align 4, !tbaa !9
  store i32 %54, ptr %26, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #3
  store i64 0, ptr %27, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #3
  store i64 0, ptr %28, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #3
  store ptr null, ptr %29, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #3
  store ptr null, ptr %30, align 8, !tbaa !5
  %55 = load i32, ptr %19, align 4, !tbaa !9
  %56 = icmp eq i32 0, %55
  br i1 %56, label %57, label %245

57:                                               ; preds = %9
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #3
  %58 = load ptr, ptr %14, align 8, !tbaa !5
  %59 = load ptr, ptr %58, align 8, !tbaa !5
  store ptr %59, ptr %31, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #3
  store i32 0, ptr %32, align 4, !tbaa !9
  br label %60

60:                                               ; preds = %202, %57
  %61 = load i32, ptr %32, align 4, !tbaa !9
  %62 = load i32, ptr %18, align 4, !tbaa !9
  %63 = icmp ult i32 %61, %62
  br i1 %63, label %65, label %64

64:                                               ; preds = %60
  store i32 2, ptr %33, align 4
  br label %205

65:                                               ; preds = %60
  %66 = load i8, ptr %25, align 1, !tbaa !11
  %67 = zext i8 %66 to i32
  %68 = load i8, ptr %23, align 1, !tbaa !11
  %69 = zext i8 %68 to i32
  %70 = and i32 %67, %69
  store i32 %70, ptr %24, align 4, !tbaa !9
  %71 = load i32, ptr %13, align 4, !tbaa !9
  %72 = icmp ne i32 %71, 0
  br i1 %72, label %73, label %77

73:                                               ; preds = %65
  %74 = load i8, ptr %23, align 1, !tbaa !11
  %75 = zext i8 %74 to i32
  %76 = ashr i32 %75, 1
  br label %81

77:                                               ; preds = %65
  %78 = load i8, ptr %23, align 1, !tbaa !11
  %79 = zext i8 %78 to i32
  %80 = shl i32 %79, 1
  br label %81

81:                                               ; preds = %77, %73
  %82 = phi i32 [ %76, %73 ], [ %80, %77 ]
  %83 = trunc i32 %82 to i8
  store i8 %83, ptr %23, align 1, !tbaa !11
  %84 = load i8, ptr %23, align 1, !tbaa !11
  %85 = icmp ne i8 %84, 0
  br i1 %85, label %96, label %86

86:                                               ; preds = %81
  %87 = load ptr, ptr %12, align 8, !tbaa !5
  %88 = getelementptr inbounds i8, ptr %87, i32 1
  store ptr %88, ptr %12, align 8, !tbaa !5
  %89 = load i32, ptr %13, align 4, !tbaa !9
  %90 = icmp ne i32 %89, 0
  %91 = zext i1 %90 to i64
  %92 = select i1 %90, i32 128, i32 1
  %93 = trunc i32 %92 to i8
  store i8 %93, ptr %23, align 1, !tbaa !11
  %94 = load ptr, ptr %12, align 8, !tbaa !5
  %95 = load i8, ptr %94, align 1, !tbaa !11
  store i8 %95, ptr %25, align 1, !tbaa !11
  br label %96

96:                                               ; preds = %86, %81
  %97 = load i32, ptr %17, align 4, !tbaa !9
  %98 = zext i32 %97 to i64
  %99 = load i64, ptr %27, align 8, !tbaa !12
  %100 = add i64 %99, %98
  store i64 %100, ptr %27, align 8, !tbaa !12
  %101 = load i32, ptr %24, align 4, !tbaa !9
  %102 = icmp ne i32 %101, 0
  br i1 %102, label %103, label %201

103:                                              ; preds = %96
  %104 = load i32, ptr %17, align 4, !tbaa !9
  %105 = zext i32 %104 to i64
  %106 = load i64, ptr %28, align 8, !tbaa !12
  %107 = add i64 %106, %105
  store i64 %107, ptr %28, align 8, !tbaa !12
  %108 = load ptr, ptr %31, align 8, !tbaa !5
  %109 = load i64, ptr %28, align 8, !tbaa !12
  %110 = sub i64 %109, 1
  %111 = lshr i64 %110, 3
  %112 = getelementptr inbounds i8, ptr %108, i64 %111
  store ptr %112, ptr %30, align 8, !tbaa !5
  %113 = load i64, ptr %28, align 8, !tbaa !12
  %114 = sub i64 %113, 1
  %115 = and i64 %114, 7
  %116 = trunc i64 %115 to i32
  %117 = ashr i32 128, %116
  %118 = trunc i32 %117 to i8
  store i8 %118, ptr %21, align 1, !tbaa !11
  %119 = load ptr, ptr %11, align 8, !tbaa !5
  %120 = load i64, ptr %27, align 8, !tbaa !12
  %121 = sub i64 %120, 1
  %122 = lshr i64 %121, 3
  %123 = getelementptr inbounds i8, ptr %119, i64 %122
  store ptr %123, ptr %29, align 8, !tbaa !5
  %124 = load i64, ptr %27, align 8, !tbaa !12
  %125 = sub i64 %124, 1
  %126 = and i64 %125, 7
  %127 = trunc i64 %126 to i32
  %128 = ashr i32 128, %127
  %129 = trunc i32 %128 to i8
  store i8 %129, ptr %20, align 1, !tbaa !11
  %130 = load i32, ptr %17, align 4, !tbaa !9
  %131 = zext i32 %130 to i64
  %132 = load ptr, ptr %16, align 8, !tbaa !5
  %133 = load i64, ptr %132, align 8, !tbaa !12
  %134 = icmp ugt i64 %131, %133
  br i1 %134, label %135, label %136

135:                                              ; preds = %103
  store i32 225, ptr %10, align 4
  store i32 1, ptr %33, align 4
  br label %205

136:                                              ; preds = %103
  %137 = load i32, ptr %17, align 4, !tbaa !9
  %138 = zext i32 %137 to i64
  %139 = load ptr, ptr %16, align 8, !tbaa !5
  %140 = load i64, ptr %139, align 8, !tbaa !12
  %141 = sub i64 %140, %138
  store i64 %141, ptr %139, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #3
  store i32 0, ptr %34, align 4, !tbaa !9
  br label %142

142:                                              ; preds = %197, %136
  %143 = load i32, ptr %34, align 4, !tbaa !9
  %144 = load i32, ptr %17, align 4, !tbaa !9
  %145 = icmp ult i32 %143, %144
  br i1 %145, label %147, label %146

146:                                              ; preds = %142
  store i32 5, ptr %33, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #3
  br label %200

147:                                              ; preds = %142
  %148 = load ptr, ptr %29, align 8, !tbaa !5
  %149 = load i8, ptr %148, align 1, !tbaa !11
  %150 = zext i8 %149 to i32
  %151 = load i8, ptr %20, align 1, !tbaa !11
  %152 = zext i8 %151 to i32
  %153 = and i32 %150, %152
  %154 = trunc i32 %153 to i8
  store i8 %154, ptr %22, align 1, !tbaa !11
  %155 = load i8, ptr %20, align 1, !tbaa !11
  %156 = zext i8 %155 to i32
  %157 = shl i32 %156, 1
  %158 = trunc i32 %157 to i8
  store i8 %158, ptr %20, align 1, !tbaa !11
  %159 = load i8, ptr %20, align 1, !tbaa !11
  %160 = icmp ne i8 %159, 0
  br i1 %160, label %164, label %161

161:                                              ; preds = %147
  store i8 1, ptr %20, align 1, !tbaa !11
  %162 = load ptr, ptr %29, align 8, !tbaa !5
  %163 = getelementptr inbounds i8, ptr %162, i32 -1
  store ptr %163, ptr %29, align 8, !tbaa !5
  br label %164

164:                                              ; preds = %161, %147
  %165 = load i8, ptr %22, align 1, !tbaa !11
  %166 = zext i8 %165 to i32
  %167 = icmp ne i32 %166, 0
  br i1 %167, label %168, label %175

168:                                              ; preds = %164
  %169 = load ptr, ptr %30, align 8, !tbaa !5
  %170 = load i8, ptr %169, align 1, !tbaa !11
  %171 = zext i8 %170 to i32
  %172 = load i8, ptr %21, align 1, !tbaa !11
  %173 = zext i8 %172 to i32
  %174 = or i32 %171, %173
  br label %183

175:                                              ; preds = %164
  %176 = load ptr, ptr %30, align 8, !tbaa !5
  %177 = load i8, ptr %176, align 1, !tbaa !11
  %178 = zext i8 %177 to i32
  %179 = load i8, ptr %21, align 1, !tbaa !11
  %180 = zext i8 %179 to i32
  %181 = xor i32 %180, -1
  %182 = and i32 %178, %181
  br label %183

183:                                              ; preds = %175, %168
  %184 = phi i32 [ %174, %168 ], [ %182, %175 ]
  %185 = trunc i32 %184 to i8
  %186 = load ptr, ptr %30, align 8, !tbaa !5
  store i8 %185, ptr %186, align 1, !tbaa !11
  %187 = load i8, ptr %21, align 1, !tbaa !11
  %188 = zext i8 %187 to i32
  %189 = shl i32 %188, 1
  %190 = trunc i32 %189 to i8
  store i8 %190, ptr %21, align 1, !tbaa !11
  %191 = load i8, ptr %21, align 1, !tbaa !11
  %192 = icmp ne i8 %191, 0
  br i1 %192, label %196, label %193

193:                                              ; preds = %183
  store i8 1, ptr %21, align 1, !tbaa !11
  %194 = load ptr, ptr %30, align 8, !tbaa !5
  %195 = getelementptr inbounds i8, ptr %194, i32 -1
  store ptr %195, ptr %30, align 8, !tbaa !5
  br label %196

196:                                              ; preds = %193, %183
  br label %197

197:                                              ; preds = %196
  %198 = load i32, ptr %34, align 4, !tbaa !9
  %199 = add i32 %198, 1
  store i32 %199, ptr %34, align 4, !tbaa !9
  br label %142, !llvm.loop !14

200:                                              ; preds = %146
  br label %201

201:                                              ; preds = %200, %96
  br label %202

202:                                              ; preds = %201
  %203 = load i32, ptr %32, align 4, !tbaa !9
  %204 = add i32 %203, 1
  store i32 %204, ptr %32, align 4, !tbaa !9
  br label %60, !llvm.loop !16

205:                                              ; preds = %135, %64
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #3
  %206 = load i32, ptr %33, align 4
  switch i32 %206, label %242 [
    i32 2, label %207
  ]

207:                                              ; preds = %205
  %208 = load i64, ptr %28, align 8, !tbaa !12
  %209 = icmp ult i64 0, %208
  br i1 %209, label %210, label %241

210:                                              ; preds = %207
  %211 = load i64, ptr %28, align 8, !tbaa !12
  %212 = sub i64 %211, 1
  %213 = lshr i64 %212, 3
  %214 = load ptr, ptr %14, align 8, !tbaa !5
  %215 = load ptr, ptr %214, align 8, !tbaa !5
  %216 = getelementptr inbounds i8, ptr %215, i64 %213
  store ptr %216, ptr %214, align 8, !tbaa !5
  %217 = load i64, ptr %28, align 8, !tbaa !12
  %218 = sub i64 %217, 1
  %219 = and i64 %218, 7
  %220 = trunc i64 %219 to i32
  %221 = ashr i32 128, %220
  %222 = sub nsw i32 %221, 1
  %223 = xor i32 %222, -1
  %224 = trunc i32 %223 to i8
  store i8 %224, ptr %21, align 1, !tbaa !11
  %225 = load i8, ptr %21, align 1, !tbaa !11
  %226 = zext i8 %225 to i32
  %227 = icmp ne i32 0, %226
  br i1 %227, label %228, label %240

228:                                              ; preds = %210
  %229 = load i8, ptr %21, align 1, !tbaa !11
  %230 = zext i8 %229 to i32
  %231 = load ptr, ptr %14, align 8, !tbaa !5
  %232 = load ptr, ptr %231, align 8, !tbaa !5
  %233 = load i8, ptr %232, align 1, !tbaa !11
  %234 = zext i8 %233 to i32
  %235 = and i32 %234, %230
  %236 = trunc i32 %235 to i8
  store i8 %236, ptr %232, align 1, !tbaa !11
  %237 = load ptr, ptr %14, align 8, !tbaa !5
  %238 = load ptr, ptr %237, align 8, !tbaa !5
  %239 = getelementptr inbounds i8, ptr %238, i32 1
  store ptr %239, ptr %237, align 8, !tbaa !5
  br label %240

240:                                              ; preds = %228, %210
  br label %241

241:                                              ; preds = %240, %207
  store i32 0, ptr %33, align 4
  br label %242

242:                                              ; preds = %241, %205
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #3
  %243 = load i32, ptr %33, align 4
  switch i32 %243, label %725 [
    i32 0, label %244
  ]

244:                                              ; preds = %242
  br label %724

245:                                              ; preds = %9
  %246 = load i32, ptr %19, align 4, !tbaa !9
  %247 = icmp eq i32 1, %246
  br i1 %247, label %248, label %404

248:                                              ; preds = %245
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #3
  %249 = load ptr, ptr %14, align 8, !tbaa !5
  %250 = load ptr, ptr %249, align 8, !tbaa !5
  store ptr %250, ptr %35, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #3
  store i32 0, ptr %36, align 4, !tbaa !9
  br label %251

251:                                              ; preds = %393, %248
  %252 = load i32, ptr %36, align 4, !tbaa !9
  %253 = load i32, ptr %18, align 4, !tbaa !9
  %254 = icmp ult i32 %252, %253
  br i1 %254, label %256, label %255

255:                                              ; preds = %251
  store i32 8, ptr %33, align 4
  br label %396

256:                                              ; preds = %251
  call void @llvm.lifetime.start.p0(i64 1, ptr %37) #3
  store i8 0, ptr %37, align 1, !tbaa !11
  %257 = load i8, ptr %25, align 1, !tbaa !11
  %258 = zext i8 %257 to i32
  %259 = load i8, ptr %23, align 1, !tbaa !11
  %260 = zext i8 %259 to i32
  %261 = and i32 %258, %260
  store i32 %261, ptr %24, align 4, !tbaa !9
  %262 = load i32, ptr %13, align 4, !tbaa !9
  %263 = icmp ne i32 %262, 0
  br i1 %263, label %264, label %268

264:                                              ; preds = %256
  %265 = load i8, ptr %23, align 1, !tbaa !11
  %266 = zext i8 %265 to i32
  %267 = ashr i32 %266, 1
  br label %272

268:                                              ; preds = %256
  %269 = load i8, ptr %23, align 1, !tbaa !11
  %270 = zext i8 %269 to i32
  %271 = shl i32 %270, 1
  br label %272

272:                                              ; preds = %268, %264
  %273 = phi i32 [ %267, %264 ], [ %271, %268 ]
  %274 = trunc i32 %273 to i8
  store i8 %274, ptr %23, align 1, !tbaa !11
  %275 = load i8, ptr %23, align 1, !tbaa !11
  %276 = icmp ne i8 %275, 0
  br i1 %276, label %287, label %277

277:                                              ; preds = %272
  %278 = load ptr, ptr %12, align 8, !tbaa !5
  %279 = getelementptr inbounds i8, ptr %278, i32 1
  store ptr %279, ptr %12, align 8, !tbaa !5
  %280 = load i32, ptr %13, align 4, !tbaa !9
  %281 = icmp ne i32 %280, 0
  %282 = zext i1 %281 to i64
  %283 = select i1 %281, i32 128, i32 1
  %284 = trunc i32 %283 to i8
  store i8 %284, ptr %23, align 1, !tbaa !11
  %285 = load ptr, ptr %12, align 8, !tbaa !5
  %286 = load i8, ptr %285, align 1, !tbaa !11
  store i8 %286, ptr %25, align 1, !tbaa !11
  br label %287

287:                                              ; preds = %277, %272
  %288 = load i32, ptr %17, align 4, !tbaa !9
  %289 = zext i32 %288 to i64
  %290 = load i64, ptr %27, align 8, !tbaa !12
  %291 = add i64 %290, %289
  store i64 %291, ptr %27, align 8, !tbaa !12
  %292 = load i32, ptr %24, align 4, !tbaa !9
  %293 = icmp ne i32 %292, 0
  br i1 %293, label %294, label %389

294:                                              ; preds = %287
  %295 = load ptr, ptr %11, align 8, !tbaa !5
  %296 = load i64, ptr %27, align 8, !tbaa !12
  %297 = sub i64 %296, 1
  %298 = lshr i64 %297, 3
  %299 = getelementptr inbounds i8, ptr %295, i64 %298
  store ptr %299, ptr %29, align 8, !tbaa !5
  %300 = load i64, ptr %27, align 8, !tbaa !12
  %301 = sub i64 %300, 1
  %302 = and i64 %301, 7
  %303 = trunc i64 %302 to i32
  %304 = ashr i32 128, %303
  %305 = trunc i32 %304 to i8
  store i8 %305, ptr %20, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #3
  store i32 0, ptr %38, align 4, !tbaa !9
  br label %306

306:                                              ; preds = %344, %294
  %307 = load i32, ptr %38, align 4, !tbaa !9
  %308 = load i32, ptr %17, align 4, !tbaa !9
  %309 = icmp ult i32 %307, %308
  br i1 %309, label %311, label %310

310:                                              ; preds = %306
  store i32 11, ptr %33, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #3
  br label %347

311:                                              ; preds = %306
  %312 = load ptr, ptr %29, align 8, !tbaa !5
  %313 = load i8, ptr %312, align 1, !tbaa !11
  %314 = zext i8 %313 to i32
  %315 = load i8, ptr %20, align 1, !tbaa !11
  %316 = zext i8 %315 to i32
  %317 = and i32 %314, %316
  %318 = trunc i32 %317 to i8
  store i8 %318, ptr %22, align 1, !tbaa !11
  %319 = load i8, ptr %20, align 1, !tbaa !11
  %320 = zext i8 %319 to i32
  %321 = shl i32 %320, 1
  %322 = trunc i32 %321 to i8
  store i8 %322, ptr %20, align 1, !tbaa !11
  %323 = load i8, ptr %20, align 1, !tbaa !11
  %324 = icmp ne i8 %323, 0
  br i1 %324, label %328, label %325

325:                                              ; preds = %311
  store i8 1, ptr %20, align 1, !tbaa !11
  %326 = load ptr, ptr %29, align 8, !tbaa !5
  %327 = getelementptr inbounds i8, ptr %326, i32 -1
  store ptr %327, ptr %29, align 8, !tbaa !5
  br label %328

328:                                              ; preds = %325, %311
  %329 = load i8, ptr %22, align 1, !tbaa !11
  %330 = zext i8 %329 to i32
  %331 = icmp ne i32 %330, 0
  br i1 %331, label %332, label %338

332:                                              ; preds = %328
  %333 = load i8, ptr %37, align 1, !tbaa !11
  %334 = zext i8 %333 to i32
  %335 = load i32, ptr %38, align 4, !tbaa !9
  %336 = shl i32 1, %335
  %337 = or i32 %334, %336
  br label %341

338:                                              ; preds = %328
  %339 = load i8, ptr %37, align 1, !tbaa !11
  %340 = zext i8 %339 to i32
  br label %341

341:                                              ; preds = %338, %332
  %342 = phi i32 [ %337, %332 ], [ %340, %338 ]
  %343 = trunc i32 %342 to i8
  store i8 %343, ptr %37, align 1, !tbaa !11
  br label %344

344:                                              ; preds = %341
  %345 = load i32, ptr %38, align 4, !tbaa !9
  %346 = add i32 %345, 1
  store i32 %346, ptr %38, align 4, !tbaa !9
  br label %306, !llvm.loop !17

347:                                              ; preds = %310
  %348 = load i32, ptr %17, align 4, !tbaa !9
  %349 = icmp eq i32 1, %348
  br i1 %349, label %350, label %375

350:                                              ; preds = %347
  %351 = load i8, ptr %37, align 1, !tbaa !11
  %352 = zext i8 %351 to i32
  %353 = icmp slt i32 0, %352
  br i1 %353, label %354, label %372

354:                                              ; preds = %350
  %355 = load i32, ptr %26, align 4, !tbaa !9
  %356 = icmp ult i32 255, %355
  br i1 %356, label %357, label %358

357:                                              ; preds = %354
  store i32 221, ptr %10, align 4
  store i32 1, ptr %33, align 4
  br label %390

358:                                              ; preds = %354
  %359 = load ptr, ptr %16, align 8, !tbaa !5
  %360 = load i64, ptr %359, align 8, !tbaa !12
  %361 = icmp ugt i64 8, %360
  br i1 %361, label %362, label %363

362:                                              ; preds = %358
  store i32 225, ptr %10, align 4
  store i32 1, ptr %33, align 4
  br label %390

363:                                              ; preds = %358
  %364 = load i32, ptr %26, align 4, !tbaa !9
  %365 = trunc i32 %364 to i8
  %366 = load ptr, ptr %35, align 8, !tbaa !5
  store i8 %365, ptr %366, align 1, !tbaa !11
  %367 = load ptr, ptr %35, align 8, !tbaa !5
  %368 = getelementptr inbounds i8, ptr %367, i32 1
  store ptr %368, ptr %35, align 8, !tbaa !5
  %369 = load ptr, ptr %16, align 8, !tbaa !5
  %370 = load i64, ptr %369, align 8, !tbaa !12
  %371 = sub i64 %370, 8
  store i64 %371, ptr %369, align 8, !tbaa !12
  br label %372

372:                                              ; preds = %363, %350
  %373 = load i32, ptr %26, align 4, !tbaa !9
  %374 = add i32 %373, 1
  store i32 %374, ptr %26, align 4, !tbaa !9
  br label %388

375:                                              ; preds = %347
  %376 = load ptr, ptr %16, align 8, !tbaa !5
  %377 = load i64, ptr %376, align 8, !tbaa !12
  %378 = icmp ugt i64 8, %377
  br i1 %378, label %379, label %380

379:                                              ; preds = %375
  store i32 225, ptr %10, align 4
  store i32 1, ptr %33, align 4
  br label %390

380:                                              ; preds = %375
  %381 = load i8, ptr %37, align 1, !tbaa !11
  %382 = load ptr, ptr %35, align 8, !tbaa !5
  store i8 %381, ptr %382, align 1, !tbaa !11
  %383 = load ptr, ptr %35, align 8, !tbaa !5
  %384 = getelementptr inbounds i8, ptr %383, i32 1
  store ptr %384, ptr %35, align 8, !tbaa !5
  %385 = load ptr, ptr %16, align 8, !tbaa !5
  %386 = load i64, ptr %385, align 8, !tbaa !12
  %387 = sub i64 %386, 8
  store i64 %387, ptr %385, align 8, !tbaa !12
  br label %388

388:                                              ; preds = %380, %372
  br label %389

389:                                              ; preds = %388, %287
  store i32 0, ptr %33, align 4
  br label %390

390:                                              ; preds = %389, %379, %362, %357
  call void @llvm.lifetime.end.p0(i64 1, ptr %37) #3
  %391 = load i32, ptr %33, align 4
  switch i32 %391, label %396 [
    i32 0, label %392
  ]

392:                                              ; preds = %390
  br label %393

393:                                              ; preds = %392
  %394 = load i32, ptr %36, align 4, !tbaa !9
  %395 = add i32 %394, 1
  store i32 %395, ptr %36, align 4, !tbaa !9
  br label %251, !llvm.loop !18

396:                                              ; preds = %390, %255
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #3
  %397 = load i32, ptr %33, align 4
  switch i32 %397, label %401 [
    i32 8, label %398
  ]

398:                                              ; preds = %396
  %399 = load ptr, ptr %35, align 8, !tbaa !5
  %400 = load ptr, ptr %14, align 8, !tbaa !5
  store ptr %399, ptr %400, align 8, !tbaa !5
  store i32 0, ptr %33, align 4
  br label %401

401:                                              ; preds = %398, %396
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #3
  %402 = load i32, ptr %33, align 4
  switch i32 %402, label %725 [
    i32 0, label %403
  ]

403:                                              ; preds = %401
  br label %723

404:                                              ; preds = %245
  %405 = load i32, ptr %19, align 4, !tbaa !9
  %406 = icmp eq i32 2, %405
  br i1 %406, label %407, label %565

407:                                              ; preds = %404
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #3
  %408 = load ptr, ptr %14, align 8, !tbaa !5
  %409 = load ptr, ptr %408, align 8, !tbaa !5
  store ptr %409, ptr %39, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #3
  store i32 0, ptr %40, align 4, !tbaa !9
  br label %410

410:                                              ; preds = %554, %407
  %411 = load i32, ptr %40, align 4, !tbaa !9
  %412 = load i32, ptr %18, align 4, !tbaa !9
  %413 = icmp ult i32 %411, %412
  br i1 %413, label %415, label %414

414:                                              ; preds = %410
  store i32 14, ptr %33, align 4
  br label %557

415:                                              ; preds = %410
  call void @llvm.lifetime.start.p0(i64 2, ptr %41) #3
  store i16 0, ptr %41, align 2, !tbaa !19
  %416 = load i8, ptr %25, align 1, !tbaa !11
  %417 = zext i8 %416 to i32
  %418 = load i8, ptr %23, align 1, !tbaa !11
  %419 = zext i8 %418 to i32
  %420 = and i32 %417, %419
  store i32 %420, ptr %24, align 4, !tbaa !9
  %421 = load i32, ptr %13, align 4, !tbaa !9
  %422 = icmp ne i32 %421, 0
  br i1 %422, label %423, label %427

423:                                              ; preds = %415
  %424 = load i8, ptr %23, align 1, !tbaa !11
  %425 = zext i8 %424 to i32
  %426 = ashr i32 %425, 1
  br label %431

427:                                              ; preds = %415
  %428 = load i8, ptr %23, align 1, !tbaa !11
  %429 = zext i8 %428 to i32
  %430 = shl i32 %429, 1
  br label %431

431:                                              ; preds = %427, %423
  %432 = phi i32 [ %426, %423 ], [ %430, %427 ]
  %433 = trunc i32 %432 to i8
  store i8 %433, ptr %23, align 1, !tbaa !11
  %434 = load i8, ptr %23, align 1, !tbaa !11
  %435 = icmp ne i8 %434, 0
  br i1 %435, label %446, label %436

436:                                              ; preds = %431
  %437 = load ptr, ptr %12, align 8, !tbaa !5
  %438 = getelementptr inbounds i8, ptr %437, i32 1
  store ptr %438, ptr %12, align 8, !tbaa !5
  %439 = load i32, ptr %13, align 4, !tbaa !9
  %440 = icmp ne i32 %439, 0
  %441 = zext i1 %440 to i64
  %442 = select i1 %440, i32 128, i32 1
  %443 = trunc i32 %442 to i8
  store i8 %443, ptr %23, align 1, !tbaa !11
  %444 = load ptr, ptr %12, align 8, !tbaa !5
  %445 = load i8, ptr %444, align 1, !tbaa !11
  store i8 %445, ptr %25, align 1, !tbaa !11
  br label %446

446:                                              ; preds = %436, %431
  %447 = load i32, ptr %17, align 4, !tbaa !9
  %448 = zext i32 %447 to i64
  %449 = load i64, ptr %27, align 8, !tbaa !12
  %450 = add i64 %449, %448
  store i64 %450, ptr %27, align 8, !tbaa !12
  %451 = load i32, ptr %24, align 4, !tbaa !9
  %452 = icmp ne i32 %451, 0
  br i1 %452, label %453, label %550

453:                                              ; preds = %446
  %454 = load ptr, ptr %11, align 8, !tbaa !5
  %455 = load i64, ptr %27, align 8, !tbaa !12
  %456 = sub i64 %455, 1
  %457 = lshr i64 %456, 3
  %458 = getelementptr inbounds i8, ptr %454, i64 %457
  store ptr %458, ptr %29, align 8, !tbaa !5
  %459 = load i64, ptr %27, align 8, !tbaa !12
  %460 = sub i64 %459, 1
  %461 = and i64 %460, 7
  %462 = trunc i64 %461 to i32
  %463 = ashr i32 128, %462
  %464 = trunc i32 %463 to i8
  store i8 %464, ptr %20, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #3
  store i32 0, ptr %42, align 4, !tbaa !9
  br label %465

465:                                              ; preds = %503, %453
  %466 = load i32, ptr %42, align 4, !tbaa !9
  %467 = load i32, ptr %17, align 4, !tbaa !9
  %468 = icmp ult i32 %466, %467
  br i1 %468, label %470, label %469

469:                                              ; preds = %465
  store i32 17, ptr %33, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #3
  br label %506

470:                                              ; preds = %465
  %471 = load ptr, ptr %29, align 8, !tbaa !5
  %472 = load i8, ptr %471, align 1, !tbaa !11
  %473 = zext i8 %472 to i32
  %474 = load i8, ptr %20, align 1, !tbaa !11
  %475 = zext i8 %474 to i32
  %476 = and i32 %473, %475
  %477 = trunc i32 %476 to i8
  store i8 %477, ptr %22, align 1, !tbaa !11
  %478 = load i8, ptr %20, align 1, !tbaa !11
  %479 = zext i8 %478 to i32
  %480 = shl i32 %479, 1
  %481 = trunc i32 %480 to i8
  store i8 %481, ptr %20, align 1, !tbaa !11
  %482 = load i8, ptr %20, align 1, !tbaa !11
  %483 = icmp ne i8 %482, 0
  br i1 %483, label %487, label %484

484:                                              ; preds = %470
  store i8 1, ptr %20, align 1, !tbaa !11
  %485 = load ptr, ptr %29, align 8, !tbaa !5
  %486 = getelementptr inbounds i8, ptr %485, i32 -1
  store ptr %486, ptr %29, align 8, !tbaa !5
  br label %487

487:                                              ; preds = %484, %470
  %488 = load i8, ptr %22, align 1, !tbaa !11
  %489 = zext i8 %488 to i32
  %490 = icmp ne i32 %489, 0
  br i1 %490, label %491, label %497

491:                                              ; preds = %487
  %492 = load i16, ptr %41, align 2, !tbaa !19
  %493 = zext i16 %492 to i32
  %494 = load i32, ptr %42, align 4, !tbaa !9
  %495 = shl i32 1, %494
  %496 = or i32 %493, %495
  br label %500

497:                                              ; preds = %487
  %498 = load i16, ptr %41, align 2, !tbaa !19
  %499 = zext i16 %498 to i32
  br label %500

500:                                              ; preds = %497, %491
  %501 = phi i32 [ %496, %491 ], [ %499, %497 ]
  %502 = trunc i32 %501 to i16
  store i16 %502, ptr %41, align 2, !tbaa !19
  br label %503

503:                                              ; preds = %500
  %504 = load i32, ptr %42, align 4, !tbaa !9
  %505 = add i32 %504, 1
  store i32 %505, ptr %42, align 4, !tbaa !9
  br label %465, !llvm.loop !21

506:                                              ; preds = %469
  %507 = load i32, ptr %17, align 4, !tbaa !9
  %508 = icmp eq i32 1, %507
  br i1 %508, label %509, label %535

509:                                              ; preds = %506
  %510 = load i16, ptr %41, align 2, !tbaa !19
  %511 = zext i16 %510 to i32
  %512 = icmp ult i32 0, %511
  br i1 %512, label %513, label %532

513:                                              ; preds = %509
  %514 = load i32, ptr %26, align 4, !tbaa !9
  %515 = icmp ult i32 65535, %514
  br i1 %515, label %516, label %517

516:                                              ; preds = %513
  store i32 221, ptr %10, align 4
  store i32 1, ptr %33, align 4
  br label %551

517:                                              ; preds = %513
  %518 = load ptr, ptr %16, align 8, !tbaa !5
  %519 = load i64, ptr %518, align 8, !tbaa !12
  %520 = icmp ugt i64 16, %519
  br i1 %520, label %521, label %522

521:                                              ; preds = %517
  store i32 225, ptr %10, align 4
  store i32 1, ptr %33, align 4
  br label %551

522:                                              ; preds = %517
  %523 = load i32, ptr %26, align 4, !tbaa !9
  %524 = trunc i32 %523 to i16
  %525 = call zeroext i16 @ref_cvt_le_2_be_16u(i16 noundef zeroext %524)
  %526 = load ptr, ptr %39, align 8, !tbaa !5
  store i16 %525, ptr %526, align 2, !tbaa !19
  %527 = load ptr, ptr %39, align 8, !tbaa !5
  %528 = getelementptr inbounds i16, ptr %527, i32 1
  store ptr %528, ptr %39, align 8, !tbaa !5
  %529 = load ptr, ptr %16, align 8, !tbaa !5
  %530 = load i64, ptr %529, align 8, !tbaa !12
  %531 = sub i64 %530, 16
  store i64 %531, ptr %529, align 8, !tbaa !12
  br label %532

532:                                              ; preds = %522, %509
  %533 = load i32, ptr %26, align 4, !tbaa !9
  %534 = add i32 %533, 1
  store i32 %534, ptr %26, align 4, !tbaa !9
  br label %549

535:                                              ; preds = %506
  %536 = load ptr, ptr %16, align 8, !tbaa !5
  %537 = load i64, ptr %536, align 8, !tbaa !12
  %538 = icmp ugt i64 16, %537
  br i1 %538, label %539, label %540

539:                                              ; preds = %535
  store i32 225, ptr %10, align 4
  store i32 1, ptr %33, align 4
  br label %551

540:                                              ; preds = %535
  %541 = load i16, ptr %41, align 2, !tbaa !19
  %542 = call zeroext i16 @ref_cvt_le_2_be_16u(i16 noundef zeroext %541)
  %543 = load ptr, ptr %39, align 8, !tbaa !5
  store i16 %542, ptr %543, align 2, !tbaa !19
  %544 = load ptr, ptr %39, align 8, !tbaa !5
  %545 = getelementptr inbounds i16, ptr %544, i32 1
  store ptr %545, ptr %39, align 8, !tbaa !5
  %546 = load ptr, ptr %16, align 8, !tbaa !5
  %547 = load i64, ptr %546, align 8, !tbaa !12
  %548 = sub i64 %547, 16
  store i64 %548, ptr %546, align 8, !tbaa !12
  br label %549

549:                                              ; preds = %540, %532
  br label %550

550:                                              ; preds = %549, %446
  store i32 0, ptr %33, align 4
  br label %551

551:                                              ; preds = %550, %539, %521, %516
  call void @llvm.lifetime.end.p0(i64 2, ptr %41) #3
  %552 = load i32, ptr %33, align 4
  switch i32 %552, label %557 [
    i32 0, label %553
  ]

553:                                              ; preds = %551
  br label %554

554:                                              ; preds = %553
  %555 = load i32, ptr %40, align 4, !tbaa !9
  %556 = add i32 %555, 1
  store i32 %556, ptr %40, align 4, !tbaa !9
  br label %410, !llvm.loop !22

557:                                              ; preds = %551, %414
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #3
  %558 = load i32, ptr %33, align 4
  switch i32 %558, label %562 [
    i32 14, label %559
  ]

559:                                              ; preds = %557
  %560 = load ptr, ptr %39, align 8, !tbaa !5
  %561 = load ptr, ptr %14, align 8, !tbaa !5
  store ptr %560, ptr %561, align 8, !tbaa !5
  store i32 0, ptr %33, align 4
  br label %562

562:                                              ; preds = %559, %557
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #3
  %563 = load i32, ptr %33, align 4
  switch i32 %563, label %725 [
    i32 0, label %564
  ]

564:                                              ; preds = %562
  br label %722

565:                                              ; preds = %404
  %566 = load i32, ptr %19, align 4, !tbaa !9
  %567 = icmp eq i32 3, %566
  br i1 %567, label %568, label %721

568:                                              ; preds = %565
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #3
  %569 = load ptr, ptr %14, align 8, !tbaa !5
  %570 = load ptr, ptr %569, align 8, !tbaa !5
  store ptr %570, ptr %43, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #3
  store i32 0, ptr %44, align 4, !tbaa !9
  br label %571

571:                                              ; preds = %710, %568
  %572 = load i32, ptr %44, align 4, !tbaa !9
  %573 = load i32, ptr %18, align 4, !tbaa !9
  %574 = icmp ult i32 %572, %573
  br i1 %574, label %576, label %575

575:                                              ; preds = %571
  store i32 20, ptr %33, align 4
  br label %713

576:                                              ; preds = %571
  call void @llvm.lifetime.start.p0(i64 4, ptr %45) #3
  store i32 0, ptr %45, align 4, !tbaa !9
  %577 = load i8, ptr %25, align 1, !tbaa !11
  %578 = zext i8 %577 to i32
  %579 = load i8, ptr %23, align 1, !tbaa !11
  %580 = zext i8 %579 to i32
  %581 = and i32 %578, %580
  store i32 %581, ptr %24, align 4, !tbaa !9
  %582 = load i32, ptr %13, align 4, !tbaa !9
  %583 = icmp ne i32 %582, 0
  br i1 %583, label %584, label %588

584:                                              ; preds = %576
  %585 = load i8, ptr %23, align 1, !tbaa !11
  %586 = zext i8 %585 to i32
  %587 = ashr i32 %586, 1
  br label %592

588:                                              ; preds = %576
  %589 = load i8, ptr %23, align 1, !tbaa !11
  %590 = zext i8 %589 to i32
  %591 = shl i32 %590, 1
  br label %592

592:                                              ; preds = %588, %584
  %593 = phi i32 [ %587, %584 ], [ %591, %588 ]
  %594 = trunc i32 %593 to i8
  store i8 %594, ptr %23, align 1, !tbaa !11
  %595 = load i8, ptr %23, align 1, !tbaa !11
  %596 = icmp ne i8 %595, 0
  br i1 %596, label %607, label %597

597:                                              ; preds = %592
  %598 = load ptr, ptr %12, align 8, !tbaa !5
  %599 = getelementptr inbounds i8, ptr %598, i32 1
  store ptr %599, ptr %12, align 8, !tbaa !5
  %600 = load i32, ptr %13, align 4, !tbaa !9
  %601 = icmp ne i32 %600, 0
  %602 = zext i1 %601 to i64
  %603 = select i1 %601, i32 128, i32 1
  %604 = trunc i32 %603 to i8
  store i8 %604, ptr %23, align 1, !tbaa !11
  %605 = load ptr, ptr %12, align 8, !tbaa !5
  %606 = load i8, ptr %605, align 1, !tbaa !11
  store i8 %606, ptr %25, align 1, !tbaa !11
  br label %607

607:                                              ; preds = %597, %592
  %608 = load i32, ptr %17, align 4, !tbaa !9
  %609 = zext i32 %608 to i64
  %610 = load i64, ptr %27, align 8, !tbaa !12
  %611 = add i64 %610, %609
  store i64 %611, ptr %27, align 8, !tbaa !12
  %612 = load i32, ptr %24, align 4, !tbaa !9
  %613 = icmp ne i32 %612, 0
  br i1 %613, label %614, label %706

614:                                              ; preds = %607
  %615 = load ptr, ptr %11, align 8, !tbaa !5
  %616 = load i64, ptr %27, align 8, !tbaa !12
  %617 = sub i64 %616, 1
  %618 = lshr i64 %617, 3
  %619 = getelementptr inbounds i8, ptr %615, i64 %618
  store ptr %619, ptr %29, align 8, !tbaa !5
  %620 = load i64, ptr %27, align 8, !tbaa !12
  %621 = sub i64 %620, 1
  %622 = and i64 %621, 7
  %623 = trunc i64 %622 to i32
  %624 = ashr i32 128, %623
  %625 = trunc i32 %624 to i8
  store i8 %625, ptr %20, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %46) #3
  store i32 0, ptr %46, align 4, !tbaa !9
  br label %626

626:                                              ; preds = %661, %614
  %627 = load i32, ptr %46, align 4, !tbaa !9
  %628 = load i32, ptr %17, align 4, !tbaa !9
  %629 = icmp ult i32 %627, %628
  br i1 %629, label %631, label %630

630:                                              ; preds = %626
  store i32 23, ptr %33, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #3
  br label %664

631:                                              ; preds = %626
  %632 = load ptr, ptr %29, align 8, !tbaa !5
  %633 = load i8, ptr %632, align 1, !tbaa !11
  %634 = zext i8 %633 to i32
  %635 = load i8, ptr %20, align 1, !tbaa !11
  %636 = zext i8 %635 to i32
  %637 = and i32 %634, %636
  %638 = trunc i32 %637 to i8
  store i8 %638, ptr %22, align 1, !tbaa !11
  %639 = load i8, ptr %20, align 1, !tbaa !11
  %640 = zext i8 %639 to i32
  %641 = shl i32 %640, 1
  %642 = trunc i32 %641 to i8
  store i8 %642, ptr %20, align 1, !tbaa !11
  %643 = load i8, ptr %20, align 1, !tbaa !11
  %644 = icmp ne i8 %643, 0
  br i1 %644, label %648, label %645

645:                                              ; preds = %631
  store i8 1, ptr %20, align 1, !tbaa !11
  %646 = load ptr, ptr %29, align 8, !tbaa !5
  %647 = getelementptr inbounds i8, ptr %646, i32 -1
  store ptr %647, ptr %29, align 8, !tbaa !5
  br label %648

648:                                              ; preds = %645, %631
  %649 = load i8, ptr %22, align 1, !tbaa !11
  %650 = zext i8 %649 to i32
  %651 = icmp ne i32 %650, 0
  br i1 %651, label %652, label %657

652:                                              ; preds = %648
  %653 = load i32, ptr %45, align 4, !tbaa !9
  %654 = load i32, ptr %46, align 4, !tbaa !9
  %655 = shl i32 1, %654
  %656 = or i32 %653, %655
  br label %659

657:                                              ; preds = %648
  %658 = load i32, ptr %45, align 4, !tbaa !9
  br label %659

659:                                              ; preds = %657, %652
  %660 = phi i32 [ %656, %652 ], [ %658, %657 ]
  store i32 %660, ptr %45, align 4, !tbaa !9
  br label %661

661:                                              ; preds = %659
  %662 = load i32, ptr %46, align 4, !tbaa !9
  %663 = add i32 %662, 1
  store i32 %663, ptr %46, align 4, !tbaa !9
  br label %626, !llvm.loop !23

664:                                              ; preds = %630
  %665 = load i32, ptr %17, align 4, !tbaa !9
  %666 = icmp eq i32 1, %665
  br i1 %666, label %667, label %691

667:                                              ; preds = %664
  %668 = load i32, ptr %45, align 4, !tbaa !9
  %669 = icmp ult i32 0, %668
  br i1 %669, label %670, label %688

670:                                              ; preds = %667
  %671 = load i32, ptr %26, align 4, !tbaa !9
  %672 = icmp eq i32 -1, %671
  br i1 %672, label %673, label %674

673:                                              ; preds = %670
  store i32 221, ptr %10, align 4
  store i32 1, ptr %33, align 4
  br label %707

674:                                              ; preds = %670
  %675 = load ptr, ptr %16, align 8, !tbaa !5
  %676 = load i64, ptr %675, align 8, !tbaa !12
  %677 = icmp ugt i64 32, %676
  br i1 %677, label %678, label %679

678:                                              ; preds = %674
  store i32 225, ptr %10, align 4
  store i32 1, ptr %33, align 4
  br label %707

679:                                              ; preds = %674
  %680 = load i32, ptr %26, align 4, !tbaa !9
  %681 = call i32 @ref_cvt_le_2_be_32u(i32 noundef %680)
  %682 = load ptr, ptr %43, align 8, !tbaa !5
  store i32 %681, ptr %682, align 4, !tbaa !9
  %683 = load ptr, ptr %43, align 8, !tbaa !5
  %684 = getelementptr inbounds i32, ptr %683, i32 1
  store ptr %684, ptr %43, align 8, !tbaa !5
  %685 = load ptr, ptr %16, align 8, !tbaa !5
  %686 = load i64, ptr %685, align 8, !tbaa !12
  %687 = sub i64 %686, 32
  store i64 %687, ptr %685, align 8, !tbaa !12
  br label %688

688:                                              ; preds = %679, %667
  %689 = load i32, ptr %26, align 4, !tbaa !9
  %690 = add i32 %689, 1
  store i32 %690, ptr %26, align 4, !tbaa !9
  br label %705

691:                                              ; preds = %664
  %692 = load ptr, ptr %16, align 8, !tbaa !5
  %693 = load i64, ptr %692, align 8, !tbaa !12
  %694 = icmp ugt i64 32, %693
  br i1 %694, label %695, label %696

695:                                              ; preds = %691
  store i32 225, ptr %10, align 4
  store i32 1, ptr %33, align 4
  br label %707

696:                                              ; preds = %691
  %697 = load i32, ptr %45, align 4, !tbaa !9
  %698 = call i32 @ref_cvt_le_2_be_32u(i32 noundef %697)
  %699 = load ptr, ptr %43, align 8, !tbaa !5
  store i32 %698, ptr %699, align 4, !tbaa !9
  %700 = load ptr, ptr %43, align 8, !tbaa !5
  %701 = getelementptr inbounds i32, ptr %700, i32 1
  store ptr %701, ptr %43, align 8, !tbaa !5
  %702 = load ptr, ptr %16, align 8, !tbaa !5
  %703 = load i64, ptr %702, align 8, !tbaa !12
  %704 = sub i64 %703, 32
  store i64 %704, ptr %702, align 8, !tbaa !12
  br label %705

705:                                              ; preds = %696, %688
  br label %706

706:                                              ; preds = %705, %607
  store i32 0, ptr %33, align 4
  br label %707

707:                                              ; preds = %706, %695, %678, %673
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #3
  %708 = load i32, ptr %33, align 4
  switch i32 %708, label %713 [
    i32 0, label %709
  ]

709:                                              ; preds = %707
  br label %710

710:                                              ; preds = %709
  %711 = load i32, ptr %44, align 4, !tbaa !9
  %712 = add i32 %711, 1
  store i32 %712, ptr %44, align 4, !tbaa !9
  br label %571, !llvm.loop !24

713:                                              ; preds = %707, %575
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #3
  %714 = load i32, ptr %33, align 4
  switch i32 %714, label %718 [
    i32 20, label %715
  ]

715:                                              ; preds = %713
  %716 = load ptr, ptr %43, align 8, !tbaa !5
  %717 = load ptr, ptr %14, align 8, !tbaa !5
  store ptr %716, ptr %717, align 8, !tbaa !5
  store i32 0, ptr %33, align 4
  br label %718

718:                                              ; preds = %715, %713
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #3
  %719 = load i32, ptr %33, align 4
  switch i32 %719, label %725 [
    i32 0, label %720
  ]

720:                                              ; preds = %718
  br label %721

721:                                              ; preds = %720, %565
  br label %722

722:                                              ; preds = %721, %564
  br label %723

723:                                              ; preds = %722, %403
  br label %724

724:                                              ; preds = %723, %244
  store i32 0, ptr %10, align 4
  store i32 1, ptr %33, align 4
  br label %725

725:                                              ; preds = %724, %718, %562, %401, %242
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #3
  call void @llvm.lifetime.end.p0(i64 1, ptr %25) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #3
  call void @llvm.lifetime.end.p0(i64 1, ptr %23) #3
  call void @llvm.lifetime.end.p0(i64 1, ptr %22) #3
  call void @llvm.lifetime.end.p0(i64 1, ptr %21) #3
  call void @llvm.lifetime.end.p0(i64 1, ptr %20) #3
  %726 = load i32, ptr %10, align 4
  ret i32 %726
}

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { inlinehint nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { 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 = distinct !{!14, !15}
!15 = !{!"llvm.loop.mustprogress"}
!16 = distinct !{!16, !15}
!17 = distinct !{!17, !15}
!18 = distinct !{!18, !15}
!19 = !{!20, !20, i64 0}
!20 = !{!"short", !7, i64 0}
!21 = distinct !{!21, !15}
!22 = distinct !{!22, !15}
!23 = distinct !{!23, !15}
!24 = distinct !{!24, !15}


; 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: inlinehint nounwind uwtable
declare hidden zeroext i16 @ref_cvt_le_2_be_16u(i16 noundef zeroext) local_unnamed_addr #0

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

; Function Attrs: nounwind uwtable
define dso_local noundef i32 @ref_copy_mask_be_be_nu(ptr nocapture noundef readonly %0, ptr nocapture noundef readonly %1, i32 noundef %2, ptr nocapture noundef %3, i32 noundef %4, ptr nocapture noundef %5, i32 noundef %6, i32 noundef %7, i32 noundef %8) local_unnamed_addr #1 {
  %.not = icmp eq i32 %2, 0
  %10 = select i1 %.not, i8 1, i8 -128
  %11 = load i8, ptr %1, align 1, !tbaa !5
  switch i32 %8, label %.critedge [
    i32 0, label %12
    i32 1, label %67
    i32 2, label %131
    i32 3, label %197
  ]

12:                                               ; preds = %9
  %13 = load ptr, ptr %3, align 8, !tbaa !8
  %.not358.not481.not = icmp eq i32 %7, 0
  br i1 %.not358.not481.not, label %.critedge, label %.lr.ph489

.lr.ph489:                                        ; preds = %12
  %14 = zext i32 %6 to i64
  %.not495 = icmp eq i32 %6, 0
  br label %15

15:                                               ; preds = %.lr.ph489, %.loopexit
  %.0247487 = phi i32 [ 0, %.lr.ph489 ], [ %53, %.loopexit ]
  %.0269486 = phi i64 [ 0, %.lr.ph489 ], [ %.1270, %.loopexit ]
  %.0272485 = phi i64 [ 0, %.lr.ph489 ], [ %24, %.loopexit ]
  %.0285484 = phi i8 [ %11, %.lr.ph489 ], [ %.1286, %.loopexit ]
  %.0293483 = phi i8 [ %10, %.lr.ph489 ], [ %.1294, %.loopexit ]
  %.0311482 = phi ptr [ %1, %.lr.ph489 ], [ %.1312, %.loopexit ]
  %16 = and i8 %.0285484, %.0293483
  %17 = lshr i8 %.0293483, 1
  %18 = shl i8 %.0293483, 1
  %19 = select i1 %.not, i8 %18, i8 %17
  %.not353 = icmp eq i8 %19, 0
  br i1 %.not353, label %20, label %23

20:                                               ; preds = %15
  %21 = getelementptr inbounds i8, ptr %.0311482, i64 1
  %22 = load i8, ptr %21, align 1, !tbaa !5
  br label %23

23:                                               ; preds = %20, %15
  %.1312 = phi ptr [ %.0311482, %15 ], [ %21, %20 ]
  %.1294 = phi i8 [ %19, %15 ], [ %10, %20 ]
  %.1286 = phi i8 [ %.0285484, %15 ], [ %22, %20 ]
  %24 = add nuw i64 %.0272485, %14
  %.not354 = icmp eq i8 %16, 0
  br i1 %.not354, label %.loopexit, label %25

25:                                               ; preds = %23
  %26 = add i64 %.0269486, %14
  %27 = load i64, ptr %5, align 8, !tbaa !10
  %28 = icmp ult i64 %27, %14
  br i1 %28, label %.critedge, label %29

29:                                               ; preds = %25
  %30 = sub i64 %27, %14
  store i64 %30, ptr %5, align 8, !tbaa !10
  br i1 %.not495, label %.loopexit, label %.lr.ph480.preheader

.lr.ph480.preheader:                              ; preds = %29
  %31 = add i64 %26, -1
  %32 = lshr i64 %31, 3
  %33 = getelementptr inbounds i8, ptr %13, i64 %32
  %34 = trunc i64 %31 to i8
  %35 = and i8 %34, 7
  %36 = lshr exact i8 -128, %35
  %37 = add i64 %24, -1
  %38 = lshr i64 %37, 3
  %39 = getelementptr inbounds i8, ptr %0, i64 %38
  %40 = trunc i64 %37 to i8
  %41 = and i8 %40, 7
  %42 = lshr exact i8 -128, %41
  br label %.lr.ph480

.lr.ph480:                                        ; preds = %.lr.ph480.preheader, %.lr.ph480
  %.0241478 = phi i32 [ %52, %.lr.ph480 ], [ 0, %.lr.ph480.preheader ]
  %.0259477 = phi ptr [ %spec.select362, %.lr.ph480 ], [ %33, %.lr.ph480.preheader ]
  %.0261476 = phi ptr [ %spec.select360, %.lr.ph480 ], [ %39, %.lr.ph480.preheader ]
  %.0301475 = phi i8 [ %spec.select361, %.lr.ph480 ], [ %36, %.lr.ph480.preheader ]
  %.0303474 = phi i8 [ %spec.select, %.lr.ph480 ], [ %42, %.lr.ph480.preheader ]
  %43 = load i8, ptr %.0261476, align 1, !tbaa !5
  %44 = and i8 %43, %.0303474
  %45 = shl i8 %.0303474, 1
  %.not355 = icmp eq i8 %45, 0
  %spec.select = tail call i8 @llvm.umax.i8(i8 %45, i8 1)
  %spec.select360.idx = sext i1 %.not355 to i64
  %spec.select360 = getelementptr inbounds i8, ptr %.0261476, i64 %spec.select360.idx
  %.not356 = icmp eq i8 %44, 0
  %46 = load i8, ptr %.0259477, align 1, !tbaa !5
  %47 = or i8 %46, %.0301475
  %48 = xor i8 %.0301475, -1
  %49 = and i8 %46, %48
  %50 = select i1 %.not356, i8 %49, i8 %47
  store i8 %50, ptr %.0259477, align 1, !tbaa !5
  %51 = shl i8 %.0301475, 1
  %.not357 = icmp eq i8 %51, 0
  %spec.select361 = tail call i8 @llvm.umax.i8(i8 %51, i8 1)
  %spec.select362.idx = sext i1 %.not357 to i64
  %spec.select362 = getelementptr inbounds i8, ptr %.0259477, i64 %spec.select362.idx
  %52 = add nuw i32 %.0241478, 1
  %exitcond508.not = icmp eq i32 %52, %6
  br i1 %exitcond508.not, label %.loopexit, label %.lr.ph480, !llvm.loop !12

.loopexit:                                        ; preds = %.lr.ph480, %29, %23
  %.1270 = phi i64 [ %.0269486, %23 ], [ %26, %29 ], [ %26, %.lr.ph480 ]
  %53 = add nuw i32 %.0247487, 1
  %exitcond509.not = icmp eq i32 %53, %7
  br i1 %exitcond509.not, label %._crit_edge490, label %15, !llvm.loop !14

._crit_edge490:                                   ; preds = %.loopexit
  %.not359 = icmp eq i64 %.1270, 0
  br i1 %.not359, label %.critedge, label %54

54:                                               ; preds = %._crit_edge490
  %55 = add i64 %.1270, -1
  %56 = lshr i64 %55, 3
  %57 = load ptr, ptr %3, align 8, !tbaa !8
  %58 = getelementptr inbounds i8, ptr %57, i64 %56
  store ptr %58, ptr %3, align 8, !tbaa !8
  %59 = trunc i64 %55 to i8
  %60 = and i8 %59, 7
  %61 = lshr exact i8 -128, %60
  %62 = sub i8 0, %61
  %63 = load i8, ptr %58, align 1, !tbaa !5
  %64 = and i8 %63, %62
  store i8 %64, ptr %58, align 1, !tbaa !5
  %65 = load ptr, ptr %3, align 8, !tbaa !8
  %66 = getelementptr inbounds i8, ptr %65, i64 1
  br label %.critedge.sink.split

67:                                               ; preds = %9
  %68 = load ptr, ptr %3, align 8, !tbaa !8
  %.not350.not463.not = icmp eq i32 %7, 0
  br i1 %.not350.not463.not, label %.critedge.sink.split, label %.lr.ph472

.lr.ph472:                                        ; preds = %67
  %69 = zext i32 %6 to i64
  %.not494 = icmp eq i32 %6, 0
  %70 = icmp eq i32 %6, 1
  %xtraiter549 = and i32 %6, 1
  %71 = icmp eq i32 %6, 1
  %unroll_iter552 = and i32 %6, -2
  %lcmp.mod550.not = icmp eq i32 %xtraiter549, 0
  br label %72

72:                                               ; preds = %.lr.ph472, %129
  %.0235470 = phi i32 [ 0, %.lr.ph472 ], [ %130, %129 ]
  %.0236469 = phi ptr [ %68, %.lr.ph472 ], [ %.3239.ph, %129 ]
  %.1273468 = phi i64 [ 0, %.lr.ph472 ], [ %81, %129 ]
  %.0276467 = phi i32 [ %4, %.lr.ph472 ], [ %.2278.ph, %129 ]
  %.2287466 = phi i8 [ %11, %.lr.ph472 ], [ %.3288, %129 ]
  %.2295465 = phi i8 [ %10, %.lr.ph472 ], [ %.3296, %129 ]
  %.2313464 = phi ptr [ %1, %.lr.ph472 ], [ %.3314, %129 ]
  %73 = and i8 %.2287466, %.2295465
  %74 = lshr i8 %.2295465, 1
  %75 = shl i8 %.2295465, 1
  %76 = select i1 %.not, i8 %75, i8 %74
  %.not347 = icmp eq i8 %76, 0
  br i1 %.not347, label %77, label %80

77:                                               ; preds = %72
  %78 = getelementptr inbounds i8, ptr %.2313464, i64 1
  %79 = load i8, ptr %78, align 1, !tbaa !5
  br label %80

80:                                               ; preds = %77, %72
  %.3314 = phi ptr [ %.2313464, %72 ], [ %78, %77 ]
  %.3296 = phi i8 [ %76, %72 ], [ %10, %77 ]
  %.3288 = phi i8 [ %.2287466, %72 ], [ %79, %77 ]
  %81 = add nuw i64 %.1273468, %69
  %.not348 = icmp eq i8 %73, 0
  br i1 %.not348, label %129, label %82

82:                                               ; preds = %80
  br i1 %.not494, label %._crit_edge461.thread, label %.lr.ph460.preheader

.lr.ph460.preheader:                              ; preds = %82
  %83 = add i64 %81, -1
  %84 = trunc i64 %83 to i8
  %85 = and i8 %84, 7
  %86 = lshr exact i8 -128, %85
  %87 = lshr i64 %83, 3
  %88 = getelementptr inbounds i8, ptr %0, i64 %87
  br i1 %71, label %._crit_edge461.unr-lcssa, label %.lr.ph460

._crit_edge461.unr-lcssa:                         ; preds = %.lr.ph460, %.lr.ph460.preheader
  %.lcssa.ph = phi i8 [ poison, %.lr.ph460.preheader ], [ %108, %.lr.ph460 ]
  %.0233458.unr = phi i32 [ 0, %.lr.ph460.preheader ], [ %109, %.lr.ph460 ]
  %.0234457.unr = phi i8 [ 0, %.lr.ph460.preheader ], [ %108, %.lr.ph460 ]
  %.2263456.unr = phi ptr [ %88, %.lr.ph460.preheader ], [ %spec.select364.1, %.lr.ph460 ]
  %.2305455.unr = phi i8 [ %86, %.lr.ph460.preheader ], [ %spec.select363.1, %.lr.ph460 ]
  br i1 %lcmp.mod550.not, label %._crit_edge461, label %.lr.ph460.epil

.lr.ph460.epil:                                   ; preds = %._crit_edge461.unr-lcssa
  %89 = load i8, ptr %.2263456.unr, align 1, !tbaa !5
  %90 = and i8 %89, %.2305455.unr
  %.not352.epil = icmp eq i8 %90, 0
  %91 = shl nuw i32 1, %.0233458.unr
  %92 = trunc i32 %91 to i8
  %93 = select i1 %.not352.epil, i8 0, i8 %92
  %94 = or i8 %93, %.0234457.unr
  br label %._crit_edge461

._crit_edge461:                                   ; preds = %._crit_edge461.unr-lcssa, %.lr.ph460.epil
  %.lcssa = phi i8 [ %.lcssa.ph, %._crit_edge461.unr-lcssa ], [ %94, %.lr.ph460.epil ]
  br i1 %70, label %110, label %._crit_edge461.thread

.lr.ph460:                                        ; preds = %.lr.ph460.preheader, %.lr.ph460
  %.0233458 = phi i32 [ %109, %.lr.ph460 ], [ 0, %.lr.ph460.preheader ]
  %.0234457 = phi i8 [ %108, %.lr.ph460 ], [ 0, %.lr.ph460.preheader ]
  %.2263456 = phi ptr [ %spec.select364.1, %.lr.ph460 ], [ %88, %.lr.ph460.preheader ]
  %.2305455 = phi i8 [ %spec.select363.1, %.lr.ph460 ], [ %86, %.lr.ph460.preheader ]
  %niter553 = phi i32 [ %niter553.next.1, %.lr.ph460 ], [ 0, %.lr.ph460.preheader ]
  %95 = load i8, ptr %.2263456, align 1, !tbaa !5
  %96 = and i8 %95, %.2305455
  %97 = shl i8 %.2305455, 1
  %.not351 = icmp eq i8 %97, 0
  %spec.select363 = tail call i8 @llvm.umax.i8(i8 %97, i8 1)
  %spec.select364.idx = sext i1 %.not351 to i64
  %spec.select364 = getelementptr inbounds i8, ptr %.2263456, i64 %spec.select364.idx
  %.not352 = icmp eq i8 %96, 0
  %98 = shl nuw i32 1, %.0233458
  %99 = trunc i32 %98 to i8
  %100 = select i1 %.not352, i8 0, i8 %99
  %101 = or i8 %100, %.0234457
  %102 = load i8, ptr %spec.select364, align 1, !tbaa !5
  %103 = and i8 %102, %spec.select363
  %104 = shl i8 %spec.select363, 1
  %.not351.1 = icmp eq i8 %104, 0
  %spec.select363.1 = tail call i8 @llvm.umax.i8(i8 %104, i8 1)
  %spec.select364.idx.1 = sext i1 %.not351.1 to i64
  %spec.select364.1 = getelementptr inbounds i8, ptr %spec.select364, i64 %spec.select364.idx.1
  %.not352.1 = icmp eq i8 %103, 0
  %105 = shl nuw i32 2, %.0233458
  %106 = trunc i32 %105 to i8
  %107 = select i1 %.not352.1, i8 0, i8 %106
  %108 = or i8 %107, %101
  %109 = add nuw i32 %.0233458, 2
  %niter553.next.1 = add i32 %niter553, 2
  %niter553.ncmp.1 = icmp eq i32 %niter553.next.1, %unroll_iter552
  br i1 %niter553.ncmp.1, label %._crit_edge461.unr-lcssa, label %.lr.ph460, !llvm.loop !15

110:                                              ; preds = %._crit_edge461
  %.not349 = icmp eq i8 %.lcssa, 0
  br i1 %.not349, label %121, label %111

111:                                              ; preds = %110
  %112 = icmp ugt i32 %.0276467, 255
  br i1 %112, label %.critedge, label %113

113:                                              ; preds = %111
  %114 = load i64, ptr %5, align 8, !tbaa !10
  %115 = icmp ult i64 %114, 8
  br i1 %115, label %.critedge, label %116

116:                                              ; preds = %113
  %117 = trunc nuw i32 %.0276467 to i8
  store i8 %117, ptr %.0236469, align 1, !tbaa !5
  %118 = getelementptr inbounds i8, ptr %.0236469, i64 1
  %119 = load i64, ptr %5, align 8, !tbaa !10
  %120 = add i64 %119, -8
  store i64 %120, ptr %5, align 8, !tbaa !10
  br label %121

121:                                              ; preds = %116, %110
  %.1237 = phi ptr [ %118, %116 ], [ %.0236469, %110 ]
  %122 = add i32 %.0276467, 1
  br label %129

._crit_edge461.thread:                            ; preds = %82, %._crit_edge461
  %.0234.lcssa513 = phi i8 [ %.lcssa, %._crit_edge461 ], [ 0, %82 ]
  %123 = load i64, ptr %5, align 8, !tbaa !10
  %124 = icmp ult i64 %123, 8
  br i1 %124, label %.critedge, label %125

125:                                              ; preds = %._crit_edge461.thread
  store i8 %.0234.lcssa513, ptr %.0236469, align 1, !tbaa !5
  %126 = getelementptr inbounds i8, ptr %.0236469, i64 1
  %127 = load i64, ptr %5, align 8, !tbaa !10
  %128 = add i64 %127, -8
  store i64 %128, ptr %5, align 8, !tbaa !10
  br label %129

129:                                              ; preds = %121, %125, %80
  %.2278.ph = phi i32 [ %.0276467, %80 ], [ %.0276467, %125 ], [ %122, %121 ]
  %.3239.ph = phi ptr [ %.0236469, %80 ], [ %126, %125 ], [ %.1237, %121 ]
  %130 = add nuw i32 %.0235470, 1
  %exitcond507.not = icmp eq i32 %130, %7
  br i1 %exitcond507.not, label %.critedge.sink.split, label %72, !llvm.loop !16

131:                                              ; preds = %9
  %132 = load ptr, ptr %3, align 8, !tbaa !8
  %.not344.not444.not = icmp eq i32 %7, 0
  br i1 %.not344.not444.not, label %.critedge.sink.split, label %.lr.ph453

.lr.ph453:                                        ; preds = %131
  %133 = zext i32 %6 to i64
  %.not493 = icmp eq i32 %6, 0
  %134 = icmp eq i32 %6, 1
  %xtraiter544 = and i32 %6, 1
  %135 = icmp eq i32 %6, 1
  %unroll_iter547 = and i32 %6, -2
  %lcmp.mod545.not = icmp eq i32 %xtraiter544, 0
  br label %136

136:                                              ; preds = %.lr.ph453, %195
  %.0227451 = phi i32 [ 0, %.lr.ph453 ], [ %196, %195 ]
  %.0228450 = phi ptr [ %132, %.lr.ph453 ], [ %.3231.ph, %195 ]
  %.2274449 = phi i64 [ 0, %.lr.ph453 ], [ %145, %195 ]
  %.3279448 = phi i32 [ %4, %.lr.ph453 ], [ %.5281.ph, %195 ]
  %.4289447 = phi i8 [ %11, %.lr.ph453 ], [ %.5290, %195 ]
  %.4297446 = phi i8 [ %10, %.lr.ph453 ], [ %.5298, %195 ]
  %.4315445 = phi ptr [ %1, %.lr.ph453 ], [ %.5316, %195 ]
  %137 = and i8 %.4289447, %.4297446
  %138 = lshr i8 %.4297446, 1
  %139 = shl i8 %.4297446, 1
  %140 = select i1 %.not, i8 %139, i8 %138
  %.not341 = icmp eq i8 %140, 0
  br i1 %.not341, label %141, label %144

141:                                              ; preds = %136
  %142 = getelementptr inbounds i8, ptr %.4315445, i64 1
  %143 = load i8, ptr %142, align 1, !tbaa !5
  br label %144

144:                                              ; preds = %141, %136
  %.5316 = phi ptr [ %.4315445, %136 ], [ %142, %141 ]
  %.5298 = phi i8 [ %140, %136 ], [ %10, %141 ]
  %.5290 = phi i8 [ %.4289447, %136 ], [ %143, %141 ]
  %145 = add nuw i64 %.2274449, %133
  %.not342 = icmp eq i8 %137, 0
  br i1 %.not342, label %195, label %146

146:                                              ; preds = %144
  br i1 %.not493, label %._crit_edge442.thread, label %.lr.ph441.preheader

.lr.ph441.preheader:                              ; preds = %146
  %147 = add i64 %145, -1
  %148 = trunc i64 %147 to i8
  %149 = and i8 %148, 7
  %150 = lshr exact i8 -128, %149
  %151 = lshr i64 %147, 3
  %152 = getelementptr inbounds i8, ptr %0, i64 %151
  br i1 %135, label %._crit_edge442.unr-lcssa, label %.lr.ph441

._crit_edge442.unr-lcssa:                         ; preds = %.lr.ph441, %.lr.ph441.preheader
  %.lcssa538.ph = phi i16 [ poison, %.lr.ph441.preheader ], [ %172, %.lr.ph441 ]
  %.0225439.unr = phi i32 [ 0, %.lr.ph441.preheader ], [ %173, %.lr.ph441 ]
  %.0226438.unr = phi i16 [ 0, %.lr.ph441.preheader ], [ %172, %.lr.ph441 ]
  %.4265437.unr = phi ptr [ %152, %.lr.ph441.preheader ], [ %spec.select368.1, %.lr.ph441 ]
  %.4307436.unr = phi i8 [ %150, %.lr.ph441.preheader ], [ %spec.select367.1, %.lr.ph441 ]
  br i1 %lcmp.mod545.not, label %._crit_edge442, label %.lr.ph441.epil

.lr.ph441.epil:                                   ; preds = %._crit_edge442.unr-lcssa
  %153 = load i8, ptr %.4265437.unr, align 1, !tbaa !5
  %154 = and i8 %153, %.4307436.unr
  %.not346.epil = icmp eq i8 %154, 0
  %155 = shl nuw i32 1, %.0225439.unr
  %156 = trunc i32 %155 to i16
  %157 = select i1 %.not346.epil, i16 0, i16 %156
  %158 = or i16 %157, %.0226438.unr
  br label %._crit_edge442

._crit_edge442:                                   ; preds = %._crit_edge442.unr-lcssa, %.lr.ph441.epil
  %.lcssa538 = phi i16 [ %.lcssa538.ph, %._crit_edge442.unr-lcssa ], [ %158, %.lr.ph441.epil ]
  br i1 %134, label %174, label %._crit_edge442.thread

.lr.ph441:                                        ; preds = %.lr.ph441.preheader, %.lr.ph441
  %.0225439 = phi i32 [ %173, %.lr.ph441 ], [ 0, %.lr.ph441.preheader ]
  %.0226438 = phi i16 [ %172, %.lr.ph441 ], [ 0, %.lr.ph441.preheader ]
  %.4265437 = phi ptr [ %spec.select368.1, %.lr.ph441 ], [ %152, %.lr.ph441.preheader ]
  %.4307436 = phi i8 [ %spec.select367.1, %.lr.ph441 ], [ %150, %.lr.ph441.preheader ]
  %niter548 = phi i32 [ %niter548.next.1, %.lr.ph441 ], [ 0, %.lr.ph441.preheader ]
  %159 = load i8, ptr %.4265437, align 1, !tbaa !5
  %160 = and i8 %159, %.4307436
  %161 = shl i8 %.4307436, 1
  %.not345 = icmp eq i8 %161, 0
  %spec.select367 = tail call i8 @llvm.umax.i8(i8 %161, i8 1)
  %spec.select368.idx = sext i1 %.not345 to i64
  %spec.select368 = getelementptr inbounds i8, ptr %.4265437, i64 %spec.select368.idx
  %.not346 = icmp eq i8 %160, 0
  %162 = shl nuw i32 1, %.0225439
  %163 = trunc i32 %162 to i16
  %164 = select i1 %.not346, i16 0, i16 %163
  %165 = or i16 %164, %.0226438
  %166 = load i8, ptr %spec.select368, align 1, !tbaa !5
  %167 = and i8 %166, %spec.select367
  %168 = shl i8 %spec.select367, 1
  %.not345.1 = icmp eq i8 %168, 0
  %spec.select367.1 = tail call i8 @llvm.umax.i8(i8 %168, i8 1)
  %spec.select368.idx.1 = sext i1 %.not345.1 to i64
  %spec.select368.1 = getelementptr inbounds i8, ptr %spec.select368, i64 %spec.select368.idx.1
  %.not346.1 = icmp eq i8 %167, 0
  %169 = shl nuw i32 2, %.0225439
  %170 = trunc i32 %169 to i16
  %171 = select i1 %.not346.1, i16 0, i16 %170
  %172 = or i16 %171, %165
  %173 = add nuw i32 %.0225439, 2
  %niter548.next.1 = add i32 %niter548, 2
  %niter548.ncmp.1 = icmp eq i32 %niter548.next.1, %unroll_iter547
  br i1 %niter548.ncmp.1, label %._crit_edge442.unr-lcssa, label %.lr.ph441, !llvm.loop !17

174:                                              ; preds = %._crit_edge442
  %.not343 = icmp eq i16 %.lcssa538, 0
  br i1 %.not343, label %186, label %175

175:                                              ; preds = %174
  %176 = icmp ugt i32 %.3279448, 65535
  br i1 %176, label %.critedge, label %177

177:                                              ; preds = %175
  %178 = load i64, ptr %5, align 8, !tbaa !10
  %179 = icmp ult i64 %178, 16
  br i1 %179, label %.critedge, label %180

180:                                              ; preds = %177
  %181 = trunc nuw i32 %.3279448 to i16
  %182 = tail call zeroext i16 @ref_cvt_le_2_be_16u(i16 noundef zeroext %181)
  store i16 %182, ptr %.0228450, align 2, !tbaa !18
  %183 = getelementptr inbounds i8, ptr %.0228450, i64 2
  %184 = load i64, ptr %5, align 8, !tbaa !10
  %185 = add i64 %184, -16
  store i64 %185, ptr %5, align 8, !tbaa !10
  br label %186

186:                                              ; preds = %180, %174
  %.1229 = phi ptr [ %183, %180 ], [ %.0228450, %174 ]
  %187 = add i32 %.3279448, 1
  br label %195

._crit_edge442.thread:                            ; preds = %146, %._crit_edge442
  %.0226.lcssa515 = phi i16 [ %.lcssa538, %._crit_edge442 ], [ 0, %146 ]
  %188 = load i64, ptr %5, align 8, !tbaa !10
  %189 = icmp ult i64 %188, 16
  br i1 %189, label %.critedge, label %190

190:                                              ; preds = %._crit_edge442.thread
  %191 = tail call zeroext i16 @ref_cvt_le_2_be_16u(i16 noundef zeroext %.0226.lcssa515)
  store i16 %191, ptr %.0228450, align 2, !tbaa !18
  %192 = getelementptr inbounds i8, ptr %.0228450, i64 2
  %193 = load i64, ptr %5, align 8, !tbaa !10
  %194 = add i64 %193, -16
  store i64 %194, ptr %5, align 8, !tbaa !10
  br label %195

195:                                              ; preds = %186, %190, %144
  %.5281.ph = phi i32 [ %.3279448, %144 ], [ %.3279448, %190 ], [ %187, %186 ]
  %.3231.ph = phi ptr [ %.0228450, %144 ], [ %192, %190 ], [ %.1229, %186 ]
  %196 = add nuw i32 %.0227451, 1
  %exitcond505.not = icmp eq i32 %196, %7
  br i1 %exitcond505.not, label %.critedge.sink.split, label %136, !llvm.loop !20

197:                                              ; preds = %9
  %198 = load ptr, ptr %3, align 8, !tbaa !8
  %.not338.not425.not = icmp eq i32 %7, 0
  br i1 %.not338.not425.not, label %.critedge.sink.split, label %.lr.ph434

.lr.ph434:                                        ; preds = %197
  %199 = zext i32 %6 to i64
  %.not492 = icmp eq i32 %6, 0
  %200 = icmp eq i32 %6, 1
  %xtraiter = and i32 %6, 1
  %201 = icmp eq i32 %6, 1
  %unroll_iter = and i32 %6, -2
  %lcmp.mod.not = icmp eq i32 %xtraiter, 0
  br label %202

202:                                              ; preds = %.lr.ph434, %257
  %.0223432 = phi i32 [ 0, %.lr.ph434 ], [ %258, %257 ]
  %.0224431 = phi ptr [ %198, %.lr.ph434 ], [ %.3.ph, %257 ]
  %.3275430 = phi i64 [ 0, %.lr.ph434 ], [ %211, %257 ]
  %.6282429 = phi i32 [ %4, %.lr.ph434 ], [ %.8284.ph, %257 ]
  %.6291428 = phi i8 [ %11, %.lr.ph434 ], [ %.7292, %257 ]
  %.6299427 = phi i8 [ %10, %.lr.ph434 ], [ %.7300, %257 ]
  %.6317426 = phi ptr [ %1, %.lr.ph434 ], [ %.7318, %257 ]
  %203 = and i8 %.6291428, %.6299427
  %204 = lshr i8 %.6299427, 1
  %205 = shl i8 %.6299427, 1
  %206 = select i1 %.not, i8 %205, i8 %204
  %.not335 = icmp eq i8 %206, 0
  br i1 %.not335, label %207, label %210

207:                                              ; preds = %202
  %208 = getelementptr inbounds i8, ptr %.6317426, i64 1
  %209 = load i8, ptr %208, align 1, !tbaa !5
  br label %210

210:                                              ; preds = %207, %202
  %.7318 = phi ptr [ %.6317426, %202 ], [ %208, %207 ]
  %.7300 = phi i8 [ %206, %202 ], [ %10, %207 ]
  %.7292 = phi i8 [ %.6291428, %202 ], [ %209, %207 ]
  %211 = add nuw i64 %.3275430, %199
  %.not336 = icmp eq i8 %203, 0
  br i1 %.not336, label %257, label %212

212:                                              ; preds = %210
  br i1 %.not492, label %._crit_edge.thread, label %.lr.ph.preheader

.lr.ph.preheader:                                 ; preds = %212
  %213 = add i64 %211, -1
  %214 = trunc i64 %213 to i8
  %215 = and i8 %214, 7
  %216 = lshr exact i8 -128, %215
  %217 = lshr i64 %213, 3
  %218 = getelementptr inbounds i8, ptr %0, i64 %217
  br i1 %201, label %._crit_edge.unr-lcssa, label %.lr.ph

._crit_edge.unr-lcssa:                            ; preds = %.lr.ph, %.lr.ph.preheader
  %.lcssa542.ph = phi i32 [ poison, %.lr.ph.preheader ], [ %235, %.lr.ph ]
  %.0424.unr = phi i32 [ 0, %.lr.ph.preheader ], [ %236, %.lr.ph ]
  %.0222423.unr = phi i32 [ 0, %.lr.ph.preheader ], [ %235, %.lr.ph ]
  %.6267422.unr = phi ptr [ %218, %.lr.ph.preheader ], [ %spec.select372.1, %.lr.ph ]
  %.6309421.unr = phi i8 [ %216, %.lr.ph.preheader ], [ %spec.select371.1, %.lr.ph ]
  br i1 %lcmp.mod.not, label %._crit_edge, label %.lr.ph.epil

.lr.ph.epil:                                      ; preds = %._crit_edge.unr-lcssa
  %219 = load i8, ptr %.6267422.unr, align 1, !tbaa !5
  %220 = and i8 %219, %.6309421.unr
  %.not340.epil = icmp eq i8 %220, 0
  %221 = shl nuw i32 1, %.0424.unr
  %222 = select i1 %.not340.epil, i32 0, i32 %221
  %223 = or i32 %222, %.0222423.unr
  br label %._crit_edge

._crit_edge:                                      ; preds = %._crit_edge.unr-lcssa, %.lr.ph.epil
  %.lcssa542 = phi i32 [ %.lcssa542.ph, %._crit_edge.unr-lcssa ], [ %223, %.lr.ph.epil ]
  br i1 %200, label %237, label %._crit_edge.thread

.lr.ph:                                           ; preds = %.lr.ph.preheader, %.lr.ph
  %.0424 = phi i32 [ %236, %.lr.ph ], [ 0, %.lr.ph.preheader ]
  %.0222423 = phi i32 [ %235, %.lr.ph ], [ 0, %.lr.ph.preheader ]
  %.6267422 = phi ptr [ %spec.select372.1, %.lr.ph ], [ %218, %.lr.ph.preheader ]
  %.6309421 = phi i8 [ %spec.select371.1, %.lr.ph ], [ %216, %.lr.ph.preheader ]
  %niter = phi i32 [ %niter.next.1, %.lr.ph ], [ 0, %.lr.ph.preheader ]
  %224 = load i8, ptr %.6267422, align 1, !tbaa !5
  %225 = and i8 %224, %.6309421
  %226 = shl i8 %.6309421, 1
  %.not339 = icmp eq i8 %226, 0
  %spec.select371 = tail call i8 @llvm.umax.i8(i8 %226, i8 1)
  %spec.select372.idx = sext i1 %.not339 to i64
  %spec.select372 = getelementptr inbounds i8, ptr %.6267422, i64 %spec.select372.idx
  %.not340 = icmp eq i8 %225, 0
  %227 = shl nuw i32 1, %.0424
  %228 = select i1 %.not340, i32 0, i32 %227
  %229 = or i32 %228, %.0222423
  %230 = load i8, ptr %spec.select372, align 1, !tbaa !5
  %231 = and i8 %230, %spec.select371
  %232 = shl i8 %spec.select371, 1
  %.not339.1 = icmp eq i8 %232, 0
  %spec.select371.1 = tail call i8 @llvm.umax.i8(i8 %232, i8 1)
  %spec.select372.idx.1 = sext i1 %.not339.1 to i64
  %spec.select372.1 = getelementptr inbounds i8, ptr %spec.select372, i64 %spec.select372.idx.1
  %.not340.1 = icmp eq i8 %231, 0
  %233 = shl nuw i32 2, %.0424
  %234 = select i1 %.not340.1, i32 0, i32 %233
  %235 = or i32 %234, %229
  %236 = add nuw i32 %.0424, 2
  %niter.next.1 = add i32 %niter, 2
  %niter.ncmp.1 = icmp eq i32 %niter.next.1, %unroll_iter
  br i1 %niter.ncmp.1, label %._crit_edge.unr-lcssa, label %.lr.ph, !llvm.loop !21

237:                                              ; preds = %._crit_edge
  %.not337 = icmp eq i32 %.lcssa542, 0
  br i1 %.not337, label %248, label %238

238:                                              ; preds = %237
  %239 = icmp eq i32 %.6282429, -1
  br i1 %239, label %.critedge, label %240

240:                                              ; preds = %238
  %241 = load i64, ptr %5, align 8, !tbaa !10
  %242 = icmp ult i64 %241, 32
  br i1 %242, label %.critedge, label %243

243:                                              ; preds = %240
  %244 = tail call i32 @ref_cvt_le_2_be_32u(i32 noundef %.6282429)
  store i32 %244, ptr %.0224431, align 4, !tbaa !22
  %245 = getelementptr inbounds i8, ptr %.0224431, i64 4
  %246 = load i64, ptr %5, align 8, !tbaa !10
  %247 = add i64 %246, -32
  store i64 %247, ptr %5, align 8, !tbaa !10
  br label %248

248:                                              ; preds = %243, %237
  %.1 = phi ptr [ %245, %243 ], [ %.0224431, %237 ]
  %249 = add i32 %.6282429, 1
  br label %257

._crit_edge.thread:                               ; preds = %212, %._crit_edge
  %.0222.lcssa517 = phi i32 [ %.lcssa542, %._crit_edge ], [ 0, %212 ]
  %250 = load i64, ptr %5, align 8, !tbaa !10
  %251 = icmp ult i64 %250, 32
  br i1 %251, label %.critedge, label %252

252:                                              ; preds = %._crit_edge.thread
  %253 = tail call i32 @ref_cvt_le_2_be_32u(i32 noundef %.0222.lcssa517)
  store i32 %253, ptr %.0224431, align 4, !tbaa !22
  %254 = getelementptr inbounds i8, ptr %.0224431, i64 4
  %255 = load i64, ptr %5, align 8, !tbaa !10
  %256 = add i64 %255, -32
  store i64 %256, ptr %5, align 8, !tbaa !10
  br label %257

257:                                              ; preds = %248, %252, %210
  %.8284.ph = phi i32 [ %.6282429, %210 ], [ %.6282429, %252 ], [ %249, %248 ]
  %.3.ph = phi ptr [ %.0224431, %210 ], [ %254, %252 ], [ %.1, %248 ]
  %258 = add nuw i32 %.0223432, 1
  %exitcond503.not = icmp eq i32 %258, %7
  br i1 %exitcond503.not, label %.critedge.sink.split, label %202, !llvm.loop !24

.critedge.sink.split:                             ; preds = %257, %195, %129, %197, %131, %67, %54
  %.0236.lcssa.sink = phi ptr [ %66, %54 ], [ %68, %67 ], [ %132, %131 ], [ %198, %197 ], [ %.3239.ph, %129 ], [ %.3231.ph, %195 ], [ %.3.ph, %257 ]
  store ptr %.0236.lcssa.sink, ptr %3, align 8, !tbaa !8
  br label %.critedge

.critedge:                                        ; preds = %._crit_edge.thread, %240, %238, %._crit_edge442.thread, %177, %175, %._crit_edge461.thread, %113, %111, %25, %.critedge.sink.split, %12, %9, %._crit_edge490
  %.10258 = phi i32 [ 0, %._crit_edge490 ], [ 0, %9 ], [ 0, %12 ], [ 0, %.critedge.sink.split ], [ 225, %25 ], [ 221, %111 ], [ 225, %113 ], [ 225, %._crit_edge461.thread ], [ 221, %175 ], [ 225, %177 ], [ 225, %._crit_edge442.thread ], [ 221, %238 ], [ 225, %240 ], [ 225, %._crit_edge.thread ]
  ret i32 %.10258
}

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

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

!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 = !{!"omnipotent char", !7, i64 0}
!7 = !{!"Simple C/C++ TBAA"}
!8 = !{!9, !9, i64 0}
!9 = !{!"any pointer", !6, i64 0}
!10 = !{!11, !11, i64 0}
!11 = !{!"long", !6, i64 0}
!12 = distinct !{!12, !13}
!13 = !{!"llvm.loop.mustprogress"}
!14 = distinct !{!14, !13}
!15 = distinct !{!15, !13}
!16 = distinct !{!16, !13}
!17 = distinct !{!17, !13}
!18 = !{!19, !19, i64 0}
!19 = !{!"short", !6, i64 0}
!20 = distinct !{!20, !13}
!21 = distinct !{!21, !13}
!22 = !{!23, !23, i64 0}
!23 = !{!"int", !6, i64 0}
!24 = distinct !{!24, !13}


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