; LLVM IR from lzfse/lzfse :: src (lzvn_decode_base)

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

@lzvn_decode.opc_tbl = external hidden global [256 x ptr], align 16

; Function Attrs: nounwind uwtable
define dso_local void @lzvn_decode(ptr noundef %0) #0 {
  %2 = alloca ptr, align 8
  %3 = alloca i64, align 8
  %4 = alloca i64, align 8
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca i64, align 8
  %8 = alloca i64, align 8
  %9 = alloca i64, align 8
  %10 = alloca i64, align 8
  %11 = alloca i8, align 1
  %12 = alloca i16, align 2
  %13 = alloca i64, align 8
  %14 = alloca i64, align 8
  %15 = alloca i64, align 8
  %16 = alloca i64, align 8
  %17 = alloca i64, align 8
  %18 = alloca i64, align 8
  %19 = alloca i64, align 8
  %20 = alloca i64, align 8
  store ptr %0, ptr %2, align 8, !tbaa !5
  %21 = load ptr, ptr %2, align 8, !tbaa !5
  %22 = getelementptr inbounds %struct.lzvn_decoder_state, ptr %21, i32 0, i32 1
  %23 = load ptr, ptr %22, align 8, !tbaa !9
  %24 = load ptr, ptr %2, align 8, !tbaa !5
  %25 = getelementptr inbounds %struct.lzvn_decoder_state, ptr %24, i32 0, i32 0
  %26 = load ptr, ptr %25, align 8, !tbaa !13
  %27 = ptrtoint ptr %23 to i64
  %28 = ptrtoint ptr %26 to i64
  %29 = sub i64 %27, %28
  store i64 %29, ptr %3, align 8, !tbaa !14
  %30 = load ptr, ptr %2, align 8, !tbaa !5
  %31 = getelementptr inbounds %struct.lzvn_decoder_state, ptr %30, i32 0, i32 4
  %32 = load ptr, ptr %31, align 8, !tbaa !15
  %33 = load ptr, ptr %2, align 8, !tbaa !5
  %34 = getelementptr inbounds %struct.lzvn_decoder_state, ptr %33, i32 0, i32 2
  %35 = load ptr, ptr %34, align 8, !tbaa !16
  %36 = ptrtoint ptr %32 to i64
  %37 = ptrtoint ptr %35 to i64
  %38 = sub i64 %36, %37
  store i64 %38, ptr %4, align 8, !tbaa !14
  %39 = load i64, ptr %3, align 8, !tbaa !14
  %40 = icmp eq i64 %39, 0
  br i1 %40, label %44, label %41

41:                                               ; preds = %1
  %42 = load i64, ptr %4, align 8, !tbaa !14
  %43 = icmp eq i64 %42, 0
  br i1 %43, label %44, label %45

44:                                               ; preds = %41, %1
  br label %689

45:                                               ; preds = %41
  %46 = load ptr, ptr %2, align 8, !tbaa !5
  %47 = getelementptr inbounds %struct.lzvn_decoder_state, ptr %46, i32 0, i32 0
  %48 = load ptr, ptr %47, align 8, !tbaa !13
  store ptr %48, ptr %5, align 8, !tbaa !5
  %49 = load ptr, ptr %2, align 8, !tbaa !5
  %50 = getelementptr inbounds %struct.lzvn_decoder_state, ptr %49, i32 0, i32 2
  %51 = load ptr, ptr %50, align 8, !tbaa !16
  store ptr %51, ptr %6, align 8, !tbaa !5
  %52 = load ptr, ptr %2, align 8, !tbaa !5
  %53 = getelementptr inbounds %struct.lzvn_decoder_state, ptr %52, i32 0, i32 9
  %54 = load i64, ptr %53, align 8, !tbaa !17
  store i64 %54, ptr %7, align 8, !tbaa !14
  %55 = load ptr, ptr %2, align 8, !tbaa !5
  %56 = getelementptr inbounds %struct.lzvn_decoder_state, ptr %55, i32 0, i32 6
  %57 = load i64, ptr %56, align 8, !tbaa !18
  %58 = icmp ne i64 %57, 0
  br i1 %58, label %64, label %59

59:                                               ; preds = %45
  %60 = load ptr, ptr %2, align 8, !tbaa !5
  %61 = getelementptr inbounds %struct.lzvn_decoder_state, ptr %60, i32 0, i32 7
  %62 = load i64, ptr %61, align 8, !tbaa !19
  %63 = icmp ne i64 %62, 0
  br i1 %63, label %64, label %88

64:                                               ; preds = %59, %45
  %65 = load ptr, ptr %2, align 8, !tbaa !5
  %66 = getelementptr inbounds %struct.lzvn_decoder_state, ptr %65, i32 0, i32 6
  %67 = load i64, ptr %66, align 8, !tbaa !18
  store i64 %67, ptr %9, align 8, !tbaa !14
  %68 = load ptr, ptr %2, align 8, !tbaa !5
  %69 = getelementptr inbounds %struct.lzvn_decoder_state, ptr %68, i32 0, i32 7
  %70 = load i64, ptr %69, align 8, !tbaa !19
  store i64 %70, ptr %8, align 8, !tbaa !14
  %71 = load ptr, ptr %2, align 8, !tbaa !5
  %72 = getelementptr inbounds %struct.lzvn_decoder_state, ptr %71, i32 0, i32 8
  %73 = load i64, ptr %72, align 8, !tbaa !20
  store i64 %73, ptr %7, align 8, !tbaa !14
  store i64 0, ptr %10, align 8, !tbaa !14
  %74 = load ptr, ptr %2, align 8, !tbaa !5
  %75 = getelementptr inbounds %struct.lzvn_decoder_state, ptr %74, i32 0, i32 8
  store i64 0, ptr %75, align 8, !tbaa !20
  %76 = load ptr, ptr %2, align 8, !tbaa !5
  %77 = getelementptr inbounds %struct.lzvn_decoder_state, ptr %76, i32 0, i32 7
  store i64 0, ptr %77, align 8, !tbaa !19
  %78 = load ptr, ptr %2, align 8, !tbaa !5
  %79 = getelementptr inbounds %struct.lzvn_decoder_state, ptr %78, i32 0, i32 6
  store i64 0, ptr %79, align 8, !tbaa !18
  %80 = load i64, ptr %8, align 8, !tbaa !14
  %81 = icmp eq i64 %80, 0
  br i1 %81, label %82, label %83

82:                                               ; preds = %64
  br label %517

83:                                               ; preds = %64
  %84 = load i64, ptr %9, align 8, !tbaa !14
  %85 = icmp eq i64 %84, 0
  br i1 %85, label %86, label %87

86:                                               ; preds = %83
  br label %325

87:                                               ; preds = %83
  br label %216

88:                                               ; preds = %59
  %89 = load ptr, ptr %5, align 8, !tbaa !5
  %90 = getelementptr inbounds i8, ptr %89, i64 0
  %91 = load i8, ptr %90, align 1, !tbaa !21
  store i8 %91, ptr %11, align 1, !tbaa !21
  %92 = load i8, ptr %11, align 1, !tbaa !21
  %93 = zext i8 %92 to i64
  %94 = getelementptr inbounds [256 x ptr], ptr @lzvn_decode.opc_tbl, i64 0, i64 %93
  %95 = load ptr, ptr %94, align 8, !tbaa !5
  br label %690

96:                                               ; preds = %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690
  %97 = load ptr, ptr %5, align 8, !tbaa !5
  %98 = load ptr, ptr %2, align 8, !tbaa !5
  %99 = getelementptr inbounds %struct.lzvn_decoder_state, ptr %98, i32 0, i32 0
  store ptr %97, ptr %99, align 8, !tbaa !13
  %100 = load ptr, ptr %6, align 8, !tbaa !5
  %101 = load ptr, ptr %2, align 8, !tbaa !5
  %102 = getelementptr inbounds %struct.lzvn_decoder_state, ptr %101, i32 0, i32 2
  store ptr %100, ptr %102, align 8, !tbaa !16
  %103 = load i64, ptr %7, align 8, !tbaa !14
  %104 = load ptr, ptr %2, align 8, !tbaa !5
  %105 = getelementptr inbounds %struct.lzvn_decoder_state, ptr %104, i32 0, i32 9
  store i64 %103, ptr %105, align 8, !tbaa !17
  store i64 2, ptr %10, align 8, !tbaa !14
  %106 = load i8, ptr %11, align 1, !tbaa !21
  %107 = zext i8 %106 to i64
  %108 = call i64 @extract(i64 noundef %107, i32 noundef 6, i32 noundef 2)
  store i64 %108, ptr %9, align 8, !tbaa !14
  %109 = load i8, ptr %11, align 1, !tbaa !21
  %110 = zext i8 %109 to i64
  %111 = call i64 @extract(i64 noundef %110, i32 noundef 3, i32 noundef 3)
  %112 = add i64 %111, 3
  store i64 %112, ptr %8, align 8, !tbaa !14
  %113 = load i64, ptr %3, align 8, !tbaa !14
  %114 = load i64, ptr %10, align 8, !tbaa !14
  %115 = load i64, ptr %9, align 8, !tbaa !14
  %116 = add i64 %114, %115
  %117 = icmp ule i64 %113, %116
  br i1 %117, label %118, label %119

118:                                              ; preds = %96
  br label %689

119:                                              ; preds = %96
  %120 = load i8, ptr %11, align 1, !tbaa !21
  %121 = zext i8 %120 to i64
  %122 = call i64 @extract(i64 noundef %121, i32 noundef 0, i32 noundef 3)
  %123 = shl i64 %122, 8
  %124 = load ptr, ptr %5, align 8, !tbaa !5
  %125 = getelementptr inbounds i8, ptr %124, i64 1
  %126 = load i8, ptr %125, align 1, !tbaa !21
  %127 = zext i8 %126 to i64
  %128 = or i64 %123, %127
  store i64 %128, ptr %7, align 8, !tbaa !14
  br label %216

129:                                              ; preds = %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690
  %130 = load ptr, ptr %5, align 8, !tbaa !5
  %131 = load ptr, ptr %2, align 8, !tbaa !5
  %132 = getelementptr inbounds %struct.lzvn_decoder_state, ptr %131, i32 0, i32 0
  store ptr %130, ptr %132, align 8, !tbaa !13
  %133 = load ptr, ptr %6, align 8, !tbaa !5
  %134 = load ptr, ptr %2, align 8, !tbaa !5
  %135 = getelementptr inbounds %struct.lzvn_decoder_state, ptr %134, i32 0, i32 2
  store ptr %133, ptr %135, align 8, !tbaa !16
  %136 = load i64, ptr %7, align 8, !tbaa !14
  %137 = load ptr, ptr %2, align 8, !tbaa !5
  %138 = getelementptr inbounds %struct.lzvn_decoder_state, ptr %137, i32 0, i32 9
  store i64 %136, ptr %138, align 8, !tbaa !17
  store i64 3, ptr %10, align 8, !tbaa !14
  %139 = load i8, ptr %11, align 1, !tbaa !21
  %140 = zext i8 %139 to i64
  %141 = call i64 @extract(i64 noundef %140, i32 noundef 3, i32 noundef 2)
  store i64 %141, ptr %9, align 8, !tbaa !14
  %142 = load i64, ptr %3, align 8, !tbaa !14
  %143 = load i64, ptr %10, align 8, !tbaa !14
  %144 = load i64, ptr %9, align 8, !tbaa !14
  %145 = add i64 %143, %144
  %146 = icmp ule i64 %142, %145
  br i1 %146, label %147, label %148

147:                                              ; preds = %129
  br label %689

