; LLVM IR from KamilSJaron/smudgeplot :: src_ploidyplot (PloidyPlot)

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

%union.pthread_mutex_t = type { %struct.__pthread_mutex_s }
%struct.__pthread_mutex_s = type { i32, i32, i32, i32, i32, i16, i16, %struct.__pthread_internal_list }
%struct.__pthread_internal_list = type { ptr, ptr }
%union.pthread_cond_t = type { %struct.__pthread_cond_s }
%struct.__pthread_cond_s = type { %union.__atomic_wide_counter, %union.__atomic_wide_counter, [2 x i32], [2 x i32], i32, i32, [2 x i32] }
%union.__atomic_wide_counter = type { i64 }
%struct.Kmer_Stream = type { i32, i32, i64, i64, ptr, i32, i32, i32, i32, i32, i32, [10 x ptr] }
%struct.TP = type { i32, ptr, [4 x ptr], [4 x i64], i32, ptr, i64, [4 x ptr], [4 x ptr], ptr }

@.str = external hidden unnamed_addr constant [11 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [1 x i8], align 1
@Prog_Name = external global ptr, align 8
@ETHRESH = external hidden global i32, align 4
@NTHREADS = external hidden global i32, align 4
@.str.2 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [6 x i8], align 1
@stderr = external global ptr, align 8
@.str.4 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [41 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [43 x i8], align 1
@VERBOSE = external hidden global i32, align 4
@.str.11 = external hidden unnamed_addr constant [15 x i8], align 1
@Usage = external hidden global [2 x ptr], align 16
@.str.12 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [50 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [71 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [54 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [6 x i8], align 1
@template = external hidden global [15 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [2 x i8], align 1
@stdout = external global ptr, align 8
@.str.23 = external hidden unnamed_addr constant [36 x i8], align 1
@stdin = external global ptr, align 8
@.str.24 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [32 x i8], align 1
@KMER = external hidden global i32, align 4
@KBYTE = external hidden global i32, align 4
@TBYTE = external hidden global i32, align 4
@.str.28 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.29 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.31 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.32 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.33 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.34 = external hidden unnamed_addr constant [45 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.36 = external hidden unnamed_addr constant [47 x i8], align 1
@.str.37 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.38 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.39 = external hidden unnamed_addr constant [35 x i8], align 1
@.str.40 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.41 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.42 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.43 = external hidden unnamed_addr constant [38 x i8], align 1
@BLEVEL = external hidden global i32, align 4
@BWIDTH = external hidden global i32, align 4
@MEMORY_LIMIT = external hidden global i64, align 8
@Cache_Size = external hidden global i64, align 8
@Divpt = external hidden global ptr, align 8
@.str.44 = external hidden unnamed_addr constant [22 x i8], align 1
@Pair = external hidden global ptr, align 8
@.str.45 = external hidden unnamed_addr constant [24 x i8], align 1
@PASS1 = external hidden global i32, align 4
@Tstack = external hidden global ptr, align 8
@Tavail = external hidden global i32, align 4
@TMUTEX = external hidden global %union.pthread_mutex_t, align 8
@TCOND = external hidden global %union.pthread_cond_t, align 8
@.str.46 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.47 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.48 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.49 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.50 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.51 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.52 = external hidden unnamed_addr constant [12 x i8], align 1

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

45:                                               ; preds = %52, %2
  %46 = load i32, ptr %14, align 4, !tbaa !5
  %47 = icmp slt i32 %46, 128
  br i1 %47, label %48, label %55

48:                                               ; preds = %45
  %49 = load i32, ptr %14, align 4, !tbaa !5
  %50 = sext i32 %49 to i64
  %51 = getelementptr inbounds [128 x i32], ptr %17, i64 0, i64 %50
  store i32 0, ptr %51, align 4, !tbaa !5
  br label %52

52:                                               ; preds = %48
  %53 = load i32, ptr %14, align 4, !tbaa !5
  %54 = add nsw i32 %53, 1
  store i32 %54, ptr %14, align 4, !tbaa !5
  br label %45, !llvm.loop !11

55:                                               ; preds = %45
  store ptr null, ptr %12, align 8, !tbaa !9
  store i32 4, ptr @ETHRESH, align 4, !tbaa !5
  store i32 4, ptr @NTHREADS, align 4, !tbaa !5
  store ptr @.str.2, ptr %11, align 8, !tbaa !9
  store i32 1, ptr %15, align 4, !tbaa !5
  store i32 1, ptr %14, align 4, !tbaa !5
  br label %56

56:                                               ; preds = %280, %55
  %57 = load i32, ptr %14, align 4, !tbaa !5
  %58 = load i32, ptr %4, align 4, !tbaa !5
  %59 = icmp slt i32 %57, %58
  br i1 %59, label %60, label %283

60:                                               ; preds = %56
  %61 = load ptr, ptr %5, align 8, !tbaa !9
  %62 = load i32, ptr %14, align 4, !tbaa !5
  %63 = sext i32 %62 to i64
  %64 = getelementptr inbounds ptr, ptr %61, i64 %63
  %65 = load ptr, ptr %64, align 8, !tbaa !9
  %66 = getelementptr inbounds i8, ptr %65, i64 0
  %67 = load i8, ptr %66, align 1, !tbaa !13
  %68 = sext i8 %67 to i32
  %69 = icmp eq i32 %68, 45
  br i1 %69, label %70, label %268

70:                                               ; preds = %60
  %71 = load ptr, ptr %5, align 8, !tbaa !9
  %72 = load i32, ptr %14, align 4, !tbaa !5
  %73 = sext i32 %72 to i64
  %74 = getelementptr inbounds ptr, ptr %71, i64 %73
  %75 = load ptr, ptr %74, align 8, !tbaa !9
  %76 = getelementptr inbounds i8, ptr %75, i64 1
  %77 = load i8, ptr %76, align 1, !tbaa !13
  %78 = sext i8 %77 to i32
  switch i32 %78, label %79 [
    i32 101, label %136
    i32 111, label %186
    i32 80, label %203
    i32 84, label %210
  ]

79:                                               ; preds = %70
  store i32 1, ptr %16, align 4, !tbaa !5
  br label %80

80:                                               ; preds = %132, %79
  %81 = load ptr, ptr %5, align 8, !tbaa !9
  %82 = load i32, ptr %14, align 4, !tbaa !5
  %83 = sext i32 %82 to i64
  %84 = getelementptr inbounds ptr, ptr %81, i64 %83
  %85 = load ptr, ptr %84, align 8, !tbaa !9
  %86 = load i32, ptr %16, align 4, !tbaa !5
  %87 = sext i32 %86 to i64
  %88 = getelementptr inbounds i8, ptr %85, i64 %87
  %89 = load i8, ptr %88, align 1, !tbaa !13
  %90 = sext i8 %89 to i32
  %91 = icmp ne i32 %90, 0
  br i1 %91, label %92, label %135

92:                                               ; preds = %80
  %93 = load ptr, ptr %5, align 8, !tbaa !9
  %94 = load i32, ptr %14, align 4, !tbaa !5
  %95 = sext i32 %94 to i64
  %96 = getelementptr inbounds ptr, ptr %93, i64 %95
  %97 = load ptr, ptr %96, align 8, !tbaa !9
  %98 = load i32, ptr %16, align 4, !tbaa !5
  %99 = sext i32 %98 to i64
  %100 = getelementptr inbounds i8, ptr %97, i64 %99
  %101 = load i8, ptr %100, align 1, !tbaa !13
  %102 = sext i8 %101 to i32
  %103 = call ptr @index(ptr noundef @.str.3, i32 noundef %102) #9
  %104 = icmp eq ptr %103, null
  br i1 %104, label %105, label %119

105:                                              ; preds = %92
  %106 = load ptr, ptr @stderr, align 8, !tbaa !9
  %107 = load ptr, ptr @Prog_Name, align 8, !tbaa !9
  %108 = load ptr, ptr %5, align 8, !tbaa !9
  %109 = load i32, ptr %14, align 4, !tbaa !5
  %110 = sext i32 %109 to i64
  %111 = getelementptr inbounds ptr, ptr %108, i64 %110
  %112 = load ptr, ptr %111, align 8, !tbaa !9
  %113 = load i32, ptr %16, align 4, !tbaa !5
  %114 = sext i32 %113 to i64
  %115 = getelementptr inbounds i8, ptr %112, i64 %114
  %116 = load i8, ptr %115, align 1, !tbaa !13
  %117 = sext i8 %116 to i32
  %118 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %106, ptr noundef @.str.4, ptr noundef %107, i32 noundef %117) #8
  call void @exit(i32 noundef 1) #10
  unreachable

119:                                              ; preds = %92
  %120 = load ptr, ptr %5, align 8, !tbaa !9
  %121 = load i32, ptr %14, align 4, !tbaa !5
  %122 = sext i32 %121 to i64
  %123 = getelementptr inbounds ptr, ptr %120, i64 %122
  %124 = load ptr, ptr %123, align 8, !tbaa !9
  %125 = load i32, ptr %16, align 4, !tbaa !5
  %126 = sext i32 %125 to i64
  %127 = getelementptr inbounds i8, ptr %124, i64 %126
  %128 = load i8, ptr %127, align 1, !tbaa !13
  %129 = sext i8 %128 to i32
  %130 = sext i32 %129 to i64
  %131 = getelementptr inbounds [128 x i32], ptr %17, i64 0, i64 %130
  store i32 1, ptr %131, align 4, !tbaa !5
  br label %132

132:                                              ; preds = %119
  %133 = load i32, ptr %16, align 4, !tbaa !5
  %134 = add nsw i32 %133, 1
  store i32 %134, ptr %16, align 4, !tbaa !5
  br label %80, !llvm.loop !14

135:                                              ; preds = %80
  br label %267

136:                                              ; preds = %70
  %137 = load ptr, ptr %5, align 8, !tbaa !9
  %138 = load i32, ptr %14, align 4, !tbaa !5
  %139 = sext i32 %138 to i64
  %140 = getelementptr inbounds ptr, ptr %137, i64 %139
  %141 = load ptr, ptr %140, align 8, !tbaa !9
  %142 = getelementptr inbounds i8, ptr %141, i64 2
  %143 = call i64 @strtol(ptr noundef %142, ptr noundef %18, i32 noundef 10) #8
  %144 = trunc i64 %143 to i32
  store i32 %144, ptr @ETHRESH, align 4, !tbaa !5
  %145 = load ptr, ptr %18, align 8, !tbaa !9
  %146 = load i8, ptr %145, align 1, !tbaa !13
  %147 = sext i8 %146 to i32
  %148 = icmp ne i32 %147, 0
  br i1 %148, label %159, label %149

149:                                              ; preds = %136
  %150 = load ptr, ptr %5, align 8, !tbaa !9
  %151 = load i32, ptr %14, align 4, !tbaa !5
  %152 = sext i32 %151 to i64
  %153 = getelementptr inbounds ptr, ptr %150, i64 %152
  %154 = load ptr, ptr %153, align 8, !tbaa !9
  %155 = getelementptr inbounds i8, ptr %154, i64 2
  %156 = load i8, ptr %155, align 1, !tbaa !13
  %157 = sext i8 %156 to i32
  %158 = icmp eq i32 %157, 0
  br i1 %158, label %159, label %177

159:                                              ; preds = %149, %136
  %160 = load ptr, ptr @stderr, align 8, !tbaa !9
  %161 = load ptr, ptr @Prog_Name, align 8, !tbaa !9
  %162 = load ptr, ptr %5, align 8, !tbaa !9
  %163 = load i32, ptr %14, align 4, !tbaa !5
  %164 = sext i32 %163 to i64
  %165 = getelementptr inbounds ptr, ptr %162, i64 %164
  %166 = load ptr, ptr %165, align 8, !tbaa !9
  %167 = getelementptr inbounds i8, ptr %166, i64 1
  %168 = load i8, ptr %167, align 1, !tbaa !13
  %169 = sext i8 %168 to i32
  %170 = load ptr, ptr %5, align 8, !tbaa !9
  %171 = load i32, ptr %14, align 4, !tbaa !5
  %172 = sext i32 %171 to i64
  %173 = getelementptr inbounds ptr, ptr %170, i64 %172
  %174 = load ptr, ptr %173, align 8, !tbaa !9
  %175 = getelementptr inbounds i8, ptr %174, i64 2
  %176 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %160, ptr noundef @.str.5, ptr noundef %161, i32 noundef %169, ptr noundef %175) #8
  call void @exit(i32 noundef 1) #10
  unreachable

177:                                              ; preds = %149
  %178 = load i32, ptr @ETHRESH, align 4, !tbaa !5
  %179 = icmp sle i32 %178, 0
  br i1 %179, label %180, label %185

180:                                              ; preds = %177
  %181 = load ptr, ptr @stderr, align 8, !tbaa !9
  %182 = load ptr, ptr @Prog_Name, align 8, !tbaa !9
  %183 = load i32, ptr @ETHRESH, align 4, !tbaa !5
  %184 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %181, ptr noundef @.str.6, ptr noundef %182, ptr noundef @.str.7, i32 noundef %183) #8
  call void @exit(i32 noundef 1) #10
  unreachable

185:                                              ; preds = %177
  br label %267

186:                                              ; preds = %70
  %187 = load ptr, ptr %12, align 8, !tbaa !9
  %188 = icmp eq ptr %187, null
  br i1 %188, label %189, label %191

189:                                              ; preds = %186
  %190 = load ptr, ptr %12, align 8, !tbaa !9
  call void @free(ptr noundef %190) #8
  br label %191

191:                                              ; preds = %189, %186
  %192 = load ptr, ptr %5, align 8, !tbaa !9
  %193 = load i32, ptr %14, align 4, !tbaa !5
  %194 = sext i32 %193 to i64
  %195 = getelementptr inbounds ptr, ptr %192, i64 %194
  %196 = load ptr, ptr %195, align 8, !tbaa !9
  %197 = getelementptr inbounds i8, ptr %196, i64 2
  %198 = call ptr @Strdup(ptr noundef %197, ptr noundef @.str.8)
  store ptr %198, ptr %12, align 8, !tbaa !9
  %199 = load ptr, ptr %12, align 8, !tbaa !9
  %200 = icmp eq ptr %199, null
  br i1 %200, label %201, label %202

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

202:                                              ; preds = %191
  br label %267

203:                                              ; preds = %70
  %204 = load ptr, ptr %5, align 8, !tbaa !9
  %205 = load i32, ptr %14, align 4, !tbaa !5
  %206 = sext i32 %205 to i64
  %207 = getelementptr inbounds ptr, ptr %204, i64 %206
  %208 = load ptr, ptr %207, align 8, !tbaa !9
  %209 = getelementptr inbounds i8, ptr %208, i64 2
  store ptr %209, ptr %11, align 8, !tbaa !9
  br label %267

210:                                              ; preds = %70
  %211 = load ptr, ptr %5, align 8, !tbaa !9
  %212 = load i32, ptr %14, align 4, !tbaa !5
  %213 = sext i32 %212 to i64
  %214 = getelementptr inbounds ptr, ptr %211, i64 %213
  %215 = load ptr, ptr %214, align 8, !tbaa !9
  %216 = getelementptr inbounds i8, ptr %215, i64 2
  %217 = call i64 @strtol(ptr noundef %216, ptr noundef %18, i32 noundef 10) #8
  %218 = trunc i64 %217 to i32
  store i32 %218, ptr @NTHREADS, align 4, !tbaa !5
  %219 = load ptr, ptr %18, align 8, !tbaa !9
  %220 = load i8, ptr %219, align 1, !tbaa !13
  %221 = sext i8 %220 to i32
  %222 = icmp ne i32 %221, 0
  br i1 %222, label %233, label %223

223:                                              ; preds = %210
  %224 = load ptr, ptr %5, align 8, !tbaa !9
  %225 = load i32, ptr %14, align 4, !tbaa !5
  %226 = sext i32 %225 to i64
  %227 = getelementptr inbounds ptr, ptr %224, i64 %226
  %228 = load ptr, ptr %227, align 8, !tbaa !9
  %229 = getelementptr inbounds i8, ptr %228, i64 2
  %230 = load i8, ptr %229, align 1, !tbaa !13
  %231 = sext i8 %230 to i32
  %232 = icmp eq i32 %231, 0
  br i1 %232, label %233, label %251

233:                                              ; preds = %223, %210
  %234 = load ptr, ptr @stderr, align 8, !tbaa !9
  %235 = load ptr, ptr @Prog_Name, align 8, !tbaa !9
  %236 = load ptr, ptr %5, align 8, !tbaa !9
  %237 = load i32, ptr %14, align 4, !tbaa !5
  %238 = sext i32 %237 to i64
  %239 = getelementptr inbounds ptr, ptr %236, i64 %238
  %240 = load ptr, ptr %239, align 8, !tbaa !9
  %241 = getelementptr inbounds i8, ptr %240, i64 1
  %242 = load i8, ptr %241, align 1, !tbaa !13
  %243 = sext i8 %242 to i32
  %244 = load ptr, ptr %5, align 8, !tbaa !9
  %245 = load i32, ptr %14, align 4, !tbaa !5
  %246 = sext i32 %245 to i64
  %247 = getelementptr inbounds ptr, ptr %244, i64 %246
  %248 = load ptr, ptr %247, align 8, !tbaa !9
  %249 = getelementptr inbounds i8, ptr %248, i64 2
  %250 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %234, ptr noundef @.str.5, ptr noundef %235, i32 noundef %243, ptr noundef %249) #8
  call void @exit(i32 noundef 1) #10
  unreachable

251:                                              ; preds = %223
  %252 = load i32, ptr @NTHREADS, align 4, !tbaa !5
  %253 = icmp sle i32 %252, 0
  br i1 %253, label %254, label %259

254:                                              ; preds = %251
  %255 = load ptr, ptr @stderr, align 8, !tbaa !9
  %256 = load ptr, ptr @Prog_Name, align 8, !tbaa !9
  %257 = load i32, ptr @NTHREADS, align 4, !tbaa !5
  %258 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %255, ptr noundef @.str.6, ptr noundef %256, ptr noundef @.str.9, i32 noundef %257) #8
  call void @exit(i32 noundef 1) #10
  unreachable

259:                                              ; preds = %251
  %260 = load i32, ptr @NTHREADS, align 4, !tbaa !5
  %261 = icmp sgt i32 %260, 64
  br i1 %261, label %262, label %266

262:                                              ; preds = %259
  %263 = load ptr, ptr @stderr, align 8, !tbaa !9
  %264 = load ptr, ptr @Prog_Name, align 8, !tbaa !9
  %265 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %263, ptr noundef @.str.10, ptr noundef %264) #8
  store i32 64, ptr @NTHREADS, align 4, !tbaa !5
  br label %266

266:                                              ; preds = %262, %259
  br label %267

267:                                              ; preds = %266, %203, %202, %185, %135
  br label %279

268:                                              ; preds = %60
  %269 = load ptr, ptr %5, align 8, !tbaa !9
  %270 = load i32, ptr %14, align 4, !tbaa !5
  %271 = sext i32 %270 to i64
  %272 = getelementptr inbounds ptr, ptr %269, i64 %271
  %273 = load ptr, ptr %272, align 8, !tbaa !9
  %274 = load ptr, ptr %5, align 8, !tbaa !9
  %275 = load i32, ptr %15, align 4, !tbaa !5
  %276 = add nsw i32 %275, 1
  store i32 %276, ptr %15, align 4, !tbaa !5
  %277 = sext i32 %275 to i64
  %278 = getelementptr inbounds ptr, ptr %274, i64 %277
  store ptr %273, ptr %278, align 8, !tbaa !9
  br label %279

279:                                              ; preds = %268, %267
  br label %280

280:                                              ; preds = %279
  %281 = load i32, ptr %14, align 4, !tbaa !5
  %282 = add nsw i32 %281, 1
  store i32 %282, ptr %14, align 4, !tbaa !5
  br label %56, !llvm.loop !15

283:                                              ; preds = %56
  %284 = load i32, ptr %15, align 4, !tbaa !5
  store i32 %284, ptr %4, align 4, !tbaa !5
  %285 = getelementptr inbounds [128 x i32], ptr %17, i64 0, i64 118
  %286 = load i32, ptr %285, align 8, !tbaa !5
  store i32 %286, ptr @VERBOSE, align 4, !tbaa !5
  %287 = load i32, ptr %4, align 4, !tbaa !5
  %288 = icmp ne i32 %287, 2
  br i1 %288, label %289, label %316

289:                                              ; preds = %283
  %290 = load ptr, ptr @stderr, align 8, !tbaa !9
  %291 = load ptr, ptr @Prog_Name, align 8, !tbaa !9
  %292 = load ptr, ptr @Usage, align 16, !tbaa !9
  %293 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %290, ptr noundef @.str.11, ptr noundef %291, ptr noundef %292) #8
  %294 = load ptr, ptr @stderr, align 8, !tbaa !9
  %295 = load ptr, ptr @Prog_Name, align 8, !tbaa !9
  %296 = call i64 @strlen(ptr noundef %295) #9
  %297 = trunc i64 %296 to i32
  %298 = load ptr, ptr getelementptr inbounds ([2 x ptr], ptr @Usage, i64 0, i64 1), align 8, !tbaa !9
  %299 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %294, ptr noundef @.str.12, i32 noundef %297, ptr noundef @.str.1, ptr noundef %298) #8
  %300 = load ptr, ptr @stderr, align 8, !tbaa !9
  %301 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %300, ptr noundef @.str.13) #8
  %302 = load ptr, ptr @stderr, align 8, !tbaa !9
  %303 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %302, ptr noundef @.str.14) #8
  %304 = load ptr, ptr @stderr, align 8, !tbaa !9
  %305 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %304, ptr noundef @.str.15) #8
  %306 = load ptr, ptr @stderr, align 8, !tbaa !9
  %307 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %306, ptr noundef @.str.13) #8
  %308 = load ptr, ptr @stderr, align 8, !tbaa !9
  %309 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %308, ptr noundef @.str.16) #8
  %310 = load ptr, ptr @stderr, align 8, !tbaa !9
  %311 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %310, ptr noundef @.str.17) #8
  %312 = load ptr, ptr @stderr, align 8, !tbaa !9
  %313 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %312, ptr noundef @.str.18) #8
  %314 = load ptr, ptr @stderr, align 8, !tbaa !9
  %315 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %314, ptr noundef @.str.19) #8
  call void @exit(i32 noundef 1) #10
  unreachable

