; LLVM IR from jgaeddert/liquid-dsp :: sandbox (fec_spc2216_test)

; 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.3 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [40 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [45 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [40 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [50 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.29 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.31 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.32 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.33 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.34 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.36 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.37 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.38 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.39 = external hidden unnamed_addr constant [72 x i8], align 1
@.str.40 = external hidden unnamed_addr constant [72 x i8], align 1
@.str.41 = external hidden unnamed_addr constant [73 x i8], align 1
@.str.42 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.43 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.44 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.45 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.46 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.47 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.48 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.49 = external hidden unnamed_addr constant [7 x i8], align 1

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

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

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

; Function Attrs: nounwind uwtable
define dso_local i32 @main(i32 noundef %0, ptr noundef %1) #2 {
  %3 = alloca i32, align 4
  %4 = alloca i32, align 4
  %5 = alloca ptr, align 8
  %6 = alloca i32, align 4
  %7 = alloca [61 x i8], align 16
  %8 = alloca [32 x i8], align 16
  %9 = alloca [61 x i8], align 16
  %10 = alloca [61 x i8], align 16
  %11 = alloca [32 x i8], align 16
  %12 = alloca i32, align 4
  %13 = alloca [488 x i8], align 16
  %14 = alloca i8, align 1
  %15 = alloca i8, align 1
  %16 = alloca i32, align 4
  %17 = alloca float, align 4
  %18 = alloca float, align 4
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca [488 x { float, float }], align 16
  %22 = alloca ptr, align 8
  %23 = alloca i64, align 8
  %24 = alloca i64, align 8
  %25 = alloca i32, align 4
  %26 = alloca [32 x i8], align 16
  %27 = alloca [61 x i8], align 16
  %28 = alloca [61 x i8], align 16
  %29 = alloca [488 x i8], align 16
  %30 = alloca [32 x i8], align 16
  %31 = alloca [32 x i8], align 16
  %32 = alloca float, align 4
  %33 = alloca i32, align 4
  %34 = alloca float, align 4
  %35 = alloca float, align 4
  %36 = alloca i32, align 4
  %37 = alloca i32, align 4
  %38 = alloca float, align 4
  %39 = alloca ptr, align 8
  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
  %40 = call i64 @time(ptr noundef null) #7
  %41 = trunc i64 %40 to i32
  call void @srand(i32 noundef %41) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #7
  call void @llvm.lifetime.start.p0(i64 61, ptr %7) #7
  %42 = getelementptr inbounds [61 x i8], ptr %7, i64 0, i64 0
  call void @llvm.memset.p0.i64(ptr align 16 %42, i8 0, i64 61, i1 false)
  %43 = getelementptr inbounds [61 x i8], ptr %7, i64 0, i64 3
  store i8 8, ptr %43, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 32, ptr %8) #7
  call void @llvm.lifetime.start.p0(i64 61, ptr %9) #7
  call void @llvm.lifetime.start.p0(i64 61, ptr %10) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %11) #7
  store i32 0, ptr %6, align 4, !tbaa !5
  br label %44

44:                                               ; preds = %86, %2
  %45 = load i32, ptr %6, align 4, !tbaa !5
  %46 = icmp ult i32 %45, 32
  br i1 %46, label %47, label %89

47:                                               ; preds = %44
  %48 = load i32, ptr %6, align 4, !tbaa !5
  %49 = icmp ult i32 %48, 16
  br i1 %49, label %50, label %62

50:                                               ; preds = %47
  %51 = load i32, ptr %6, align 4, !tbaa !5
  %52 = urem i32 %51, 2
  %53 = icmp eq i32 %52, 0
  br i1 %53, label %54, label %62

54:                                               ; preds = %50
  %55 = load i32, ptr %6, align 4, !tbaa !5
  %56 = udiv i32 %55, 2
  %57 = ashr i32 255, %56
  %58 = trunc i32 %57 to i8
  %59 = load i32, ptr %6, align 4, !tbaa !5
  %60 = zext i32 %59 to i64
  %61 = getelementptr inbounds [32 x i8], ptr %8, i64 0, i64 %60
  store i8 %58, ptr %61, align 1, !tbaa !11
  br label %85

62:                                               ; preds = %50, %47
  %63 = load i32, ptr %6, align 4, !tbaa !5
  %64 = icmp uge i32 %63, 16
  br i1 %64, label %65, label %80

65:                                               ; preds = %62
  %66 = load i32, ptr %6, align 4, !tbaa !5
  %67 = urem i32 %66, 2
  %68 = icmp eq i32 %67, 1
  br i1 %68, label %69, label %80

69:                                               ; preds = %65
  %70 = load i32, ptr %6, align 4, !tbaa !5
  %71 = sub i32 %70, 16
  %72 = sub i32 %71, 1
  %73 = udiv i32 %72, 2
  %74 = sub i32 7, %73
  %75 = shl i32 1, %74
  %76 = trunc i32 %75 to i8
  %77 = load i32, ptr %6, align 4, !tbaa !5
  %78 = zext i32 %77 to i64
  %79 = getelementptr inbounds [32 x i8], ptr %8, i64 0, i64 %78
  store i8 %76, ptr %79, align 1, !tbaa !11
  br label %84

80:                                               ; preds = %65, %62
  %81 = load i32, ptr %6, align 4, !tbaa !5
  %82 = zext i32 %81 to i64
  %83 = getelementptr inbounds [32 x i8], ptr %8, i64 0, i64 %82
  store i8 0, ptr %83, align 1, !tbaa !11
  br label %84

84:                                               ; preds = %80, %69
  br label %85

85:                                               ; preds = %84, %54
  br label %86

86:                                               ; preds = %85
  %87 = load i32, ptr %6, align 4, !tbaa !5
  %88 = add i32 %87, 1
  store i32 %88, ptr %6, align 4, !tbaa !5
  br label %44, !llvm.loop !12

89:                                               ; preds = %44
  %90 = call i32 (ptr, ...) @printf(ptr noundef @.str.3)
  %91 = getelementptr inbounds [32 x i8], ptr %8, i64 0, i64 0
  call void @spc2216_print_decoded(ptr noundef %91)
  %92 = getelementptr inbounds [32 x i8], ptr %8, i64 0, i64 0
  %93 = getelementptr inbounds [61 x i8], ptr %9, i64 0, i64 0
  call void @spc2216_encode(ptr noundef %92, ptr noundef %93)
  %94 = call i32 (ptr, ...) @printf(ptr noundef @.str.4)
  %95 = getelementptr inbounds [61 x i8], ptr %9, i64 0, i64 0
  call void @spc2216_print_encoded(ptr noundef %95)
  %96 = call i32 (ptr, ...) @printf(ptr noundef @.str.5)
  %97 = getelementptr inbounds [61 x i8], ptr %7, i64 0, i64 0
  call void @spc2216_print_encoded(ptr noundef %97)
  store i32 0, ptr %6, align 4, !tbaa !5
  br label %98

98:                                               ; preds = %117, %89
  %99 = load i32, ptr %6, align 4, !tbaa !5
  %100 = icmp ult i32 %99, 61
  br i1 %100, label %101, label %120

101:                                              ; preds = %98
  %102 = load i32, ptr %6, align 4, !tbaa !5
  %103 = zext i32 %102 to i64
  %104 = getelementptr inbounds [61 x i8], ptr %9, i64 0, i64 %103
  %105 = load i8, ptr %104, align 1, !tbaa !11
  %106 = zext i8 %105 to i32
  %107 = load i32, ptr %6, align 4, !tbaa !5
  %108 = zext i32 %107 to i64
  %109 = getelementptr inbounds [61 x i8], ptr %7, i64 0, i64 %108
  %110 = load i8, ptr %109, align 1, !tbaa !11
  %111 = zext i8 %110 to i32
  %112 = xor i32 %106, %111
  %113 = trunc i32 %112 to i8
  %114 = load i32, ptr %6, align 4, !tbaa !5
  %115 = zext i32 %114 to i64
  %116 = getelementptr inbounds [61 x i8], ptr %10, i64 0, i64 %115
  store i8 %113, ptr %116, align 1, !tbaa !11
  br label %117

117:                                              ; preds = %101
  %118 = load i32, ptr %6, align 4, !tbaa !5
  %119 = add i32 %118, 1
  store i32 %119, ptr %6, align 4, !tbaa !5
  br label %98, !llvm.loop !14

120:                                              ; preds = %98
  %121 = call i32 (ptr, ...) @printf(ptr noundef @.str.6)
  %122 = getelementptr inbounds [61 x i8], ptr %10, i64 0, i64 0
  call void @spc2216_print_encoded(ptr noundef %122)
  %123 = getelementptr inbounds [61 x i8], ptr %10, i64 0, i64 0
  %124 = getelementptr inbounds [32 x i8], ptr %11, i64 0, i64 0
  call void @spc2216_decode(ptr noundef %123, ptr noundef %124)
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #7
  %125 = getelementptr inbounds [32 x i8], ptr %8, i64 0, i64 0
  %126 = getelementptr inbounds [32 x i8], ptr %11, i64 0, i64 0
  %127 = call i32 @count_bit_errors_array(ptr noundef %125, ptr noundef %126, i32 noundef 32)
  store i32 %127, ptr %12, align 4, !tbaa !5
  %128 = load i32, ptr %12, align 4, !tbaa !5
  %129 = call i32 (ptr, ...) @printf(ptr noundef @.str.7, i32 noundef %128)
  call void @llvm.lifetime.start.p0(i64 488, ptr %13) #7
  call void @llvm.lifetime.start.p0(i64 1, ptr %14) #7
  store i8 64, ptr %14, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 1, ptr %15) #7
  store i8 -64, ptr %15, align 1, !tbaa !11
  store i32 0, ptr %6, align 4, !tbaa !5
  br label %130

130:                                              ; preds = %302, %120
  %131 = load i32, ptr %6, align 4, !tbaa !5
  %132 = icmp ult i32 %131, 61
  br i1 %132, label %133, label %305

133:                                              ; preds = %130
  %134 = load i32, ptr %6, align 4, !tbaa !5
  %135 = zext i32 %134 to i64
  %136 = getelementptr inbounds [61 x i8], ptr %10, i64 0, i64 %135
  %137 = load i8, ptr %136, align 1, !tbaa !11
  %138 = zext i8 %137 to i32
  %139 = and i32 %138, 128
  %140 = icmp ne i32 %139, 0
  br i1 %140, label %141, label %144

141:                                              ; preds = %133
  %142 = load i8, ptr %15, align 1, !tbaa !11
  %143 = zext i8 %142 to i32
  br label %147

144:                                              ; preds = %133
  %145 = load i8, ptr %14, align 1, !tbaa !11
  %146 = zext i8 %145 to i32
  br label %147

147:                                              ; preds = %144, %141
  %148 = phi i32 [ %143, %141 ], [ %146, %144 ]
  %149 = trunc i32 %148 to i8
  %150 = load i32, ptr %6, align 4, !tbaa !5
  %151 = mul i32 8, %150
  %152 = add i32 %151, 0
  %153 = zext i32 %152 to i64
  %154 = getelementptr inbounds [488 x i8], ptr %13, i64 0, i64 %153
  store i8 %149, ptr %154, align 1, !tbaa !11
  %155 = load i32, ptr %6, align 4, !tbaa !5
  %156 = zext i32 %155 to i64
  %157 = getelementptr inbounds [61 x i8], ptr %10, i64 0, i64 %156
  %158 = load i8, ptr %157, align 1, !tbaa !11
  %159 = zext i8 %158 to i32
  %160 = and i32 %159, 64
  %161 = icmp ne i32 %160, 0
  br i1 %161, label %162, label %165

162:                                              ; preds = %147
  %163 = load i8, ptr %15, align 1, !tbaa !11
  %164 = zext i8 %163 to i32
  br label %168

165:                                              ; preds = %147
  %166 = load i8, ptr %14, align 1, !tbaa !11
  %167 = zext i8 %166 to i32
  br label %168

168:                                              ; preds = %165, %162
  %169 = phi i32 [ %164, %162 ], [ %167, %165 ]
  %170 = trunc i32 %169 to i8
  %171 = load i32, ptr %6, align 4, !tbaa !5
  %172 = mul i32 8, %171
  %173 = add i32 %172, 1
  %174 = zext i32 %173 to i64
  %175 = getelementptr inbounds [488 x i8], ptr %13, i64 0, i64 %174
  store i8 %170, ptr %175, align 1, !tbaa !11
  %176 = load i32, ptr %6, align 4, !tbaa !5
  %177 = zext i32 %176 to i64
  %178 = getelementptr inbounds [61 x i8], ptr %10, i64 0, i64 %177
  %179 = load i8, ptr %178, align 1, !tbaa !11
  %180 = zext i8 %179 to i32
  %181 = and i32 %180, 32
  %182 = icmp ne i32 %181, 0
  br i1 %182, label %183, label %186

183:                                              ; preds = %168
  %184 = load i8, ptr %15, align 1, !tbaa !11
  %185 = zext i8 %184 to i32
  br label %189

186:                                              ; preds = %168
  %187 = load i8, ptr %14, align 1, !tbaa !11
  %188 = zext i8 %187 to i32
  br label %189

189:                                              ; preds = %186, %183
  %190 = phi i32 [ %185, %183 ], [ %188, %186 ]
  %191 = trunc i32 %190 to i8
  %192 = load i32, ptr %6, align 4, !tbaa !5
  %193 = mul i32 8, %192
  %194 = add i32 %193, 2
  %195 = zext i32 %194 to i64
  %196 = getelementptr inbounds [488 x i8], ptr %13, i64 0, i64 %195
  store i8 %191, ptr %196, align 1, !tbaa !11
  %197 = load i32, ptr %6, align 4, !tbaa !5
  %198 = zext i32 %197 to i64
  %199 = getelementptr inbounds [61 x i8], ptr %10, i64 0, i64 %198
  %200 = load i8, ptr %199, align 1, !tbaa !11
  %201 = zext i8 %200 to i32
  %202 = and i32 %201, 16
  %203 = icmp ne i32 %202, 0
  br i1 %203, label %204, label %207

204:                                              ; preds = %189
  %205 = load i8, ptr %15, align 1, !tbaa !11
  %206 = zext i8 %205 to i32
  br label %210

207:                                              ; preds = %189
  %208 = load i8, ptr %14, align 1, !tbaa !11
  %209 = zext i8 %208 to i32
  br label %210

210:                                              ; preds = %207, %204
  %211 = phi i32 [ %206, %204 ], [ %209, %207 ]
  %212 = trunc i32 %211 to i8
  %213 = load i32, ptr %6, align 4, !tbaa !5
  %214 = mul i32 8, %213
  %215 = add i32 %214, 3
  %216 = zext i32 %215 to i64
  %217 = getelementptr inbounds [488 x i8], ptr %13, i64 0, i64 %216
  store i8 %212, ptr %217, align 1, !tbaa !11
  %218 = load i32, ptr %6, align 4, !tbaa !5
  %219 = zext i32 %218 to i64
  %220 = getelementptr inbounds [61 x i8], ptr %10, i64 0, i64 %219
  %221 = load i8, ptr %220, align 1, !tbaa !11
  %222 = zext i8 %221 to i32
  %223 = and i32 %222, 8
  %224 = icmp ne i32 %223, 0
  br i1 %224, label %225, label %228

225:                                              ; preds = %210
  %226 = load i8, ptr %15, align 1, !tbaa !11
  %227 = zext i8 %226 to i32
  br label %231

228:                                              ; preds = %210
  %229 = load i8, ptr %14, align 1, !tbaa !11
  %230 = zext i8 %229 to i32
  br label %231

231:                                              ; preds = %228, %225
  %232 = phi i32 [ %227, %225 ], [ %230, %228 ]
  %233 = trunc i32 %232 to i8
  %234 = load i32, ptr %6, align 4, !tbaa !5
  %235 = mul i32 8, %234
  %236 = add i32 %235, 4
  %237 = zext i32 %236 to i64
  %238 = getelementptr inbounds [488 x i8], ptr %13, i64 0, i64 %237
  store i8 %233, ptr %238, align 1, !tbaa !11
  %239 = load i32, ptr %6, align 4, !tbaa !5
  %240 = zext i32 %239 to i64
  %241 = getelementptr inbounds [61 x i8], ptr %10, i64 0, i64 %240
  %242 = load i8, ptr %241, align 1, !tbaa !11
  %243 = zext i8 %242 to i32
  %244 = and i32 %243, 4
  %245 = icmp ne i32 %244, 0
  br i1 %245, label %246, label %249

246:                                              ; preds = %231
  %247 = load i8, ptr %15, align 1, !tbaa !11
  %248 = zext i8 %247 to i32
  br label %252

249:                                              ; preds = %231
  %250 = load i8, ptr %14, align 1, !tbaa !11
  %251 = zext i8 %250 to i32
  br label %252

252:                                              ; preds = %249, %246
  %253 = phi i32 [ %248, %246 ], [ %251, %249 ]
  %254 = trunc i32 %253 to i8
  %255 = load i32, ptr %6, align 4, !tbaa !5
  %256 = mul i32 8, %255
  %257 = add i32 %256, 5
  %258 = zext i32 %257 to i64
  %259 = getelementptr inbounds [488 x i8], ptr %13, i64 0, i64 %258
  store i8 %254, ptr %259, align 1, !tbaa !11
  %260 = load i32, ptr %6, align 4, !tbaa !5
  %261 = zext i32 %260 to i64
  %262 = getelementptr inbounds [61 x i8], ptr %10, i64 0, i64 %261
  %263 = load i8, ptr %262, align 1, !tbaa !11
  %264 = zext i8 %263 to i32
  %265 = and i32 %264, 2
  %266 = icmp ne i32 %265, 0
  br i1 %266, label %267, label %270

267:                                              ; preds = %252
  %268 = load i8, ptr %15, align 1, !tbaa !11
  %269 = zext i8 %268 to i32
  br label %273

270:                                              ; preds = %252
  %271 = load i8, ptr %14, align 1, !tbaa !11
  %272 = zext i8 %271 to i32
  br label %273

273:                                              ; preds = %270, %267
  %274 = phi i32 [ %269, %267 ], [ %272, %270 ]
  %275 = trunc i32 %274 to i8
  %276 = load i32, ptr %6, align 4, !tbaa !5
  %277 = mul i32 8, %276
  %278 = add i32 %277, 6
  %279 = zext i32 %278 to i64
  %280 = getelementptr inbounds [488 x i8], ptr %13, i64 0, i64 %279
  store i8 %275, ptr %280, align 1, !tbaa !11
  %281 = load i32, ptr %6, align 4, !tbaa !5
  %282 = zext i32 %281 to i64
  %283 = getelementptr inbounds [61 x i8], ptr %10, i64 0, i64 %282
  %284 = load i8, ptr %283, align 1, !tbaa !11
  %285 = zext i8 %284 to i32
  %286 = and i32 %285, 1
  %287 = icmp ne i32 %286, 0
  br i1 %287, label %288, label %291

288:                                              ; preds = %273
  %289 = load i8, ptr %15, align 1, !tbaa !11
  %290 = zext i8 %289 to i32
  br label %294

291:                                              ; preds = %273
  %292 = load i8, ptr %14, align 1, !tbaa !11
  %293 = zext i8 %292 to i32
  br label %294

294:                                              ; preds = %291, %288
  %295 = phi i32 [ %290, %288 ], [ %293, %291 ]
  %296 = trunc i32 %295 to i8
  %297 = load i32, ptr %6, align 4, !tbaa !5
  %298 = mul i32 8, %297
  %299 = add i32 %298, 7
  %300 = zext i32 %299 to i64
  %301 = getelementptr inbounds [488 x i8], ptr %13, i64 0, i64 %300
  store i8 %296, ptr %301, align 1, !tbaa !11
  br label %302

302:                                              ; preds = %294
  %303 = load i32, ptr %6, align 4, !tbaa !5
  %304 = add i32 %303, 1
  store i32 %304, ptr %6, align 4, !tbaa !5
  br label %130, !llvm.loop !15

305:                                              ; preds = %130
  store i32 0, ptr %6, align 4, !tbaa !5
  br label %306

306:                                              ; preds = %332, %305
  %307 = load i32, ptr %6, align 4, !tbaa !5
  %308 = icmp ult i32 %307, 366
  br i1 %308, label %309, label %335

309:                                              ; preds = %306
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #7
  %310 = load i32, ptr %6, align 4, !tbaa !5
  %311 = zext i32 %310 to i64
  %312 = getelementptr inbounds [488 x i8], ptr %13, i64 0, i64 %311
  %313 = load i8, ptr %312, align 1, !tbaa !11
  %314 = zext i8 %313 to i32
  %315 = sitofp i32 %314 to float
  %316 = call float (...) @randnf()
  %317 = call float @llvm.fmuladd.f32(float 3.000000e+01, float %316, float %315)
  %318 = fptosi float %317 to i32
  store i32 %318, ptr %16, align 4, !tbaa !5
  %319 = load i32, ptr %16, align 4, !tbaa !5
  %320 = icmp slt i32 %319, 0
  br i1 %320, label %321, label %322

321:                                              ; preds = %309
  store i32 0, ptr %16, align 4, !tbaa !5
  br label %322

322:                                              ; preds = %321, %309
  %323 = load i32, ptr %16, align 4, !tbaa !5
  %324 = icmp sgt i32 %323, 255
  br i1 %324, label %325, label %326

325:                                              ; preds = %322
  store i32 255, ptr %16, align 4, !tbaa !5
  br label %326

326:                                              ; preds = %325, %322
  %327 = load i32, ptr %16, align 4, !tbaa !5
  %328 = trunc i32 %327 to i8
  %329 = load i32, ptr %6, align 4, !tbaa !5
  %330 = zext i32 %329 to i64
  %331 = getelementptr inbounds [488 x i8], ptr %13, i64 0, i64 %330
  store i8 %328, ptr %331, align 1, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #7
  br label %332

332:                                              ; preds = %326
  %333 = load i32, ptr %6, align 4, !tbaa !5
  %334 = add i32 %333, 1
  store i32 %334, ptr %6, align 4, !tbaa !5
  br label %306, !llvm.loop !16

335:                                              ; preds = %306
  %336 = getelementptr inbounds [32 x i8], ptr %11, i64 0, i64 0
  call void @llvm.memset.p0.i64(ptr align 16 %336, i8 0, i64 32, i1 false)
  %337 = getelementptr inbounds [488 x i8], ptr %13, i64 0, i64 0
  %338 = getelementptr inbounds [32 x i8], ptr %11, i64 0, i64 0
  call void @spc2216_decode_soft(ptr noundef %337, ptr noundef %338)
  %339 = getelementptr inbounds [32 x i8], ptr %8, i64 0, i64 0
  %340 = getelementptr inbounds [32 x i8], ptr %11, i64 0, i64 0
  %341 = call i32 @count_bit_errors_array(ptr noundef %339, ptr noundef %340, i32 noundef 32)
  store i32 %341, ptr %12, align 4, !tbaa !5
  %342 = load i32, ptr %12, align 4, !tbaa !5
  %343 = call i32 (ptr, ...) @printf(ptr noundef @.str.8, i32 noundef %342)
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #7
  store float -5.000000e+00, ptr %17, align 4, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #7
  store float 1.000000e+01, ptr %18, align 4, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #7
  store i32 31, ptr %19, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #7
  store i32 10000, ptr %20, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 3904, ptr %21) #7
  %344 = load i32, ptr %19, align 4, !tbaa !5
  %345 = zext i32 %344 to i64
  %346 = call ptr @llvm.stacksave.p0()
  store ptr %346, ptr %22, align 8
  %347 = alloca i32, i64 %345, align 16
  store i64 %345, ptr %23, align 8
  %348 = load i32, ptr %19, align 4, !tbaa !5
  %349 = zext i32 %348 to i64
  %350 = alloca i32, i64 %349, align 16
  store i64 %349, ptr %24, align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #7
  store i32 61, ptr %25, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr %26) #7
  call void @llvm.lifetime.start.p0(i64 61, ptr %27) #7
  call void @llvm.lifetime.start.p0(i64 61, ptr %28) #7
  call void @llvm.lifetime.start.p0(i64 488, ptr %29) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %30) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %31) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #7
  %351 = load float, ptr %18, align 4, !tbaa !17
  %352 = load float, ptr %17, align 4, !tbaa !17
  %353 = fsub float %351, %352
  %354 = load i32, ptr %19, align 4, !tbaa !5
  %355 = sub i32 %354, 1
  %356 = uitofp i32 %355 to float
  %357 = fdiv float %353, %356
  store float %357, ptr %32, align 4, !tbaa !17
  %358 = call i32 (ptr, ...) @printf(ptr noundef @.str.9, ptr noundef @.str.10, ptr noundef @.str.11, ptr noundef @.str.12, ptr noundef @.str.13, ptr noundef @.str.14, ptr noundef @.str.15, ptr noundef @.str.16, ptr noundef @.str.17)
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #7
  store i32 0, ptr %33, align 4, !tbaa !5
  br label %359