148:                                              ; preds = %129
  %149 = load ptr, ptr %5, align 8, !tbaa !5
  %150 = getelementptr inbounds i8, ptr %149, i64 1
  %151 = call zeroext i16 @load2(ptr noundef %150)
  store i16 %151, ptr %12, align 2, !tbaa !22
  %152 = load i8, ptr %11, align 1, !tbaa !21
  %153 = zext i8 %152 to i64
  %154 = call i64 @extract(i64 noundef %153, i32 noundef 0, i32 noundef 3)
  %155 = shl i64 %154, 2
  %156 = load i16, ptr %12, align 2, !tbaa !22
  %157 = zext i16 %156 to i64
  %158 = call i64 @extract(i64 noundef %157, i32 noundef 0, i32 noundef 2)
  %159 = or i64 %155, %158
  %160 = add i64 %159, 3
  store i64 %160, ptr %8, align 8, !tbaa !14
  %161 = load i16, ptr %12, align 2, !tbaa !22
  %162 = zext i16 %161 to i64
  %163 = call i64 @extract(i64 noundef %162, i32 noundef 2, i32 noundef 14)
  store i64 %163, ptr %7, align 8, !tbaa !14
  br label %216

164:                                              ; preds = %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690
  %165 = load ptr, ptr %5, align 8, !tbaa !5
  %166 = load ptr, ptr %2, align 8, !tbaa !5
  %167 = getelementptr inbounds %struct.lzvn_decoder_state, ptr %166, i32 0, i32 0
  store ptr %165, ptr %167, align 8, !tbaa !13
  %168 = load ptr, ptr %6, align 8, !tbaa !5
  %169 = load ptr, ptr %2, align 8, !tbaa !5
  %170 = getelementptr inbounds %struct.lzvn_decoder_state, ptr %169, i32 0, i32 2
  store ptr %168, ptr %170, align 8, !tbaa !16
  %171 = load i64, ptr %7, align 8, !tbaa !14
  %172 = load ptr, ptr %2, align 8, !tbaa !5
  %173 = getelementptr inbounds %struct.lzvn_decoder_state, ptr %172, i32 0, i32 9
  store i64 %171, ptr %173, align 8, !tbaa !17
  store i64 3, ptr %10, align 8, !tbaa !14
  %174 = load i8, ptr %11, align 1, !tbaa !21
  %175 = zext i8 %174 to i64
  %176 = call i64 @extract(i64 noundef %175, i32 noundef 6, i32 noundef 2)
  store i64 %176, ptr %9, align 8, !tbaa !14
  %177 = load i8, ptr %11, align 1, !tbaa !21
  %178 = zext i8 %177 to i64
  %179 = call i64 @extract(i64 noundef %178, i32 noundef 3, i32 noundef 3)
  %180 = add i64 %179, 3
  store i64 %180, ptr %8, align 8, !tbaa !14
  %181 = load i64, ptr %3, align 8, !tbaa !14
  %182 = load i64, ptr %10, align 8, !tbaa !14
  %183 = load i64, ptr %9, align 8, !tbaa !14
  %184 = add i64 %182, %183
  %185 = icmp ule i64 %181, %184
  br i1 %185, label %186, label %187

186:                                              ; preds = %164
  br label %689

187:                                              ; preds = %164
  %188 = load ptr, ptr %5, align 8, !tbaa !5
  %189 = getelementptr inbounds i8, ptr %188, i64 1
  %190 = call zeroext i16 @load2(ptr noundef %189)
  %191 = zext i16 %190 to i64
  store i64 %191, ptr %7, align 8, !tbaa !14
  br label %216

192:                                              ; preds = %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690
  %193 = load ptr, ptr %5, align 8, !tbaa !5
  %194 = load ptr, ptr %2, align 8, !tbaa !5
  %195 = getelementptr inbounds %struct.lzvn_decoder_state, ptr %194, i32 0, i32 0
  store ptr %193, ptr %195, align 8, !tbaa !13
  %196 = load ptr, ptr %6, align 8, !tbaa !5
  %197 = load ptr, ptr %2, align 8, !tbaa !5
  %198 = getelementptr inbounds %struct.lzvn_decoder_state, ptr %197, i32 0, i32 2
  store ptr %196, ptr %198, align 8, !tbaa !16
  %199 = load i64, ptr %7, align 8, !tbaa !14
  %200 = load ptr, ptr %2, align 8, !tbaa !5
  %201 = getelementptr inbounds %struct.lzvn_decoder_state, ptr %200, i32 0, i32 9
  store i64 %199, ptr %201, align 8, !tbaa !17
  store i64 1, ptr %10, align 8, !tbaa !14
  %202 = load i8, ptr %11, align 1, !tbaa !21
  %203 = zext i8 %202 to i64
  %204 = call i64 @extract(i64 noundef %203, i32 noundef 6, i32 noundef 2)
  store i64 %204, ptr %9, align 8, !tbaa !14
  %205 = load i8, ptr %11, align 1, !tbaa !21
  %206 = zext i8 %205 to i64
  %207 = call i64 @extract(i64 noundef %206, i32 noundef 3, i32 noundef 3)
  %208 = add i64 %207, 3
  store i64 %208, ptr %8, align 8, !tbaa !14
  %209 = load i64, ptr %3, align 8, !tbaa !14
  %210 = load i64, ptr %10, align 8, !tbaa !14
  %211 = load i64, ptr %9, align 8, !tbaa !14
  %212 = add i64 %210, %211
  %213 = icmp ule i64 %209, %212
  br i1 %213, label %214, label %215

214:                                              ; preds = %192
  br label %689

215:                                              ; preds = %192
  br label %216

216:                                              ; preds = %215, %187, %148, %119, %87
  %217 = load i64, ptr %10, align 8, !tbaa !14
  %218 = load ptr, ptr %5, align 8, !tbaa !5
  %219 = getelementptr inbounds i8, ptr %218, i64 %217
  store ptr %219, ptr %5, align 8, !tbaa !5
  %220 = load i64, ptr %10, align 8, !tbaa !14
  %221 = load i64, ptr %3, align 8, !tbaa !14
  %222 = sub i64 %221, %220
  store i64 %222, ptr %3, align 8, !tbaa !14
  %223 = load i64, ptr %4, align 8, !tbaa !14
  %224 = icmp uge i64 %223, 4
  br i1 %224, label %225, label %228

225:                                              ; preds = %216
  %226 = load i64, ptr %3, align 8, !tbaa !14
  %227 = icmp uge i64 %226, 4
  br label %228

228:                                              ; preds = %225, %216
  %229 = phi i1 [ false, %216 ], [ %227, %225 ]
  %230 = zext i1 %229 to i32
  %231 = sext i32 %230 to i64
  %232 = call i64 @llvm.expect.i64(i64 %231, i64 1)
  %233 = icmp ne i64 %232, 0
  br i1 %233, label %234, label %238

234:                                              ; preds = %228
  %235 = load ptr, ptr %6, align 8, !tbaa !5
  %236 = load ptr, ptr %5, align 8, !tbaa !5
  %237 = call i32 @load4(ptr noundef %236)
  call void @store4(ptr noundef %235, i32 noundef %237)
  br label %298

238:                                              ; preds = %228
  %239 = load i64, ptr %9, align 8, !tbaa !14
  %240 = load i64, ptr %4, align 8, !tbaa !14
  %241 = icmp ule i64 %239, %240
  br i1 %241, label %242, label %259

242:                                              ; preds = %238
  store i64 0, ptr %13, align 8, !tbaa !14
  br label %243

243:                                              ; preds = %255, %242
  %244 = load i64, ptr %13, align 8, !tbaa !14
  %245 = load i64, ptr %9, align 8, !tbaa !14
  %246 = icmp ult i64 %244, %245
  br i1 %246, label %247, label %258

247:                                              ; preds = %243
  %248 = load ptr, ptr %5, align 8, !tbaa !5
  %249 = load i64, ptr %13, align 8, !tbaa !14
  %250 = getelementptr inbounds i8, ptr %248, i64 %249
  %251 = load i8, ptr %250, align 1, !tbaa !21
  %252 = load ptr, ptr %6, align 8, !tbaa !5
  %253 = load i64, ptr %13, align 8, !tbaa !14
  %254 = getelementptr inbounds i8, ptr %252, i64 %253
  store i8 %251, ptr %254, align 1, !tbaa !21
  br label %255

255:                                              ; preds = %247
  %256 = load i64, ptr %13, align 8, !tbaa !14
  %257 = add i64 %256, 1
  store i64 %257, ptr %13, align 8, !tbaa !14
  br label %243, !llvm.loop !24

258:                                              ; preds = %243
  br label %297

259:                                              ; preds = %238
  store i64 0, ptr %14, align 8, !tbaa !14
  br label %260

260:                                              ; preds = %272, %259
  %261 = load i64, ptr %14, align 8, !tbaa !14
  %262 = load i64, ptr %4, align 8, !tbaa !14
  %263 = icmp ult i64 %261, %262
  br i1 %263, label %264, label %275

264:                                              ; preds = %260
  %265 = load ptr, ptr %5, align 8, !tbaa !5
  %266 = load i64, ptr %14, align 8, !tbaa !14
  %267 = getelementptr inbounds i8, ptr %265, i64 %266
  %268 = load i8, ptr %267, align 1, !tbaa !21
  %269 = load ptr, ptr %6, align 8, !tbaa !5
  %270 = load i64, ptr %14, align 8, !tbaa !14
  %271 = getelementptr inbounds i8, ptr %269, i64 %270
  store i8 %268, ptr %271, align 1, !tbaa !21
  br label %272

272:                                              ; preds = %264
  %273 = load i64, ptr %14, align 8, !tbaa !14
  %274 = add i64 %273, 1
  store i64 %274, ptr %14, align 8, !tbaa !14
  br label %260, !llvm.loop !26

275:                                              ; preds = %260
  %276 = load ptr, ptr %5, align 8, !tbaa !5
  %277 = load i64, ptr %4, align 8, !tbaa !14
  %278 = getelementptr inbounds i8, ptr %276, i64 %277
  %279 = load ptr, ptr %2, align 8, !tbaa !5
  %280 = getelementptr inbounds %struct.lzvn_decoder_state, ptr %279, i32 0, i32 0
  store ptr %278, ptr %280, align 8, !tbaa !13
  %281 = load ptr, ptr %6, align 8, !tbaa !5
  %282 = load i64, ptr %4, align 8, !tbaa !14
  %283 = getelementptr inbounds i8, ptr %281, i64 %282
  %284 = load ptr, ptr %2, align 8, !tbaa !5
  %285 = getelementptr inbounds %struct.lzvn_decoder_state, ptr %284, i32 0, i32 2
  store ptr %283, ptr %285, align 8, !tbaa !16
  %286 = load i64, ptr %9, align 8, !tbaa !14
  %287 = load i64, ptr %4, align 8, !tbaa !14
  %288 = sub i64 %286, %287
  %289 = load ptr, ptr %2, align 8, !tbaa !5
  %290 = getelementptr inbounds %struct.lzvn_decoder_state, ptr %289, i32 0, i32 6
  store i64 %288, ptr %290, align 8, !tbaa !18
  %291 = load i64, ptr %8, align 8, !tbaa !14
  %292 = load ptr, ptr %2, align 8, !tbaa !5
  %293 = getelementptr inbounds %struct.lzvn_decoder_state, ptr %292, i32 0, i32 7
  store i64 %291, ptr %293, align 8, !tbaa !19
  %294 = load i64, ptr %7, align 8, !tbaa !14
  %295 = load ptr, ptr %2, align 8, !tbaa !5
  %296 = getelementptr inbounds %struct.lzvn_decoder_state, ptr %295, i32 0, i32 8
  store i64 %294, ptr %296, align 8, !tbaa !20
  br label %689

