; LLVM IR from reworks-org/galaxy :: deps/sfml_deps/vorbis-src/vq (distribution)

; Unoptimized IR (clang -disable-llvm-passes):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%struct.codebook = type { i64, i64, i64, ptr, ptr, ptr, ptr, ptr, ptr, i32, i32, i32, i32, i32 }
%struct.static_codebook = type { i64, i64, ptr, i32, i64, i64, i32, i32, ptr, i32 }

@stderr = external global ptr, align 8
@.str = external hidden unnamed_addr constant [51 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [64 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [56 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [8 x i8], align 1

; Function Attrs: nounwind uwtable
declare dso_local i32 @ascend(ptr noundef, ptr noundef) #0

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

45:                                               ; preds = %2
  %46 = load ptr, ptr @stderr, align 8, !tbaa !9
  %47 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %46, ptr noundef @.str) #9
  call void @exit(i32 noundef 1) #10
  unreachable

48:                                               ; preds = %2
  %49 = load ptr, ptr %5, align 8, !tbaa !9
  %50 = getelementptr inbounds ptr, ptr %49, i64 2
  %51 = load ptr, ptr %50, align 8, !tbaa !9
  %52 = icmp ne ptr %51, null
  br i1 %52, label %53, label %60

53:                                               ; preds = %48
  %54 = load ptr, ptr %5, align 8, !tbaa !9
  %55 = getelementptr inbounds ptr, ptr %54, i64 2
  %56 = load ptr, ptr %55, align 8, !tbaa !9
  %57 = call i32 @atoi(ptr noundef %56) #11
  %58 = sub nsw i32 %57, 1
  %59 = sext i32 %58 to i64
  store i64 %59, ptr %10, align 8, !tbaa !11
  br label %60

60:                                               ; preds = %53, %48
  %61 = load ptr, ptr %5, align 8, !tbaa !9
  %62 = getelementptr inbounds ptr, ptr %61, i64 1
  %63 = load ptr, ptr %62, align 8, !tbaa !9
  %64 = call noalias ptr @fopen(ptr noundef %63, ptr noundef @.str.1)
  store ptr %64, ptr %6, align 8, !tbaa !9
  %65 = load ptr, ptr %6, align 8, !tbaa !9
  %66 = icmp ne ptr %65, null
  br i1 %66, label %73, label %67

67:                                               ; preds = %60
  %68 = load ptr, ptr @stderr, align 8, !tbaa !9
  %69 = load ptr, ptr %5, align 8, !tbaa !9
  %70 = getelementptr inbounds ptr, ptr %69, i64 1
  %71 = load ptr, ptr %70, align 8, !tbaa !9
  %72 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %68, ptr noundef @.str.2, ptr noundef %71) #9
  call void @exit(i32 noundef 1) #10
  unreachable

73:                                               ; preds = %60
  %74 = load ptr, ptr %5, align 8, !tbaa !9
  %75 = getelementptr inbounds ptr, ptr %74, i64 1
  %76 = load ptr, ptr %75, align 8, !tbaa !9
  %77 = call ptr @strrchr(ptr noundef %76, i32 noundef 46) #11
  %78 = icmp ne ptr %77, null
  br i1 %78, label %79, label %458

79:                                               ; preds = %73
  %80 = load ptr, ptr %5, align 8, !tbaa !9
  %81 = getelementptr inbounds ptr, ptr %80, i64 1
  %82 = load ptr, ptr %81, align 8, !tbaa !9
  %83 = call ptr @strrchr(ptr noundef %82, i32 noundef 46) #11
  %84 = call i32 @strcmp(ptr noundef %83, ptr noundef @.str.3) #11
  %85 = icmp eq i32 %84, 0
  br i1 %85, label %86, label %458

86:                                               ; preds = %79
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #9
  %87 = load ptr, ptr %5, align 8, !tbaa !9
  %88 = getelementptr inbounds ptr, ptr %87, i64 1
  %89 = load ptr, ptr %88, align 8, !tbaa !9
  %90 = call ptr @codebook_load(ptr noundef %89)
  store ptr %90, ptr %15, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #9
  %91 = load ptr, ptr %15, align 8, !tbaa !9
  %92 = getelementptr inbounds %struct.codebook, ptr %91, i32 0, i32 3
  %93 = load ptr, ptr %92, align 8, !tbaa !13
  store ptr %93, ptr %16, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #9
  %94 = load ptr, ptr %6, align 8, !tbaa !9
  %95 = call i32 @fclose(ptr noundef %94)
  %96 = load ptr, ptr %16, align 8, !tbaa !9
  %97 = getelementptr inbounds %struct.static_codebook, ptr %96, i32 0, i32 3
  %98 = load i32, ptr %97, align 8, !tbaa !15
  switch i32 %98, label %112 [
    i32 0, label %99
    i32 1, label %101
    i32 2, label %104
  ]

99:                                               ; preds = %86
  %100 = call i32 (ptr, ...) @printf(ptr noundef @.str.4)
  call void @exit(i32 noundef 0) #10
  unreachable

101:                                              ; preds = %86
  %102 = load ptr, ptr %16, align 8, !tbaa !9
  %103 = call i64 @_book_maptype1_quantvals(ptr noundef %102)
  store i64 %103, ptr %10, align 8, !tbaa !11
  br label %112

104:                                              ; preds = %86
  %105 = load ptr, ptr %16, align 8, !tbaa !9
  %106 = getelementptr inbounds %struct.static_codebook, ptr %105, i32 0, i32 1
  %107 = load i64, ptr %106, align 8, !tbaa !17
  %108 = load ptr, ptr %16, align 8, !tbaa !9
  %109 = getelementptr inbounds %struct.static_codebook, ptr %108, i32 0, i32 0
  %110 = load i64, ptr %109, align 8, !tbaa !18
  %111 = mul nsw i64 %107, %110
  store i64 %111, ptr %10, align 8, !tbaa !11
  br label %112

112:                                              ; preds = %104, %101, %86
  %113 = load ptr, ptr %16, align 8, !tbaa !9
  %114 = getelementptr inbounds %struct.static_codebook, ptr %113, i32 0, i32 4
  %115 = load i64, ptr %114, align 8, !tbaa !19
  %116 = call float @_float32_unpack(i64 noundef %115)
  store float %116, ptr %8, align 4, !tbaa !20
  store float %116, ptr %9, align 4, !tbaa !20
  %117 = load ptr, ptr %16, align 8, !tbaa !9
  %118 = getelementptr inbounds %struct.static_codebook, ptr %117, i32 0, i32 5
  %119 = load i64, ptr %118, align 8, !tbaa !22
  %120 = call float @_float32_unpack(i64 noundef %119)
  store float %120, ptr %17, align 4, !tbaa !20
  store i32 0, ptr %18, align 4, !tbaa !5
  br label %121

121:                                              ; preds = %144, %112
  %122 = load i32, ptr %18, align 4, !tbaa !5
  %123 = sext i32 %122 to i64
  %124 = load i64, ptr %10, align 8, !tbaa !11
  %125 = icmp slt i64 %123, %124
  br i1 %125, label %126, label %147

126:                                              ; preds = %121
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #9
  %127 = load ptr, ptr %16, align 8, !tbaa !9
  %128 = getelementptr inbounds %struct.static_codebook, ptr %127, i32 0, i32 8
  %129 = load ptr, ptr %128, align 8, !tbaa !23
  %130 = load i32, ptr %18, align 4, !tbaa !5
  %131 = sext i32 %130 to i64
  %132 = getelementptr inbounds i64, ptr %129, i64 %131
  %133 = load i64, ptr %132, align 8, !tbaa !11
  %134 = sitofp i64 %133 to float
  %135 = load float, ptr %17, align 4, !tbaa !20
  %136 = load float, ptr %8, align 4, !tbaa !20
  %137 = call float @llvm.fmuladd.f32(float %134, float %135, float %136)
  store float %137, ptr %19, align 4, !tbaa !20
  %138 = load float, ptr %19, align 4, !tbaa !20
  %139 = load float, ptr %9, align 4, !tbaa !20
  %140 = fcmp ogt float %138, %139
  br i1 %140, label %141, label %143

141:                                              ; preds = %126
  %142 = load float, ptr %19, align 4, !tbaa !20
  store float %142, ptr %9, align 4, !tbaa !20
  br label %143

143:                                              ; preds = %141, %126
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #9
  br label %144

144:                                              ; preds = %143
  %145 = load i32, ptr %18, align 4, !tbaa !5
  %146 = add nsw i32 %145, 1
  store i32 %146, ptr %18, align 4, !tbaa !5
  br label %121, !llvm.loop !24

147:                                              ; preds = %121
  %148 = load float, ptr %8, align 4, !tbaa !20
  %149 = fpext float %148 to double
  %150 = call i32 (ptr, ...) @printf(ptr noundef @.str.5, double noundef %149)
  %151 = load float, ptr %9, align 4, !tbaa !20
  %152 = fpext float %151 to double
  %153 = call i32 (ptr, ...) @printf(ptr noundef @.str.6, double noundef %152)
  %154 = load ptr, ptr %16, align 8, !tbaa !9
  %155 = getelementptr inbounds %struct.static_codebook, ptr %154, i32 0, i32 3
  %156 = load i32, ptr %155, align 8, !tbaa !15
  switch i32 %156, label %457 [
    i32 1, label %157
    i32 2, label %455
  ]

157:                                              ; preds = %147
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #9
  store i64 0, ptr %22, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #9
  %158 = load i64, ptr %10, align 8, !tbaa !11
  %159 = call noalias ptr @calloc(i64 noundef %158, i64 noundef 8) #12
  store ptr %159, ptr %23, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #9
  %160 = load ptr, ptr %16, align 8, !tbaa !9
  %161 = getelementptr inbounds %struct.static_codebook, ptr %160, i32 0, i32 2
  %162 = load ptr, ptr %161, align 8, !tbaa !26
  %163 = getelementptr inbounds i64, ptr %162, i64 0
  %164 = load i64, ptr %163, align 8, !tbaa !11
  store i64 %164, ptr %24, align 8, !tbaa !11
  %165 = load i64, ptr %10, align 8, !tbaa !11
  %166 = call noalias ptr @calloc(i64 noundef %165, i64 noundef 8) #12
  store ptr %166, ptr %12, align 8, !tbaa !9
  store i32 0, ptr %18, align 4, !tbaa !5
  br label %167

167:                                              ; preds = %183, %157
  %168 = load i32, ptr %18, align 4, !tbaa !5
  %169 = sext i32 %168 to i64
  %170 = load i64, ptr %10, align 8, !tbaa !11
  %171 = icmp slt i64 %169, %170
  br i1 %171, label %172, label %186

172:                                              ; preds = %167
  %173 = load ptr, ptr %16, align 8, !tbaa !9
  %174 = getelementptr inbounds %struct.static_codebook, ptr %173, i32 0, i32 8
  %175 = load ptr, ptr %174, align 8, !tbaa !23
  %176 = load i32, ptr %18, align 4, !tbaa !5
  %177 = sext i32 %176 to i64
  %178 = getelementptr inbounds i64, ptr %175, i64 %177
  %179 = load ptr, ptr %23, align 8, !tbaa !9
  %180 = load i32, ptr %18, align 4, !tbaa !5
  %181 = sext i32 %180 to i64
  %182 = getelementptr inbounds ptr, ptr %179, i64 %181
  store ptr %178, ptr %182, align 8, !tbaa !9
  br label %183

183:                                              ; preds = %172
  %184 = load i32, ptr %18, align 4, !tbaa !5
  %185 = add nsw i32 %184, 1
  store i32 %185, ptr %18, align 4, !tbaa !5
  br label %167, !llvm.loop !27

186:                                              ; preds = %167
  %187 = load ptr, ptr %23, align 8, !tbaa !9
  %188 = load i64, ptr %10, align 8, !tbaa !11
  call void @qsort(ptr noundef %187, i64 noundef %188, i64 noundef 8, ptr noundef @ascend)
  store i32 0, ptr %18, align 4, !tbaa !5
  br label %189

189:                                              ; preds = %215, %186
  %190 = load i32, ptr %18, align 4, !tbaa !5
  %191 = sext i32 %190 to i64
  %192 = load ptr, ptr %15, align 8, !tbaa !9
  %193 = getelementptr inbounds %struct.codebook, ptr %192, i32 0, i32 1
  %194 = load i64, ptr %193, align 8, !tbaa !28
  %195 = icmp slt i64 %191, %194
  br i1 %195, label %196, label %218

196:                                              ; preds = %189
  %197 = load ptr, ptr %16, align 8, !tbaa !9
  %198 = getelementptr inbounds %struct.static_codebook, ptr %197, i32 0, i32 2
  %199 = load ptr, ptr %198, align 8, !tbaa !26
  %200 = load i32, ptr %18, align 4, !tbaa !5
  %201 = sext i32 %200 to i64
  %202 = getelementptr inbounds i64, ptr %199, i64 %201
  %203 = load i64, ptr %202, align 8, !tbaa !11
  %204 = load i64, ptr %24, align 8, !tbaa !11
  %205 = icmp sgt i64 %203, %204
  br i1 %205, label %206, label %214

206:                                              ; preds = %196
  %207 = load ptr, ptr %16, align 8, !tbaa !9
  %208 = getelementptr inbounds %struct.static_codebook, ptr %207, i32 0, i32 2
  %209 = load ptr, ptr %208, align 8, !tbaa !26
  %210 = load i32, ptr %18, align 4, !tbaa !5
  %211 = sext i32 %210 to i64
  %212 = getelementptr inbounds i64, ptr %209, i64 %211
  %213 = load i64, ptr %212, align 8, !tbaa !11
  store i64 %213, ptr %24, align 8, !tbaa !11
  br label %214

214:                                              ; preds = %206, %196
  br label %215

215:                                              ; preds = %214
  %216 = load i32, ptr %18, align 4, !tbaa !5
  %217 = add nsw i32 %216, 1
  store i32 %217, ptr %18, align 4, !tbaa !5
  br label %189, !llvm.loop !29

218:                                              ; preds = %189
  store i32 0, ptr %20, align 4, !tbaa !5
  br label %219

219:                                              ; preds = %303, %218
  %220 = load i32, ptr %20, align 4, !tbaa !5
  %221 = sext i32 %220 to i64
  %222 = load ptr, ptr %15, align 8, !tbaa !9
  %223 = getelementptr inbounds %struct.codebook, ptr %222, i32 0, i32 1
  %224 = load i64, ptr %223, align 8, !tbaa !28
  %225 = icmp slt i64 %221, %224
  br i1 %225, label %226, label %306

226:                                              ; preds = %219
  %227 = load ptr, ptr %16, align 8, !tbaa !9
  %228 = getelementptr inbounds %struct.static_codebook, ptr %227, i32 0, i32 2
  %229 = load ptr, ptr %228, align 8, !tbaa !26
  %230 = load i32, ptr %20, align 4, !tbaa !5
  %231 = sext i32 %230 to i64
  %232 = getelementptr inbounds i64, ptr %229, i64 %231
  %233 = load i64, ptr %232, align 8, !tbaa !11
  %234 = icmp ne i64 %233, 0
  br i1 %234, label %235, label %302

235:                                              ; preds = %226
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #9
  store i32 1, ptr %25, align 4, !tbaa !5
  %236 = load i32, ptr %20, align 4, !tbaa !5
  %237 = call i32 (ptr, ...) @printf(ptr noundef @.str.7, i32 noundef %236)
  store i32 0, ptr %21, align 4, !tbaa !5
  br label %238

238:                                              ; preds = %277, %235
  %239 = load i32, ptr %21, align 4, !tbaa !5
  %240 = sext i32 %239 to i64
  %241 = load ptr, ptr %15, align 8, !tbaa !9
  %242 = getelementptr inbounds %struct.codebook, ptr %241, i32 0, i32 0
  %243 = load i64, ptr %242, align 8, !tbaa !30
  %244 = icmp slt i64 %240, %243
  br i1 %244, label %245, label %280

245:                                              ; preds = %238
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #9
  %246 = load i32, ptr %20, align 4, !tbaa !5
  %247 = load i32, ptr %25, align 4, !tbaa !5
  %248 = sdiv i32 %246, %247
  %249 = sext i32 %248 to i64
  %250 = load i64, ptr %10, align 8, !tbaa !11
  %251 = srem i64 %249, %250
  %252 = trunc i64 %251 to i32
  store i32 %252, ptr %26, align 4, !tbaa !5
  %253 = load ptr, ptr %16, align 8, !tbaa !9
  %254 = getelementptr inbounds %struct.static_codebook, ptr %253, i32 0, i32 8
  %255 = load ptr, ptr %254, align 8, !tbaa !23
  %256 = load i32, ptr %26, align 4, !tbaa !5
  %257 = sext i32 %256 to i64
  %258 = getelementptr inbounds i64, ptr %255, i64 %257
  %259 = load i64, ptr %258, align 8, !tbaa !11
  %260 = sitofp i64 %259 to float
  %261 = load ptr, ptr %16, align 8, !tbaa !9
  %262 = getelementptr inbounds %struct.static_codebook, ptr %261, i32 0, i32 5
  %263 = load i64, ptr %262, align 8, !tbaa !22
  %264 = call float @_float32_unpack(i64 noundef %263)
  %265 = load ptr, ptr %16, align 8, !tbaa !9
  %266 = getelementptr inbounds %struct.static_codebook, ptr %265, i32 0, i32 4
  %267 = load i64, ptr %266, align 8, !tbaa !19
  %268 = call float @_float32_unpack(i64 noundef %267)
  %269 = call float @llvm.fmuladd.f32(float %260, float %264, float %268)
  %270 = fpext float %269 to double
  %271 = call i32 (ptr, ...) @printf(ptr noundef @.str.8, double noundef %270)
  %272 = load i64, ptr %10, align 8, !tbaa !11
  %273 = load i32, ptr %25, align 4, !tbaa !5
  %274 = sext i32 %273 to i64
  %275 = mul nsw i64 %274, %272
  %276 = trunc i64 %275 to i32
  store i32 %276, ptr %25, align 4, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #9
  br label %277

277:                                              ; preds = %245
  %278 = load i32, ptr %21, align 4, !tbaa !5
  %279 = add nsw i32 %278, 1
  store i32 %279, ptr %21, align 4, !tbaa !5
  br label %238, !llvm.loop !31

280:                                              ; preds = %238
  %281 = call i32 (ptr, ...) @printf(ptr noundef @.str.9)
  store i32 0, ptr %21, align 4, !tbaa !5
  br label %282

282:                                              ; preds = %297, %280
  %283 = load i32, ptr %21, align 4, !tbaa !5
  %284 = sext i32 %283 to i64
  %285 = load i64, ptr %24, align 8, !tbaa !11
  %286 = load ptr, ptr %16, align 8, !tbaa !9
  %287 = getelementptr inbounds %struct.static_codebook, ptr %286, i32 0, i32 2
  %288 = load ptr, ptr %287, align 8, !tbaa !26
  %289 = load i32, ptr %20, align 4, !tbaa !5
  %290 = sext i32 %289 to i64
  %291 = getelementptr inbounds i64, ptr %288, i64 %290
  %292 = load i64, ptr %291, align 8, !tbaa !11
  %293 = sub nsw i64 %285, %292
  %294 = icmp slt i64 %284, %293
  br i1 %294, label %295, label %300

295:                                              ; preds = %282
  %296 = call i32 (ptr, ...) @printf(ptr noundef @.str.10)
  br label %297

297:                                              ; preds = %295
  %298 = load i32, ptr %21, align 4, !tbaa !5
  %299 = add nsw i32 %298, 1
  store i32 %299, ptr %21, align 4, !tbaa !5
  br label %282, !llvm.loop !32

300:                                              ; preds = %282
  %301 = call i32 (ptr, ...) @printf(ptr noundef @.str.11)
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #9
  br label %302

302:                                              ; preds = %300, %226
  br label %303

303:                                              ; preds = %302
  %304 = load i32, ptr %20, align 4, !tbaa !5
  %305 = add nsw i32 %304, 1
  store i32 %305, ptr %20, align 4, !tbaa !5
  br label %219, !llvm.loop !33

306:                                              ; preds = %219
  store i32 0, ptr %20, align 4, !tbaa !5
  br label %307

307:                                              ; preds = %367, %306
  %308 = load i32, ptr %20, align 4, !tbaa !5
  %309 = sext i32 %308 to i64
  %310 = load ptr, ptr %15, align 8, !tbaa !9
  %311 = getelementptr inbounds %struct.codebook, ptr %310, i32 0, i32 1
  %312 = load i64, ptr %311, align 8, !tbaa !28
  %313 = icmp slt i64 %309, %312
  br i1 %313, label %314, label %370

314:                                              ; preds = %307
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #9
  store i32 1, ptr %27, align 4, !tbaa !5
  store i32 0, ptr %21, align 4, !tbaa !5
  br label %315

315:                                              ; preds = %363, %314
  %316 = load i32, ptr %21, align 4, !tbaa !5
  %317 = sext i32 %316 to i64
  %318 = load ptr, ptr %15, align 8, !tbaa !9
  %319 = getelementptr inbounds %struct.codebook, ptr %318, i32 0, i32 0
  %320 = load i64, ptr %319, align 8, !tbaa !30
  %321 = icmp slt i64 %317, %320
  br i1 %321, label %322, label %366

322:                                              ; preds = %315
  %323 = load ptr, ptr %16, align 8, !tbaa !9
  %324 = getelementptr inbounds %struct.static_codebook, ptr %323, i32 0, i32 2
  %325 = load ptr, ptr %324, align 8, !tbaa !26
  %326 = load i32, ptr %20, align 4, !tbaa !5
  %327 = sext i32 %326 to i64
  %328 = getelementptr inbounds i64, ptr %325, i64 %327
  %329 = load i64, ptr %328, align 8, !tbaa !11
  %330 = icmp ne i64 %329, 0
  br i1 %330, label %331, label %362

331:                                              ; preds = %322
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #9
  %332 = load i32, ptr %20, align 4, !tbaa !5
  %333 = load i32, ptr %27, align 4, !tbaa !5
  %334 = sdiv i32 %332, %333
  %335 = sext i32 %334 to i64
  %336 = load i64, ptr %10, align 8, !tbaa !11
  %337 = srem i64 %335, %336
  %338 = trunc i64 %337 to i32
  store i32 %338, ptr %28, align 4, !tbaa !5
  %339 = load i64, ptr %24, align 8, !tbaa !11
  %340 = load ptr, ptr %16, align 8, !tbaa !9
  %341 = getelementptr inbounds %struct.static_codebook, ptr %340, i32 0, i32 2
  %342 = load ptr, ptr %341, align 8, !tbaa !26
  %343 = load i32, ptr %20, align 4, !tbaa !5
  %344 = sext i32 %343 to i64
  %345 = getelementptr inbounds i64, ptr %342, i64 %344
  %346 = load i64, ptr %345, align 8, !tbaa !11
  %347 = sub nsw i64 %339, %346
  %348 = trunc i64 %347 to i32
  %349 = shl i32 1, %348
  %350 = sext i32 %349 to i64
  %351 = load ptr, ptr %12, align 8, !tbaa !9
  %352 = load i32, ptr %28, align 4, !tbaa !5
  %353 = sext i32 %352 to i64
  %354 = getelementptr inbounds i64, ptr %351, i64 %353
  %355 = load i64, ptr %354, align 8, !tbaa !11
  %356 = add nsw i64 %355, %350
  store i64 %356, ptr %354, align 8, !tbaa !11
  %357 = load i64, ptr %10, align 8, !tbaa !11
  %358 = load i32, ptr %27, align 4, !tbaa !5
  %359 = sext i32 %358 to i64
  %360 = mul nsw i64 %359, %357
  %361 = trunc i64 %360 to i32
  store i32 %361, ptr %27, align 4, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #9
  br label %362

362:                                              ; preds = %331, %322
  br label %363

363:                                              ; preds = %362
  %364 = load i32, ptr %21, align 4, !tbaa !5
  %365 = add nsw i32 %364, 1
  store i32 %365, ptr %21, align 4, !tbaa !5
  br label %315, !llvm.loop !34

366:                                              ; preds = %315
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #9
  br label %367

367:                                              ; preds = %366
  %368 = load i32, ptr %20, align 4, !tbaa !5
  %369 = add nsw i32 %368, 1
  store i32 %369, ptr %20, align 4, !tbaa !5
  br label %307, !llvm.loop !35

370:                                              ; preds = %307
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #9
  store i64 0, ptr %29, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #9
  store i64 0, ptr %30, align 8, !tbaa !11
  br label %371

371:                                              ; preds = %388, %370
  %372 = load i64, ptr %30, align 8, !tbaa !11
  %373 = load i64, ptr %10, align 8, !tbaa !11
  %374 = icmp slt i64 %372, %373
  br i1 %374, label %375, label %391

375:                                              ; preds = %371
  %376 = load ptr, ptr %12, align 8, !tbaa !9
  %377 = load i64, ptr %30, align 8, !tbaa !11
  %378 = getelementptr inbounds i64, ptr %376, i64 %377
  %379 = load i64, ptr %378, align 8, !tbaa !11
  %380 = load i64, ptr %29, align 8, !tbaa !11
  %381 = icmp sgt i64 %379, %380
  br i1 %381, label %382, label %387

382:                                              ; preds = %375
  %383 = load ptr, ptr %12, align 8, !tbaa !9
  %384 = load i64, ptr %30, align 8, !tbaa !11
  %385 = getelementptr inbounds i64, ptr %383, i64 %384
  %386 = load i64, ptr %385, align 8, !tbaa !11
  store i64 %386, ptr %29, align 8, !tbaa !11
  br label %387

387:                                              ; preds = %382, %375
  br label %388

388:                                              ; preds = %387
  %389 = load i64, ptr %30, align 8, !tbaa !11
  %390 = add nsw i64 %389, 1
  store i64 %390, ptr %30, align 8, !tbaa !11
  br label %371, !llvm.loop !36

391:                                              ; preds = %371
  store i64 0, ptr %30, align 8, !tbaa !11
  br label %392

392:                                              ; preds = %451, %391
  %393 = load i64, ptr %30, align 8, !tbaa !11
  %394 = load i64, ptr %10, align 8, !tbaa !11
  %395 = icmp slt i64 %393, %394
  br i1 %395, label %396, label %454

396:                                              ; preds = %392
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #9
  %397 = load ptr, ptr %23, align 8, !tbaa !9
  %398 = load i64, ptr %30, align 8, !tbaa !11
  %399 = getelementptr inbounds ptr, ptr %397, i64 %398
  %400 = load ptr, ptr %399, align 8, !tbaa !9
  %401 = load ptr, ptr %16, align 8, !tbaa !9
  %402 = getelementptr inbounds %struct.static_codebook, ptr %401, i32 0, i32 8
  %403 = load ptr, ptr %402, align 8, !tbaa !23
  %404 = ptrtoint ptr %400 to i64
  %405 = ptrtoint ptr %403 to i64
  %406 = sub i64 %404, %405
  %407 = sdiv exact i64 %406, 8
  %408 = trunc i64 %407 to i32
  store i32 %408, ptr %32, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #9
  %409 = load i64, ptr %29, align 8, !tbaa !11
  %410 = sitofp i64 %409 to double
  %411 = fdiv double 5.000000e+01, %410
  %412 = load ptr, ptr %12, align 8, !tbaa !9
  %413 = load i32, ptr %32, align 4, !tbaa !5
  %414 = sext i32 %413 to i64
  %415 = getelementptr inbounds i64, ptr %412, i64 %414
  %416 = load i64, ptr %415, align 8, !tbaa !11
  %417 = sitofp i64 %416 to double
  %418 = fmul double %411, %417
  %419 = call double @llvm.rint.f64(double %418)
  %420 = fptosi double %419 to i32
  store i32 %420, ptr %33, align 4, !tbaa !5
  %421 = load ptr, ptr %16, align 8, !tbaa !9
  %422 = getelementptr inbounds %struct.static_codebook, ptr %421, i32 0, i32 8
  %423 = load ptr, ptr %422, align 8, !tbaa !23
  %424 = load i32, ptr %32, align 4, !tbaa !5
  %425 = sext i32 %424 to i64
  %426 = getelementptr inbounds i64, ptr %423, i64 %425
  %427 = load i64, ptr %426, align 8, !tbaa !11
  %428 = sitofp i64 %427 to float
  %429 = load float, ptr %17, align 4, !tbaa !20
  %430 = load float, ptr %8, align 4, !tbaa !20
  %431 = call float @llvm.fmuladd.f32(float %428, float %429, float %430)
  %432 = fpext float %431 to double
  %433 = load ptr, ptr %12, align 8, !tbaa !9
  %434 = load i32, ptr %32, align 4, !tbaa !5
  %435 = sext i32 %434 to i64
  %436 = getelementptr inbounds i64, ptr %433, i64 %435
  %437 = load i64, ptr %436, align 8, !tbaa !11
  %438 = call i32 (ptr, ...) @printf(ptr noundef @.str.12, double noundef %432, i64 noundef %437)
  store i64 0, ptr %31, align 8, !tbaa !11
  br label %439

439:                                              ; preds = %446, %396
  %440 = load i64, ptr %31, align 8, !tbaa !11
  %441 = load i32, ptr %33, align 4, !tbaa !5
  %442 = sext i32 %441 to i64
  %443 = icmp slt i64 %440, %442
  br i1 %443, label %444, label %449

444:                                              ; preds = %439
  %445 = call i32 (ptr, ...) @printf(ptr noundef @.str.10)
  br label %446

446:                                              ; preds = %444
  %447 = load i64, ptr %31, align 8, !tbaa !11
  %448 = add nsw i64 %447, 1
  store i64 %448, ptr %31, align 8, !tbaa !11
  br label %439, !llvm.loop !37

449:                                              ; preds = %439
  %450 = call i32 (ptr, ...) @printf(ptr noundef @.str.11)
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #9
  br label %451

451:                                              ; preds = %449
  %452 = load i64, ptr %30, align 8, !tbaa !11
  %453 = add nsw i64 %452, 1
  store i64 %453, ptr %30, align 8, !tbaa !11
  br label %392, !llvm.loop !38

454:                                              ; preds = %392
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #9
  br label %457

455:                                              ; preds = %147
  %456 = call i32 (ptr, ...) @printf(ptr noundef @.str.13)
  br label %457

457:                                              ; preds = %455, %454, %147
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #9
  br label %705

458:                                              ; preds = %79, %73
  %459 = load ptr, ptr %6, align 8, !tbaa !9
  %460 = call ptr @setup_line(ptr noundef %459)
  store ptr %460, ptr %14, align 8, !tbaa !9
  br label %461

461:                                              ; preds = %525, %458
  %462 = load ptr, ptr %14, align 8, !tbaa !9
  %463 = icmp ne ptr %462, null
  br i1 %463, label %464, label %528

464:                                              ; preds = %461
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #9
  call void @llvm.lifetime.start.p0(i64 80, ptr %35) #9
  %465 = load i64, ptr %7, align 8, !tbaa !11
  %466 = add nsw i64 %465, 1
  store i64 %466, ptr %7, align 8, !tbaa !11
  %467 = getelementptr inbounds [80 x i8], ptr %35, i64 0, i64 0
  %468 = load float, ptr %8, align 4, !tbaa !20
  %469 = fpext float %468 to double
  %470 = load float, ptr %9, align 4, !tbaa !20
  %471 = fpext float %470 to double
  %472 = call i32 (ptr, ptr, ...) @sprintf(ptr noundef %467, ptr noundef @.str.14, double noundef %469, double noundef %471) #9
  %473 = load i64, ptr %7, align 8, !tbaa !11
  %474 = and i64 %473, 255
  %475 = icmp ne i64 %474, 0
  br i1 %475, label %480, label %476

476:                                              ; preds = %464
  %477 = getelementptr inbounds [80 x i8], ptr %35, i64 0, i64 0
  %478 = load i64, ptr %7, align 8, !tbaa !11
  %479 = trunc i64 %478 to i32
  call void @spinnit(ptr noundef %477, i32 noundef %479)
  br label %480

480:                                              ; preds = %476, %464
  br label %481

481:                                              ; preds = %490, %480
  %482 = load i32, ptr %11, align 4, !tbaa !5
  %483 = icmp ne i32 %482, 0
  br i1 %483, label %488, label %484

484:                                              ; preds = %481
  %485 = load ptr, ptr %14, align 8, !tbaa !9
  %486 = call i32 (ptr, ptr, ...) @__isoc99_sscanf(ptr noundef %485, ptr noundef @.str.15, ptr noundef %34) #9
  %487 = icmp eq i32 %486, 1
  br label %488

488:                                              ; preds = %484, %481
  %489 = phi i1 [ false, %481 ], [ %487, %484 ]
  br i1 %489, label %490, label %494

490:                                              ; preds = %488
  %491 = load ptr, ptr %14, align 8, !tbaa !9
  %492 = call ptr @strchr(ptr noundef %491, i32 noundef 44) #11
  store ptr %492, ptr %14, align 8, !tbaa !9
  %493 = load float, ptr %34, align 4, !tbaa !20
  store float %493, ptr %9, align 4, !tbaa !20
  store float %493, ptr %8, align 4, !tbaa !20
  store i32 1, ptr %11, align 4, !tbaa !5
  br label %481, !llvm.loop !39

494:                                              ; preds = %488
  br label %495

495:                                              ; preds = %524, %494
  %496 = load ptr, ptr %14, align 8, !tbaa !9
  %497 = icmp ne ptr %496, null
  br i1 %497, label %498, label %502

498:                                              ; preds = %495
  %499 = load ptr, ptr %14, align 8, !tbaa !9
  %500 = call i32 (ptr, ptr, ...) @__isoc99_sscanf(ptr noundef %499, ptr noundef @.str.15, ptr noundef %34) #9
  %501 = icmp eq i32 %500, 1
  br label %502

502:                                              ; preds = %498, %495
  %503 = phi i1 [ false, %495 ], [ %501, %498 ]
  br i1 %503, label %504, label %525

504:                                              ; preds = %502
  %505 = load ptr, ptr %14, align 8, !tbaa !9
  %506 = call ptr @strchr(ptr noundef %505, i32 noundef 44) #11
  store ptr %506, ptr %14, align 8, !tbaa !9
  %507 = load ptr, ptr %14, align 8, !tbaa !9
  %508 = icmp ne ptr %507, null
  br i1 %508, label %509, label %512

509:                                              ; preds = %504
  %510 = load ptr, ptr %14, align 8, !tbaa !9
  %511 = getelementptr inbounds i8, ptr %510, i32 1
  store ptr %511, ptr %14, align 8, !tbaa !9
  br label %512

512:                                              ; preds = %509, %504
  %513 = load float, ptr %34, align 4, !tbaa !20
  %514 = load float, ptr %8, align 4, !tbaa !20
  %515 = fcmp olt float %513, %514
  br i1 %515, label %516, label %518

516:                                              ; preds = %512
  %517 = load float, ptr %34, align 4, !tbaa !20
  store float %517, ptr %8, align 4, !tbaa !20
  br label %518

518:                                              ; preds = %516, %512
  %519 = load float, ptr %34, align 4, !tbaa !20
  %520 = load float, ptr %9, align 4, !tbaa !20
  %521 = fcmp ogt float %519, %520
  br i1 %521, label %522, label %524

522:                                              ; preds = %518
  %523 = load float, ptr %34, align 4, !tbaa !20
  store float %523, ptr %9, align 4, !tbaa !20
  br label %524

524:                                              ; preds = %522, %518
  br label %495, !llvm.loop !40

525:                                              ; preds = %502
  %526 = load ptr, ptr %6, align 8, !tbaa !9
  %527 = call ptr @setup_line(ptr noundef %526)
  store ptr %527, ptr %14, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 80, ptr %35) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #9
  br label %461, !llvm.loop !41