359:                                              ; preds = %840, %335
  %360 = load i32, ptr %33, align 4, !tbaa !5
  %361 = load i32, ptr %19, align 4, !tbaa !5
  %362 = icmp ult i32 %360, %361
  br i1 %362, label %363, label %843

363:                                              ; preds = %359
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #7
  %364 = load float, ptr %17, align 4, !tbaa !17
  %365 = load i32, ptr %33, align 4, !tbaa !5
  %366 = uitofp i32 %365 to float
  %367 = load float, ptr %32, align 4, !tbaa !17
  %368 = call float @llvm.fmuladd.f32(float %366, float %367, float %364)
  store float %368, ptr %34, align 4, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #7
  %369 = load float, ptr %34, align 4, !tbaa !17
  %370 = fneg float %369
  %371 = fdiv float %370, 2.000000e+01
  %372 = call float @powf(float noundef 1.000000e+01, float noundef %371) #7
  store float %372, ptr %35, align 4, !tbaa !17
  %373 = load i32, ptr %33, align 4, !tbaa !5
  %374 = zext i32 %373 to i64
  %375 = getelementptr inbounds i32, ptr %347, i64 %374
  store i32 0, ptr %375, align 4, !tbaa !5
  %376 = load i32, ptr %33, align 4, !tbaa !5
  %377 = zext i32 %376 to i64
  %378 = getelementptr inbounds i32, ptr %350, i64 %377
  store i32 0, ptr %378, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #7
  store i32 0, ptr %36, align 4, !tbaa !5
  br label %379

379:                                              ; preds = %791, %363
  %380 = load i32, ptr %36, align 4, !tbaa !5
  %381 = load i32, ptr %20, align 4, !tbaa !5
  %382 = icmp ult i32 %380, %381
  br i1 %382, label %383, label %794

383:                                              ; preds = %379
  store i32 0, ptr %6, align 4, !tbaa !5
  br label %384

384:                                              ; preds = %394, %383
  %385 = load i32, ptr %6, align 4, !tbaa !5
  %386 = icmp ult i32 %385, 32
  br i1 %386, label %387, label %397

387:                                              ; preds = %384
  %388 = call i32 @rand() #7
  %389 = and i32 %388, 255
  %390 = trunc i32 %389 to i8
  %391 = load i32, ptr %6, align 4, !tbaa !5
  %392 = zext i32 %391 to i64
  %393 = getelementptr inbounds [32 x i8], ptr %26, i64 0, i64 %392
  store i8 %390, ptr %393, align 1, !tbaa !11
  br label %394

394:                                              ; preds = %387
  %395 = load i32, ptr %6, align 4, !tbaa !5
  %396 = add i32 %395, 1
  store i32 %396, ptr %6, align 4, !tbaa !5
  br label %384, !llvm.loop !19

397:                                              ; preds = %384
  %398 = getelementptr inbounds [32 x i8], ptr %26, i64 0, i64 0
  %399 = getelementptr inbounds [61 x i8], ptr %27, i64 0, i64 0
  call void @spc2216_encode(ptr noundef %398, ptr noundef %399)
  store i32 0, ptr %6, align 4, !tbaa !5
  br label %400

400:                                              ; preds = %533, %397
  %401 = load i32, ptr %6, align 4, !tbaa !5
  %402 = load i32, ptr %25, align 4, !tbaa !5
  %403 = icmp ult i32 %401, %402
  br i1 %403, label %404, label %536