297:                                              ; preds = %258
  br label %298

298:                                              ; preds = %297, %234
  %299 = load i64, ptr %9, align 8, !tbaa !14
  %300 = load ptr, ptr %6, align 8, !tbaa !5
  %301 = getelementptr inbounds i8, ptr %300, i64 %299
  store ptr %301, ptr %6, align 8, !tbaa !5
  %302 = load i64, ptr %9, align 8, !tbaa !14
  %303 = load i64, ptr %4, align 8, !tbaa !14
  %304 = sub i64 %303, %302
  store i64 %304, ptr %4, align 8, !tbaa !14
  %305 = load i64, ptr %9, align 8, !tbaa !14
  %306 = load ptr, ptr %5, align 8, !tbaa !5
  %307 = getelementptr inbounds i8, ptr %306, i64 %305
  store ptr %307, ptr %5, align 8, !tbaa !5
  %308 = load i64, ptr %9, align 8, !tbaa !14
  %309 = load i64, ptr %3, align 8, !tbaa !14
  %310 = sub i64 %309, %308
  store i64 %310, ptr %3, align 8, !tbaa !14
  %311 = load i64, ptr %7, align 8, !tbaa !14
  %312 = load ptr, ptr %6, align 8, !tbaa !5
  %313 = load ptr, ptr %2, align 8, !tbaa !5
  %314 = getelementptr inbounds %struct.lzvn_decoder_state, ptr %313, i32 0, i32 3
  %315 = load ptr, ptr %314, align 8, !tbaa !27
  %316 = ptrtoint ptr %312 to i64
  %317 = ptrtoint ptr %315 to i64
  %318 = sub i64 %316, %317
  %319 = icmp ugt i64 %311, %318
  br i1 %319, label %323, label %320

320:                                              ; preds = %298
  %321 = load i64, ptr %7, align 8, !tbaa !14
  %322 = icmp eq i64 %321, 0
  br i1 %322, label %323, label %324

323:                                              ; preds = %320, %298
  br label %688

324:                                              ; preds = %320
  br label %325

325:                                              ; preds = %471, %447, %324, %86
  %326 = load i64, ptr %4, align 8, !tbaa !14
  %327 = load i64, ptr %8, align 8, !tbaa !14
  %328 = add i64 %327, 7
  %329 = icmp uge i64 %326, %328
  br i1 %329, label %330, label %333

330:                                              ; preds = %325
  %331 = load i64, ptr %7, align 8, !tbaa !14
  %332 = icmp uge i64 %331, 8
  br label %333

333:                                              ; preds = %330, %325
  %334 = phi i1 [ false, %325 ], [ %332, %330 ]
  %335 = zext i1 %334 to i32
  %336 = sext i32 %335 to i64
  %337 = call i64 @llvm.expect.i64(i64 %336, i64 1)
  %338 = icmp ne i64 %337, 0
  br i1 %338, label %339, label %358

339:                                              ; preds = %333
  store i64 0, ptr %15, align 8, !tbaa !14
  br label %340

340:                                              ; preds = %354, %339
  %341 = load i64, ptr %15, align 8, !tbaa !14
  %342 = load i64, ptr %8, align 8, !tbaa !14
  %343 = icmp ult i64 %341, %342
  br i1 %343, label %344, label %357

344:                                              ; preds = %340
  %345 = load ptr, ptr %6, align 8, !tbaa !5
  %346 = load i64, ptr %15, align 8, !tbaa !14
  %347 = getelementptr inbounds i8, ptr %345, i64 %346
  %348 = load ptr, ptr %6, align 8, !tbaa !5
  %349 = load i64, ptr %15, align 8, !tbaa !14
  %350 = load i64, ptr %7, align 8, !tbaa !14
  %351 = sub i64 %349, %350
  %352 = getelementptr inbounds i8, ptr %348, i64 %351
  %353 = call i64 @load8(ptr noundef %352)
  call void @store8(ptr noundef %347, i64 noundef %353)
  br label %354

354:                                              ; preds = %344
  %355 = load i64, ptr %15, align 8, !tbaa !14
  %356 = add i64 %355, 8
  store i64 %356, ptr %15, align 8, !tbaa !14
  br label %340, !llvm.loop !28

357:                                              ; preds = %340
  br label %419

358:                                              ; preds = %333
  %359 = load i64, ptr %8, align 8, !tbaa !14
  %360 = load i64, ptr %4, align 8, !tbaa !14
  %361 = icmp ule i64 %359, %360
  br i1 %361, label %362, label %381

362:                                              ; preds = %358
  store i64 0, ptr %16, align 8, !tbaa !14
  br label %363

363:                                              ; preds = %377, %362
  %364 = load i64, ptr %16, align 8, !tbaa !14
  %365 = load i64, ptr %8, align 8, !tbaa !14
  %366 = icmp ult i64 %364, %365
  br i1 %366, label %367, label %380

367:                                              ; preds = %363
  %368 = load ptr, ptr %6, align 8, !tbaa !5
  %369 = load i64, ptr %16, align 8, !tbaa !14
  %370 = load i64, ptr %7, align 8, !tbaa !14
  %371 = sub i64 %369, %370
  %372 = getelementptr inbounds i8, ptr %368, i64 %371
  %373 = load i8, ptr %372, align 1, !tbaa !21
  %374 = load ptr, ptr %6, align 8, !tbaa !5
  %375 = load i64, ptr %16, align 8, !tbaa !14
  %376 = getelementptr inbounds i8, ptr %374, i64 %375
  store i8 %373, ptr %376, align 1, !tbaa !21
  br label %377

377:                                              ; preds = %367
  %378 = load i64, ptr %16, align 8, !tbaa !14
  %379 = add i64 %378, 1
  store i64 %379, ptr %16, align 8, !tbaa !14
  br label %363, !llvm.loop !29

380:                                              ; preds = %363
  br label %418

381:                                              ; preds = %358
  store i64 0, ptr %17, align 8, !tbaa !14
  br label %382

382:                                              ; preds = %396, %381
  %383 = load i64, ptr %17, align 8, !tbaa !14
  %384 = load i64, ptr %4, align 8, !tbaa !14
  %385 = icmp ult i64 %383, %384
  br i1 %385, label %386, label %399

386:                                              ; preds = %382
  %387 = load ptr, ptr %6, align 8, !tbaa !5
  %388 = load i64, ptr %17, align 8, !tbaa !14
  %389 = load i64, ptr %7, align 8, !tbaa !14
  %390 = sub i64 %388, %389
  %391 = getelementptr inbounds i8, ptr %387, i64 %390
  %392 = load i8, ptr %391, align 1, !tbaa !21
  %393 = load ptr, ptr %6, align 8, !tbaa !5
  %394 = load i64, ptr %17, align 8, !tbaa !14
  %395 = getelementptr inbounds i8, ptr %393, i64 %394
  store i8 %392, ptr %395, align 1, !tbaa !21
  br label %396

396:                                              ; preds = %386
  %397 = load i64, ptr %17, align 8, !tbaa !14
  %398 = add i64 %397, 1
  store i64 %398, ptr %17, align 8, !tbaa !14
  br label %382, !llvm.loop !30

399:                                              ; preds = %382
  %400 = load ptr, ptr %5, align 8, !tbaa !5
  %401 = load ptr, ptr %2, align 8, !tbaa !5
  %402 = getelementptr inbounds %struct.lzvn_decoder_state, ptr %401, i32 0, i32 0
  store ptr %400, ptr %402, align 8, !tbaa !13
  %403 = load ptr, ptr %6, align 8, !tbaa !5
  %404 = load i64, ptr %4, align 8, !tbaa !14
  %405 = getelementptr inbounds i8, ptr %403, i64 %404
  %406 = load ptr, ptr %2, align 8, !tbaa !5
  %407 = getelementptr inbounds %struct.lzvn_decoder_state, ptr %406, i32 0, i32 2
  store ptr %405, ptr %407, align 8, !tbaa !16
  %408 = load ptr, ptr %2, align 8, !tbaa !5
  %409 = getelementptr inbounds %struct.lzvn_decoder_state, ptr %408, i32 0, i32 6
  store i64 0, ptr %409, align 8, !tbaa !18
  %410 = load i64, ptr %8, align 8, !tbaa !14
  %411 = load i64, ptr %4, align 8, !tbaa !14
  %412 = sub i64 %410, %411
  %413 = load ptr, ptr %2, align 8, !tbaa !5
  %414 = getelementptr inbounds %struct.lzvn_decoder_state, ptr %413, i32 0, i32 7
  store i64 %412, ptr %414, align 8, !tbaa !19
  %415 = load i64, ptr %7, align 8, !tbaa !14
  %416 = load ptr, ptr %2, align 8, !tbaa !5
  %417 = getelementptr inbounds %struct.lzvn_decoder_state, ptr %416, i32 0, i32 8
  store i64 %415, ptr %417, align 8, !tbaa !20
  br label %689

418:                                              ; preds = %380
  br label %419

419:                                              ; preds = %418, %357
  %420 = load i64, ptr %8, align 8, !tbaa !14
  %421 = load ptr, ptr %6, align 8, !tbaa !5
  %422 = getelementptr inbounds i8, ptr %421, i64 %420
  store ptr %422, ptr %6, align 8, !tbaa !5
  %423 = load i64, ptr %8, align 8, !tbaa !14
  %424 = load i64, ptr %4, align 8, !tbaa !14
  %425 = sub i64 %424, %423
  store i64 %425, ptr %4, align 8, !tbaa !14
  %426 = load ptr, ptr %5, align 8, !tbaa !5
  %427 = getelementptr inbounds i8, ptr %426, i64 0
  %428 = load i8, ptr %427, align 1, !tbaa !21
  store i8 %428, ptr %11, align 1, !tbaa !21
  %429 = load i8, ptr %11, align 1, !tbaa !21
  %430 = zext i8 %429 to i64
  %431 = getelementptr inbounds [256 x ptr], ptr @lzvn_decode.opc_tbl, i64 0, i64 %430
  %432 = load ptr, ptr %431, align 8, !tbaa !5
  br label %690

433:                                              ; preds = %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690
  %434 = load ptr, ptr %5, align 8, !tbaa !5
  %435 = load ptr, ptr %2, align 8, !tbaa !5
  %436 = getelementptr inbounds %struct.lzvn_decoder_state, ptr %435, i32 0, i32 0
  store ptr %434, ptr %436, align 8, !tbaa !13
  %437 = load ptr, ptr %6, align 8, !tbaa !5
  %438 = load ptr, ptr %2, align 8, !tbaa !5
  %439 = getelementptr inbounds %struct.lzvn_decoder_state, ptr %438, i32 0, i32 2
  store ptr %437, ptr %439, align 8, !tbaa !16
  %440 = load i64, ptr %7, align 8, !tbaa !14
  %441 = load ptr, ptr %2, align 8, !tbaa !5
  %442 = getelementptr inbounds %struct.lzvn_decoder_state, ptr %441, i32 0, i32 9
  store i64 %440, ptr %442, align 8, !tbaa !17
  store i64 1, ptr %10, align 8, !tbaa !14
  %443 = load i64, ptr %3, align 8, !tbaa !14
  %444 = load i64, ptr %10, align 8, !tbaa !14
  %445 = icmp ule i64 %443, %444
  br i1 %445, label %446, label %447

446:                                              ; preds = %433
  br label %689

