; LLVM IR from jgaeddert/liquid-dsp :: examples (fec_soft_example)

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

@.str.5 = external hidden unnamed_addr constant [9 x i8], align 1
@optarg = external global ptr, align 8
@stderr = external global ptr, align 8
@.str.6 = external hidden unnamed_addr constant [45 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [45 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [45 x i8], align 1

; Function Attrs: nounwind uwtable
declare dso_local void @usage() #0

declare i32 @printf(ptr noundef, ...) #1

; Function Attrs: nounwind uwtable
define dso_local i32 @main(i32 noundef %0, ptr noundef %1) #0 {
  %3 = alloca i32, align 4
  %4 = alloca i32, align 4
  %5 = alloca ptr, align 8
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca ptr, 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 ptr, align 8
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca i32, align 4
  %25 = alloca i32, align 4
  %26 = alloca i32, align 4
  %27 = alloca i32, align 4
  %28 = alloca i8, align 1
  store i32 0, ptr %3, align 4
  store i32 %0, ptr %4, align 4, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #8
  store i32 4, ptr %6, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #8
  store i32 2048, ptr %7, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #8
  store i32 4, ptr %8, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #8
  store i32 1, ptr %9, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #8
  br label %29

29:                                               ; preds = %53, %2
  %30 = load i32, ptr %4, align 4, !tbaa !5
  %31 = load ptr, ptr %5, align 8, !tbaa !9
  %32 = call i32 @getopt(i32 noundef %30, ptr noundef %31, ptr noundef @.str.5) #8
  store i32 %32, ptr %10, align 4, !tbaa !5
  %33 = icmp ne i32 %32, -1
  br i1 %33, label %34, label %54

34:                                               ; preds = %29
  %35 = load i32, ptr %10, align 4, !tbaa !5
  switch i32 %35, label %52 [
    i32 104, label %36
    i32 117, label %36
    i32 118, label %37
    i32 113, label %38
    i32 110, label %39
    i32 99, label %42
  ]

36:                                               ; preds = %34, %34
  call void @usage()
  store i32 0, ptr %3, align 4
  store i32 1, ptr %11, align 4
  br label %662

37:                                               ; preds = %34
  store i32 1, ptr %9, align 4, !tbaa !5
  br label %53

38:                                               ; preds = %34
  store i32 0, ptr %9, align 4, !tbaa !5
  br label %53

39:                                               ; preds = %34
  %40 = load ptr, ptr @optarg, align 8, !tbaa !9
  %41 = call i32 @atoi(ptr noundef %40) #9
  store i32 %41, ptr %6, align 4, !tbaa !5
  br label %53

42:                                               ; preds = %34
  %43 = load ptr, ptr @optarg, align 8, !tbaa !9
  %44 = call i32 @liquid_getopt_str2fec(ptr noundef %43)
  store i32 %44, ptr %8, align 4, !tbaa !5
  %45 = load i32, ptr %8, align 4, !tbaa !5
  %46 = icmp eq i32 %45, 0
  br i1 %46, label %47, label %51

47:                                               ; preds = %42
  %48 = load ptr, ptr @stderr, align 8, !tbaa !9
  %49 = load ptr, ptr @optarg, align 8, !tbaa !9
  %50 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %48, ptr noundef @.str.6, ptr noundef %49) #8
  call void @exit(i32 noundef 1) #10
  unreachable

51:                                               ; preds = %42
  br label %53

52:                                               ; preds = %34
  call void @exit(i32 noundef 1) #10
  unreachable

53:                                               ; preds = %51, %39, %38, %37
  br label %29, !llvm.loop !11

54:                                               ; preds = %29
  %55 = load i32, ptr %6, align 4, !tbaa !5
  %56 = load i32, ptr %7, align 4, !tbaa !5
  %57 = icmp ugt i32 %55, %56
  br i1 %57, label %58, label %60

58:                                               ; preds = %54
  %59 = load i32, ptr %7, align 4, !tbaa !5
  br label %62

60:                                               ; preds = %54
  %61 = load i32, ptr %6, align 4, !tbaa !5
  br label %62

62:                                               ; preds = %60, %58
  %63 = phi i32 [ %59, %58 ], [ %61, %60 ]
  store i32 %63, ptr %6, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #8
  %64 = load i32, ptr %8, align 4, !tbaa !5
  %65 = load i32, ptr %6, align 4, !tbaa !5
  %66 = call i32 @fec_get_enc_msg_length(i32 noundef %64, i32 noundef %65)
  store i32 %66, ptr %12, align 4, !tbaa !5
  %67 = load i32, ptr %6, align 4, !tbaa !5
  %68 = call i32 (ptr, ...) @printf(ptr noundef @.str.7, i32 noundef %67)
  %69 = load i32, ptr %12, align 4, !tbaa !5
  %70 = call i32 (ptr, ...) @printf(ptr noundef @.str.8, i32 noundef %69)
  %71 = load i32, ptr %6, align 4, !tbaa !5
  %72 = zext i32 %71 to i64
  %73 = call ptr @llvm.stacksave.p0()
  store ptr %73, ptr %13, align 8
  %74 = alloca i8, i64 %72, align 16
  store i64 %72, ptr %14, align 8
  %75 = load i32, ptr %12, align 4, !tbaa !5
  %76 = zext i32 %75 to i64
  %77 = alloca i8, i64 %76, align 16
  store i64 %76, ptr %15, align 8
  %78 = load i32, ptr %12, align 4, !tbaa !5
  %79 = mul i32 8, %78
  %80 = zext i32 %79 to i64
  %81 = alloca i8, i64 %80, align 16
  store i64 %80, ptr %16, align 8
  %82 = load i32, ptr %12, align 4, !tbaa !5
  %83 = zext i32 %82 to i64
  %84 = alloca i8, i64 %83, align 16
  store i64 %83, ptr %17, align 8
  %85 = load i32, ptr %6, align 4, !tbaa !5
  %86 = zext i32 %85 to i64
  %87 = alloca i8, i64 %86, align 16
  store i64 %86, ptr %18, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #8
  %88 = load i32, ptr %8, align 4, !tbaa !5
  %89 = call ptr @fec_create(i32 noundef %88, ptr noundef null)
  store ptr %89, ptr %19, align 8, !tbaa !9
  %90 = load ptr, ptr %19, align 8, !tbaa !9
  %91 = call i32 @fec_print(ptr noundef %90)
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #8
  store i32 0, ptr %20, align 4, !tbaa !5
  br label %92

92:                                               ; preds = %103, %62
  %93 = load i32, ptr %20, align 4, !tbaa !5
  %94 = load i32, ptr %6, align 4, !tbaa !5
  %95 = icmp ult i32 %93, %94
  br i1 %95, label %96, label %106

96:                                               ; preds = %92
  %97 = call i32 @rand() #8
  %98 = and i32 %97, 255
  %99 = trunc i32 %98 to i8
  %100 = load i32, ptr %20, align 4, !tbaa !5
  %101 = zext i32 %100 to i64
  %102 = getelementptr inbounds i8, ptr %74, i64 %101
  store i8 %99, ptr %102, align 1, !tbaa !13
  br label %103

103:                                              ; preds = %96
  %104 = load i32, ptr %20, align 4, !tbaa !5
  %105 = add i32 %104, 1
  store i32 %105, ptr %20, align 4, !tbaa !5
  br label %92, !llvm.loop !14

106:                                              ; preds = %92
  %107 = load ptr, ptr %19, align 8, !tbaa !9
  %108 = load i32, ptr %6, align 4, !tbaa !5
  %109 = call i32 @fec_encode(ptr noundef %107, i32 noundef %108, ptr noundef %74, ptr noundef %77)
  store i32 0, ptr %20, align 4, !tbaa !5
  br label %110

110:                                              ; preds = %235, %106
  %111 = load i32, ptr %20, align 4, !tbaa !5
  %112 = load i32, ptr %12, align 4, !tbaa !5
  %113 = icmp ult i32 %111, %112
  br i1 %113, label %114, label %238

114:                                              ; preds = %110
  %115 = load i32, ptr %20, align 4, !tbaa !5
  %116 = zext i32 %115 to i64
  %117 = getelementptr inbounds i8, ptr %77, i64 %116
  %118 = load i8, ptr %117, align 1, !tbaa !13
  %119 = zext i8 %118 to i32
  %120 = and i32 %119, 128
  %121 = icmp ne i32 %120, 0
  %122 = zext i1 %121 to i64
  %123 = select i1 %121, i32 255, i32 0
  %124 = trunc i32 %123 to i8
  %125 = load i32, ptr %20, align 4, !tbaa !5
  %126 = mul i32 8, %125
  %127 = add i32 %126, 0
  %128 = zext i32 %127 to i64
  %129 = getelementptr inbounds i8, ptr %81, i64 %128
  store i8 %124, ptr %129, align 1, !tbaa !13
  %130 = load i32, ptr %20, align 4, !tbaa !5
  %131 = zext i32 %130 to i64
  %132 = getelementptr inbounds i8, ptr %77, i64 %131
  %133 = load i8, ptr %132, align 1, !tbaa !13
  %134 = zext i8 %133 to i32
  %135 = and i32 %134, 64
  %136 = icmp ne i32 %135, 0
  %137 = zext i1 %136 to i64
  %138 = select i1 %136, i32 255, i32 0
  %139 = trunc i32 %138 to i8
  %140 = load i32, ptr %20, align 4, !tbaa !5
  %141 = mul i32 8, %140
  %142 = add i32 %141, 1
  %143 = zext i32 %142 to i64
  %144 = getelementptr inbounds i8, ptr %81, i64 %143
  store i8 %139, ptr %144, align 1, !tbaa !13
  %145 = load i32, ptr %20, align 4, !tbaa !5
  %146 = zext i32 %145 to i64
  %147 = getelementptr inbounds i8, ptr %77, i64 %146
  %148 = load i8, ptr %147, align 1, !tbaa !13
  %149 = zext i8 %148 to i32
  %150 = and i32 %149, 32
  %151 = icmp ne i32 %150, 0
  %152 = zext i1 %151 to i64
  %153 = select i1 %151, i32 255, i32 0
  %154 = trunc i32 %153 to i8
  %155 = load i32, ptr %20, align 4, !tbaa !5
  %156 = mul i32 8, %155
  %157 = add i32 %156, 2
  %158 = zext i32 %157 to i64
  %159 = getelementptr inbounds i8, ptr %81, i64 %158
  store i8 %154, ptr %159, align 1, !tbaa !13
  %160 = load i32, ptr %20, align 4, !tbaa !5
  %161 = zext i32 %160 to i64
  %162 = getelementptr inbounds i8, ptr %77, i64 %161
  %163 = load i8, ptr %162, align 1, !tbaa !13
  %164 = zext i8 %163 to i32
  %165 = and i32 %164, 16
  %166 = icmp ne i32 %165, 0
  %167 = zext i1 %166 to i64
  %168 = select i1 %166, i32 255, i32 0
  %169 = trunc i32 %168 to i8
  %170 = load i32, ptr %20, align 4, !tbaa !5
  %171 = mul i32 8, %170
  %172 = add i32 %171, 3
  %173 = zext i32 %172 to i64
  %174 = getelementptr inbounds i8, ptr %81, i64 %173
  store i8 %169, ptr %174, align 1, !tbaa !13
  %175 = load i32, ptr %20, align 4, !tbaa !5
  %176 = zext i32 %175 to i64
  %177 = getelementptr inbounds i8, ptr %77, i64 %176
  %178 = load i8, ptr %177, align 1, !tbaa !13
  %179 = zext i8 %178 to i32
  %180 = and i32 %179, 8
  %181 = icmp ne i32 %180, 0
  %182 = zext i1 %181 to i64
  %183 = select i1 %181, i32 255, i32 0
  %184 = trunc i32 %183 to i8
  %185 = load i32, ptr %20, align 4, !tbaa !5
  %186 = mul i32 8, %185
  %187 = add i32 %186, 4
  %188 = zext i32 %187 to i64
  %189 = getelementptr inbounds i8, ptr %81, i64 %188
  store i8 %184, ptr %189, align 1, !tbaa !13
  %190 = load i32, ptr %20, align 4, !tbaa !5
  %191 = zext i32 %190 to i64
  %192 = getelementptr inbounds i8, ptr %77, i64 %191
  %193 = load i8, ptr %192, align 1, !tbaa !13
  %194 = zext i8 %193 to i32
  %195 = and i32 %194, 4
  %196 = icmp ne i32 %195, 0
  %197 = zext i1 %196 to i64
  %198 = select i1 %196, i32 255, i32 0
  %199 = trunc i32 %198 to i8
  %200 = load i32, ptr %20, align 4, !tbaa !5
  %201 = mul i32 8, %200
  %202 = add i32 %201, 5
  %203 = zext i32 %202 to i64
  %204 = getelementptr inbounds i8, ptr %81, i64 %203
  store i8 %199, ptr %204, align 1, !tbaa !13
  %205 = load i32, ptr %20, align 4, !tbaa !5
  %206 = zext i32 %205 to i64
  %207 = getelementptr inbounds i8, ptr %77, i64 %206
  %208 = load i8, ptr %207, align 1, !tbaa !13
  %209 = zext i8 %208 to i32
  %210 = and i32 %209, 2
  %211 = icmp ne i32 %210, 0
  %212 = zext i1 %211 to i64
  %213 = select i1 %211, i32 255, i32 0
  %214 = trunc i32 %213 to i8
  %215 = load i32, ptr %20, align 4, !tbaa !5
  %216 = mul i32 8, %215
  %217 = add i32 %216, 6
  %218 = zext i32 %217 to i64
  %219 = getelementptr inbounds i8, ptr %81, i64 %218
  store i8 %214, ptr %219, align 1, !tbaa !13
  %220 = load i32, ptr %20, align 4, !tbaa !5
  %221 = zext i32 %220 to i64
  %222 = getelementptr inbounds i8, ptr %77, i64 %221
  %223 = load i8, ptr %222, align 1, !tbaa !13
  %224 = zext i8 %223 to i32
  %225 = and i32 %224, 1
  %226 = icmp ne i32 %225, 0
  %227 = zext i1 %226 to i64
  %228 = select i1 %226, i32 255, i32 0
  %229 = trunc i32 %228 to i8
  %230 = load i32, ptr %20, align 4, !tbaa !5
  %231 = mul i32 8, %230
  %232 = add i32 %231, 7
  %233 = zext i32 %232 to i64
  %234 = getelementptr inbounds i8, ptr %81, i64 %233
  store i8 %229, ptr %234, align 1, !tbaa !13
  br label %235

235:                                              ; preds = %114
  %236 = load i32, ptr %20, align 4, !tbaa !5
  %237 = add i32 %236, 1
  store i32 %237, ptr %20, align 4, !tbaa !5
  br label %110, !llvm.loop !15

238:                                              ; preds = %110
  %239 = getelementptr inbounds i8, ptr %81, i64 0
  %240 = load i8, ptr %239, align 16, !tbaa !13
  %241 = zext i8 %240 to i32
  %242 = sub nsw i32 255, %241
  %243 = trunc i32 %242 to i8
  %244 = getelementptr inbounds i8, ptr %81, i64 0
  store i8 %243, ptr %244, align 16, !tbaa !13
  store i32 0, ptr %20, align 4, !tbaa !5
  br label %245

245:                                              ; preds = %276, %238
  %246 = load i32, ptr %20, align 4, !tbaa !5
  %247 = load i32, ptr %12, align 4, !tbaa !5
  %248 = mul i32 8, %247
  %249 = icmp ult i32 %246, %248
  br i1 %249, label %250, label %279

250:                                              ; preds = %245
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #8
  %251 = load i32, ptr %20, align 4, !tbaa !5
  %252 = zext i32 %251 to i64
  %253 = getelementptr inbounds i8, ptr %81, i64 %252
  %254 = load i8, ptr %253, align 1, !tbaa !13
  %255 = zext i8 %254 to i32
  %256 = sitofp i32 %255 to double
  %257 = call float (...) @randnf()
  %258 = fmul float 2.000000e+01, %257
  %259 = fptosi float %258 to i32
  %260 = sitofp i32 %259 to double
  %261 = call double @llvm.fmuladd.f64(double 8.000000e-01, double %256, double %260)
  %262 = fptosi double %261 to i32
  store i32 %262, ptr %21, align 4, !tbaa !5
  %263 = load i32, ptr %21, align 4, !tbaa !5
  %264 = icmp sgt i32 %263, 255
  br i1 %264, label %265, label %266

265:                                              ; preds = %250
  store i32 255, ptr %21, align 4, !tbaa !5
  br label %266

266:                                              ; preds = %265, %250
  %267 = load i32, ptr %21, align 4, !tbaa !5
  %268 = icmp slt i32 %267, 0
  br i1 %268, label %269, label %270

269:                                              ; preds = %266
  store i32 0, ptr %21, align 4, !tbaa !5
  br label %270

270:                                              ; preds = %269, %266
  %271 = load i32, ptr %21, align 4, !tbaa !5
  %272 = trunc i32 %271 to i8
  %273 = load i32, ptr %20, align 4, !tbaa !5
  %274 = zext i32 %273 to i64
  %275 = getelementptr inbounds i8, ptr %81, i64 %274
  store i8 %272, ptr %275, align 1, !tbaa !13
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #8
  br label %276

276:                                              ; preds = %270
  %277 = load i32, ptr %20, align 4, !tbaa !5
  %278 = add i32 %277, 1
  store i32 %278, ptr %20, align 4, !tbaa !5
  br label %245, !llvm.loop !16

279:                                              ; preds = %245
  store i32 0, ptr %20, align 4, !tbaa !5
  br label %280

280:                                              ; preds = %416, %279
  %281 = load i32, ptr %20, align 4, !tbaa !5
  %282 = load i32, ptr %12, align 4, !tbaa !5
  %283 = icmp ult i32 %281, %282
  br i1 %283, label %284, label %419

284:                                              ; preds = %280
  %285 = load i32, ptr %20, align 4, !tbaa !5
  %286 = zext i32 %285 to i64
  %287 = getelementptr inbounds i8, ptr %84, i64 %286
  store i8 0, ptr %287, align 1, !tbaa !13
  %288 = load i32, ptr %20, align 4, !tbaa !5
  %289 = mul i32 8, %288
  %290 = add i32 %289, 0
  %291 = zext i32 %290 to i64
  %292 = getelementptr inbounds i8, ptr %81, i64 %291
  %293 = load i8, ptr %292, align 1, !tbaa !13
  %294 = zext i8 %293 to i32
  %295 = ashr i32 %294, 0
  %296 = and i32 %295, 128
  %297 = load i32, ptr %20, align 4, !tbaa !5
  %298 = zext i32 %297 to i64
  %299 = getelementptr inbounds i8, ptr %84, i64 %298
  %300 = load i8, ptr %299, align 1, !tbaa !13
  %301 = zext i8 %300 to i32
  %302 = or i32 %301, %296
  %303 = trunc i32 %302 to i8
  store i8 %303, ptr %299, align 1, !tbaa !13
  %304 = load i32, ptr %20, align 4, !tbaa !5
  %305 = mul i32 8, %304
  %306 = add i32 %305, 1
  %307 = zext i32 %306 to i64
  %308 = getelementptr inbounds i8, ptr %81, i64 %307
  %309 = load i8, ptr %308, align 1, !tbaa !13
  %310 = zext i8 %309 to i32
  %311 = ashr i32 %310, 1
  %312 = and i32 %311, 64
  %313 = load i32, ptr %20, align 4, !tbaa !5
  %314 = zext i32 %313 to i64
  %315 = getelementptr inbounds i8, ptr %84, i64 %314
  %316 = load i8, ptr %315, align 1, !tbaa !13
  %317 = zext i8 %316 to i32
  %318 = or i32 %317, %312
  %319 = trunc i32 %318 to i8
  store i8 %319, ptr %315, align 1, !tbaa !13
  %320 = load i32, ptr %20, align 4, !tbaa !5
  %321 = mul i32 8, %320
  %322 = add i32 %321, 2
  %323 = zext i32 %322 to i64
  %324 = getelementptr inbounds i8, ptr %81, i64 %323
  %325 = load i8, ptr %324, align 1, !tbaa !13
  %326 = zext i8 %325 to i32
  %327 = ashr i32 %326, 2
  %328 = and i32 %327, 32
  %329 = load i32, ptr %20, align 4, !tbaa !5
  %330 = zext i32 %329 to i64
  %331 = getelementptr inbounds i8, ptr %84, i64 %330
  %332 = load i8, ptr %331, align 1, !tbaa !13
  %333 = zext i8 %332 to i32
  %334 = or i32 %333, %328
  %335 = trunc i32 %334 to i8
  store i8 %335, ptr %331, align 1, !tbaa !13
  %336 = load i32, ptr %20, align 4, !tbaa !5
  %337 = mul i32 8, %336
  %338 = add i32 %337, 3
  %339 = zext i32 %338 to i64
  %340 = getelementptr inbounds i8, ptr %81, i64 %339
  %341 = load i8, ptr %340, align 1, !tbaa !13
  %342 = zext i8 %341 to i32
  %343 = ashr i32 %342, 3
  %344 = and i32 %343, 16
  %345 = load i32, ptr %20, align 4, !tbaa !5
  %346 = zext i32 %345 to i64
  %347 = getelementptr inbounds i8, ptr %84, i64 %346
  %348 = load i8, ptr %347, align 1, !tbaa !13
  %349 = zext i8 %348 to i32
  %350 = or i32 %349, %344
  %351 = trunc i32 %350 to i8
  store i8 %351, ptr %347, align 1, !tbaa !13
  %352 = load i32, ptr %20, align 4, !tbaa !5
  %353 = mul i32 8, %352
  %354 = add i32 %353, 4
  %355 = zext i32 %354 to i64
  %356 = getelementptr inbounds i8, ptr %81, i64 %355
  %357 = load i8, ptr %356, align 1, !tbaa !13
  %358 = zext i8 %357 to i32
  %359 = ashr i32 %358, 4
  %360 = and i32 %359, 8
  %361 = load i32, ptr %20, align 4, !tbaa !5
  %362 = zext i32 %361 to i64
  %363 = getelementptr inbounds i8, ptr %84, i64 %362
  %364 = load i8, ptr %363, align 1, !tbaa !13
  %365 = zext i8 %364 to i32
  %366 = or i32 %365, %360
  %367 = trunc i32 %366 to i8
  store i8 %367, ptr %363, align 1, !tbaa !13
  %368 = load i32, ptr %20, align 4, !tbaa !5
  %369 = mul i32 8, %368
  %370 = add i32 %369, 5
  %371 = zext i32 %370 to i64
  %372 = getelementptr inbounds i8, ptr %81, i64 %371
  %373 = load i8, ptr %372, align 1, !tbaa !13
  %374 = zext i8 %373 to i32
  %375 = ashr i32 %374, 5
  %376 = and i32 %375, 4
  %377 = load i32, ptr %20, align 4, !tbaa !5
  %378 = zext i32 %377 to i64
  %379 = getelementptr inbounds i8, ptr %84, i64 %378
  %380 = load i8, ptr %379, align 1, !tbaa !13
  %381 = zext i8 %380 to i32
  %382 = or i32 %381, %376
  %383 = trunc i32 %382 to i8
  store i8 %383, ptr %379, align 1, !tbaa !13
  %384 = load i32, ptr %20, align 4, !tbaa !5
  %385 = mul i32 8, %384
  %386 = add i32 %385, 6
  %387 = zext i32 %386 to i64
  %388 = getelementptr inbounds i8, ptr %81, i64 %387
  %389 = load i8, ptr %388, align 1, !tbaa !13
  %390 = zext i8 %389 to i32
  %391 = ashr i32 %390, 6
  %392 = and i32 %391, 2
  %393 = load i32, ptr %20, align 4, !tbaa !5
  %394 = zext i32 %393 to i64
  %395 = getelementptr inbounds i8, ptr %84, i64 %394
  %396 = load i8, ptr %395, align 1, !tbaa !13
  %397 = zext i8 %396 to i32
  %398 = or i32 %397, %392
  %399 = trunc i32 %398 to i8
  store i8 %399, ptr %395, align 1, !tbaa !13
  %400 = load i32, ptr %20, align 4, !tbaa !5
  %401 = mul i32 8, %400
  %402 = add i32 %401, 7
  %403 = zext i32 %402 to i64
  %404 = getelementptr inbounds i8, ptr %81, i64 %403
  %405 = load i8, ptr %404, align 1, !tbaa !13
  %406 = zext i8 %405 to i32
  %407 = ashr i32 %406, 7
  %408 = and i32 %407, 1
  %409 = load i32, ptr %20, align 4, !tbaa !5
  %410 = zext i32 %409 to i64
  %411 = getelementptr inbounds i8, ptr %84, i64 %410
  %412 = load i8, ptr %411, align 1, !tbaa !13
  %413 = zext i8 %412 to i32
  %414 = or i32 %413, %408
  %415 = trunc i32 %414 to i8
  store i8 %415, ptr %411, align 1, !tbaa !13
  br label %416

416:                                              ; preds = %284
  %417 = load i32, ptr %20, align 4, !tbaa !5
  %418 = add i32 %417, 1
  store i32 %418, ptr %20, align 4, !tbaa !5
  br label %280, !llvm.loop !17

419:                                              ; preds = %280
  %420 = load ptr, ptr %19, align 8, !tbaa !9
  %421 = load i32, ptr %6, align 4, !tbaa !5
  %422 = call i32 @fec_decode_soft(ptr noundef %420, i32 noundef %421, ptr noundef %81, ptr noundef %87)
  %423 = load i32, ptr %6, align 4, !tbaa !5
  %424 = call i32 (ptr, ...) @printf(ptr noundef @.str.9, i32 noundef %423)
  store i32 0, ptr %20, align 4, !tbaa !5
  br label %425

425:                                              ; preds = %436, %419
  %426 = load i32, ptr %20, align 4, !tbaa !5
  %427 = load i32, ptr %6, align 4, !tbaa !5
  %428 = icmp ult i32 %426, %427
  br i1 %428, label %429, label %439

429:                                              ; preds = %425
  %430 = load i32, ptr %20, align 4, !tbaa !5
  %431 = zext i32 %430 to i64
  %432 = getelementptr inbounds i8, ptr %74, i64 %431
  %433 = load i8, ptr %432, align 1, !tbaa !13
  %434 = zext i8 %433 to i32
  %435 = call i32 (ptr, ...) @printf(ptr noundef @.str.10, i32 noundef %434)
  br label %436

436:                                              ; preds = %429
  %437 = load i32, ptr %20, align 4, !tbaa !5
  %438 = add i32 %437, 1
  store i32 %438, ptr %20, align 4, !tbaa !5
  br label %425, !llvm.loop !18

439:                                              ; preds = %425
  %440 = call i32 (ptr, ...) @printf(ptr noundef @.str.11)
  %441 = load i32, ptr %12, align 4, !tbaa !5
  %442 = call i32 (ptr, ...) @printf(ptr noundef @.str.12, i32 noundef %441)
  store i32 0, ptr %20, align 4, !tbaa !5
  br label %443

443:                                              ; preds = %454, %439
  %444 = load i32, ptr %20, align 4, !tbaa !5
  %445 = load i32, ptr %12, align 4, !tbaa !5
  %446 = icmp ult i32 %444, %445
  br i1 %446, label %447, label %457

447:                                              ; preds = %443
  %448 = load i32, ptr %20, align 4, !tbaa !5
  %449 = zext i32 %448 to i64
  %450 = getelementptr inbounds i8, ptr %77, i64 %449
  %451 = load i8, ptr %450, align 1, !tbaa !13
  %452 = zext i8 %451 to i32
  %453 = call i32 (ptr, ...) @printf(ptr noundef @.str.10, i32 noundef %452)
  br label %454

454:                                              ; preds = %447
  %455 = load i32, ptr %20, align 4, !tbaa !5
  %456 = add i32 %455, 1
  store i32 %456, ptr %20, align 4, !tbaa !5
  br label %443, !llvm.loop !19

457:                                              ; preds = %443
  %458 = call i32 (ptr, ...) @printf(ptr noundef @.str.11)
  %459 = load i32, ptr %12, align 4, !tbaa !5
  %460 = call i32 (ptr, ...) @printf(ptr noundef @.str.13, i32 noundef %459)
  store i32 0, ptr %20, align 4, !tbaa !5
  br label %461

461:                                              ; preds = %485, %457
  %462 = load i32, ptr %20, align 4, !tbaa !5
  %463 = load i32, ptr %12, align 4, !tbaa !5
  %464 = icmp ult i32 %462, %463
  br i1 %464, label %465, label %488

465:                                              ; preds = %461
  %466 = load i32, ptr %20, align 4, !tbaa !5
  %467 = zext i32 %466 to i64
  %468 = getelementptr inbounds i8, ptr %84, i64 %467
  %469 = load i8, ptr %468, align 1, !tbaa !13
  %470 = zext i8 %469 to i32
  %471 = load i32, ptr %20, align 4, !tbaa !5
  %472 = zext i32 %471 to i64
  %473 = getelementptr inbounds i8, ptr %77, i64 %472
  %474 = load i8, ptr %473, align 1, !tbaa !13
  %475 = zext i8 %474 to i32
  %476 = icmp eq i32 %470, %475
  %477 = zext i1 %476 to i64
  %478 = select i1 %476, i32 32, i32 42
  %479 = load i32, ptr %20, align 4, !tbaa !5
  %480 = zext i32 %479 to i64
  %481 = getelementptr inbounds i8, ptr %84, i64 %480
  %482 = load i8, ptr %481, align 1, !tbaa !13
  %483 = zext i8 %482 to i32
  %484 = call i32 (ptr, ...) @printf(ptr noundef @.str.14, i32 noundef %478, i32 noundef %483)
  br label %485

485:                                              ; preds = %465
  %486 = load i32, ptr %20, align 4, !tbaa !5
  %487 = add i32 %486, 1
  store i32 %487, ptr %20, align 4, !tbaa !5
  br label %461, !llvm.loop !20

488:                                              ; preds = %461
  %489 = call i32 (ptr, ...) @printf(ptr noundef @.str.11)
  %490 = load i32, ptr %9, align 4, !tbaa !5
  %491 = icmp ne i32 %490, 0
  br i1 %491, label %492, label %566

492:                                              ; preds = %488
  store i32 0, ptr %20, align 4, !tbaa !5
  br label %493

493:                                              ; preds = %562, %492
  %494 = load i32, ptr %20, align 4, !tbaa !5
  %495 = load i32, ptr %12, align 4, !tbaa !5
  %496 = icmp ult i32 %494, %495
  br i1 %496, label %497, label %565

497:                                              ; preds = %493
  %498 = load i32, ptr %20, align 4, !tbaa !5
  %499 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, i32 noundef %498)
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #8
  store i32 0, ptr %22, align 4, !tbaa !5
  br label %500