528:                                              ; preds = %461
  %529 = load i64, ptr %10, align 8, !tbaa !11
  %530 = icmp slt i64 %529, 1
  br i1 %530, label %531, label %548

531:                                              ; preds = %528
  %532 = load float, ptr %9, align 4, !tbaa !20
  %533 = load float, ptr %8, align 4, !tbaa !20
  %534 = fsub float %532, %533
  %535 = fptosi float %534 to i32
  %536 = sitofp i32 %535 to float
  %537 = load float, ptr %8, align 4, !tbaa !20
  %538 = load float, ptr %9, align 4, !tbaa !20
  %539 = fsub float %537, %538
  %540 = fcmp oeq float %536, %539
  br i1 %540, label %541, label %546

541:                                              ; preds = %531
  %542 = load float, ptr %9, align 4, !tbaa !20
  %543 = load float, ptr %8, align 4, !tbaa !20
  %544 = fsub float %542, %543
  %545 = fptosi float %544 to i64
  store i64 %545, ptr %10, align 8, !tbaa !11
  br label %547

546:                                              ; preds = %531
  store i64 25, ptr %10, align 8, !tbaa !11
  br label %547

547:                                              ; preds = %546, %541
  br label %548

548:                                              ; preds = %547, %528
  %549 = call i32 (ptr, ...) @printf(ptr noundef @.str.16)
  %550 = load float, ptr %8, align 4, !tbaa !20
  %551 = fpext float %550 to double
  %552 = call i32 (ptr, ...) @printf(ptr noundef @.str.5, double noundef %551)
  %553 = load float, ptr %9, align 4, !tbaa !20
  %554 = fpext float %553 to double
  %555 = call i32 (ptr, ...) @printf(ptr noundef @.str.6, double noundef %554)
  %556 = load ptr, ptr %5, align 8, !tbaa !9
  %557 = getelementptr inbounds ptr, ptr %556, i64 2
  %558 = load ptr, ptr %557, align 8, !tbaa !9
  %559 = icmp ne ptr %558, null
  br i1 %559, label %560, label %702