447:                                              ; preds = %433
  %448 = load i8, ptr %11, align 1, !tbaa !21
  %449 = zext i8 %448 to i64
  %450 = call i64 @extract(i64 noundef %449, i32 noundef 0, i32 noundef 4)
  store i64 %450, ptr %8, align 8, !tbaa !14
  %451 = load i64, ptr %10, align 8, !tbaa !14
  %452 = load ptr, ptr %5, align 8, !tbaa !5
  %453 = getelementptr inbounds i8, ptr %452, i64 %451
  store ptr %453, ptr %5, align 8, !tbaa !5
  %454 = load i64, ptr %10, align 8, !tbaa !14
  %455 = load i64, ptr %3, align 8, !tbaa !14
  %456 = sub i64 %455, %454
  store i64 %456, ptr %3, align 8, !tbaa !14
  br label %325

457:                                              ; preds = %690
  %458 = load ptr, ptr %5, align 8, !tbaa !5
  %459 = load ptr, ptr %2, align 8, !tbaa !5
  %460 = getelementptr inbounds %struct.lzvn_decoder_state, ptr %459, i32 0, i32 0
  store ptr %458, ptr %460, align 8, !tbaa !13
  %461 = load ptr, ptr %6, align 8, !tbaa !5
  %462 = load ptr, ptr %2, align 8, !tbaa !5
  %463 = getelementptr inbounds %struct.lzvn_decoder_state, ptr %462, i32 0, i32 2
  store ptr %461, ptr %463, align 8, !tbaa !16
  %464 = load i64, ptr %7, align 8, !tbaa !14
  %465 = load ptr, ptr %2, align 8, !tbaa !5
  %466 = getelementptr inbounds %struct.lzvn_decoder_state, ptr %465, i32 0, i32 9
  store i64 %464, ptr %466, align 8, !tbaa !17
  store i64 2, ptr %10, align 8, !tbaa !14
  %467 = load i64, ptr %3, align 8, !tbaa !14
  %468 = load i64, ptr %10, align 8, !tbaa !14
  %469 = icmp ule i64 %467, %468
  br i1 %469, label %470, label %471

470:                                              ; preds = %457
  br label %689

471:                                              ; preds = %457
  %472 = load ptr, ptr %5, align 8, !tbaa !5
  %473 = getelementptr inbounds i8, ptr %472, i64 1
  %474 = load i8, ptr %473, align 1, !tbaa !21
  %475 = zext i8 %474 to i32
  %476 = add nsw i32 %475, 16
  %477 = sext i32 %476 to i64
  store i64 %477, ptr %8, align 8, !tbaa !14
  %478 = load i64, ptr %10, align 8, !tbaa !14
  %479 = load ptr, ptr %5, align 8, !tbaa !5
  %480 = getelementptr inbounds i8, ptr %479, i64 %478
  store ptr %480, ptr %5, align 8, !tbaa !5
  %481 = load i64, ptr %10, align 8, !tbaa !14
  %482 = load i64, ptr %3, align 8, !tbaa !14
  %483 = sub i64 %482, %481
  store i64 %483, ptr %3, align 8, !tbaa !14
  br label %325

484:                                              ; preds = %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690
  %485 = load ptr, ptr %5, align 8, !tbaa !5
  %486 = load ptr, ptr %2, align 8, !tbaa !5
  %487 = getelementptr inbounds %struct.lzvn_decoder_state, ptr %486, i32 0, i32 0
  store ptr %485, ptr %487, align 8, !tbaa !13
  %488 = load ptr, ptr %6, align 8, !tbaa !5
  %489 = load ptr, ptr %2, align 8, !tbaa !5
  %490 = getelementptr inbounds %struct.lzvn_decoder_state, ptr %489, i32 0, i32 2
  store ptr %488, ptr %490, align 8, !tbaa !16
  %491 = load i64, ptr %7, align 8, !tbaa !14
  %492 = load ptr, ptr %2, align 8, !tbaa !5
  %493 = getelementptr inbounds %struct.lzvn_decoder_state, ptr %492, i32 0, i32 9
  store i64 %491, ptr %493, align 8, !tbaa !17
  store i64 1, ptr %10, align 8, !tbaa !14
  %494 = load i8, ptr %11, align 1, !tbaa !21
  %495 = zext i8 %494 to i64
  %496 = call i64 @extract(i64 noundef %495, i32 noundef 0, i32 noundef 4)
  store i64 %496, ptr %9, align 8, !tbaa !14
  br label %517

497:                                              ; preds = %690
  %498 = load ptr, ptr %5, align 8, !tbaa !5
  %499 = load ptr, ptr %2, align 8, !tbaa !5
  %500 = getelementptr inbounds %struct.lzvn_decoder_state, ptr %499, i32 0, i32 0
  store ptr %498, ptr %500, align 8, !tbaa !13
  %501 = load ptr, ptr %6, align 8, !tbaa !5
  %502 = load ptr, ptr %2, align 8, !tbaa !5
  %503 = getelementptr inbounds %struct.lzvn_decoder_state, ptr %502, i32 0, i32 2
  store ptr %501, ptr %503, align 8, !tbaa !16
  %504 = load i64, ptr %7, align 8, !tbaa !14
  %505 = load ptr, ptr %2, align 8, !tbaa !5
  %506 = getelementptr inbounds %struct.lzvn_decoder_state, ptr %505, i32 0, i32 9
  store i64 %504, ptr %506, align 8, !tbaa !17
  store i64 2, ptr %10, align 8, !tbaa !14
  %507 = load i64, ptr %3, align 8, !tbaa !14
  %508 = icmp ule i64 %507, 2
  br i1 %508, label %509, label %510

509:                                              ; preds = %497
  br label %689

510:                                              ; preds = %497
  %511 = load ptr, ptr %5, align 8, !tbaa !5
  %512 = getelementptr inbounds i8, ptr %511, i64 1
  %513 = load i8, ptr %512, align 1, !tbaa !21
  %514 = zext i8 %513 to i32
  %515 = add nsw i32 %514, 16
  %516 = sext i32 %515 to i64
  store i64 %516, ptr %9, align 8, !tbaa !14
  br label %517

517:                                              ; preds = %510, %484, %82
  %518 = load i64, ptr %3, align 8, !tbaa !14
  %519 = load i64, ptr %10, align 8, !tbaa !14
  %520 = load i64, ptr %9, align 8, !tbaa !14
  %521 = add i64 %519, %520
  %522 = icmp ule i64 %518, %521
  br i1 %522, label %523, label %524

523:                                              ; preds = %517
  br label %689

524:                                              ; preds = %517
  %525 = load i64, ptr %10, align 8, !tbaa !14
  %526 = load ptr, ptr %5, align 8, !tbaa !5
  %527 = getelementptr inbounds i8, ptr %526, i64 %525
  store ptr %527, ptr %5, align 8, !tbaa !5
  %528 = load i64, ptr %10, align 8, !tbaa !14
  %529 = load i64, ptr %3, align 8, !tbaa !14
  %530 = sub i64 %529, %528
  store i64 %530, ptr %3, align 8, !tbaa !14
  %531 = load i64, ptr %4, align 8, !tbaa !14
  %532 = load i64, ptr %9, align 8, !tbaa !14
  %533 = add i64 %532, 7
  %534 = icmp uge i64 %531, %533
  br i1 %534, label %535, label %557

535:                                              ; preds = %524
  %536 = load i64, ptr %3, align 8, !tbaa !14
  %537 = load i64, ptr %9, align 8, !tbaa !14
  %538 = add i64 %537, 7
  %539 = icmp uge i64 %536, %538
  br i1 %539, label %540, label %557

540:                                              ; preds = %535
  store i64 0, ptr %18, align 8, !tbaa !14
  br label %541

541:                                              ; preds = %553, %540
  %542 = load i64, ptr %18, align 8, !tbaa !14
  %543 = load i64, ptr %9, align 8, !tbaa !14
  %544 = icmp ult i64 %542, %543
  br i1 %544, label %545, label %556

545:                                              ; preds = %541
  %546 = load ptr, ptr %6, align 8, !tbaa !5
  %547 = load i64, ptr %18, align 8, !tbaa !14
  %548 = getelementptr inbounds i8, ptr %546, i64 %547
  %549 = load ptr, ptr %5, align 8, !tbaa !5
  %550 = load i64, ptr %18, align 8, !tbaa !14
  %551 = getelementptr inbounds i8, ptr %549, i64 %550
  %552 = call i64 @load8(ptr noundef %551)
  call void @store8(ptr noundef %548, i64 noundef %552)
  br label %553

553:                                              ; preds = %545
  %554 = load i64, ptr %18, align 8, !tbaa !14
  %555 = add i64 %554, 8
  store i64 %555, ptr %18, align 8, !tbaa !14
  br label %541, !llvm.loop !31

556:                                              ; preds = %541
  br label %616

557:                                              ; preds = %535, %524
  %558 = load i64, ptr %9, align 8, !tbaa !14
  %559 = load i64, ptr %4, align 8, !tbaa !14
  %560 = icmp ule i64 %558, %559
  br i1 %560, label %561, label %578

561:                                              ; preds = %557
  store i64 0, ptr %19, align 8, !tbaa !14
  br label %562

562:                                              ; preds = %574, %561
  %563 = load i64, ptr %19, align 8, !tbaa !14
  %564 = load i64, ptr %9, align 8, !tbaa !14
  %565 = icmp ult i64 %563, %564
  br i1 %565, label %566, label %577

566:                                              ; preds = %562
  %567 = load ptr, ptr %5, align 8, !tbaa !5
  %568 = load i64, ptr %19, align 8, !tbaa !14
  %569 = getelementptr inbounds i8, ptr %567, i64 %568
  %570 = load i8, ptr %569, align 1, !tbaa !21
  %571 = load ptr, ptr %6, align 8, !tbaa !5
  %572 = load i64, ptr %19, align 8, !tbaa !14
  %573 = getelementptr inbounds i8, ptr %571, i64 %572
  store i8 %570, ptr %573, align 1, !tbaa !21
  br label %574

574:                                              ; preds = %566
  %575 = load i64, ptr %19, align 8, !tbaa !14
  %576 = add i64 %575, 1
  store i64 %576, ptr %19, align 8, !tbaa !14
  br label %562, !llvm.loop !32

577:                                              ; preds = %562
  br label %615

578:                                              ; preds = %557
  store i64 0, ptr %20, align 8, !tbaa !14
  br label %579

579:                                              ; preds = %591, %578
  %580 = load i64, ptr %20, align 8, !tbaa !14
  %581 = load i64, ptr %4, align 8, !tbaa !14
  %582 = icmp ult i64 %580, %581
  br i1 %582, label %583, label %594

583:                                              ; preds = %579
  %584 = load ptr, ptr %5, align 8, !tbaa !5
  %585 = load i64, ptr %20, align 8, !tbaa !14
  %586 = getelementptr inbounds i8, ptr %584, i64 %585
  %587 = load i8, ptr %586, align 1, !tbaa !21
  %588 = load ptr, ptr %6, align 8, !tbaa !5
  %589 = load i64, ptr %20, align 8, !tbaa !14
  %590 = getelementptr inbounds i8, ptr %588, i64 %589
  store i8 %587, ptr %590, align 1, !tbaa !21
  br label %591

591:                                              ; preds = %583
  %592 = load i64, ptr %20, align 8, !tbaa !14
  %593 = add i64 %592, 1
  store i64 %593, ptr %20, align 8, !tbaa !14
  br label %579, !llvm.loop !33