500:                                              ; preds = %539, %497
  %501 = load i32, ptr %22, align 4, !tbaa !5
  %502 = icmp ult i32 %501, 8
  br i1 %502, label %503, label %542

503:                                              ; preds = %500
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #8
  %504 = load i32, ptr %20, align 4, !tbaa !5
  %505 = zext i32 %504 to i64
  %506 = getelementptr inbounds i8, ptr %77, i64 %505
  %507 = load i8, ptr %506, align 1, !tbaa !13
  %508 = zext i8 %507 to i32
  %509 = load i32, ptr %22, align 4, !tbaa !5
  %510 = sub i32 8, %509
  %511 = sub i32 %510, 1
  %512 = ashr i32 %508, %511
  %513 = and i32 %512, 1
  store i32 %513, ptr %23, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #8
  %514 = load i32, ptr %20, align 4, !tbaa !5
  %515 = mul i32 8, %514
  %516 = load i32, ptr %22, align 4, !tbaa !5
  %517 = add i32 %515, %516
  %518 = zext i32 %517 to i64
  %519 = getelementptr inbounds i8, ptr %81, i64 %518
  %520 = load i8, ptr %519, align 1, !tbaa !13
  %521 = zext i8 %520 to i32
  %522 = icmp sgt i32 %521, 127
  %523 = zext i1 %522 to i64
  %524 = select i1 %522, i32 1, i32 0
  store i32 %524, ptr %24, align 4, !tbaa !5
  %525 = load i32, ptr %20, align 4, !tbaa !5
  %526 = mul i32 8, %525
  %527 = load i32, ptr %22, align 4, !tbaa !5
  %528 = add i32 %526, %527
  %529 = zext i32 %528 to i64
  %530 = getelementptr inbounds i8, ptr %81, i64 %529
  %531 = load i8, ptr %530, align 1, !tbaa !13
  %532 = zext i8 %531 to i32
  %533 = load i32, ptr %23, align 4, !tbaa !5
  %534 = load i32, ptr %24, align 4, !tbaa !5
  %535 = icmp ne i32 %533, %534
  %536 = zext i1 %535 to i64
  %537 = select i1 %535, i32 42, i32 32
  %538 = call i32 (ptr, ...) @printf(ptr noundef @.str.16, i32 noundef %532, i32 noundef %537)
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #8
  br label %539