560:                                              ; preds = %548
  %561 = load i64, ptr %10, align 8, !tbaa !11
  %562 = add nsw i64 %561, 1
  %563 = call i32 (ptr, ...) @printf(ptr noundef @.str.17, i64 noundef %562)
  %564 = load i64, ptr %10, align 8, !tbaa !11
  %565 = add nsw i64 %564, 1
  %566 = call noalias ptr @calloc(i64 noundef %565, i64 noundef 8) #12
  store ptr %566, ptr %12, align 8, !tbaa !9
  %567 = load ptr, ptr %6, align 8, !tbaa !9
  call void @rewind(ptr noundef %567)
  %568 = load ptr, ptr %6, align 8, !tbaa !9
  %569 = call ptr @setup_line(ptr noundef %568)
  store ptr %569, ptr %14, align 8, !tbaa !9
  br label %570

570:                                              ; preds = %624, %560
  %571 = load ptr, ptr %14, align 8, !tbaa !9
  %572 = icmp ne ptr %571, null
  br i1 %572, label %573, label %627

573:                                              ; preds = %570
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #9
  %574 = load i64, ptr %7, align 8, !tbaa !11
  %575 = add nsw i64 %574, -1
  store i64 %575, ptr %7, align 8, !tbaa !11
  %576 = load i64, ptr %7, align 8, !tbaa !11
  %577 = and i64 %576, 255
  %578 = icmp ne i64 %577, 0
  br i1 %578, label %582, label %579

579:                                              ; preds = %573
  %580 = load i64, ptr %7, align 8, !tbaa !11
  %581 = trunc i64 %580 to i32
  call void @spinnit(ptr noundef @.str.18, i32 noundef %581)
  br label %582