316:                                              ; preds = %283
  %317 = load ptr, ptr %5, align 8, !tbaa !9
  %318 = getelementptr inbounds ptr, ptr %317, i64 1
  %319 = load ptr, ptr %318, align 8, !tbaa !9
  store ptr %319, ptr %13, align 8, !tbaa !9
  %320 = load ptr, ptr %12, align 8, !tbaa !9
  %321 = icmp eq ptr %320, null
  br i1 %321, label %322, label %327

322:                                              ; preds = %316
  %323 = load ptr, ptr %5, align 8, !tbaa !9
  %324 = getelementptr inbounds ptr, ptr %323, i64 1
  %325 = load ptr, ptr %324, align 8, !tbaa !9
  %326 = call ptr @Root(ptr noundef %325, ptr noundef @.str.20)
  store ptr %326, ptr %12, align 8, !tbaa !9
  br label %327

327:                                              ; preds = %322, %316
  %328 = call ptr @mktemp(ptr noundef @template) #8
  store ptr %328, ptr %8, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #8
  call void @llvm.lifetime.end.p0(i64 512, ptr %17) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #8
  store i32 0, ptr %10, align 4, !tbaa !5
  %329 = load ptr, ptr %12, align 8, !tbaa !9
  %330 = call ptr @Catenate(ptr noundef %329, ptr noundef @.str.21, ptr noundef @.str.1, ptr noundef @.str.1)
  %331 = call noalias ptr @fopen(ptr noundef %330, ptr noundef @.str.22)
  store ptr %331, ptr %19, align 8, !tbaa !9
  %332 = load ptr, ptr %19, align 8, !tbaa !9
  %333 = icmp ne ptr %332, null
  br i1 %333, label %334, label %387

334:                                              ; preds = %327
  %335 = load ptr, ptr @stdout, align 8, !tbaa !9
  %336 = load ptr, ptr %12, align 8, !tbaa !9
  %337 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %335, ptr noundef @.str.23, ptr noundef %336) #8
  %338 = load ptr, ptr @stdout, align 8, !tbaa !9
  %339 = call i32 @fflush(ptr noundef %338)
  br label %340

340:                                              ; preds = %351, %334
  %341 = load ptr, ptr @stdin, align 8, !tbaa !9
  %342 = call i32 @getc(ptr noundef %341)
  store i32 %342, ptr %20, align 4, !tbaa !5
  %343 = icmp ne i32 %342, 10
  br i1 %343, label %344, label %352

344:                                              ; preds = %340
  %345 = load i32, ptr %20, align 4, !tbaa !5
  %346 = icmp eq i32 %345, 121
  br i1 %346, label %350, label %347

347:                                              ; preds = %344
  %348 = load i32, ptr %20, align 4, !tbaa !5
  %349 = icmp eq i32 %348, 89
  br i1 %349, label %350, label %351

350:                                              ; preds = %347, %344
  store i32 1, ptr %10, align 4, !tbaa !5
  br label %351

351:                                              ; preds = %350, %347
  br label %340, !llvm.loop !16

352:                                              ; preds = %340
  %353 = load i32, ptr %10, align 4, !tbaa !5
  %354 = icmp ne i32 %353, 0
  br i1 %354, label %355, label %384

355:                                              ; preds = %352
  %356 = call ptr @Malloc(i64 noundef 8008, ptr noundef @.str.24)
  store ptr %356, ptr %9, align 8, !tbaa !9
  %357 = call ptr @Malloc(i64 noundef 4012008, ptr noundef @.str.25)
  %358 = load ptr, ptr %9, align 8, !tbaa !9
  %359 = getelementptr inbounds ptr, ptr %358, i64 0
  store ptr %357, ptr %359, align 8, !tbaa !9
  store i32 1, ptr %20, align 4, !tbaa !5
  br label %360

360:                                              ; preds = %375, %355
  %361 = load i32, ptr %20, align 4, !tbaa !5
  %362 = icmp sle i32 %361, 1000
  br i1 %362, label %363, label %378

363:                                              ; preds = %360
  %364 = load ptr, ptr %9, align 8, !tbaa !9
  %365 = load i32, ptr %20, align 4, !tbaa !5
  %366 = sub nsw i32 %365, 1
  %367 = sext i32 %366 to i64
  %368 = getelementptr inbounds ptr, ptr %364, i64 %367
  %369 = load ptr, ptr %368, align 8, !tbaa !9
  %370 = getelementptr inbounds i64, ptr %369, i64 501
  %371 = load ptr, ptr %9, align 8, !tbaa !9
  %372 = load i32, ptr %20, align 4, !tbaa !5
  %373 = sext i32 %372 to i64
  %374 = getelementptr inbounds ptr, ptr %371, i64 %373
  store ptr %370, ptr %374, align 8, !tbaa !9
  br label %375

375:                                              ; preds = %363
  %376 = load i32, ptr %20, align 4, !tbaa !5
  %377 = add nsw i32 %376, 1
  store i32 %377, ptr %20, align 4, !tbaa !5
  br label %360, !llvm.loop !17

378:                                              ; preds = %360
  %379 = load ptr, ptr %9, align 8, !tbaa !9
  %380 = getelementptr inbounds ptr, ptr %379, i64 0
  %381 = load ptr, ptr %380, align 8, !tbaa !9
  %382 = load ptr, ptr %19, align 8, !tbaa !9
  %383 = call i64 @fread(ptr noundef %381, i64 noundef 8, i64 noundef 501501, ptr noundef %382)
  br label %384

384:                                              ; preds = %378, %352
  %385 = load ptr, ptr %19, align 8, !tbaa !9
  %386 = call i32 @fclose(ptr noundef %385)
  br label %387

387:                                              ; preds = %384, %327
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #8
  %388 = load ptr, ptr %13, align 8, !tbaa !9
  %389 = call i64 @strlen(ptr noundef %388) #9
  %390 = load ptr, ptr %8, align 8, !tbaa !9
  %391 = call i64 @strlen(ptr noundef %390) #9
  %392 = add i64 %389, %391
  %393 = add i64 %392, 10
  %394 = call ptr @Malloc(i64 noundef %393, ptr noundef @.str.26)
  store ptr %394, ptr %22, align 8, !tbaa !9
  %395 = load ptr, ptr %13, align 8, !tbaa !9
  %396 = call i64 @strlen(ptr noundef %395) #9
  %397 = load ptr, ptr %8, align 8, !tbaa !9
  %398 = call i64 @strlen(ptr noundef %397) #9
  %399 = add i64 %396, %398
  %400 = add i64 %399, 100
  %401 = call ptr @Malloc(i64 noundef %400, ptr noundef @.str.26)
  store ptr %401, ptr %21, align 8, !tbaa !9
  %402 = load ptr, ptr %22, align 8, !tbaa !9
  %403 = icmp eq ptr %402, null
  br i1 %403, label %407, label %404

404:                                              ; preds = %387
  %405 = load ptr, ptr %21, align 8, !tbaa !9
  %406 = icmp eq ptr %405, null
  br i1 %406, label %407, label %408

407:                                              ; preds = %404, %387
  call void @exit(i32 noundef 1) #10
  unreachable

408:                                              ; preds = %404
  %409 = load ptr, ptr %13, align 8, !tbaa !9
  %410 = call ptr @Open_Kmer_Stream(ptr noundef %409)
  store ptr %410, ptr %6, align 8, !tbaa !9
  %411 = load ptr, ptr %6, align 8, !tbaa !9
  %412 = icmp eq ptr %411, null
  br i1 %412, label %413, label %418

413:                                              ; preds = %408
  %414 = load ptr, ptr @stderr, align 8, !tbaa !9
  %415 = load ptr, ptr @Prog_Name, align 8, !tbaa !9
  %416 = load ptr, ptr %13, align 8, !tbaa !9
  %417 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %414, ptr noundef @.str.27, ptr noundef %415, ptr noundef %416) #8
  call void @exit(i32 noundef 1) #10
  unreachable

418:                                              ; preds = %408
  %419 = load ptr, ptr %6, align 8, !tbaa !9
  %420 = getelementptr inbounds %struct.Kmer_Stream, ptr %419, i32 0, i32 0
  %421 = load i32, ptr %420, align 8, !tbaa !18
  store i32 %421, ptr @KMER, align 4, !tbaa !5
  %422 = load ptr, ptr %6, align 8, !tbaa !9
  %423 = getelementptr inbounds %struct.Kmer_Stream, ptr %422, i32 0, i32 7
  %424 = load i32, ptr %423, align 8, !tbaa !21
  store i32 %424, ptr @KBYTE, align 4, !tbaa !5
  %425 = load ptr, ptr %6, align 8, !tbaa !9
  %426 = getelementptr inbounds %struct.Kmer_Stream, ptr %425, i32 0, i32 8
  %427 = load i32, ptr %426, align 4, !tbaa !22
  store i32 %427, ptr @TBYTE, align 4, !tbaa !5
  %428 = load i32, ptr %10, align 4, !tbaa !5
  %429 = icmp ne i32 %428, 0
  br i1 %429, label %430, label %431

430:                                              ; preds = %418
  store i32 17, ptr %25, align 4
  br label %563

431:                                              ; preds = %418
  %432 = load ptr, ptr %6, align 8, !tbaa !9
  call void @examine_table(ptr noundef %432, ptr noundef %24, ptr noundef %23)
  %433 = load i32, ptr @VERBOSE, align 4, !tbaa !5
  %434 = icmp ne i32 %433, 0
  br i1 %434, label %435, label %461

435:                                              ; preds = %431
  %436 = load ptr, ptr @stderr, align 8, !tbaa !9
  %437 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %436, ptr noundef @.str.28) #8
  %438 = load i32, ptr %24, align 4, !tbaa !5
  %439 = icmp ne i32 %438, 0
  br i1 %439, label %440, label %450

440:                                              ; preds = %435
  %441 = load i32, ptr %23, align 4, !tbaa !5
  %442 = icmp ne i32 %441, 0
  br i1 %442, label %443, label %446

443:                                              ; preds = %440
  %444 = load ptr, ptr @stderr, align 8, !tbaa !9
  %445 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %444, ptr noundef @.str.29) #8
  br label %449

446:                                              ; preds = %440
  %447 = load ptr, ptr @stderr, align 8, !tbaa !9
  %448 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %447, ptr noundef @.str.30) #8
  br label %449

449:                                              ; preds = %446, %443
  br label %460

450:                                              ; preds = %435
  %451 = load i32, ptr %23, align 4, !tbaa !5
  %452 = icmp ne i32 %451, 0
  br i1 %452, label %453, label %456

453:                                              ; preds = %450
  %454 = load ptr, ptr @stderr, align 8, !tbaa !9
  %455 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %454, ptr noundef @.str.31) #8
  br label %459

456:                                              ; preds = %450
  %457 = load ptr, ptr @stderr, align 8, !tbaa !9
  %458 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %457, ptr noundef @.str.32) #8
  br label %459

459:                                              ; preds = %456, %453
  br label %460

460:                                              ; preds = %459, %449
  br label %461

461:                                              ; preds = %460, %431
  %462 = load ptr, ptr %22, align 8, !tbaa !9
  %463 = load ptr, ptr %13, align 8, !tbaa !9
  %464 = call i32 (ptr, ptr, ...) @sprintf(ptr noundef %462, ptr noundef @.str.33, ptr noundef %463) #8
  store ptr null, ptr %7, align 8, !tbaa !9
  %465 = load i32, ptr %24, align 4, !tbaa !5
  %466 = icmp ne i32 %465, 0
  br i1 %466, label %495, label %467

467:                                              ; preds = %461
  %468 = load i32, ptr @VERBOSE, align 4, !tbaa !5
  %469 = icmp ne i32 %468, 0
  br i1 %469, label %470, label %476

470:                                              ; preds = %467
  %471 = load ptr, ptr @stderr, align 8, !tbaa !9
  %472 = load i32, ptr @ETHRESH, align 4, !tbaa !5
  %473 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %471, ptr noundef @.str.34, i32 noundef %472) #8
  %474 = load ptr, ptr @stderr, align 8, !tbaa !9
  %475 = call i32 @fflush(ptr noundef %474)
  br label %476

476:                                              ; preds = %470, %467
  %477 = load ptr, ptr %21, align 8, !tbaa !9
  %478 = load i32, ptr @NTHREADS, align 4, !tbaa !5
  %479 = load ptr, ptr %8, align 8, !tbaa !9
  %480 = load i32, ptr @ETHRESH, align 4, !tbaa !5
  %481 = load ptr, ptr %22, align 8, !tbaa !9
  %482 = call i32 (ptr, ptr, ...) @sprintf(ptr noundef %477, ptr noundef @.str.35, i32 noundef %478, ptr noundef %479, i32 noundef %480, ptr noundef %481) #8
  %483 = load ptr, ptr %21, align 8, !tbaa !9
  %484 = call i32 @system(ptr noundef %483)
  %485 = icmp ne i32 %484, 0
  br i1 %485, label %486, label %491

486:                                              ; preds = %476
  %487 = load ptr, ptr @stderr, align 8, !tbaa !9
  %488 = load ptr, ptr @Prog_Name, align 8, !tbaa !9
  %489 = load ptr, ptr %21, align 8, !tbaa !9
  %490 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %487, ptr noundef @.str.36, ptr noundef %488, ptr noundef %489) #8
  call void @exit(i32 noundef 1) #10
  unreachable

491:                                              ; preds = %476
  %492 = load ptr, ptr %22, align 8, !tbaa !9
  %493 = load ptr, ptr %8, align 8, !tbaa !9
  %494 = call i32 (ptr, ptr, ...) @sprintf(ptr noundef %492, ptr noundef @.str.37, ptr noundef %493) #8
  br label %495

495:                                              ; preds = %491, %461
  %496 = load i32, ptr %23, align 4, !tbaa !5
  %497 = icmp ne i32 %496, 0
  br i1 %497, label %548, label %498

498:                                              ; preds = %495
  %499 = load i32, ptr @VERBOSE, align 4, !tbaa !5
  %500 = icmp ne i32 %499, 0
  br i1 %500, label %501, label %513

501:                                              ; preds = %498
  %502 = load i32, ptr %24, align 4, !tbaa !5
  %503 = icmp ne i32 %502, 0
  br i1 %503, label %504, label %507

504:                                              ; preds = %501
  %505 = load ptr, ptr @stderr, align 8, !tbaa !9
  %506 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %505, ptr noundef @.str.38) #8
  br label %510

507:                                              ; preds = %501
  %508 = load ptr, ptr @stderr, align 8, !tbaa !9
  %509 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %508, ptr noundef @.str.39) #8
  br label %510

510:                                              ; preds = %507, %504
  %511 = load ptr, ptr @stderr, align 8, !tbaa !9
  %512 = call i32 @fflush(ptr noundef %511)
  br label %513

513:                                              ; preds = %510, %498
  %514 = load ptr, ptr %21, align 8, !tbaa !9
  %515 = load i32, ptr @NTHREADS, align 4, !tbaa !5
  %516 = load ptr, ptr %11, align 8, !tbaa !9
  %517 = load ptr, ptr %22, align 8, !tbaa !9
  %518 = load ptr, ptr %8, align 8, !tbaa !9
  %519 = call i32 (ptr, ptr, ...) @sprintf(ptr noundef %514, ptr noundef @.str.40, i32 noundef %515, ptr noundef %516, ptr noundef %517, ptr noundef %518) #8
  %520 = load ptr, ptr %21, align 8, !tbaa !9
  %521 = call i32 @system(ptr noundef %520)
  %522 = icmp ne i32 %521, 0
  br i1 %522, label %523, label %528

523:                                              ; preds = %513
  %524 = load ptr, ptr @stderr, align 8, !tbaa !9
  %525 = load ptr, ptr @Prog_Name, align 8, !tbaa !9
  %526 = load ptr, ptr %21, align 8, !tbaa !9
  %527 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %524, ptr noundef @.str.36, ptr noundef %525, ptr noundef %526) #8
  call void @exit(i32 noundef 1) #10
  unreachable

528:                                              ; preds = %513
  %529 = load i32, ptr %24, align 4, !tbaa !5
  %530 = icmp ne i32 %529, 0
  br i1 %530, label %544, label %531

531:                                              ; preds = %528
  %532 = load ptr, ptr %21, align 8, !tbaa !9
  %533 = load ptr, ptr %8, align 8, !tbaa !9
  %534 = call i32 (ptr, ptr, ...) @sprintf(ptr noundef %532, ptr noundef @.str.41, ptr noundef %533) #8
  %535 = load ptr, ptr %21, align 8, !tbaa !9
  %536 = call i32 @system(ptr noundef %535)
  %537 = icmp ne i32 %536, 0
  br i1 %537, label %538, label %543

538:                                              ; preds = %531
  %539 = load ptr, ptr @stderr, align 8, !tbaa !9
  %540 = load ptr, ptr @Prog_Name, align 8, !tbaa !9
  %541 = load ptr, ptr %21, align 8, !tbaa !9
  %542 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %539, ptr noundef @.str.36, ptr noundef %540, ptr noundef %541) #8
  call void @exit(i32 noundef 1) #10
  unreachable

543:                                              ; preds = %531
  br label %544

544:                                              ; preds = %543, %528
  %545 = load ptr, ptr %22, align 8, !tbaa !9
  %546 = load ptr, ptr %8, align 8, !tbaa !9
  %547 = call i32 (ptr, ptr, ...) @sprintf(ptr noundef %545, ptr noundef @.str.42, ptr noundef %546) #8
  br label %548