539:                                              ; preds = %503
  %540 = load i32, ptr %22, align 4, !tbaa !5
  %541 = add i32 %540, 1
  store i32 %541, ptr %22, align 4, !tbaa !5
  br label %500, !llvm.loop !21

542:                                              ; preds = %500
  %543 = load i32, ptr %20, align 4, !tbaa !5
  %544 = zext i32 %543 to i64
  %545 = getelementptr inbounds i8, ptr %84, i64 %544
  %546 = load i8, ptr %545, align 1, !tbaa !13
  %547 = zext i8 %546 to i32
  %548 = load i32, ptr %20, align 4, !tbaa !5
  %549 = zext i32 %548 to i64
  %550 = getelementptr inbounds i8, ptr %77, i64 %549
  %551 = load i8, ptr %550, align 1, !tbaa !13
  %552 = zext i8 %551 to i32
  %553 = icmp eq i32 %547, %552
  %554 = zext i1 %553 to i64
  %555 = select i1 %553, i32 32, i32 42
  %556 = load i32, ptr %20, align 4, !tbaa !5
  %557 = zext i32 %556 to i64
  %558 = getelementptr inbounds i8, ptr %84, i64 %557
  %559 = load i8, ptr %558, align 1, !tbaa !13
  %560 = zext i8 %559 to i32
  %561 = call i32 (ptr, ...) @printf(ptr noundef @.str.17, i32 noundef %555, i32 noundef %560)
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #8
  br label %562

562:                                              ; preds = %542
  %563 = load i32, ptr %20, align 4, !tbaa !5
  %564 = add i32 %563, 1
  store i32 %564, ptr %20, align 4, !tbaa !5
  br label %493, !llvm.loop !22

565:                                              ; preds = %493
  br label %566

566:                                              ; preds = %565, %488
  %567 = load i32, ptr %6, align 4, !tbaa !5
  %568 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, i32 noundef %567)
  store i32 0, ptr %20, align 4, !tbaa !5
  br label %569

569:                                              ; preds = %593, %566
  %570 = load i32, ptr %20, align 4, !tbaa !5
  %571 = load i32, ptr %6, align 4, !tbaa !5
  %572 = icmp ult i32 %570, %571
  br i1 %572, label %573, label %596

573:                                              ; preds = %569
  %574 = load i32, ptr %20, align 4, !tbaa !5
  %575 = zext i32 %574 to i64
  %576 = getelementptr inbounds i8, ptr %87, i64 %575
  %577 = load i8, ptr %576, align 1, !tbaa !13
  %578 = zext i8 %577 to i32
  %579 = load i32, ptr %20, align 4, !tbaa !5
  %580 = zext i32 %579 to i64
  %581 = getelementptr inbounds i8, ptr %74, i64 %580
  %582 = load i8, ptr %581, align 1, !tbaa !13
  %583 = zext i8 %582 to i32
  %584 = icmp eq i32 %578, %583
  %585 = zext i1 %584 to i64
  %586 = select i1 %584, i32 32, i32 42
  %587 = load i32, ptr %20, align 4, !tbaa !5
  %588 = zext i32 %587 to i64
  %589 = getelementptr inbounds i8, ptr %87, i64 %588
  %590 = load i8, ptr %589, align 1, !tbaa !13
  %591 = zext i8 %590 to i32
  %592 = call i32 (ptr, ...) @printf(ptr noundef @.str.14, i32 noundef %586, i32 noundef %591)
  br label %593

593:                                              ; preds = %573
  %594 = load i32, ptr %20, align 4, !tbaa !5
  %595 = add i32 %594, 1
  store i32 %595, ptr %20, align 4, !tbaa !5
  br label %569, !llvm.loop !23

596:                                              ; preds = %569
  %597 = call i32 (ptr, ...) @printf(ptr noundef @.str.11)
  %598 = call i32 (ptr, ...) @printf(ptr noundef @.str.11)
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #8
  store i32 0, ptr %26, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #8
  store i32 0, ptr %27, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %28) #8
  store i32 0, ptr %20, align 4, !tbaa !5
  br label %599

599:                                              ; preds = %648, %596
  %600 = load i32, ptr %20, align 4, !tbaa !5
  %601 = load i32, ptr %6, align 4, !tbaa !5
  %602 = icmp ult i32 %600, %601
  br i1 %602, label %603, label %651

603:                                              ; preds = %599
  %604 = load i32, ptr %20, align 4, !tbaa !5
  %605 = zext i32 %604 to i64
  %606 = getelementptr inbounds i8, ptr %74, i64 %605
  %607 = load i8, ptr %606, align 1, !tbaa !13
  %608 = zext i8 %607 to i32
  %609 = load i32, ptr %20, align 4, !tbaa !5
  %610 = zext i32 %609 to i64
  %611 = getelementptr inbounds i8, ptr %87, i64 %610
  %612 = load i8, ptr %611, align 1, !tbaa !13
  %613 = zext i8 %612 to i32
  %614 = icmp eq i32 %608, %613
  %615 = zext i1 %614 to i64
  %616 = select i1 %614, i32 0, i32 1
  %617 = load i32, ptr %26, align 4, !tbaa !5
  %618 = add i32 %617, %616
  store i32 %618, ptr %26, align 4, !tbaa !5
  %619 = load i32, ptr %20, align 4, !tbaa !5
  %620 = zext i32 %619 to i64
  %621 = getelementptr inbounds i8, ptr %74, i64 %620
  %622 = load i8, ptr %621, align 1, !tbaa !13
  %623 = zext i8 %622 to i32
  %624 = load i32, ptr %20, align 4, !tbaa !5
  %625 = zext i32 %624 to i64
  %626 = getelementptr inbounds i8, ptr %87, i64 %625
  %627 = load i8, ptr %626, align 1, !tbaa !13
  %628 = zext i8 %627 to i32
  %629 = xor i32 %623, %628
  %630 = trunc i32 %629 to i8
  store i8 %630, ptr %28, align 1, !tbaa !13
  store i32 0, ptr %25, align 4, !tbaa !5
  br label %631