594:                                              ; preds = %579
  %595 = load ptr, ptr %5, align 8, !tbaa !5
  %596 = load i64, ptr %4, align 8, !tbaa !14
  %597 = getelementptr inbounds i8, ptr %595, i64 %596
  %598 = load ptr, ptr %2, align 8, !tbaa !5
  %599 = getelementptr inbounds %struct.lzvn_decoder_state, ptr %598, i32 0, i32 0
  store ptr %597, ptr %599, align 8, !tbaa !13
  %600 = load ptr, ptr %6, align 8, !tbaa !5
  %601 = load i64, ptr %4, align 8, !tbaa !14
  %602 = getelementptr inbounds i8, ptr %600, i64 %601
  %603 = load ptr, ptr %2, align 8, !tbaa !5
  %604 = getelementptr inbounds %struct.lzvn_decoder_state, ptr %603, i32 0, i32 2
  store ptr %602, ptr %604, align 8, !tbaa !16
  %605 = load i64, ptr %9, align 8, !tbaa !14
  %606 = load i64, ptr %4, align 8, !tbaa !14
  %607 = sub i64 %605, %606
  %608 = load ptr, ptr %2, align 8, !tbaa !5
  %609 = getelementptr inbounds %struct.lzvn_decoder_state, ptr %608, i32 0, i32 6
  store i64 %607, ptr %609, align 8, !tbaa !18
  %610 = load ptr, ptr %2, align 8, !tbaa !5
  %611 = getelementptr inbounds %struct.lzvn_decoder_state, ptr %610, i32 0, i32 7
  store i64 0, ptr %611, align 8, !tbaa !19
  %612 = load i64, ptr %7, align 8, !tbaa !14
  %613 = load ptr, ptr %2, align 8, !tbaa !5
  %614 = getelementptr inbounds %struct.lzvn_decoder_state, ptr %613, i32 0, i32 8
  store i64 %612, ptr %614, align 8, !tbaa !20
  br label %689

615:                                              ; preds = %577
  br label %616

616:                                              ; preds = %615, %556
  %617 = load i64, ptr %9, align 8, !tbaa !14
  %618 = load ptr, ptr %6, align 8, !tbaa !5
  %619 = getelementptr inbounds i8, ptr %618, i64 %617
  store ptr %619, ptr %6, align 8, !tbaa !5
  %620 = load i64, ptr %9, align 8, !tbaa !14
  %621 = load i64, ptr %4, align 8, !tbaa !14
  %622 = sub i64 %621, %620
  store i64 %622, ptr %4, align 8, !tbaa !14
  %623 = load i64, ptr %9, align 8, !tbaa !14
  %624 = load ptr, ptr %5, align 8, !tbaa !5
  %625 = getelementptr inbounds i8, ptr %624, i64 %623
  store ptr %625, ptr %5, align 8, !tbaa !5
  %626 = load i64, ptr %9, align 8, !tbaa !14
  %627 = load i64, ptr %3, align 8, !tbaa !14
  %628 = sub i64 %627, %626
  store i64 %628, ptr %3, align 8, !tbaa !14
  %629 = load ptr, ptr %5, align 8, !tbaa !5
  %630 = getelementptr inbounds i8, ptr %629, i64 0
  %631 = load i8, ptr %630, align 1, !tbaa !21
  store i8 %631, ptr %11, align 1, !tbaa !21
  %632 = load i8, ptr %11, align 1, !tbaa !21
  %633 = zext i8 %632 to i64
  %634 = getelementptr inbounds [256 x ptr], ptr @lzvn_decode.opc_tbl, i64 0, i64 %633
  %635 = load ptr, ptr %634, align 8, !tbaa !5
  br label %690

636:                                              ; preds = %690, %690
  %637 = load ptr, ptr %5, align 8, !tbaa !5
  %638 = load ptr, ptr %2, align 8, !tbaa !5
  %639 = getelementptr inbounds %struct.lzvn_decoder_state, ptr %638, i32 0, i32 0
  store ptr %637, ptr %639, align 8, !tbaa !13
  %640 = load ptr, ptr %6, align 8, !tbaa !5
  %641 = load ptr, ptr %2, align 8, !tbaa !5
  %642 = getelementptr inbounds %struct.lzvn_decoder_state, ptr %641, i32 0, i32 2
  store ptr %640, ptr %642, align 8, !tbaa !16
  %643 = load i64, ptr %7, align 8, !tbaa !14
  %644 = load ptr, ptr %2, align 8, !tbaa !5
  %645 = getelementptr inbounds %struct.lzvn_decoder_state, ptr %644, i32 0, i32 9
  store i64 %643, ptr %645, align 8, !tbaa !17
  store i64 1, ptr %10, align 8, !tbaa !14
  %646 = load i64, ptr %3, align 8, !tbaa !14
  %647 = load i64, ptr %10, align 8, !tbaa !14
  %648 = icmp ule i64 %646, %647
  br i1 %648, label %649, label %650

649:                                              ; preds = %636
  br label %689

650:                                              ; preds = %636
  %651 = load i64, ptr %10, align 8, !tbaa !14
  %652 = load ptr, ptr %5, align 8, !tbaa !5
  %653 = getelementptr inbounds i8, ptr %652, i64 %651
  store ptr %653, ptr %5, align 8, !tbaa !5
  %654 = load i64, ptr %10, align 8, !tbaa !14
  %655 = load i64, ptr %3, align 8, !tbaa !14
  %656 = sub i64 %655, %654
  store i64 %656, ptr %3, align 8, !tbaa !14
  %657 = load ptr, ptr %5, align 8, !tbaa !5
  %658 = getelementptr inbounds i8, ptr %657, i64 0
  %659 = load i8, ptr %658, align 1, !tbaa !21
  store i8 %659, ptr %11, align 1, !tbaa !21
  %660 = load i8, ptr %11, align 1, !tbaa !21
  %661 = zext i8 %660 to i64
  %662 = getelementptr inbounds [256 x ptr], ptr @lzvn_decode.opc_tbl, i64 0, i64 %661
  %663 = load ptr, ptr %662, align 8, !tbaa !5
  br label %690

664:                                              ; preds = %690
  store i64 8, ptr %10, align 8, !tbaa !14
  %665 = load i64, ptr %3, align 8, !tbaa !14
  %666 = load i64, ptr %10, align 8, !tbaa !14
  %667 = icmp ult i64 %665, %666
  br i1 %667, label %668, label %669

668:                                              ; preds = %664
  br label %689

669:                                              ; preds = %664
  %670 = load i64, ptr %10, align 8, !tbaa !14
  %671 = load ptr, ptr %5, align 8, !tbaa !5
  %672 = getelementptr inbounds i8, ptr %671, i64 %670
  store ptr %672, ptr %5, align 8, !tbaa !5
  %673 = load i64, ptr %10, align 8, !tbaa !14
  %674 = load i64, ptr %3, align 8, !tbaa !14
  %675 = sub i64 %674, %673
  store i64 %675, ptr %3, align 8, !tbaa !14
  %676 = load ptr, ptr %2, align 8, !tbaa !5
  %677 = getelementptr inbounds %struct.lzvn_decoder_state, ptr %676, i32 0, i32 10
  store i32 1, ptr %677, align 8, !tbaa !34
  %678 = load ptr, ptr %5, align 8, !tbaa !5
  %679 = load ptr, ptr %2, align 8, !tbaa !5
  %680 = getelementptr inbounds %struct.lzvn_decoder_state, ptr %679, i32 0, i32 0
  store ptr %678, ptr %680, align 8, !tbaa !13
  %681 = load ptr, ptr %6, align 8, !tbaa !5
  %682 = load ptr, ptr %2, align 8, !tbaa !5
  %683 = getelementptr inbounds %struct.lzvn_decoder_state, ptr %682, i32 0, i32 2
  store ptr %681, ptr %683, align 8, !tbaa !16
  %684 = load i64, ptr %7, align 8, !tbaa !14
  %685 = load ptr, ptr %2, align 8, !tbaa !5
  %686 = getelementptr inbounds %struct.lzvn_decoder_state, ptr %685, i32 0, i32 9
  store i64 %684, ptr %686, align 8, !tbaa !17
  br label %689

687:                                              ; preds = %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690, %690
  br label %688

688:                                              ; preds = %687, %323
  br label %689

689:                                              ; preds = %688, %669, %668, %649, %594, %523, %509, %470, %446, %399, %275, %214, %186, %147, %118, %44
  ret void

690:                                              ; preds = %650, %616, %419, %88
  %691 = phi ptr [ %95, %88 ], [ %432, %419 ], [ %635, %616 ], [ %663, %650 ]
  indirectbr ptr %691, [label %96, label %96, label %96, label %96, label %96, label %96, label %664, label %164, label %96, label %96, label %96, label %96, label %96, label %96, label %636, label %164, label %96, label %96, label %96, label %96, label %96, label %96, label %636, label %164, label %96, label %96, label %96, label %96, label %96, label %96, label %687, label %164, label %96, label %96, label %96, label %96, label %96, label %96, label %687, label %164, label %96, label %96, label %96, label %96, label %96, label %96, label %687, label %164, label %96, label %96, label %96, label %96, label %96, label %96, label %687, label %164, label %96, label %96, label %96, label %96, label %96, label %96, label %687, label %164, label %96, label %96, label %96, label %96, label %96, label %96, label %192, label %164, label %96, label %96, label %96, label %96, label %96, label %96, label %192, label %164, label %96, label %96, label %96, label %96, label %96, label %96, label %192, label %164, label %96, label %96, label %96, label %96, label %96, label %96, label %192, label %164, label %96, label %96, label %96, label %96, label %96, label %96, label %192, label %164, label %96, label %96, label %96, label %96, label %96, label %96, label %192, label %164, label %687, label %687, label %687, label %687, label %687, label %687, label %687, label %687, label %687, label %687, label %687, label %687, label %687, label %687, label %687, label %687, label %96, label %96, label %96, label %96, label %96, label %96, label %192, label %164, label %96, label %96, label %96, label %96, label %96, label %96, label %192, label %164, label %96, label %96, label %96, label %96, label %96, label %96, label %192, label %164, label %96, label %96, label %96, label %96, label %96, label %96, label %192, label %164, label %129, label %129, label %129, label %129, label %129, label %129, label %129, label %129, label %129, label %129, label %129, label %129, label %129, label %129, label %129, label %129, label %129, label %129, label %129, label %129, label %129, label %129, label %129, label %129, label %129, label %129, label %129, label %129, label %129, label %129, label %129, label %129, label %96, label %96, label %96, label %96, label %96, label %96, label %192, label %164, label %96, label %96, label %96, label %96, label %96, label %96, label %192, label %164, label %687, label %687, label %687, label %687, label %687, label %687, label %687, label %687, label %687, label %687, label %687, label %687, label %687, label %687, label %687, label %687, label %497, label %484, label %484, label %484, label %484, label %484, label %484, label %484, label %484, label %484, label %484, label %484, label %484, label %484, label %484, label %484, label %457, label %433, label %433, label %433, label %433, label %433, label %433, label %433, label %433, label %433, label %433, label %433, label %433, label %433, label %433, label %433]
}

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

; Function Attrs: alwaysinline nounwind uwtable
declare hidden zeroext i16 @load2(ptr noundef) #1

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

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

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

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

; Function Attrs: alwaysinline nounwind uwtable
declare hidden i64 @load8(ptr noundef) #1

attributes #0 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { alwaysinline nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { nocallback nofree nosync nounwind 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 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !6, i64 8}
!10 = !{!"", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !11, i64 48, !11, i64 56, !11, i64 64, !11, i64 72, !12, i64 80}
!11 = !{!"long", !7, i64 0}
!12 = !{!"int", !7, i64 0}
!13 = !{!10, !6, i64 0}
!14 = !{!11, !11, i64 0}
!15 = !{!10, !6, i64 32}
!16 = !{!10, !6, i64 16}
!17 = !{!10, !11, i64 72}
!18 = !{!10, !11, i64 48}
!19 = !{!10, !11, i64 56}
!20 = !{!10, !11, i64 64}
!21 = !{!7, !7, i64 0}
!22 = !{!23, !23, i64 0}
!23 = !{!"short", !7, i64 0}
!24 = distinct !{!24, !25}
!25 = !{!"llvm.loop.mustprogress"}
!26 = distinct !{!26, !25}
!27 = !{!10, !6, i64 24}
!28 = distinct !{!28, !25}
!29 = distinct !{!29, !25}
!30 = distinct !{!30, !25}
!31 = distinct !{!31, !25}
!32 = distinct !{!32, !25}
!33 = distinct !{!33, !25}
!34 = !{!10, !12, i64 80}