548:                                              ; preds = %544, %495
  %549 = load ptr, ptr %21, align 8, !tbaa !9
  call void @free(ptr noundef %549) #8
  %550 = load i32, ptr %23, align 4, !tbaa !5
  %551 = icmp ne i32 %550, 0
  br i1 %551, label %552, label %555

552:                                              ; preds = %548
  %553 = load i32, ptr %24, align 4, !tbaa !5
  %554 = icmp ne i32 %553, 0
  br i1 %554, label %560, label %555

555:                                              ; preds = %552, %548
  %556 = load ptr, ptr %22, align 8, !tbaa !9
  store ptr %556, ptr %7, align 8, !tbaa !9
  %557 = load ptr, ptr %6, align 8, !tbaa !9
  call void @Free_Kmer_Stream(ptr noundef %557)
  %558 = load ptr, ptr %7, align 8, !tbaa !9
  %559 = call ptr @Open_Kmer_Stream(ptr noundef %558)
  store ptr %559, ptr %6, align 8, !tbaa !9
  br label %562

560:                                              ; preds = %552
  %561 = load ptr, ptr %22, align 8, !tbaa !9
  call void @free(ptr noundef %561) #8
  br label %562

562:                                              ; preds = %560, %555
  store i32 0, ptr %25, align 4
  br label %563

563:                                              ; preds = %562, %430
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #8
  %564 = load i32, ptr %25, align 4
  switch i32 %564, label %1032 [
    i32 0, label %565
    i32 17, label %975
  ]

565:                                              ; preds = %563
  %566 = load i32, ptr @VERBOSE, align 4, !tbaa !5
  %567 = icmp ne i32 %566, 0
  br i1 %567, label %568, label %573

568:                                              ; preds = %565
  %569 = load ptr, ptr @stderr, align 8, !tbaa !9
  %570 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %569, ptr noundef @.str.43) #8
  %571 = load ptr, ptr @stderr, align 8, !tbaa !9
  %572 = call i32 @fflush(ptr noundef %571)
  br label %573

573:                                              ; preds = %568, %565
  store i32 1, ptr @BLEVEL, align 4, !tbaa !5
  store i32 4, ptr @BWIDTH, align 4, !tbaa !5
  br label %574

574:                                              ; preds = %579, %573
  %575 = load i32, ptr @NTHREADS, align 4, !tbaa !5
  %576 = mul nsw i32 4, %575
  %577 = load i32, ptr @BWIDTH, align 4, !tbaa !5
  %578 = icmp sgt i32 %576, %577
  br i1 %578, label %579, label %584

579:                                              ; preds = %574
  %580 = load i32, ptr @BWIDTH, align 4, !tbaa !5
  %581 = mul nsw i32 %580, 4
  store i32 %581, ptr @BWIDTH, align 4, !tbaa !5
  %582 = load i32, ptr @BLEVEL, align 4, !tbaa !5
  %583 = add nsw i32 %582, 1
  store i32 %583, ptr @BLEVEL, align 4, !tbaa !5
  br label %574, !llvm.loop !23

584:                                              ; preds = %574
  %585 = load i64, ptr @MEMORY_LIMIT, align 8, !tbaa !24
  %586 = load i32, ptr @NTHREADS, align 4, !tbaa !5
  %587 = sext i32 %586 to i64
  %588 = sdiv i64 %585, %587
  %589 = load i32, ptr @TBYTE, align 4, !tbaa !5
  %590 = sext i32 %589 to i64
  %591 = sdiv i64 %588, %590
  store i64 %591, ptr @Cache_Size, align 8, !tbaa !24
  %592 = load i32, ptr @NTHREADS, align 4, !tbaa !5
  %593 = zext i32 %592 to i64
  %594 = call ptr @llvm.stacksave.p0()
  store ptr %594, ptr %26, align 8
  %595 = alloca %struct.TP, i64 %593, align 16
  store i64 %593, ptr %27, align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #8
  store i32 0, ptr %29, align 4, !tbaa !5
  br label %596

596:                                              ; preds = %632, %584
  %597 = load i32, ptr %29, align 4, !tbaa !5
  %598 = load i32, ptr @NTHREADS, align 4, !tbaa !5
  %599 = icmp slt i32 %597, %598
  br i1 %599, label %600, label %635

600:                                              ; preds = %596
  %601 = call ptr @Malloc(i64 noundef 8008, ptr noundef @.str.24)
  store ptr %601, ptr %30, align 8, !tbaa !9
  %602 = call ptr @Malloc(i64 noundef 4012008, ptr noundef @.str.25)
  %603 = load ptr, ptr %30, align 8, !tbaa !9
  %604 = getelementptr inbounds ptr, ptr %603, i64 0
  store ptr %602, ptr %604, align 8, !tbaa !9
  store i32 1, ptr %28, align 4, !tbaa !5
  br label %605

605:                                              ; preds = %620, %600
  %606 = load i32, ptr %28, align 4, !tbaa !5
  %607 = icmp sle i32 %606, 1000
  br i1 %607, label %608, label %623

608:                                              ; preds = %605
  %609 = load ptr, ptr %30, align 8, !tbaa !9
  %610 = load i32, ptr %28, align 4, !tbaa !5
  %611 = sub nsw i32 %610, 1
  %612 = sext i32 %611 to i64
  %613 = getelementptr inbounds ptr, ptr %609, i64 %612
  %614 = load ptr, ptr %613, align 8, !tbaa !9
  %615 = getelementptr inbounds i64, ptr %614, i64 501
  %616 = load ptr, ptr %30, align 8, !tbaa !9
  %617 = load i32, ptr %28, align 4, !tbaa !5
  %618 = sext i32 %617 to i64
  %619 = getelementptr inbounds ptr, ptr %616, i64 %618
  store ptr %615, ptr %619, align 8, !tbaa !9
  br label %620

620:                                              ; preds = %608
  %621 = load i32, ptr %28, align 4, !tbaa !5
  %622 = add nsw i32 %621, 1
  store i32 %622, ptr %28, align 4, !tbaa !5
  br label %605, !llvm.loop !25

623:                                              ; preds = %605
  %624 = load ptr, ptr %30, align 8, !tbaa !9
  %625 = getelementptr inbounds ptr, ptr %624, i64 0
  %626 = load ptr, ptr %625, align 8, !tbaa !9
  call void @llvm.memset.p0.i64(ptr align 8 %626, i8 0, i64 4012008, i1 false)
  %627 = load ptr, ptr %30, align 8, !tbaa !9
  %628 = load i32, ptr %29, align 4, !tbaa !5
  %629 = sext i32 %628 to i64
  %630 = getelementptr inbounds %struct.TP, ptr %595, i64 %629
  %631 = getelementptr inbounds %struct.TP, ptr %630, i32 0, i32 9
  store ptr %627, ptr %631, align 8, !tbaa !26
  br label %632

632:                                              ; preds = %623
  %633 = load i32, ptr %29, align 4, !tbaa !5
  %634 = add nsw i32 %633, 1
  store i32 %634, ptr %29, align 4, !tbaa !5
  br label %596, !llvm.loop !28

635:                                              ; preds = %596
  %636 = load ptr, ptr %6, align 8, !tbaa !9
  %637 = getelementptr inbounds %struct.TP, ptr %595, i64 0
  %638 = getelementptr inbounds %struct.TP, ptr %637, i32 0, i32 2
  %639 = getelementptr inbounds [4 x ptr], ptr %638, i64 0, i64 0
  store ptr %636, ptr %639, align 16, !tbaa !9
  store i32 0, ptr %29, align 4, !tbaa !5
  br label %640

640:                                              ; preds = %668, %635
  %641 = load i32, ptr %29, align 4, !tbaa !5
  %642 = load i32, ptr @NTHREADS, align 4, !tbaa !5
  %643 = icmp slt i32 %641, %642
  br i1 %643, label %644, label %671

644:                                              ; preds = %640
  store i32 0, ptr %28, align 4, !tbaa !5
  br label %645

645:                                              ; preds = %664, %644
  %646 = load i32, ptr %28, align 4, !tbaa !5
  %647 = icmp slt i32 %646, 4
  br i1 %647, label %648, label %667

648:                                              ; preds = %645
  %649 = load i32, ptr %28, align 4, !tbaa !5
  %650 = load i32, ptr %29, align 4, !tbaa !5
  %651 = add nsw i32 %649, %650
  %652 = icmp sgt i32 %651, 0
  br i1 %652, label %653, label %663

653:                                              ; preds = %648
  %654 = load ptr, ptr %6, align 8, !tbaa !9
  %655 = call ptr @Clone_Kmer_Stream(ptr noundef %654)
  %656 = load i32, ptr %29, align 4, !tbaa !5
  %657 = sext i32 %656 to i64
  %658 = getelementptr inbounds %struct.TP, ptr %595, i64 %657
  %659 = getelementptr inbounds %struct.TP, ptr %658, i32 0, i32 2
  %660 = load i32, ptr %28, align 4, !tbaa !5
  %661 = sext i32 %660 to i64
  %662 = getelementptr inbounds [4 x ptr], ptr %659, i64 0, i64 %661
  store ptr %655, ptr %662, align 8, !tbaa !9
  br label %663

663:                                              ; preds = %653, %648
  br label %664

664:                                              ; preds = %663
  %665 = load i32, ptr %28, align 4, !tbaa !5
  %666 = add nsw i32 %665, 1
  store i32 %666, ptr %28, align 4, !tbaa !5
  br label %645, !llvm.loop !29

667:                                              ; preds = %645
  br label %668

668:                                              ; preds = %667
  %669 = load i32, ptr %29, align 4, !tbaa !5
  %670 = add nsw i32 %669, 1
  store i32 %670, ptr %29, align 4, !tbaa !5
  br label %640, !llvm.loop !30

671:                                              ; preds = %640
  %672 = load ptr, ptr %6, align 8, !tbaa !9
  %673 = call ptr @Current_Entry(ptr noundef %672, ptr noundef null)
  store ptr %673, ptr @Divpt, align 8, !tbaa !9
  %674 = load ptr, ptr %6, align 8, !tbaa !9
  %675 = getelementptr inbounds %struct.Kmer_Stream, ptr %674, i32 0, i32 2
  %676 = load i64, ptr %675, align 8, !tbaa !31
  %677 = mul i64 1, %676
  %678 = call ptr @Malloc(i64 noundef %677, ptr noundef @.str.44)
  store ptr %678, ptr @Pair, align 8, !tbaa !9
  %679 = load i64, ptr @MEMORY_LIMIT, align 8, !tbaa !24
  %680 = call ptr @Malloc(i64 noundef %679, ptr noundef @.str.45)
  store ptr %680, ptr %31, align 8, !tbaa !9
  %681 = load ptr, ptr @Pair, align 8, !tbaa !9
  %682 = icmp eq ptr %681, null
  br i1 %682, label %686, label %683

683:                                              ; preds = %671
  %684 = load ptr, ptr %31, align 8, !tbaa !9
  %685 = icmp eq ptr %684, null
  br i1 %685, label %686, label %687

686:                                              ; preds = %683, %671
  call void @exit(i32 noundef 1) #10
  unreachable

687:                                              ; preds = %683
  %688 = load ptr, ptr @Pair, align 8, !tbaa !9
  %689 = load ptr, ptr %6, align 8, !tbaa !9
  %690 = getelementptr inbounds %struct.Kmer_Stream, ptr %689, i32 0, i32 2
  %691 = load i64, ptr %690, align 8, !tbaa !31
  call void @llvm.memset.p0.i64(ptr align 1 %688, i8 0, i64 %691, i1 false)
  store i32 1, ptr @PASS1, align 4, !tbaa !5
  br label %692

692:                                              ; preds = %823, %687
  %693 = load i32, ptr @PASS1, align 4, !tbaa !5
  %694 = icmp sge i32 %693, 0
  br i1 %694, label %695, label %826

695:                                              ; preds = %692
  call void @llvm.lifetime.start.p0(i64 40, ptr %32) #8
  store i32 0, ptr %29, align 4, !tbaa !5
  br label %696

696:                                              ; preds = %705, %695
  %697 = load i32, ptr %29, align 4, !tbaa !5
  %698 = load i32, ptr @KBYTE, align 4, !tbaa !5
  %699 = icmp slt i32 %697, %698
  br i1 %699, label %700, label %708

700:                                              ; preds = %696
  %701 = load ptr, ptr @Divpt, align 8, !tbaa !9
  %702 = load i32, ptr %29, align 4, !tbaa !5
  %703 = sext i32 %702 to i64
  %704 = getelementptr inbounds i8, ptr %701, i64 %703
  store i8 0, ptr %704, align 1, !tbaa !13
  br label %705

705:                                              ; preds = %700
  %706 = load i32, ptr %29, align 4, !tbaa !5
  %707 = add nsw i32 %706, 1
  store i32 %707, ptr %29, align 4, !tbaa !5
  br label %696, !llvm.loop !32

708:                                              ; preds = %696
  %709 = getelementptr inbounds [5 x i64], ptr %32, i64 0, i64 0
  store i64 0, ptr %709, align 16, !tbaa !24
  store i32 1, ptr %28, align 4, !tbaa !5
  br label %710

710:                                              ; preds = %728, %708
  %711 = load i32, ptr %28, align 4, !tbaa !5
  %712 = icmp slt i32 %711, 4
  br i1 %712, label %713, label %731

713:                                              ; preds = %710
  %714 = load i32, ptr %28, align 4, !tbaa !5
  %715 = shl i32 %714, 6
  %716 = trunc i32 %715 to i8
  %717 = load ptr, ptr @Divpt, align 8, !tbaa !9
  %718 = getelementptr inbounds i8, ptr %717, i64 0
  store i8 %716, ptr %718, align 1, !tbaa !13
  %719 = load ptr, ptr %6, align 8, !tbaa !9
  %720 = load ptr, ptr @Divpt, align 8, !tbaa !9
  %721 = call i32 @GoTo_Kmer_Entry(ptr noundef %719, ptr noundef %720)
  %722 = load ptr, ptr %6, align 8, !tbaa !9
  %723 = getelementptr inbounds %struct.Kmer_Stream, ptr %722, i32 0, i32 3
  %724 = load i64, ptr %723, align 8, !tbaa !33
  %725 = load i32, ptr %28, align 4, !tbaa !5
  %726 = sext i32 %725 to i64
  %727 = getelementptr inbounds [5 x i64], ptr %32, i64 0, i64 %726
  store i64 %724, ptr %727, align 8, !tbaa !24
  br label %728

728:                                              ; preds = %713
  %729 = load i32, ptr %28, align 4, !tbaa !5
  %730 = add nsw i32 %729, 1
  store i32 %730, ptr %28, align 4, !tbaa !5
  br label %710, !llvm.loop !34

731:                                              ; preds = %710
  %732 = load ptr, ptr %6, align 8, !tbaa !9
  %733 = getelementptr inbounds %struct.Kmer_Stream, ptr %732, i32 0, i32 2
  %734 = load i64, ptr %733, align 8, !tbaa !31
  %735 = getelementptr inbounds [5 x i64], ptr %32, i64 0, i64 4
  store i64 %734, ptr %735, align 16, !tbaa !24
  %736 = getelementptr inbounds [5 x i64], ptr %32, i64 0, i64 0
  call void @big_window(ptr noundef %736, i32 noundef 0, ptr noundef %595)
  call void @llvm.lifetime.end.p0(i64 40, ptr %32) #8
  %737 = load i32, ptr @NTHREADS, align 4, !tbaa !5
  %738 = zext i32 %737 to i64
  %739 = call ptr @llvm.stacksave.p0()
  store ptr %739, ptr %33, align 8
  %740 = alloca i64, i64 %738, align 16
  store i64 %738, ptr %34, align 8
  %741 = load i32, ptr @NTHREADS, align 4, !tbaa !5
  %742 = zext i32 %741 to i64
  %743 = alloca i32, i64 %742, align 16
  store i64 %742, ptr %35, align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #8
  store ptr %743, ptr @Tstack, align 8, !tbaa !9
  store i32 0, ptr %29, align 4, !tbaa !5
  br label %744

744:                                              ; preds = %772, %731
  %745 = load i32, ptr %29, align 4, !tbaa !5
  %746 = load i32, ptr @NTHREADS, align 4, !tbaa !5
  %747 = icmp slt i32 %745, %746
  br i1 %747, label %748, label %775

748:                                              ; preds = %744
  %749 = load i32, ptr %29, align 4, !tbaa !5
  %750 = load ptr, ptr @Tstack, align 8, !tbaa !9
  %751 = load i32, ptr %29, align 4, !tbaa !5
  %752 = sext i32 %751 to i64
  %753 = getelementptr inbounds i32, ptr %750, i64 %752
  store i32 %749, ptr %753, align 4, !tbaa !5
  %754 = load i32, ptr %29, align 4, !tbaa !5
  %755 = load i32, ptr %29, align 4, !tbaa !5
  %756 = sext i32 %755 to i64
  %757 = getelementptr inbounds %struct.TP, ptr %595, i64 %756
  %758 = getelementptr inbounds %struct.TP, ptr %757, i32 0, i32 4
  store i32 %754, ptr %758, align 16, !tbaa !35
  %759 = load ptr, ptr %31, align 8, !tbaa !9
  %760 = load i32, ptr %29, align 4, !tbaa !5
  %761 = sext i32 %760 to i64
  %762 = load i64, ptr @MEMORY_LIMIT, align 8, !tbaa !24
  %763 = load i32, ptr @NTHREADS, align 4, !tbaa !5
  %764 = sext i32 %763 to i64
  %765 = sdiv i64 %762, %764
  %766 = mul nsw i64 %761, %765
  %767 = getelementptr inbounds i8, ptr %759, i64 %766
  %768 = load i32, ptr %29, align 4, !tbaa !5
  %769 = sext i32 %768 to i64
  %770 = getelementptr inbounds %struct.TP, ptr %595, i64 %769
  %771 = getelementptr inbounds %struct.TP, ptr %770, i32 0, i32 5
  store ptr %767, ptr %771, align 8, !tbaa !36
  br label %772

772:                                              ; preds = %748
  %773 = load i32, ptr %29, align 4, !tbaa !5
  %774 = add nsw i32 %773, 1
  store i32 %774, ptr %29, align 4, !tbaa !5
  br label %744, !llvm.loop !37

775:                                              ; preds = %744
  %776 = load i32, ptr @NTHREADS, align 4, !tbaa !5
  store i32 %776, ptr @Tavail, align 4, !tbaa !5
  %777 = call i32 @pthread_mutex_init(ptr noundef @TMUTEX, ptr noundef null) #8
  %778 = call i32 @pthread_cond_init(ptr noundef @TCOND, ptr noundef null) #8
  store i32 0, ptr %36, align 4, !tbaa !5
  br label %779

779:                                              ; preds = %809, %775
  %780 = load i32, ptr %36, align 4, !tbaa !5
  %781 = load i32, ptr @BWIDTH, align 4, !tbaa !5
  %782 = icmp slt i32 %780, %781
  br i1 %782, label %783, label %812

783:                                              ; preds = %779
  %784 = call i32 @pthread_mutex_lock(ptr noundef @TMUTEX) #8
  %785 = load i32, ptr @Tavail, align 4, !tbaa !5
  %786 = icmp sle i32 %785, 0
  br i1 %786, label %787, label %789

787:                                              ; preds = %783
  %788 = call i32 @pthread_cond_wait(ptr noundef @TCOND, ptr noundef @TMUTEX)
  br label %789