582:                                              ; preds = %579, %573
  br label %583

583:                                              ; preds = %600, %582
  %584 = load ptr, ptr %14, align 8, !tbaa !9
  %585 = icmp ne ptr %584, null
  br i1 %585, label %586, label %590

586:                                              ; preds = %583
  %587 = load ptr, ptr %14, align 8, !tbaa !9
  %588 = call i32 (ptr, ptr, ...) @__isoc99_sscanf(ptr noundef %587, ptr noundef @.str.15, ptr noundef %36) #9
  %589 = icmp eq i32 %588, 1
  br label %590

590:                                              ; preds = %586, %583
  %591 = phi i1 [ false, %583 ], [ %589, %586 ]
  br i1 %591, label %592, label %624

592:                                              ; preds = %590
  %593 = load ptr, ptr %14, align 8, !tbaa !9
  %594 = call ptr @strchr(ptr noundef %593, i32 noundef 44) #11
  store ptr %594, ptr %14, align 8, !tbaa !9
  %595 = load ptr, ptr %14, align 8, !tbaa !9
  %596 = icmp ne ptr %595, null
  br i1 %596, label %597, label %600

597:                                              ; preds = %592
  %598 = load ptr, ptr %14, align 8, !tbaa !9
  %599 = getelementptr inbounds i8, ptr %598, i32 1
  store ptr %599, ptr %14, align 8, !tbaa !9
  br label %600

600:                                              ; preds = %597, %592
  %601 = load float, ptr %8, align 4, !tbaa !20
  %602 = load float, ptr %36, align 4, !tbaa !20
  %603 = fsub float %602, %601
  store float %603, ptr %36, align 4, !tbaa !20
  %604 = load float, ptr %9, align 4, !tbaa !20
  %605 = load float, ptr %8, align 4, !tbaa !20
  %606 = fsub float %604, %605
  %607 = load float, ptr %36, align 4, !tbaa !20
  %608 = fdiv float %607, %606
  store float %608, ptr %36, align 4, !tbaa !20
  %609 = load i64, ptr %10, align 8, !tbaa !11
  %610 = sitofp i64 %609 to float
  %611 = load float, ptr %36, align 4, !tbaa !20
  %612 = fmul float %611, %610
  store float %612, ptr %36, align 4, !tbaa !20
  %613 = load ptr, ptr %12, align 8, !tbaa !9
  %614 = load float, ptr %36, align 4, !tbaa !20
  %615 = fpext float %614 to double
  %616 = call double @llvm.rint.f64(double %615)
  %617 = fptosi double %616 to i32
  %618 = sext i32 %617 to i64
  %619 = getelementptr inbounds i64, ptr %613, i64 %618
  %620 = load i64, ptr %619, align 8, !tbaa !11
  %621 = add nsw i64 %620, 1
  store i64 %621, ptr %619, align 8, !tbaa !11
  %622 = load i64, ptr %13, align 8, !tbaa !11
  %623 = add nsw i64 %622, 1
  store i64 %623, ptr %13, align 8, !tbaa !11
  br label %583, !llvm.loop !42

624:                                              ; preds = %590
  %625 = load ptr, ptr %6, align 8, !tbaa !9
  %626 = call ptr @setup_line(ptr noundef %625)
  store ptr %626, ptr %14, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #9
  br label %570, !llvm.loop !43

627:                                              ; preds = %570
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #9
  store i64 0, ptr %37, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #9
  store i64 0, ptr %38, align 8, !tbaa !11
  br label %628

628:                                              ; preds = %646, %627
  %629 = load i64, ptr %38, align 8, !tbaa !11
  %630 = load i64, ptr %10, align 8, !tbaa !11
  %631 = add nsw i64 %630, 1
  %632 = icmp slt i64 %629, %631
  br i1 %632, label %633, label %649

633:                                              ; preds = %628
  %634 = load ptr, ptr %12, align 8, !tbaa !9
  %635 = load i64, ptr %38, align 8, !tbaa !11
  %636 = getelementptr inbounds i64, ptr %634, i64 %635
  %637 = load i64, ptr %636, align 8, !tbaa !11
  %638 = load i64, ptr %37, align 8, !tbaa !11
  %639 = icmp sgt i64 %637, %638
  br i1 %639, label %640, label %645

640:                                              ; preds = %633
  %641 = load ptr, ptr %12, align 8, !tbaa !9
  %642 = load i64, ptr %38, align 8, !tbaa !11
  %643 = getelementptr inbounds i64, ptr %641, i64 %642
  %644 = load i64, ptr %643, align 8, !tbaa !11
  store i64 %644, ptr %37, align 8, !tbaa !11
  br label %645

645:                                              ; preds = %640, %633
  br label %646

646:                                              ; preds = %645
  %647 = load i64, ptr %38, align 8, !tbaa !11
  %648 = add nsw i64 %647, 1
  store i64 %648, ptr %38, align 8, !tbaa !11
  br label %628, !llvm.loop !44

649:                                              ; preds = %628
  %650 = call i32 (ptr, ...) @printf(ptr noundef @.str.16)
  %651 = load i64, ptr %13, align 8, !tbaa !11
  %652 = call i32 (ptr, ...) @printf(ptr noundef @.str.19, i64 noundef %651)
  store i64 0, ptr %38, align 8, !tbaa !11
  br label %653

653:                                              ; preds = %698, %649
  %654 = load i64, ptr %38, align 8, !tbaa !11
  %655 = load i64, ptr %10, align 8, !tbaa !11
  %656 = add nsw i64 %655, 1
  %657 = icmp slt i64 %654, %656
  br i1 %657, label %658, label %701

658:                                              ; preds = %653
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #9
  %659 = load i64, ptr %37, align 8, !tbaa !11
  %660 = sitofp i64 %659 to double
  %661 = fdiv double 5.000000e+01, %660
  %662 = load ptr, ptr %12, align 8, !tbaa !9
  %663 = load i64, ptr %38, align 8, !tbaa !11
  %664 = getelementptr inbounds i64, ptr %662, i64 %663
  %665 = load i64, ptr %664, align 8, !tbaa !11
  %666 = sitofp i64 %665 to double
  %667 = fmul double %661, %666
  %668 = call double @llvm.rint.f64(double %667)
  %669 = fptosi double %668 to i32
  store i32 %669, ptr %40, align 4, !tbaa !5
  %670 = load float, ptr %9, align 4, !tbaa !20
  %671 = load float, ptr %8, align 4, !tbaa !20
  %672 = fsub float %670, %671
  %673 = load i64, ptr %10, align 8, !tbaa !11
  %674 = sitofp i64 %673 to float
  %675 = fdiv float %672, %674
  %676 = load i64, ptr %38, align 8, !tbaa !11
  %677 = sitofp i64 %676 to float
  %678 = load float, ptr %8, align 4, !tbaa !20
  %679 = call float @llvm.fmuladd.f32(float %675, float %677, float %678)
  %680 = fpext float %679 to double
  %681 = load ptr, ptr %12, align 8, !tbaa !9
  %682 = load i64, ptr %38, align 8, !tbaa !11
  %683 = getelementptr inbounds i64, ptr %681, i64 %682
  %684 = load i64, ptr %683, align 8, !tbaa !11
  %685 = call i32 (ptr, ...) @printf(ptr noundef @.str.20, double noundef %680, i64 noundef %684)
  store i64 0, ptr %39, align 8, !tbaa !11
  br label %686

686:                                              ; preds = %693, %658
  %687 = load i64, ptr %39, align 8, !tbaa !11
  %688 = load i32, ptr %40, align 4, !tbaa !5
  %689 = sext i32 %688 to i64
  %690 = icmp slt i64 %687, %689
  br i1 %690, label %691, label %696

691:                                              ; preds = %686
  %692 = call i32 (ptr, ...) @printf(ptr noundef @.str.10)
  br label %693

693:                                              ; preds = %691
  %694 = load i64, ptr %39, align 8, !tbaa !11
  %695 = add nsw i64 %694, 1
  store i64 %695, ptr %39, align 8, !tbaa !11
  br label %686, !llvm.loop !45

696:                                              ; preds = %686
  %697 = call i32 (ptr, ...) @printf(ptr noundef @.str.11)
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #9
  br label %698

698:                                              ; preds = %696
  %699 = load i64, ptr %38, align 8, !tbaa !11
  %700 = add nsw i64 %699, 1
  store i64 %700, ptr %38, align 8, !tbaa !11
  br label %653, !llvm.loop !46

701:                                              ; preds = %653
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #9
  br label %702

702:                                              ; preds = %701, %548
  %703 = load ptr, ptr %6, align 8, !tbaa !9
  %704 = call i32 @fclose(ptr noundef %703)
  br label %705

705:                                              ; preds = %702, %457
  %706 = call i32 (ptr, ...) @printf(ptr noundef @.str.21)
  call void @exit(i32 noundef 0) #10
  unreachable
}

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

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

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

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

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

; Function Attrs: nounwind willreturn memory(read)
declare ptr @strrchr(ptr noundef, i32 noundef) #6

; Function Attrs: nounwind willreturn memory(read)
declare i32 @strcmp(ptr noundef, ptr noundef) #6

declare ptr @codebook_load(ptr noundef) #5

declare i32 @fclose(ptr noundef) #5

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

declare i64 @_book_maptype1_quantvals(ptr noundef) #5

declare float @_float32_unpack(i64 noundef) #5

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

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

; Function Attrs: nounwind allocsize(0,1)
declare noalias ptr @calloc(i64 noundef, i64 noundef) #8

declare void @qsort(ptr noundef, i64 noundef, i64 noundef, ptr noundef) #5

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

declare ptr @setup_line(ptr noundef) #5

; Function Attrs: nounwind
declare i32 @sprintf(ptr noundef, ptr noundef, ...) #2

declare void @spinnit(ptr noundef, i32 noundef) #5

; Function Attrs: nounwind
declare i32 @__isoc99_sscanf(ptr noundef, ptr noundef, ...) #2

; Function Attrs: nounwind willreturn memory(read)
declare ptr @strchr(ptr noundef, i32 noundef) #6

declare void @rewind(ptr noundef) #5

attributes #0 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { inlinehint nounwind willreturn memory(read) uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { "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 = { nounwind willreturn memory(read) "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 #7 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #8 = { nounwind allocsize(0,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 #9 = { nounwind }
attributes #10 = { noreturn nounwind }
attributes #11 = { nounwind willreturn memory(read) }
attributes #12 = { nounwind allocsize(0,1) }

!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 = !{!12, !12, i64 0}
!12 = !{!"long", !7, i64 0}
!13 = !{!14, !10, i64 24}
!14 = !{!"codebook", !12, i64 0, !12, i64 8, !12, i64 16, !10, i64 24, !10, i64 32, !10, i64 40, !10, i64 48, !10, i64 56, !10, i64 64, !6, i64 72, !6, i64 76, !6, i64 80, !6, i64 84, !6, i64 88}
!15 = !{!16, !6, i64 24}
!16 = !{!"static_codebook", !12, i64 0, !12, i64 8, !10, i64 16, !6, i64 24, !12, i64 32, !12, i64 40, !6, i64 48, !6, i64 52, !10, i64 56, !6, i64 64}
!17 = !{!16, !12, i64 8}
!18 = !{!16, !12, i64 0}
!19 = !{!16, !12, i64 32}
!20 = !{!21, !21, i64 0}
!21 = !{!"float", !7, i64 0}
!22 = !{!16, !12, i64 40}
!23 = !{!16, !10, i64 56}
!24 = distinct !{!24, !25}
!25 = !{!"llvm.loop.mustprogress"}
!26 = !{!16, !10, i64 16}
!27 = distinct !{!27, !25}
!28 = !{!14, !12, i64 8}
!29 = distinct !{!29, !25}
!30 = !{!14, !12, i64 0}
!31 = distinct !{!31, !25}
!32 = distinct !{!32, !25}
!33 = distinct !{!33, !25}
!34 = distinct !{!34, !25}
!35 = distinct !{!35, !25}
!36 = distinct !{!36, !25}
!37 = distinct !{!37, !25}
!38 = distinct !{!38, !25}
!39 = distinct !{!39, !25}
!40 = distinct !{!40, !25}
!41 = distinct !{!41, !25}
!42 = distinct !{!42, !25}
!43 = distinct !{!43, !25}
!44 = distinct !{!44, !25}
!45 = distinct !{!45, !25}
!46 = distinct !{!46, !25}


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