; 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: nounwind uwtable
define dso_local void @lzvn_decode(ptr nocapture noundef %0) local_unnamed_addr #0 {
  %2 = getelementptr inbounds i8, ptr %0, i64 8
  %3 = load ptr, ptr %2, align 8, !tbaa !5
  %4 = load ptr, ptr %0, align 8, !tbaa !12
  %5 = ptrtoint ptr %3 to i64
  %6 = ptrtoint ptr %4 to i64
  %7 = sub i64 %5, %6
  %8 = getelementptr inbounds i8, ptr %0, i64 32
  %9 = load ptr, ptr %8, align 8, !tbaa !13
  %10 = getelementptr inbounds i8, ptr %0, i64 16
  %11 = load ptr, ptr %10, align 8, !tbaa !14
  %12 = ptrtoint ptr %9 to i64
  %13 = ptrtoint ptr %11 to i64
  %14 = sub i64 %12, %13
  %15 = icmp eq ptr %3, %4
  %16 = icmp eq i64 %14, 0
  %or.cond = select i1 %15, i1 true, i1 %16
  br i1 %or.cond, label %179, label %17

17:                                               ; preds = %1
  %18 = getelementptr inbounds i8, ptr %0, i64 48
  %19 = load i64, ptr %18, align 8, !tbaa !15
  %.not = icmp eq i64 %19, 0
  %20 = getelementptr inbounds i8, ptr %0, i64 56
  %21 = load i64, ptr %20, align 8, !tbaa !16
  br i1 %.not, label %22, label %.thread

22:                                               ; preds = %17
  %23 = icmp ne i64 %21, 0
  tail call void @llvm.assume(i1 %23)
  %24 = getelementptr inbounds i8, ptr %0, i64 64
  %25 = load i64, ptr %24, align 8, !tbaa !17
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %18, i8 0, i64 24, i1 false)
  br label %90

.thread:                                          ; preds = %17
  %26 = getelementptr inbounds i8, ptr %0, i64 64
  %27 = load i64, ptr %26, align 8, !tbaa !17
  %28 = icmp eq i64 %21, 0
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %18, i8 0, i64 24, i1 false)
  br i1 %28, label %149, label %.thread179

.thread179:                                       ; preds = %.thread
  %29 = icmp ugt i64 %14, 3
  %30 = icmp ugt i64 %7, 3
  %31 = and i1 %30, %29
  br i1 %31, label %32, label %34, !prof !18

32:                                               ; preds = %.thread179
  %33 = tail call i32 @load4(ptr noundef %4)
  tail call void @store4(ptr noundef %11, i32 noundef %33)
  br label %.loopexit

34:                                               ; preds = %.thread179
  %.not172 = icmp ugt i64 %19, %14
  %35 = sub i64 %13, %6
  %diff.check210 = icmp ult i64 %35, 32
  br i1 %.not172, label %iter.check214, label %iter.check

iter.check:                                       ; preds = %34
  %min.iters.check = icmp ult i64 %19, 8
  %or.cond305 = select i1 %min.iters.check, i1 true, i1 %diff.check210
  br i1 %or.cond305, label %.preheader186.preheader, label %vector.main.loop.iter.check

vector.main.loop.iter.check:                      ; preds = %iter.check
  %min.iters.check201 = icmp ult i64 %19, 32
  br i1 %min.iters.check201, label %vec.epilog.ph, label %vector.ph

vector.ph:                                        ; preds = %vector.main.loop.iter.check
  %n.vec = and i64 %19, -32
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %36 = getelementptr inbounds i8, ptr %4, i64 %index
  %37 = getelementptr inbounds i8, ptr %36, i64 16
  %wide.load = load <16 x i8>, ptr %36, align 1, !tbaa !19
  %wide.load202 = load <16 x i8>, ptr %37, align 1, !tbaa !19
  %38 = getelementptr inbounds i8, ptr %11, i64 %index
  %39 = getelementptr inbounds i8, ptr %38, i64 16
  store <16 x i8> %wide.load, ptr %38, align 1, !tbaa !19
  store <16 x i8> %wide.load202, ptr %39, align 1, !tbaa !19
  %index.next = add nuw i64 %index, 32
  %40 = icmp eq i64 %index.next, %n.vec
  br i1 %40, label %middle.block, label %vector.body, !llvm.loop !20

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %19, %n.vec
  br i1 %cmp.n, label %.loopexit, label %vec.epilog.iter.check

vec.epilog.iter.check:                            ; preds = %middle.block
  %n.vec.remaining = and i64 %19, 24
  %min.epilog.iters.check = icmp eq i64 %n.vec.remaining, 0
  br i1 %min.epilog.iters.check, label %.preheader186.preheader, label %vec.epilog.ph

.preheader186.preheader:                          ; preds = %vec.epilog.middle.block, %iter.check, %vec.epilog.iter.check
  %.0162187.ph = phi i64 [ 0, %iter.check ], [ %n.vec, %vec.epilog.iter.check ], [ %n.vec204, %vec.epilog.middle.block ]
  %xtraiter = and i64 %19, 3
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.preheader186.prol.loopexit, label %.preheader186.prol

.preheader186.prol:                               ; preds = %.preheader186.preheader, %.preheader186.prol
  %.0162187.prol = phi i64 [ %44, %.preheader186.prol ], [ %.0162187.ph, %.preheader186.preheader ]
  %prol.iter = phi i64 [ %prol.iter.next, %.preheader186.prol ], [ 0, %.preheader186.preheader ]
  %41 = getelementptr inbounds i8, ptr %4, i64 %.0162187.prol
  %42 = load i8, ptr %41, align 1, !tbaa !19
  %43 = getelementptr inbounds i8, ptr %11, i64 %.0162187.prol
  store i8 %42, ptr %43, align 1, !tbaa !19
  %44 = add nuw i64 %.0162187.prol, 1
  %prol.iter.next = add i64 %prol.iter, 1
  %prol.iter.cmp.not = icmp eq i64 %prol.iter.next, %xtraiter
  br i1 %prol.iter.cmp.not, label %.preheader186.prol.loopexit, label %.preheader186.prol, !llvm.loop !24

.preheader186.prol.loopexit:                      ; preds = %.preheader186.prol, %.preheader186.preheader
  %.0162187.unr = phi i64 [ %.0162187.ph, %.preheader186.preheader ], [ %44, %.preheader186.prol ]
  %45 = sub i64 %.0162187.ph, %19
  %46 = icmp ugt i64 %45, -4
  br i1 %46, label %.loopexit, label %.preheader186

vec.epilog.ph:                                    ; preds = %vector.main.loop.iter.check, %vec.epilog.iter.check
  %vec.epilog.resume.val = phi i64 [ %n.vec, %vec.epilog.iter.check ], [ 0, %vector.main.loop.iter.check ]
  %n.vec204 = and i64 %19, -8
  br label %vec.epilog.vector.body

vec.epilog.vector.body:                           ; preds = %vec.epilog.vector.body, %vec.epilog.ph
  %index205 = phi i64 [ %vec.epilog.resume.val, %vec.epilog.ph ], [ %index.next207, %vec.epilog.vector.body ]
  %47 = getelementptr inbounds i8, ptr %4, i64 %index205
  %wide.load206 = load <8 x i8>, ptr %47, align 1, !tbaa !19
  %48 = getelementptr inbounds i8, ptr %11, i64 %index205
  store <8 x i8> %wide.load206, ptr %48, align 1, !tbaa !19
  %index.next207 = add nuw i64 %index205, 8
  %49 = icmp eq i64 %index.next207, %n.vec204
  br i1 %49, label %vec.epilog.middle.block, label %vec.epilog.vector.body, !llvm.loop !26

vec.epilog.middle.block:                          ; preds = %vec.epilog.vector.body
  %cmp.n208 = icmp eq i64 %19, %n.vec204
  br i1 %cmp.n208, label %.loopexit, label %.preheader186.preheader

iter.check214:                                    ; preds = %34
  %min.iters.check212 = icmp ult i64 %14, 8
  %or.cond306 = or i1 %min.iters.check212, %diff.check210
  br i1 %or.cond306, label %.lr.ph.preheader, label %vector.main.loop.iter.check216

vector.main.loop.iter.check216:                   ; preds = %iter.check214
  %min.iters.check215 = icmp ult i64 %14, 32
  br i1 %min.iters.check215, label %vec.epilog.ph228, label %vector.ph217

vector.ph217:                                     ; preds = %vector.main.loop.iter.check216
  %n.vec219 = and i64 %14, -32
  br label %vector.body220

vector.body220:                                   ; preds = %vector.body220, %vector.ph217
  %index221 = phi i64 [ 0, %vector.ph217 ], [ %index.next224, %vector.body220 ]
  %50 = getelementptr inbounds i8, ptr %4, i64 %index221
  %51 = getelementptr inbounds i8, ptr %50, i64 16
  %wide.load222 = load <16 x i8>, ptr %50, align 1, !tbaa !19
  %wide.load223 = load <16 x i8>, ptr %51, align 1, !tbaa !19
  %52 = getelementptr inbounds i8, ptr %11, i64 %index221
  %53 = getelementptr inbounds i8, ptr %52, i64 16
  store <16 x i8> %wide.load222, ptr %52, align 1, !tbaa !19
  store <16 x i8> %wide.load223, ptr %53, align 1, !tbaa !19
  %index.next224 = add nuw i64 %index221, 32
  %54 = icmp eq i64 %index.next224, %n.vec219
  br i1 %54, label %middle.block211, label %vector.body220, !llvm.loop !27

middle.block211:                                  ; preds = %vector.body220
  %cmp.n225 = icmp eq i64 %14, %n.vec219
  br i1 %cmp.n225, label %._crit_edge, label %vec.epilog.iter.check229

vec.epilog.iter.check229:                         ; preds = %middle.block211
  %n.vec.remaining230 = and i64 %14, 24
  %min.epilog.iters.check231 = icmp eq i64 %n.vec.remaining230, 0
  br i1 %min.epilog.iters.check231, label %.lr.ph.preheader, label %vec.epilog.ph228

.lr.ph.preheader:                                 ; preds = %vec.epilog.middle.block226, %iter.check214, %vec.epilog.iter.check229
  %.0161188.ph = phi i64 [ 0, %iter.check214 ], [ %n.vec219, %vec.epilog.iter.check229 ], [ %n.vec234, %vec.epilog.middle.block226 ]
  br label %.lr.ph

vec.epilog.ph228:                                 ; preds = %vector.main.loop.iter.check216, %vec.epilog.iter.check229
  %vec.epilog.resume.val232 = phi i64 [ %n.vec219, %vec.epilog.iter.check229 ], [ 0, %vector.main.loop.iter.check216 ]
  %n.vec234 = and i64 %14, -8
  br label %vec.epilog.vector.body236

vec.epilog.vector.body236:                        ; preds = %vec.epilog.vector.body236, %vec.epilog.ph228
  %index237 = phi i64 [ %vec.epilog.resume.val232, %vec.epilog.ph228 ], [ %index.next239, %vec.epilog.vector.body236 ]
  %55 = getelementptr inbounds i8, ptr %4, i64 %index237
  %wide.load238 = load <8 x i8>, ptr %55, align 1, !tbaa !19
  %56 = getelementptr inbounds i8, ptr %11, i64 %index237
  store <8 x i8> %wide.load238, ptr %56, align 1, !tbaa !19
  %index.next239 = add nuw i64 %index237, 8
  %57 = icmp eq i64 %index.next239, %n.vec234
  br i1 %57, label %vec.epilog.middle.block226, label %vec.epilog.vector.body236, !llvm.loop !28