789:                                              ; preds = %787, %783
  %790 = load ptr, ptr @Tstack, align 8, !tbaa !9
  %791 = load i32, ptr @Tavail, align 4, !tbaa !5
  %792 = add nsw i32 %791, -1
  store i32 %792, ptr @Tavail, align 4, !tbaa !5
  %793 = sext i32 %792 to i64
  %794 = getelementptr inbounds i32, ptr %790, i64 %793
  %795 = load i32, ptr %794, align 4, !tbaa !5
  store i32 %795, ptr %29, align 4, !tbaa !5
  %796 = call i32 @pthread_mutex_unlock(ptr noundef @TMUTEX) #8
  %797 = load i32, ptr %36, align 4, !tbaa !5
  %798 = load i32, ptr %29, align 4, !tbaa !5
  %799 = sext i32 %798 to i64
  %800 = getelementptr inbounds %struct.TP, ptr %595, i64 %799
  %801 = getelementptr inbounds %struct.TP, ptr %800, i32 0, i32 0
  store i32 %797, ptr %801, align 16, !tbaa !38
  %802 = load i32, ptr %29, align 4, !tbaa !5
  %803 = sext i32 %802 to i64
  %804 = getelementptr inbounds i64, ptr %740, i64 %803
  %805 = load i32, ptr %29, align 4, !tbaa !5
  %806 = sext i32 %805 to i64
  %807 = getelementptr inbounds %struct.TP, ptr %595, i64 %806
  %808 = call i32 @pthread_create(ptr noundef %804, ptr noundef null, ptr noundef @small_window, ptr noundef %807) #8
  br label %809

809:                                              ; preds = %789
  %810 = load i32, ptr %36, align 4, !tbaa !5
  %811 = add nsw i32 %810, 1
  store i32 %811, ptr %36, align 4, !tbaa !5
  br label %779, !llvm.loop !39

812:                                              ; preds = %779
  %813 = call i32 @pthread_mutex_lock(ptr noundef @TMUTEX) #8
  br label %814

814:                                              ; preds = %818, %812
  %815 = load i32, ptr @Tavail, align 4, !tbaa !5
  %816 = load i32, ptr @NTHREADS, align 4, !tbaa !5
  %817 = icmp slt i32 %815, %816
  br i1 %817, label %818, label %820

818:                                              ; preds = %814
  %819 = call i32 @pthread_cond_wait(ptr noundef @TCOND, ptr noundef @TMUTEX)
  br label %814, !llvm.loop !40

820:                                              ; preds = %814
  %821 = call i32 @pthread_mutex_unlock(ptr noundef @TMUTEX) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #8
  %822 = load ptr, ptr %33, align 8
  call void @llvm.stackrestore.p0(ptr %822)
  br label %823

823:                                              ; preds = %820
  %824 = load i32, ptr @PASS1, align 4, !tbaa !5
  %825 = add nsw i32 %824, -1
  store i32 %825, ptr @PASS1, align 4, !tbaa !5
  br label %692, !llvm.loop !41

826:                                              ; preds = %692
  %827 = load ptr, ptr %31, align 8, !tbaa !9
  call void @free(ptr noundef %827) #8
  %828 = load ptr, ptr @Pair, align 8, !tbaa !9
  call void @free(ptr noundef %828) #8
  %829 = load ptr, ptr @Divpt, align 8, !tbaa !9
  call void @free(ptr noundef %829) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #8
  %830 = load i32, ptr @NTHREADS, align 4, !tbaa !5
  %831 = sub nsw i32 %830, 1
  store i32 %831, ptr %29, align 4, !tbaa !5
  br label %832

832:                                              ; preds = %858, %826
  %833 = load i32, ptr %29, align 4, !tbaa !5
  %834 = icmp sge i32 %833, 0
  br i1 %834, label %835, label %861

835:                                              ; preds = %832
  store i32 3, ptr %28, align 4, !tbaa !5
  br label %836

836:                                              ; preds = %854, %835
  %837 = load i32, ptr %28, align 4, !tbaa !5
  %838 = icmp sge i32 %837, 0
  br i1 %838, label %839, label %857

839:                                              ; preds = %836
  %840 = load i32, ptr %28, align 4, !tbaa !5
  %841 = load i32, ptr %29, align 4, !tbaa !5
  %842 = add nsw i32 %840, %841
  %843 = icmp sgt i32 %842, 0
  br i1 %843, label %844, label %853

844:                                              ; preds = %839
  %845 = load i32, ptr %29, align 4, !tbaa !5
  %846 = sext i32 %845 to i64
  %847 = getelementptr inbounds %struct.TP, ptr %595, i64 %846
  %848 = getelementptr inbounds %struct.TP, ptr %847, i32 0, i32 2
  %849 = load i32, ptr %28, align 4, !tbaa !5
  %850 = sext i32 %849 to i64
  %851 = getelementptr inbounds [4 x ptr], ptr %848, i64 0, i64 %850
  %852 = load ptr, ptr %851, align 8, !tbaa !9
  call void @Free_Kmer_Stream(ptr noundef %852)
  br label %853

853:                                              ; preds = %844, %839
  br label %854

854:                                              ; preds = %853
  %855 = load i32, ptr %28, align 4, !tbaa !5
  %856 = add nsw i32 %855, -1
  store i32 %856, ptr %28, align 4, !tbaa !5
  br label %836, !llvm.loop !42

857:                                              ; preds = %836
  br label %858

858:                                              ; preds = %857
  %859 = load i32, ptr %29, align 4, !tbaa !5
  %860 = add nsw i32 %859, -1
  store i32 %860, ptr %29, align 4, !tbaa !5
  br label %832, !llvm.loop !43

861:                                              ; preds = %832
  %862 = load ptr, ptr %6, align 8, !tbaa !9
  call void @Free_Kmer_Stream(ptr noundef %862)
  store i32 1, ptr %29, align 4, !tbaa !5
  br label %863

863:                                              ; preds = %911, %861
  %864 = load i32, ptr %29, align 4, !tbaa !5
  %865 = load i32, ptr @NTHREADS, align 4, !tbaa !5
  %866 = icmp slt i32 %864, %865
  br i1 %866, label %867, label %914

867:                                              ; preds = %863
  store i32 0, ptr %40, align 4, !tbaa !5
  br label %868

868:                                              ; preds = %907, %867
  %869 = load i32, ptr %40, align 4, !tbaa !5
  %870 = icmp sle i32 %869, 1000
  br i1 %870, label %871, label %910

871:                                              ; preds = %868
  %872 = getelementptr inbounds %struct.TP, ptr %595, i64 0
  %873 = getelementptr inbounds %struct.TP, ptr %872, i32 0, i32 9
  %874 = load ptr, ptr %873, align 8, !tbaa !26
  %875 = load i32, ptr %40, align 4, !tbaa !5
  %876 = sext i32 %875 to i64
  %877 = getelementptr inbounds ptr, ptr %874, i64 %876
  %878 = load ptr, ptr %877, align 8, !tbaa !9
  store ptr %878, ptr %38, align 8, !tbaa !9
  %879 = load i32, ptr %29, align 4, !tbaa !5
  %880 = sext i32 %879 to i64
  %881 = getelementptr inbounds %struct.TP, ptr %595, i64 %880
  %882 = getelementptr inbounds %struct.TP, ptr %881, i32 0, i32 9
  %883 = load ptr, ptr %882, align 8, !tbaa !26
  %884 = load i32, ptr %40, align 4, !tbaa !5
  %885 = sext i32 %884 to i64
  %886 = getelementptr inbounds ptr, ptr %883, i64 %885
  %887 = load ptr, ptr %886, align 8, !tbaa !9
  store ptr %887, ptr %39, align 8, !tbaa !9
  store i32 0, ptr %28, align 4, !tbaa !5
  br label %888

888:                                              ; preds = %903, %871
  %889 = load i32, ptr %28, align 4, !tbaa !5
  %890 = icmp sle i32 %889, 500
  br i1 %890, label %891, label %906

891:                                              ; preds = %888
  %892 = load ptr, ptr %39, align 8, !tbaa !9
  %893 = load i32, ptr %28, align 4, !tbaa !5
  %894 = sext i32 %893 to i64
  %895 = getelementptr inbounds i64, ptr %892, i64 %894
  %896 = load i64, ptr %895, align 8, !tbaa !24
  %897 = load ptr, ptr %38, align 8, !tbaa !9
  %898 = load i32, ptr %28, align 4, !tbaa !5
  %899 = sext i32 %898 to i64
  %900 = getelementptr inbounds i64, ptr %897, i64 %899
  %901 = load i64, ptr %900, align 8, !tbaa !24
  %902 = add nsw i64 %901, %896
  store i64 %902, ptr %900, align 8, !tbaa !24
  br label %903

903:                                              ; preds = %891
  %904 = load i32, ptr %28, align 4, !tbaa !5
  %905 = add nsw i32 %904, 1
  store i32 %905, ptr %28, align 4, !tbaa !5
  br label %888, !llvm.loop !44

906:                                              ; preds = %888
  br label %907

907:                                              ; preds = %906
  %908 = load i32, ptr %40, align 4, !tbaa !5
  %909 = add nsw i32 %908, 1
  store i32 %909, ptr %40, align 4, !tbaa !5
  br label %868, !llvm.loop !45

910:                                              ; preds = %868
  br label %911

911:                                              ; preds = %910
  %912 = load i32, ptr %29, align 4, !tbaa !5
  %913 = add nsw i32 %912, 1
  store i32 %913, ptr %29, align 4, !tbaa !5
  br label %863, !llvm.loop !46

914:                                              ; preds = %863
  %915 = load i32, ptr @NTHREADS, align 4, !tbaa !5
  %916 = sub nsw i32 %915, 1
  store i32 %916, ptr %29, align 4, !tbaa !5
  br label %917

917:                                              ; preds = %933, %914
  %918 = load i32, ptr %29, align 4, !tbaa !5
  %919 = icmp sge i32 %918, 1
  br i1 %919, label %920, label %936

920:                                              ; preds = %917
  %921 = load i32, ptr %29, align 4, !tbaa !5
  %922 = sext i32 %921 to i64
  %923 = getelementptr inbounds %struct.TP, ptr %595, i64 %922
  %924 = getelementptr inbounds %struct.TP, ptr %923, i32 0, i32 9
  %925 = load ptr, ptr %924, align 8, !tbaa !26
  %926 = getelementptr inbounds ptr, ptr %925, i64 0
  %927 = load ptr, ptr %926, align 8, !tbaa !9
  call void @free(ptr noundef %927) #8
  %928 = load i32, ptr %29, align 4, !tbaa !5
  %929 = sext i32 %928 to i64
  %930 = getelementptr inbounds %struct.TP, ptr %595, i64 %929
  %931 = getelementptr inbounds %struct.TP, ptr %930, i32 0, i32 9
  %932 = load ptr, ptr %931, align 8, !tbaa !26
  call void @free(ptr noundef %932) #8
  br label %933

933:                                              ; preds = %920
  %934 = load i32, ptr %29, align 4, !tbaa !5
  %935 = add nsw i32 %934, -1
  store i32 %935, ptr %29, align 4, !tbaa !5
  br label %917, !llvm.loop !47

936:                                              ; preds = %917
  %937 = getelementptr inbounds %struct.TP, ptr %595, i64 0
  %938 = getelementptr inbounds %struct.TP, ptr %937, i32 0, i32 9
  %939 = load ptr, ptr %938, align 8, !tbaa !26
  store ptr %939, ptr %9, align 8, !tbaa !9
  %940 = load ptr, ptr %7, align 8, !tbaa !9
  %941 = icmp ne ptr %940, null
  br i1 %941, label %942, label %965

942:                                              ; preds = %936
  %943 = load ptr, ptr %7, align 8, !tbaa !9
  %944 = call i64 @strlen(ptr noundef %943) #9
  %945 = add i64 %944, 100
  %946 = call ptr @Malloc(i64 noundef %945, ptr noundef @.str.26)
  store ptr %946, ptr %37, align 8, !tbaa !9
  %947 = load ptr, ptr %37, align 8, !tbaa !9
  %948 = icmp eq ptr %947, null
  br i1 %948, label %949, label %950

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

950:                                              ; preds = %942
  %951 = load ptr, ptr %37, align 8, !tbaa !9
  %952 = load ptr, ptr %7, align 8, !tbaa !9
  %953 = call i32 (ptr, ptr, ...) @sprintf(ptr noundef %951, ptr noundef @.str.46, ptr noundef %952) #8
  %954 = load ptr, ptr %37, align 8, !tbaa !9
  %955 = call i32 @system(ptr noundef %954)
  %956 = icmp ne i32 %955, 0
  br i1 %956, label %957, label %962

957:                                              ; preds = %950
  %958 = load ptr, ptr @stderr, align 8, !tbaa !9
  %959 = load ptr, ptr @Prog_Name, align 8, !tbaa !9
  %960 = load ptr, ptr %37, align 8, !tbaa !9
  %961 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %958, ptr noundef @.str.36, ptr noundef %959, ptr noundef %960) #8
  call void @exit(i32 noundef 1) #10
  unreachable

962:                                              ; preds = %950
  %963 = load ptr, ptr %37, align 8, !tbaa !9
  call void @free(ptr noundef %963) #8
  %964 = load ptr, ptr %7, align 8, !tbaa !9
  call void @free(ptr noundef %964) #8
  br label %965

965:                                              ; preds = %962, %936
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #8
  %966 = load ptr, ptr %26, align 8
  call void @llvm.stackrestore.p0(ptr %966)
  %967 = load i32, ptr @VERBOSE, align 4, !tbaa !5
  %968 = icmp ne i32 %967, 0
  br i1 %968, label %969, label %974

969:                                              ; preds = %965
  %970 = load ptr, ptr @stderr, align 8, !tbaa !9
  %971 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %970, ptr noundef @.str.47) #8
  %972 = load ptr, ptr @stderr, align 8, !tbaa !9
  %973 = call i32 @fflush(ptr noundef %972)
  br label %974

974:                                              ; preds = %969, %965
  br label %975

975:                                              ; preds = %974, %563
  %976 = load ptr, ptr @stderr, align 8, !tbaa !9
  %977 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %976, ptr noundef @.str.48) #8
  %978 = load ptr, ptr %12, align 8, !tbaa !9
  %979 = call ptr @Catenate(ptr noundef %978, ptr noundef @.str.49, ptr noundef @.str.1, ptr noundef @.str.1)
  %980 = call noalias ptr @fopen(ptr noundef %979, ptr noundef @.str.50)
  store ptr %980, ptr %41, align 8, !tbaa !9
  %981 = load ptr, ptr @stderr, align 8, !tbaa !9
  %982 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %981, ptr noundef @.str.51) #8
  store i32 0, ptr %42, align 4, !tbaa !5
  br label %983

983:                                              ; preds = %1022, %975
  %984 = load i32, ptr %42, align 4, !tbaa !5
  %985 = icmp sle i32 %984, 1000
  br i1 %985, label %986, label %1025

986:                                              ; preds = %983
  store i32 0, ptr %43, align 4, !tbaa !5
  br label %987

987:                                              ; preds = %1018, %986
  %988 = load i32, ptr %43, align 4, !tbaa !5
  %989 = icmp slt i32 %988, 500
  br i1 %989, label %990, label %1021

990:                                              ; preds = %987
  %991 = load ptr, ptr %9, align 8, !tbaa !9
  %992 = load i32, ptr %42, align 4, !tbaa !5
  %993 = sext i32 %992 to i64
  %994 = getelementptr inbounds ptr, ptr %991, i64 %993
  %995 = load ptr, ptr %994, align 8, !tbaa !9
  %996 = load i32, ptr %43, align 4, !tbaa !5
  %997 = sext i32 %996 to i64
  %998 = getelementptr inbounds i64, ptr %995, i64 %997
  %999 = load i64, ptr %998, align 8, !tbaa !24
  %1000 = icmp sgt i64 %999, 0
  br i1 %1000, label %1001, label %1017

1001:                                             ; preds = %990
  %1002 = load ptr, ptr %41, align 8, !tbaa !9
  %1003 = load i32, ptr %43, align 4, !tbaa !5
  %1004 = load i32, ptr %42, align 4, !tbaa !5
  %1005 = load i32, ptr %43, align 4, !tbaa !5
  %1006 = sub nsw i32 %1004, %1005
  %1007 = load ptr, ptr %9, align 8, !tbaa !9
  %1008 = load i32, ptr %42, align 4, !tbaa !5
  %1009 = sext i32 %1008 to i64
  %1010 = getelementptr inbounds ptr, ptr %1007, i64 %1009
  %1011 = load ptr, ptr %1010, align 8, !tbaa !9
  %1012 = load i32, ptr %43, align 4, !tbaa !5
  %1013 = sext i32 %1012 to i64
  %1014 = getelementptr inbounds i64, ptr %1011, i64 %1013
  %1015 = load i64, ptr %1014, align 8, !tbaa !24
  %1016 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1002, ptr noundef @.str.52, i32 noundef %1003, i32 noundef %1006, i64 noundef %1015) #8
  br label %1017

1017:                                             ; preds = %1001, %990
  br label %1018

1018:                                             ; preds = %1017
  %1019 = load i32, ptr %43, align 4, !tbaa !5
  %1020 = add nsw i32 %1019, 1
  store i32 %1020, ptr %43, align 4, !tbaa !5
  br label %987, !llvm.loop !48

1021:                                             ; preds = %987
  br label %1022

1022:                                             ; preds = %1021
  %1023 = load i32, ptr %42, align 4, !tbaa !5
  %1024 = add nsw i32 %1023, 1
  store i32 %1024, ptr %42, align 4, !tbaa !5
  br label %983, !llvm.loop !49

1025:                                             ; preds = %983
  %1026 = load ptr, ptr %41, align 8, !tbaa !9
  %1027 = call i32 @fclose(ptr noundef %1026)
  %1028 = load ptr, ptr %12, align 8, !tbaa !9
  call void @free(ptr noundef %1028) #8
  %1029 = call ptr @Catenate(ptr noundef null, ptr noundef null, ptr noundef null, ptr noundef null)
  %1030 = call ptr @Numbered_Suffix(ptr noundef null, i32 noundef 0, ptr noundef null)
  %1031 = load ptr, ptr @Prog_Name, align 8, !tbaa !9
  call void @free(ptr noundef %1031) #8
  call void @exit(i32 noundef 0) #10
  unreachable

1032:                                             ; preds = %563
  unreachable
}

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

declare ptr @Strdup(ptr noundef, ptr noundef) #2

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

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

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

; Function Attrs: nounwind
declare i64 @strtol(ptr noundef, ptr noundef, i32 noundef) #4

; Function Attrs: nounwind
declare void @free(ptr noundef) #4

; Function Attrs: nounwind willreturn memory(read)
declare i64 @strlen(ptr noundef) #3

declare ptr @Root(ptr noundef, ptr noundef) #2

; Function Attrs: nounwind
declare ptr @mktemp(ptr noundef) #4

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

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

declare ptr @Catenate(ptr noundef, ptr noundef, ptr noundef, ptr noundef) #2

declare i32 @fflush(ptr noundef) #2

declare i32 @getc(ptr noundef) #2

declare ptr @Malloc(i64 noundef, ptr noundef) #2

declare i64 @fread(ptr noundef, i64 noundef, i64 noundef, ptr noundef) #2

declare i32 @fclose(ptr noundef) #2

declare ptr @Open_Kmer_Stream(ptr noundef) #2

; Function Attrs: nounwind uwtable
declare hidden void @examine_table(ptr noundef, ptr noundef, ptr noundef) #0

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

declare i32 @system(ptr noundef) #2

declare void @Free_Kmer_Stream(ptr noundef) #2

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

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

declare ptr @Clone_Kmer_Stream(ptr noundef) #2

declare ptr @Current_Entry(ptr noundef, ptr noundef) #2

declare i32 @GoTo_Kmer_Entry(ptr noundef, ptr noundef) #2

; Function Attrs: nounwind uwtable
declare hidden void @big_window(ptr noundef, i32 noundef, ptr noundef) #0

; Function Attrs: nounwind
declare i32 @pthread_mutex_init(ptr noundef, ptr noundef) #4

; Function Attrs: nounwind
declare i32 @pthread_cond_init(ptr noundef, ptr noundef) #4

; Function Attrs: nounwind
declare i32 @pthread_mutex_lock(ptr noundef) #4