631:                                              ; preds = %644, %603
  %632 = load i32, ptr %25, align 4, !tbaa !5
  %633 = icmp ult i32 %632, 8
  br i1 %633, label %634, label %647

634:                                              ; preds = %631
  %635 = load i8, ptr %28, align 1, !tbaa !13
  %636 = zext i8 %635 to i32
  %637 = and i32 %636, 1
  %638 = load i32, ptr %27, align 4, !tbaa !5
  %639 = add i32 %638, %637
  store i32 %639, ptr %27, align 4, !tbaa !5
  %640 = load i8, ptr %28, align 1, !tbaa !13
  %641 = zext i8 %640 to i32
  %642 = ashr i32 %641, 1
  %643 = trunc i32 %642 to i8
  store i8 %643, ptr %28, align 1, !tbaa !13
  br label %644

644:                                              ; preds = %634
  %645 = load i32, ptr %25, align 4, !tbaa !5
  %646 = add i32 %645, 1
  store i32 %646, ptr %25, align 4, !tbaa !5
  br label %631, !llvm.loop !24

647:                                              ; preds = %631
  br label %648

648:                                              ; preds = %647
  %649 = load i32, ptr %20, align 4, !tbaa !5
  %650 = add i32 %649, 1
  store i32 %650, ptr %20, align 4, !tbaa !5
  br label %599, !llvm.loop !25

651:                                              ; preds = %599
  %652 = load i32, ptr %26, align 4, !tbaa !5
  %653 = load i32, ptr %6, align 4, !tbaa !5
  %654 = call i32 (ptr, ...) @printf(ptr noundef @.str.19, i32 noundef %652, i32 noundef %653)
  %655 = load i32, ptr %27, align 4, !tbaa !5
  %656 = load i32, ptr %6, align 4, !tbaa !5
  %657 = mul i32 %656, 8
  %658 = call i32 (ptr, ...) @printf(ptr noundef @.str.20, i32 noundef %655, i32 noundef %657)
  %659 = load ptr, ptr %19, align 8, !tbaa !9
  %660 = call i32 @fec_destroy(ptr noundef %659)
  store i32 0, ptr %3, align 4
  store i32 1, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %28) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #8
  %661 = load ptr, ptr %13, align 8
  call void @llvm.stackrestore.p0(ptr %661)
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #8
  br label %662

662:                                              ; preds = %651, %36
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #8
  %663 = load i32, ptr %3, align 4
  ret i32 %663
}

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

; Function Attrs: nounwind
declare i32 @getopt(i32 noundef, ptr noundef, ptr noundef) #3

; Function Attrs: inlinehint nounwind willreturn memory(read) uwtable
declare i32 @atoi(ptr noundef nonnull) #4

declare i32 @liquid_getopt_str2fec(ptr noundef) #1

; Function Attrs: nounwind
declare i32 @fprintf(ptr noundef, ptr noundef, ...) #3

; Function Attrs: noreturn nounwind
declare void @exit(i32 noundef) #5

declare i32 @fec_get_enc_msg_length(i32 noundef, i32 noundef) #1

; Function Attrs: nocallback nofree nosync nounwind willreturn
declare ptr @llvm.stacksave.p0() #6

declare ptr @fec_create(i32 noundef, ptr noundef) #1

declare i32 @fec_print(ptr noundef) #1

; Function Attrs: nounwind
declare i32 @rand() #3

declare i32 @fec_encode(ptr noundef, i32 noundef, ptr noundef, ptr noundef) #1

declare float @randnf(...) #1

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare double @llvm.fmuladd.f64(double, double, double) #7

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

declare i32 @fec_decode_soft(ptr noundef, i32 noundef, ptr noundef, ptr noundef) #1

declare i32 @fec_destroy(ptr noundef) #1

; Function Attrs: nocallback nofree nosync nounwind willreturn
declare void @llvm.stackrestore.p0(ptr) #6

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 = { "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(argmem: readwrite) }
attributes #3 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { inlinehint nounwind willreturn memory(read) 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 #5 = { noreturn nounwind "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 #6 = { nocallback nofree nosync nounwind willreturn }
attributes #7 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #8 = { nounwind }
attributes #9 = { nounwind willreturn memory(read) }
attributes #10 = { noreturn 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 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"any pointer", !7, i64 0}
!11 = distinct !{!11, !12}
!12 = !{!"llvm.loop.mustprogress"}
!13 = !{!7, !7, i64 0}
!14 = distinct !{!14, !12}
!15 = distinct !{!15, !12}
!16 = distinct !{!16, !12}
!17 = distinct !{!17, !12}
!18 = distinct !{!18, !12}
!19 = distinct !{!19, !12}
!20 = distinct !{!20, !12}
!21 = distinct !{!21, !12}
!22 = distinct !{!22, !12}
!23 = distinct !{!23, !12}
!24 = distinct !{!24, !12}
!25 = distinct !{!25, !12}


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

@.str.5 = external hidden unnamed_addr constant [9 x i8], align 1
@optarg = external local_unnamed_addr global ptr, align 8
@stderr = external local_unnamed_addr global ptr, align 8
@.str.6 = external hidden unnamed_addr constant [45 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [45 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [45 x i8], align 1

; Function Attrs: nounwind uwtable
declare dso_local void @usage() local_unnamed_addr #0

; Function Attrs: nofree nounwind
declare noundef i32 @printf(ptr nocapture noundef readonly, ...) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
define dso_local noundef i32 @main(i32 noundef %0, ptr noundef %1) local_unnamed_addr #0 {
  br label %.outer

.outer:                                           ; preds = %.outer.backedge, %2
  %.0147.ph = phi i32 [ 1, %2 ], [ %.0147.ph.be, %.outer.backedge ]
  %.0143.ph = phi i32 [ 4, %2 ], [ %.0143.ph400, %.outer.backedge ]
  %.0140.ph = phi i32 [ 4, %2 ], [ %.0140, %.outer.backedge ]
  br label %.outer399

.outer399:                                        ; preds = %.outer, %10
  %.0143.ph400 = phi i32 [ %.0143.ph, %.outer ], [ %12, %10 ]
  %.0140.ph401 = phi i32 [ %.0140.ph, %.outer ], [ %.0140, %10 ]
  br label %3

3:                                                ; preds = %.outer399, %7
  %.0140 = phi i32 [ %9, %7 ], [ %.0140.ph401, %.outer399 ]
  %4 = tail call i32 @getopt(i32 noundef %0, ptr noundef %1, ptr noundef nonnull @.str.5) #9
  switch i32 %4, label %18 [
    i32 -1, label %19
    i32 104, label %5
    i32 117, label %5
    i32 118, label %.outer.backedge
    i32 113, label %6
    i32 110, label %7
    i32 99, label %10
  ], !llvm.loop !5

5:                                                ; preds = %3, %3
  tail call void @usage()
  br label %486

6:                                                ; preds = %3
  br label %.outer.backedge

.outer.backedge:                                  ; preds = %3, %6
  %.0147.ph.be = phi i32 [ 0, %6 ], [ 1, %3 ]
  br label %.outer, !llvm.loop !5

7:                                                ; preds = %3
  %8 = load ptr, ptr @optarg, align 8, !tbaa !7
  %9 = tail call i32 @atoi(ptr nocapture noundef %8) #10
  br label %3, !llvm.loop !5

10:                                               ; preds = %3
  %11 = load ptr, ptr @optarg, align 8, !tbaa !7
  %12 = tail call i32 @liquid_getopt_str2fec(ptr noundef %11) #9
  %13 = icmp eq i32 %12, 0
  br i1 %13, label %14, label %.outer399, !llvm.loop !5

14:                                               ; preds = %10
  %15 = load ptr, ptr @stderr, align 8, !tbaa !7
  %16 = load ptr, ptr @optarg, align 8, !tbaa !7
  %17 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %15, ptr noundef nonnull @.str.6, ptr noundef %16) #11
  tail call void @exit(i32 noundef 1) #12
  unreachable

18:                                               ; preds = %3
  tail call void @exit(i32 noundef 1) #12
  unreachable

19:                                               ; preds = %3
  %20 = tail call i32 @llvm.umin.i32(i32 %.0140, i32 2048)
  %21 = tail call i32 @fec_get_enc_msg_length(i32 noundef %.0143.ph400, i32 noundef %20) #9
  %22 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.7, i32 noundef %20)
  %23 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.8, i32 noundef %21)
  %24 = zext nneg i32 %20 to i64
  %25 = tail call ptr @llvm.stacksave.p0()
  %26 = alloca i8, i64 %24, align 16
  %27 = zext i32 %21 to i64
  %28 = alloca i8, i64 %27, align 16
  %29 = shl i32 %21, 3
  %30 = zext i32 %29 to i64
  %31 = alloca i8, i64 %30, align 16
  %32 = alloca i8, i64 %27, align 16
  %33 = alloca i8, i64 %24, align 16
  %34 = tail call ptr @fec_create(i32 noundef %.0143.ph400, ptr noundef null) #9
  %35 = tail call i32 @fec_print(ptr noundef %34) #9
  %.not = icmp eq i32 %.0140, 0
  br i1 %.not, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %19, %.lr.ph
  %indvars.iv = phi i64 [ %indvars.iv.next, %.lr.ph ], [ 0, %19 ]
  %36 = tail call i32 @rand() #9
  %37 = trunc i32 %36 to i8
  %38 = getelementptr inbounds i8, ptr %26, i64 %indvars.iv
  store i8 %37, ptr %38, align 1, !tbaa !11
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %24
  br i1 %exitcond.not, label %._crit_edge, label %.lr.ph, !llvm.loop !12

._crit_edge:                                      ; preds = %.lr.ph, %19
  %39 = call i32 @fec_encode(ptr noundef %34, i32 noundef %20, ptr noundef nonnull %26, ptr noundef nonnull %28) #9
  %.not220 = icmp eq i32 %21, 0
  br i1 %.not220, label %._crit_edge190, label %.lr.ph183.preheader

.lr.ph183.preheader:                              ; preds = %._crit_edge
  %min.iters.check = icmp ult i32 %21, 144
  br i1 %min.iters.check, label %.lr.ph183.preheader398, label %vector.scevcheck

vector.scevcheck:                                 ; preds = %.lr.ph183.preheader
  %40 = add nsw i64 %27, -1
  %41 = icmp ugt i64 %40, 4294967295
  %42 = insertelement <4 x ptr> poison, ptr %31, i64 0
  %43 = shufflevector <4 x ptr> %42, <4 x ptr> poison, <4 x i32> zeroinitializer
  %44 = getelementptr i8, <4 x ptr> %43, <4 x i64> <i64 6, i64 7, i64 5, i64 4>
  %mul.result = shl nsw i64 %40, 3
  %scevgep = getelementptr i8, ptr %31, i64 6
  %45 = getelementptr i8, ptr %scevgep, i64 %mul.result
  %mul.result312 = shl nsw i64 %40, 3
  %scevgep310 = getelementptr i8, ptr %31, i64 7
  %46 = getelementptr i8, ptr %scevgep310, i64 %mul.result312
  %mul.result316 = shl nsw i64 %40, 3
  %scevgep314 = getelementptr i8, ptr %31, i64 5
  %47 = getelementptr i8, ptr %scevgep314, i64 %mul.result316
  %mul.result320 = shl nsw i64 %40, 3
  %scevgep318 = getelementptr i8, ptr %31, i64 4
  %48 = getelementptr i8, ptr %scevgep318, i64 %mul.result320
  %49 = insertelement <2 x ptr> poison, ptr %31, i64 0
  %50 = shufflevector <2 x ptr> %49, <2 x ptr> poison, <2 x i32> zeroinitializer
  %51 = getelementptr i8, <2 x ptr> %50, <2 x i64> <i64 3, i64 2>
  %mul.result324 = shl nsw i64 %40, 3
  %scevgep322 = getelementptr i8, ptr %31, i64 3
  %52 = getelementptr i8, ptr %scevgep322, i64 %mul.result324
  %mul.result328 = shl nsw i64 %40, 3
  %scevgep326 = getelementptr i8, ptr %31, i64 2
  %53 = getelementptr i8, ptr %scevgep326, i64 %mul.result328
  %scevgep330 = getelementptr i8, ptr %31, i64 1
  %mul.result332 = shl nsw i64 %40, 3
  %54 = getelementptr i8, ptr %scevgep330, i64 %mul.result332
  %mul.result335 = shl nsw i64 %40, 3
  %55 = getelementptr i8, ptr %31, i64 %mul.result335
  %56 = insertelement <8 x ptr> poison, ptr %45, i64 0
  %57 = insertelement <8 x ptr> %56, ptr %46, i64 1
  %58 = insertelement <8 x ptr> %57, ptr %47, i64 2
  %59 = insertelement <8 x ptr> %58, ptr %48, i64 3
  %60 = insertelement <8 x ptr> %59, ptr %52, i64 4
  %61 = insertelement <8 x ptr> %60, ptr %53, i64 5
  %62 = insertelement <8 x ptr> %61, ptr %54, i64 6
  %63 = insertelement <8 x ptr> %62, ptr %55, i64 7
  %64 = shufflevector <4 x ptr> %44, <4 x ptr> poison, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison>
  %65 = insertelement <8 x ptr> %64, ptr %31, i64 7
  %66 = shufflevector <2 x ptr> %51, <2 x ptr> poison, <8 x i32> <i32 0, i32 1, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>
  %67 = shufflevector <8 x ptr> %65, <8 x ptr> %66, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 8, i32 9, i32 poison, i32 7>
  %68 = insertelement <8 x ptr> %67, ptr %scevgep330, i64 6
  %69 = icmp ult <8 x ptr> %63, %68
  %70 = bitcast <8 x i1> %69 to i8
  %71 = icmp ne i8 %70, 0
  %op.rdx = or i1 %71, %41
  br i1 %op.rdx, label %.lr.ph183.preheader398, label %vector.ph