404:                                              ; preds = %400
  %405 = load i32, ptr %6, align 4, !tbaa !5
  %406 = zext i32 %405 to i64
  %407 = getelementptr inbounds [61 x i8], ptr %27, i64 0, i64 %406
  %408 = load i8, ptr %407, align 1, !tbaa !11
  %409 = zext i8 %408 to i32
  %410 = and i32 %409, 128
  %411 = icmp ne i32 %410, 0
  %412 = zext i1 %411 to i64
  %413 = select i1 %411, float 1.000000e+00, float -1.000000e+00
  %414 = load i32, ptr %6, align 4, !tbaa !5
  %415 = mul i32 8, %414
  %416 = add i32 %415, 0
  %417 = zext i32 %416 to i64
  %418 = getelementptr inbounds [488 x { float, float }], ptr %21, i64 0, i64 %417
  %419 = getelementptr inbounds { float, float }, ptr %418, i32 0, i32 0
  %420 = getelementptr inbounds { float, float }, ptr %418, i32 0, i32 1
  store float %413, ptr %419, align 8
  store float 0.000000e+00, ptr %420, align 4
  %421 = load i32, ptr %6, align 4, !tbaa !5
  %422 = zext i32 %421 to i64
  %423 = getelementptr inbounds [61 x i8], ptr %27, i64 0, i64 %422
  %424 = load i8, ptr %423, align 1, !tbaa !11
  %425 = zext i8 %424 to i32
  %426 = and i32 %425, 64
  %427 = icmp ne i32 %426, 0
  %428 = zext i1 %427 to i64
  %429 = select i1 %427, float 1.000000e+00, float -1.000000e+00
  %430 = load i32, ptr %6, align 4, !tbaa !5
  %431 = mul i32 8, %430
  %432 = add i32 %431, 1
  %433 = zext i32 %432 to i64
  %434 = getelementptr inbounds [488 x { float, float }], ptr %21, i64 0, i64 %433
  %435 = getelementptr inbounds { float, float }, ptr %434, i32 0, i32 0
  %436 = getelementptr inbounds { float, float }, ptr %434, i32 0, i32 1
  store float %429, ptr %435, align 8
  store float 0.000000e+00, ptr %436, align 4
  %437 = load i32, ptr %6, align 4, !tbaa !5
  %438 = zext i32 %437 to i64
  %439 = getelementptr inbounds [61 x i8], ptr %27, i64 0, i64 %438
  %440 = load i8, ptr %439, align 1, !tbaa !11
  %441 = zext i8 %440 to i32
  %442 = and i32 %441, 32
  %443 = icmp ne i32 %442, 0
  %444 = zext i1 %443 to i64
  %445 = select i1 %443, float 1.000000e+00, float -1.000000e+00
  %446 = load i32, ptr %6, align 4, !tbaa !5
  %447 = mul i32 8, %446
  %448 = add i32 %447, 2
  %449 = zext i32 %448 to i64
  %450 = getelementptr inbounds [488 x { float, float }], ptr %21, i64 0, i64 %449
  %451 = getelementptr inbounds { float, float }, ptr %450, i32 0, i32 0
  %452 = getelementptr inbounds { float, float }, ptr %450, i32 0, i32 1
  store float %445, ptr %451, align 8
  store float 0.000000e+00, ptr %452, align 4
  %453 = load i32, ptr %6, align 4, !tbaa !5
  %454 = zext i32 %453 to i64
  %455 = getelementptr inbounds [61 x i8], ptr %27, i64 0, i64 %454
  %456 = load i8, ptr %455, align 1, !tbaa !11
  %457 = zext i8 %456 to i32
  %458 = and i32 %457, 16
  %459 = icmp ne i32 %458, 0
  %460 = zext i1 %459 to i64
  %461 = select i1 %459, float 1.000000e+00, float -1.000000e+00
  %462 = load i32, ptr %6, align 4, !tbaa !5
  %463 = mul i32 8, %462
  %464 = add i32 %463, 3
  %465 = zext i32 %464 to i64
  %466 = getelementptr inbounds [488 x { float, float }], ptr %21, i64 0, i64 %465
  %467 = getelementptr inbounds { float, float }, ptr %466, i32 0, i32 0
  %468 = getelementptr inbounds { float, float }, ptr %466, i32 0, i32 1
  store float %461, ptr %467, align 8
  store float 0.000000e+00, ptr %468, align 4
  %469 = load i32, ptr %6, align 4, !tbaa !5
  %470 = zext i32 %469 to i64
  %471 = getelementptr inbounds [61 x i8], ptr %27, i64 0, i64 %470
  %472 = load i8, ptr %471, align 1, !tbaa !11
  %473 = zext i8 %472 to i32
  %474 = and i32 %473, 8
  %475 = icmp ne i32 %474, 0
  %476 = zext i1 %475 to i64
  %477 = select i1 %475, float 1.000000e+00, float -1.000000e+00
  %478 = load i32, ptr %6, align 4, !tbaa !5
  %479 = mul i32 8, %478
  %480 = add i32 %479, 4
  %481 = zext i32 %480 to i64
  %482 = getelementptr inbounds [488 x { float, float }], ptr %21, i64 0, i64 %481
  %483 = getelementptr inbounds { float, float }, ptr %482, i32 0, i32 0
  %484 = getelementptr inbounds { float, float }, ptr %482, i32 0, i32 1
  store float %477, ptr %483, align 8
  store float 0.000000e+00, ptr %484, align 4
  %485 = load i32, ptr %6, align 4, !tbaa !5
  %486 = zext i32 %485 to i64
  %487 = getelementptr inbounds [61 x i8], ptr %27, i64 0, i64 %486
  %488 = load i8, ptr %487, align 1, !tbaa !11
  %489 = zext i8 %488 to i32
  %490 = and i32 %489, 4
  %491 = icmp ne i32 %490, 0
  %492 = zext i1 %491 to i64
  %493 = select i1 %491, float 1.000000e+00, float -1.000000e+00
  %494 = load i32, ptr %6, align 4, !tbaa !5
  %495 = mul i32 8, %494
  %496 = add i32 %495, 5
  %497 = zext i32 %496 to i64
  %498 = getelementptr inbounds [488 x { float, float }], ptr %21, i64 0, i64 %497
  %499 = getelementptr inbounds { float, float }, ptr %498, i32 0, i32 0
  %500 = getelementptr inbounds { float, float }, ptr %498, i32 0, i32 1
  store float %493, ptr %499, align 8
  store float 0.000000e+00, ptr %500, align 4
  %501 = load i32, ptr %6, align 4, !tbaa !5
  %502 = zext i32 %501 to i64
  %503 = getelementptr inbounds [61 x i8], ptr %27, i64 0, i64 %502
  %504 = load i8, ptr %503, align 1, !tbaa !11
  %505 = zext i8 %504 to i32
  %506 = and i32 %505, 2
  %507 = icmp ne i32 %506, 0
  %508 = zext i1 %507 to i64
  %509 = select i1 %507, float 1.000000e+00, float -1.000000e+00
  %510 = load i32, ptr %6, align 4, !tbaa !5
  %511 = mul i32 8, %510
  %512 = add i32 %511, 6
  %513 = zext i32 %512 to i64
  %514 = getelementptr inbounds [488 x { float, float }], ptr %21, i64 0, i64 %513
  %515 = getelementptr inbounds { float, float }, ptr %514, i32 0, i32 0
  %516 = getelementptr inbounds { float, float }, ptr %514, i32 0, i32 1
  store float %509, ptr %515, align 8
  store float 0.000000e+00, ptr %516, align 4
  %517 = load i32, ptr %6, align 4, !tbaa !5
  %518 = zext i32 %517 to i64
  %519 = getelementptr inbounds [61 x i8], ptr %27, i64 0, i64 %518
  %520 = load i8, ptr %519, align 1, !tbaa !11
  %521 = zext i8 %520 to i32
  %522 = and i32 %521, 1
  %523 = icmp ne i32 %522, 0
  %524 = zext i1 %523 to i64
  %525 = select i1 %523, float 1.000000e+00, float -1.000000e+00
  %526 = load i32, ptr %6, align 4, !tbaa !5
  %527 = mul i32 8, %526
  %528 = add i32 %527, 7
  %529 = zext i32 %528 to i64
  %530 = getelementptr inbounds [488 x { float, float }], ptr %21, i64 0, i64 %529
  %531 = getelementptr inbounds { float, float }, ptr %530, i32 0, i32 0
  %532 = getelementptr inbounds { float, float }, ptr %530, i32 0, i32 1
  store float %525, ptr %531, align 8
  store float 0.000000e+00, ptr %532, align 4
  br label %533

533:                                              ; preds = %404
  %534 = load i32, ptr %6, align 4, !tbaa !5
  %535 = add i32 %534, 1
  store i32 %535, ptr %6, align 4, !tbaa !5
  br label %400, !llvm.loop !20

536:                                              ; preds = %400
  store i32 0, ptr %6, align 4, !tbaa !5
  br label %537

537:                                              ; preds = %570, %536
  %538 = load i32, ptr %6, align 4, !tbaa !5
  %539 = load i32, ptr %25, align 4, !tbaa !5
  %540 = mul i32 8, %539
  %541 = icmp ult i32 %538, %540
  br i1 %541, label %542, label %573

542:                                              ; preds = %537
  %543 = load float, ptr %35, align 4, !tbaa !17
  %544 = call float (...) @randnf()
  %545 = call float (...) @randf()
  %546 = fmul float 0.000000e+00, %545
  %547 = fmul float 1.000000e+00, %545
  %548 = fadd float %544, %546
  %549 = fmul float %543, %548
  %550 = fmul float %543, %547
  %551 = fpext float %549 to double
  %552 = fpext float %550 to double
  %553 = fmul double %551, 0x3FE6A09E667F3BCD
  %554 = fmul double %552, 0x3FE6A09E667F3BCD
  %555 = load i32, ptr %6, align 4, !tbaa !5
  %556 = zext i32 %555 to i64
  %557 = getelementptr inbounds [488 x { float, float }], ptr %21, i64 0, i64 %556
  %558 = getelementptr inbounds { float, float }, ptr %557, i32 0, i32 0
  %559 = load float, ptr %558, align 8
  %560 = getelementptr inbounds { float, float }, ptr %557, i32 0, i32 1
  %561 = load float, ptr %560, align 4
  %562 = fpext float %559 to double
  %563 = fpext float %561 to double
  %564 = fadd double %562, %553
  %565 = fadd double %563, %554
  %566 = fptrunc double %564 to float
  %567 = fptrunc double %565 to float
  %568 = getelementptr inbounds { float, float }, ptr %557, i32 0, i32 0
  %569 = getelementptr inbounds { float, float }, ptr %557, i32 0, i32 1
  store float %566, ptr %568, align 8
  store float %567, ptr %569, align 4
  br label %570

570:                                              ; preds = %542
  %571 = load i32, ptr %6, align 4, !tbaa !5
  %572 = add i32 %571, 1
  store i32 %572, ptr %6, align 4, !tbaa !5
  br label %537, !llvm.loop !21

573:                                              ; preds = %537
  store i32 0, ptr %6, align 4, !tbaa !5
  br label %574

574:                                              ; preds = %734, %573
  %575 = load i32, ptr %6, align 4, !tbaa !5
  %576 = load i32, ptr %25, align 4, !tbaa !5
  %577 = icmp ult i32 %575, %576
  br i1 %577, label %578, label %737

578:                                              ; preds = %574
  %579 = load i32, ptr %6, align 4, !tbaa !5
  %580 = zext i32 %579 to i64
  %581 = getelementptr inbounds [61 x i8], ptr %28, i64 0, i64 %580
  store i8 0, ptr %581, align 1, !tbaa !11
  %582 = load i32, ptr %6, align 4, !tbaa !5
  %583 = mul i32 8, %582
  %584 = add i32 %583, 0
  %585 = zext i32 %584 to i64
  %586 = getelementptr inbounds [488 x { float, float }], ptr %21, i64 0, i64 %585
  %587 = getelementptr inbounds { float, float }, ptr %586, i32 0, i32 0
  %588 = load float, ptr %587, align 8
  %589 = getelementptr inbounds { float, float }, ptr %586, i32 0, i32 1
  %590 = load float, ptr %589, align 4
  %591 = fcmp ogt float %588, 0.000000e+00
  %592 = zext i1 %591 to i64
  %593 = select i1 %591, i32 128, i32 0
  %594 = load i32, ptr %6, align 4, !tbaa !5
  %595 = zext i32 %594 to i64
  %596 = getelementptr inbounds [61 x i8], ptr %28, i64 0, i64 %595
  %597 = load i8, ptr %596, align 1, !tbaa !11
  %598 = zext i8 %597 to i32
  %599 = or i32 %598, %593
  %600 = trunc i32 %599 to i8
  store i8 %600, ptr %596, align 1, !tbaa !11
  %601 = load i32, ptr %6, align 4, !tbaa !5
  %602 = mul i32 8, %601
  %603 = add i32 %602, 1
  %604 = zext i32 %603 to i64
  %605 = getelementptr inbounds [488 x { float, float }], ptr %21, i64 0, i64 %604
  %606 = getelementptr inbounds { float, float }, ptr %605, i32 0, i32 0
  %607 = load float, ptr %606, align 8
  %608 = getelementptr inbounds { float, float }, ptr %605, i32 0, i32 1
  %609 = load float, ptr %608, align 4
  %610 = fcmp ogt float %607, 0.000000e+00
  %611 = zext i1 %610 to i64
  %612 = select i1 %610, i32 64, i32 0
  %613 = load i32, ptr %6, align 4, !tbaa !5
  %614 = zext i32 %613 to i64
  %615 = getelementptr inbounds [61 x i8], ptr %28, i64 0, i64 %614
  %616 = load i8, ptr %615, align 1, !tbaa !11
  %617 = zext i8 %616 to i32
  %618 = or i32 %617, %612
  %619 = trunc i32 %618 to i8
  store i8 %619, ptr %615, align 1, !tbaa !11
  %620 = load i32, ptr %6, align 4, !tbaa !5
  %621 = mul i32 8, %620
  %622 = add i32 %621, 2
  %623 = zext i32 %622 to i64
  %624 = getelementptr inbounds [488 x { float, float }], ptr %21, i64 0, i64 %623
  %625 = getelementptr inbounds { float, float }, ptr %624, i32 0, i32 0
  %626 = load float, ptr %625, align 8
  %627 = getelementptr inbounds { float, float }, ptr %624, i32 0, i32 1
  %628 = load float, ptr %627, align 4
  %629 = fcmp ogt float %626, 0.000000e+00
  %630 = zext i1 %629 to i64
  %631 = select i1 %629, i32 32, i32 0
  %632 = load i32, ptr %6, align 4, !tbaa !5
  %633 = zext i32 %632 to i64
  %634 = getelementptr inbounds [61 x i8], ptr %28, i64 0, i64 %633
  %635 = load i8, ptr %634, align 1, !tbaa !11
  %636 = zext i8 %635 to i32
  %637 = or i32 %636, %631
  %638 = trunc i32 %637 to i8
  store i8 %638, ptr %634, align 1, !tbaa !11
  %639 = load i32, ptr %6, align 4, !tbaa !5
  %640 = mul i32 8, %639
  %641 = add i32 %640, 3
  %642 = zext i32 %641 to i64
  %643 = getelementptr inbounds [488 x { float, float }], ptr %21, i64 0, i64 %642
  %644 = getelementptr inbounds { float, float }, ptr %643, i32 0, i32 0
  %645 = load float, ptr %644, align 8
  %646 = getelementptr inbounds { float, float }, ptr %643, i32 0, i32 1
  %647 = load float, ptr %646, align 4
  %648 = fcmp ogt float %645, 0.000000e+00
  %649 = zext i1 %648 to i64
  %650 = select i1 %648, i32 16, i32 0
  %651 = load i32, ptr %6, align 4, !tbaa !5
  %652 = zext i32 %651 to i64
  %653 = getelementptr inbounds [61 x i8], ptr %28, i64 0, i64 %652
  %654 = load i8, ptr %653, align 1, !tbaa !11
  %655 = zext i8 %654 to i32
  %656 = or i32 %655, %650
  %657 = trunc i32 %656 to i8
  store i8 %657, ptr %653, align 1, !tbaa !11
  %658 = load i32, ptr %6, align 4, !tbaa !5
  %659 = mul i32 8, %658
  %660 = add i32 %659, 4
  %661 = zext i32 %660 to i64
  %662 = getelementptr inbounds [488 x { float, float }], ptr %21, i64 0, i64 %661
  %663 = getelementptr inbounds { float, float }, ptr %662, i32 0, i32 0
  %664 = load float, ptr %663, align 8
  %665 = getelementptr inbounds { float, float }, ptr %662, i32 0, i32 1
  %666 = load float, ptr %665, align 4
  %667 = fcmp ogt float %664, 0.000000e+00
  %668 = zext i1 %667 to i64
  %669 = select i1 %667, i32 8, i32 0
  %670 = load i32, ptr %6, align 4, !tbaa !5
  %671 = zext i32 %670 to i64
  %672 = getelementptr inbounds [61 x i8], ptr %28, i64 0, i64 %671
  %673 = load i8, ptr %672, align 1, !tbaa !11
  %674 = zext i8 %673 to i32
  %675 = or i32 %674, %669
  %676 = trunc i32 %675 to i8
  store i8 %676, ptr %672, align 1, !tbaa !11
  %677 = load i32, ptr %6, align 4, !tbaa !5
  %678 = mul i32 8, %677
  %679 = add i32 %678, 5
  %680 = zext i32 %679 to i64
  %681 = getelementptr inbounds [488 x { float, float }], ptr %21, i64 0, i64 %680
  %682 = getelementptr inbounds { float, float }, ptr %681, i32 0, i32 0
  %683 = load float, ptr %682, align 8
  %684 = getelementptr inbounds { float, float }, ptr %681, i32 0, i32 1
  %685 = load float, ptr %684, align 4
  %686 = fcmp ogt float %683, 0.000000e+00
  %687 = zext i1 %686 to i64
  %688 = select i1 %686, i32 4, i32 0
  %689 = load i32, ptr %6, align 4, !tbaa !5
  %690 = zext i32 %689 to i64
  %691 = getelementptr inbounds [61 x i8], ptr %28, i64 0, i64 %690
  %692 = load i8, ptr %691, align 1, !tbaa !11
  %693 = zext i8 %692 to i32
  %694 = or i32 %693, %688
  %695 = trunc i32 %694 to i8
  store i8 %695, ptr %691, align 1, !tbaa !11
  %696 = load i32, ptr %6, align 4, !tbaa !5
  %697 = mul i32 8, %696
  %698 = add i32 %697, 6
  %699 = zext i32 %698 to i64
  %700 = getelementptr inbounds [488 x { float, float }], ptr %21, i64 0, i64 %699
  %701 = getelementptr inbounds { float, float }, ptr %700, i32 0, i32 0
  %702 = load float, ptr %701, align 8
  %703 = getelementptr inbounds { float, float }, ptr %700, i32 0, i32 1
  %704 = load float, ptr %703, align 4
  %705 = fcmp ogt float %702, 0.000000e+00
  %706 = zext i1 %705 to i64
  %707 = select i1 %705, i32 2, i32 0
  %708 = load i32, ptr %6, align 4, !tbaa !5
  %709 = zext i32 %708 to i64
  %710 = getelementptr inbounds [61 x i8], ptr %28, i64 0, i64 %709
  %711 = load i8, ptr %710, align 1, !tbaa !11
  %712 = zext i8 %711 to i32
  %713 = or i32 %712, %707
  %714 = trunc i32 %713 to i8
  store i8 %714, ptr %710, align 1, !tbaa !11
  %715 = load i32, ptr %6, align 4, !tbaa !5
  %716 = mul i32 8, %715
  %717 = add i32 %716, 7
  %718 = zext i32 %717 to i64
  %719 = getelementptr inbounds [488 x { float, float }], ptr %21, i64 0, i64 %718
  %720 = getelementptr inbounds { float, float }, ptr %719, i32 0, i32 0
  %721 = load float, ptr %720, align 8
  %722 = getelementptr inbounds { float, float }, ptr %719, i32 0, i32 1
  %723 = load float, ptr %722, align 4
  %724 = fcmp ogt float %721, 0.000000e+00
  %725 = zext i1 %724 to i64
  %726 = select i1 %724, i32 1, i32 0
  %727 = load i32, ptr %6, align 4, !tbaa !5
  %728 = zext i32 %727 to i64
  %729 = getelementptr inbounds [61 x i8], ptr %28, i64 0, i64 %728
  %730 = load i8, ptr %729, align 1, !tbaa !11
  %731 = zext i8 %730 to i32
  %732 = or i32 %731, %726
  %733 = trunc i32 %732 to i8
  store i8 %733, ptr %729, align 1, !tbaa !11
  br label %734