vec.epilog.middle.block226:                       ; preds = %vec.epilog.vector.body236
  %cmp.n240 = icmp eq i64 %14, %n.vec234
  br i1 %cmp.n240, label %._crit_edge, label %.lr.ph.preheader

.preheader186:                                    ; preds = %.preheader186.prol.loopexit, %.preheader186
  %.0162187 = phi i64 [ %73, %.preheader186 ], [ %.0162187.unr, %.preheader186.prol.loopexit ]
  %58 = getelementptr inbounds i8, ptr %4, i64 %.0162187
  %59 = load i8, ptr %58, align 1, !tbaa !19
  %60 = getelementptr inbounds i8, ptr %11, i64 %.0162187
  store i8 %59, ptr %60, align 1, !tbaa !19
  %61 = add nuw i64 %.0162187, 1
  %62 = getelementptr inbounds i8, ptr %4, i64 %61
  %63 = load i8, ptr %62, align 1, !tbaa !19
  %64 = getelementptr inbounds i8, ptr %11, i64 %61
  store i8 %63, ptr %64, align 1, !tbaa !19
  %65 = add nuw i64 %.0162187, 2
  %66 = getelementptr inbounds i8, ptr %4, i64 %65
  %67 = load i8, ptr %66, align 1, !tbaa !19
  %68 = getelementptr inbounds i8, ptr %11, i64 %65
  store i8 %67, ptr %68, align 1, !tbaa !19
  %69 = add nuw i64 %.0162187, 3
  %70 = getelementptr inbounds i8, ptr %4, i64 %69
  %71 = load i8, ptr %70, align 1, !tbaa !19
  %72 = getelementptr inbounds i8, ptr %11, i64 %69
  store i8 %71, ptr %72, align 1, !tbaa !19
  %73 = add nuw i64 %.0162187, 4
  %exitcond.not.3 = icmp eq i64 %73, %19
  br i1 %exitcond.not.3, label %.loopexit, label %.preheader186, !llvm.loop !29

.lr.ph:                                           ; preds = %.lr.ph.preheader, %.lr.ph
  %.0161188 = phi i64 [ %77, %.lr.ph ], [ %.0161188.ph, %.lr.ph.preheader ]
  %74 = getelementptr inbounds i8, ptr %4, i64 %.0161188
  %75 = load i8, ptr %74, align 1, !tbaa !19
  %76 = getelementptr inbounds i8, ptr %11, i64 %.0161188
  store i8 %75, ptr %76, align 1, !tbaa !19
  %77 = add nuw i64 %.0161188, 1
  %exitcond198.not = icmp eq i64 %77, %14
  br i1 %exitcond198.not, label %._crit_edge, label %.lr.ph, !llvm.loop !30

._crit_edge:                                      ; preds = %.lr.ph, %vec.epilog.middle.block226, %middle.block211
  %78 = getelementptr inbounds i8, ptr %4, i64 %14
  store ptr %78, ptr %0, align 8, !tbaa !12
  %79 = getelementptr inbounds i8, ptr %11, i64 %14
  store ptr %79, ptr %10, align 8, !tbaa !14
  %80 = sub i64 %19, %14
  store i64 %80, ptr %18, align 8, !tbaa !15
  store i64 %21, ptr %20, align 8, !tbaa !16
  store i64 %27, ptr %26, align 8, !tbaa !17
  br label %179

.loopexit:                                        ; preds = %.preheader186.prol.loopexit, %.preheader186, %middle.block, %vec.epilog.middle.block, %32
  %81 = getelementptr inbounds i8, ptr %11, i64 %19
  %82 = sub i64 %14, %19
  %83 = getelementptr inbounds i8, ptr %4, i64 %19
  %84 = getelementptr inbounds i8, ptr %0, i64 24
  %85 = load ptr, ptr %84, align 8, !tbaa !31
  %86 = ptrtoint ptr %81 to i64
  %87 = ptrtoint ptr %85 to i64
  %88 = sub i64 %86, %87
  %89 = add i64 %27, -1
  %or.cond3.not = icmp ult i64 %89, %88
  br i1 %or.cond3.not, label %90, label %179

90:                                               ; preds = %22, %.loopexit
  %91 = phi i64 [ %27, %.loopexit ], [ %25, %22 ]
  %92 = phi ptr [ %26, %.loopexit ], [ %24, %22 ]
  %.0165 = phi ptr [ %81, %.loopexit ], [ %11, %22 ]
  %.0164 = phi ptr [ %83, %.loopexit ], [ %4, %22 ]
  %.0163 = phi i64 [ %82, %.loopexit ], [ %14, %22 ]
  %93 = add i64 %21, 7
  %94 = icmp uge i64 %.0163, %93
  %95 = icmp ugt i64 %91, 7
  %96 = select i1 %94, i1 %95, i1 false, !prof !18
  br i1 %96, label %.preheader, label %103, !prof !18

.preheader:                                       ; preds = %90, %.preheader
  %.0160 = phi i64 [ %102, %.preheader ], [ 0, %90 ]
  %97 = icmp ult i64 %.0160, %21
  tail call void @llvm.assume(i1 %97)
  %98 = getelementptr inbounds i8, ptr %.0165, i64 %.0160
  %99 = sub i64 %.0160, %91
  %100 = getelementptr inbounds i8, ptr %.0165, i64 %99
  %101 = tail call i64 @load8(ptr noundef %100)
  tail call void @store8(ptr noundef %98, i64 noundef %101)
  %102 = add i64 %.0160, 8
  br label %.preheader, !llvm.loop !32

103:                                              ; preds = %90
  %.not173 = icmp ugt i64 %21, %.0163
  br i1 %.not173, label %.preheader180, label %.preheader181

.preheader180:                                    ; preds = %103
  %.not197 = icmp eq i64 %.0163, 0
  br i1 %.not197, label %._crit_edge194, label %iter.check278

iter.check278:                                    ; preds = %.preheader180
  %min.iters.check276 = icmp ult i64 %.0163, 8
  %diff.check274 = icmp ult i64 %91, 32
  %or.cond307 = select i1 %min.iters.check276, i1 true, i1 %diff.check274
  br i1 %or.cond307, label %.lr.ph193.preheader, label %vector.main.loop.iter.check280

vector.main.loop.iter.check280:                   ; preds = %iter.check278
  %min.iters.check279 = icmp ult i64 %.0163, 32
  br i1 %min.iters.check279, label %vec.epilog.ph292, label %vector.ph281

vector.ph281:                                     ; preds = %vector.main.loop.iter.check280
  %n.vec283 = and i64 %.0163, -32
  br label %vector.body284

vector.body284:                                   ; preds = %vector.body284, %vector.ph281
  %index285 = phi i64 [ 0, %vector.ph281 ], [ %index.next288, %vector.body284 ]
  %104 = sub i64 %index285, %91
  %105 = getelementptr inbounds i8, ptr %.0165, i64 %104
  %106 = getelementptr inbounds i8, ptr %105, i64 16
  %wide.load286 = load <16 x i8>, ptr %105, align 1, !tbaa !19
  %wide.load287 = load <16 x i8>, ptr %106, align 1, !tbaa !19
  %107 = getelementptr inbounds i8, ptr %.0165, i64 %index285
  %108 = getelementptr inbounds i8, ptr %107, i64 16
  store <16 x i8> %wide.load286, ptr %107, align 1, !tbaa !19
  store <16 x i8> %wide.load287, ptr %108, align 1, !tbaa !19
  %index.next288 = add nuw i64 %index285, 32
  %109 = icmp eq i64 %index.next288, %n.vec283
  br i1 %109, label %middle.block275, label %vector.body284, !llvm.loop !33

middle.block275:                                  ; preds = %vector.body284
  %cmp.n289 = icmp eq i64 %.0163, %n.vec283
  br i1 %cmp.n289, label %._crit_edge194, label %vec.epilog.iter.check293

vec.epilog.iter.check293:                         ; preds = %middle.block275
  %n.vec.remaining294 = and i64 %.0163, 24
  %min.epilog.iters.check295 = icmp eq i64 %n.vec.remaining294, 0
  br i1 %min.epilog.iters.check295, label %.lr.ph193.preheader, label %vec.epilog.ph292

.lr.ph193.preheader:                              ; preds = %vec.epilog.middle.block290, %iter.check278, %vec.epilog.iter.check293
  %.0158192.ph = phi i64 [ 0, %iter.check278 ], [ %n.vec283, %vec.epilog.iter.check293 ], [ %n.vec298, %vec.epilog.middle.block290 ]
  %xtraiter309 = and i64 %.0163, 3
  %lcmp.mod310.not = icmp eq i64 %xtraiter309, 0
  br i1 %lcmp.mod310.not, label %.lr.ph193.prol.loopexit, label %.lr.ph193.prol

.lr.ph193.prol:                                   ; preds = %.lr.ph193.preheader, %.lr.ph193.prol
  %.0158192.prol = phi i64 [ %114, %.lr.ph193.prol ], [ %.0158192.ph, %.lr.ph193.preheader ]
  %prol.iter311 = phi i64 [ %prol.iter311.next, %.lr.ph193.prol ], [ 0, %.lr.ph193.preheader ]
  %110 = sub i64 %.0158192.prol, %91
  %111 = getelementptr inbounds i8, ptr %.0165, i64 %110
  %112 = load i8, ptr %111, align 1, !tbaa !19
  %113 = getelementptr inbounds i8, ptr %.0165, i64 %.0158192.prol
  store i8 %112, ptr %113, align 1, !tbaa !19
  %114 = add nuw i64 %.0158192.prol, 1
  %prol.iter311.next = add i64 %prol.iter311, 1
  %prol.iter311.cmp.not = icmp eq i64 %prol.iter311.next, %xtraiter309
  br i1 %prol.iter311.cmp.not, label %.lr.ph193.prol.loopexit, label %.lr.ph193.prol, !llvm.loop !34

.lr.ph193.prol.loopexit:                          ; preds = %.lr.ph193.prol, %.lr.ph193.preheader
  %.0158192.unr = phi i64 [ %.0158192.ph, %.lr.ph193.preheader ], [ %114, %.lr.ph193.prol ]
  %115 = sub i64 %.0158192.ph, %.0163
  %116 = icmp ugt i64 %115, -4
  br i1 %116, label %._crit_edge194, label %.lr.ph193

vec.epilog.ph292:                                 ; preds = %vector.main.loop.iter.check280, %vec.epilog.iter.check293
  %vec.epilog.resume.val296 = phi i64 [ %n.vec283, %vec.epilog.iter.check293 ], [ 0, %vector.main.loop.iter.check280 ]
  %n.vec298 = and i64 %.0163, -8
  br label %vec.epilog.vector.body300

vec.epilog.vector.body300:                        ; preds = %vec.epilog.vector.body300, %vec.epilog.ph292
  %index301 = phi i64 [ %vec.epilog.resume.val296, %vec.epilog.ph292 ], [ %index.next303, %vec.epilog.vector.body300 ]
  %117 = sub i64 %index301, %91
  %118 = getelementptr inbounds i8, ptr %.0165, i64 %117
  %wide.load302 = load <8 x i8>, ptr %118, align 1, !tbaa !19
  %119 = getelementptr inbounds i8, ptr %.0165, i64 %index301
  store <8 x i8> %wide.load302, ptr %119, align 1, !tbaa !19
  %index.next303 = add nuw i64 %index301, 8
  %120 = icmp eq i64 %index.next303, %n.vec298
  br i1 %120, label %vec.epilog.middle.block290, label %vec.epilog.vector.body300, !llvm.loop !35