@stderr = external local_unnamed_addr global ptr, align 8
@.str = external hidden unnamed_addr constant [51 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [64 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [56 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [8 x i8], align 1

; Function Attrs: nounwind uwtable
declare dso_local i32 @ascend(ptr noundef, ptr noundef) #0

; Function Attrs: noreturn nounwind uwtable
define dso_local noundef i32 @main(i32 noundef %0, ptr nocapture noundef readonly %1) local_unnamed_addr #1 {
  %3 = alloca float, align 4
  %4 = alloca [80 x i8], align 16
  %5 = alloca float, align 4
  %6 = getelementptr inbounds i8, ptr %1, i64 8
  %7 = load ptr, ptr %6, align 8, !tbaa !5
  %8 = icmp eq ptr %7, null
  br i1 %8, label %9, label %12

9:                                                ; preds = %2
  %10 = load ptr, ptr @stderr, align 8, !tbaa !5
  %11 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %10, ptr noundef nonnull @.str) #12
  tail call void @exit(i32 noundef 1) #13
  unreachable

12:                                               ; preds = %2
  %13 = getelementptr inbounds i8, ptr %1, i64 16
  %14 = load ptr, ptr %13, align 8, !tbaa !5
  %.not = icmp eq ptr %14, null
  br i1 %.not, label %19, label %15

15:                                               ; preds = %12
  %16 = tail call i32 @atoi(ptr nocapture noundef %14) #14
  %17 = add nsw i32 %16, -1
  %18 = sext i32 %17 to i64
  br label %19

19:                                               ; preds = %15, %12
  %.0210 = phi i64 [ %18, %15 ], [ -1, %12 ]
  %20 = tail call noalias ptr @fopen(ptr noundef nonnull %7, ptr noundef nonnull @.str.1)
  %.not256 = icmp eq ptr %20, null
  br i1 %.not256, label %21, label %25

21:                                               ; preds = %19
  %22 = load ptr, ptr @stderr, align 8, !tbaa !5
  %23 = load ptr, ptr %6, align 8, !tbaa !5
  %24 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %22, ptr noundef nonnull @.str.2, ptr noundef %23) #12
  tail call void @exit(i32 noundef 1) #13
  unreachable

25:                                               ; preds = %19
  %26 = load ptr, ptr %6, align 8, !tbaa !5
  %27 = tail call ptr @strrchr(ptr noundef nonnull dereferenceable(1) %26, i32 noundef 46) #14
  %.not257 = icmp eq ptr %27, null
  br i1 %.not257, label %225, label %28

28:                                               ; preds = %25
  %29 = tail call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %27, ptr noundef nonnull dereferenceable(1) @.str.3) #14
  %30 = icmp eq i32 %29, 0
  br i1 %30, label %31, label %225

31:                                               ; preds = %28
  %32 = tail call ptr @codebook_load(ptr noundef %26) #15
  %33 = getelementptr inbounds i8, ptr %32, i64 24
  %34 = load ptr, ptr %33, align 8, !tbaa !9
  %35 = tail call i32 @fclose(ptr noundef nonnull %20)
  %36 = getelementptr inbounds i8, ptr %34, i64 24
  %37 = load i32, ptr %36, align 8, !tbaa !13
  switch i32 %37, label %47 [
    i32 0, label %38
    i32 1, label %40
    i32 2, label %42
  ]

38:                                               ; preds = %31
  %39 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.4)
  tail call void @exit(i32 noundef 0) #13
  unreachable

40:                                               ; preds = %31
  %41 = tail call i64 @_book_maptype1_quantvals(ptr noundef nonnull %34) #15
  br label %47

42:                                               ; preds = %31
  %43 = getelementptr inbounds i8, ptr %34, i64 8
  %44 = load i64, ptr %43, align 8, !tbaa !15
  %45 = load i64, ptr %34, align 8, !tbaa !16
  %46 = mul nsw i64 %45, %44
  br label %47

47:                                               ; preds = %42, %40, %31
  %.1211 = phi i64 [ %.0210, %31 ], [ %46, %42 ], [ %41, %40 ]
  %48 = getelementptr inbounds i8, ptr %34, i64 32
  %49 = load i64, ptr %48, align 8, !tbaa !17
  %50 = tail call float @_float32_unpack(i64 noundef %49) #15
  %51 = getelementptr inbounds i8, ptr %34, i64 40
  %52 = load i64, ptr %51, align 8, !tbaa !18
  %53 = tail call float @_float32_unpack(i64 noundef %52) #15
  %54 = icmp sgt i64 %.1211, 0
  br i1 %54, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %47
  %55 = getelementptr inbounds i8, ptr %34, i64 56
  %56 = load ptr, ptr %55, align 8, !tbaa !19
  %xtraiter = and i64 %.1211, 1
  %57 = icmp eq i64 %.1211, 1
  br i1 %57, label %._crit_edge.loopexit.unr-lcssa, label %.lr.ph.new

.lr.ph.new:                                       ; preds = %.lr.ph
  %unroll_iter = and i64 %.1211, 9223372036854775806
  br label %58

58:                                               ; preds = %58, %.lr.ph.new
  %indvars.iv = phi i64 [ 0, %.lr.ph.new ], [ %indvars.iv.next.1, %58 ]
  %.0201287 = phi float [ %50, %.lr.ph.new ], [ %.1202.1, %58 ]
  %niter = phi i64 [ 0, %.lr.ph.new ], [ %niter.next.1, %58 ]
  %59 = getelementptr inbounds i64, ptr %56, i64 %indvars.iv
  %60 = load i64, ptr %59, align 8, !tbaa !20
  %61 = sitofp i64 %60 to float
  %62 = tail call float @llvm.fmuladd.f32(float %61, float %53, float %50)
  %63 = fcmp ogt float %62, %.0201287
  %.1202 = select i1 %63, float %62, float %.0201287
  %indvars.iv.next = or disjoint i64 %indvars.iv, 1
  %64 = getelementptr inbounds i64, ptr %56, i64 %indvars.iv.next
  %65 = load i64, ptr %64, align 8, !tbaa !20
  %66 = sitofp i64 %65 to float
  %67 = tail call float @llvm.fmuladd.f32(float %66, float %53, float %50)
  %68 = fcmp ogt float %67, %.1202
  %.1202.1 = select i1 %68, float %67, float %.1202
  %indvars.iv.next.1 = add nuw nsw i64 %indvars.iv, 2
  %niter.next.1 = add i64 %niter, 2
  %niter.ncmp.1 = icmp eq i64 %niter.next.1, %unroll_iter
  br i1 %niter.ncmp.1, label %._crit_edge.loopexit.unr-lcssa, label %58, !llvm.loop !21

._crit_edge.loopexit.unr-lcssa:                   ; preds = %58, %.lr.ph
  %.1202.lcssa.ph = phi float [ poison, %.lr.ph ], [ %.1202.1, %58 ]
  %indvars.iv.unr = phi i64 [ 0, %.lr.ph ], [ %indvars.iv.next.1, %58 ]
  %.0201287.unr = phi float [ %50, %.lr.ph ], [ %.1202.1, %58 ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %._crit_edge, label %._crit_edge.loopexit.epilog-lcssa

._crit_edge.loopexit.epilog-lcssa:                ; preds = %._crit_edge.loopexit.unr-lcssa
  %69 = getelementptr inbounds i64, ptr %56, i64 %indvars.iv.unr
  %70 = load i64, ptr %69, align 8, !tbaa !20
  %71 = sitofp i64 %70 to float
  %72 = tail call float @llvm.fmuladd.f32(float %71, float %53, float %50)
  %73 = fcmp ogt float %72, %.0201287.unr
  %.1202.epil = select i1 %73, float %72, float %.0201287.unr
  br label %._crit_edge

._crit_edge:                                      ; preds = %._crit_edge.loopexit.epilog-lcssa, %._crit_edge.loopexit.unr-lcssa, %47
  %.0201.lcssa = phi float [ %50, %47 ], [ %.1202.lcssa.ph, %._crit_edge.loopexit.unr-lcssa ], [ %.1202.epil, %._crit_edge.loopexit.epilog-lcssa ]
  %74 = fpext float %50 to double
  %75 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.5, double noundef %74)
  %76 = fpext float %.0201.lcssa to double
  %77 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.6, double noundef %76)
  %78 = load i32, ptr %36, align 8, !tbaa !13
  switch i32 %78, label %.loopexit280 [
    i32 1, label %79
    i32 2, label %223
  ]

79:                                               ; preds = %._crit_edge
  %80 = tail call noalias ptr @calloc(i64 noundef %.1211, i64 noundef 8) #16
  %81 = getelementptr inbounds i8, ptr %34, i64 16
  %82 = load ptr, ptr %81, align 8, !tbaa !23
  %83 = load i64, ptr %82, align 8, !tbaa !20
  %84 = tail call noalias ptr @calloc(i64 noundef %.1211, i64 noundef 8) #16
  br i1 %54, label %.lr.ph290, label %._crit_edge291

.lr.ph290:                                        ; preds = %79
  %85 = getelementptr inbounds i8, ptr %34, i64 56
  %min.iters.check = icmp ult i64 %.1211, 10
  br i1 %min.iters.check, label %scalar.ph.preheader, label %vector.memcheck

vector.memcheck:                                  ; preds = %.lr.ph290
  %86 = shl i64 %.1211, 3
  %scevgep = getelementptr i8, ptr %80, i64 %86
  %scevgep455 = getelementptr i8, ptr %34, i64 64
  %bound0 = icmp ult ptr %80, %scevgep455
  %bound1 = icmp ult ptr %85, %scevgep
  %found.conflict = and i1 %bound0, %bound1
  br i1 %found.conflict, label %scalar.ph.preheader, label %vector.ph

vector.ph:                                        ; preds = %vector.memcheck
  %n.vec = and i64 %.1211, 9223372036854775804
  %87 = load ptr, ptr %85, align 8, !tbaa !19, !alias.scope !24
  %broadcast.splatinsert457 = insertelement <2 x ptr> poison, ptr %87, i64 0
  %broadcast.splat458 = shufflevector <2 x ptr> %broadcast.splatinsert457, <2 x ptr> poison, <2 x i32> zeroinitializer
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %vec.ind = phi <2 x i64> [ <i64 0, i64 1>, %vector.ph ], [ %vec.ind.next, %vector.body ]
  %step.add = add <2 x i64> %vec.ind, <i64 2, i64 2>
  %88 = getelementptr inbounds i64, <2 x ptr> %broadcast.splat458, <2 x i64> %vec.ind
  %89 = getelementptr inbounds i64, <2 x ptr> %broadcast.splat458, <2 x i64> %step.add
  %90 = getelementptr inbounds ptr, ptr %80, i64 %index
  %91 = getelementptr inbounds i8, ptr %90, i64 16
  store <2 x ptr> %88, ptr %90, align 8, !tbaa !5, !alias.scope !27, !noalias !24
  store <2 x ptr> %89, ptr %91, align 8, !tbaa !5, !alias.scope !27, !noalias !24
  %index.next = add nuw i64 %index, 4
  %vec.ind.next = add <2 x i64> %vec.ind, <i64 4, i64 4>
  %92 = icmp eq i64 %index.next, %n.vec
  br i1 %92, label %middle.block, label %vector.body, !llvm.loop !29

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %.1211, %n.vec
  br i1 %cmp.n, label %._crit_edge291, label %scalar.ph.preheader

scalar.ph.preheader:                              ; preds = %middle.block, %vector.memcheck, %.lr.ph290
  %indvars.iv401.ph = phi i64 [ 0, %vector.memcheck ], [ 0, %.lr.ph290 ], [ %n.vec, %middle.block ]
  %xtraiter520 = and i64 %.1211, 3
  %lcmp.mod521.not = icmp eq i64 %xtraiter520, 0
  br i1 %lcmp.mod521.not, label %scalar.ph.prol.loopexit, label %scalar.ph.prol

scalar.ph.prol:                                   ; preds = %scalar.ph.preheader, %scalar.ph.prol
  %indvars.iv401.prol = phi i64 [ %indvars.iv.next402.prol, %scalar.ph.prol ], [ %indvars.iv401.ph, %scalar.ph.preheader ]
  %prol.iter = phi i64 [ %prol.iter.next, %scalar.ph.prol ], [ 0, %scalar.ph.preheader ]
  %93 = load ptr, ptr %85, align 8, !tbaa !19
  %94 = getelementptr inbounds i64, ptr %93, i64 %indvars.iv401.prol
  %95 = getelementptr inbounds ptr, ptr %80, i64 %indvars.iv401.prol
  store ptr %94, ptr %95, align 8, !tbaa !5
  %indvars.iv.next402.prol = add nuw nsw i64 %indvars.iv401.prol, 1
  %prol.iter.next = add i64 %prol.iter, 1
  %prol.iter.cmp.not = icmp eq i64 %prol.iter.next, %xtraiter520
  br i1 %prol.iter.cmp.not, label %scalar.ph.prol.loopexit, label %scalar.ph.prol, !llvm.loop !32

scalar.ph.prol.loopexit:                          ; preds = %scalar.ph.prol, %scalar.ph.preheader
  %indvars.iv401.unr = phi i64 [ %indvars.iv401.ph, %scalar.ph.preheader ], [ %indvars.iv.next402.prol, %scalar.ph.prol ]
  %96 = sub nsw i64 %indvars.iv401.ph, %.1211
  %97 = icmp ugt i64 %96, -4
  br i1 %97, label %._crit_edge291, label %scalar.ph