734:                                              ; preds = %578
  %735 = load i32, ptr %6, align 4, !tbaa !5
  %736 = add i32 %735, 1
  store i32 %736, ptr %6, align 4, !tbaa !5
  br label %574, !llvm.loop !22

737:                                              ; preds = %574
  %738 = getelementptr inbounds [61 x i8], ptr %28, i64 0, i64 0
  %739 = getelementptr inbounds [32 x i8], ptr %30, i64 0, i64 0
  call void @spc2216_decode(ptr noundef %738, ptr noundef %739)
  store i32 0, ptr %6, align 4, !tbaa !5
  br label %740

740:                                              ; preds = %769, %737
  %741 = load i32, ptr %6, align 4, !tbaa !5
  %742 = load i32, ptr %25, align 4, !tbaa !5
  %743 = mul i32 8, %742
  %744 = icmp ult i32 %741, %743
  br i1 %744, label %745, label %772

745:                                              ; preds = %740
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #7
  %746 = load i32, ptr %6, align 4, !tbaa !5
  %747 = zext i32 %746 to i64
  %748 = getelementptr inbounds [488 x { float, float }], ptr %21, i64 0, i64 %747
  %749 = getelementptr inbounds { float, float }, ptr %748, i32 0, i32 0
  %750 = load float, ptr %749, align 8
  %751 = getelementptr inbounds { float, float }, ptr %748, i32 0, i32 1
  %752 = load float, ptr %751, align 4
  %753 = call float @llvm.fmuladd.f32(float %750, float 5.000000e-01, float 5.000000e-01)
  %754 = fmul float 2.560000e+02, %753
  %755 = fptosi float %754 to i32
  store i32 %755, ptr %37, align 4, !tbaa !5
  %756 = load i32, ptr %37, align 4, !tbaa !5
  %757 = icmp slt i32 %756, 0
  br i1 %757, label %758, label %759

758:                                              ; preds = %745
  store i32 0, ptr %37, align 4, !tbaa !5
  br label %759

759:                                              ; preds = %758, %745
  %760 = load i32, ptr %37, align 4, !tbaa !5
  %761 = icmp sgt i32 %760, 255
  br i1 %761, label %762, label %763

762:                                              ; preds = %759
  store i32 255, ptr %37, align 4, !tbaa !5
  br label %763

763:                                              ; preds = %762, %759
  %764 = load i32, ptr %37, align 4, !tbaa !5
  %765 = trunc i32 %764 to i8
  %766 = load i32, ptr %6, align 4, !tbaa !5
  %767 = zext i32 %766 to i64
  %768 = getelementptr inbounds [488 x i8], ptr %29, i64 0, i64 %767
  store i8 %765, ptr %768, align 1, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #7
  br label %769

769:                                              ; preds = %763
  %770 = load i32, ptr %6, align 4, !tbaa !5
  %771 = add i32 %770, 1
  store i32 %771, ptr %6, align 4, !tbaa !5
  br label %740, !llvm.loop !23

772:                                              ; preds = %740
  %773 = getelementptr inbounds [488 x i8], ptr %29, i64 0, i64 0
  %774 = getelementptr inbounds [32 x i8], ptr %31, i64 0, i64 0
  call void @spc2216_decode_soft(ptr noundef %773, ptr noundef %774)
  %775 = getelementptr inbounds [32 x i8], ptr %26, i64 0, i64 0
  %776 = getelementptr inbounds [32 x i8], ptr %30, i64 0, i64 0
  %777 = call i32 @count_bit_errors_array(ptr noundef %775, ptr noundef %776, i32 noundef 32)
  %778 = load i32, ptr %33, align 4, !tbaa !5
  %779 = zext i32 %778 to i64
  %780 = getelementptr inbounds i32, ptr %347, i64 %779
  %781 = load i32, ptr %780, align 4, !tbaa !5
  %782 = add i32 %781, %777
  store i32 %782, ptr %780, align 4, !tbaa !5
  %783 = getelementptr inbounds [32 x i8], ptr %26, i64 0, i64 0
  %784 = getelementptr inbounds [32 x i8], ptr %31, i64 0, i64 0
  %785 = call i32 @count_bit_errors_array(ptr noundef %783, ptr noundef %784, i32 noundef 32)
  %786 = load i32, ptr %33, align 4, !tbaa !5
  %787 = zext i32 %786 to i64
  %788 = getelementptr inbounds i32, ptr %350, i64 %787
  %789 = load i32, ptr %788, align 4, !tbaa !5
  %790 = add i32 %789, %785
  store i32 %790, ptr %788, align 4, !tbaa !5
  br label %791

791:                                              ; preds = %772
  %792 = load i32, ptr %36, align 4, !tbaa !5
  %793 = add i32 %792, 1
  store i32 %793, ptr %36, align 4, !tbaa !5
  br label %379, !llvm.loop !24

794:                                              ; preds = %379
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #7
  store float 0x3FE0C97140000000, ptr %38, align 4, !tbaa !17
  %795 = load float, ptr %34, align 4, !tbaa !17
  %796 = fpext float %795 to double
  %797 = load float, ptr %34, align 4, !tbaa !17
  %798 = load float, ptr %38, align 4, !tbaa !17
  %799 = call float @log10f(float noundef %798) #7
  %800 = call float @llvm.fmuladd.f32(float -1.000000e+01, float %799, float %797)
  %801 = fpext float %800 to double
  %802 = load i32, ptr %20, align 4, !tbaa !5
  %803 = mul i32 256, %802
  %804 = load i32, ptr %33, align 4, !tbaa !5
  %805 = zext i32 %804 to i64
  %806 = getelementptr inbounds i32, ptr %347, i64 %805
  %807 = load i32, ptr %806, align 4, !tbaa !5
  %808 = load i32, ptr %33, align 4, !tbaa !5
  %809 = zext i32 %808 to i64
  %810 = getelementptr inbounds i32, ptr %347, i64 %809
  %811 = load i32, ptr %810, align 4, !tbaa !5
  %812 = uitofp i32 %811 to float
  %813 = load i32, ptr %20, align 4, !tbaa !5
  %814 = mul i32 %813, 32
  %815 = mul i32 %814, 8
  %816 = uitofp i32 %815 to float
  %817 = fdiv float %812, %816
  %818 = fpext float %817 to double
  %819 = load i32, ptr %33, align 4, !tbaa !5
  %820 = zext i32 %819 to i64
  %821 = getelementptr inbounds i32, ptr %350, i64 %820
  %822 = load i32, ptr %821, align 4, !tbaa !5
  %823 = load i32, ptr %33, align 4, !tbaa !5
  %824 = zext i32 %823 to i64
  %825 = getelementptr inbounds i32, ptr %350, i64 %824
  %826 = load i32, ptr %825, align 4, !tbaa !5
  %827 = uitofp i32 %826 to float
  %828 = load i32, ptr %20, align 4, !tbaa !5
  %829 = mul i32 %828, 32
  %830 = mul i32 %829, 8
  %831 = uitofp i32 %830 to float
  %832 = fdiv float %827, %831
  %833 = fpext float %832 to double
  %834 = load float, ptr %35, align 4, !tbaa !17
  %835 = fdiv float 1.000000e+00, %834
  %836 = call float @erfcf(float noundef %835) #7
  %837 = fmul float 5.000000e-01, %836
  %838 = fpext float %837 to double
  %839 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, double noundef %796, double noundef %801, i32 noundef %803, i32 noundef %807, double noundef %818, i32 noundef %822, double noundef %833, double noundef %838)
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #7
  br label %840

840:                                              ; preds = %794
  %841 = load i32, ptr %33, align 4, !tbaa !5
  %842 = add i32 %841, 1
  store i32 %842, ptr %33, align 4, !tbaa !5
  br label %359, !llvm.loop !25

843:                                              ; preds = %359
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #7
  %844 = call noalias ptr @fopen(ptr noundef @.str.19, ptr noundef @.str.20)
  store ptr %844, ptr %39, align 8, !tbaa !9
  %845 = load ptr, ptr %39, align 8, !tbaa !9
  %846 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %845, ptr noundef @.str.21, ptr noundef @.str.19) #7
  %847 = load ptr, ptr %39, align 8, !tbaa !9
  %848 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %847, ptr noundef @.str.22) #7
  %849 = load ptr, ptr %39, align 8, !tbaa !9
  %850 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %849, ptr noundef @.str.23) #7
  %851 = load ptr, ptr %39, align 8, !tbaa !9
  %852 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %851, ptr noundef @.str.24) #7
  %853 = load ptr, ptr %39, align 8, !tbaa !9
  %854 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %853, ptr noundef @.str.25, i32 noundef 32) #7
  %855 = load ptr, ptr %39, align 8, !tbaa !9
  %856 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %855, ptr noundef @.str.26, i32 noundef 61) #7
  %857 = load ptr, ptr %39, align 8, !tbaa !9
  %858 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %857, ptr noundef @.str.27) #7
  %859 = load ptr, ptr %39, align 8, !tbaa !9
  %860 = load i32, ptr %19, align 4, !tbaa !5
  %861 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %859, ptr noundef @.str.28, i32 noundef %860) #7
  %862 = load ptr, ptr %39, align 8, !tbaa !9
  %863 = load i32, ptr %20, align 4, !tbaa !5
  %864 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %862, ptr noundef @.str.29, i32 noundef %863) #7
  %865 = load ptr, ptr %39, align 8, !tbaa !9
  %866 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %865, ptr noundef @.str.30) #7
  %867 = load ptr, ptr %39, align 8, !tbaa !9
  %868 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %867, ptr noundef @.str.31) #7
  %869 = load ptr, ptr %39, align 8, !tbaa !9
  %870 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %869, ptr noundef @.str.32) #7
  store i32 0, ptr %6, align 4, !tbaa !5
  br label %871

871:                                              ; preds = %902, %843
  %872 = load i32, ptr %6, align 4, !tbaa !5
  %873 = load i32, ptr %19, align 4, !tbaa !5
  %874 = icmp ult i32 %872, %873
  br i1 %874, label %875, label %905

875:                                              ; preds = %871
  %876 = load ptr, ptr %39, align 8, !tbaa !9
  %877 = load i32, ptr %6, align 4, !tbaa !5
  %878 = add i32 %877, 1
  %879 = load float, ptr %17, align 4, !tbaa !17
  %880 = load i32, ptr %6, align 4, !tbaa !5
  %881 = uitofp i32 %880 to float
  %882 = load float, ptr %32, align 4, !tbaa !17
  %883 = call float @llvm.fmuladd.f32(float %881, float %882, float %879)
  %884 = fpext float %883 to double
  %885 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %876, ptr noundef @.str.33, i32 noundef %878, double noundef %884) #7
  %886 = load ptr, ptr %39, align 8, !tbaa !9
  %887 = load i32, ptr %6, align 4, !tbaa !5
  %888 = add i32 %887, 1
  %889 = load i32, ptr %6, align 4, !tbaa !5
  %890 = zext i32 %889 to i64
  %891 = getelementptr inbounds i32, ptr %347, i64 %890
  %892 = load i32, ptr %891, align 4, !tbaa !5
  %893 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %886, ptr noundef @.str.34, i32 noundef %888, i32 noundef %892) #7
  %894 = load ptr, ptr %39, align 8, !tbaa !9
  %895 = load i32, ptr %6, align 4, !tbaa !5
  %896 = add i32 %895, 1
  %897 = load i32, ptr %6, align 4, !tbaa !5
  %898 = zext i32 %897 to i64
  %899 = getelementptr inbounds i32, ptr %350, i64 %898
  %900 = load i32, ptr %899, align 4, !tbaa !5
  %901 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %894, ptr noundef @.str.35, i32 noundef %896, i32 noundef %900) #7
  br label %902

902:                                              ; preds = %875
  %903 = load i32, ptr %6, align 4, !tbaa !5
  %904 = add i32 %903, 1
  store i32 %904, ptr %6, align 4, !tbaa !5
  br label %871, !llvm.loop !26

905:                                              ; preds = %871
  %906 = load ptr, ptr %39, align 8, !tbaa !9
  %907 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %906, ptr noundef @.str.36) #7
  %908 = load ptr, ptr %39, align 8, !tbaa !9
  %909 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %908, ptr noundef @.str.37) #7
  %910 = load ptr, ptr %39, align 8, !tbaa !9
  %911 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %910, ptr noundef @.str.22) #7
  %912 = load ptr, ptr %39, align 8, !tbaa !9
  %913 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %912, ptr noundef @.str.38) #7
  %914 = load ptr, ptr %39, align 8, !tbaa !9
  %915 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %914, ptr noundef @.str.39) #7
  %916 = load ptr, ptr %39, align 8, !tbaa !9
  %917 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %916, ptr noundef @.str.40) #7
  %918 = load ptr, ptr %39, align 8, !tbaa !9
  %919 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %918, ptr noundef @.str.41) #7
  %920 = load ptr, ptr %39, align 8, !tbaa !9
  %921 = load float, ptr %17, align 4, !tbaa !17
  %922 = fpext float %921 to double
  %923 = load float, ptr %18, align 4, !tbaa !17
  %924 = fpext float %923 to double
  %925 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %920, ptr noundef @.str.42, double noundef %922, double noundef %924) #7
  %926 = load ptr, ptr %39, align 8, !tbaa !9
  %927 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %926, ptr noundef @.str.43) #7
  %928 = load ptr, ptr %39, align 8, !tbaa !9
  %929 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %928, ptr noundef @.str.44) #7
  %930 = load ptr, ptr %39, align 8, !tbaa !9
  %931 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %930, ptr noundef @.str.45) #7
  %932 = load ptr, ptr %39, align 8, !tbaa !9
  %933 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %932, ptr noundef @.str.46) #7
  %934 = load ptr, ptr %39, align 8, !tbaa !9
  %935 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %934, ptr noundef @.str.47) #7
  %936 = load ptr, ptr %39, align 8, !tbaa !9
  %937 = call i32 @fclose(ptr noundef %936)
  %938 = call i32 (ptr, ...) @printf(ptr noundef @.str.48, ptr noundef @.str.19)
  %939 = call i32 (ptr, ...) @printf(ptr noundef @.str.49)
  store i32 0, ptr %3, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %31) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %30) #7
  call void @llvm.lifetime.end.p0(i64 488, ptr %29) #7
  call void @llvm.lifetime.end.p0(i64 61, ptr %28) #7
  call void @llvm.lifetime.end.p0(i64 61, ptr %27) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %26) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #7
  %940 = load ptr, ptr %22, align 8
  call void @llvm.stackrestore.p0(ptr %940)
  call void @llvm.lifetime.end.p0(i64 3904, ptr %21) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %15) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %14) #7
  call void @llvm.lifetime.end.p0(i64 488, ptr %13) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %11) #7
  call void @llvm.lifetime.end.p0(i64 61, ptr %10) #7
  call void @llvm.lifetime.end.p0(i64 61, ptr %9) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %8) #7
  call void @llvm.lifetime.end.p0(i64 61, ptr %7) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #7
  %941 = load i32, ptr %3, align 4
  ret i32 %941
}

; Function Attrs: nounwind
declare void @srand(i32 noundef) #3

; Function Attrs: nounwind
declare i64 @time(ptr noundef) #3

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

; Function Attrs: nounwind uwtable
declare dso_local void @spc2216_print_decoded(ptr noundef) #2

; Function Attrs: nounwind uwtable
declare dso_local void @spc2216_encode(ptr noundef, ptr noundef) #2

; Function Attrs: nounwind uwtable
declare dso_local void @spc2216_print_encoded(ptr noundef) #2

; Function Attrs: nounwind uwtable
declare dso_local void @spc2216_decode(ptr noundef, ptr noundef) #2

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