vec.epilog.middle.block290:                       ; preds = %vec.epilog.vector.body300
  %cmp.n304 = icmp eq i64 %.0163, %n.vec298
  br i1 %cmp.n304, label %._crit_edge194, label %.lr.ph193.preheader

.preheader181:                                    ; preds = %103, %.preheader181
  %.0159 = phi i64 [ %126, %.preheader181 ], [ 0, %103 ]
  %121 = icmp ult i64 %.0159, %21
  tail call void @llvm.assume(i1 %121)
  %122 = sub i64 %.0159, %91
  %123 = getelementptr inbounds i8, ptr %.0165, i64 %122
  %124 = load i8, ptr %123, align 1, !tbaa !19
  %125 = getelementptr inbounds i8, ptr %.0165, i64 %.0159
  store i8 %124, ptr %125, align 1, !tbaa !19
  %126 = add nuw i64 %.0159, 1
  br label %.preheader181, !llvm.loop !36

.lr.ph193:                                        ; preds = %.lr.ph193.prol.loopexit, %.lr.ph193
  %.0158192 = phi i64 [ %146, %.lr.ph193 ], [ %.0158192.unr, %.lr.ph193.prol.loopexit ]
  %127 = sub i64 %.0158192, %91
  %128 = getelementptr inbounds i8, ptr %.0165, i64 %127
  %129 = load i8, ptr %128, align 1, !tbaa !19
  %130 = getelementptr inbounds i8, ptr %.0165, i64 %.0158192
  store i8 %129, ptr %130, align 1, !tbaa !19
  %131 = add nuw i64 %.0158192, 1
  %132 = sub i64 %131, %91
  %133 = getelementptr inbounds i8, ptr %.0165, i64 %132
  %134 = load i8, ptr %133, align 1, !tbaa !19
  %135 = getelementptr inbounds i8, ptr %.0165, i64 %131
  store i8 %134, ptr %135, align 1, !tbaa !19
  %136 = add nuw i64 %.0158192, 2
  %137 = sub i64 %136, %91
  %138 = getelementptr inbounds i8, ptr %.0165, i64 %137
  %139 = load i8, ptr %138, align 1, !tbaa !19
  %140 = getelementptr inbounds i8, ptr %.0165, i64 %136
  store i8 %139, ptr %140, align 1, !tbaa !19
  %141 = add nuw i64 %.0158192, 3
  %142 = sub i64 %141, %91
  %143 = getelementptr inbounds i8, ptr %.0165, i64 %142
  %144 = load i8, ptr %143, align 1, !tbaa !19
  %145 = getelementptr inbounds i8, ptr %.0165, i64 %141
  store i8 %144, ptr %145, align 1, !tbaa !19
  %146 = add nuw i64 %.0158192, 4
  %exitcond200.not.3 = icmp eq i64 %146, %.0163
  br i1 %exitcond200.not.3, label %._crit_edge194, label %.lr.ph193, !llvm.loop !37

._crit_edge194:                                   ; preds = %.lr.ph193.prol.loopexit, %.lr.ph193, %middle.block275, %vec.epilog.middle.block290, %.preheader180
  store ptr %.0164, ptr %0, align 8, !tbaa !12
  %147 = getelementptr inbounds i8, ptr %.0165, i64 %.0163
  store ptr %147, ptr %10, align 8, !tbaa !14
  store i64 0, ptr %18, align 8, !tbaa !15
  %148 = sub i64 %21, %.0163
  store i64 %148, ptr %20, align 8, !tbaa !16
  store i64 %91, ptr %92, align 8, !tbaa !17
  br label %179

149:                                              ; preds = %.thread
  %.not174 = icmp ugt i64 %7, %19
  br i1 %.not174, label %150, label %179

150:                                              ; preds = %149
  %151 = add i64 %19, 7
  %.not175 = icmp ult i64 %14, %151
  %.not176 = icmp ult i64 %7, %151
  %or.cond178 = or i1 %.not175, %.not176
  br i1 %or.cond178, label %157, label %.preheader184

.preheader184:                                    ; preds = %150, %.preheader184
  %.0157 = phi i64 [ %156, %.preheader184 ], [ 0, %150 ]
  %152 = icmp ult i64 %.0157, %19
  tail call void @llvm.assume(i1 %152)
  %153 = getelementptr inbounds i8, ptr %11, i64 %.0157
  %154 = getelementptr inbounds i8, ptr %4, i64 %.0157
  %155 = tail call i64 @load8(ptr noundef %154)
  tail call void @store8(ptr noundef %153, i64 noundef %155)
  %156 = add i64 %.0157, 8
  br label %.preheader184, !llvm.loop !38

157:                                              ; preds = %150
  %.not177 = icmp ugt i64 %19, %14
  br i1 %.not177, label %iter.check246, label %.preheader183

iter.check246:                                    ; preds = %157
  %min.iters.check244 = icmp ult i64 %14, 8
  %158 = sub i64 %13, %6
  %diff.check242 = icmp ult i64 %158, 32
  %or.cond308 = or i1 %min.iters.check244, %diff.check242
  br i1 %or.cond308, label %.lr.ph190.preheader, label %vector.main.loop.iter.check248

vector.main.loop.iter.check248:                   ; preds = %iter.check246
  %min.iters.check247 = icmp ult i64 %14, 32
  br i1 %min.iters.check247, label %vec.epilog.ph260, label %vector.ph249

vector.ph249:                                     ; preds = %vector.main.loop.iter.check248
  %n.vec251 = and i64 %14, -32
  br label %vector.body252

vector.body252:                                   ; preds = %vector.body252, %vector.ph249
  %index253 = phi i64 [ 0, %vector.ph249 ], [ %index.next256, %vector.body252 ]
  %159 = getelementptr inbounds i8, ptr %4, i64 %index253
  %160 = getelementptr inbounds i8, ptr %159, i64 16
  %wide.load254 = load <16 x i8>, ptr %159, align 1, !tbaa !19
  %wide.load255 = load <16 x i8>, ptr %160, align 1, !tbaa !19
  %161 = getelementptr inbounds i8, ptr %11, i64 %index253
  %162 = getelementptr inbounds i8, ptr %161, i64 16
  store <16 x i8> %wide.load254, ptr %161, align 1, !tbaa !19
  store <16 x i8> %wide.load255, ptr %162, align 1, !tbaa !19
  %index.next256 = add nuw i64 %index253, 32
  %163 = icmp eq i64 %index.next256, %n.vec251
  br i1 %163, label %middle.block243, label %vector.body252, !llvm.loop !39

middle.block243:                                  ; preds = %vector.body252
  %cmp.n257 = icmp eq i64 %14, %n.vec251
  br i1 %cmp.n257, label %._crit_edge191, label %vec.epilog.iter.check261

vec.epilog.iter.check261:                         ; preds = %middle.block243
  %n.vec.remaining262 = and i64 %14, 24
  %min.epilog.iters.check263 = icmp eq i64 %n.vec.remaining262, 0
  br i1 %min.epilog.iters.check263, label %.lr.ph190.preheader, label %vec.epilog.ph260

.lr.ph190.preheader:                              ; preds = %vec.epilog.middle.block258, %iter.check246, %vec.epilog.iter.check261
  %.0189.ph = phi i64 [ 0, %iter.check246 ], [ %n.vec251, %vec.epilog.iter.check261 ], [ %n.vec266, %vec.epilog.middle.block258 ]
  br label %.lr.ph190

vec.epilog.ph260:                                 ; preds = %vector.main.loop.iter.check248, %vec.epilog.iter.check261
  %vec.epilog.resume.val264 = phi i64 [ %n.vec251, %vec.epilog.iter.check261 ], [ 0, %vector.main.loop.iter.check248 ]
  %n.vec266 = and i64 %14, -8
  br label %vec.epilog.vector.body268

vec.epilog.vector.body268:                        ; preds = %vec.epilog.vector.body268, %vec.epilog.ph260
  %index269 = phi i64 [ %vec.epilog.resume.val264, %vec.epilog.ph260 ], [ %index.next271, %vec.epilog.vector.body268 ]
  %164 = getelementptr inbounds i8, ptr %4, i64 %index269
  %wide.load270 = load <8 x i8>, ptr %164, align 1, !tbaa !19
  %165 = getelementptr inbounds i8, ptr %11, i64 %index269
  store <8 x i8> %wide.load270, ptr %165, align 1, !tbaa !19
  %index.next271 = add nuw i64 %index269, 8
  %166 = icmp eq i64 %index.next271, %n.vec266
  br i1 %166, label %vec.epilog.middle.block258, label %vec.epilog.vector.body268, !llvm.loop !40

vec.epilog.middle.block258:                       ; preds = %vec.epilog.vector.body268
  %cmp.n272 = icmp eq i64 %14, %n.vec266
  br i1 %cmp.n272, label %._crit_edge191, label %.lr.ph190.preheader

.preheader183:                                    ; preds = %157, %.preheader183
  %.0156 = phi i64 [ %171, %.preheader183 ], [ 0, %157 ]
  %167 = icmp ult i64 %.0156, %19
  tail call void @llvm.assume(i1 %167)
  %168 = getelementptr inbounds i8, ptr %4, i64 %.0156
  %169 = load i8, ptr %168, align 1, !tbaa !19
  %170 = getelementptr inbounds i8, ptr %11, i64 %.0156
  store i8 %169, ptr %170, align 1, !tbaa !19
  %171 = add nuw i64 %.0156, 1
  br label %.preheader183, !llvm.loop !41

.lr.ph190:                                        ; preds = %.lr.ph190.preheader, %.lr.ph190
  %.0189 = phi i64 [ %175, %.lr.ph190 ], [ %.0189.ph, %.lr.ph190.preheader ]
  %172 = getelementptr inbounds i8, ptr %4, i64 %.0189
  %173 = load i8, ptr %172, align 1, !tbaa !19
  %174 = getelementptr inbounds i8, ptr %11, i64 %.0189
  store i8 %173, ptr %174, align 1, !tbaa !19
  %175 = add nuw i64 %.0189, 1
  %exitcond199.not = icmp eq i64 %175, %14
  br i1 %exitcond199.not, label %._crit_edge191, label %.lr.ph190, !llvm.loop !42

._crit_edge191:                                   ; preds = %.lr.ph190, %vec.epilog.middle.block258, %middle.block243
  %176 = getelementptr inbounds i8, ptr %4, i64 %14
  store ptr %176, ptr %0, align 8, !tbaa !12
  %177 = getelementptr inbounds i8, ptr %11, i64 %14
  store ptr %177, ptr %10, align 8, !tbaa !14
  %178 = sub i64 %19, %14
  store i64 %178, ptr %18, align 8, !tbaa !15
  store i64 0, ptr %20, align 8, !tbaa !16
  store i64 %27, ptr %26, align 8, !tbaa !17
  br label %179

179:                                              ; preds = %.loopexit, %149, %1, %._crit_edge191, %._crit_edge194, %._crit_edge
  ret void
}

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

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

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

; Function Attrs: alwaysinline nounwind uwtable
declare hidden i64 @load8(ptr noundef) local_unnamed_addr #1

; Function Attrs: nocallback nofree nosync nounwind willreturn memory(inaccessiblemem: write)
declare void @llvm.assume(i1 noundef) #2

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

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

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

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


; Effective O3 passes: EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LoopLoadEliminationPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,LoopVectorizePass,LowerExpectIntrinsicPass,MemCpyOptPass,PostOrderFunctionAttrsPass,ReassociatePass,SCCPPass,SROAPass,SimplifyCFGPass,TailCallElimPass