vector.ph:                                        ; preds = %vector.scevcheck
  %n.vec = and i64 %27, 4294967280
  %invariant.gep = getelementptr i8, ptr %31, i64 -7
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %72 = getelementptr inbounds i8, ptr %28, i64 %index
  %wide.load = load <16 x i8>, ptr %72, align 16, !tbaa !11
  %73 = ashr <16 x i8> %wide.load, <i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7>
  %74 = shl i64 %index, 3
  %75 = shl <16 x i8> %wide.load, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
  %76 = ashr <16 x i8> %75, <i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7>
  %77 = shl <16 x i8> %wide.load, <i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2>
  %78 = ashr <16 x i8> %77, <i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7>
  %79 = shl <16 x i8> %wide.load, <i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3>
  %80 = ashr <16 x i8> %79, <i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7>
  %81 = shl <16 x i8> %wide.load, <i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4>
  %82 = ashr <16 x i8> %81, <i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7>
  %83 = shl <16 x i8> %wide.load, <i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5>
  %84 = ashr <16 x i8> %83, <i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7>
  %85 = shl <16 x i8> %wide.load, <i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6>
  %86 = ashr <16 x i8> %85, <i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7>
  %87 = and <16 x i8> %wide.load, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
  %88 = sub nsw <16 x i8> zeroinitializer, %87
  %89 = and i64 %74, 4294967168
  %90 = or disjoint i64 %89, 7
  %gep = getelementptr i8, ptr %invariant.gep, i64 %90
  %91 = shufflevector <16 x i8> %73, <16 x i8> %76, <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31>
  %92 = shufflevector <16 x i8> %78, <16 x i8> %80, <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31>
  %93 = shufflevector <16 x i8> %82, <16 x i8> %84, <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31>
  %94 = shufflevector <16 x i8> %86, <16 x i8> %88, <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31>
  %95 = shufflevector <32 x i8> %91, <32 x i8> %92, <64 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31, i32 32, i32 33, i32 34, i32 35, i32 36, i32 37, i32 38, i32 39, i32 40, i32 41, i32 42, i32 43, i32 44, i32 45, i32 46, i32 47, i32 48, i32 49, i32 50, i32 51, i32 52, i32 53, i32 54, i32 55, i32 56, i32 57, i32 58, i32 59, i32 60, i32 61, i32 62, i32 63>
  %96 = shufflevector <32 x i8> %93, <32 x i8> %94, <64 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31, i32 32, i32 33, i32 34, i32 35, i32 36, i32 37, i32 38, i32 39, i32 40, i32 41, i32 42, i32 43, i32 44, i32 45, i32 46, i32 47, i32 48, i32 49, i32 50, i32 51, i32 52, i32 53, i32 54, i32 55, i32 56, i32 57, i32 58, i32 59, i32 60, i32 61, i32 62, i32 63>
  %interleaved.vec = shufflevector <64 x i8> %95, <64 x i8> %96, <128 x i32> <i32 0, i32 16, i32 32, i32 48, i32 64, i32 80, i32 96, i32 112, i32 1, i32 17, i32 33, i32 49, i32 65, i32 81, i32 97, i32 113, i32 2, i32 18, i32 34, i32 50, i32 66, i32 82, i32 98, i32 114, i32 3, i32 19, i32 35, i32 51, i32 67, i32 83, i32 99, i32 115, i32 4, i32 20, i32 36, i32 52, i32 68, i32 84, i32 100, i32 116, i32 5, i32 21, i32 37, i32 53, i32 69, i32 85, i32 101, i32 117, i32 6, i32 22, i32 38, i32 54, i32 70, i32 86, i32 102, i32 118, i32 7, i32 23, i32 39, i32 55, i32 71, i32 87, i32 103, i32 119, i32 8, i32 24, i32 40, i32 56, i32 72, i32 88, i32 104, i32 120, i32 9, i32 25, i32 41, i32 57, i32 73, i32 89, i32 105, i32 121, i32 10, i32 26, i32 42, i32 58, i32 74, i32 90, i32 106, i32 122, i32 11, i32 27, i32 43, i32 59, i32 75, i32 91, i32 107, i32 123, i32 12, i32 28, i32 44, i32 60, i32 76, i32 92, i32 108, i32 124, i32 13, i32 29, i32 45, i32 61, i32 77, i32 93, i32 109, i32 125, i32 14, i32 30, i32 46, i32 62, i32 78, i32 94, i32 110, i32 126, i32 15, i32 31, i32 47, i32 63, i32 79, i32 95, i32 111, i32 127>
  store <128 x i8> %interleaved.vec, ptr %gep, align 16, !tbaa !11
  %index.next = add nuw i64 %index, 16
  %97 = icmp eq i64 %index.next, %n.vec
  br i1 %97, label %middle.block, label %vector.body, !llvm.loop !13

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %n.vec, %27
  br i1 %cmp.n, label %._crit_edge184, label %.lr.ph183.preheader398

.lr.ph183.preheader398:                           ; preds = %middle.block, %vector.scevcheck, %.lr.ph183.preheader
  %indvars.iv239.ph = phi i64 [ 0, %vector.scevcheck ], [ 0, %.lr.ph183.preheader ], [ %n.vec, %middle.block ]
  br label %.lr.ph183

.lr.ph183:                                        ; preds = %.lr.ph183.preheader398, %.lr.ph183
  %indvars.iv239 = phi i64 [ %indvars.iv.next240, %.lr.ph183 ], [ %indvars.iv239.ph, %.lr.ph183.preheader398 ]
  %98 = getelementptr inbounds i8, ptr %28, i64 %indvars.iv239
  %99 = load i8, ptr %98, align 1, !tbaa !11
  %.lobit156 = ashr i8 %99, 7
  %100 = trunc nuw i64 %indvars.iv239 to i32
  %101 = shl i32 %100, 3
  %102 = zext i32 %101 to i64
  %103 = getelementptr inbounds i8, ptr %31, i64 %102
  store i8 %.lobit156, ptr %103, align 8, !tbaa !11
  %104 = shl i8 %99, 1
  %sext = ashr i8 %104, 7
  %105 = or disjoint i32 %101, 1
  %106 = zext i32 %105 to i64
  %107 = getelementptr inbounds i8, ptr %31, i64 %106
  store i8 %sext, ptr %107, align 1, !tbaa !11
  %108 = shl i8 %99, 2
  %sext159 = ashr i8 %108, 7
  %109 = or disjoint i32 %101, 2
  %110 = zext i32 %109 to i64
  %111 = getelementptr inbounds i8, ptr %31, i64 %110
  store i8 %sext159, ptr %111, align 2, !tbaa !11
  %112 = shl i8 %99, 3
  %sext161 = ashr i8 %112, 7
  %113 = or disjoint i32 %101, 3
  %114 = zext i32 %113 to i64
  %115 = getelementptr inbounds i8, ptr %31, i64 %114
  store i8 %sext161, ptr %115, align 1, !tbaa !11
  %116 = shl i8 %99, 4
  %sext163 = ashr i8 %116, 7
  %117 = or disjoint i32 %101, 4
  %118 = zext i32 %117 to i64
  %119 = getelementptr inbounds i8, ptr %31, i64 %118
  store i8 %sext163, ptr %119, align 4, !tbaa !11
  %120 = shl i8 %99, 5
  %sext165 = ashr i8 %120, 7
  %121 = or disjoint i32 %101, 5
  %122 = zext i32 %121 to i64
  %123 = getelementptr inbounds i8, ptr %31, i64 %122
  store i8 %sext165, ptr %123, align 1, !tbaa !11
  %124 = shl i8 %99, 6
  %sext167 = ashr i8 %124, 7
  %125 = or disjoint i32 %101, 6
  %126 = zext i32 %125 to i64
  %127 = getelementptr inbounds i8, ptr %31, i64 %126
  store i8 %sext167, ptr %127, align 2, !tbaa !11
  %128 = and i8 %99, 1
  %sext169 = sub nsw i8 0, %128
  %129 = or disjoint i32 %101, 7
  %130 = zext i32 %129 to i64
  %131 = getelementptr inbounds i8, ptr %31, i64 %130
  store i8 %sext169, ptr %131, align 1, !tbaa !11
  %indvars.iv.next240 = add nuw nsw i64 %indvars.iv239, 1
  %exitcond243.not = icmp eq i64 %indvars.iv.next240, %27
  br i1 %exitcond243.not, label %._crit_edge184, label %.lr.ph183, !llvm.loop !16

._crit_edge184:                                   ; preds = %.lr.ph183, %middle.block
  %.pre = load i8, ptr %31, align 16, !tbaa !11
  %132 = xor i8 %.pre, -1
  store i8 %132, ptr %31, align 16, !tbaa !11
  %.not221 = icmp eq i32 %29, 0
  br i1 %.not221, label %.preheader170, label %.lr.ph187

.preheader170:                                    ; preds = %.lr.ph187, %._crit_edge184
  br i1 %.not220, label %._crit_edge190, label %iter.check

iter.check:                                       ; preds = %.preheader170
  %min.iters.check340 = icmp ult i32 %21, 8
  br i1 %min.iters.check340, label %.lr.ph189.preheader, label %vector.main.loop.iter.check

vector.main.loop.iter.check:                      ; preds = %iter.check
  %min.iters.check342 = icmp ult i32 %21, 16
  br i1 %min.iters.check342, label %vec.epilog.ph, label %vector.ph343

vector.ph343:                                     ; preds = %vector.main.loop.iter.check
  %n.vec345 = and i64 %27, 4294967280
  br label %vector.body346

vector.body346:                                   ; preds = %vector.body346, %vector.ph343
  %index347 = phi i64 [ 0, %vector.ph343 ], [ %index.next355, %vector.body346 ]
  %133 = getelementptr inbounds i8, ptr %32, i64 %index347
  %134 = shl i64 %index347, 3
  %135 = and i64 %134, 4294967168
  %136 = getelementptr inbounds i8, ptr %31, i64 %135
  %wide.vec = load <128 x i8>, ptr %136, align 16, !tbaa !11
  %strided.vec = shufflevector <128 x i8> %wide.vec, <128 x i8> poison, <16 x i32> <i32 0, i32 8, i32 16, i32 24, i32 32, i32 40, i32 48, i32 56, i32 64, i32 72, i32 80, i32 88, i32 96, i32 104, i32 112, i32 120>
  %strided.vec348 = shufflevector <128 x i8> %wide.vec, <128 x i8> poison, <16 x i32> <i32 1, i32 9, i32 17, i32 25, i32 33, i32 41, i32 49, i32 57, i32 65, i32 73, i32 81, i32 89, i32 97, i32 105, i32 113, i32 121>
  %strided.vec349 = shufflevector <128 x i8> %wide.vec, <128 x i8> poison, <16 x i32> <i32 2, i32 10, i32 18, i32 26, i32 34, i32 42, i32 50, i32 58, i32 66, i32 74, i32 82, i32 90, i32 98, i32 106, i32 114, i32 122>
  %strided.vec350 = shufflevector <128 x i8> %wide.vec, <128 x i8> poison, <16 x i32> <i32 3, i32 11, i32 19, i32 27, i32 35, i32 43, i32 51, i32 59, i32 67, i32 75, i32 83, i32 91, i32 99, i32 107, i32 115, i32 123>
  %strided.vec351 = shufflevector <128 x i8> %wide.vec, <128 x i8> poison, <16 x i32> <i32 4, i32 12, i32 20, i32 28, i32 36, i32 44, i32 52, i32 60, i32 68, i32 76, i32 84, i32 92, i32 100, i32 108, i32 116, i32 124>
  %strided.vec352 = shufflevector <128 x i8> %wide.vec, <128 x i8> poison, <16 x i32> <i32 5, i32 13, i32 21, i32 29, i32 37, i32 45, i32 53, i32 61, i32 69, i32 77, i32 85, i32 93, i32 101, i32 109, i32 117, i32 125>
  %strided.vec353 = shufflevector <128 x i8> %wide.vec, <128 x i8> poison, <16 x i32> <i32 6, i32 14, i32 22, i32 30, i32 38, i32 46, i32 54, i32 62, i32 70, i32 78, i32 86, i32 94, i32 102, i32 110, i32 118, i32 126>
  %strided.vec354 = shufflevector <128 x i8> %wide.vec, <128 x i8> poison, <16 x i32> <i32 7, i32 15, i32 23, i32 31, i32 39, i32 47, i32 55, i32 63, i32 71, i32 79, i32 87, i32 95, i32 103, i32 111, i32 119, i32 127>
  %137 = and <16 x i8> %strided.vec, <i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128>
  %138 = lshr <16 x i8> %strided.vec348, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
  %139 = and <16 x i8> %138, <i8 64, i8 64, i8 64, i8 64, i8 64, i8 64, i8 64, i8 64, i8 64, i8 64, i8 64, i8 64, i8 64, i8 64, i8 64, i8 64>
  %140 = or disjoint <16 x i8> %139, %137
  %141 = lshr <16 x i8> %strided.vec349, <i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2>
  %142 = and <16 x i8> %141, <i8 32, i8 32, i8 32, i8 32, i8 32, i8 32, i8 32, i8 32, i8 32, i8 32, i8 32, i8 32, i8 32, i8 32, i8 32, i8 32>
  %143 = or disjoint <16 x i8> %142, %140
  %144 = lshr <16 x i8> %strided.vec350, <i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3>
  %145 = and <16 x i8> %144, <i8 16, i8 16, i8 16, i8 16, i8 16, i8 16, i8 16, i8 16, i8 16, i8 16, i8 16, i8 16, i8 16, i8 16, i8 16, i8 16>
  %146 = or disjoint <16 x i8> %145, %143
  %147 = lshr <16 x i8> %strided.vec351, <i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4>
  %148 = and <16 x i8> %147, <i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8>
  %149 = or disjoint <16 x i8> %148, %146
  %150 = lshr <16 x i8> %strided.vec352, <i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5>
  %151 = and <16 x i8> %150, <i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4>
  %152 = or disjoint <16 x i8> %151, %149
  %153 = lshr <16 x i8> %strided.vec353, <i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6>
  %154 = and <16 x i8> %153, <i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2>
  %155 = or <16 x i8> %154, %152
  %156 = lshr <16 x i8> %strided.vec354, <i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7>
  %157 = or <16 x i8> %155, %156
  store <16 x i8> %157, ptr %133, align 16, !tbaa !11
  %index.next355 = add nuw i64 %index347, 16
  %158 = icmp eq i64 %index.next355, %n.vec345
  br i1 %158, label %middle.block338, label %vector.body346, !llvm.loop !17