declare float @randnf(...) #1

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare float @llvm.fmuladd.f32(float, float, float) #5

; Function Attrs: nounwind uwtable
declare dso_local void @spc2216_decode_soft(ptr noundef, ptr noundef) #2

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

; Function Attrs: nounwind
declare float @powf(float noundef, float noundef) #3

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

declare float @randf(...) #1

; Function Attrs: nounwind
declare float @log10f(float noundef) #3

; Function Attrs: nounwind
declare float @erfcf(float noundef) #3

declare noalias ptr @fopen(ptr noundef, ptr noundef) #1

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

declare i32 @fclose(ptr noundef) #1

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

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


; 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.3 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [40 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [45 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [40 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [50 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.29 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.31 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.32 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.33 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.34 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.36 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.37 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.38 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.39 = external hidden unnamed_addr constant [72 x i8], align 1
@.str.40 = external hidden unnamed_addr constant [72 x i8], align 1
@.str.41 = external hidden unnamed_addr constant [73 x i8], align 1
@.str.42 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.43 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.44 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.45 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.46 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.47 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.48 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.49 = external hidden unnamed_addr constant [7 x i8], align 1

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

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

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

; Function Attrs: nounwind uwtable
define dso_local noundef i32 @main(i32 noundef %0, ptr nocapture noundef readnone %1) local_unnamed_addr #2 {
  %3 = alloca [61 x i8], align 16
  %4 = alloca [32 x i8], align 16
  %5 = alloca [61 x i8], align 16
  %6 = alloca [61 x i8], align 16
  %7 = alloca [32 x i8], align 16
  %8 = alloca [488 x i8], align 16
  %9 = alloca [488 x { float, float }], align 16
  %10 = alloca [32 x i8], align 16
  %11 = alloca [61 x i8], align 16
  %12 = alloca [61 x i8], align 16
  %13 = alloca [488 x i8], align 16
  %14 = alloca [32 x i8], align 16
  %15 = alloca [32 x i8], align 16
  %16 = tail call i64 @time(ptr noundef null) #10
  %17 = trunc i64 %16 to i32
  tail call void @srand(i32 noundef %17) #10
  call void @llvm.lifetime.start.p0(i64 61, ptr nonnull %3) #10
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(61) %3, i8 0, i64 61, i1 false)
  %18 = getelementptr inbounds i8, ptr %3, i64 3
  store i8 8, ptr %18, align 1, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %4) #10
  call void @llvm.lifetime.start.p0(i64 61, ptr nonnull %5) #10
  call void @llvm.lifetime.start.p0(i64 61, ptr nonnull %6) #10
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %7) #10
  br label %19

19:                                               ; preds = %2, %37
  %indvars.iv = phi i64 [ 0, %2 ], [ %indvars.iv.next, %37 ]
  %20 = trunc nuw nsw i64 %indvars.iv to i32
  %21 = and i32 %20, 17
  %or.cond = icmp eq i32 %21, 0
  br i1 %or.cond, label %22, label %26

22:                                               ; preds = %19
  %23 = lshr exact i32 %20, 1
  %24 = lshr i32 255, %23
  %25 = trunc nuw i32 %24 to i8
  br label %37

26:                                               ; preds = %19
  %27 = and i32 %20, 1
  %28 = icmp eq i32 %27, 0
  %29 = icmp ult i64 %indvars.iv, 16
  %or.cond211 = or i1 %29, %28
  br i1 %or.cond211, label %37, label %30

30:                                               ; preds = %26
  %31 = trunc i64 %indvars.iv to i32
  %32 = add i32 %31, -17
  %33 = lshr exact i32 %32, 1
  %34 = sub nsw i32 7, %33
  %35 = shl nuw nsw i32 1, %34
  %36 = trunc i32 %35 to i8
  br label %37

37:                                               ; preds = %26, %22, %30
  %.sink = phi i8 [ %25, %22 ], [ %36, %30 ], [ 0, %26 ]
  %38 = getelementptr inbounds [32 x i8], ptr %4, i64 0, i64 %indvars.iv
  store i8 %.sink, ptr %38, align 1, !tbaa !5
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, 32
  br i1 %exitcond.not, label %vector.ph, label %19, !llvm.loop !8

vector.ph:                                        ; preds = %37
  %39 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.3)
  call void @spc2216_print_decoded(ptr noundef nonnull %4)
  call void @spc2216_encode(ptr noundef nonnull %4, ptr noundef nonnull %5)
  %40 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.4)
  call void @spc2216_print_encoded(ptr noundef nonnull %5)
  %41 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.5)
  call void @spc2216_print_encoded(ptr noundef nonnull %3)
  %42 = getelementptr inbounds i8, ptr %5, i64 8
  %wide.load = load <8 x i8>, ptr %5, align 16, !tbaa !5
  %wide.load272 = load <8 x i8>, ptr %42, align 8, !tbaa !5
  %43 = getelementptr inbounds i8, ptr %3, i64 8
  %wide.load273 = load <8 x i8>, ptr %3, align 16, !tbaa !5
  %wide.load274 = load <8 x i8>, ptr %43, align 8, !tbaa !5
  %44 = xor <8 x i8> %wide.load273, %wide.load
  %45 = xor <8 x i8> %wide.load274, %wide.load272
  %46 = getelementptr inbounds i8, ptr %6, i64 8
  store <8 x i8> %44, ptr %6, align 16, !tbaa !5
  store <8 x i8> %45, ptr %46, align 8, !tbaa !5
  %47 = getelementptr inbounds i8, ptr %5, i64 16
  %48 = getelementptr inbounds i8, ptr %5, i64 24
  %wide.load.1 = load <8 x i8>, ptr %47, align 16, !tbaa !5
  %wide.load272.1 = load <8 x i8>, ptr %48, align 8, !tbaa !5
  %49 = getelementptr inbounds i8, ptr %3, i64 16
  %50 = getelementptr inbounds i8, ptr %3, i64 24
  %wide.load273.1 = load <8 x i8>, ptr %49, align 16, !tbaa !5
  %wide.load274.1 = load <8 x i8>, ptr %50, align 8, !tbaa !5
  %51 = xor <8 x i8> %wide.load273.1, %wide.load.1
  %52 = xor <8 x i8> %wide.load274.1, %wide.load272.1
  %53 = getelementptr inbounds i8, ptr %6, i64 16
  %54 = getelementptr inbounds i8, ptr %6, i64 24
  store <8 x i8> %51, ptr %53, align 16, !tbaa !5
  store <8 x i8> %52, ptr %54, align 8, !tbaa !5
  %55 = getelementptr inbounds i8, ptr %5, i64 32
  %56 = getelementptr inbounds i8, ptr %5, i64 40
  %wide.load.2 = load <8 x i8>, ptr %55, align 16, !tbaa !5
  %wide.load272.2 = load <8 x i8>, ptr %56, align 8, !tbaa !5
  %57 = getelementptr inbounds i8, ptr %3, i64 32
  %58 = getelementptr inbounds i8, ptr %3, i64 40
  %wide.load273.2 = load <8 x i8>, ptr %57, align 16, !tbaa !5
  %wide.load274.2 = load <8 x i8>, ptr %58, align 8, !tbaa !5
  %59 = xor <8 x i8> %wide.load273.2, %wide.load.2
  %60 = xor <8 x i8> %wide.load274.2, %wide.load272.2
  %61 = getelementptr inbounds i8, ptr %6, i64 32
  %62 = getelementptr inbounds i8, ptr %6, i64 40
  store <8 x i8> %59, ptr %61, align 16, !tbaa !5
  store <8 x i8> %60, ptr %62, align 8, !tbaa !5
  %63 = getelementptr inbounds i8, ptr %5, i64 48
  %64 = load i8, ptr %63, align 16, !tbaa !5
  %65 = getelementptr inbounds i8, ptr %3, i64 48
  %66 = load i8, ptr %65, align 16, !tbaa !5
  %67 = xor i8 %66, %64
  %68 = getelementptr inbounds i8, ptr %6, i64 48
  store i8 %67, ptr %68, align 16, !tbaa !5
  %69 = getelementptr inbounds i8, ptr %5, i64 49
  %70 = load i8, ptr %69, align 1, !tbaa !5
  %71 = getelementptr inbounds i8, ptr %3, i64 49
  %72 = load i8, ptr %71, align 1, !tbaa !5
  %73 = xor i8 %72, %70
  %74 = getelementptr inbounds i8, ptr %6, i64 49
  store i8 %73, ptr %74, align 1, !tbaa !5
  %75 = getelementptr inbounds i8, ptr %5, i64 50
  %76 = load i8, ptr %75, align 2, !tbaa !5
  %77 = getelementptr inbounds i8, ptr %3, i64 50
  %78 = load i8, ptr %77, align 2, !tbaa !5
  %79 = xor i8 %78, %76
  %80 = getelementptr inbounds i8, ptr %6, i64 50
  store i8 %79, ptr %80, align 2, !tbaa !5
  %81 = getelementptr inbounds i8, ptr %5, i64 51
  %82 = load i8, ptr %81, align 1, !tbaa !5
  %83 = getelementptr inbounds i8, ptr %3, i64 51
  %84 = load i8, ptr %83, align 1, !tbaa !5
  %85 = xor i8 %84, %82
  %86 = getelementptr inbounds i8, ptr %6, i64 51
  store i8 %85, ptr %86, align 1, !tbaa !5
  %87 = getelementptr inbounds i8, ptr %5, i64 52
  %88 = load i8, ptr %87, align 4, !tbaa !5
  %89 = getelementptr inbounds i8, ptr %3, i64 52
  %90 = load i8, ptr %89, align 4, !tbaa !5
  %91 = xor i8 %90, %88
  %92 = getelementptr inbounds i8, ptr %6, i64 52
  store i8 %91, ptr %92, align 4, !tbaa !5
  %93 = getelementptr inbounds i8, ptr %5, i64 53
  %94 = load i8, ptr %93, align 1, !tbaa !5
  %95 = getelementptr inbounds i8, ptr %3, i64 53
  %96 = load i8, ptr %95, align 1, !tbaa !5
  %97 = xor i8 %96, %94
  %98 = getelementptr inbounds i8, ptr %6, i64 53
  store i8 %97, ptr %98, align 1, !tbaa !5
  %99 = getelementptr inbounds i8, ptr %5, i64 54
  %100 = load i8, ptr %99, align 2, !tbaa !5
  %101 = getelementptr inbounds i8, ptr %3, i64 54
  %102 = load i8, ptr %101, align 2, !tbaa !5
  %103 = xor i8 %102, %100
  %104 = getelementptr inbounds i8, ptr %6, i64 54
  store i8 %103, ptr %104, align 2, !tbaa !5
  %105 = getelementptr inbounds i8, ptr %5, i64 55
  %106 = load i8, ptr %105, align 1, !tbaa !5
  %107 = getelementptr inbounds i8, ptr %3, i64 55
  %108 = load i8, ptr %107, align 1, !tbaa !5
  %109 = xor i8 %108, %106
  %110 = getelementptr inbounds i8, ptr %6, i64 55
  store i8 %109, ptr %110, align 1, !tbaa !5
  %111 = getelementptr inbounds i8, ptr %5, i64 56
  %112 = load i8, ptr %111, align 8, !tbaa !5
  %113 = getelementptr inbounds i8, ptr %3, i64 56
  %114 = load i8, ptr %113, align 8, !tbaa !5
  %115 = xor i8 %114, %112
  %116 = getelementptr inbounds i8, ptr %6, i64 56
  store i8 %115, ptr %116, align 8, !tbaa !5
  %117 = getelementptr inbounds i8, ptr %5, i64 57
  %118 = load i8, ptr %117, align 1, !tbaa !5
  %119 = getelementptr inbounds i8, ptr %3, i64 57
  %120 = load i8, ptr %119, align 1, !tbaa !5
  %121 = xor i8 %120, %118
  %122 = getelementptr inbounds i8, ptr %6, i64 57
  store i8 %121, ptr %122, align 1, !tbaa !5
  %123 = getelementptr inbounds i8, ptr %5, i64 58
  %124 = load i8, ptr %123, align 2, !tbaa !5
  %125 = getelementptr inbounds i8, ptr %3, i64 58
  %126 = load i8, ptr %125, align 2, !tbaa !5
  %127 = xor i8 %126, %124
  %128 = getelementptr inbounds i8, ptr %6, i64 58
  store i8 %127, ptr %128, align 2, !tbaa !5
  %129 = getelementptr inbounds i8, ptr %5, i64 59
  %130 = load i8, ptr %129, align 1, !tbaa !5
  %131 = getelementptr inbounds i8, ptr %3, i64 59
  %132 = load i8, ptr %131, align 1, !tbaa !5
  %133 = xor i8 %132, %130
  %134 = getelementptr inbounds i8, ptr %6, i64 59
  store i8 %133, ptr %134, align 1, !tbaa !5
  %135 = getelementptr inbounds i8, ptr %5, i64 60
  %136 = load i8, ptr %135, align 4, !tbaa !5
  %137 = getelementptr inbounds i8, ptr %3, i64 60
  %138 = load i8, ptr %137, align 4, !tbaa !5
  %139 = xor i8 %138, %136
  %140 = getelementptr inbounds i8, ptr %6, i64 60
  store i8 %139, ptr %140, align 4, !tbaa !5
  %141 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.6)
  call void @spc2216_print_encoded(ptr noundef nonnull %6)
  call void @spc2216_decode(ptr noundef nonnull %6, ptr noundef nonnull %7)
  %142 = call i32 @count_bit_errors_array(ptr noundef nonnull %4, ptr noundef nonnull %7, i32 noundef 32) #10
  %143 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.7, i32 noundef %142)
  call void @llvm.lifetime.start.p0(i64 488, ptr nonnull %8) #10
  %invariant.gep = getelementptr i8, ptr %8, i64 -7
  br label %vector.body279

vector.body279:                                   ; preds = %vector.body279, %vector.ph
  %index280 = phi i64 [ 0, %vector.ph ], [ %index.next282, %vector.body279 ]
  %144 = getelementptr inbounds [61 x i8], ptr %6, i64 0, i64 %index280
  %wide.load281 = load <16 x i8>, ptr %144, align 16, !tbaa !5
  %145 = and <16 x i8> %wide.load281, <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>
  %146 = or disjoint <16 x i8> %145, <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>
  %147 = shl nuw nsw i64 %index280, 3
  %148 = and <16 x i8> %wide.load281, <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>
  %149 = icmp eq <16 x i8> %148, zeroinitializer
  %150 = select <16 x i1> %149, <16 x i8> <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>, <16 x i8> <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>
  %151 = and <16 x i8> %wide.load281, <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>
  %152 = icmp eq <16 x i8> %151, zeroinitializer
  %153 = select <16 x i1> %152, <16 x i8> <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>, <16 x i8> <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>
  %154 = and <16 x i8> %wide.load281, <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>
  %155 = icmp eq <16 x i8> %154, zeroinitializer
  %156 = select <16 x i1> %155, <16 x i8> <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>, <16 x i8> <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>
  %157 = and <16 x i8> %wide.load281, <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>
  %158 = icmp eq <16 x i8> %157, zeroinitializer
  %159 = select <16 x i1> %158, <16 x i8> <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>, <16 x i8> <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>
  %160 = and <16 x i8> %wide.load281, <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>
  %161 = icmp eq <16 x i8> %160, zeroinitializer
  %162 = select <16 x i1> %161, <16 x i8> <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>, <16 x i8> <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>
  %163 = and <16 x i8> %wide.load281, <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>
  %164 = icmp eq <16 x i8> %163, zeroinitializer
  %165 = select <16 x i1> %164, <16 x i8> <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>, <16 x i8> <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>
  %166 = and <16 x i8> %wide.load281, <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>
  %167 = icmp eq <16 x i8> %166, zeroinitializer
  %168 = select <16 x i1> %167, <16 x i8> <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>, <16 x i8> <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>
  %169 = or disjoint i64 %147, 7
  %gep = getelementptr [488 x i8], ptr %invariant.gep, i64 0, i64 %169
  %170 = shufflevector <16 x i8> %146, <16 x i8> %150, <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>
  %171 = shufflevector <16 x i8> %153, <16 x i8> %156, <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>
  %172 = shufflevector <16 x i8> %159, <16 x i8> %162, <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>
  %173 = shufflevector <16 x i8> %165, <16 x i8> %168, <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>
  %174 = shufflevector <32 x i8> %170, <32 x i8> %171, <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>
  %175 = shufflevector <32 x i8> %172, <32 x i8> %173, <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> %174, <64 x i8> %175, <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 !5
  %index.next282 = add nuw i64 %index280, 16
  %176 = icmp eq i64 %index.next282, 48
  br i1 %176, label %vec.epilog.vector.body.preheader, label %vector.body279, !llvm.loop !10