declare i32 @pthread_cond_wait(ptr noundef, ptr noundef) #2

; Function Attrs: nounwind
declare i32 @pthread_mutex_unlock(ptr noundef) #4

; Function Attrs: nounwind
declare i32 @pthread_create(ptr noundef, ptr noundef, ptr noundef, ptr noundef) #4

; Function Attrs: nounwind uwtable
declare hidden ptr @small_window(ptr noundef) #0

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

declare ptr @Numbered_Suffix(ptr noundef, i32 noundef, ptr noundef) #2

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 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nounwind 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 #4 = { 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 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { nocallback nofree nosync nounwind willreturn }
attributes #7 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #8 = { nounwind }
attributes #9 = { nounwind willreturn memory(read) }
attributes #10 = { noreturn nounwind }

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

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


; Optimized IR (opt -passes='default<O3>'):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%union.pthread_mutex_t = type { %struct.__pthread_mutex_s }
%struct.__pthread_mutex_s = type { i32, i32, i32, i32, i32, i16, i16, %struct.__pthread_internal_list }
%struct.__pthread_internal_list = type { ptr, ptr }
%union.pthread_cond_t = type { %struct.__pthread_cond_s }
%struct.__pthread_cond_s = type { %union.__atomic_wide_counter, %union.__atomic_wide_counter, [2 x i32], [2 x i32], i32, i32, [2 x i32] }
%union.__atomic_wide_counter = type { i64 }
%struct.TP = type { i32, ptr, [4 x ptr], [4 x i64], i32, ptr, i64, [4 x ptr], [4 x ptr], ptr }

@.str = external hidden unnamed_addr constant [11 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [1 x i8], align 1
@Prog_Name = external local_unnamed_addr global ptr, align 8
@ETHRESH = external hidden local_unnamed_addr global i32, align 4
@NTHREADS = external hidden local_unnamed_addr global i32, align 4
@.str.2 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [6 x i8], align 1
@stderr = external local_unnamed_addr global ptr, align 8
@.str.4 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [41 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [43 x i8], align 1
@VERBOSE = external hidden local_unnamed_addr global i32, align 4
@.str.11 = external hidden unnamed_addr constant [15 x i8], align 1
@Usage = external hidden local_unnamed_addr global [2 x ptr], align 16
@.str.12 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [50 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [71 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [54 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [6 x i8], align 1
@template = external hidden global [15 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [2 x i8], align 1
@stdout = external local_unnamed_addr global ptr, align 8
@.str.23 = external hidden unnamed_addr constant [36 x i8], align 1
@stdin = external local_unnamed_addr global ptr, align 8
@.str.24 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [32 x i8], align 1
@KMER = external hidden local_unnamed_addr global i32, align 4
@KBYTE = external hidden local_unnamed_addr global i32, align 4
@TBYTE = external hidden local_unnamed_addr global i32, align 4
@.str.28 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.29 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.31 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.32 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.33 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.34 = external hidden unnamed_addr constant [45 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.36 = external hidden unnamed_addr constant [47 x i8], align 1
@.str.37 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.38 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.39 = external hidden unnamed_addr constant [35 x i8], align 1
@.str.40 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.41 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.42 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.43 = external hidden unnamed_addr constant [38 x i8], align 1
@BLEVEL = external hidden local_unnamed_addr global i32, align 4
@BWIDTH = external hidden local_unnamed_addr global i32, align 4
@MEMORY_LIMIT = external hidden local_unnamed_addr global i64, align 8
@Cache_Size = external hidden local_unnamed_addr global i64, align 8
@Divpt = external hidden local_unnamed_addr global ptr, align 8
@.str.44 = external hidden unnamed_addr constant [22 x i8], align 1
@Pair = external hidden local_unnamed_addr global ptr, align 8
@.str.45 = external hidden unnamed_addr constant [24 x i8], align 1
@PASS1 = external hidden local_unnamed_addr global i32, align 4
@Tstack = external hidden local_unnamed_addr global ptr, align 8
@Tavail = external hidden local_unnamed_addr global i32, align 4
@TMUTEX = external hidden global %union.pthread_mutex_t, align 8
@TCOND = external hidden global %union.pthread_cond_t, align 8
@.str.46 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.47 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.48 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.49 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.50 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.51 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.52 = external hidden unnamed_addr constant [12 x i8], align 1

; Function Attrs: noreturn nounwind uwtable
define dso_local noundef i32 @main(i32 noundef %0, ptr nocapture noundef %1) local_unnamed_addr #0 {
  %3 = alloca [128 x i32], align 16
  %4 = alloca ptr, align 8
  %5 = alloca i32, align 4
  %6 = alloca i32, align 4
  %7 = alloca [5 x i64], align 16
  call void @llvm.lifetime.start.p0(i64 512, ptr nonnull %3) #14
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %4) #14
  %8 = tail call ptr @Strdup(ptr noundef nonnull @.str, ptr noundef nonnull @.str.1) #14
  store ptr %8, ptr @Prog_Name, align 8, !tbaa !5
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(512) %3, i8 0, i64 512, i1 false), !tbaa !9
  store i32 4, ptr @ETHRESH, align 4, !tbaa !9
  store i32 4, ptr @NTHREADS, align 4, !tbaa !9
  %9 = icmp sgt i32 %0, 1
  br i1 %9, label %.lr.ph348.preheader, label %._crit_edge.thread

._crit_edge.thread:                               ; preds = %2
  store i32 0, ptr @VERBOSE, align 4, !tbaa !9
  br label %95

.lr.ph348.preheader:                              ; preds = %2
  %wide.trip.count = zext nneg i32 %0 to i64
  br label %.lr.ph348

.lr.ph348:                                        ; preds = %.lr.ph348.preheader, %.loopexit308
  %indvars.iv417 = phi i64 [ 1, %.lr.ph348.preheader ], [ %indvars.iv.next418, %.loopexit308 ]
  %.0235347 = phi ptr [ @.str.2, %.lr.ph348.preheader ], [ %.1236, %.loopexit308 ]
  %.0237346 = phi ptr [ null, %.lr.ph348.preheader ], [ %.1238, %.loopexit308 ]
  %.0242344 = phi i32 [ 1, %.lr.ph348.preheader ], [ %.1243, %.loopexit308 ]
  %10 = getelementptr inbounds ptr, ptr %1, i64 %indvars.iv417
  %11 = load ptr, ptr %10, align 8, !tbaa !5
  %12 = load i8, ptr %11, align 1, !tbaa !11
  %13 = icmp eq i8 %12, 45
  br i1 %13, label %14, label %91

14:                                               ; preds = %.lr.ph348
  %15 = getelementptr inbounds i8, ptr %11, i64 1
  %16 = load i8, ptr %15, align 1, !tbaa !11
  switch i8 %16, label %.lr.ph [
    i8 101, label %30
    i8 111, label %54
    i8 80, label %59
    i8 84, label %61
    i8 0, label %.loopexit308
  ]

.lr.ph:                                           ; preds = %14, %25
  %indvars.iv = phi i64 [ %indvars.iv.next, %25 ], [ 1, %14 ]
  %17 = phi i8 [ %29, %25 ], [ %16, %14 ]
  %18 = sext i8 %17 to i32
  %19 = tail call ptr @index(ptr noundef nonnull @.str.3, i32 noundef %18) #15
  %20 = icmp eq ptr %19, null
  br i1 %20, label %21, label %25

21:                                               ; preds = %.lr.ph
  %22 = load ptr, ptr @stderr, align 8, !tbaa !5
  %23 = load ptr, ptr @Prog_Name, align 8, !tbaa !5
  %24 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %22, ptr noundef nonnull @.str.4, ptr noundef %23, i32 noundef %18) #16
  tail call void @exit(i32 noundef 1) #17
  unreachable

25:                                               ; preds = %.lr.ph
  %26 = sext i8 %17 to i64
  %27 = getelementptr inbounds [128 x i32], ptr %3, i64 0, i64 %26
  store i32 1, ptr %27, align 4, !tbaa !9
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %28 = getelementptr inbounds i8, ptr %11, i64 %indvars.iv.next
  %29 = load i8, ptr %28, align 1, !tbaa !11
  %.not296 = icmp eq i8 %29, 0
  br i1 %.not296, label %.loopexit308, label %.lr.ph, !llvm.loop !12

30:                                               ; preds = %14
  %31 = getelementptr inbounds i8, ptr %11, i64 2
  %32 = call i64 @strtol(ptr noundef nonnull %31, ptr noundef nonnull %4, i32 noundef 10) #14
  %33 = trunc i64 %32 to i32
  store i32 %33, ptr @ETHRESH, align 4, !tbaa !9
  %34 = load ptr, ptr %4, align 8, !tbaa !5
  %35 = load i8, ptr %34, align 1, !tbaa !11
  %.not295 = icmp eq i8 %35, 0
  %.pre481 = load ptr, ptr %10, align 8, !tbaa !5
  br i1 %.not295, label %36, label %40

36:                                               ; preds = %30
  %37 = getelementptr inbounds i8, ptr %.pre481, i64 2
  %38 = load i8, ptr %37, align 1, !tbaa !11
  %39 = icmp eq i8 %38, 0
  br i1 %39, label %40, label %48

40:                                               ; preds = %36, %30
  %41 = load ptr, ptr @stderr, align 8, !tbaa !5
  %42 = load ptr, ptr @Prog_Name, align 8, !tbaa !5
  %43 = getelementptr inbounds i8, ptr %.pre481, i64 1
  %44 = load i8, ptr %43, align 1, !tbaa !11
  %45 = sext i8 %44 to i32
  %46 = getelementptr inbounds i8, ptr %.pre481, i64 2
  %47 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %41, ptr noundef nonnull @.str.5, ptr noundef %42, i32 noundef %45, ptr noundef nonnull %46) #16
  tail call void @exit(i32 noundef 1) #17
  unreachable

48:                                               ; preds = %36
  %49 = icmp slt i32 %33, 1
  br i1 %49, label %50, label %.loopexit308

50:                                               ; preds = %48
  %51 = load ptr, ptr @stderr, align 8, !tbaa !5
  %52 = load ptr, ptr @Prog_Name, align 8, !tbaa !5
  %53 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %51, ptr noundef nonnull @.str.6, ptr noundef %52, ptr noundef nonnull @.str.7, i32 noundef %33) #16
  tail call void @exit(i32 noundef 1) #17
  unreachable

54:                                               ; preds = %14
  %55 = getelementptr inbounds i8, ptr %11, i64 2
  %56 = tail call ptr @Strdup(ptr noundef nonnull %55, ptr noundef nonnull @.str.8) #14
  %57 = icmp eq ptr %56, null
  br i1 %57, label %58, label %.loopexit308

58:                                               ; preds = %54
  tail call void @exit(i32 noundef 1) #17
  unreachable

59:                                               ; preds = %14
  %60 = getelementptr inbounds i8, ptr %11, i64 2
  br label %.loopexit308

61:                                               ; preds = %14
  %62 = getelementptr inbounds i8, ptr %11, i64 2
  %63 = call i64 @strtol(ptr noundef nonnull %62, ptr noundef nonnull %4, i32 noundef 10) #14
  %64 = trunc i64 %63 to i32
  store i32 %64, ptr @NTHREADS, align 4, !tbaa !9
  %65 = load ptr, ptr %4, align 8, !tbaa !5
  %66 = load i8, ptr %65, align 1, !tbaa !11
  %.not294 = icmp eq i8 %66, 0
  %.pre = load ptr, ptr %10, align 8, !tbaa !5
  br i1 %.not294, label %67, label %71

67:                                               ; preds = %61
  %68 = getelementptr inbounds i8, ptr %.pre, i64 2
  %69 = load i8, ptr %68, align 1, !tbaa !11
  %70 = icmp eq i8 %69, 0
  br i1 %70, label %71, label %79

71:                                               ; preds = %67, %61
  %72 = load ptr, ptr @stderr, align 8, !tbaa !5
  %73 = load ptr, ptr @Prog_Name, align 8, !tbaa !5
  %74 = getelementptr inbounds i8, ptr %.pre, i64 1
  %75 = load i8, ptr %74, align 1, !tbaa !11
  %76 = sext i8 %75 to i32
  %77 = getelementptr inbounds i8, ptr %.pre, i64 2
  %78 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %72, ptr noundef nonnull @.str.5, ptr noundef %73, i32 noundef %76, ptr noundef nonnull %77) #16
  tail call void @exit(i32 noundef 1) #17
  unreachable

79:                                               ; preds = %67
  %80 = icmp slt i32 %64, 1
  br i1 %80, label %81, label %85

81:                                               ; preds = %79
  %82 = load ptr, ptr @stderr, align 8, !tbaa !5
  %83 = load ptr, ptr @Prog_Name, align 8, !tbaa !5
  %84 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %82, ptr noundef nonnull @.str.6, ptr noundef %83, ptr noundef nonnull @.str.9, i32 noundef %64) #16
  tail call void @exit(i32 noundef 1) #17
  unreachable

85:                                               ; preds = %79
  %86 = icmp ugt i32 %64, 64
  br i1 %86, label %87, label %.loopexit308

87:                                               ; preds = %85
  %88 = load ptr, ptr @stderr, align 8, !tbaa !5
  %89 = load ptr, ptr @Prog_Name, align 8, !tbaa !5
  %90 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %88, ptr noundef nonnull @.str.10, ptr noundef %89) #16
  store i32 64, ptr @NTHREADS, align 4, !tbaa !9
  br label %.loopexit308

91:                                               ; preds = %.lr.ph348
  %92 = add nsw i32 %.0242344, 1
  %93 = sext i32 %.0242344 to i64
  %94 = getelementptr inbounds ptr, ptr %1, i64 %93
  store ptr %11, ptr %94, align 8, !tbaa !5
  br label %.loopexit308

.loopexit308:                                     ; preds = %25, %14, %91, %85, %87, %54, %48, %59
  %.1243 = phi i32 [ %.0242344, %87 ], [ %.0242344, %85 ], [ %.0242344, %59 ], [ %.0242344, %54 ], [ %.0242344, %48 ], [ %92, %91 ], [ %.0242344, %14 ], [ %.0242344, %25 ]
  %.1238 = phi ptr [ %.0237346, %87 ], [ %.0237346, %85 ], [ %.0237346, %59 ], [ %56, %54 ], [ %.0237346, %48 ], [ %.0237346, %91 ], [ %.0237346, %14 ], [ %.0237346, %25 ]
  %.1236 = phi ptr [ %.0235347, %87 ], [ %.0235347, %85 ], [ %60, %59 ], [ %.0235347, %54 ], [ %.0235347, %48 ], [ %.0235347, %91 ], [ %.0235347, %14 ], [ %.0235347, %25 ]
  %indvars.iv.next418 = add nuw nsw i64 %indvars.iv417, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next418, %wide.trip.count
  br i1 %exitcond.not, label %._crit_edge, label %.lr.ph348, !llvm.loop !14

._crit_edge:                                      ; preds = %.loopexit308
  %.phi.trans.insert = getelementptr inbounds i8, ptr %3, i64 472
  %.pre482 = load i32, ptr %.phi.trans.insert, align 8, !tbaa !9
  store i32 %.pre482, ptr @VERBOSE, align 4, !tbaa !9
  %.not = icmp eq i32 %.1243, 2
  br i1 %.not, label %122, label %95

95:                                               ; preds = %._crit_edge.thread, %._crit_edge
  %96 = load ptr, ptr @stderr, align 8, !tbaa !5
  %97 = load ptr, ptr @Prog_Name, align 8, !tbaa !5
  %98 = load ptr, ptr @Usage, align 16, !tbaa !5
  %99 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %96, ptr noundef nonnull @.str.11, ptr noundef %97, ptr noundef %98) #16
  %100 = load ptr, ptr @stderr, align 8, !tbaa !5
  %101 = load ptr, ptr @Prog_Name, align 8, !tbaa !5
  %102 = tail call i64 @strlen(ptr noundef nonnull dereferenceable(1) %101) #15
  %103 = trunc i64 %102 to i32
  %104 = load ptr, ptr getelementptr inbounds (i8, ptr @Usage, i64 8), align 8, !tbaa !5
  %105 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %100, ptr noundef nonnull @.str.12, i32 noundef %103, ptr noundef nonnull @.str.1, ptr noundef %104) #16
  %106 = load ptr, ptr @stderr, align 8, !tbaa !5
  %107 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %106, ptr noundef nonnull @.str.13) #16
  %108 = load ptr, ptr @stderr, align 8, !tbaa !5
  %109 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %108, ptr noundef nonnull @.str.14) #16
  %110 = load ptr, ptr @stderr, align 8, !tbaa !5
  %111 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %110, ptr noundef nonnull @.str.15) #16
  %112 = load ptr, ptr @stderr, align 8, !tbaa !5
  %113 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %112, ptr noundef nonnull @.str.13) #16
  %114 = load ptr, ptr @stderr, align 8, !tbaa !5
  %115 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %114, ptr noundef nonnull @.str.16) #16
  %116 = load ptr, ptr @stderr, align 8, !tbaa !5
  %117 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %116, ptr noundef nonnull @.str.17) #16
  %118 = load ptr, ptr @stderr, align 8, !tbaa !5
  %119 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %118, ptr noundef nonnull @.str.18) #16
  %120 = load ptr, ptr @stderr, align 8, !tbaa !5
  %121 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %120, ptr noundef nonnull @.str.19) #16
  tail call void @exit(i32 noundef 1) #17
  unreachable

122:                                              ; preds = %._crit_edge
  %123 = getelementptr inbounds i8, ptr %1, i64 8
  %124 = load ptr, ptr %123, align 8, !tbaa !5
  %125 = icmp eq ptr %.1238, null
  br i1 %125, label %126, label %128

126:                                              ; preds = %122
  %127 = tail call ptr @Root(ptr noundef %124, ptr noundef nonnull @.str.20) #14
  br label %128

128:                                              ; preds = %126, %122
  %.2239 = phi ptr [ %127, %126 ], [ %.1238, %122 ]
  %129 = tail call ptr @mktemp(ptr noundef nonnull @template) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %4) #14
  call void @llvm.lifetime.end.p0(i64 512, ptr nonnull %3) #14
  %130 = tail call ptr @Catenate(ptr noundef %.2239, ptr noundef nonnull @.str.21, ptr noundef nonnull @.str.1, ptr noundef nonnull @.str.1) #14
  %131 = tail call noalias ptr @fopen(ptr noundef %130, ptr noundef nonnull @.str.22)
  %.not272 = icmp eq ptr %131, null
  br i1 %.not272, label %160, label %132

132:                                              ; preds = %128
  %133 = load ptr, ptr @stdout, align 8, !tbaa !5
  %134 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %133, ptr noundef nonnull @.str.23, ptr noundef %.2239) #14
  %135 = load ptr, ptr @stdout, align 8, !tbaa !5
  %136 = tail call i32 @fflush(ptr noundef %135)
  %137 = load ptr, ptr @stdin, align 8, !tbaa !5
  %138 = tail call i32 @getc(ptr noundef %137)
  %.not273351 = icmp eq i32 %138, 10
  br i1 %.not273351, label %._crit_edge355.thread, label %.lr.ph354

.lr.ph354:                                        ; preds = %132, %.lr.ph354
  %139 = phi i32 [ %142, %.lr.ph354 ], [ %138, %132 ]
  %.0232352 = phi i32 [ %spec.select, %.lr.ph354 ], [ 0, %132 ]
  %140 = and i32 %139, -33
  %or.cond = icmp eq i32 %140, 89
  %spec.select = select i1 %or.cond, i32 1, i32 %.0232352
  %141 = load ptr, ptr @stdin, align 8, !tbaa !5
  %142 = tail call i32 @getc(ptr noundef %141)
  %.not273 = icmp eq i32 %142, 10
  br i1 %.not273, label %._crit_edge355, label %.lr.ph354, !llvm.loop !15