scalar.ph:                                        ; preds = %scalar.ph.prol.loopexit, %scalar.ph
  %indvars.iv401 = phi i64 [ %indvars.iv.next402.3, %scalar.ph ], [ %indvars.iv401.unr, %scalar.ph.prol.loopexit ]
  %98 = load ptr, ptr %85, align 8, !tbaa !19
  %99 = getelementptr inbounds i64, ptr %98, i64 %indvars.iv401
  %100 = getelementptr inbounds ptr, ptr %80, i64 %indvars.iv401
  store ptr %99, ptr %100, align 8, !tbaa !5
  %indvars.iv.next402 = add nuw nsw i64 %indvars.iv401, 1
  %101 = load ptr, ptr %85, align 8, !tbaa !19
  %102 = getelementptr inbounds i64, ptr %101, i64 %indvars.iv.next402
  %103 = getelementptr inbounds ptr, ptr %80, i64 %indvars.iv.next402
  store ptr %102, ptr %103, align 8, !tbaa !5
  %indvars.iv.next402.1 = add nuw nsw i64 %indvars.iv401, 2
  %104 = load ptr, ptr %85, align 8, !tbaa !19
  %105 = getelementptr inbounds i64, ptr %104, i64 %indvars.iv.next402.1
  %106 = getelementptr inbounds ptr, ptr %80, i64 %indvars.iv.next402.1
  store ptr %105, ptr %106, align 8, !tbaa !5
  %indvars.iv.next402.2 = add nuw nsw i64 %indvars.iv401, 3
  %107 = load ptr, ptr %85, align 8, !tbaa !19
  %108 = getelementptr inbounds i64, ptr %107, i64 %indvars.iv.next402.2
  %109 = getelementptr inbounds ptr, ptr %80, i64 %indvars.iv.next402.2
  store ptr %108, ptr %109, align 8, !tbaa !5
  %indvars.iv.next402.3 = add nuw nsw i64 %indvars.iv401, 4
  %exitcond404.not.3 = icmp eq i64 %indvars.iv.next402.3, %.1211
  br i1 %exitcond404.not.3, label %._crit_edge291, label %scalar.ph, !llvm.loop !34

._crit_edge291:                                   ; preds = %scalar.ph.prol.loopexit, %scalar.ph, %middle.block, %79
  tail call void @qsort(ptr noundef %80, i64 noundef %.1211, i64 noundef 8, ptr noundef nonnull @ascend) #15
  %110 = getelementptr inbounds i8, ptr %32, i64 8
  %111 = load i64, ptr %110, align 8, !tbaa !35
  %112 = icmp sgt i64 %111, 0
  br i1 %112, label %.lr.ph295, label %.preheader281

.lr.ph295:                                        ; preds = %._crit_edge291
  %113 = load ptr, ptr %81, align 8, !tbaa !23
  %min.iters.check461 = icmp ult i64 %111, 4
  br i1 %min.iters.check461, label %scalar.ph460.preheader, label %vector.ph462

scalar.ph460.preheader:                           ; preds = %middle.block459, %.lr.ph295
  %indvars.iv405.ph = phi i64 [ 0, %.lr.ph295 ], [ %n.vec464, %middle.block459 ]
  %.0218293.ph = phi i64 [ %83, %.lr.ph295 ], [ %119, %middle.block459 ]
  br label %scalar.ph460

vector.ph462:                                     ; preds = %.lr.ph295
  %n.vec464 = and i64 %111, 9223372036854775804
  %minmax.ident.splatinsert = insertelement <2 x i64> poison, i64 %83, i64 0
  %minmax.ident.splat = shufflevector <2 x i64> %minmax.ident.splatinsert, <2 x i64> poison, <2 x i32> zeroinitializer
  br label %vector.body466

vector.body466:                                   ; preds = %vector.body466, %vector.ph462
  %index467 = phi i64 [ 0, %vector.ph462 ], [ %index.next470, %vector.body466 ]
  %vec.phi = phi <2 x i64> [ %minmax.ident.splat, %vector.ph462 ], [ %116, %vector.body466 ]
  %vec.phi468 = phi <2 x i64> [ %minmax.ident.splat, %vector.ph462 ], [ %117, %vector.body466 ]
  %114 = getelementptr inbounds i64, ptr %113, i64 %index467
  %115 = getelementptr inbounds i8, ptr %114, i64 16
  %wide.load = load <2 x i64>, ptr %114, align 8, !tbaa !20
  %wide.load469 = load <2 x i64>, ptr %115, align 8, !tbaa !20
  %116 = tail call <2 x i64> @llvm.smax.v2i64(<2 x i64> %wide.load, <2 x i64> %vec.phi)
  %117 = tail call <2 x i64> @llvm.smax.v2i64(<2 x i64> %wide.load469, <2 x i64> %vec.phi468)
  %index.next470 = add nuw i64 %index467, 4
  %118 = icmp eq i64 %index.next470, %n.vec464
  br i1 %118, label %middle.block459, label %vector.body466, !llvm.loop !36

middle.block459:                                  ; preds = %vector.body466
  %rdx.minmax = tail call <2 x i64> @llvm.smax.v2i64(<2 x i64> %116, <2 x i64> %117)
  %119 = tail call i64 @llvm.vector.reduce.smax.v2i64(<2 x i64> %rdx.minmax)
  %cmp.n471 = icmp eq i64 %111, %n.vec464
  br i1 %cmp.n471, label %.preheader284, label %scalar.ph460.preheader

.preheader284:                                    ; preds = %scalar.ph460, %middle.block459
  %spec.select.lcssa = phi i64 [ %119, %middle.block459 ], [ %spec.select, %scalar.ph460 ]
  br i1 %112, label %.lr.ph307, label %.preheader281

.lr.ph307:                                        ; preds = %.preheader284
  %120 = getelementptr inbounds i8, ptr %34, i64 56
  %121 = trunc i64 %.1211 to i32
  br label %143

scalar.ph460:                                     ; preds = %scalar.ph460.preheader, %scalar.ph460
  %indvars.iv405 = phi i64 [ %indvars.iv.next406, %scalar.ph460 ], [ %indvars.iv405.ph, %scalar.ph460.preheader ]
  %.0218293 = phi i64 [ %spec.select, %scalar.ph460 ], [ %.0218293.ph, %scalar.ph460.preheader ]
  %122 = getelementptr inbounds i64, ptr %113, i64 %indvars.iv405
  %123 = load i64, ptr %122, align 8, !tbaa !20
  %spec.select = tail call i64 @llvm.smax.i64(i64 %123, i64 %.0218293)
  %indvars.iv.next406 = add nuw nsw i64 %indvars.iv405, 1
  %exitcond408.not = icmp eq i64 %indvars.iv.next406, %111
  br i1 %exitcond408.not, label %.preheader284, label %scalar.ph460, !llvm.loop !37

.preheader283:                                    ; preds = %182
  %124 = icmp sgt i64 %183, 0
  br i1 %124, label %.preheader282.lr.ph, label %.preheader281

.preheader282.lr.ph:                              ; preds = %.preheader283
  %125 = load i64, ptr %32, align 8, !tbaa !38
  %126 = icmp sgt i64 %125, 0
  %127 = trunc i64 %.1211 to i32
  br i1 %126, label %.preheader282.lr.ph.split.us, label %.preheader281

.preheader282.lr.ph.split.us:                     ; preds = %.preheader282.lr.ph
  %128 = load ptr, ptr %81, align 8, !tbaa !23
  br label %.preheader282.us

.preheader282.us:                                 ; preds = %._crit_edge312.us, %.preheader282.lr.ph.split.us
  %indvars.iv428 = phi i64 [ %indvars.iv.next429, %._crit_edge312.us ], [ 0, %.preheader282.lr.ph.split.us ]
  %129 = getelementptr inbounds i64, ptr %128, i64 %indvars.iv428
  %130 = load i64, ptr %129, align 8, !tbaa !20
  %.not270.us = icmp eq i64 %130, 0
  %131 = sub nsw i64 %spec.select.lcssa, %130
  %132 = trunc i64 %131 to i32
  %133 = shl nuw i32 1, %132
  %134 = sext i32 %133 to i64
  br i1 %.not270.us, label %._crit_edge312.us, label %.lr.ph311.split.us316.preheader

.lr.ph311.split.us316.preheader:                  ; preds = %.preheader282.us
  %135 = trunc nuw nsw i64 %indvars.iv428 to i32
  br label %.lr.ph311.split.us316

.lr.ph311.split.us316:                            ; preds = %.lr.ph311.split.us316.preheader, %.lr.ph311.split.us316
  %indvars.iv421 = phi i64 [ 0, %.lr.ph311.split.us316.preheader ], [ %indvars.iv.next422, %.lr.ph311.split.us316 ]
  %.0213310.us = phi i32 [ 1, %.lr.ph311.split.us316.preheader ], [ %142, %.lr.ph311.split.us316 ]
  %136 = sdiv i32 %135, %.0213310.us
  %137 = sext i32 %136 to i64
  %138 = srem i64 %137, %.1211
  %139 = getelementptr inbounds i64, ptr %84, i64 %138
  %140 = load i64, ptr %139, align 8, !tbaa !20
  %141 = add nsw i64 %140, %134
  store i64 %141, ptr %139, align 8, !tbaa !20
  %142 = mul i32 %.0213310.us, %127
  %indvars.iv.next422 = add nuw nsw i64 %indvars.iv421, 1
  %exitcond424.not = icmp eq i64 %indvars.iv.next422, %125
  br i1 %exitcond424.not, label %._crit_edge312.us, label %.lr.ph311.split.us316, !llvm.loop !39

._crit_edge312.us:                                ; preds = %.lr.ph311.split.us316, %.preheader282.us
  %indvars.iv.next429 = add nuw nsw i64 %indvars.iv428, 1
  %exitcond431.not = icmp eq i64 %indvars.iv.next429, %183
  br i1 %exitcond431.not, label %.preheader281, label %.preheader282.us, !llvm.loop !40

143:                                              ; preds = %.lr.ph307, %182
  %144 = phi i64 [ %111, %.lr.ph307 ], [ %183, %182 ]
  %indvars.iv415 = phi i64 [ 0, %.lr.ph307 ], [ %indvars.iv.next416, %182 ]
  %145 = load ptr, ptr %81, align 8, !tbaa !23
  %146 = getelementptr inbounds i64, ptr %145, i64 %indvars.iv415
  %147 = load i64, ptr %146, align 8, !tbaa !20
  %.not271 = icmp eq i64 %147, 0
  br i1 %.not271, label %182, label %148

148:                                              ; preds = %143
  %149 = trunc nuw nsw i64 %indvars.iv415 to i32
  %150 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.7, i32 noundef %149)
  %151 = load i64, ptr %32, align 8, !tbaa !38
  %152 = icmp sgt i64 %151, 0
  br i1 %152, label %.lr.ph300, label %._crit_edge301

.lr.ph300:                                        ; preds = %148, %.lr.ph300
  %indvars.iv409 = phi i64 [ %indvars.iv.next410, %.lr.ph300 ], [ 0, %148 ]
  %.0217298 = phi i32 [ %167, %.lr.ph300 ], [ 1, %148 ]
  %153 = sdiv i32 %149, %.0217298
  %154 = sext i32 %153 to i64
  %155 = srem i64 %154, %.1211
  %156 = load ptr, ptr %120, align 8, !tbaa !19
  %157 = getelementptr inbounds i64, ptr %156, i64 %155
  %158 = load i64, ptr %157, align 8, !tbaa !20
  %159 = sitofp i64 %158 to float
  %160 = load i64, ptr %51, align 8, !tbaa !18
  %161 = tail call float @_float32_unpack(i64 noundef %160) #15
  %162 = load i64, ptr %48, align 8, !tbaa !17
  %163 = tail call float @_float32_unpack(i64 noundef %162) #15
  %164 = tail call float @llvm.fmuladd.f32(float %159, float %161, float %163)
  %165 = fpext float %164 to double
  %166 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.8, double noundef %165)
  %167 = mul i32 %.0217298, %121
  %indvars.iv.next410 = add nuw nsw i64 %indvars.iv409, 1
  %168 = load i64, ptr %32, align 8, !tbaa !38
  %169 = icmp sgt i64 %168, %indvars.iv.next410
  br i1 %169, label %.lr.ph300, label %._crit_edge301, !llvm.loop !41

._crit_edge301:                                   ; preds = %.lr.ph300, %148
  %170 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.9)
  %171 = load ptr, ptr %81, align 8, !tbaa !23
  %172 = getelementptr inbounds i64, ptr %171, i64 %indvars.iv415
  %173 = load i64, ptr %172, align 8, !tbaa !20
  %174 = icmp slt i64 %173, %spec.select.lcssa
  br i1 %174, label %.lr.ph304, label %._crit_edge305

.lr.ph304:                                        ; preds = %._crit_edge301, %.lr.ph304
  %indvars.iv412 = phi i64 [ %indvars.iv.next413, %.lr.ph304 ], [ 0, %._crit_edge301 ]
  %175 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.10)
  %indvars.iv.next413 = add nuw nsw i64 %indvars.iv412, 1
  %176 = load ptr, ptr %81, align 8, !tbaa !23
  %177 = getelementptr inbounds i64, ptr %176, i64 %indvars.iv415
  %178 = load i64, ptr %177, align 8, !tbaa !20
  %179 = sub nsw i64 %spec.select.lcssa, %178
  %180 = icmp sgt i64 %179, %indvars.iv.next413
  br i1 %180, label %.lr.ph304, label %._crit_edge305, !llvm.loop !42

._crit_edge305:                                   ; preds = %.lr.ph304, %._crit_edge301
  %181 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.11)
  %.pre = load i64, ptr %110, align 8, !tbaa !35
  br label %182