vec.epilog.vector.body.preheader:                 ; preds = %vector.body279
  %invariant.gep297 = getelementptr i8, ptr %8, i64 -7
  br label %vec.epilog.vector.body

vec.epilog.vector.body:                           ; preds = %vec.epilog.vector.body.preheader, %vec.epilog.vector.body
  %index284 = phi i64 [ %index.next287, %vec.epilog.vector.body ], [ 48, %vec.epilog.vector.body.preheader ]
  %177 = getelementptr inbounds [61 x i8], ptr %6, i64 0, i64 %index284
  %wide.load285 = load <8 x i8>, ptr %177, align 8, !tbaa !5
  %178 = and <8 x i8> %wide.load285, <i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128>
  %179 = or disjoint <8 x i8> %178, <i8 64, i8 64, i8 64, i8 64, i8 64, i8 64, i8 64, i8 64>
  %180 = shl nuw nsw i64 %index284, 3
  %181 = and <8 x i8> %wide.load285, <i8 64, i8 64, i8 64, i8 64, i8 64, i8 64, i8 64, i8 64>
  %182 = icmp eq <8 x i8> %181, zeroinitializer
  %183 = select <8 x i1> %182, <8 x i8> <i8 64, i8 64, i8 64, i8 64, i8 64, i8 64, i8 64, i8 64>, <8 x i8> <i8 -64, i8 -64, i8 -64, i8 -64, i8 -64, i8 -64, i8 -64, i8 -64>
  %184 = and <8 x i8> %wide.load285, <i8 32, i8 32, i8 32, i8 32, i8 32, i8 32, i8 32, i8 32>
  %185 = icmp eq <8 x i8> %184, zeroinitializer
  %186 = select <8 x i1> %185, <8 x i8> <i8 64, i8 64, i8 64, i8 64, i8 64, i8 64, i8 64, i8 64>, <8 x i8> <i8 -64, i8 -64, i8 -64, i8 -64, i8 -64, i8 -64, i8 -64, i8 -64>
  %187 = and <8 x i8> %wide.load285, <i8 16, i8 16, i8 16, i8 16, i8 16, i8 16, i8 16, i8 16>
  %188 = icmp eq <8 x i8> %187, zeroinitializer
  %189 = select <8 x i1> %188, <8 x i8> <i8 64, i8 64, i8 64, i8 64, i8 64, i8 64, i8 64, i8 64>, <8 x i8> <i8 -64, i8 -64, i8 -64, i8 -64, i8 -64, i8 -64, i8 -64, i8 -64>
  %190 = and <8 x i8> %wide.load285, <i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8>
  %191 = icmp eq <8 x i8> %190, zeroinitializer
  %192 = select <8 x i1> %191, <8 x i8> <i8 64, i8 64, i8 64, i8 64, i8 64, i8 64, i8 64, i8 64>, <8 x i8> <i8 -64, i8 -64, i8 -64, i8 -64, i8 -64, i8 -64, i8 -64, i8 -64>
  %193 = and <8 x i8> %wide.load285, <i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4>
  %194 = icmp eq <8 x i8> %193, zeroinitializer
  %195 = select <8 x i1> %194, <8 x i8> <i8 64, i8 64, i8 64, i8 64, i8 64, i8 64, i8 64, i8 64>, <8 x i8> <i8 -64, i8 -64, i8 -64, i8 -64, i8 -64, i8 -64, i8 -64, i8 -64>
  %196 = and <8 x i8> %wide.load285, <i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2>
  %197 = icmp eq <8 x i8> %196, zeroinitializer
  %198 = select <8 x i1> %197, <8 x i8> <i8 64, i8 64, i8 64, i8 64, i8 64, i8 64, i8 64, i8 64>, <8 x i8> <i8 -64, i8 -64, i8 -64, i8 -64, i8 -64, i8 -64, i8 -64, i8 -64>
  %199 = and <8 x i8> %wide.load285, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
  %200 = icmp eq <8 x i8> %199, zeroinitializer
  %201 = select <8 x i1> %200, <8 x i8> <i8 64, i8 64, i8 64, i8 64, i8 64, i8 64, i8 64, i8 64>, <8 x i8> <i8 -64, i8 -64, i8 -64, i8 -64, i8 -64, i8 -64, i8 -64, i8 -64>
  %202 = or disjoint i64 %180, 7
  %gep298 = getelementptr [488 x i8], ptr %invariant.gep297, i64 0, i64 %202
  %203 = shufflevector <8 x i8> %179, <8 x i8> %183, <16 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>
  %204 = shufflevector <8 x i8> %186, <8 x i8> %189, <16 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>
  %205 = shufflevector <8 x i8> %192, <8 x i8> %195, <16 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>
  %206 = shufflevector <8 x i8> %198, <8 x i8> %201, <16 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>
  %207 = shufflevector <16 x i8> %203, <16 x i8> %204, <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>
  %208 = shufflevector <16 x i8> %205, <16 x i8> %206, <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>
  %interleaved.vec286 = shufflevector <32 x i8> %207, <32 x i8> %208, <64 x i32> <i32 0, i32 8, i32 16, i32 24, i32 32, i32 40, i32 48, i32 56, i32 1, i32 9, i32 17, i32 25, i32 33, i32 41, i32 49, i32 57, i32 2, i32 10, i32 18, i32 26, i32 34, i32 42, i32 50, i32 58, i32 3, i32 11, i32 19, i32 27, i32 35, i32 43, i32 51, i32 59, i32 4, i32 12, i32 20, i32 28, i32 36, i32 44, i32 52, i32 60, i32 5, i32 13, i32 21, i32 29, i32 37, i32 45, i32 53, i32 61, i32 6, i32 14, i32 22, i32 30, i32 38, i32 46, i32 54, i32 62, i32 7, i32 15, i32 23, i32 31, i32 39, i32 47, i32 55, i32 63>
  store <64 x i8> %interleaved.vec286, ptr %gep298, align 16, !tbaa !5
  %index.next287 = add nuw i64 %index284, 8
  %209 = icmp eq i64 %index.next287, 56
  br i1 %209, label %vec.epilog.scalar.ph, label %vec.epilog.vector.body, !llvm.loop !13

vec.epilog.scalar.ph:                             ; preds = %vec.epilog.vector.body
  %210 = getelementptr inbounds i8, ptr %6, i64 56
  %211 = load i8, ptr %210, align 8, !tbaa !5
  %212 = and i8 %211, -128
  %213 = or disjoint i8 %212, 64
  %214 = getelementptr inbounds i8, ptr %8, i64 448
  store i8 %213, ptr %214, align 16, !tbaa !5
  %215 = getelementptr inbounds i8, ptr %8, i64 449
  %216 = insertelement <4 x i8> poison, i8 %211, i64 0
  %217 = shufflevector <4 x i8> %216, <4 x i8> poison, <4 x i32> zeroinitializer
  %218 = and <4 x i8> %217, <i8 64, i8 32, i8 16, i8 8>
  %219 = icmp eq <4 x i8> %218, zeroinitializer
  %220 = select <4 x i1> %219, <4 x i8> <i8 64, i8 64, i8 64, i8 64>, <4 x i8> <i8 -64, i8 -64, i8 -64, i8 -64>
  store <4 x i8> %220, ptr %215, align 1, !tbaa !5
  %221 = and i8 %211, 4
  %.not206 = icmp eq i8 %221, 0
  %222 = select i1 %.not206, i8 64, i8 -64
  %223 = getelementptr inbounds i8, ptr %8, i64 453
  store i8 %222, ptr %223, align 1, !tbaa !5
  %224 = and i8 %211, 2
  %.not207 = icmp eq i8 %224, 0
  %225 = select i1 %.not207, i8 64, i8 -64
  %226 = getelementptr inbounds i8, ptr %8, i64 454
  store i8 %225, ptr %226, align 2, !tbaa !5
  %227 = and i8 %211, 1
  %.not208 = icmp eq i8 %227, 0
  %228 = select i1 %.not208, i8 64, i8 -64
  %229 = getelementptr inbounds i8, ptr %8, i64 455
  store i8 %228, ptr %229, align 1, !tbaa !5
  %230 = getelementptr inbounds i8, ptr %6, i64 57
  %231 = load i8, ptr %230, align 1, !tbaa !5
  %232 = and i8 %231, -128
  %233 = or disjoint i8 %232, 64
  %234 = getelementptr inbounds i8, ptr %8, i64 456
  store i8 %233, ptr %234, align 8, !tbaa !5
  %235 = getelementptr inbounds i8, ptr %8, i64 457
  %236 = insertelement <4 x i8> poison, i8 %231, i64 0
  %237 = shufflevector <4 x i8> %236, <4 x i8> poison, <4 x i32> zeroinitializer
  %238 = and <4 x i8> %237, <i8 64, i8 32, i8 16, i8 8>
  %239 = icmp eq <4 x i8> %238, zeroinitializer
  %240 = select <4 x i1> %239, <4 x i8> <i8 64, i8 64, i8 64, i8 64>, <4 x i8> <i8 -64, i8 -64, i8 -64, i8 -64>
  store <4 x i8> %240, ptr %235, align 1, !tbaa !5
  %241 = and i8 %231, 4
  %.not206.1 = icmp eq i8 %241, 0
  %242 = select i1 %.not206.1, i8 64, i8 -64
  %243 = getelementptr inbounds i8, ptr %8, i64 461
  store i8 %242, ptr %243, align 1, !tbaa !5
  %244 = and i8 %231, 2
  %.not207.1 = icmp eq i8 %244, 0
  %245 = select i1 %.not207.1, i8 64, i8 -64
  %246 = getelementptr inbounds i8, ptr %8, i64 462
  store i8 %245, ptr %246, align 2, !tbaa !5
  %247 = and i8 %231, 1
  %.not208.1 = icmp eq i8 %247, 0
  %248 = select i1 %.not208.1, i8 64, i8 -64
  %249 = getelementptr inbounds i8, ptr %8, i64 463
  store i8 %248, ptr %249, align 1, !tbaa !5
  %250 = getelementptr inbounds i8, ptr %6, i64 58
  %251 = load i8, ptr %250, align 2, !tbaa !5
  %252 = and i8 %251, -128
  %253 = or disjoint i8 %252, 64
  %254 = getelementptr inbounds i8, ptr %8, i64 464
  store i8 %253, ptr %254, align 16, !tbaa !5
  %255 = getelementptr inbounds i8, ptr %8, i64 465
  %256 = insertelement <4 x i8> poison, i8 %251, i64 0
  %257 = shufflevector <4 x i8> %256, <4 x i8> poison, <4 x i32> zeroinitializer
  %258 = and <4 x i8> %257, <i8 64, i8 32, i8 16, i8 8>
  %259 = icmp eq <4 x i8> %258, zeroinitializer
  %260 = select <4 x i1> %259, <4 x i8> <i8 64, i8 64, i8 64, i8 64>, <4 x i8> <i8 -64, i8 -64, i8 -64, i8 -64>
  store <4 x i8> %260, ptr %255, align 1, !tbaa !5
  %261 = and i8 %251, 4
  %.not206.2 = icmp eq i8 %261, 0
  %262 = select i1 %.not206.2, i8 64, i8 -64
  %263 = getelementptr inbounds i8, ptr %8, i64 469
  store i8 %262, ptr %263, align 1, !tbaa !5
  %264 = and i8 %251, 2
  %.not207.2 = icmp eq i8 %264, 0
  %265 = select i1 %.not207.2, i8 64, i8 -64
  %266 = getelementptr inbounds i8, ptr %8, i64 470
  store i8 %265, ptr %266, align 2, !tbaa !5
  %267 = and i8 %251, 1
  %.not208.2 = icmp eq i8 %267, 0
  %268 = select i1 %.not208.2, i8 64, i8 -64
  %269 = getelementptr inbounds i8, ptr %8, i64 471
  store i8 %268, ptr %269, align 1, !tbaa !5
  %270 = getelementptr inbounds i8, ptr %6, i64 59
  %271 = load i8, ptr %270, align 1, !tbaa !5
  %272 = and i8 %271, -128
  %273 = or disjoint i8 %272, 64
  %274 = getelementptr inbounds i8, ptr %8, i64 472
  store i8 %273, ptr %274, align 8, !tbaa !5
  %275 = getelementptr inbounds i8, ptr %8, i64 473
  %276 = insertelement <4 x i8> poison, i8 %271, i64 0
  %277 = shufflevector <4 x i8> %276, <4 x i8> poison, <4 x i32> zeroinitializer
  %278 = and <4 x i8> %277, <i8 64, i8 32, i8 16, i8 8>
  %279 = icmp eq <4 x i8> %278, zeroinitializer
  %280 = select <4 x i1> %279, <4 x i8> <i8 64, i8 64, i8 64, i8 64>, <4 x i8> <i8 -64, i8 -64, i8 -64, i8 -64>
  store <4 x i8> %280, ptr %275, align 1, !tbaa !5
  %281 = and i8 %271, 4
  %.not206.3 = icmp eq i8 %281, 0
  %282 = select i1 %.not206.3, i8 64, i8 -64
  %283 = getelementptr inbounds i8, ptr %8, i64 477
  store i8 %282, ptr %283, align 1, !tbaa !5
  %284 = and i8 %271, 2
  %.not207.3 = icmp eq i8 %284, 0
  %285 = select i1 %.not207.3, i8 64, i8 -64
  %286 = getelementptr inbounds i8, ptr %8, i64 478
  store i8 %285, ptr %286, align 2, !tbaa !5
  %287 = and i8 %271, 1
  %.not208.3 = icmp eq i8 %287, 0
  %288 = select i1 %.not208.3, i8 64, i8 -64
  %289 = getelementptr inbounds i8, ptr %8, i64 479
  store i8 %288, ptr %289, align 1, !tbaa !5
  %290 = getelementptr inbounds i8, ptr %6, i64 60
  %291 = load i8, ptr %290, align 4, !tbaa !5
  %292 = and i8 %291, -128
  %293 = or disjoint i8 %292, 64
  %294 = getelementptr inbounds i8, ptr %8, i64 480
  store i8 %293, ptr %294, align 16, !tbaa !5
  %295 = getelementptr inbounds i8, ptr %8, i64 481
  %296 = insertelement <4 x i8> poison, i8 %291, i64 0
  %297 = shufflevector <4 x i8> %296, <4 x i8> poison, <4 x i32> zeroinitializer
  %298 = and <4 x i8> %297, <i8 64, i8 32, i8 16, i8 8>
  %299 = icmp eq <4 x i8> %298, zeroinitializer
  %300 = select <4 x i1> %299, <4 x i8> <i8 64, i8 64, i8 64, i8 64>, <4 x i8> <i8 -64, i8 -64, i8 -64, i8 -64>
  store <4 x i8> %300, ptr %295, align 1, !tbaa !5
  %301 = and i8 %291, 4
  %.not206.4 = icmp eq i8 %301, 0
  %302 = select i1 %.not206.4, i8 64, i8 -64
  %303 = getelementptr inbounds i8, ptr %8, i64 485
  store i8 %302, ptr %303, align 1, !tbaa !5
  %304 = and i8 %291, 2
  %.not207.4 = icmp eq i8 %304, 0
  %305 = select i1 %.not207.4, i8 64, i8 -64
  %306 = getelementptr inbounds i8, ptr %8, i64 486
  store i8 %305, ptr %306, align 2, !tbaa !5
  %307 = and i8 %291, 1
  %.not208.4 = icmp eq i8 %307, 0
  %308 = select i1 %.not208.4, i8 64, i8 -64
  %309 = getelementptr inbounds i8, ptr %8, i64 487
  store i8 %308, ptr %309, align 1, !tbaa !5
  br label %.preheader214