._crit_edge355:                                   ; preds = %.lr.ph354
  %.not274 = icmp eq i32 %spec.select, 0
  br i1 %.not274, label %._crit_edge355.thread, label %143

143:                                              ; preds = %._crit_edge355
  %144 = tail call ptr @Malloc(i64 noundef 8008, ptr noundef nonnull @.str.24) #14
  %145 = tail call ptr @Malloc(i64 noundef 4012008, ptr noundef nonnull @.str.25) #14
  store ptr %145, ptr %144, align 8, !tbaa !5
  %invariant.gep = getelementptr i8, ptr %144, i64 8
  %invariant.gep546 = getelementptr i8, ptr %144, i64 16
  %invariant.gep548 = getelementptr i8, ptr %144, i64 24
  %invariant.gep550 = getelementptr i8, ptr %144, i64 32
  %invariant.gep552 = getelementptr i8, ptr %144, i64 40
  %invariant.gep554 = getelementptr i8, ptr %144, i64 48
  %invariant.gep556 = getelementptr i8, ptr %144, i64 56
  br label %146

146:                                              ; preds = %146, %143
  %store_forwarded523 = phi ptr [ %145, %143 ], [ %155, %146 ]
  %indvars.iv420 = phi i64 [ 1, %143 ], [ %indvars.iv.next421.7, %146 ]
  %147 = getelementptr ptr, ptr %144, i64 %indvars.iv420
  %148 = getelementptr inbounds i8, ptr %store_forwarded523, i64 4008
  store ptr %148, ptr %147, align 8, !tbaa !5
  %gep = getelementptr ptr, ptr %invariant.gep, i64 %indvars.iv420
  %149 = getelementptr inbounds i8, ptr %store_forwarded523, i64 8016
  store ptr %149, ptr %gep, align 8, !tbaa !5
  %gep547 = getelementptr ptr, ptr %invariant.gep546, i64 %indvars.iv420
  %150 = getelementptr inbounds i8, ptr %store_forwarded523, i64 12024
  store ptr %150, ptr %gep547, align 8, !tbaa !5
  %gep549 = getelementptr ptr, ptr %invariant.gep548, i64 %indvars.iv420
  %151 = getelementptr inbounds i8, ptr %store_forwarded523, i64 16032
  store ptr %151, ptr %gep549, align 8, !tbaa !5
  %gep551 = getelementptr ptr, ptr %invariant.gep550, i64 %indvars.iv420
  %152 = getelementptr inbounds i8, ptr %store_forwarded523, i64 20040
  store ptr %152, ptr %gep551, align 8, !tbaa !5
  %gep553 = getelementptr ptr, ptr %invariant.gep552, i64 %indvars.iv420
  %153 = getelementptr inbounds i8, ptr %store_forwarded523, i64 24048
  store ptr %153, ptr %gep553, align 8, !tbaa !5
  %gep555 = getelementptr ptr, ptr %invariant.gep554, i64 %indvars.iv420
  %154 = getelementptr inbounds i8, ptr %store_forwarded523, i64 28056
  store ptr %154, ptr %gep555, align 8, !tbaa !5
  %gep557 = getelementptr ptr, ptr %invariant.gep556, i64 %indvars.iv420
  %155 = getelementptr inbounds i8, ptr %store_forwarded523, i64 32064
  store ptr %155, ptr %gep557, align 8, !tbaa !5
  %indvars.iv.next421.7 = add nuw nsw i64 %indvars.iv420, 8
  %exitcond423.not.7 = icmp eq i64 %indvars.iv.next421.7, 1001
  br i1 %exitcond423.not.7, label %156, label %146, !llvm.loop !16

156:                                              ; preds = %146
  %157 = load ptr, ptr %144, align 8, !tbaa !5
  %158 = tail call i64 @fread(ptr noundef %157, i64 noundef 8, i64 noundef 501501, ptr noundef nonnull %131)
  br label %._crit_edge355.thread

._crit_edge355.thread:                            ; preds = %132, %156, %._crit_edge355
  %.0232.lcssa496 = phi i32 [ %spec.select, %156 ], [ 0, %._crit_edge355 ], [ 0, %132 ]
  %.0229 = phi ptr [ %144, %156 ], [ undef, %._crit_edge355 ], [ undef, %132 ]
  %159 = tail call i32 @fclose(ptr noundef nonnull %131)
  br label %160

160:                                              ; preds = %._crit_edge355.thread, %128
  %.2234 = phi i32 [ %.0232.lcssa496, %._crit_edge355.thread ], [ 0, %128 ]
  %.1230 = phi ptr [ %.0229, %._crit_edge355.thread ], [ undef, %128 ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %5) #14
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %6) #14
  %161 = tail call i64 @strlen(ptr noundef nonnull dereferenceable(1) %124) #15
  %162 = tail call i64 @strlen(ptr noundef nonnull dereferenceable(1) %129) #15
  %163 = add i64 %161, 10
  %164 = add i64 %163, %162
  %165 = tail call ptr @Malloc(i64 noundef %164, ptr noundef nonnull @.str.26) #14
  %166 = tail call i64 @strlen(ptr noundef nonnull dereferenceable(1) %124) #15
  %167 = tail call i64 @strlen(ptr noundef nonnull dereferenceable(1) %129) #15
  %168 = add i64 %166, 100
  %169 = add i64 %168, %167
  %170 = tail call ptr @Malloc(i64 noundef %169, ptr noundef nonnull @.str.26) #14
  %171 = icmp eq ptr %165, null
  %172 = icmp eq ptr %170, null
  %or.cond3 = select i1 %171, i1 true, i1 %172
  br i1 %or.cond3, label %173, label %174

173:                                              ; preds = %160
  tail call void @exit(i32 noundef 1) #17
  unreachable

174:                                              ; preds = %160
  %175 = tail call ptr @Open_Kmer_Stream(ptr noundef %124) #14
  %176 = icmp eq ptr %175, null
  br i1 %176, label %177, label %181

177:                                              ; preds = %174
  %178 = load ptr, ptr @stderr, align 8, !tbaa !5
  %179 = load ptr, ptr @Prog_Name, align 8, !tbaa !5
  %180 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %178, ptr noundef nonnull @.str.27, ptr noundef %179, ptr noundef %124) #16
  tail call void @exit(i32 noundef 1) #17
  unreachable

181:                                              ; preds = %174
  %182 = load i32, ptr %175, align 8, !tbaa !17
  store i32 %182, ptr @KMER, align 4, !tbaa !9
  %183 = getelementptr inbounds i8, ptr %175, i64 40
  %184 = load i32, ptr %183, align 8, !tbaa !20
  store i32 %184, ptr @KBYTE, align 4, !tbaa !9
  %185 = getelementptr inbounds i8, ptr %175, i64 44
  %186 = load i32, ptr %185, align 4, !tbaa !21
  store i32 %186, ptr @TBYTE, align 4, !tbaa !9
  %.not275 = icmp eq i32 %.2234, 0
  br i1 %.not275, label %187, label %254

187:                                              ; preds = %181
  call void @examine_table(ptr noundef nonnull %175, ptr noundef nonnull %6, ptr noundef nonnull %5)
  %188 = load i32, ptr @VERBOSE, align 4, !tbaa !9
  %.not276 = icmp eq i32 %188, 0
  br i1 %.not276, label %195, label %.sink.split

.sink.split:                                      ; preds = %187
  %189 = load ptr, ptr @stderr, align 8, !tbaa !5
  %190 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %189, ptr noundef nonnull @.str.28) #16
  %191 = load i32, ptr %6, align 4, !tbaa !9
  %.not277 = icmp eq i32 %191, 0
  %192 = load i32, ptr %5, align 4, !tbaa !9
  %.not278 = icmp eq i32 %192, 0
  %193 = load ptr, ptr @stderr, align 8, !tbaa !5
  %.str.30..str.29 = select i1 %.not278, ptr @.str.30, ptr @.str.29
  %.str.32..str.31 = select i1 %.not278, ptr @.str.32, ptr @.str.31
  %.str.30.sink = select i1 %.not277, ptr %.str.32..str.31, ptr %.str.30..str.29
  %194 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %193, ptr noundef nonnull %.str.30.sink) #16
  br label %195

195:                                              ; preds = %.sink.split, %187
  %196 = call i32 (ptr, ptr, ...) @sprintf(ptr noundef nonnull dereferenceable(1) %165, ptr noundef nonnull dereferenceable(1) @.str.33, ptr noundef %124) #14
  %197 = load i32, ptr %6, align 4, !tbaa !9
  %.not280 = icmp eq i32 %197, 0
  br i1 %.not280, label %198, label %217

198:                                              ; preds = %195
  %199 = load i32, ptr @VERBOSE, align 4, !tbaa !9
  %.not281 = icmp eq i32 %199, 0
  br i1 %.not281, label %206, label %200

200:                                              ; preds = %198
  %201 = load ptr, ptr @stderr, align 8, !tbaa !5
  %202 = load i32, ptr @ETHRESH, align 4, !tbaa !9
  %203 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %201, ptr noundef nonnull @.str.34, i32 noundef %202) #16
  %204 = load ptr, ptr @stderr, align 8, !tbaa !5
  %205 = call i32 @fflush(ptr noundef %204)
  br label %206

206:                                              ; preds = %200, %198
  %207 = load i32, ptr @NTHREADS, align 4, !tbaa !9
  %208 = load i32, ptr @ETHRESH, align 4, !tbaa !9
  %209 = call i32 (ptr, ptr, ...) @sprintf(ptr noundef nonnull dereferenceable(1) %170, ptr noundef nonnull dereferenceable(1) @.str.35, i32 noundef %207, ptr noundef %129, i32 noundef %208, ptr noundef nonnull %165) #14
  %210 = call i32 @system(ptr noundef nonnull %170) #14
  %.not282 = icmp eq i32 %210, 0
  br i1 %.not282, label %215, label %211

211:                                              ; preds = %206
  %212 = load ptr, ptr @stderr, align 8, !tbaa !5
  %213 = load ptr, ptr @Prog_Name, align 8, !tbaa !5
  %214 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %212, ptr noundef nonnull @.str.36, ptr noundef %213, ptr noundef nonnull %170) #16
  call void @exit(i32 noundef 1) #17
  unreachable

215:                                              ; preds = %206
  %216 = call i32 (ptr, ptr, ...) @sprintf(ptr noundef nonnull dereferenceable(1) %165, ptr noundef nonnull dereferenceable(1) @.str.37, ptr noundef %129) #14
  br label %217

217:                                              ; preds = %215, %195
  %218 = load i32, ptr %5, align 4, !tbaa !9
  %.not283 = icmp eq i32 %218, 0
  br i1 %.not283, label %219, label %246

219:                                              ; preds = %217
  %220 = load i32, ptr @VERBOSE, align 4, !tbaa !9
  %.not284 = icmp eq i32 %220, 0
  br i1 %.not284, label %227, label %221

221:                                              ; preds = %219
  %222 = load i32, ptr %6, align 4, !tbaa !9
  %.not285 = icmp eq i32 %222, 0
  %223 = load ptr, ptr @stderr, align 8, !tbaa !5
  %.str.39..str.38 = select i1 %.not285, ptr @.str.39, ptr @.str.38
  %224 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %223, ptr noundef nonnull %.str.39..str.38) #16
  %225 = load ptr, ptr @stderr, align 8, !tbaa !5
  %226 = call i32 @fflush(ptr noundef %225)
  br label %227

227:                                              ; preds = %221, %219
  %228 = load i32, ptr @NTHREADS, align 4, !tbaa !9
  %229 = call i32 (ptr, ptr, ...) @sprintf(ptr noundef nonnull dereferenceable(1) %170, ptr noundef nonnull dereferenceable(1) @.str.40, i32 noundef %228, ptr noundef %.1236, ptr noundef nonnull %165, ptr noundef %129) #14
  %230 = call i32 @system(ptr noundef nonnull %170) #14
  %.not286 = icmp eq i32 %230, 0
  br i1 %.not286, label %235, label %231

231:                                              ; preds = %227
  %232 = load ptr, ptr @stderr, align 8, !tbaa !5
  %233 = load ptr, ptr @Prog_Name, align 8, !tbaa !5
  %234 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %232, ptr noundef nonnull @.str.36, ptr noundef %233, ptr noundef nonnull %170) #16
  call void @exit(i32 noundef 1) #17
  unreachable

235:                                              ; preds = %227
  %236 = load i32, ptr %6, align 4, !tbaa !9
  %.not287 = icmp eq i32 %236, 0
  br i1 %.not287, label %237, label %244

237:                                              ; preds = %235
  %238 = call i32 (ptr, ptr, ...) @sprintf(ptr noundef nonnull dereferenceable(1) %170, ptr noundef nonnull dereferenceable(1) @.str.41, ptr noundef %129) #14
  %239 = call i32 @system(ptr noundef nonnull %170) #14
  %.not288 = icmp eq i32 %239, 0
  br i1 %.not288, label %244, label %240

240:                                              ; preds = %237
  %241 = load ptr, ptr @stderr, align 8, !tbaa !5
  %242 = load ptr, ptr @Prog_Name, align 8, !tbaa !5
  %243 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %241, ptr noundef nonnull @.str.36, ptr noundef %242, ptr noundef nonnull %170) #16
  call void @exit(i32 noundef 1) #17
  unreachable

244:                                              ; preds = %237, %235
  %245 = call i32 (ptr, ptr, ...) @sprintf(ptr noundef nonnull dereferenceable(1) %165, ptr noundef nonnull dereferenceable(1) @.str.42, ptr noundef %129) #14
  br label %246

246:                                              ; preds = %244, %217
  call void @free(ptr noundef nonnull %170) #14
  %247 = load i32, ptr %5, align 4, !tbaa !9
  %248 = icmp ne i32 %247, 0
  %249 = load i32, ptr %6, align 4
  %250 = icmp ne i32 %249, 0
  %or.cond5 = select i1 %248, i1 %250, i1 false
  br i1 %or.cond5, label %253, label %251

251:                                              ; preds = %246
  call void @Free_Kmer_Stream(ptr noundef nonnull %175) #14
  %252 = call ptr @Open_Kmer_Stream(ptr noundef nonnull %165) #14
  br label %255

253:                                              ; preds = %246
  call void @free(ptr noundef nonnull %165) #14
  br label %255

254:                                              ; preds = %181
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %6) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %5) #14
  br label %536

255:                                              ; preds = %253, %251
  %.1228.ph = phi ptr [ %165, %251 ], [ null, %253 ]
  %.1.ph = phi ptr [ %252, %251 ], [ %175, %253 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %6) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %5) #14
  %256 = load i32, ptr @VERBOSE, align 4, !tbaa !9
  %.not289 = icmp eq i32 %256, 0
  br i1 %.not289, label %262, label %257

257:                                              ; preds = %255
  %258 = load ptr, ptr @stderr, align 8, !tbaa !5
  %259 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %258, ptr noundef nonnull @.str.43) #16
  %260 = load ptr, ptr @stderr, align 8, !tbaa !5
  %261 = call i32 @fflush(ptr noundef %260)
  br label %262

262:                                              ; preds = %257, %255
  store i32 1, ptr @BLEVEL, align 4, !tbaa !9
  store i32 4, ptr @BWIDTH, align 4, !tbaa !9
  %263 = load i32, ptr @NTHREADS, align 4, !tbaa !9
  %264 = icmp sgt i32 %263, 1
  br i1 %264, label %.lr.ph359, label %270

.lr.ph359:                                        ; preds = %262, %.lr.ph359
  %265 = phi i32 [ %267, %.lr.ph359 ], [ 4, %262 ]
  %266 = phi i32 [ %268, %.lr.ph359 ], [ 1, %262 ]
  %267 = shl nsw i32 %265, 2
  %268 = add nuw nsw i32 %266, 1
  %269 = icmp sgt i32 %263, %265
  br i1 %269, label %.lr.ph359, label %._crit_edge360, !llvm.loop !22

._crit_edge360:                                   ; preds = %.lr.ph359
  store i32 %267, ptr @BWIDTH, align 4, !tbaa !9
  store i32 %268, ptr @BLEVEL, align 4, !tbaa !9
  br label %270

270:                                              ; preds = %._crit_edge360, %262
  %271 = load i64, ptr @MEMORY_LIMIT, align 8, !tbaa !23
  %272 = sext i32 %263 to i64
  %273 = sdiv i64 %271, %272
  %274 = load i32, ptr @TBYTE, align 4, !tbaa !9
  %275 = sext i32 %274 to i64
  %276 = sdiv i64 %273, %275
  store i64 %276, ptr @Cache_Size, align 8, !tbaa !23
  %277 = zext i32 %263 to i64
  %278 = call ptr @llvm.stacksave.p0()
  %279 = alloca %struct.TP, i64 %277, align 16
  %280 = load i32, ptr @NTHREADS, align 4, !tbaa !9
  %281 = icmp sgt i32 %280, 0
  br i1 %281, label %.lr.ph367, label %._crit_edge368.thread

._crit_edge368.thread:                            ; preds = %270
  %282 = getelementptr inbounds i8, ptr %279, i64 16
  store ptr %.1.ph, ptr %282, align 16, !tbaa !5
  br label %._crit_edge371

.lr.ph367:                                        ; preds = %270, %295
  %indvars.iv428 = phi i64 [ %indvars.iv.next429, %295 ], [ 0, %270 ]
  %283 = call ptr @Malloc(i64 noundef 8008, ptr noundef nonnull @.str.24) #14
  %284 = call ptr @Malloc(i64 noundef 4012008, ptr noundef nonnull @.str.25) #14
  store ptr %284, ptr %283, align 8, !tbaa !5
  %invariant.gep558 = getelementptr i8, ptr %283, i64 8
  %invariant.gep560 = getelementptr i8, ptr %283, i64 16
  %invariant.gep562 = getelementptr i8, ptr %283, i64 24
  %invariant.gep564 = getelementptr i8, ptr %283, i64 32
  %invariant.gep566 = getelementptr i8, ptr %283, i64 40
  %invariant.gep568 = getelementptr i8, ptr %283, i64 48
  %invariant.gep570 = getelementptr i8, ptr %283, i64 56
  br label %285

285:                                              ; preds = %285, %.lr.ph367
  %store_forwarded = phi ptr [ %284, %.lr.ph367 ], [ %294, %285 ]
  %indvars.iv424 = phi i64 [ 1, %.lr.ph367 ], [ %indvars.iv.next425.7, %285 ]
  %286 = getelementptr ptr, ptr %283, i64 %indvars.iv424
  %287 = getelementptr inbounds i8, ptr %store_forwarded, i64 4008
  store ptr %287, ptr %286, align 8, !tbaa !5
  %gep559 = getelementptr ptr, ptr %invariant.gep558, i64 %indvars.iv424
  %288 = getelementptr inbounds i8, ptr %store_forwarded, i64 8016
  store ptr %288, ptr %gep559, align 8, !tbaa !5
  %gep561 = getelementptr ptr, ptr %invariant.gep560, i64 %indvars.iv424
  %289 = getelementptr inbounds i8, ptr %store_forwarded, i64 12024
  store ptr %289, ptr %gep561, align 8, !tbaa !5
  %gep563 = getelementptr ptr, ptr %invariant.gep562, i64 %indvars.iv424
  %290 = getelementptr inbounds i8, ptr %store_forwarded, i64 16032
  store ptr %290, ptr %gep563, align 8, !tbaa !5
  %gep565 = getelementptr ptr, ptr %invariant.gep564, i64 %indvars.iv424
  %291 = getelementptr inbounds i8, ptr %store_forwarded, i64 20040
  store ptr %291, ptr %gep565, align 8, !tbaa !5
  %gep567 = getelementptr ptr, ptr %invariant.gep566, i64 %indvars.iv424
  %292 = getelementptr inbounds i8, ptr %store_forwarded, i64 24048
  store ptr %292, ptr %gep567, align 8, !tbaa !5
  %gep569 = getelementptr ptr, ptr %invariant.gep568, i64 %indvars.iv424
  %293 = getelementptr inbounds i8, ptr %store_forwarded, i64 28056
  store ptr %293, ptr %gep569, align 8, !tbaa !5
  %gep571 = getelementptr ptr, ptr %invariant.gep570, i64 %indvars.iv424
  %294 = getelementptr inbounds i8, ptr %store_forwarded, i64 32064
  store ptr %294, ptr %gep571, align 8, !tbaa !5
  %indvars.iv.next425.7 = add nuw nsw i64 %indvars.iv424, 8
  %exitcond427.not.7 = icmp eq i64 %indvars.iv.next425.7, 1001
  br i1 %exitcond427.not.7, label %295, label %285, !llvm.loop !24