middle.block338:                                  ; preds = %vector.body346
  %cmp.n356 = icmp eq i64 %n.vec345, %27
  br i1 %cmp.n356, label %._crit_edge190, label %vec.epilog.iter.check

vec.epilog.iter.check:                            ; preds = %middle.block338
  %n.vec.remaining = and i64 %27, 8
  %min.epilog.iters.check.not.not = icmp eq i64 %n.vec.remaining, 0
  br i1 %min.epilog.iters.check.not.not, label %.lr.ph189.preheader, label %vec.epilog.ph

.lr.ph189.preheader:                              ; preds = %vec.epilog.middle.block, %iter.check, %vec.epilog.iter.check
  %indvars.iv249.ph = phi i64 [ 0, %iter.check ], [ %n.vec345, %vec.epilog.iter.check ], [ %n.vec358, %vec.epilog.middle.block ]
  br label %.lr.ph189

vec.epilog.ph:                                    ; preds = %vector.main.loop.iter.check, %vec.epilog.iter.check
  %vec.epilog.resume.val = phi i64 [ %n.vec345, %vec.epilog.iter.check ], [ 0, %vector.main.loop.iter.check ]
  %n.vec358 = and i64 %27, 4294967288
  br label %vec.epilog.vector.body

vec.epilog.vector.body:                           ; preds = %vec.epilog.vector.body, %vec.epilog.ph
  %index360 = phi i64 [ %vec.epilog.resume.val, %vec.epilog.ph ], [ %index.next370, %vec.epilog.vector.body ]
  %159 = getelementptr inbounds i8, ptr %32, i64 %index360
  %160 = shl i64 %index360, 3
  %161 = and i64 %160, 4294967232
  %162 = getelementptr inbounds i8, ptr %31, i64 %161
  %wide.vec361 = load <64 x i8>, ptr %162, align 16, !tbaa !11
  %strided.vec362 = shufflevector <64 x i8> %wide.vec361, <64 x i8> poison, <8 x i32> <i32 0, i32 8, i32 16, i32 24, i32 32, i32 40, i32 48, i32 56>
  %strided.vec363 = shufflevector <64 x i8> %wide.vec361, <64 x i8> poison, <8 x i32> <i32 1, i32 9, i32 17, i32 25, i32 33, i32 41, i32 49, i32 57>
  %strided.vec364 = shufflevector <64 x i8> %wide.vec361, <64 x i8> poison, <8 x i32> <i32 2, i32 10, i32 18, i32 26, i32 34, i32 42, i32 50, i32 58>
  %strided.vec365 = shufflevector <64 x i8> %wide.vec361, <64 x i8> poison, <8 x i32> <i32 3, i32 11, i32 19, i32 27, i32 35, i32 43, i32 51, i32 59>
  %strided.vec366 = shufflevector <64 x i8> %wide.vec361, <64 x i8> poison, <8 x i32> <i32 4, i32 12, i32 20, i32 28, i32 36, i32 44, i32 52, i32 60>
  %strided.vec367 = shufflevector <64 x i8> %wide.vec361, <64 x i8> poison, <8 x i32> <i32 5, i32 13, i32 21, i32 29, i32 37, i32 45, i32 53, i32 61>
  %strided.vec368 = shufflevector <64 x i8> %wide.vec361, <64 x i8> poison, <8 x i32> <i32 6, i32 14, i32 22, i32 30, i32 38, i32 46, i32 54, i32 62>
  %strided.vec369 = shufflevector <64 x i8> %wide.vec361, <64 x i8> poison, <8 x i32> <i32 7, i32 15, i32 23, i32 31, i32 39, i32 47, i32 55, i32 63>
  %163 = and <8 x i8> %strided.vec362, <i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128>
  %164 = lshr <8 x i8> %strided.vec363, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
  %165 = and <8 x i8> %164, <i8 64, i8 64, i8 64, i8 64, i8 64, i8 64, i8 64, i8 64>
  %166 = or disjoint <8 x i8> %165, %163
  %167 = lshr <8 x i8> %strided.vec364, <i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2>
  %168 = and <8 x i8> %167, <i8 32, i8 32, i8 32, i8 32, i8 32, i8 32, i8 32, i8 32>
  %169 = or disjoint <8 x i8> %168, %166
  %170 = lshr <8 x i8> %strided.vec365, <i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3>
  %171 = and <8 x i8> %170, <i8 16, i8 16, i8 16, i8 16, i8 16, i8 16, i8 16, i8 16>
  %172 = or disjoint <8 x i8> %171, %169
  %173 = lshr <8 x i8> %strided.vec366, <i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4>
  %174 = and <8 x i8> %173, <i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8>
  %175 = or disjoint <8 x i8> %174, %172
  %176 = lshr <8 x i8> %strided.vec367, <i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5>
  %177 = and <8 x i8> %176, <i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4>
  %178 = or disjoint <8 x i8> %177, %175
  %179 = lshr <8 x i8> %strided.vec368, <i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6>
  %180 = and <8 x i8> %179, <i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2>
  %181 = or <8 x i8> %180, %178
  %182 = lshr <8 x i8> %strided.vec369, <i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7>
  %183 = or <8 x i8> %181, %182
  store <8 x i8> %183, ptr %159, align 8, !tbaa !11
  %index.next370 = add nuw i64 %index360, 8
  %184 = icmp eq i64 %index.next370, %n.vec358
  br i1 %184, label %vec.epilog.middle.block, label %vec.epilog.vector.body, !llvm.loop !18

vec.epilog.middle.block:                          ; preds = %vec.epilog.vector.body
  %cmp.n371 = icmp eq i64 %n.vec358, %27
  br i1 %cmp.n371, label %._crit_edge190, label %.lr.ph189.preheader

.lr.ph187:                                        ; preds = %._crit_edge184, %.lr.ph187
  %indvars.iv244 = phi i64 [ %indvars.iv.next245, %.lr.ph187 ], [ 0, %._crit_edge184 ]
  %185 = getelementptr inbounds i8, ptr %31, i64 %indvars.iv244
  %186 = load i8, ptr %185, align 1, !tbaa !11
  %187 = uitofp i8 %186 to double
  %188 = call float (...) @randnf() #9
  %189 = fmul float %188, 2.000000e+01
  %190 = fptosi float %189 to i32
  %191 = sitofp i32 %190 to double
  %192 = call double @llvm.fmuladd.f64(double %187, double 8.000000e-01, double %191)
  %193 = fptosi double %192 to i32
  %spec.store.select = call i32 @llvm.smin.i32(i32 %193, i32 255)
  %spec.store.select1 = call i32 @llvm.smax.i32(i32 %spec.store.select, i32 0)
  %194 = trunc nuw i32 %spec.store.select1 to i8
  store i8 %194, ptr %185, align 1, !tbaa !11
  %indvars.iv.next245 = add nuw nsw i64 %indvars.iv244, 1
  %exitcond248.not = icmp eq i64 %indvars.iv.next245, %30
  br i1 %exitcond248.not, label %.preheader170, label %.lr.ph187, !llvm.loop !19

.lr.ph189:                                        ; preds = %.lr.ph189.preheader, %.lr.ph189
  %indvars.iv249 = phi i64 [ %indvars.iv.next250, %.lr.ph189 ], [ %indvars.iv249.ph, %.lr.ph189.preheader ]
  %195 = getelementptr inbounds i8, ptr %32, i64 %indvars.iv249
  %196 = trunc nuw i64 %indvars.iv249 to i32
  %197 = shl i32 %196, 3
  %198 = zext i32 %197 to i64
  %199 = getelementptr inbounds i8, ptr %31, i64 %198
  %200 = load i8, ptr %199, align 8, !tbaa !11
  %201 = and i8 %200, -128
  %202 = or disjoint i32 %197, 1
  %203 = zext i32 %202 to i64
  %204 = getelementptr inbounds i8, ptr %31, i64 %203
  %205 = load i8, ptr %204, align 1, !tbaa !11
  %206 = lshr i8 %205, 1
  %207 = and i8 %206, 64
  %208 = or disjoint i8 %207, %201
  %209 = or disjoint i32 %197, 2
  %210 = zext i32 %209 to i64
  %211 = getelementptr inbounds i8, ptr %31, i64 %210
  %212 = load i8, ptr %211, align 2, !tbaa !11
  %213 = lshr i8 %212, 2
  %214 = and i8 %213, 32
  %215 = or disjoint i8 %214, %208
  %216 = or disjoint i32 %197, 3
  %217 = zext i32 %216 to i64
  %218 = getelementptr inbounds i8, ptr %31, i64 %217
  %219 = load i8, ptr %218, align 1, !tbaa !11
  %220 = lshr i8 %219, 3
  %221 = and i8 %220, 16
  %222 = or disjoint i8 %221, %215
  %223 = or disjoint i32 %197, 4
  %224 = zext i32 %223 to i64
  %225 = getelementptr inbounds i8, ptr %31, i64 %224
  %226 = load i8, ptr %225, align 4, !tbaa !11
  %227 = lshr i8 %226, 4
  %228 = and i8 %227, 8
  %229 = or disjoint i8 %228, %222
  %230 = or disjoint i32 %197, 5
  %231 = zext i32 %230 to i64
  %232 = getelementptr inbounds i8, ptr %31, i64 %231
  %233 = load i8, ptr %232, align 1, !tbaa !11
  %234 = lshr i8 %233, 5
  %235 = and i8 %234, 4
  %236 = or disjoint i8 %235, %229
  %237 = or disjoint i32 %197, 6
  %238 = zext i32 %237 to i64
  %239 = getelementptr inbounds i8, ptr %31, i64 %238
  %240 = load i8, ptr %239, align 2, !tbaa !11
  %241 = lshr i8 %240, 6
  %242 = and i8 %241, 2
  %243 = or i8 %242, %236
  %244 = or disjoint i32 %197, 7
  %245 = zext i32 %244 to i64
  %246 = getelementptr inbounds i8, ptr %31, i64 %245
  %247 = load i8, ptr %246, align 1, !tbaa !11
  %248 = lshr i8 %247, 7
  %249 = or i8 %243, %248
  store i8 %249, ptr %195, align 1, !tbaa !11
  %indvars.iv.next250 = add nuw nsw i64 %indvars.iv249, 1
  %exitcond253.not = icmp eq i64 %indvars.iv.next250, %27
  br i1 %exitcond253.not, label %._crit_edge190, label %.lr.ph189, !llvm.loop !20

._crit_edge190:                                   ; preds = %.lr.ph189, %middle.block338, %vec.epilog.middle.block, %._crit_edge, %.preheader170
  %250 = call i32 @fec_decode_soft(ptr noundef %34, i32 noundef %20, ptr noundef nonnull %31, ptr noundef nonnull %33) #9
  %251 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.9, i32 noundef %20)
  br i1 %.not, label %._crit_edge194, label %.lr.ph193