182:                                              ; preds = %143, %._crit_edge305
  %183 = phi i64 [ %144, %143 ], [ %.pre, %._crit_edge305 ]
  %indvars.iv.next416 = add nuw nsw i64 %indvars.iv415, 1
  %184 = icmp sgt i64 %183, %indvars.iv.next416
  br i1 %184, label %143, label %.preheader283, !llvm.loop !43

.preheader281:                                    ; preds = %._crit_edge312.us, %._crit_edge291, %.preheader284, %.preheader282.lr.ph, %.preheader283
  br i1 %54, label %.lr.ph319.preheader, label %.loopexit280

.lr.ph319.preheader:                              ; preds = %.preheader281
  %min.iters.check474 = icmp ult i64 %.1211, 4
  br i1 %min.iters.check474, label %.lr.ph319.preheader511, label %vector.ph475

.lr.ph319.preheader511:                           ; preds = %middle.block472, %.lr.ph319.preheader
  %.0206318.ph = phi i64 [ 0, %.lr.ph319.preheader ], [ %n.vec477, %middle.block472 ]
  %.0208317.ph = phi i64 [ 0, %.lr.ph319.preheader ], [ %190, %middle.block472 ]
  br label %.lr.ph319

vector.ph475:                                     ; preds = %.lr.ph319.preheader
  %n.vec477 = and i64 %.1211, 9223372036854775804
  br label %vector.body479

vector.body479:                                   ; preds = %vector.body479, %vector.ph475
  %index480 = phi i64 [ 0, %vector.ph475 ], [ %index.next485, %vector.body479 ]
  %vec.phi481 = phi <2 x i64> [ zeroinitializer, %vector.ph475 ], [ %187, %vector.body479 ]
  %vec.phi482 = phi <2 x i64> [ zeroinitializer, %vector.ph475 ], [ %188, %vector.body479 ]
  %185 = getelementptr inbounds i64, ptr %84, i64 %index480
  %186 = getelementptr inbounds i8, ptr %185, i64 16
  %wide.load483 = load <2 x i64>, ptr %185, align 8, !tbaa !20
  %wide.load484 = load <2 x i64>, ptr %186, align 8, !tbaa !20
  %187 = tail call <2 x i64> @llvm.smax.v2i64(<2 x i64> %wide.load483, <2 x i64> %vec.phi481)
  %188 = tail call <2 x i64> @llvm.smax.v2i64(<2 x i64> %wide.load484, <2 x i64> %vec.phi482)
  %index.next485 = add nuw i64 %index480, 4
  %189 = icmp eq i64 %index.next485, %n.vec477
  br i1 %189, label %middle.block472, label %vector.body479, !llvm.loop !44

middle.block472:                                  ; preds = %vector.body479
  %rdx.minmax486 = tail call <2 x i64> @llvm.smax.v2i64(<2 x i64> %187, <2 x i64> %188)
  %190 = tail call i64 @llvm.vector.reduce.smax.v2i64(<2 x i64> %rdx.minmax486)
  %cmp.n487 = icmp eq i64 %.1211, %n.vec477
  br i1 %cmp.n487, label %.preheader279, label %.lr.ph319.preheader511

.preheader279:                                    ; preds = %.lr.ph319, %middle.block472
  %spec.select272.lcssa = phi i64 [ %190, %middle.block472 ], [ %spec.select272, %.lr.ph319 ]
  br i1 %54, label %.lr.ph326, label %.loopexit280

.lr.ph326:                                        ; preds = %.preheader279
  %191 = uitofp nneg i64 %spec.select272.lcssa to double
  %192 = getelementptr inbounds i8, ptr %34, i64 56
  %193 = fdiv double 5.000000e+01, %191
  br label %197

.lr.ph319:                                        ; preds = %.lr.ph319.preheader511, %.lr.ph319
  %.0206318 = phi i64 [ %196, %.lr.ph319 ], [ %.0206318.ph, %.lr.ph319.preheader511 ]
  %.0208317 = phi i64 [ %spec.select272, %.lr.ph319 ], [ %.0208317.ph, %.lr.ph319.preheader511 ]
  %194 = getelementptr inbounds i64, ptr %84, i64 %.0206318
  %195 = load i64, ptr %194, align 8, !tbaa !20
  %spec.select272 = tail call i64 @llvm.smax.i64(i64 %195, i64 %.0208317)
  %196 = add nuw nsw i64 %.0206318, 1
  %exitcond432.not = icmp eq i64 %196, %.1211
  br i1 %exitcond432.not, label %.preheader279, label %.lr.ph319, !llvm.loop !45

197:                                              ; preds = %.lr.ph326, %._crit_edge324
  %.1207325 = phi i64 [ 0, %.lr.ph326 ], [ %222, %._crit_edge324 ]
  %198 = getelementptr inbounds ptr, ptr %80, i64 %.1207325
  %199 = load ptr, ptr %198, align 8, !tbaa !5
  %200 = load ptr, ptr %192, align 8, !tbaa !19
  %201 = ptrtoint ptr %199 to i64
  %202 = ptrtoint ptr %200 to i64
  %203 = sub i64 %201, %202
  %sext = shl i64 %203, 29
  %204 = ashr i64 %sext, 32
  %205 = getelementptr inbounds i64, ptr %84, i64 %204
  %206 = load i64, ptr %205, align 8, !tbaa !20
  %207 = sitofp i64 %206 to double
  %208 = fmul double %193, %207
  %209 = tail call double @llvm.rint.f64(double %208)
  %210 = fptosi double %209 to i32
  %211 = getelementptr inbounds i64, ptr %200, i64 %204
  %212 = load i64, ptr %211, align 8, !tbaa !20
  %213 = sitofp i64 %212 to float
  %214 = tail call float @llvm.fmuladd.f32(float %213, float %53, float %50)
  %215 = fpext float %214 to double
  %216 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.12, double noundef %215, i64 noundef %206)
  %217 = sext i32 %210 to i64
  %218 = icmp sgt i32 %210, 0
  br i1 %218, label %.lr.ph323, label %._crit_edge324

.lr.ph323:                                        ; preds = %197, %.lr.ph323
  %.0205321 = phi i64 [ %220, %.lr.ph323 ], [ 0, %197 ]
  %219 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.10)
  %220 = add nuw nsw i64 %.0205321, 1
  %exitcond433.not = icmp eq i64 %220, %217
  br i1 %exitcond433.not, label %._crit_edge324, label %.lr.ph323, !llvm.loop !46

._crit_edge324:                                   ; preds = %.lr.ph323, %197
  %221 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.11)
  %222 = add nuw nsw i64 %.1207325, 1
  %exitcond434.not = icmp eq i64 %222, %.1211
  br i1 %exitcond434.not, label %.loopexit280, label %197, !llvm.loop !47

223:                                              ; preds = %._crit_edge
  %224 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.13)
  br label %.loopexit280

225:                                              ; preds = %28, %25
  %226 = tail call ptr @setup_line(ptr noundef nonnull %20) #15
  %.not258361 = icmp eq ptr %226, null
  br i1 %.not258361, label %._crit_edge369, label %.lr.ph368

.lr.ph368:                                        ; preds = %225, %.critedge2
  %.0366 = phi i64 [ %227, %.critedge2 ], [ 0, %225 ]
  %.0199365 = phi float [ %.2.lcssa, %.critedge2 ], [ undef, %225 ]
  %.2203364 = phi float [ %.4.lcssa, %.critedge2 ], [ undef, %225 ]
  %.0215363 = phi i32 [ %.1216.lcssa450, %.critedge2 ], [ 0, %225 ]
  %.0227362 = phi ptr [ %246, %.critedge2 ], [ %226, %225 ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %3) #15
  call void @llvm.lifetime.start.p0(i64 80, ptr nonnull %4) #15
  %227 = add nuw nsw i64 %.0366, 1
  %228 = fpext float %.0199365 to double
  %229 = fpext float %.2203364 to double
  %230 = call i32 (ptr, ptr, ...) @sprintf(ptr noundef nonnull dereferenceable(1) %4, ptr noundef nonnull dereferenceable(1) @.str.14, double noundef %228, double noundef %229) #15
  %231 = and i64 %227, 255
  %.not266 = icmp eq i64 %231, 0
  br i1 %.not266, label %232, label %234

232:                                              ; preds = %.lr.ph368
  %233 = trunc i64 %227 to i32
  call void @spinnit(ptr noundef nonnull %4, i32 noundef %233) #15
  br label %234

234:                                              ; preds = %232, %.lr.ph368
  %.not267327 = icmp eq i32 %.0215363, 0
  br i1 %.not267327, label %.lr.ph333, label %.lr.ph356.preheader

.lr.ph333:                                        ; preds = %234
  %235 = call i32 (ptr, ptr, ...) @__isoc99_sscanf(ptr noundef nonnull %.0227362, ptr noundef nonnull @.str.15, ptr noundef nonnull %3) #15
  %236 = icmp eq i32 %235, 1
  br i1 %236, label %.critedge, label %.lr.ph356.preheader

.critedge:                                        ; preds = %.lr.ph333
  %237 = call ptr @strchr(ptr noundef nonnull dereferenceable(1) %.0227362, i32 noundef 44) #14
  %238 = load float, ptr %3, align 4, !tbaa !48
  %.not268352 = icmp eq ptr %237, null
  br i1 %.not268352, label %.critedge2, label %.lr.ph356.preheader

.lr.ph356.preheader:                              ; preds = %.lr.ph333, %234, %.critedge
  %.1200.lcssa452 = phi float [ %238, %.critedge ], [ %.0199365, %234 ], [ %.0199365, %.lr.ph333 ]
  %.3204.lcssa451 = phi float [ %238, %.critedge ], [ %.2203364, %234 ], [ %.2203364, %.lr.ph333 ]
  %.1216.lcssa449 = phi i32 [ 1, %.critedge ], [ %.0215363, %234 ], [ 0, %.lr.ph333 ]
  %.1228.lcssa448 = phi ptr [ %237, %.critedge ], [ %.0227362, %234 ], [ %.0227362, %.lr.ph333 ]
  br label %.lr.ph356

.lr.ph356:                                        ; preds = %.lr.ph356.preheader, %select.unfold
  %.2355 = phi float [ %.3, %select.unfold ], [ %.1200.lcssa452, %.lr.ph356.preheader ]
  %.4354 = phi float [ %.5, %select.unfold ], [ %.3204.lcssa451, %.lr.ph356.preheader ]
  %.2229353 = phi ptr [ %242, %select.unfold ], [ %.1228.lcssa448, %.lr.ph356.preheader ]
  %239 = call i32 (ptr, ptr, ...) @__isoc99_sscanf(ptr noundef nonnull %.2229353, ptr noundef nonnull @.str.15, ptr noundef nonnull %3) #15
  %240 = icmp eq i32 %239, 1
  br i1 %240, label %select.unfold, label %.critedge2

select.unfold:                                    ; preds = %.lr.ph356
  %241 = call ptr @strchr(ptr noundef nonnull dereferenceable(1) %.2229353, i32 noundef 44) #14
  %.not269 = icmp eq ptr %241, null
  %242 = getelementptr inbounds i8, ptr %241, i64 1
  %243 = load float, ptr %3, align 4, !tbaa !48
  %244 = fcmp olt float %243, %.2355
  %.3 = select i1 %244, float %243, float %.2355
  %245 = fcmp ogt float %243, %.4354
  %.5 = select i1 %245, float %243, float %.4354
  br i1 %.not269, label %.critedge2, label %.lr.ph356

.critedge2:                                       ; preds = %.lr.ph356, %select.unfold, %.critedge
  %.1216.lcssa450 = phi i32 [ 1, %.critedge ], [ %.1216.lcssa449, %select.unfold ], [ %.1216.lcssa449, %.lr.ph356 ]
  %.4.lcssa = phi float [ %238, %.critedge ], [ %.4354, %.lr.ph356 ], [ %.5, %select.unfold ]
  %.2.lcssa = phi float [ %238, %.critedge ], [ %.2355, %.lr.ph356 ], [ %.3, %select.unfold ]
  %246 = call ptr @setup_line(ptr noundef nonnull %20) #15
  call void @llvm.lifetime.end.p0(i64 80, ptr nonnull %4) #15
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %3) #15
  %.not258 = icmp eq ptr %246, null
  br i1 %.not258, label %._crit_edge369, label %.lr.ph368, !llvm.loop !50

._crit_edge369:                                   ; preds = %.critedge2, %225
  %.2203.lcssa = phi float [ undef, %225 ], [ %.4.lcssa, %.critedge2 ]
  %.0199.lcssa = phi float [ undef, %225 ], [ %.2.lcssa, %.critedge2 ]
  %.0.lcssa = phi i64 [ 0, %225 ], [ %227, %.critedge2 ]
  %247 = icmp slt i64 %.0210, 1
  br i1 %247, label %248, label %256

248:                                              ; preds = %._crit_edge369
  %249 = fsub float %.2203.lcssa, %.0199.lcssa
  %250 = fptosi float %249 to i32
  %251 = sitofp i32 %250 to float
  %252 = fsub float %.0199.lcssa, %.2203.lcssa
  %253 = fcmp oeq float %252, %251
  br i1 %253, label %254, label %256

254:                                              ; preds = %248
  %255 = fptosi float %249 to i64
  br label %256