.preheader214:                                    ; preds = %vec.epilog.scalar.ph, %.preheader214
  %indvars.iv236 = phi i64 [ %indvars.iv.next237, %.preheader214 ], [ 0, %vec.epilog.scalar.ph ]
  %310 = getelementptr inbounds [488 x i8], ptr %8, i64 0, i64 %indvars.iv236
  %311 = load i8, ptr %310, align 1, !tbaa !5
  %312 = uitofp i8 %311 to float
  %313 = call float (...) @randnf() #10
  %314 = call float @llvm.fmuladd.f32(float %313, float 3.000000e+01, float %312)
  %315 = fptosi float %314 to i32
  %spec.store.select = call i32 @llvm.smax.i32(i32 %315, i32 0)
  %spec.store.select2 = call i32 @llvm.umin.i32(i32 %spec.store.select, i32 255)
  %316 = trunc nuw i32 %spec.store.select2 to i8
  store i8 %316, ptr %310, align 1, !tbaa !5
  %indvars.iv.next237 = add nuw nsw i64 %indvars.iv236, 1
  %exitcond239.not = icmp eq i64 %indvars.iv.next237, 366
  br i1 %exitcond239.not, label %317, label %.preheader214, !llvm.loop !14

317:                                              ; preds = %.preheader214
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(32) %7, i8 0, i64 32, i1 false)
  call void @spc2216_decode_soft(ptr noundef nonnull %8, ptr noundef nonnull %7)
  %318 = call i32 @count_bit_errors_array(ptr noundef nonnull %4, ptr noundef nonnull %7, i32 noundef 32) #10
  %319 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.8, i32 noundef %318)
  call void @llvm.lifetime.start.p0(i64 3904, ptr nonnull %9) #10
  %320 = call ptr @llvm.stacksave.p0()
  %321 = alloca [31 x i32], align 16
  %322 = alloca [31 x i32], align 16
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %10) #10
  call void @llvm.lifetime.start.p0(i64 61, ptr nonnull %11) #10
  call void @llvm.lifetime.start.p0(i64 61, ptr nonnull %12) #10
  call void @llvm.lifetime.start.p0(i64 488, ptr nonnull %13) #10
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %14) #10
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %15) #10
  %323 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.9, ptr noundef nonnull @.str.10, ptr noundef nonnull @.str.11, ptr noundef nonnull @.str.12, ptr noundef nonnull @.str.13, ptr noundef nonnull @.str.14, ptr noundef nonnull @.str.15, ptr noundef nonnull @.str.16, ptr noundef nonnull @.str.17)
  %324 = getelementptr inbounds i8, ptr %10, i64 1
  %325 = getelementptr inbounds i8, ptr %10, i64 2
  %326 = getelementptr inbounds i8, ptr %10, i64 3
  %327 = getelementptr inbounds i8, ptr %10, i64 4
  %328 = getelementptr inbounds i8, ptr %10, i64 5
  %329 = getelementptr inbounds i8, ptr %10, i64 6
  %330 = getelementptr inbounds i8, ptr %10, i64 7
  %331 = getelementptr inbounds i8, ptr %10, i64 8
  %332 = getelementptr inbounds i8, ptr %10, i64 9
  %333 = getelementptr inbounds i8, ptr %10, i64 10
  %334 = getelementptr inbounds i8, ptr %10, i64 11
  %335 = getelementptr inbounds i8, ptr %10, i64 12
  %336 = getelementptr inbounds i8, ptr %10, i64 13
  %337 = getelementptr inbounds i8, ptr %10, i64 14
  %338 = getelementptr inbounds i8, ptr %10, i64 15
  %339 = getelementptr inbounds i8, ptr %10, i64 16
  %340 = getelementptr inbounds i8, ptr %10, i64 17
  %341 = getelementptr inbounds i8, ptr %10, i64 18
  %342 = getelementptr inbounds i8, ptr %10, i64 19
  %343 = getelementptr inbounds i8, ptr %10, i64 20
  %344 = getelementptr inbounds i8, ptr %10, i64 21
  %345 = getelementptr inbounds i8, ptr %10, i64 22
  %346 = getelementptr inbounds i8, ptr %10, i64 23
  %347 = getelementptr inbounds i8, ptr %10, i64 24
  %348 = getelementptr inbounds i8, ptr %10, i64 25
  %349 = getelementptr inbounds i8, ptr %10, i64 26
  %350 = getelementptr inbounds i8, ptr %10, i64 27
  %351 = getelementptr inbounds i8, ptr %10, i64 28
  %352 = getelementptr inbounds i8, ptr %10, i64 29
  %353 = getelementptr inbounds i8, ptr %10, i64 30
  %354 = getelementptr inbounds i8, ptr %10, i64 31
  %355 = getelementptr inbounds i8, ptr %9, i64 3872
  %356 = getelementptr inbounds i8, ptr %13, i64 484
  %357 = getelementptr inbounds i8, ptr %9, i64 3880
  %358 = getelementptr inbounds i8, ptr %13, i64 485
  %359 = getelementptr inbounds i8, ptr %9, i64 3888
  %360 = getelementptr inbounds i8, ptr %13, i64 486
  %361 = getelementptr inbounds i8, ptr %9, i64 3896
  %362 = getelementptr inbounds i8, ptr %13, i64 487
  br label %363

363:                                              ; preds = %317, %577
  %indvars.iv261 = phi i64 [ 0, %317 ], [ %indvars.iv.next262, %577 ]
  %364 = trunc nuw nsw i64 %indvars.iv261 to i32
  %365 = uitofp nneg i32 %364 to float
  %366 = call float @llvm.fmuladd.f32(float %365, float 5.000000e-01, float -5.000000e+00)
  %367 = fdiv float %366, -2.000000e+01
  %368 = call float @powf(float noundef 1.000000e+01, float noundef %367) #10
  %369 = getelementptr inbounds i32, ptr %321, i64 %indvars.iv261
  store i32 0, ptr %369, align 4, !tbaa !15
  %370 = getelementptr inbounds i32, ptr %322, i64 %indvars.iv261
  store i32 0, ptr %370, align 4, !tbaa !15
  %371 = insertelement <2 x float> poison, float %368, i64 0
  %372 = shufflevector <2 x float> %371, <2 x float> poison, <2 x i32> zeroinitializer
  br label %.preheader213

.preheader213:                                    ; preds = %363, %scalar.ph289
  %.0192224 = phi i32 [ 0, %363 ], [ %576, %scalar.ph289 ]
  %373 = call i32 @rand() #10
  %374 = trunc i32 %373 to i8
  store i8 %374, ptr %10, align 16, !tbaa !5
  %375 = call i32 @rand() #10
  %376 = trunc i32 %375 to i8
  store i8 %376, ptr %324, align 1, !tbaa !5
  %377 = call i32 @rand() #10
  %378 = trunc i32 %377 to i8
  store i8 %378, ptr %325, align 2, !tbaa !5
  %379 = call i32 @rand() #10
  %380 = trunc i32 %379 to i8
  store i8 %380, ptr %326, align 1, !tbaa !5
  %381 = call i32 @rand() #10
  %382 = trunc i32 %381 to i8
  store i8 %382, ptr %327, align 4, !tbaa !5
  %383 = call i32 @rand() #10
  %384 = trunc i32 %383 to i8
  store i8 %384, ptr %328, align 1, !tbaa !5
  %385 = call i32 @rand() #10
  %386 = trunc i32 %385 to i8
  store i8 %386, ptr %329, align 2, !tbaa !5
  %387 = call i32 @rand() #10
  %388 = trunc i32 %387 to i8
  store i8 %388, ptr %330, align 1, !tbaa !5
  %389 = call i32 @rand() #10
  %390 = trunc i32 %389 to i8
  store i8 %390, ptr %331, align 8, !tbaa !5
  %391 = call i32 @rand() #10
  %392 = trunc i32 %391 to i8
  store i8 %392, ptr %332, align 1, !tbaa !5
  %393 = call i32 @rand() #10
  %394 = trunc i32 %393 to i8
  store i8 %394, ptr %333, align 2, !tbaa !5
  %395 = call i32 @rand() #10
  %396 = trunc i32 %395 to i8
  store i8 %396, ptr %334, align 1, !tbaa !5
  %397 = call i32 @rand() #10
  %398 = trunc i32 %397 to i8
  store i8 %398, ptr %335, align 4, !tbaa !5
  %399 = call i32 @rand() #10
  %400 = trunc i32 %399 to i8
  store i8 %400, ptr %336, align 1, !tbaa !5
  %401 = call i32 @rand() #10
  %402 = trunc i32 %401 to i8
  store i8 %402, ptr %337, align 2, !tbaa !5
  %403 = call i32 @rand() #10
  %404 = trunc i32 %403 to i8
  store i8 %404, ptr %338, align 1, !tbaa !5
  %405 = call i32 @rand() #10
  %406 = trunc i32 %405 to i8
  store i8 %406, ptr %339, align 16, !tbaa !5
  %407 = call i32 @rand() #10
  %408 = trunc i32 %407 to i8
  store i8 %408, ptr %340, align 1, !tbaa !5
  %409 = call i32 @rand() #10
  %410 = trunc i32 %409 to i8
  store i8 %410, ptr %341, align 2, !tbaa !5
  %411 = call i32 @rand() #10
  %412 = trunc i32 %411 to i8
  store i8 %412, ptr %342, align 1, !tbaa !5
  %413 = call i32 @rand() #10
  %414 = trunc i32 %413 to i8
  store i8 %414, ptr %343, align 4, !tbaa !5
  %415 = call i32 @rand() #10
  %416 = trunc i32 %415 to i8
  store i8 %416, ptr %344, align 1, !tbaa !5
  %417 = call i32 @rand() #10
  %418 = trunc i32 %417 to i8
  store i8 %418, ptr %345, align 2, !tbaa !5
  %419 = call i32 @rand() #10
  %420 = trunc i32 %419 to i8
  store i8 %420, ptr %346, align 1, !tbaa !5
  %421 = call i32 @rand() #10
  %422 = trunc i32 %421 to i8
  store i8 %422, ptr %347, align 8, !tbaa !5
  %423 = call i32 @rand() #10
  %424 = trunc i32 %423 to i8
  store i8 %424, ptr %348, align 1, !tbaa !5
  %425 = call i32 @rand() #10
  %426 = trunc i32 %425 to i8
  store i8 %426, ptr %349, align 2, !tbaa !5
  %427 = call i32 @rand() #10
  %428 = trunc i32 %427 to i8
  store i8 %428, ptr %350, align 1, !tbaa !5
  %429 = call i32 @rand() #10
  %430 = trunc i32 %429 to i8
  store i8 %430, ptr %351, align 4, !tbaa !5
  %431 = call i32 @rand() #10
  %432 = trunc i32 %431 to i8
  store i8 %432, ptr %352, align 1, !tbaa !5
  %433 = call i32 @rand() #10
  %434 = trunc i32 %433 to i8
  store i8 %434, ptr %353, align 2, !tbaa !5
  %435 = call i32 @rand() #10
  %436 = trunc i32 %435 to i8
  store i8 %436, ptr %354, align 1, !tbaa !5
  call void @spc2216_encode(ptr noundef nonnull %10, ptr noundef nonnull %11)
  br label %437

437:                                              ; preds = %.preheader213, %437
  %indvars.iv244 = phi i64 [ 0, %.preheader213 ], [ %indvars.iv.next245, %437 ]
  %438 = getelementptr inbounds [61 x i8], ptr %11, i64 0, i64 %indvars.iv244
  %439 = load i8, ptr %438, align 1, !tbaa !5
  %.not = icmp sgt i8 %439, -1
  %440 = select i1 %.not, float -1.000000e+00, float 1.000000e+00
  %441 = shl nuw nsw i64 %indvars.iv244, 3
  %442 = getelementptr inbounds [488 x { float, float }], ptr %9, i64 0, i64 %441
  %443 = getelementptr inbounds i8, ptr %442, i64 4
  store float %440, ptr %442, align 16
  store float 0.000000e+00, ptr %443, align 4
  %444 = and i8 %439, 64
  %.not194 = icmp eq i8 %444, 0
  %445 = select i1 %.not194, float -1.000000e+00, float 1.000000e+00
  %446 = or disjoint i64 %441, 1
  %447 = getelementptr inbounds [488 x { float, float }], ptr %9, i64 0, i64 %446
  %448 = getelementptr inbounds i8, ptr %447, i64 4
  store float %445, ptr %447, align 8
  store float 0.000000e+00, ptr %448, align 4
  %449 = and i8 %439, 32
  %.not195 = icmp eq i8 %449, 0
  %450 = select i1 %.not195, float -1.000000e+00, float 1.000000e+00
  %451 = or disjoint i64 %441, 2
  %452 = getelementptr inbounds [488 x { float, float }], ptr %9, i64 0, i64 %451
  %453 = getelementptr inbounds i8, ptr %452, i64 4
  store float %450, ptr %452, align 16
  store float 0.000000e+00, ptr %453, align 4
  %454 = and i8 %439, 16
  %.not196 = icmp eq i8 %454, 0
  %455 = select i1 %.not196, float -1.000000e+00, float 1.000000e+00
  %456 = or disjoint i64 %441, 3
  %457 = getelementptr inbounds [488 x { float, float }], ptr %9, i64 0, i64 %456
  %458 = getelementptr inbounds i8, ptr %457, i64 4
  store float %455, ptr %457, align 8
  store float 0.000000e+00, ptr %458, align 4
  %459 = and i8 %439, 8
  %.not197 = icmp eq i8 %459, 0
  %460 = select i1 %.not197, float -1.000000e+00, float 1.000000e+00
  %461 = or disjoint i64 %441, 4
  %462 = getelementptr inbounds [488 x { float, float }], ptr %9, i64 0, i64 %461
  %463 = getelementptr inbounds i8, ptr %462, i64 4
  store float %460, ptr %462, align 16
  store float 0.000000e+00, ptr %463, align 4
  %464 = and i8 %439, 4
  %.not198 = icmp eq i8 %464, 0
  %465 = select i1 %.not198, float -1.000000e+00, float 1.000000e+00
  %466 = or disjoint i64 %441, 5
  %467 = getelementptr inbounds [488 x { float, float }], ptr %9, i64 0, i64 %466
  %468 = getelementptr inbounds i8, ptr %467, i64 4
  store float %465, ptr %467, align 8
  store float 0.000000e+00, ptr %468, align 4
  %469 = and i8 %439, 2
  %.not199 = icmp eq i8 %469, 0
  %470 = select i1 %.not199, float -1.000000e+00, float 1.000000e+00
  %471 = or disjoint i64 %441, 6
  %472 = getelementptr inbounds [488 x { float, float }], ptr %9, i64 0, i64 %471
  %473 = getelementptr inbounds i8, ptr %472, i64 4
  store float %470, ptr %472, align 16
  store float 0.000000e+00, ptr %473, align 4
  %474 = and i8 %439, 1
  %.not200 = icmp eq i8 %474, 0
  %475 = select i1 %.not200, float -1.000000e+00, float 1.000000e+00
  %476 = or disjoint i64 %441, 7
  %477 = getelementptr inbounds [488 x { float, float }], ptr %9, i64 0, i64 %476
  %478 = getelementptr inbounds i8, ptr %477, i64 4
  store float %475, ptr %477, align 8
  store float 0.000000e+00, ptr %478, align 4
  %indvars.iv.next245 = add nuw nsw i64 %indvars.iv244, 1
  %exitcond247.not = icmp eq i64 %indvars.iv.next245, 61
  br i1 %exitcond247.not, label %.preheader212, label %437, !llvm.loop !17