.lr.ph193:                                        ; preds = %._crit_edge190, %.lr.ph193
  %indvars.iv254 = phi i64 [ %indvars.iv.next255, %.lr.ph193 ], [ 0, %._crit_edge190 ]
  %252 = getelementptr inbounds i8, ptr %26, i64 %indvars.iv254
  %253 = load i8, ptr %252, align 1, !tbaa !11
  %254 = zext i8 %253 to i32
  %255 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.10, i32 noundef %254)
  %indvars.iv.next255 = add nuw nsw i64 %indvars.iv254, 1
  %exitcond258.not = icmp eq i64 %indvars.iv.next255, %24
  br i1 %exitcond258.not, label %._crit_edge194, label %.lr.ph193, !llvm.loop !21

._crit_edge194:                                   ; preds = %.lr.ph193, %._crit_edge190
  %256 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.11)
  %257 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.12, i32 noundef %21)
  br i1 %.not220, label %._crit_edge202.critedge, label %.lr.ph197

.lr.ph197:                                        ; preds = %._crit_edge194, %.lr.ph197
  %indvars.iv259 = phi i64 [ %indvars.iv.next260, %.lr.ph197 ], [ 0, %._crit_edge194 ]
  %258 = getelementptr inbounds i8, ptr %28, i64 %indvars.iv259
  %259 = load i8, ptr %258, align 1, !tbaa !11
  %260 = zext i8 %259 to i32
  %261 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.10, i32 noundef %260)
  %indvars.iv.next260 = add nuw nsw i64 %indvars.iv259, 1
  %exitcond263.not = icmp eq i64 %indvars.iv.next260, %27
  br i1 %exitcond263.not, label %._crit_edge198, label %.lr.ph197, !llvm.loop !22

._crit_edge198:                                   ; preds = %.lr.ph197
  %262 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.11)
  %263 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.13, i32 noundef %21)
  br i1 %.not220, label %._crit_edge202, label %.lr.ph201

.lr.ph201:                                        ; preds = %._crit_edge198, %.lr.ph201
  %indvars.iv264 = phi i64 [ %indvars.iv.next265, %.lr.ph201 ], [ 0, %._crit_edge198 ]
  %264 = getelementptr inbounds i8, ptr %32, i64 %indvars.iv264
  %265 = load i8, ptr %264, align 1, !tbaa !11
  %266 = zext i8 %265 to i32
  %267 = getelementptr inbounds i8, ptr %28, i64 %indvars.iv264
  %268 = load i8, ptr %267, align 1, !tbaa !11
  %269 = icmp eq i8 %265, %268
  %270 = select i1 %269, i32 32, i32 42
  %271 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.14, i32 noundef %270, i32 noundef %266)
  %indvars.iv.next265 = add nuw nsw i64 %indvars.iv264, 1
  %exitcond268.not = icmp eq i64 %indvars.iv.next265, %27
  br i1 %exitcond268.not, label %._crit_edge202, label %.lr.ph201, !llvm.loop !23

._crit_edge202.critedge:                          ; preds = %._crit_edge194
  %272 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.11)
  %273 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.13, i32 noundef %21)
  br label %._crit_edge202

._crit_edge202:                                   ; preds = %.lr.ph201, %._crit_edge202.critedge, %._crit_edge198
  %274 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.11)
  %.not153 = icmp ne i32 %.0147.ph, 0
  %275 = icmp ne i32 %21, 0
  %or.cond = select i1 %.not153, i1 %275, i1 false
  br i1 %or.cond, label %.lr.ph205, label %.loopexit

.lr.ph205:                                        ; preds = %._crit_edge202, %.lr.ph205
  %indvars.iv273 = phi i64 [ %indvars.iv.next274, %.lr.ph205 ], [ 0, %._crit_edge202 ]
  %276 = trunc nuw i64 %indvars.iv273 to i32
  %277 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.15, i32 noundef %276)
  %278 = getelementptr inbounds i8, ptr %28, i64 %indvars.iv273
  %279 = shl i64 %indvars.iv273, 3
  %280 = and i64 %279, 4294967288
  %281 = load i8, ptr %278, align 1, !tbaa !11
  %282 = getelementptr inbounds i8, ptr %31, i64 %280
  %283 = load i8, ptr %282, align 8, !tbaa !11
  %284 = zext i8 %283 to i32
  %.not154.unshifted = xor i8 %281, %283
  %.not154 = icmp sgt i8 %.not154.unshifted, -1
  %285 = select i1 %.not154, i32 32, i32 42
  %286 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.16, i32 noundef %284, i32 noundef %285)
  %287 = load i8, ptr %278, align 1, !tbaa !11
  %288 = lshr i8 %287, 6
  %289 = and i8 %288, 1
  %290 = or disjoint i64 %280, 1
  %291 = getelementptr inbounds i8, ptr %31, i64 %290
  %292 = load i8, ptr %291, align 1, !tbaa !11
  %293 = zext i8 %292 to i32
  %.lobit.1 = lshr i8 %292, 7
  %.not154.1 = icmp eq i8 %289, %.lobit.1
  %294 = select i1 %.not154.1, i32 32, i32 42
  %295 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.16, i32 noundef %293, i32 noundef %294)
  %296 = load i8, ptr %278, align 1, !tbaa !11
  %297 = lshr i8 %296, 5
  %298 = and i8 %297, 1
  %299 = or disjoint i64 %280, 2
  %300 = getelementptr inbounds i8, ptr %31, i64 %299
  %301 = load i8, ptr %300, align 2, !tbaa !11
  %302 = zext i8 %301 to i32
  %.lobit.2 = lshr i8 %301, 7
  %.not154.2 = icmp eq i8 %298, %.lobit.2
  %303 = select i1 %.not154.2, i32 32, i32 42
  %304 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.16, i32 noundef %302, i32 noundef %303)
  %305 = load i8, ptr %278, align 1, !tbaa !11
  %306 = lshr i8 %305, 4
  %307 = and i8 %306, 1
  %308 = or disjoint i64 %280, 3
  %309 = getelementptr inbounds i8, ptr %31, i64 %308
  %310 = load i8, ptr %309, align 1, !tbaa !11
  %311 = zext i8 %310 to i32
  %.lobit.3 = lshr i8 %310, 7
  %.not154.3 = icmp eq i8 %307, %.lobit.3
  %312 = select i1 %.not154.3, i32 32, i32 42
  %313 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.16, i32 noundef %311, i32 noundef %312)
  %314 = load i8, ptr %278, align 1, !tbaa !11
  %315 = lshr i8 %314, 3
  %316 = and i8 %315, 1
  %317 = or disjoint i64 %280, 4
  %318 = getelementptr inbounds i8, ptr %31, i64 %317
  %319 = load i8, ptr %318, align 4, !tbaa !11
  %320 = zext i8 %319 to i32
  %.lobit.4 = lshr i8 %319, 7
  %.not154.4 = icmp eq i8 %316, %.lobit.4
  %321 = select i1 %.not154.4, i32 32, i32 42
  %322 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.16, i32 noundef %320, i32 noundef %321)
  %323 = load i8, ptr %278, align 1, !tbaa !11
  %324 = lshr i8 %323, 2
  %325 = and i8 %324, 1
  %326 = or disjoint i64 %280, 5
  %327 = getelementptr inbounds i8, ptr %31, i64 %326
  %328 = load i8, ptr %327, align 1, !tbaa !11
  %329 = zext i8 %328 to i32
  %.lobit.5 = lshr i8 %328, 7
  %.not154.5 = icmp eq i8 %325, %.lobit.5
  %330 = select i1 %.not154.5, i32 32, i32 42
  %331 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.16, i32 noundef %329, i32 noundef %330)
  %332 = load i8, ptr %278, align 1, !tbaa !11
  %333 = lshr i8 %332, 1
  %334 = and i8 %333, 1
  %335 = or disjoint i64 %280, 6
  %336 = getelementptr inbounds i8, ptr %31, i64 %335
  %337 = load i8, ptr %336, align 2, !tbaa !11
  %338 = zext i8 %337 to i32
  %.lobit.6 = lshr i8 %337, 7
  %.not154.6 = icmp eq i8 %334, %.lobit.6
  %339 = select i1 %.not154.6, i32 32, i32 42
  %340 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.16, i32 noundef %338, i32 noundef %339)
  %341 = load i8, ptr %278, align 1, !tbaa !11
  %342 = and i8 %341, 1
  %343 = or disjoint i64 %280, 7
  %344 = getelementptr inbounds i8, ptr %31, i64 %343
  %345 = load i8, ptr %344, align 1, !tbaa !11
  %346 = zext i8 %345 to i32
  %.lobit.7 = lshr i8 %345, 7
  %.not154.7 = icmp eq i8 %342, %.lobit.7
  %347 = select i1 %.not154.7, i32 32, i32 42
  %348 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.16, i32 noundef %346, i32 noundef %347)
  %349 = getelementptr inbounds i8, ptr %32, i64 %indvars.iv273
  %350 = load i8, ptr %349, align 1, !tbaa !11
  %351 = zext i8 %350 to i32
  %352 = load i8, ptr %278, align 1, !tbaa !11
  %353 = icmp eq i8 %350, %352
  %354 = select i1 %353, i32 32, i32 42
  %355 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.17, i32 noundef %354, i32 noundef %351)
  %indvars.iv.next274 = add nuw nsw i64 %indvars.iv273, 1
  %exitcond277.not = icmp eq i64 %indvars.iv.next274, %27
  br i1 %exitcond277.not, label %.loopexit, label %.lr.ph205, !llvm.loop !24

.loopexit:                                        ; preds = %.lr.ph205, %._crit_edge202
  %356 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.18, i32 noundef %20)
  br i1 %.not, label %._crit_edge218.critedge, label %.lr.ph208

.lr.ph208:                                        ; preds = %.loopexit, %.lr.ph208
  %indvars.iv278 = phi i64 [ %indvars.iv.next279, %.lr.ph208 ], [ 0, %.loopexit ]
  %357 = getelementptr inbounds i8, ptr %33, i64 %indvars.iv278
  %358 = load i8, ptr %357, align 1, !tbaa !11
  %359 = zext i8 %358 to i32
  %360 = getelementptr inbounds i8, ptr %26, i64 %indvars.iv278
  %361 = load i8, ptr %360, align 1, !tbaa !11
  %362 = icmp eq i8 %358, %361
  %363 = select i1 %362, i32 32, i32 42
  %364 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.14, i32 noundef %363, i32 noundef %359)
  %indvars.iv.next279 = add nuw nsw i64 %indvars.iv278, 1
  %exitcond282.not = icmp eq i64 %indvars.iv.next279, %24
  br i1 %exitcond282.not, label %._crit_edge209, label %.lr.ph208, !llvm.loop !25

._crit_edge209:                                   ; preds = %.lr.ph208
  %365 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.11)
  %366 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.11)
  br i1 %.not, label %._crit_edge218, label %.lr.ph217.preheader

.lr.ph217.preheader:                              ; preds = %._crit_edge209
  %min.iters.check374 = icmp ult i32 %.0140, 8
  br i1 %min.iters.check374, label %.lr.ph217.preheader392, label %vector.ph375

vector.ph375:                                     ; preds = %.lr.ph217.preheader
  %n.vec377 = and i64 %24, 4088
  br label %vector.body379