295:                                              ; preds = %285
  %296 = load ptr, ptr %283, align 8, !tbaa !5
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(4012008) %296, i8 0, i64 4012008, i1 false)
  %297 = getelementptr inbounds %struct.TP, ptr %279, i64 %indvars.iv428, i32 9
  store ptr %283, ptr %297, align 8, !tbaa !25
  %indvars.iv.next429 = add nuw nsw i64 %indvars.iv428, 1
  %298 = load i32, ptr @NTHREADS, align 4, !tbaa !9
  %299 = sext i32 %298 to i64
  %300 = icmp slt i64 %indvars.iv.next429, %299
  br i1 %300, label %.lr.ph367, label %._crit_edge368, !llvm.loop !27

._crit_edge368:                                   ; preds = %295
  %301 = getelementptr inbounds i8, ptr %279, i64 16
  store ptr %.1.ph, ptr %301, align 16, !tbaa !5
  %302 = icmp sgt i32 %298, 0
  br i1 %302, label %303, label %._crit_edge371

303:                                              ; preds = %._crit_edge368
  %304 = call ptr @Clone_Kmer_Stream(ptr noundef %.1.ph) #14
  %305 = getelementptr inbounds i8, ptr %279, i64 24
  store ptr %304, ptr %305, align 8, !tbaa !5
  %306 = call ptr @Clone_Kmer_Stream(ptr noundef %.1.ph) #14
  %307 = getelementptr inbounds i8, ptr %279, i64 32
  store ptr %306, ptr %307, align 16, !tbaa !5
  %308 = call ptr @Clone_Kmer_Stream(ptr noundef %.1.ph) #14
  %309 = getelementptr inbounds i8, ptr %279, i64 40
  store ptr %308, ptr %309, align 8, !tbaa !5
  %310 = load i32, ptr @NTHREADS, align 4, !tbaa !9
  %311 = icmp sgt i32 %310, 1
  br i1 %311, label %.preheader306.peel.next, label %._crit_edge371

.preheader306.peel.next:                          ; preds = %303, %.preheader306.peel.next
  %indvars.iv435 = phi i64 [ %indvars.iv.next436, %.preheader306.peel.next ], [ 1, %303 ]
  %312 = call ptr @Clone_Kmer_Stream(ptr noundef %.1.ph) #14
  %313 = getelementptr inbounds %struct.TP, ptr %279, i64 %indvars.iv435, i32 2, i64 0
  store ptr %312, ptr %313, align 16, !tbaa !5
  %314 = call ptr @Clone_Kmer_Stream(ptr noundef %.1.ph) #14
  %315 = getelementptr inbounds %struct.TP, ptr %279, i64 %indvars.iv435, i32 2, i64 1
  store ptr %314, ptr %315, align 8, !tbaa !5
  %316 = call ptr @Clone_Kmer_Stream(ptr noundef %.1.ph) #14
  %317 = getelementptr inbounds %struct.TP, ptr %279, i64 %indvars.iv435, i32 2, i64 2
  store ptr %316, ptr %317, align 16, !tbaa !5
  %318 = call ptr @Clone_Kmer_Stream(ptr noundef %.1.ph) #14
  %319 = getelementptr inbounds %struct.TP, ptr %279, i64 %indvars.iv435, i32 2, i64 3
  store ptr %318, ptr %319, align 8, !tbaa !5
  %indvars.iv.next436 = add nuw nsw i64 %indvars.iv435, 1
  %320 = load i32, ptr @NTHREADS, align 4, !tbaa !9
  %321 = sext i32 %320 to i64
  %322 = icmp slt i64 %indvars.iv.next436, %321
  br i1 %322, label %.preheader306.peel.next, label %._crit_edge371, !llvm.loop !28

._crit_edge371:                                   ; preds = %.preheader306.peel.next, %303, %._crit_edge368.thread, %._crit_edge368
  %323 = call ptr @Current_Entry(ptr noundef %.1.ph, ptr noundef null) #14
  store ptr %323, ptr @Divpt, align 8, !tbaa !5
  %324 = getelementptr inbounds i8, ptr %.1.ph, i64 8
  %325 = load i64, ptr %324, align 8, !tbaa !30
  %326 = call ptr @Malloc(i64 noundef %325, ptr noundef nonnull @.str.44) #14
  store ptr %326, ptr @Pair, align 8, !tbaa !5
  %327 = load i64, ptr @MEMORY_LIMIT, align 8, !tbaa !23
  %328 = call ptr @Malloc(i64 noundef %327, ptr noundef nonnull @.str.45) #14
  %329 = load ptr, ptr @Pair, align 8, !tbaa !5
  %330 = icmp eq ptr %329, null
  %331 = icmp eq ptr %328, null
  %or.cond7 = select i1 %330, i1 true, i1 %331
  br i1 %or.cond7, label %332, label %333

332:                                              ; preds = %._crit_edge371
  call void @exit(i32 noundef 1) #17
  unreachable

333:                                              ; preds = %._crit_edge371
  %334 = load i64, ptr %324, align 8, !tbaa !30
  call void @llvm.memset.p0.i64(ptr nonnull align 1 %329, i8 0, i64 %334, i1 false)
  %335 = getelementptr inbounds i8, ptr %.1.ph, i64 16
  store i32 1, ptr @PASS1, align 4, !tbaa !9
  %336 = getelementptr inbounds i8, ptr %7, i64 32
  %337 = getelementptr inbounds i8, ptr %7, i64 8
  %338 = getelementptr inbounds i8, ptr %7, i64 16
  %339 = getelementptr inbounds i8, ptr %7, i64 24
  br label %340

340:                                              ; preds = %333, %._crit_edge388
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %7) #14
  %341 = load i32, ptr @KBYTE, align 4, !tbaa !9
  %342 = icmp sgt i32 %341, 0
  br i1 %342, label %.lr.ph374, label %._crit_edge375

.lr.ph374:                                        ; preds = %340, %.lr.ph374
  %indvars.iv439 = phi i64 [ %indvars.iv.next440, %.lr.ph374 ], [ 0, %340 ]
  %343 = load ptr, ptr @Divpt, align 8, !tbaa !5
  %344 = getelementptr inbounds i8, ptr %343, i64 %indvars.iv439
  store i8 0, ptr %344, align 1, !tbaa !11
  %indvars.iv.next440 = add nuw nsw i64 %indvars.iv439, 1
  %345 = load i32, ptr @KBYTE, align 4, !tbaa !9
  %346 = sext i32 %345 to i64
  %347 = icmp slt i64 %indvars.iv.next440, %346
  br i1 %347, label %.lr.ph374, label %._crit_edge375, !llvm.loop !31

._crit_edge375:                                   ; preds = %.lr.ph374, %340
  store i64 0, ptr %7, align 16, !tbaa !23
  %348 = load ptr, ptr @Divpt, align 8, !tbaa !5
  store i8 64, ptr %348, align 1, !tbaa !11
  %349 = load ptr, ptr @Divpt, align 8, !tbaa !5
  %350 = call i32 @GoTo_Kmer_Entry(ptr noundef %.1.ph, ptr noundef %349) #14
  %351 = load i64, ptr %335, align 8, !tbaa !32
  store i64 %351, ptr %337, align 8, !tbaa !23
  %352 = load ptr, ptr @Divpt, align 8, !tbaa !5
  store i8 -128, ptr %352, align 1, !tbaa !11
  %353 = load ptr, ptr @Divpt, align 8, !tbaa !5
  %354 = call i32 @GoTo_Kmer_Entry(ptr noundef %.1.ph, ptr noundef %353) #14
  %355 = load i64, ptr %335, align 8, !tbaa !32
  store i64 %355, ptr %338, align 16, !tbaa !23
  %356 = load ptr, ptr @Divpt, align 8, !tbaa !5
  store i8 -64, ptr %356, align 1, !tbaa !11
  %357 = load ptr, ptr @Divpt, align 8, !tbaa !5
  %358 = call i32 @GoTo_Kmer_Entry(ptr noundef %.1.ph, ptr noundef %357) #14
  %359 = load i64, ptr %335, align 8, !tbaa !32
  store i64 %359, ptr %339, align 8, !tbaa !23
  %360 = load i64, ptr %324, align 8, !tbaa !30
  store i64 %360, ptr %336, align 16, !tbaa !23
  call void @big_window(ptr noundef nonnull %7, i32 noundef 0, ptr noundef nonnull %279)
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %7) #14
  %361 = load i32, ptr @NTHREADS, align 4, !tbaa !9
  %362 = zext i32 %361 to i64
  %363 = call ptr @llvm.stacksave.p0()
  %364 = alloca i64, i64 %362, align 16
  %365 = load i32, ptr @NTHREADS, align 4, !tbaa !9
  %366 = zext i32 %365 to i64
  %367 = alloca i32, i64 %366, align 16
  store ptr %367, ptr @Tstack, align 8, !tbaa !5
  %368 = icmp sgt i32 %365, 0
  br i1 %368, label %.lr.ph379, label %._crit_edge380

.lr.ph379:                                        ; preds = %._crit_edge375
  %369 = load i64, ptr @MEMORY_LIMIT, align 8, !tbaa !23
  %370 = sdiv i64 %369, %366
  %xtraiter = and i64 %366, 1
  %371 = icmp eq i32 %365, 1
  br i1 %371, label %._crit_edge380.loopexit.unr-lcssa, label %.lr.ph379.new

.lr.ph379.new:                                    ; preds = %.lr.ph379
  %unroll_iter = and i64 %366, 2147483646
  br label %372

372:                                              ; preds = %372, %.lr.ph379.new
  %indvars.iv446 = phi i64 [ 0, %.lr.ph379.new ], [ %indvars.iv.next447.1, %372 ]
  %niter = phi i64 [ 0, %.lr.ph379.new ], [ %niter.next.1, %372 ]
  %373 = getelementptr inbounds i32, ptr %367, i64 %indvars.iv446
  %374 = trunc nuw nsw i64 %indvars.iv446 to i32
  store i32 %374, ptr %373, align 8, !tbaa !9
  %375 = getelementptr inbounds %struct.TP, ptr %279, i64 %indvars.iv446
  %376 = getelementptr inbounds i8, ptr %375, i64 80
  store i32 %374, ptr %376, align 16, !tbaa !33
  %377 = mul nsw i64 %370, %indvars.iv446
  %378 = getelementptr inbounds i8, ptr %328, i64 %377
  %379 = getelementptr inbounds i8, ptr %375, i64 88
  store ptr %378, ptr %379, align 8, !tbaa !34
  %indvars.iv.next447 = or disjoint i64 %indvars.iv446, 1
  %380 = getelementptr inbounds i32, ptr %367, i64 %indvars.iv.next447
  %381 = trunc nuw nsw i64 %indvars.iv.next447 to i32
  store i32 %381, ptr %380, align 4, !tbaa !9
  %382 = getelementptr inbounds %struct.TP, ptr %279, i64 %indvars.iv.next447
  %383 = getelementptr inbounds i8, ptr %382, i64 80
  store i32 %381, ptr %383, align 16, !tbaa !33
  %384 = mul nsw i64 %370, %indvars.iv.next447
  %385 = getelementptr inbounds i8, ptr %328, i64 %384
  %386 = getelementptr inbounds i8, ptr %382, i64 88
  store ptr %385, ptr %386, align 8, !tbaa !34
  %indvars.iv.next447.1 = add nuw nsw i64 %indvars.iv446, 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_edge380.loopexit.unr-lcssa, label %372, !llvm.loop !35