256:                                              ; preds = %248, %254, %._crit_edge369
  %.2212 = phi i64 [ %255, %254 ], [ %.0210, %._crit_edge369 ], [ 25, %248 ]
  %257 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.16)
  %258 = fpext float %.0199.lcssa to double
  %259 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.5, double noundef %258)
  %260 = fpext float %.2203.lcssa to double
  %261 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.6, double noundef %260)
  %262 = load ptr, ptr %13, align 8, !tbaa !5
  %.not259 = icmp eq ptr %262, null
  br i1 %.not259, label %.loopexit, label %263

263:                                              ; preds = %256
  %264 = add i64 %.2212, 1
  %265 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.17, i64 noundef %264)
  %266 = call noalias ptr @calloc(i64 noundef %264, i64 noundef 8) #16
  call void @rewind(ptr noundef nonnull %20)
  %267 = call ptr @setup_line(ptr noundef nonnull %20) #15
  %.not260375 = icmp eq ptr %267, null
  br i1 %.not260375, label %.preheader, label %.lr.ph380

.lr.ph380:                                        ; preds = %263
  %268 = fsub float %.2203.lcssa, %.0199.lcssa
  %269 = sitofp i64 %.2212 to float
  br label %277

.preheader:                                       ; preds = %.critedge4, %263
  %.0220.lcssa = phi i64 [ 0, %263 ], [ %.1221.lcssa, %.critedge4 ]
  %.not261382 = icmp slt i64 %.2212, 0
  br i1 %.not261382, label %._crit_edge386, label %.lr.ph385.preheader

.lr.ph385.preheader:                              ; preds = %.preheader
  %270 = add nuw i64 %.2212, 1
  %min.iters.check491 = icmp ult i64 %.2212, 3
  br i1 %min.iters.check491, label %.lr.ph385.preheader506, label %vector.ph492

.lr.ph385.preheader506:                           ; preds = %middle.block489, %.lr.ph385.preheader
  %.0195384.ph = phi i64 [ 0, %.lr.ph385.preheader ], [ %n.vec494, %middle.block489 ]
  %.0197383.ph = phi i64 [ 0, %.lr.ph385.preheader ], [ %276, %middle.block489 ]
  br label %.lr.ph385

vector.ph492:                                     ; preds = %.lr.ph385.preheader
  %n.vec494 = and i64 %270, -4
  br label %vector.body496

vector.body496:                                   ; preds = %vector.body496, %vector.ph492
  %index497 = phi i64 [ 0, %vector.ph492 ], [ %index.next502, %vector.body496 ]
  %vec.phi498 = phi <2 x i64> [ zeroinitializer, %vector.ph492 ], [ %273, %vector.body496 ]
  %vec.phi499 = phi <2 x i64> [ zeroinitializer, %vector.ph492 ], [ %274, %vector.body496 ]
  %271 = getelementptr inbounds i64, ptr %266, i64 %index497
  %272 = getelementptr inbounds i8, ptr %271, i64 16
  %wide.load500 = load <2 x i64>, ptr %271, align 8, !tbaa !20
  %wide.load501 = load <2 x i64>, ptr %272, align 8, !tbaa !20
  %273 = call <2 x i64> @llvm.smax.v2i64(<2 x i64> %wide.load500, <2 x i64> %vec.phi498)
  %274 = call <2 x i64> @llvm.smax.v2i64(<2 x i64> %wide.load501, <2 x i64> %vec.phi499)
  %index.next502 = add nuw i64 %index497, 4
  %275 = icmp eq i64 %index.next502, %n.vec494
  br i1 %275, label %middle.block489, label %vector.body496, !llvm.loop !51

middle.block489:                                  ; preds = %vector.body496
  %rdx.minmax503 = call <2 x i64> @llvm.smax.v2i64(<2 x i64> %273, <2 x i64> %274)
  %276 = call i64 @llvm.vector.reduce.smax.v2i64(<2 x i64> %rdx.minmax503)
  %cmp.n504 = icmp eq i64 %270, %n.vec494
  br i1 %cmp.n504, label %._crit_edge386.loopexit, label %.lr.ph385.preheader506

277:                                              ; preds = %.lr.ph380, %.critedge4
  %.1378 = phi i64 [ %.0.lcssa, %.lr.ph380 ], [ %278, %.critedge4 ]
  %.0220377 = phi i64 [ 0, %.lr.ph380 ], [ %.1221.lcssa, %.critedge4 ]
  %.4231376 = phi ptr [ %267, %.lr.ph380 ], [ %298, %.critedge4 ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %5) #15
  %278 = add nsw i64 %.1378, -1
  %279 = and i64 %278, 255
  %.not263 = icmp eq i64 %279, 0
  br i1 %.not263, label %280, label %.preheader509

280:                                              ; preds = %277
  %281 = trunc i64 %278 to i32
  call void @spinnit(ptr noundef nonnull @.str.18, i32 noundef %281) #15
  br label %.preheader509

.preheader509:                                    ; preds = %280, %277
  br label %282

282:                                              ; preds = %.preheader509, %select.unfold276
  %.1221374 = phi i64 [ %297, %select.unfold276 ], [ %.0220377, %.preheader509 ]
  %.5232373 = phi ptr [ %286, %select.unfold276 ], [ %.4231376, %.preheader509 ]
  %283 = call i32 (ptr, ptr, ...) @__isoc99_sscanf(ptr noundef nonnull %.5232373, ptr noundef nonnull @.str.15, ptr noundef nonnull %5) #15
  %284 = icmp eq i32 %283, 1
  br i1 %284, label %select.unfold276, label %.critedge4

select.unfold276:                                 ; preds = %282
  %285 = call ptr @strchr(ptr noundef nonnull dereferenceable(1) %.5232373, i32 noundef 44) #14
  %.not265 = icmp eq ptr %285, null
  %286 = getelementptr inbounds i8, ptr %285, i64 1
  %287 = load float, ptr %5, align 4, !tbaa !48
  %288 = fsub float %287, %.0199.lcssa
  %289 = fdiv float %288, %268
  %290 = fmul float %289, %269
  store float %290, ptr %5, align 4, !tbaa !48
  %291 = call float @llvm.rint.f32(float %290)
  %292 = fptosi float %291 to i32
  %293 = sext i32 %292 to i64
  %294 = getelementptr inbounds i64, ptr %266, i64 %293
  %295 = load i64, ptr %294, align 8, !tbaa !20
  %296 = add nsw i64 %295, 1
  store i64 %296, ptr %294, align 8, !tbaa !20
  %297 = add nsw i64 %.1221374, 1
  br i1 %.not265, label %.critedge4, label %282

.critedge4:                                       ; preds = %select.unfold276, %282
  %.1221.lcssa = phi i64 [ %297, %select.unfold276 ], [ %.1221374, %282 ]
  %298 = call ptr @setup_line(ptr noundef nonnull %20) #15
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %5) #15
  %.not260 = icmp eq ptr %298, null
  br i1 %.not260, label %.preheader, label %277, !llvm.loop !52

.lr.ph385:                                        ; preds = %.lr.ph385.preheader506, %.lr.ph385
  %.0195384 = phi i64 [ %301, %.lr.ph385 ], [ %.0195384.ph, %.lr.ph385.preheader506 ]
  %.0197383 = phi i64 [ %spec.select275, %.lr.ph385 ], [ %.0197383.ph, %.lr.ph385.preheader506 ]
  %299 = getelementptr inbounds i64, ptr %266, i64 %.0195384
  %300 = load i64, ptr %299, align 8, !tbaa !20
  %spec.select275 = call i64 @llvm.smax.i64(i64 %300, i64 %.0197383)
  %301 = add nuw i64 %.0195384, 1
  %exitcond435.not = icmp eq i64 %.0195384, %.2212
  br i1 %exitcond435.not, label %._crit_edge386.loopexit, label %.lr.ph385, !llvm.loop !53

._crit_edge386.loopexit:                          ; preds = %.lr.ph385, %middle.block489
  %spec.select275.lcssa = phi i64 [ %276, %middle.block489 ], [ %spec.select275, %.lr.ph385 ]
  %302 = uitofp nneg i64 %spec.select275.lcssa to double
  br label %._crit_edge386

._crit_edge386:                                   ; preds = %._crit_edge386.loopexit, %.preheader
  %.0197.lcssa = phi double [ 0.000000e+00, %.preheader ], [ %302, %._crit_edge386.loopexit ]
  %303 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.16)
  %304 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.19, i64 noundef %.0220.lcssa)
  br i1 %.not261382, label %.loopexit, label %.lr.ph395

.lr.ph395:                                        ; preds = %._crit_edge386
  %305 = fdiv double 5.000000e+01, %.0197.lcssa
  %306 = fsub float %.2203.lcssa, %.0199.lcssa
  %307 = uitofp nneg i64 %.2212 to float
  %308 = fdiv float %306, %307
  br label %309

309:                                              ; preds = %.lr.ph395, %._crit_edge391
  %.1196393 = phi i64 [ 0, %.lr.ph395 ], [ %325, %._crit_edge391 ]
  %310 = getelementptr inbounds i64, ptr %266, i64 %.1196393
  %311 = load i64, ptr %310, align 8, !tbaa !20
  %312 = sitofp i64 %311 to double
  %313 = fmul double %305, %312
  %314 = call double @llvm.rint.f64(double %313)
  %315 = fptosi double %314 to i32
  %316 = uitofp nneg i64 %.1196393 to float
  %317 = call float @llvm.fmuladd.f32(float %308, float %316, float %.0199.lcssa)
  %318 = fpext float %317 to double
  %319 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.20, double noundef %318, i64 noundef %311)
  %320 = sext i32 %315 to i64
  %321 = icmp sgt i32 %315, 0
  br i1 %321, label %.lr.ph390, label %._crit_edge391

.lr.ph390:                                        ; preds = %309, %.lr.ph390
  %.0194388 = phi i64 [ %323, %.lr.ph390 ], [ 0, %309 ]
  %322 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.10)
  %323 = add nuw nsw i64 %.0194388, 1
  %exitcond436.not = icmp eq i64 %323, %320
  br i1 %exitcond436.not, label %._crit_edge391, label %.lr.ph390, !llvm.loop !54

._crit_edge391:                                   ; preds = %.lr.ph390, %309
  %324 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.11)
  %325 = add nuw i64 %.1196393, 1
  %exitcond437.not = icmp eq i64 %.1196393, %.2212
  br i1 %exitcond437.not, label %.loopexit, label %309, !llvm.loop !55

.loopexit:                                        ; preds = %._crit_edge391, %._crit_edge386, %256
  %326 = call i32 @fclose(ptr noundef nonnull %20)
  br label %.loopexit280

.loopexit280:                                     ; preds = %._crit_edge324, %.preheader281, %.preheader279, %._crit_edge, %223, %.loopexit
  %327 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.21)
  call void @exit(i32 noundef 0) #13
  unreachable
}

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

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

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

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

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

; Function Attrs: mustprogress nofree nounwind willreturn memory(argmem: read)
declare ptr @strrchr(ptr noundef, i32 noundef) local_unnamed_addr #6

; Function Attrs: mustprogress nofree nounwind willreturn memory(argmem: read)
declare i32 @strcmp(ptr nocapture noundef, ptr nocapture noundef) local_unnamed_addr #6

declare ptr @codebook_load(ptr noundef) local_unnamed_addr #7

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

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

declare i64 @_book_maptype1_quantvals(ptr noundef) local_unnamed_addr #7

declare float @_float32_unpack(i64 noundef) local_unnamed_addr #7

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

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

; Function Attrs: mustprogress nofree nounwind willreturn allockind("alloc,zeroed") allocsize(0,1) memory(inaccessiblemem: readwrite)
declare noalias noundef ptr @calloc(i64 noundef, i64 noundef) local_unnamed_addr #9

; Function Attrs: nofree
declare void @qsort(ptr noundef, i64 noundef, i64 noundef, ptr nocapture noundef) local_unnamed_addr #10

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

declare ptr @setup_line(ptr noundef) local_unnamed_addr #7

; Function Attrs: nofree nounwind
declare noundef i32 @sprintf(ptr noalias nocapture noundef writeonly, ptr nocapture noundef readonly, ...) local_unnamed_addr #3

declare void @spinnit(ptr noundef, i32 noundef) local_unnamed_addr #7

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

; Function Attrs: mustprogress nofree nounwind willreturn memory(argmem: read)
declare ptr @strchr(ptr noundef, i32 noundef) local_unnamed_addr #6

; Function Attrs: nofree nounwind
declare void @rewind(ptr nocapture noundef) local_unnamed_addr #3

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

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare <2 x i64> @llvm.smax.v2i64(<2 x i64>, <2 x i64>) #11

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i64 @llvm.vector.reduce.smax.v2i64(<2 x i64>) #11

attributes #0 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { noreturn nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { 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 #4 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { inlinehint mustprogress nofree nounwind willreturn memory(read) uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { mustprogress nofree nounwind willreturn memory(argmem: read) "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 #7 = { "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 #8 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #9 = { mustprogress nofree nounwind willreturn allockind("alloc,zeroed") allocsize(0,1) memory(inaccessiblemem: readwrite) "alloc-family"="malloc" "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 #10 = { nofree "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 #11 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #12 = { cold nounwind }
attributes #13 = { noreturn nounwind }
attributes #14 = { nounwind willreturn memory(read) }
attributes #15 = { nounwind }
attributes #16 = { nounwind allocsize(0,1) }

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

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


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