vector.body379:                                   ; preds = %vector.body379, %vector.ph375
  %index380 = phi i64 [ 0, %vector.ph375 ], [ %index.next388, %vector.body379 ]
  %vec.phi = phi <4 x i32> [ zeroinitializer, %vector.ph375 ], [ %435, %vector.body379 ]
  %vec.phi381 = phi <4 x i32> [ zeroinitializer, %vector.ph375 ], [ %436, %vector.body379 ]
  %vec.phi382 = phi <4 x i32> [ zeroinitializer, %vector.ph375 ], [ %437, %vector.body379 ]
  %vec.phi383 = phi <4 x i32> [ zeroinitializer, %vector.ph375 ], [ %438, %vector.body379 ]
  %367 = getelementptr inbounds i8, ptr %26, i64 %index380
  %368 = getelementptr inbounds i8, ptr %367, i64 4
  %wide.load384 = load <4 x i8>, ptr %367, align 8, !tbaa !11
  %wide.load385 = load <4 x i8>, ptr %368, align 4, !tbaa !11
  %369 = getelementptr inbounds i8, ptr %33, i64 %index380
  %370 = getelementptr inbounds i8, ptr %369, i64 4
  %wide.load386 = load <4 x i8>, ptr %369, align 8, !tbaa !11
  %wide.load387 = load <4 x i8>, ptr %370, align 4, !tbaa !11
  %371 = icmp ne <4 x i8> %wide.load384, %wide.load386
  %372 = icmp ne <4 x i8> %wide.load385, %wide.load387
  %373 = zext <4 x i1> %371 to <4 x i32>
  %374 = zext <4 x i1> %372 to <4 x i32>
  %375 = xor <4 x i8> %wide.load386, %wide.load384
  %376 = xor <4 x i8> %wide.load387, %wide.load385
  %377 = and <4 x i8> %375, <i8 1, i8 1, i8 1, i8 1>
  %378 = and <4 x i8> %376, <i8 1, i8 1, i8 1, i8 1>
  %379 = zext nneg <4 x i8> %377 to <4 x i32>
  %380 = zext nneg <4 x i8> %378 to <4 x i32>
  %381 = add <4 x i32> %vec.phi, %379
  %382 = add <4 x i32> %vec.phi381, %380
  %383 = lshr <4 x i8> %375, <i8 1, i8 1, i8 1, i8 1>
  %384 = lshr <4 x i8> %376, <i8 1, i8 1, i8 1, i8 1>
  %385 = and <4 x i8> %383, <i8 1, i8 1, i8 1, i8 1>
  %386 = and <4 x i8> %384, <i8 1, i8 1, i8 1, i8 1>
  %387 = zext nneg <4 x i8> %385 to <4 x i32>
  %388 = zext nneg <4 x i8> %386 to <4 x i32>
  %389 = add <4 x i32> %381, %387
  %390 = add <4 x i32> %382, %388
  %391 = lshr <4 x i8> %375, <i8 2, i8 2, i8 2, i8 2>
  %392 = lshr <4 x i8> %376, <i8 2, i8 2, i8 2, i8 2>
  %393 = and <4 x i8> %391, <i8 1, i8 1, i8 1, i8 1>
  %394 = and <4 x i8> %392, <i8 1, i8 1, i8 1, i8 1>
  %395 = zext nneg <4 x i8> %393 to <4 x i32>
  %396 = zext nneg <4 x i8> %394 to <4 x i32>
  %397 = add <4 x i32> %389, %395
  %398 = add <4 x i32> %390, %396
  %399 = lshr <4 x i8> %375, <i8 3, i8 3, i8 3, i8 3>
  %400 = lshr <4 x i8> %376, <i8 3, i8 3, i8 3, i8 3>
  %401 = and <4 x i8> %399, <i8 1, i8 1, i8 1, i8 1>
  %402 = and <4 x i8> %400, <i8 1, i8 1, i8 1, i8 1>
  %403 = zext nneg <4 x i8> %401 to <4 x i32>
  %404 = zext nneg <4 x i8> %402 to <4 x i32>
  %405 = add <4 x i32> %397, %403
  %406 = add <4 x i32> %398, %404
  %407 = lshr <4 x i8> %375, <i8 4, i8 4, i8 4, i8 4>
  %408 = lshr <4 x i8> %376, <i8 4, i8 4, i8 4, i8 4>
  %409 = and <4 x i8> %407, <i8 1, i8 1, i8 1, i8 1>
  %410 = and <4 x i8> %408, <i8 1, i8 1, i8 1, i8 1>
  %411 = zext nneg <4 x i8> %409 to <4 x i32>
  %412 = zext nneg <4 x i8> %410 to <4 x i32>
  %413 = add <4 x i32> %405, %411
  %414 = add <4 x i32> %406, %412
  %415 = lshr <4 x i8> %375, <i8 5, i8 5, i8 5, i8 5>
  %416 = lshr <4 x i8> %376, <i8 5, i8 5, i8 5, i8 5>
  %417 = and <4 x i8> %415, <i8 1, i8 1, i8 1, i8 1>
  %418 = and <4 x i8> %416, <i8 1, i8 1, i8 1, i8 1>
  %419 = zext nneg <4 x i8> %417 to <4 x i32>
  %420 = zext nneg <4 x i8> %418 to <4 x i32>
  %421 = add <4 x i32> %413, %419
  %422 = add <4 x i32> %414, %420
  %423 = lshr <4 x i8> %375, <i8 6, i8 6, i8 6, i8 6>
  %424 = lshr <4 x i8> %376, <i8 6, i8 6, i8 6, i8 6>
  %425 = and <4 x i8> %423, <i8 1, i8 1, i8 1, i8 1>
  %426 = and <4 x i8> %424, <i8 1, i8 1, i8 1, i8 1>
  %427 = zext nneg <4 x i8> %425 to <4 x i32>
  %428 = zext nneg <4 x i8> %426 to <4 x i32>
  %429 = add <4 x i32> %421, %427
  %430 = add <4 x i32> %422, %428
  %431 = lshr <4 x i8> %375, <i8 7, i8 7, i8 7, i8 7>
  %432 = lshr <4 x i8> %376, <i8 7, i8 7, i8 7, i8 7>
  %433 = zext nneg <4 x i8> %431 to <4 x i32>
  %434 = zext nneg <4 x i8> %432 to <4 x i32>
  %435 = add <4 x i32> %429, %433
  %436 = add <4 x i32> %430, %434
  %437 = add <4 x i32> %vec.phi382, %373
  %438 = add <4 x i32> %vec.phi383, %374
  %index.next388 = add nuw i64 %index380, 8
  %439 = icmp eq i64 %index.next388, %n.vec377
  br i1 %439, label %middle.block372, label %vector.body379, !llvm.loop !26

middle.block372:                                  ; preds = %vector.body379
  %bin.rdx = add <4 x i32> %436, %435
  %440 = call i32 @llvm.vector.reduce.add.v4i32(<4 x i32> %bin.rdx)
  %bin.rdx389 = add <4 x i32> %438, %437
  %441 = call i32 @llvm.vector.reduce.add.v4i32(<4 x i32> %bin.rdx389)
  %cmp.n390 = icmp eq i64 %n.vec377, %24
  br i1 %cmp.n390, label %._crit_edge218, label %.lr.ph217.preheader392

.lr.ph217.preheader392:                           ; preds = %middle.block372, %.lr.ph217.preheader
  %indvars.iv284.ph = phi i64 [ 0, %.lr.ph217.preheader ], [ %n.vec377, %middle.block372 ]
  %.0136215.ph = phi i32 [ 0, %.lr.ph217.preheader ], [ %440, %middle.block372 ]
  %.0137214.ph = phi i32 [ 0, %.lr.ph217.preheader ], [ %441, %middle.block372 ]
  br label %.lr.ph217

.lr.ph217:                                        ; preds = %.lr.ph217.preheader392, %.lr.ph217
  %indvars.iv284 = phi i64 [ %indvars.iv.next285, %.lr.ph217 ], [ %indvars.iv284.ph, %.lr.ph217.preheader392 ]
  %.0136215 = phi i32 [ %478, %.lr.ph217 ], [ %.0136215.ph, %.lr.ph217.preheader392 ]
  %.0137214 = phi i32 [ %479, %.lr.ph217 ], [ %.0137214.ph, %.lr.ph217.preheader392 ]
  %442 = getelementptr inbounds i8, ptr %26, i64 %indvars.iv284
  %443 = load i8, ptr %442, align 1, !tbaa !11
  %444 = getelementptr inbounds i8, ptr %33, i64 %indvars.iv284
  %445 = load i8, ptr %444, align 1, !tbaa !11
  %446 = icmp ne i8 %443, %445
  %447 = zext i1 %446 to i32
  %448 = xor i8 %445, %443
  %449 = and i8 %448, 1
  %450 = zext nneg i8 %449 to i32
  %451 = add i32 %.0136215, %450
  %452 = lshr i8 %448, 1
  %453 = and i8 %452, 1
  %454 = zext nneg i8 %453 to i32
  %455 = add i32 %451, %454
  %456 = lshr i8 %448, 2
  %457 = and i8 %456, 1
  %458 = zext nneg i8 %457 to i32
  %459 = add i32 %455, %458
  %460 = lshr i8 %448, 3
  %461 = and i8 %460, 1
  %462 = zext nneg i8 %461 to i32
  %463 = add i32 %459, %462
  %464 = lshr i8 %448, 4
  %465 = and i8 %464, 1
  %466 = zext nneg i8 %465 to i32
  %467 = add i32 %463, %466
  %468 = lshr i8 %448, 5
  %469 = and i8 %468, 1
  %470 = zext nneg i8 %469 to i32
  %471 = add i32 %467, %470
  %472 = lshr i8 %448, 6
  %473 = and i8 %472, 1
  %474 = zext nneg i8 %473 to i32
  %475 = add i32 %471, %474
  %476 = lshr i8 %448, 7
  %477 = zext nneg i8 %476 to i32
  %478 = add i32 %475, %477
  %479 = add i32 %.0137214, %447
  %indvars.iv.next285 = add nuw nsw i64 %indvars.iv284, 1
  %exitcond288.not = icmp eq i64 %indvars.iv.next285, %24
  br i1 %exitcond288.not, label %._crit_edge218, label %.lr.ph217, !llvm.loop !27

._crit_edge218.critedge:                          ; preds = %.loopexit
  %480 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.11)
  %481 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.11)
  br label %._crit_edge218

._crit_edge218:                                   ; preds = %.lr.ph217, %middle.block372, %._crit_edge218.critedge, %._crit_edge209
  %.0137.lcssa = phi i32 [ 0, %._crit_edge209 ], [ 0, %._crit_edge218.critedge ], [ %441, %middle.block372 ], [ %479, %.lr.ph217 ]
  %.0136.lcssa = phi i32 [ 0, %._crit_edge209 ], [ 0, %._crit_edge218.critedge ], [ %440, %middle.block372 ], [ %478, %.lr.ph217 ]
  %482 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.19, i32 noundef %.0137.lcssa, i32 noundef %20)
  %483 = shl nuw nsw i32 %20, 3
  %484 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.20, i32 noundef %.0136.lcssa, i32 noundef %483)
  %485 = call i32 @fec_destroy(ptr noundef %34) #9
  call void @llvm.stackrestore.p0(ptr %25)
  br label %486

486:                                              ; preds = %._crit_edge218, %5
  ret i32 0
}

; Function Attrs: nounwind
declare i32 @getopt(i32 noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

; Function Attrs: inlinehint mustprogress nofree nounwind willreturn memory(read) uwtable
declare i32 @atoi(ptr nocapture noundef nonnull) local_unnamed_addr #3

declare i32 @liquid_getopt_str2fec(ptr noundef) local_unnamed_addr #4

; Function Attrs: nofree nounwind
declare noundef i32 @fprintf(ptr nocapture noundef, ptr nocapture noundef readonly, ...) local_unnamed_addr #1

; Function Attrs: noreturn nounwind
declare void @exit(i32 noundef) local_unnamed_addr #5

declare i32 @fec_get_enc_msg_length(i32 noundef, i32 noundef) local_unnamed_addr #4

; Function Attrs: mustprogress nocallback nofree nosync nounwind willreturn
declare ptr @llvm.stacksave.p0() #6

declare ptr @fec_create(i32 noundef, ptr noundef) local_unnamed_addr #4

declare i32 @fec_print(ptr noundef) local_unnamed_addr #4

; Function Attrs: nounwind
declare i32 @rand() local_unnamed_addr #2

declare i32 @fec_encode(ptr noundef, i32 noundef, ptr noundef, ptr noundef) local_unnamed_addr #4

declare float @randnf(...) local_unnamed_addr #4

; Function Attrs: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare double @llvm.fmuladd.f64(double, double, double) #7

declare i32 @fec_decode_soft(ptr noundef, i32 noundef, ptr noundef, ptr noundef) local_unnamed_addr #4

declare i32 @fec_destroy(ptr noundef) local_unnamed_addr #4

; Function Attrs: mustprogress nocallback nofree nosync nounwind willreturn
declare void @llvm.stackrestore.p0(ptr) #6

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

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

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

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

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 = { nofree nounwind "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 "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 = { inlinehint mustprogress nofree nounwind willreturn memory(read) uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { noreturn nounwind "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 #6 = { mustprogress nocallback nofree nosync nounwind willreturn }
attributes #7 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #8 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #9 = { nounwind }
attributes #10 = { nounwind willreturn memory(read) }
attributes #11 = { cold nounwind }
attributes #12 = { noreturn 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 = distinct !{!5, !6}
!6 = !{!"llvm.loop.mustprogress"}
!7 = !{!8, !8, i64 0}
!8 = !{!"any pointer", !9, i64 0}
!9 = !{!"omnipotent char", !10, i64 0}
!10 = !{!"Simple C/C++ TBAA"}
!11 = !{!9, !9, i64 0}
!12 = distinct !{!12, !6}
!13 = distinct !{!13, !6, !14, !15}
!14 = !{!"llvm.loop.isvectorized", i32 1}
!15 = !{!"llvm.loop.unroll.runtime.disable"}
!16 = distinct !{!16, !6, !14}
!17 = distinct !{!17, !6, !14, !15}
!18 = distinct !{!18, !6, !14, !15}
!19 = distinct !{!19, !6}
!20 = distinct !{!20, !6, !14}
!21 = distinct !{!21, !6}
!22 = distinct !{!22, !6}
!23 = distinct !{!23, !6}
!24 = distinct !{!24, !6}
!25 = distinct !{!25, !6}
!26 = distinct !{!26, !6, !14, !15}
!27 = distinct !{!27, !6, !15, !14}


; Effective O3 passes: CorrelatedValuePropagationPass,DSEPass,EarlyCSEPass,GVNPass,GlobalDCEPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferAlignmentPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopLoadEliminationPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,LoopVectorizePass,PostOrderFunctionAttrsPass,ReassociatePass,SCCPPass,SLPVectorizerPass,SROAPass,SimplifyCFGPass,TailCallElimPass