.preheader212:                                    ; preds = %437, %.preheader212
  %indvars.iv248 = phi i64 [ %indvars.iv.next249, %.preheader212 ], [ 0, %437 ]
  %479 = call float (...) @randnf() #10
  %480 = call float (...) @randf() #10
  %481 = fmul float %480, 0.000000e+00
  %482 = fadd float %479, %481
  %483 = getelementptr inbounds [488 x { float, float }], ptr %9, i64 0, i64 %indvars.iv248
  %484 = insertelement <2 x float> poison, float %482, i64 0
  %485 = insertelement <2 x float> %484, float %480, i64 1
  %486 = fmul <2 x float> %372, %485
  %487 = fpext <2 x float> %486 to <2 x double>
  %488 = fmul <2 x double> %487, <double 0x3FE6A09E667F3BCD, double 0x3FE6A09E667F3BCD>
  %489 = load <2 x float>, ptr %483, align 8
  %490 = fpext <2 x float> %489 to <2 x double>
  %491 = fadd <2 x double> %488, %490
  %492 = fptrunc <2 x double> %491 to <2 x float>
  store <2 x float> %492, ptr %483, align 8
  %indvars.iv.next249 = add nuw nsw i64 %indvars.iv248, 1
  %exitcond251.not = icmp eq i64 %indvars.iv.next249, 488
  br i1 %exitcond251.not, label %.preheader, label %.preheader212, !llvm.loop !18

.preheader:                                       ; preds = %.preheader212, %.preheader
  %indvars.iv252 = phi i64 [ %indvars.iv.next253, %.preheader ], [ 0, %.preheader212 ]
  %493 = getelementptr inbounds [61 x i8], ptr %12, i64 0, i64 %indvars.iv252
  %494 = shl nuw nsw i64 %indvars.iv252, 3
  %495 = getelementptr inbounds [488 x { float, float }], ptr %9, i64 0, i64 %494
  %496 = load float, ptr %495, align 16
  %497 = fcmp ogt float %496, 0.000000e+00
  %498 = select i1 %497, i8 -128, i8 0
  %499 = or disjoint i64 %494, 1
  %500 = getelementptr inbounds [488 x { float, float }], ptr %9, i64 0, i64 %499
  %501 = load float, ptr %500, align 8
  %502 = fcmp ogt float %501, 0.000000e+00
  %503 = select i1 %502, i8 64, i8 0
  %504 = or disjoint i8 %503, %498
  %505 = or disjoint i64 %494, 2
  %506 = getelementptr inbounds [488 x { float, float }], ptr %9, i64 0, i64 %505
  %507 = load float, ptr %506, align 16
  %508 = fcmp ogt float %507, 0.000000e+00
  %509 = select i1 %508, i8 32, i8 0
  %510 = or disjoint i8 %509, %504
  %511 = or disjoint i64 %494, 3
  %512 = getelementptr inbounds [488 x { float, float }], ptr %9, i64 0, i64 %511
  %513 = load float, ptr %512, align 8
  %514 = fcmp ogt float %513, 0.000000e+00
  %515 = select i1 %514, i8 16, i8 0
  %516 = or disjoint i8 %515, %510
  %517 = or disjoint i64 %494, 4
  %518 = getelementptr inbounds [488 x { float, float }], ptr %9, i64 0, i64 %517
  %519 = load float, ptr %518, align 16
  %520 = fcmp ogt float %519, 0.000000e+00
  %521 = select i1 %520, i8 8, i8 0
  %522 = or disjoint i8 %521, %516
  %523 = or disjoint i64 %494, 5
  %524 = getelementptr inbounds [488 x { float, float }], ptr %9, i64 0, i64 %523
  %525 = load float, ptr %524, align 8
  %526 = fcmp ogt float %525, 0.000000e+00
  %527 = select i1 %526, i8 4, i8 0
  %528 = or disjoint i8 %527, %522
  %529 = or disjoint i64 %494, 6
  %530 = getelementptr inbounds [488 x { float, float }], ptr %9, i64 0, i64 %529
  %531 = load float, ptr %530, align 16
  %532 = fcmp ogt float %531, 0.000000e+00
  %533 = select i1 %532, i8 2, i8 0
  %534 = or i8 %533, %528
  %535 = or disjoint i64 %494, 7
  %536 = getelementptr inbounds [488 x { float, float }], ptr %9, i64 0, i64 %535
  %537 = load float, ptr %536, align 8
  %538 = fcmp ogt float %537, 0.000000e+00
  %539 = zext i1 %538 to i8
  %540 = or i8 %534, %539
  store i8 %540, ptr %493, align 1, !tbaa !5
  %indvars.iv.next253 = add nuw nsw i64 %indvars.iv252, 1
  %exitcond255.not = icmp eq i64 %indvars.iv.next253, 61
  br i1 %exitcond255.not, label %vector.ph290, label %.preheader, !llvm.loop !19

vector.ph290:                                     ; preds = %.preheader
  call void @spc2216_decode(ptr noundef nonnull %12, ptr noundef nonnull %14)
  br label %vector.body292

vector.body292:                                   ; preds = %vector.body292, %vector.ph290
  %index293 = phi i64 [ 0, %vector.ph290 ], [ %index.next294, %vector.body292 ]
  %541 = getelementptr inbounds [488 x { float, float }], ptr %9, i64 0, i64 %index293
  %wide.vec = load <8 x float>, ptr %541, align 16
  %strided.vec = shufflevector <8 x float> %wide.vec, <8 x float> poison, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
  %542 = call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %strided.vec, <4 x float> <float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01>, <4 x float> <float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01>)
  %543 = fmul <4 x float> %542, <float 2.560000e+02, float 2.560000e+02, float 2.560000e+02, float 2.560000e+02>
  %544 = fptosi <4 x float> %543 to <4 x i32>
  %545 = call <4 x i32> @llvm.smax.v4i32(<4 x i32> %544, <4 x i32> zeroinitializer)
  %546 = call <4 x i32> @llvm.umin.v4i32(<4 x i32> %545, <4 x i32> <i32 255, i32 255, i32 255, i32 255>)
  %547 = trunc nuw <4 x i32> %546 to <4 x i8>
  %548 = getelementptr inbounds [488 x i8], ptr %13, i64 0, i64 %index293
  store <4 x i8> %547, ptr %548, align 4, !tbaa !5
  %index.next294 = add nuw i64 %index293, 4
  %549 = icmp eq i64 %index.next294, 484
  br i1 %549, label %scalar.ph289, label %vector.body292, !llvm.loop !20

scalar.ph289:                                     ; preds = %vector.body292
  %550 = load float, ptr %355, align 16
  %551 = call float @llvm.fmuladd.f32(float %550, float 5.000000e-01, float 5.000000e-01)
  %552 = fmul float %551, 2.560000e+02
  %553 = fptosi float %552 to i32
  %spec.store.select1 = call i32 @llvm.smax.i32(i32 %553, i32 0)
  %spec.store.select3 = call i32 @llvm.umin.i32(i32 %spec.store.select1, i32 255)
  %554 = trunc nuw i32 %spec.store.select3 to i8
  store i8 %554, ptr %356, align 4, !tbaa !5
  %555 = load float, ptr %357, align 8
  %556 = call float @llvm.fmuladd.f32(float %555, float 5.000000e-01, float 5.000000e-01)
  %557 = fmul float %556, 2.560000e+02
  %558 = fptosi float %557 to i32
  %spec.store.select1.1 = call i32 @llvm.smax.i32(i32 %558, i32 0)
  %spec.store.select3.1 = call i32 @llvm.umin.i32(i32 %spec.store.select1.1, i32 255)
  %559 = trunc nuw i32 %spec.store.select3.1 to i8
  store i8 %559, ptr %358, align 1, !tbaa !5
  %560 = load float, ptr %359, align 16
  %561 = call float @llvm.fmuladd.f32(float %560, float 5.000000e-01, float 5.000000e-01)
  %562 = fmul float %561, 2.560000e+02
  %563 = fptosi float %562 to i32
  %spec.store.select1.2 = call i32 @llvm.smax.i32(i32 %563, i32 0)
  %spec.store.select3.2 = call i32 @llvm.umin.i32(i32 %spec.store.select1.2, i32 255)
  %564 = trunc nuw i32 %spec.store.select3.2 to i8
  store i8 %564, ptr %360, align 2, !tbaa !5
  %565 = load float, ptr %361, align 8
  %566 = call float @llvm.fmuladd.f32(float %565, float 5.000000e-01, float 5.000000e-01)
  %567 = fmul float %566, 2.560000e+02
  %568 = fptosi float %567 to i32
  %spec.store.select1.3 = call i32 @llvm.smax.i32(i32 %568, i32 0)
  %spec.store.select3.3 = call i32 @llvm.umin.i32(i32 %spec.store.select1.3, i32 255)
  %569 = trunc nuw i32 %spec.store.select3.3 to i8
  store i8 %569, ptr %362, align 1, !tbaa !5
  call void @spc2216_decode_soft(ptr noundef nonnull %13, ptr noundef nonnull %15)
  %570 = call i32 @count_bit_errors_array(ptr noundef nonnull %10, ptr noundef nonnull %14, i32 noundef 32) #10
  %571 = load i32, ptr %369, align 4, !tbaa !15
  %572 = add i32 %571, %570
  store i32 %572, ptr %369, align 4, !tbaa !15
  %573 = call i32 @count_bit_errors_array(ptr noundef nonnull %10, ptr noundef nonnull %15, i32 noundef 32) #10
  %574 = load i32, ptr %370, align 4, !tbaa !15
  %575 = add i32 %574, %573
  store i32 %575, ptr %370, align 4, !tbaa !15
  %576 = add nuw nsw i32 %.0192224, 1
  %exitcond260.not = icmp eq i32 %576, 10000
  br i1 %exitcond260.not, label %577, label %.preheader213, !llvm.loop !21

577:                                              ; preds = %scalar.ph289
  %578 = fpext float %366 to double
  %579 = fadd float %366, 0x40066A1580000000
  %580 = fpext float %579 to double
  %581 = uitofp i32 %572 to float
  %582 = fdiv float %581, 2.560000e+06
  %583 = fpext float %582 to double
  %584 = uitofp i32 %575 to float
  %585 = fdiv float %584, 2.560000e+06
  %586 = fpext float %585 to double
  %587 = fdiv float 1.000000e+00, %368
  %588 = call float @erfcf(float noundef %587) #10
  %589 = fmul float %588, 5.000000e-01
  %590 = fpext float %589 to double
  %591 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.18, double noundef %578, double noundef %580, i32 noundef 2560000, i32 noundef %572, double noundef %583, i32 noundef %575, double noundef %586, double noundef %590)
  %indvars.iv.next262 = add nuw nsw i64 %indvars.iv261, 1
  %exitcond264.not = icmp eq i64 %indvars.iv.next262, 31
  br i1 %exitcond264.not, label %592, label %363, !llvm.loop !22

592:                                              ; preds = %577
  %593 = call noalias ptr @fopen(ptr noundef nonnull @.str.19, ptr noundef nonnull @.str.20)
  %594 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %593, ptr noundef nonnull @.str.21, ptr noundef nonnull @.str.19) #10
  %595 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %593, ptr noundef nonnull @.str.22) #10
  %596 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %593, ptr noundef nonnull @.str.23) #10
  %597 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %593, ptr noundef nonnull @.str.24) #10
  %598 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %593, ptr noundef nonnull @.str.25, i32 noundef 32) #10
  %599 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %593, ptr noundef nonnull @.str.26, i32 noundef 61) #10
  %600 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %593, ptr noundef nonnull @.str.27) #10
  %601 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %593, ptr noundef nonnull @.str.28, i32 noundef 31) #10
  %602 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %593, ptr noundef nonnull @.str.29, i32 noundef 10000) #10
  %603 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %593, ptr noundef nonnull @.str.30) #10
  %604 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %593, ptr noundef nonnull @.str.31) #10
  %605 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %593, ptr noundef nonnull @.str.32) #10
  br label %606

606:                                              ; preds = %592, %606
  %indvars.iv265 = phi i64 [ 0, %592 ], [ %indvars.iv.next266, %606 ]
  %indvars.iv.next266 = add nuw nsw i64 %indvars.iv265, 1
  %607 = trunc nuw nsw i64 %indvars.iv265 to i32
  %608 = uitofp nneg i32 %607 to float
  %609 = call float @llvm.fmuladd.f32(float %608, float 5.000000e-01, float -5.000000e+00)
  %610 = fpext float %609 to double
  %611 = trunc nuw nsw i64 %indvars.iv.next266 to i32
  %612 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %593, ptr noundef nonnull @.str.33, i32 noundef %611, double noundef %610) #10
  %613 = getelementptr inbounds i32, ptr %321, i64 %indvars.iv265
  %614 = load i32, ptr %613, align 4, !tbaa !15
  %615 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %593, ptr noundef nonnull @.str.34, i32 noundef %611, i32 noundef %614) #10
  %616 = getelementptr inbounds i32, ptr %322, i64 %indvars.iv265
  %617 = load i32, ptr %616, align 4, !tbaa !15
  %618 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %593, ptr noundef nonnull @.str.35, i32 noundef %611, i32 noundef %617) #10
  %exitcond268.not = icmp eq i64 %indvars.iv.next266, 31
  br i1 %exitcond268.not, label %619, label %606, !llvm.loop !23

619:                                              ; preds = %606
  %620 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %593, ptr noundef nonnull @.str.36) #10
  %621 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %593, ptr noundef nonnull @.str.37) #10
  %622 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %593, ptr noundef nonnull @.str.22) #10
  %623 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %593, ptr noundef nonnull @.str.38) #10
  %624 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %593, ptr noundef nonnull @.str.39) #10
  %625 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %593, ptr noundef nonnull @.str.40) #10
  %626 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %593, ptr noundef nonnull @.str.41) #10
  %627 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %593, ptr noundef nonnull @.str.42, double noundef -5.000000e+00, double noundef 1.000000e+01) #10
  %628 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %593, ptr noundef nonnull @.str.43) #10
  %629 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %593, ptr noundef nonnull @.str.44) #10
  %630 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %593, ptr noundef nonnull @.str.45) #10
  %631 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %593, ptr noundef nonnull @.str.46) #10
  %632 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %593, ptr noundef nonnull @.str.47) #10
  %633 = call i32 @fclose(ptr noundef %593)
  %634 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.48, ptr noundef nonnull @.str.19)
  %635 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.49)
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %15) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %14) #10
  call void @llvm.lifetime.end.p0(i64 488, ptr nonnull %13) #10
  call void @llvm.lifetime.end.p0(i64 61, ptr nonnull %12) #10
  call void @llvm.lifetime.end.p0(i64 61, ptr nonnull %11) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %10) #10
  call void @llvm.stackrestore.p0(ptr %320)
  call void @llvm.lifetime.end.p0(i64 3904, ptr nonnull %9) #10
  call void @llvm.lifetime.end.p0(i64 488, ptr nonnull %8) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %7) #10
  call void @llvm.lifetime.end.p0(i64 61, ptr nonnull %6) #10
  call void @llvm.lifetime.end.p0(i64 61, ptr nonnull %5) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %4) #10
  call void @llvm.lifetime.end.p0(i64 61, ptr nonnull %3) #10
  ret i32 0
}

; Function Attrs: nounwind
declare void @srand(i32 noundef) local_unnamed_addr #3

; Function Attrs: nounwind
declare i64 @time(ptr noundef) local_unnamed_addr #3

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

; Function Attrs: nounwind uwtable
declare dso_local void @spc2216_print_decoded(ptr noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare dso_local void @spc2216_encode(ptr noundef, ptr noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare dso_local void @spc2216_print_encoded(ptr noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare dso_local void @spc2216_decode(ptr noundef, ptr noundef) local_unnamed_addr #2

declare i32 @count_bit_errors_array(ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #5

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

; Function Attrs: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare float @llvm.fmuladd.f32(float, float, float) #6

; Function Attrs: nounwind uwtable
declare dso_local void @spc2216_decode_soft(ptr noundef, ptr noundef) local_unnamed_addr #2

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

; Function Attrs: mustprogress nofree nounwind willreturn memory(write)
declare float @powf(float noundef, float noundef) local_unnamed_addr #8

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

declare float @randf(...) local_unnamed_addr #5

; Function Attrs: nounwind
declare float @erfcf(float noundef) local_unnamed_addr #3

; Function Attrs: nofree nounwind
declare noalias noundef ptr @fopen(ptr nocapture noundef readonly, ptr nocapture noundef readonly) local_unnamed_addr #1

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

; Function Attrs: nofree nounwind
declare noundef i32 @fclose(ptr nocapture noundef) local_unnamed_addr #1

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

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

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare <4 x float> @llvm.fmuladd.v4f32(<4 x float>, <4 x float>, <4 x float>) #9

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare <4 x i32> @llvm.smax.v4i32(<4 x i32>, <4 x i32>) #9

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

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


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