._crit_edge380.loopexit.unr-lcssa:                ; preds = %372, %.lr.ph379
  %indvars.iv446.unr = phi i64 [ 0, %.lr.ph379 ], [ %indvars.iv.next447.1, %372 ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %._crit_edge380, label %._crit_edge380.loopexit.epilog-lcssa

._crit_edge380.loopexit.epilog-lcssa:             ; preds = %._crit_edge380.loopexit.unr-lcssa
  %387 = getelementptr inbounds i32, ptr %367, i64 %indvars.iv446.unr
  %388 = trunc nuw nsw i64 %indvars.iv446.unr to i32
  store i32 %388, ptr %387, align 4, !tbaa !9
  %389 = getelementptr inbounds %struct.TP, ptr %279, i64 %indvars.iv446.unr
  %390 = getelementptr inbounds i8, ptr %389, i64 80
  store i32 %388, ptr %390, align 16, !tbaa !33
  %391 = mul nsw i64 %370, %indvars.iv446.unr
  %392 = getelementptr inbounds i8, ptr %328, i64 %391
  %393 = getelementptr inbounds i8, ptr %389, i64 88
  store ptr %392, ptr %393, align 8, !tbaa !34
  br label %._crit_edge380

._crit_edge380:                                   ; preds = %._crit_edge380.loopexit.epilog-lcssa, %._crit_edge380.loopexit.unr-lcssa, %._crit_edge375
  store i32 %365, ptr @Tavail, align 4, !tbaa !9
  %394 = call i32 @pthread_mutex_init(ptr noundef nonnull @TMUTEX, ptr noundef null) #14
  %395 = call i32 @pthread_cond_init(ptr noundef nonnull @TCOND, ptr noundef null) #14
  %396 = load i32, ptr @BWIDTH, align 4, !tbaa !9
  %397 = icmp sgt i32 %396, 0
  br i1 %397, label %.lr.ph384, label %._crit_edge385

.lr.ph384:                                        ; preds = %._crit_edge380, %403
  %.0231382 = phi i32 [ %415, %403 ], [ 0, %._crit_edge380 ]
  %398 = call i32 @pthread_mutex_lock(ptr noundef nonnull @TMUTEX) #14
  %399 = load i32, ptr @Tavail, align 4, !tbaa !9
  %400 = icmp slt i32 %399, 1
  br i1 %400, label %401, label %403

401:                                              ; preds = %.lr.ph384
  %402 = call i32 @pthread_cond_wait(ptr noundef nonnull @TCOND, ptr noundef nonnull @TMUTEX) #14
  %.pre489 = load i32, ptr @Tavail, align 4, !tbaa !9
  br label %403

403:                                              ; preds = %401, %.lr.ph384
  %404 = phi i32 [ %.pre489, %401 ], [ %399, %.lr.ph384 ]
  %405 = load ptr, ptr @Tstack, align 8, !tbaa !5
  %406 = add nsw i32 %404, -1
  store i32 %406, ptr @Tavail, align 4, !tbaa !9
  %407 = sext i32 %406 to i64
  %408 = getelementptr inbounds i32, ptr %405, i64 %407
  %409 = load i32, ptr %408, align 4, !tbaa !9
  %410 = call i32 @pthread_mutex_unlock(ptr noundef nonnull @TMUTEX) #14
  %411 = sext i32 %409 to i64
  %412 = getelementptr inbounds %struct.TP, ptr %279, i64 %411
  store i32 %.0231382, ptr %412, align 16, !tbaa !36
  %413 = getelementptr inbounds i64, ptr %364, i64 %411
  %414 = call i32 @pthread_create(ptr noundef nonnull %413, ptr noundef null, ptr noundef nonnull @small_window, ptr noundef nonnull %412) #14
  %415 = add nuw nsw i32 %.0231382, 1
  %416 = load i32, ptr @BWIDTH, align 4, !tbaa !9
  %417 = icmp slt i32 %415, %416
  br i1 %417, label %.lr.ph384, label %._crit_edge385, !llvm.loop !37

._crit_edge385:                                   ; preds = %403, %._crit_edge380
  %418 = call i32 @pthread_mutex_lock(ptr noundef nonnull @TMUTEX) #14
  %419 = load i32, ptr @Tavail, align 4, !tbaa !9
  %420 = load i32, ptr @NTHREADS, align 4, !tbaa !9
  %421 = icmp slt i32 %419, %420
  br i1 %421, label %.lr.ph387, label %._crit_edge388

.lr.ph387:                                        ; preds = %._crit_edge385, %.lr.ph387
  %422 = call i32 @pthread_cond_wait(ptr noundef nonnull @TCOND, ptr noundef nonnull @TMUTEX) #14
  %423 = load i32, ptr @Tavail, align 4, !tbaa !9
  %424 = load i32, ptr @NTHREADS, align 4, !tbaa !9
  %425 = icmp slt i32 %423, %424
  br i1 %425, label %.lr.ph387, label %._crit_edge388, !llvm.loop !38

._crit_edge388:                                   ; preds = %.lr.ph387, %._crit_edge385
  %426 = call i32 @pthread_mutex_unlock(ptr noundef nonnull @TMUTEX) #14
  call void @llvm.stackrestore.p0(ptr %363)
  %427 = load i32, ptr @PASS1, align 4, !tbaa !9
  %428 = add nsw i32 %427, -1
  store i32 %428, ptr @PASS1, align 4, !tbaa !9
  %429 = icmp sgt i32 %427, 0
  br i1 %429, label %340, label %430, !llvm.loop !39

430:                                              ; preds = %._crit_edge388
  call void @free(ptr noundef %328) #14
  %431 = load ptr, ptr @Pair, align 8, !tbaa !5
  call void @free(ptr noundef %431) #14
  %432 = load ptr, ptr @Divpt, align 8, !tbaa !5
  call void @free(ptr noundef %432) #14
  %433 = load i32, ptr @NTHREADS, align 4, !tbaa !9
  %434 = icmp sgt i32 %433, 0
  br i1 %434, label %.preheader305.preheader, label %._crit_edge392

.preheader305.preheader:                          ; preds = %430
  %435 = zext nneg i32 %433 to i64
  br label %.preheader305

.preheader305:                                    ; preds = %.loopexit, %.preheader305.preheader
  %indvars.iv454 = phi i64 [ %435, %.preheader305.preheader ], [ %indvars.iv.next455, %.loopexit ]
  %indvars.iv.next455 = add nsw i64 %indvars.iv454, -1
  %436 = trunc i64 %indvars.iv454 to i32
  %437 = add i32 %436, 2
  %438 = icmp sgt i32 %437, 0
  br i1 %438, label %439, label %442

439:                                              ; preds = %.preheader305
  %440 = getelementptr inbounds %struct.TP, ptr %279, i64 %indvars.iv.next455, i32 2, i64 3
  %441 = load ptr, ptr %440, align 8, !tbaa !5
  call void @Free_Kmer_Stream(ptr noundef %441) #14
  br label %442

442:                                              ; preds = %.preheader305, %439
  %443 = trunc i64 %indvars.iv454 to i32
  %444 = icmp ult i32 %443, 2147483647
  br i1 %444, label %445, label %448

445:                                              ; preds = %442
  %446 = getelementptr inbounds %struct.TP, ptr %279, i64 %indvars.iv.next455, i32 2, i64 2
  %447 = load ptr, ptr %446, align 16, !tbaa !5
  call void @Free_Kmer_Stream(ptr noundef %447) #14
  br label %448

448:                                              ; preds = %445, %442
  %449 = trunc nuw i64 %indvars.iv454 to i32
  %450 = icmp sgt i32 %449, 0
  br i1 %450, label %451, label %454

451:                                              ; preds = %448
  %452 = getelementptr inbounds %struct.TP, ptr %279, i64 %indvars.iv.next455, i32 2, i64 1
  %453 = load ptr, ptr %452, align 8, !tbaa !5
  call void @Free_Kmer_Stream(ptr noundef %453) #14
  br label %454

454:                                              ; preds = %451, %448
  %455 = icmp ugt i64 %indvars.iv454, 1
  br i1 %455, label %.loopexit, label %._crit_edge392

.loopexit:                                        ; preds = %454
  %456 = getelementptr inbounds %struct.TP, ptr %279, i64 %indvars.iv.next455, i32 2, i64 0
  %457 = load ptr, ptr %456, align 16, !tbaa !5
  call void @Free_Kmer_Stream(ptr noundef %457) #14
  br label %.preheader305, !llvm.loop !40

._crit_edge392:                                   ; preds = %454, %430
  call void @Free_Kmer_Stream(ptr noundef %.1.ph) #14
  %458 = load i32, ptr @NTHREADS, align 4, !tbaa !9
  %459 = icmp sgt i32 %458, 1
  br i1 %459, label %.preheader304.lr.ph, label %._crit_edge399

.preheader304.lr.ph:                              ; preds = %._crit_edge392
  %460 = getelementptr inbounds i8, ptr %279, i64 168
  %461 = load ptr, ptr %460, align 8, !tbaa !25
  %wide.trip.count468 = zext nneg i32 %458 to i64
  br label %.preheader304

.preheader304:                                    ; preds = %.preheader304.lr.ph, %507
  %indvars.iv465 = phi i64 [ 1, %.preheader304.lr.ph ], [ %indvars.iv.next466, %507 ]
  %462 = getelementptr inbounds %struct.TP, ptr %279, i64 %indvars.iv465, i32 9
  %463 = load ptr, ptr %462, align 8, !tbaa !25
  br label %vector.memcheck

.preheader303:                                    ; preds = %507
  br i1 %459, label %.lr.ph398.preheader, label %._crit_edge399

.lr.ph398.preheader:                              ; preds = %.preheader303
  %464 = zext nneg i32 %458 to i64
  br label %.lr.ph398

vector.memcheck:                                  ; preds = %.preheader304, %.loopexit521
  %indvars.iv461 = phi i64 [ 0, %.preheader304 ], [ %indvars.iv.next462, %.loopexit521 ]
  %465 = getelementptr inbounds ptr, ptr %461, i64 %indvars.iv461
  %466 = load ptr, ptr %465, align 8, !tbaa !5
  %467 = getelementptr inbounds ptr, ptr %463, i64 %indvars.iv461
  %468 = load ptr, ptr %467, align 8, !tbaa !5
  %scevgep = getelementptr i8, ptr %466, i64 4008
  %scevgep517 = getelementptr i8, ptr %468, i64 4008
  %bound0 = icmp uge ptr %466, %scevgep517
  %bound1 = icmp uge ptr %468, %scevgep
  %found.conflict.not = or i1 %bound0, %bound1
  br i1 %found.conflict.not, label %vector.body, label %scalar.ph.prol.preheader

vector.body:                                      ; preds = %vector.memcheck, %vector.body.1
  %index = phi i64 [ %index.next.1, %vector.body.1 ], [ 0, %vector.memcheck ]
  %469 = getelementptr inbounds i64, ptr %468, i64 %index
  %470 = getelementptr inbounds i8, ptr %469, i64 16
  %wide.load = load <2 x i64>, ptr %469, align 8, !tbaa !23, !alias.scope !41
  %wide.load518 = load <2 x i64>, ptr %470, align 8, !tbaa !23, !alias.scope !41
  %471 = getelementptr inbounds i64, ptr %466, i64 %index
  %472 = getelementptr inbounds i8, ptr %471, i64 16
  %wide.load519 = load <2 x i64>, ptr %471, align 8, !tbaa !23, !alias.scope !44, !noalias !41
  %wide.load520 = load <2 x i64>, ptr %472, align 8, !tbaa !23, !alias.scope !44, !noalias !41
  %473 = add nsw <2 x i64> %wide.load519, %wide.load
  %474 = add nsw <2 x i64> %wide.load520, %wide.load518
  store <2 x i64> %473, ptr %471, align 8, !tbaa !23, !alias.scope !44, !noalias !41
  store <2 x i64> %474, ptr %472, align 8, !tbaa !23, !alias.scope !44, !noalias !41
  %475 = icmp eq i64 %index, 496
  br i1 %475, label %scalar.ph.prol.preheader, label %vector.body.1, !llvm.loop !46

vector.body.1:                                    ; preds = %vector.body
  %index.next = or disjoint i64 %index, 4
  %476 = getelementptr inbounds i64, ptr %468, i64 %index.next
  %477 = getelementptr inbounds i8, ptr %476, i64 16
  %wide.load.1 = load <2 x i64>, ptr %476, align 8, !tbaa !23, !alias.scope !41
  %wide.load518.1 = load <2 x i64>, ptr %477, align 8, !tbaa !23, !alias.scope !41
  %478 = getelementptr inbounds i64, ptr %466, i64 %index.next
  %479 = getelementptr inbounds i8, ptr %478, i64 16
  %wide.load519.1 = load <2 x i64>, ptr %478, align 8, !tbaa !23, !alias.scope !44, !noalias !41
  %wide.load520.1 = load <2 x i64>, ptr %479, align 8, !tbaa !23, !alias.scope !44, !noalias !41
  %480 = add nsw <2 x i64> %wide.load519.1, %wide.load.1
  %481 = add nsw <2 x i64> %wide.load520.1, %wide.load518.1
  store <2 x i64> %480, ptr %478, align 8, !tbaa !23, !alias.scope !44, !noalias !41
  store <2 x i64> %481, ptr %479, align 8, !tbaa !23, !alias.scope !44, !noalias !41
  %index.next.1 = add nuw nsw i64 %index, 8
  br label %vector.body

scalar.ph.prol.preheader:                         ; preds = %vector.memcheck, %vector.body
  %indvars.iv457.ph = phi i64 [ 0, %vector.memcheck ], [ 500, %vector.body ]
  br label %scalar.ph.prol

scalar.ph.prol:                                   ; preds = %scalar.ph.prol, %scalar.ph.prol.preheader
  %indvars.iv457.prol = phi i64 [ %indvars.iv.next458.prol, %scalar.ph.prol ], [ %indvars.iv457.ph, %scalar.ph.prol.preheader ]
  %prol.iter = phi i64 [ %prol.iter.next, %scalar.ph.prol ], [ 0, %scalar.ph.prol.preheader ]
  %482 = getelementptr inbounds i64, ptr %468, i64 %indvars.iv457.prol
  %483 = load i64, ptr %482, align 8, !tbaa !23
  %484 = getelementptr inbounds i64, ptr %466, i64 %indvars.iv457.prol
  %485 = load i64, ptr %484, align 8, !tbaa !23
  %486 = add nsw i64 %485, %483
  store i64 %486, ptr %484, align 8, !tbaa !23
  %indvars.iv.next458.prol = add nuw nsw i64 %indvars.iv457.prol, 1
  %prol.iter.next = add i64 %prol.iter, 1
  %prol.iter.cmp.not = icmp eq i64 %prol.iter, 0
  br i1 %prol.iter.cmp.not, label %scalar.ph.prol.loopexit, label %scalar.ph.prol, !llvm.loop !49

scalar.ph.prol.loopexit:                          ; preds = %scalar.ph.prol
  br i1 %found.conflict.not, label %.loopexit521, label %scalar.ph

scalar.ph:                                        ; preds = %scalar.ph.prol.loopexit, %scalar.ph
  %indvars.iv457 = phi i64 [ %indvars.iv.next458.3, %scalar.ph ], [ %indvars.iv.next458.prol, %scalar.ph.prol.loopexit ]
  %487 = getelementptr inbounds i64, ptr %468, i64 %indvars.iv457
  %488 = load i64, ptr %487, align 8, !tbaa !23
  %489 = getelementptr inbounds i64, ptr %466, i64 %indvars.iv457
  %490 = load i64, ptr %489, align 8, !tbaa !23
  %491 = add nsw i64 %490, %488
  store i64 %491, ptr %489, align 8, !tbaa !23
  %indvars.iv.next458 = add nuw nsw i64 %indvars.iv457, 1
  %492 = getelementptr inbounds i64, ptr %468, i64 %indvars.iv.next458
  %493 = load i64, ptr %492, align 8, !tbaa !23
  %494 = getelementptr inbounds i64, ptr %466, i64 %indvars.iv.next458
  %495 = load i64, ptr %494, align 8, !tbaa !23
  %496 = add nsw i64 %495, %493
  store i64 %496, ptr %494, align 8, !tbaa !23
  %indvars.iv.next458.1 = add nuw nsw i64 %indvars.iv457, 2
  %497 = getelementptr inbounds i64, ptr %468, i64 %indvars.iv.next458.1
  %498 = load i64, ptr %497, align 8, !tbaa !23
  %499 = getelementptr inbounds i64, ptr %466, i64 %indvars.iv.next458.1
  %500 = load i64, ptr %499, align 8, !tbaa !23
  %501 = add nsw i64 %500, %498
  store i64 %501, ptr %499, align 8, !tbaa !23
  %indvars.iv.next458.2 = add nuw nsw i64 %indvars.iv457, 3
  %502 = getelementptr inbounds i64, ptr %468, i64 %indvars.iv.next458.2
  %503 = load i64, ptr %502, align 8, !tbaa !23
  %504 = getelementptr inbounds i64, ptr %466, i64 %indvars.iv.next458.2
  %505 = load i64, ptr %504, align 8, !tbaa !23
  %506 = add nsw i64 %505, %503
  store i64 %506, ptr %504, align 8, !tbaa !23
  %indvars.iv.next458.3 = add nuw nsw i64 %indvars.iv457, 4
  %exitcond460.not.3 = icmp eq i64 %indvars.iv.next458.3, 501
  br i1 %exitcond460.not.3, label %.loopexit521, label %scalar.ph, !llvm.loop !51

.loopexit521:                                     ; preds = %scalar.ph, %scalar.ph.prol.loopexit
  %indvars.iv.next462 = add nuw nsw i64 %indvars.iv461, 1
  %exitcond464.not = icmp eq i64 %indvars.iv.next462, 1001
  br i1 %exitcond464.not, label %507, label %vector.memcheck, !llvm.loop !52

507:                                              ; preds = %.loopexit521
  %indvars.iv.next466 = add nuw nsw i64 %indvars.iv465, 1
  %exitcond469.not = icmp eq i64 %indvars.iv.next466, %wide.trip.count468
  br i1 %exitcond469.not, label %.preheader303, label %.preheader304, !llvm.loop !53

.lr.ph398:                                        ; preds = %.lr.ph398.preheader, %.lr.ph398
  %indvars.iv470 = phi i64 [ %464, %.lr.ph398.preheader ], [ %indvars.iv.next471, %.lr.ph398 ]
  %indvars.iv.next471 = add nsw i64 %indvars.iv470, -1
  %508 = getelementptr inbounds %struct.TP, ptr %279, i64 %indvars.iv.next471, i32 9
  %509 = load ptr, ptr %508, align 8, !tbaa !25
  %510 = load ptr, ptr %509, align 8, !tbaa !5
  call void @free(ptr noundef %510) #14
  %511 = load ptr, ptr %508, align 8, !tbaa !25
  call void @free(ptr noundef %511) #14
  %512 = icmp ugt i64 %indvars.iv470, 2
  br i1 %512, label %.lr.ph398, label %._crit_edge399, !llvm.loop !54

._crit_edge399:                                   ; preds = %.lr.ph398, %._crit_edge392, %.preheader303
  %513 = getelementptr inbounds i8, ptr %279, i64 168
  %514 = load ptr, ptr %513, align 8, !tbaa !25
  %.not290 = icmp eq ptr %.1228.ph, null
  br i1 %.not290, label %529, label %515

515:                                              ; preds = %._crit_edge399
  %516 = call i64 @strlen(ptr noundef nonnull dereferenceable(1) %.1228.ph) #15
  %517 = add i64 %516, 100
  %518 = call ptr @Malloc(i64 noundef %517, ptr noundef nonnull @.str.26) #14
  %519 = icmp eq ptr %518, null
  br i1 %519, label %520, label %521

520:                                              ; preds = %515
  call void @exit(i32 noundef 1) #17
  unreachable

521:                                              ; preds = %515
  %522 = call i32 (ptr, ptr, ...) @sprintf(ptr noundef nonnull dereferenceable(1) %518, ptr noundef nonnull dereferenceable(1) @.str.46, ptr noundef nonnull %.1228.ph) #14
  %523 = call i32 @system(ptr noundef nonnull %518) #14
  %.not291 = icmp eq i32 %523, 0
  br i1 %.not291, label %528, label %524

524:                                              ; preds = %521
  %525 = load ptr, ptr @stderr, align 8, !tbaa !5
  %526 = load ptr, ptr @Prog_Name, align 8, !tbaa !5
  %527 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %525, ptr noundef nonnull @.str.36, ptr noundef %526, ptr noundef nonnull %518) #16
  call void @exit(i32 noundef 1) #17
  unreachable

528:                                              ; preds = %521
  call void @free(ptr noundef nonnull %518) #14
  call void @free(ptr noundef nonnull %.1228.ph) #14
  br label %529

529:                                              ; preds = %528, %._crit_edge399
  call void @llvm.stackrestore.p0(ptr %278)
  %530 = load i32, ptr @VERBOSE, align 4, !tbaa !9
  %.not292 = icmp eq i32 %530, 0
  br i1 %.not292, label %536, label %531

531:                                              ; preds = %529
  %532 = load ptr, ptr @stderr, align 8, !tbaa !5
  %533 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %532, ptr noundef nonnull @.str.47) #16
  %534 = load ptr, ptr @stderr, align 8, !tbaa !5
  %535 = call i32 @fflush(ptr noundef %534)
  br label %536

536:                                              ; preds = %254, %529, %531
  %.2 = phi ptr [ %.1230, %254 ], [ %514, %531 ], [ %514, %529 ]
  %537 = load ptr, ptr @stderr, align 8, !tbaa !5
  %538 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %537, ptr noundef nonnull @.str.48) #16
  %539 = call ptr @Catenate(ptr noundef %.2239, ptr noundef nonnull @.str.49, ptr noundef nonnull @.str.1, ptr noundef nonnull @.str.1) #14
  %540 = call noalias ptr @fopen(ptr noundef %539, ptr noundef nonnull @.str.50)
  %541 = load ptr, ptr @stderr, align 8, !tbaa !5
  %542 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %541, ptr noundef nonnull @.str.51) #16
  br label %.preheader

.preheader:                                       ; preds = %536, %554
  %indvars.iv477 = phi i64 [ 0, %536 ], [ %indvars.iv.next478, %554 ]
  %543 = getelementptr inbounds ptr, ptr %.2, i64 %indvars.iv477
  %544 = trunc nuw nsw i64 %indvars.iv477 to i32
  br label %545

545:                                              ; preds = %.preheader, %553
  %indvars.iv473 = phi i64 [ 0, %.preheader ], [ %indvars.iv.next474, %553 ]
  %546 = load ptr, ptr %543, align 8, !tbaa !5
  %547 = getelementptr inbounds i64, ptr %546, i64 %indvars.iv473
  %548 = load i64, ptr %547, align 8, !tbaa !23
  %549 = icmp sgt i64 %548, 0
  br i1 %549, label %550, label %553

550:                                              ; preds = %545
  %indvars475 = trunc i64 %indvars.iv473 to i32
  %551 = sub nsw i32 %544, %indvars475
  %552 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %540, ptr noundef nonnull @.str.52, i32 noundef %indvars475, i32 noundef %551, i64 noundef %548) #14
  br label %553

553:                                              ; preds = %545, %550
  %indvars.iv.next474 = add nuw nsw i64 %indvars.iv473, 1
  %exitcond476.not = icmp eq i64 %indvars.iv.next474, 500
  br i1 %exitcond476.not, label %554, label %545, !llvm.loop !55

554:                                              ; preds = %553
  %indvars.iv.next478 = add nuw nsw i64 %indvars.iv477, 1
  %exitcond480.not = icmp eq i64 %indvars.iv.next478, 1001
  br i1 %exitcond480.not, label %555, label %.preheader, !llvm.loop !56

555:                                              ; preds = %554
  %556 = call i32 @fclose(ptr noundef %540)
  call void @free(ptr noundef %.2239) #14
  %557 = call ptr @Catenate(ptr noundef null, ptr noundef null, ptr noundef null, ptr noundef null) #14
  %558 = call ptr @Numbered_Suffix(ptr noundef null, i32 noundef 0, ptr noundef null) #14
  %559 = load ptr, ptr @Prog_Name, align 8, !tbaa !5
  call void @free(ptr noundef %559) #14
  call void @exit(i32 noundef 0) #17
  unreachable
}

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

declare ptr @Strdup(ptr noundef, ptr noundef) local_unnamed_addr #2

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

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

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

; Function Attrs: mustprogress nofree nounwind willreturn
declare i64 @strtol(ptr noundef readonly, ptr nocapture noundef, i32 noundef) local_unnamed_addr #6

; Function Attrs: mustprogress nounwind willreturn allockind("free") memory(argmem: readwrite, inaccessiblemem: readwrite)
declare void @free(ptr allocptr nocapture noundef) local_unnamed_addr #7

; Function Attrs: mustprogress nofree nounwind willreturn memory(argmem: read)
declare i64 @strlen(ptr nocapture noundef) local_unnamed_addr #8

declare ptr @Root(ptr noundef, ptr noundef) local_unnamed_addr #2

; Function Attrs: nounwind
declare ptr @mktemp(ptr noundef) local_unnamed_addr #9

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

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

declare ptr @Catenate(ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

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

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

declare ptr @Malloc(i64 noundef, ptr noundef) local_unnamed_addr #2

; Function Attrs: nofree nounwind
declare noundef i64 @fread(ptr nocapture noundef, i64 noundef, i64 noundef, ptr nocapture noundef) local_unnamed_addr #4

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

declare ptr @Open_Kmer_Stream(ptr noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare hidden void @examine_table(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #10

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

; Function Attrs: nofree
declare noundef i32 @system(ptr nocapture noundef readonly) local_unnamed_addr #11

declare void @Free_Kmer_Stream(ptr noundef) local_unnamed_addr #2

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

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

declare ptr @Clone_Kmer_Stream(ptr noundef) local_unnamed_addr #2

declare ptr @Current_Entry(ptr noundef, ptr noundef) local_unnamed_addr #2

declare i32 @GoTo_Kmer_Entry(ptr noundef, ptr noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare hidden void @big_window(ptr noundef, i32 noundef, ptr noundef) local_unnamed_addr #10

; Function Attrs: nounwind
declare i32 @pthread_mutex_init(ptr noundef, ptr noundef) local_unnamed_addr #9

; Function Attrs: nounwind
declare i32 @pthread_cond_init(ptr noundef, ptr noundef) local_unnamed_addr #9

; Function Attrs: nounwind
declare i32 @pthread_mutex_lock(ptr noundef) local_unnamed_addr #9

declare i32 @pthread_cond_wait(ptr noundef, ptr noundef) local_unnamed_addr #2

; Function Attrs: nounwind
declare i32 @pthread_mutex_unlock(ptr noundef) local_unnamed_addr #9

; Function Attrs: nounwind
declare i32 @pthread_create(ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #9

; Function Attrs: nounwind uwtable
declare hidden ptr @small_window(ptr noundef) #10

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

declare ptr @Numbered_Suffix(ptr noundef, i32 noundef, ptr noundef) local_unnamed_addr #2

attributes #0 = { 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 #1 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { "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 = { mustprogress nofree 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 #4 = { 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 #5 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { mustprogress nofree nounwind willreturn "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 = { mustprogress nounwind willreturn allockind("free") memory(argmem: readwrite, 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 #8 = { 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 #9 = { 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 #10 = { 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 #11 = { 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 #12 = { mustprogress nocallback nofree nosync nounwind willreturn }
attributes #13 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #14 = { nounwind }
attributes #15 = { nounwind willreturn memory(read) }
attributes #16 = { cold nounwind }
attributes #17 = { noreturn nounwind }

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

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


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