; LLVM IR from kalininalab/rinminer :: rinminer (rinminer)

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

%struct.output_t = type { ptr, i32, i64, i64, i64, ptr, i32, %union.pthread_mutex_t, i32, i32, i32, i32 }
%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 }
%struct.database_t = type { ptr, i32, i32, i32 }
%struct.config_t = type { i32, i32, i32, i32, i32, float, %struct.mismatch_matrix_t }
%struct.mismatch_matrix_t = type { ptr, i32 }
%struct.extension_store_t = type { ptr, ptr, ptr, i32, i32, i32 }
%struct.subgraph_store_t = type { ptr, ptr, i32, i32 }
%struct.database_entry_t = type { ptr, ptr, ptr, i32, i32, i32, i32 }

@.str = external hidden unnamed_addr constant [2 x i8], align 1
@stderr = external global ptr, align 8
@.str.1 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [2 x i8], align 1
@stdout = external global ptr, align 8
@.str.51 = external hidden unnamed_addr constant [2 x i8], align 1
@opterr = external global i32, align 4
@.str.52 = external hidden unnamed_addr constant [25 x i8], align 1
@optarg = external global ptr, align 8
@.str.53 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.54 = external hidden unnamed_addr constant [35 x i8], align 1
@.str.55 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.56 = external hidden unnamed_addr constant [51 x i8], align 1
@.str.57 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.58 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.59 = external hidden unnamed_addr constant [41 x i8], align 1
@.str.60 = external hidden unnamed_addr constant [32 x i8], align 1
@.str.61 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.62 = external hidden unnamed_addr constant [32 x i8], align 1
@.str.63 = external hidden unnamed_addr constant [67 x i8], align 1
@.str.64 = external hidden unnamed_addr constant [67 x i8], align 1
@.str.65 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.66 = external hidden unnamed_addr constant [59 x i8], align 1
@.str.67 = external hidden unnamed_addr constant [59 x i8], align 1
@optind = external global i32, align 4
@.str.68 = external hidden unnamed_addr constant [46 x i8], align 1
@.str.69 = external hidden unnamed_addr constant [51 x i8], align 1
@.str.70 = external hidden unnamed_addr constant [85 x i8], align 1
@.str.71 = external hidden unnamed_addr constant [143 x i8], align 1
@.str.72 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.73 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.74 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.75 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.76 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.77 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.78 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.79 = external hidden unnamed_addr constant [32 x i8], align 1
@.str.80 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.81 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.82 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.83 = external hidden unnamed_addr constant [46 x i8], align 1
@.str.84 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.85 = external hidden unnamed_addr constant [30 x i8], align 1

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

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

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

; Function Attrs: nounwind allocsize(0)
declare noalias ptr @malloc(i64 noundef) #3

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

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

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

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

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

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

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #7

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

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

; Function Attrs: nounwind uwtable
declare dso_local void @finalize_output(ptr noundef) #0

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

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

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

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

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

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

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

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

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

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @free_extension_store(ptr noundef) #10

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

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

declare i32 @fflush(ptr noundef) #4

; Function Attrs: nounwind uwtable
declare dso_local void @print_usage(ptr noundef) #0

; Function Attrs: nounwind uwtable
define dso_local i32 @main(i32 noundef %0, ptr noundef %1) #0 {
  %3 = alloca i32, align 4
  %4 = alloca i32, align 4
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca float, align 4
  %22 = alloca i32, align 4
  %23 = alloca i64, align 8
  %24 = alloca i32, align 4
  %25 = alloca i32, align 4
  %26 = alloca i32, align 4
  %27 = alloca float, align 4
  %28 = alloca i32, align 4
  %29 = alloca %struct.output_t, align 8
  %30 = alloca %struct.database_t, align 8
  %31 = alloca i32, align 4
  %32 = alloca %struct.database_t, align 8
  %33 = alloca ptr, align 8
  %34 = alloca %struct.config_t, align 8
  %35 = alloca %struct.mismatch_matrix_t, align 8
  %36 = alloca %struct.mismatch_matrix_t, align 8
  %37 = alloca i32, align 4
  %38 = alloca i32, align 4
  %39 = alloca ptr, align 8
  %40 = alloca i32, align 4
  %41 = alloca i32, align 4
  %42 = alloca ptr, align 8
  %43 = alloca ptr, align 8
  %44 = alloca i32, align 4
  %45 = alloca i32, align 4
  %46 = alloca i32, align 4
  %47 = alloca i32, align 4
  %48 = alloca %struct.extension_store_t, align 8
  %49 = alloca ptr, align 8
  %50 = alloca %struct.subgraph_store_t, align 8
  %51 = alloca %struct.subgraph_store_t, align 8
  %52 = alloca ptr, align 8
  %53 = alloca [3 x i32], align 4
  %54 = alloca i32, align 4
  %55 = 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) #12
  store ptr null, ptr %6, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #12
  store ptr null, ptr %7, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #12
  store ptr null, ptr %8, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #12
  store ptr null, ptr %9, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #12
  store ptr null, ptr %12, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #12
  store i32 1, ptr %13, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #12
  store i32 1, ptr %14, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #12
  store i32 0, ptr %15, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #12
  store i32 0, ptr %16, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #12
  store i32 0, ptr %17, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #12
  store i32 0, ptr %18, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #12
  store i32 0, ptr %19, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #12
  store i32 0, ptr %20, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #12
  store float -1.000000e+00, ptr %21, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #12
  store i32 1, ptr %22, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #12
  store i64 500000000, ptr %23, align 8, !tbaa !13
  %56 = call ptr @setlocale(i32 noundef 1, ptr noundef @.str.51) #12
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #12
  store i32 0, ptr @opterr, align 4, !tbaa !5
  br label %57

57:                                               ; preds = %139, %2
  %58 = load i32, ptr %4, align 4, !tbaa !5
  %59 = load ptr, ptr %5, align 8, !tbaa !9
  %60 = call i32 @getopt(i32 noundef %58, ptr noundef %59, ptr noundef @.str.52) #12
  store i32 %60, ptr %24, align 4, !tbaa !5
  %61 = icmp ne i32 %60, -1
  br i1 %61, label %62, label %140

62:                                               ; preds = %57
  %63 = load i32, ptr %24, align 4, !tbaa !5
  switch i32 %63, label %138 [
    i32 116, label %64
    i32 111, label %67
    i32 102, label %70
    i32 99, label %102
    i32 108, label %104
    i32 114, label %106
    i32 97, label %107
    i32 100, label %110
    i32 105, label %113
    i32 115, label %116
    i32 109, label %119
    i32 120, label %129
    i32 121, label %131
    i32 63, label %134
  ]

64:                                               ; preds = %62
  %65 = load ptr, ptr @optarg, align 8, !tbaa !9
  %66 = call i32 @atoi(ptr noundef %65) #13
  store i32 %66, ptr %13, align 4, !tbaa !5
  br label %139

67:                                               ; preds = %62
  %68 = load ptr, ptr @optarg, align 8, !tbaa !9
  %69 = call i32 @atoi(ptr noundef %68) #13
  store i32 %69, ptr %22, align 4, !tbaa !5
  br label %139

70:                                               ; preds = %62
  %71 = load ptr, ptr @optarg, align 8, !tbaa !9
  %72 = call i64 @atol(ptr noundef %71) #13
  store i64 %72, ptr %23, align 8, !tbaa !13
  %73 = load ptr, ptr @optarg, align 8, !tbaa !9
  %74 = call i64 @strlen(ptr noundef %73) #13
  %75 = trunc i64 %74 to i32
  store i32 %75, ptr %25, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #12
  store i32 0, ptr %26, align 4, !tbaa !5
  br label %76

76:                                               ; preds = %98, %70
  %77 = load i32, ptr %26, align 4, !tbaa !5
  %78 = load i32, ptr %25, align 4, !tbaa !5
  %79 = icmp slt i32 %77, %78
  br i1 %79, label %81, label %80

80:                                               ; preds = %76
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #12
  br label %101

81:                                               ; preds = %76
  %82 = load ptr, ptr @optarg, align 8, !tbaa !9
  %83 = load i32, ptr %26, align 4, !tbaa !5
  %84 = sext i32 %83 to i64
  %85 = getelementptr inbounds i8, ptr %82, i64 %84
  %86 = load i8, ptr %85, align 1, !tbaa !15
  %87 = sext i8 %86 to i32
  switch i32 %87, label %97 [
    i32 71, label %88
    i32 103, label %88
    i32 77, label %91
    i32 109, label %91
    i32 75, label %94
    i32 107, label %94
  ]

88:                                               ; preds = %81, %81
  %89 = load i64, ptr %23, align 8, !tbaa !13
  %90 = mul nsw i64 %89, 1000
  store i64 %90, ptr %23, align 8, !tbaa !13
  br label %91

91:                                               ; preds = %88, %81, %81
  %92 = load i64, ptr %23, align 8, !tbaa !13
  %93 = mul nsw i64 %92, 1000
  store i64 %93, ptr %23, align 8, !tbaa !13
  br label %94

94:                                               ; preds = %91, %81, %81
  %95 = load i64, ptr %23, align 8, !tbaa !13
  %96 = mul nsw i64 %95, 1000
  store i64 %96, ptr %23, align 8, !tbaa !13
  br label %97

97:                                               ; preds = %94, %81
  br label %98

98:                                               ; preds = %97
  %99 = load i32, ptr %26, align 4, !tbaa !5
  %100 = add nsw i32 %99, 1
  store i32 %100, ptr %26, align 4, !tbaa !5
  br label %76, !llvm.loop !16

101:                                              ; preds = %80
  br label %139

102:                                              ; preds = %62
  %103 = load ptr, ptr @optarg, align 8, !tbaa !9
  store ptr %103, ptr %12, align 8, !tbaa !9
  br label %139

104:                                              ; preds = %62
  %105 = load ptr, ptr @optarg, align 8, !tbaa !9
  store ptr %105, ptr %7, align 8, !tbaa !9
  br label %139

106:                                              ; preds = %62
  store i32 1, ptr %15, align 4, !tbaa !5
  br label %139

107:                                              ; preds = %62
  %108 = load ptr, ptr @optarg, align 8, !tbaa !9
  %109 = call i32 @atoi(ptr noundef %108) #13
  store i32 %109, ptr %17, align 4, !tbaa !5
  br label %139

110:                                              ; preds = %62
  %111 = load ptr, ptr @optarg, align 8, !tbaa !9
  %112 = call i32 @atoi(ptr noundef %111) #13
  store i32 %112, ptr %18, align 4, !tbaa !5
  br label %139

113:                                              ; preds = %62
  %114 = load ptr, ptr @optarg, align 8, !tbaa !9
  %115 = call i32 @atoi(ptr noundef %114) #13
  store i32 %115, ptr %19, align 4, !tbaa !5
  br label %139

116:                                              ; preds = %62
  %117 = load ptr, ptr @optarg, align 8, !tbaa !9
  %118 = call i32 @atoi(ptr noundef %117) #13
  store i32 %118, ptr %20, align 4, !tbaa !5
  br label %139

119:                                              ; preds = %62
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #12
  %120 = load ptr, ptr @optarg, align 8, !tbaa !9
  %121 = call double @atof(ptr noundef %120) #13
  %122 = fptrunc double %121 to float
  store float %122, ptr %27, align 4, !tbaa !11
  %123 = load float, ptr %27, align 4, !tbaa !11
  %124 = fcmp olt float %123, 0.000000e+00
  br i1 %124, label %125, label %126

125:                                              ; preds = %119
  store float -2.000000e+00, ptr %21, align 4, !tbaa !11
  br label %128

126:                                              ; preds = %119
  %127 = load float, ptr %27, align 4, !tbaa !11
  store float %127, ptr %21, align 4, !tbaa !11
  br label %128

128:                                              ; preds = %126, %125
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #12
  br label %139

129:                                              ; preds = %62
  %130 = load ptr, ptr @optarg, align 8, !tbaa !9
  store ptr %130, ptr %9, align 8, !tbaa !9
  br label %139

131:                                              ; preds = %62
  %132 = load ptr, ptr @optarg, align 8, !tbaa !9
  %133 = call i32 @atoi(ptr noundef %132) #13
  store i32 %133, ptr %14, align 4, !tbaa !5
  br label %139

134:                                              ; preds = %62
  %135 = load ptr, ptr %5, align 8, !tbaa !9
  %136 = getelementptr inbounds ptr, ptr %135, i64 0
  %137 = load ptr, ptr %136, align 8, !tbaa !9
  call void @print_usage(ptr noundef %137)
  store i32 1, ptr %3, align 4
  store i32 1, ptr %28, align 4
  br label %684

138:                                              ; preds = %62
  call void @abort() #14
  unreachable

139:                                              ; preds = %131, %129, %128, %116, %113, %110, %107, %106, %104, %102, %101, %67, %64
  br label %57, !llvm.loop !18

140:                                              ; preds = %57
  %141 = load i32, ptr %13, align 4, !tbaa !5
  %142 = icmp slt i32 %141, 1
  br i1 %142, label %143, label %149

143:                                              ; preds = %140
  %144 = load ptr, ptr @stderr, align 8, !tbaa !9
  %145 = load i32, ptr %13, align 4, !tbaa !5
  %146 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %144, ptr noundef @.str.53, i32 noundef %145) #12
  %147 = load ptr, ptr @stderr, align 8, !tbaa !9
  %148 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %147, ptr noundef @.str.54) #12
  call void @exit(i32 noundef 1) #14
  unreachable

149:                                              ; preds = %140
  %150 = load i64, ptr %23, align 8, !tbaa !13
  %151 = icmp slt i64 %150, 0
  br i1 %151, label %152, label %158

152:                                              ; preds = %149
  %153 = load ptr, ptr @stderr, align 8, !tbaa !9
  %154 = load i64, ptr %23, align 8, !tbaa !13
  %155 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %153, ptr noundef @.str.55, i64 noundef %154) #12
  %156 = load ptr, ptr @stderr, align 8, !tbaa !9
  %157 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %156, ptr noundef @.str.56) #12
  call void @exit(i32 noundef 1) #14
  unreachable

158:                                              ; preds = %149
  %159 = load i32, ptr %22, align 4, !tbaa !5
  %160 = icmp slt i32 %159, 1
  br i1 %160, label %161, label %167

161:                                              ; preds = %158
  %162 = load ptr, ptr @stderr, align 8, !tbaa !9
  %163 = load i32, ptr %22, align 4, !tbaa !5
  %164 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %162, ptr noundef @.str.57, i32 noundef %163) #12
  %165 = load ptr, ptr @stderr, align 8, !tbaa !9
  %166 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %165, ptr noundef @.str.58) #12
  call void @exit(i32 noundef 1) #14
  unreachable

167:                                              ; preds = %158
  %168 = load i32, ptr %19, align 4, !tbaa !5
  %169 = icmp slt i32 %168, 0
  br i1 %169, label %170, label %176

170:                                              ; preds = %167
  %171 = load ptr, ptr @stderr, align 8, !tbaa !9
  %172 = load i32, ptr %19, align 4, !tbaa !5
  %173 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %171, ptr noundef @.str.59, i32 noundef %172) #12
  %174 = load ptr, ptr @stderr, align 8, !tbaa !9
  %175 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %174, ptr noundef @.str.60) #12
  call void @exit(i32 noundef 1) #14
  unreachable

176:                                              ; preds = %167
  %177 = load float, ptr %21, align 4, !tbaa !11
  %178 = fcmp oeq float %177, -2.000000e+00
  br i1 %178, label %179, label %186

179:                                              ; preds = %176
  %180 = load ptr, ptr @stderr, align 8, !tbaa !9
  %181 = load float, ptr %21, align 4, !tbaa !11
  %182 = fpext float %181 to double
  %183 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %180, ptr noundef @.str.61, double noundef %182) #12
  %184 = load ptr, ptr @stderr, align 8, !tbaa !9
  %185 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %184, ptr noundef @.str.62) #12
  call void @exit(i32 noundef 1) #14
  unreachable

186:                                              ; preds = %176
  %187 = load float, ptr %21, align 4, !tbaa !11
  %188 = fcmp une float %187, -1.000000e+00
  br i1 %188, label %189, label %195

189:                                              ; preds = %186
  %190 = load ptr, ptr %9, align 8, !tbaa !9
  %191 = icmp eq ptr %190, null
  br i1 %191, label %192, label %195

192:                                              ; preds = %189
  %193 = load ptr, ptr @stderr, align 8, !tbaa !9
  %194 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %193, ptr noundef @.str.63) #12
  call void @exit(i32 noundef 1) #14
  unreachable

195:                                              ; preds = %189, %186
  %196 = load float, ptr %21, align 4, !tbaa !11
  %197 = fcmp oeq float %196, -1.000000e+00
  br i1 %197, label %198, label %204

198:                                              ; preds = %195
  %199 = load ptr, ptr %9, align 8, !tbaa !9
  %200 = icmp ne ptr %199, null
  br i1 %200, label %201, label %204

201:                                              ; preds = %198
  %202 = load ptr, ptr @stderr, align 8, !tbaa !9
  %203 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %202, ptr noundef @.str.64) #12
  call void @exit(i32 noundef 1) #14
  unreachable

204:                                              ; preds = %198, %195
  %205 = load i32, ptr %20, align 4, !tbaa !5
  %206 = icmp slt i32 %205, 0
  br i1 %206, label %207, label %213

207:                                              ; preds = %204
  %208 = load ptr, ptr @stderr, align 8, !tbaa !9
  %209 = load i32, ptr %20, align 4, !tbaa !5
  %210 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %208, ptr noundef @.str.65, i32 noundef %209) #12
  %211 = load ptr, ptr @stderr, align 8, !tbaa !9
  %212 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %211, ptr noundef @.str.60) #12
  call void @exit(i32 noundef 1) #14
  unreachable

213:                                              ; preds = %204
  %214 = load ptr, ptr %7, align 8, !tbaa !9
  %215 = icmp ne ptr %214, null
  br i1 %215, label %216, label %222

216:                                              ; preds = %213
  %217 = load ptr, ptr %12, align 8, !tbaa !9
  %218 = icmp ne ptr %217, null
  br i1 %218, label %222, label %219

219:                                              ; preds = %216
  %220 = load ptr, ptr @stderr, align 8, !tbaa !9
  %221 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %220, ptr noundef @.str.66) #12
  call void @exit(i32 noundef 1) #14
  unreachable

222:                                              ; preds = %216, %213
  %223 = load ptr, ptr %7, align 8, !tbaa !9
  %224 = icmp ne ptr %223, null
  br i1 %224, label %231, label %225

225:                                              ; preds = %222
  %226 = load ptr, ptr %12, align 8, !tbaa !9
  %227 = icmp ne ptr %226, null
  br i1 %227, label %228, label %231

228:                                              ; preds = %225
  %229 = load ptr, ptr @stderr, align 8, !tbaa !9
  %230 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %229, ptr noundef @.str.67) #12
  call void @exit(i32 noundef 1) #14
  unreachable

231:                                              ; preds = %225, %222
  %232 = load float, ptr %21, align 4, !tbaa !11
  %233 = fcmp oeq float %232, -1.000000e+00
  br i1 %233, label %234, label %235

234:                                              ; preds = %231
  store float 0.000000e+00, ptr %21, align 4, !tbaa !11
  br label %235

235:                                              ; preds = %234, %231
  %236 = load i32, ptr %4, align 4, !tbaa !5
  %237 = load i32, ptr @optind, align 4, !tbaa !5
  %238 = sub nsw i32 %236, %237
  %239 = icmp slt i32 %238, 2
  br i1 %239, label %245, label %240

240:                                              ; preds = %235
  %241 = load i32, ptr %4, align 4, !tbaa !5
  %242 = load i32, ptr @optind, align 4, !tbaa !5
  %243 = sub nsw i32 %241, %242
  %244 = icmp sgt i32 %243, 3
  br i1 %244, label %245, label %249

245:                                              ; preds = %240, %235
  %246 = load ptr, ptr %5, align 8, !tbaa !9
  %247 = getelementptr inbounds ptr, ptr %246, i64 0
  %248 = load ptr, ptr %247, align 8, !tbaa !9
  call void @print_usage(ptr noundef %248)
  store i32 1, ptr %3, align 4
  store i32 1, ptr %28, align 4
  br label %684

249:                                              ; preds = %240
  %250 = load ptr, ptr %5, align 8, !tbaa !9
  %251 = load i32, ptr @optind, align 4, !tbaa !5
  %252 = sext i32 %251 to i64
  %253 = getelementptr inbounds ptr, ptr %250, i64 %252
  %254 = load ptr, ptr %253, align 8, !tbaa !9
  %255 = call i32 @atoi(ptr noundef %254) #13
  store i32 %255, ptr %16, align 4, !tbaa !5
  %256 = load ptr, ptr %5, align 8, !tbaa !9
  %257 = load i32, ptr @optind, align 4, !tbaa !5
  %258 = add nsw i32 %257, 1
  %259 = sext i32 %258 to i64
  %260 = getelementptr inbounds ptr, ptr %256, i64 %259
  %261 = load ptr, ptr %260, align 8, !tbaa !9
  store ptr %261, ptr %6, align 8, !tbaa !9
  %262 = load i32, ptr %4, align 4, !tbaa !5
  %263 = load i32, ptr @optind, align 4, !tbaa !5
  %264 = sub nsw i32 %262, %263
  %265 = icmp eq i32 %264, 3
  br i1 %265, label %266, label %273

266:                                              ; preds = %249
  %267 = load ptr, ptr %5, align 8, !tbaa !9
  %268 = load i32, ptr @optind, align 4, !tbaa !5
  %269 = add nsw i32 %268, 2
  %270 = sext i32 %269 to i64
  %271 = getelementptr inbounds ptr, ptr %267, i64 %270
  %272 = load ptr, ptr %271, align 8, !tbaa !9
  store ptr %272, ptr %8, align 8, !tbaa !9
  br label %273

273:                                              ; preds = %266, %249
  %274 = load ptr, ptr %6, align 8, !tbaa !9
  %275 = call noalias ptr @fopen(ptr noundef %274, ptr noundef @.str)
  store ptr %275, ptr %11, align 8, !tbaa !9
  %276 = load ptr, ptr %11, align 8, !tbaa !9
  %277 = icmp ne ptr %276, null
  br i1 %277, label %282, label %278

278:                                              ; preds = %273
  %279 = load ptr, ptr @stderr, align 8, !tbaa !9
  %280 = load ptr, ptr %6, align 8, !tbaa !9
  %281 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %279, ptr noundef @.str.1, ptr noundef %280) #12
  call void @exit(i32 noundef 1) #14
  unreachable

282:                                              ; preds = %273
  call void @llvm.lifetime.start.p0(i64 112, ptr %29) #12
  %283 = load ptr, ptr %8, align 8, !tbaa !9
  %284 = load i64, ptr %23, align 8, !tbaa !13
  %285 = load i32, ptr %22, align 4, !tbaa !5
  %286 = load i32, ptr %19, align 4, !tbaa !5
  %287 = icmp ne i32 %286, 0
  %288 = xor i1 %287, true
  %289 = xor i1 %288, true
  %290 = zext i1 %289 to i32
  %291 = load i32, ptr %15, align 4, !tbaa !5
  call void @init_output(ptr noundef %29, ptr noundef %283, i64 noundef %284, i32 noundef %285, i32 noundef %290, i32 noundef %291)
  call void @llvm.lifetime.start.p0(i64 24, ptr %30) #12
  call void @llvm.memset.p0.i64(ptr align 8 %30, i8 0, i64 24, i1 false)
  %292 = load ptr, ptr %11, align 8, !tbaa !9
  %293 = load i32, ptr %14, align 4, !tbaa !5
  %294 = icmp ne i32 %293, 0
  %295 = xor i1 %294, true
  %296 = xor i1 %295, true
  %297 = zext i1 %296 to i32
  %298 = load i32, ptr %19, align 4, !tbaa !5
  %299 = icmp ne i32 %298, 0
  %300 = xor i1 %299, true
  %301 = xor i1 %300, true
  %302 = zext i1 %301 to i32
  %303 = load i32, ptr %15, align 4, !tbaa !5
  call void @read_database_file(ptr noundef %292, ptr noundef %30, i32 noundef %297, i32 noundef %302, i32 noundef %303, i32 noundef 1, ptr noundef null, ptr noundef %29)
  %304 = load ptr, ptr %11, align 8, !tbaa !9
  %305 = call i32 @fclose(ptr noundef %304)
  %306 = load i32, ptr %16, align 4, !tbaa !5
  %307 = icmp slt i32 %306, 1
  br i1 %307, label %308, label %313

308:                                              ; preds = %282
  %309 = getelementptr inbounds %struct.database_t, ptr %30, i32 0, i32 1
  %310 = load i32, ptr %309, align 8, !tbaa !19
  %311 = load i32, ptr %16, align 4, !tbaa !5
  %312 = add i32 %310, %311
  store i32 %312, ptr %16, align 4, !tbaa !5
  br label %313

313:                                              ; preds = %308, %282
  %314 = load i32, ptr %17, align 4, !tbaa !5
  %315 = icmp slt i32 %314, 1
  br i1 %315, label %316, label %320

316:                                              ; preds = %313
  %317 = load i32, ptr %16, align 4, !tbaa !5
  %318 = load i32, ptr %17, align 4, !tbaa !5
  %319 = add nsw i32 %317, %318
  store i32 %319, ptr %17, align 4, !tbaa !5
  br label %320

320:                                              ; preds = %316, %313
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #12
  %321 = getelementptr inbounds %struct.database_t, ptr %30, i32 0, i32 3
  %322 = load i32, ptr %321, align 8, !tbaa !21
  store i32 %322, ptr %31, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 24, ptr %32) #12
  call void @llvm.memset.p0.i64(ptr align 8 %32, i8 0, i64 24, i1 false)
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #12
  store ptr null, ptr %33, align 8, !tbaa !9
  %323 = load ptr, ptr %7, align 8, !tbaa !9
  %324 = icmp ne ptr %323, null
  br i1 %324, label %325, label %364

325:                                              ; preds = %320
  %326 = load ptr, ptr %12, align 8, !tbaa !9
  %327 = icmp ne ptr %326, null
  br i1 %327, label %328, label %364

328:                                              ; preds = %325
  %329 = load ptr, ptr %7, align 8, !tbaa !9
  %330 = call noalias ptr @fopen(ptr noundef %329, ptr noundef @.str)
  store ptr %330, ptr %10, align 8, !tbaa !9
  %331 = load ptr, ptr %10, align 8, !tbaa !9
  %332 = icmp ne ptr %331, null
  br i1 %332, label %337, label %333

333:                                              ; preds = %328
  %334 = load ptr, ptr @stderr, align 8, !tbaa !9
  %335 = load ptr, ptr %7, align 8, !tbaa !9
  %336 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %334, ptr noundef @.str.1, ptr noundef %335) #12
  call void @exit(i32 noundef 1) #14
  unreachable

337:                                              ; preds = %328
  %338 = load ptr, ptr %10, align 8, !tbaa !9
  %339 = load i32, ptr %14, align 4, !tbaa !5
  %340 = icmp ne i32 %339, 0
  %341 = xor i1 %340, true
  %342 = xor i1 %341, true
  %343 = zext i1 %342 to i32
  %344 = load i32, ptr %19, align 4, !tbaa !5
  %345 = icmp ne i32 %344, 0
  %346 = xor i1 %345, true
  %347 = xor i1 %346, true
  %348 = zext i1 %347 to i32
  %349 = load i32, ptr %15, align 4, !tbaa !5
  %350 = load ptr, ptr %12, align 8, !tbaa !9
  call void @read_database_file(ptr noundef %338, ptr noundef %32, i32 noundef %343, i32 noundef %348, i32 noundef %349, i32 noundef 0, ptr noundef %350, ptr noundef null)
  %351 = load ptr, ptr %10, align 8, !tbaa !9
  %352 = call i32 @fclose(ptr noundef %351)
  store ptr %32, ptr %33, align 8, !tbaa !9
  %353 = load i32, ptr %31, align 4, !tbaa !5
  %354 = getelementptr inbounds %struct.database_t, ptr %32, i32 0, i32 3
  %355 = load i32, ptr %354, align 8, !tbaa !21
  %356 = icmp uge i32 %353, %355
  br i1 %356, label %357, label %359

357:                                              ; preds = %337
  %358 = load i32, ptr %31, align 4, !tbaa !5
  br label %362

359:                                              ; preds = %337
  %360 = getelementptr inbounds %struct.database_t, ptr %32, i32 0, i32 3
  %361 = load i32, ptr %360, align 8, !tbaa !21
  br label %362

362:                                              ; preds = %359, %357
  %363 = phi i32 [ %358, %357 ], [ %361, %359 ]
  store i32 %363, ptr %31, align 4, !tbaa !5
  br label %364

364:                                              ; preds = %362, %325, %320
  %365 = load i32, ptr %16, align 4, !tbaa !5
  %366 = icmp slt i32 %365, 1
  br i1 %366, label %372, label %367

367:                                              ; preds = %364
  %368 = load i32, ptr %16, align 4, !tbaa !5
  %369 = getelementptr inbounds %struct.database_t, ptr %30, i32 0, i32 1
  %370 = load i32, ptr %369, align 8, !tbaa !19
  %371 = icmp ugt i32 %368, %370
  br i1 %371, label %372, label %376

372:                                              ; preds = %367, %364
  %373 = load ptr, ptr @stderr, align 8, !tbaa !9
  %374 = load i32, ptr %16, align 4, !tbaa !5
  %375 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %373, ptr noundef @.str.68, i32 noundef %374) #12
  call void @exit(i32 noundef 1) #14
  unreachable

376:                                              ; preds = %367
  %377 = load i32, ptr %17, align 4, !tbaa !5
  %378 = icmp slt i32 %377, 1
  br i1 %378, label %384, label %379

379:                                              ; preds = %376
  %380 = load i32, ptr %17, align 4, !tbaa !5
  %381 = getelementptr inbounds %struct.database_t, ptr %30, i32 0, i32 1
  %382 = load i32, ptr %381, align 8, !tbaa !19
  %383 = icmp ugt i32 %380, %382
  br i1 %383, label %384, label %388

384:                                              ; preds = %379, %376
  %385 = load ptr, ptr @stderr, align 8, !tbaa !9
  %386 = load i32, ptr %17, align 4, !tbaa !5
  %387 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %385, ptr noundef @.str.69, i32 noundef %386) #12
  call void @exit(i32 noundef 1) #14
  unreachable

388:                                              ; preds = %379
  %389 = load i32, ptr %16, align 4, !tbaa !5
  %390 = load i32, ptr %17, align 4, !tbaa !5
  %391 = icmp slt i32 %389, %390
  br i1 %391, label %392, label %395

392:                                              ; preds = %388
  %393 = load ptr, ptr @stderr, align 8, !tbaa !9
  %394 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %393, ptr noundef @.str.70) #12
  call void @exit(i32 noundef 1) #14
  unreachable

395:                                              ; preds = %388
  %396 = load i32, ptr %17, align 4, !tbaa !5
  %397 = load i32, ptr %16, align 4, !tbaa !5
  %398 = load i32, ptr %18, align 4, !tbaa !5
  %399 = sub nsw i32 %397, %398
  %400 = icmp sgt i32 %396, %399
  br i1 %400, label %401, label %407

401:                                              ; preds = %395
  %402 = load ptr, ptr @stderr, align 8, !tbaa !9
  %403 = load i32, ptr %18, align 4, !tbaa !5
  %404 = load i32, ptr %16, align 4, !tbaa !5
  %405 = load i32, ptr %17, align 4, !tbaa !5
  %406 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %402, ptr noundef @.str.71, i32 noundef %403, i32 noundef %404, i32 noundef %405) #12
  call void @exit(i32 noundef 1) #14
  unreachable

407:                                              ; preds = %395
  %408 = load ptr, ptr %6, align 8, !tbaa !9
  %409 = call i32 (ptr, ...) @printf(ptr noundef @.str.72, ptr noundef %408)
  %410 = getelementptr inbounds %struct.database_t, ptr %30, i32 0, i32 1
  %411 = load i32, ptr %410, align 8, !tbaa !19
  %412 = call i32 (ptr, ...) @printf(ptr noundef @.str.73, i32 noundef %411)
  %413 = load i32, ptr %16, align 4, !tbaa !5
  %414 = call i32 (ptr, ...) @printf(ptr noundef @.str.74, i32 noundef %413)
  %415 = load i32, ptr %17, align 4, !tbaa !5
  %416 = load i32, ptr %16, align 4, !tbaa !5
  %417 = icmp slt i32 %415, %416
  br i1 %417, label %418, label %426

418:                                              ; preds = %407
  %419 = load i32, ptr %18, align 4, !tbaa !5
  %420 = icmp sgt i32 %419, 0
  br i1 %420, label %421, label %426

421:                                              ; preds = %418
  %422 = load i32, ptr %17, align 4, !tbaa !5
  %423 = call i32 (ptr, ...) @printf(ptr noundef @.str.75, i32 noundef %422)
  %424 = load i32, ptr %18, align 4, !tbaa !5
  %425 = call i32 (ptr, ...) @printf(ptr noundef @.str.76, i32 noundef %424)
  br label %426

426:                                              ; preds = %421, %418, %407
  %427 = load ptr, ptr %9, align 8, !tbaa !9
  %428 = icmp ne ptr %427, null
  br i1 %428, label %429, label %435

429:                                              ; preds = %426
  %430 = load ptr, ptr %9, align 8, !tbaa !9
  %431 = call i32 (ptr, ...) @printf(ptr noundef @.str.77, ptr noundef %430)
  %432 = load float, ptr %21, align 4, !tbaa !11
  %433 = fpext float %432 to double
  %434 = call i32 (ptr, ...) @printf(ptr noundef @.str.78, double noundef %433)
  br label %435

435:                                              ; preds = %429, %426
  %436 = load ptr, ptr %7, align 8, !tbaa !9
  %437 = icmp ne ptr %436, null
  br i1 %437, label %438, label %448

438:                                              ; preds = %435
  %439 = load ptr, ptr %7, align 8, !tbaa !9
  %440 = call i32 (ptr, ...) @printf(ptr noundef @.str.79, ptr noundef %439)
  %441 = load ptr, ptr %12, align 8, !tbaa !9
  %442 = call i32 (ptr, ...) @printf(ptr noundef @.str.80, ptr noundef %441)
  %443 = getelementptr inbounds %struct.database_t, ptr %32, i32 0, i32 2
  %444 = load i32, ptr %443, align 4, !tbaa !22
  %445 = getelementptr inbounds %struct.database_t, ptr %32, i32 0, i32 1
  %446 = load i32, ptr %445, align 8, !tbaa !19
  %447 = call i32 (ptr, ...) @printf(ptr noundef @.str.81, i32 noundef %444, i32 noundef %446)
  br label %448

448:                                              ; preds = %438, %435
  %449 = load ptr, ptr %8, align 8, !tbaa !9
  %450 = icmp ne ptr %449, null
  br i1 %450, label %451, label %464

451:                                              ; preds = %448
  %452 = load ptr, ptr %8, align 8, !tbaa !9
  %453 = call i32 (ptr, ...) @printf(ptr noundef @.str.82, ptr noundef %452)
  %454 = load i64, ptr %23, align 8, !tbaa !13
  %455 = sdiv i64 %454, 1000000
  %456 = load i64, ptr %23, align 8, !tbaa !13
  %457 = call i32 (ptr, ...) @printf(ptr noundef @.str.83, i64 noundef %455, i64 noundef %456)
  %458 = load i32, ptr %22, align 4, !tbaa !5
  %459 = icmp sgt i32 %458, 1
  br i1 %459, label %460, label %463

460:                                              ; preds = %451
  %461 = load i32, ptr %22, align 4, !tbaa !5
  %462 = call i32 (ptr, ...) @printf(ptr noundef @.str.84, i32 noundef %461)
  br label %463

463:                                              ; preds = %460, %451
  br label %464

464:                                              ; preds = %463, %448
  %465 = load ptr, ptr @stdout, align 8, !tbaa !9
  %466 = call i32 @fflush(ptr noundef %465)
  call void @llvm.lifetime.start.p0(i64 40, ptr %34) #12
  call void @llvm.memset.p0.i64(ptr align 8 %34, i8 0, i64 40, i1 false)
  %467 = load i32, ptr %16, align 4, !tbaa !5
  %468 = getelementptr inbounds %struct.config_t, ptr %34, i32 0, i32 0
  store i32 %467, ptr %468, align 8, !tbaa !23
  %469 = load i32, ptr %17, align 4, !tbaa !5
  %470 = getelementptr inbounds %struct.config_t, ptr %34, i32 0, i32 2
  store i32 %469, ptr %470, align 8, !tbaa !26
  %471 = load i32, ptr %18, align 4, !tbaa !5
  %472 = getelementptr inbounds %struct.config_t, ptr %34, i32 0, i32 1
  store i32 %471, ptr %472, align 4, !tbaa !27
  %473 = load float, ptr %21, align 4, !tbaa !11
  %474 = getelementptr inbounds %struct.config_t, ptr %34, i32 0, i32 5
  store float %473, ptr %474, align 4, !tbaa !28
  %475 = load i32, ptr %19, align 4, !tbaa !5
  %476 = getelementptr inbounds %struct.config_t, ptr %34, i32 0, i32 3
  store i32 %475, ptr %476, align 4, !tbaa !29
  %477 = load i32, ptr %20, align 4, !tbaa !5
  %478 = getelementptr inbounds %struct.config_t, ptr %34, i32 0, i32 4
  store i32 %477, ptr %478, align 8, !tbaa !30
  %479 = load ptr, ptr %9, align 8, !tbaa !9
  %480 = icmp ne ptr %479, null
  br i1 %480, label %481, label %490

481:                                              ; preds = %464
  %482 = getelementptr inbounds %struct.config_t, ptr %34, i32 0, i32 6
  call void @llvm.lifetime.start.p0(i64 16, ptr %35) #12
  %483 = load i32, ptr %31, align 4, !tbaa !5
  %484 = load ptr, ptr %9, align 8, !tbaa !9
  %485 = call { ptr, i32 } @parse_mismatch_matrix(i32 noundef %483, ptr noundef %484)
  %486 = getelementptr inbounds { ptr, i32 }, ptr %35, i32 0, i32 0
  %487 = extractvalue { ptr, i32 } %485, 0
  store ptr %487, ptr %486, align 8
  %488 = getelementptr inbounds { ptr, i32 }, ptr %35, i32 0, i32 1
  %489 = extractvalue { ptr, i32 } %485, 1
  store i32 %489, ptr %488, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %482, ptr align 8 %35, i64 16, i1 false), !tbaa.struct !31
  call void @llvm.lifetime.end.p0(i64 16, ptr %35) #12
  br label %498

490:                                              ; preds = %464
  %491 = getelementptr inbounds %struct.config_t, ptr %34, i32 0, i32 6
  call void @llvm.lifetime.start.p0(i64 16, ptr %36) #12
  %492 = load i32, ptr %31, align 4, !tbaa !5
  %493 = call { ptr, i32 } @generate_default_mismatch_matrix(i32 noundef %492)
  %494 = getelementptr inbounds { ptr, i32 }, ptr %36, i32 0, i32 0
  %495 = extractvalue { ptr, i32 } %493, 0
  store ptr %495, ptr %494, align 8
  %496 = getelementptr inbounds { ptr, i32 }, ptr %36, i32 0, i32 1
  %497 = extractvalue { ptr, i32 } %493, 1
  store i32 %497, ptr %496, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %491, ptr align 8 %36, i64 16, i1 false), !tbaa.struct !31
  call void @llvm.lifetime.end.p0(i64 16, ptr %36) #12
  br label %498

498:                                              ; preds = %490, %481
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #12
  %499 = getelementptr inbounds %struct.database_t, ptr %30, i32 0, i32 1
  %500 = load i32, ptr %499, align 8, !tbaa !19
  %501 = load i32, ptr %16, align 4, !tbaa !5
  %502 = sub i32 %500, %501
  store i32 %502, ptr %37, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #12
  %503 = getelementptr inbounds %struct.database_t, ptr %30, i32 0, i32 0
  %504 = load ptr, ptr %503, align 8, !tbaa !32
  %505 = load i32, ptr %37, align 4, !tbaa !5
  %506 = zext i32 %505 to i64
  %507 = getelementptr inbounds %struct.database_entry_t, ptr %504, i64 %506
  %508 = getelementptr inbounds %struct.database_entry_t, ptr %507, i32 0, i32 5
  %509 = load i32, ptr %508, align 8, !tbaa !33
  store i32 %509, ptr %38, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #12
  %510 = load i32, ptr %38, align 4, !tbaa !5
  %511 = add i32 %510, 1
  %512 = zext i32 %511 to i64
  %513 = call noalias ptr @calloc(i64 noundef %512, i64 noundef 4) #15
  store ptr %513, ptr %39, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #12
  store i32 0, ptr %40, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #12
  store i32 0, ptr %41, align 4, !tbaa !5
  br label %514

514:                                              ; preds = %613, %498
  %515 = load i32, ptr %41, align 4, !tbaa !5
  %516 = getelementptr inbounds %struct.database_t, ptr %30, i32 0, i32 1
  %517 = load i32, ptr %516, align 8, !tbaa !19
  %518 = icmp ult i32 %515, %517
  br i1 %518, label %520, label %519

519:                                              ; preds = %514
  store i32 9, ptr %28, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #12
  br label %616

520:                                              ; preds = %514
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #12
  %521 = getelementptr inbounds %struct.database_t, ptr %30, i32 0, i32 0
  %522 = load ptr, ptr %521, align 8, !tbaa !32
  %523 = load i32, ptr %41, align 4, !tbaa !5
  %524 = zext i32 %523 to i64
  %525 = getelementptr inbounds %struct.database_entry_t, ptr %522, i64 %524
  store ptr %525, ptr %42, align 8, !tbaa !9
  %526 = load ptr, ptr %42, align 8, !tbaa !9
  %527 = getelementptr inbounds %struct.database_entry_t, ptr %526, i32 0, i32 6
  %528 = load i32, ptr %527, align 4, !tbaa !35
  %529 = load i32, ptr %40, align 4, !tbaa !5
  %530 = add i32 %529, %528
  store i32 %530, ptr %40, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #12
  %531 = load ptr, ptr %42, align 8, !tbaa !9
  %532 = getelementptr inbounds %struct.database_entry_t, ptr %531, i32 0, i32 5
  %533 = load i32, ptr %532, align 8, !tbaa !33
  %534 = zext i32 %533 to i64
  %535 = mul i64 %534, 4
  %536 = call noalias ptr @malloc(i64 noundef %535) #16
  store ptr %536, ptr %43, align 8, !tbaa !9
  %537 = load ptr, ptr %43, align 8, !tbaa !9
  %538 = load ptr, ptr %42, align 8, !tbaa !9
  %539 = getelementptr inbounds %struct.database_entry_t, ptr %538, i32 0, i32 1
  %540 = load ptr, ptr %539, align 8, !tbaa !36
  %541 = load ptr, ptr %42, align 8, !tbaa !9
  %542 = getelementptr inbounds %struct.database_entry_t, ptr %541, i32 0, i32 5
  %543 = load i32, ptr %542, align 8, !tbaa !33
  %544 = zext i32 %543 to i64
  %545 = mul i64 %544, 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %537, ptr align 4 %540, i64 %545, i1 false)
  %546 = load ptr, ptr %43, align 8, !tbaa !9
  %547 = load ptr, ptr %42, align 8, !tbaa !9
  %548 = getelementptr inbounds %struct.database_entry_t, ptr %547, i32 0, i32 5
  %549 = load i32, ptr %548, align 8, !tbaa !33
  %550 = zext i32 %549 to i64
  call void @qsort(ptr noundef %546, i64 noundef %550, i64 noundef 4, ptr noundef @vertex_degree_compare_desc)
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #12
  store i32 2, ptr %44, align 4, !tbaa !5
  br label %551

551:                                              ; preds = %607, %520
  %552 = load i32, ptr %44, align 4, !tbaa !5
  %553 = load i32, ptr %38, align 4, !tbaa !5
  %554 = icmp ule i32 %552, %553
  br i1 %554, label %556, label %555

555:                                              ; preds = %551
  store i32 12, ptr %28, align 4
  br label %610

556:                                              ; preds = %551
  %557 = load i32, ptr %44, align 4, !tbaa !5
  %558 = load ptr, ptr %42, align 8, !tbaa !9
  %559 = getelementptr inbounds %struct.database_entry_t, ptr %558, i32 0, i32 5
  %560 = load i32, ptr %559, align 8, !tbaa !33
  %561 = icmp ugt i32 %557, %560
  br i1 %561, label %562, label %563

562:                                              ; preds = %556
  store i32 12, ptr %28, align 4
  br label %610

563:                                              ; preds = %556
  call void @llvm.lifetime.start.p0(i64 4, ptr %45) #12
  store i32 0, ptr %45, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %46) #12
  store i32 0, ptr %46, align 4, !tbaa !5
  br label %564

564:                                              ; preds = %577, %563
  %565 = load i32, ptr %46, align 4, !tbaa !5
  %566 = load i32, ptr %44, align 4, !tbaa !5
  %567 = icmp ult i32 %565, %566
  br i1 %567, label %569, label %568

568:                                              ; preds = %564
  store i32 15, ptr %28, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #12
  br label %580

569:                                              ; preds = %564
  %570 = load ptr, ptr %43, align 8, !tbaa !9
  %571 = load i32, ptr %46, align 4, !tbaa !5
  %572 = zext i32 %571 to i64
  %573 = getelementptr inbounds i32, ptr %570, i64 %572
  %574 = load i32, ptr %573, align 4, !tbaa !5
  %575 = load i32, ptr %45, align 4, !tbaa !5
  %576 = add i32 %575, %574
  store i32 %576, ptr %45, align 4, !tbaa !5
  br label %577

577:                                              ; preds = %569
  %578 = load i32, ptr %46, align 4, !tbaa !5
  %579 = add i32 %578, 1
  store i32 %579, ptr %46, align 4, !tbaa !5
  br label %564, !llvm.loop !37

580:                                              ; preds = %568
  call void @llvm.lifetime.start.p0(i64 4, ptr %47) #12
  %581 = load i32, ptr %44, align 4, !tbaa !5
  %582 = sub i32 %581, 1
  %583 = mul i32 2, %582
  store i32 %583, ptr %47, align 4, !tbaa !5
  %584 = load i32, ptr %45, align 4, !tbaa !5
  %585 = load i32, ptr %47, align 4, !tbaa !5
  %586 = icmp ult i32 %584, %585
  br i1 %586, label %587, label %588

587:                                              ; preds = %580
  store i32 0, ptr %45, align 4, !tbaa !5
  br label %592

588:                                              ; preds = %580
  %589 = load i32, ptr %47, align 4, !tbaa !5
  %590 = load i32, ptr %45, align 4, !tbaa !5
  %591 = sub i32 %590, %589
  store i32 %591, ptr %45, align 4, !tbaa !5
  br label %592

592:                                              ; preds = %588, %587
  %593 = load i32, ptr %45, align 4, !tbaa !5
  %594 = load ptr, ptr %39, align 8, !tbaa !9
  %595 = load i32, ptr %44, align 4, !tbaa !5
  %596 = zext i32 %595 to i64
  %597 = getelementptr inbounds i32, ptr %594, i64 %596
  %598 = load i32, ptr %597, align 4, !tbaa !5
  %599 = icmp ugt i32 %593, %598
  br i1 %599, label %600, label %606

600:                                              ; preds = %592
  %601 = load i32, ptr %45, align 4, !tbaa !5
  %602 = load ptr, ptr %39, align 8, !tbaa !9
  %603 = load i32, ptr %44, align 4, !tbaa !5
  %604 = zext i32 %603 to i64
  %605 = getelementptr inbounds i32, ptr %602, i64 %604
  store i32 %601, ptr %605, align 4, !tbaa !5
  br label %606

606:                                              ; preds = %600, %592
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #12
  br label %607

607:                                              ; preds = %606
  %608 = load i32, ptr %44, align 4, !tbaa !5
  %609 = add i32 %608, 1
  store i32 %609, ptr %44, align 4, !tbaa !5
  br label %551, !llvm.loop !38

610:                                              ; preds = %562, %555
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #12
  br label %611

611:                                              ; preds = %610
  %612 = load ptr, ptr %43, align 8, !tbaa !9
  call void @free(ptr noundef %612) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #12
  br label %613

613:                                              ; preds = %611
  %614 = load i32, ptr %41, align 4, !tbaa !5
  %615 = add i32 %614, 1
  store i32 %615, ptr %41, align 4, !tbaa !5
  br label %514, !llvm.loop !39

616:                                              ; preds = %519
  call void @llvm.lifetime.start.p0(i64 40, ptr %48) #12
  %617 = load i32, ptr %40, align 4, !tbaa !5
  %618 = load ptr, ptr %39, align 8, !tbaa !9
  call void @init_extension_store(ptr noundef %48, i32 noundef %617, ptr noundef %618)
  call void @llvm.lifetime.start.p0(i64 8, ptr %49) #12
  %619 = load i32, ptr %13, align 4, !tbaa !5
  %620 = load ptr, ptr %33, align 8, !tbaa !9
  %621 = load i32, ptr %38, align 4, !tbaa !5
  %622 = load i32, ptr %40, align 4, !tbaa !5
  %623 = load ptr, ptr %39, align 8, !tbaa !9
  %624 = call ptr @setup_thread_data(i32 noundef %619, ptr noundef %34, ptr noundef %30, ptr noundef %620, ptr noundef %48, ptr noundef %29, i32 noundef %621, i32 noundef %622, ptr noundef %623)
  store ptr %624, ptr %49, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 24, ptr %50) #12
  call void @llvm.lifetime.start.p0(i64 24, ptr %51) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr %52) #12
  call void @llvm.lifetime.start.p0(i64 12, ptr %53) #12
  call void @llvm.lifetime.start.p0(i64 4, ptr %54) #12
  store i32 0, ptr %54, align 4, !tbaa !5
  %625 = load ptr, ptr %33, align 8, !tbaa !9
  %626 = load i32, ptr %13, align 4, !tbaa !5
  %627 = load ptr, ptr %49, align 8, !tbaa !9
  %628 = getelementptr inbounds [3 x i32], ptr %53, i64 0, i64 0
  call void @gspan_init(ptr noundef %30, ptr noundef %625, i32 noundef %626, ptr noundef %627, ptr noundef %50, ptr noundef %628, ptr noundef %52)
  call void @free_extension_store(ptr noundef %48)
  %629 = getelementptr inbounds %struct.subgraph_store_t, ptr %50, i32 0, i32 2
  %630 = load i32, ptr %629, align 8, !tbaa !40
  store i32 %630, ptr %54, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %55) #12
  store i32 1, ptr %55, align 4, !tbaa !5
  %631 = load i32, ptr %55, align 4, !tbaa !5
  %632 = getelementptr inbounds %struct.subgraph_store_t, ptr %50, i32 0, i32 2
  %633 = load i32, ptr %632, align 8, !tbaa !40
  %634 = getelementptr inbounds [3 x i32], ptr %53, i64 0, i64 0
  %635 = load i32, ptr %54, align 4, !tbaa !5
  %636 = load ptr, ptr %52, align 8, !tbaa !9
  %637 = load ptr, ptr %33, align 8, !tbaa !9
  call void @print_result(i32 noundef %631, i32 noundef %633, ptr noundef %634, i32 noundef %635, ptr noundef %636, ptr noundef %637)
  br label %638

638:                                              ; preds = %642, %616
  %639 = getelementptr inbounds %struct.subgraph_store_t, ptr %50, i32 0, i32 2
  %640 = load i32, ptr %639, align 8, !tbaa !40
  %641 = icmp ne i32 %640, 0
  br i1 %641, label %642, label %660

642:                                              ; preds = %638
  %643 = load i32, ptr %55, align 4, !tbaa !5
  %644 = add i32 %643, 1
  store i32 %644, ptr %55, align 4, !tbaa !5
  %645 = load ptr, ptr %33, align 8, !tbaa !9
  %646 = load i32, ptr %13, align 4, !tbaa !5
  %647 = load ptr, ptr %49, align 8, !tbaa !9
  %648 = getelementptr inbounds [3 x i32], ptr %53, i64 0, i64 0
  call void @gspan_step(ptr noundef %30, ptr noundef %645, i32 noundef %646, ptr noundef %647, ptr noundef %50, ptr noundef %51, ptr noundef %648, ptr noundef %52, ptr noundef %29)
  %649 = getelementptr inbounds %struct.subgraph_store_t, ptr %51, i32 0, i32 2
  %650 = load i32, ptr %649, align 8, !tbaa !40
  %651 = load i32, ptr %54, align 4, !tbaa !5
  %652 = add i32 %651, %650
  store i32 %652, ptr %54, align 4, !tbaa !5
  %653 = load i32, ptr %55, align 4, !tbaa !5
  %654 = getelementptr inbounds %struct.subgraph_store_t, ptr %51, i32 0, i32 2
  %655 = load i32, ptr %654, align 8, !tbaa !40
  %656 = getelementptr inbounds [3 x i32], ptr %53, i64 0, i64 0
  %657 = load i32, ptr %54, align 4, !tbaa !5
  %658 = load ptr, ptr %52, align 8, !tbaa !9
  %659 = load ptr, ptr %33, align 8, !tbaa !9
  call void @print_result(i32 noundef %653, i32 noundef %655, ptr noundef %656, i32 noundef %657, ptr noundef %658, ptr noundef %659)
  call void @free_subgraph_store(ptr noundef %50)
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %50, ptr align 8 %51, i64 24, i1 false), !tbaa.struct !42
  br label %638, !llvm.loop !43

660:                                              ; preds = %638
  call void @free_subgraph_store(ptr noundef %50)
  %661 = load ptr, ptr %49, align 8, !tbaa !9
  %662 = load i32, ptr %13, align 4, !tbaa !5
  %663 = load ptr, ptr %33, align 8, !tbaa !9
  %664 = icmp ne ptr %663, null
  %665 = xor i1 %664, true
  %666 = xor i1 %665, true
  %667 = zext i1 %666 to i32
  call void @free_thread_data(ptr noundef %661, i32 noundef %662, i32 noundef %667)
  %668 = load ptr, ptr %39, align 8, !tbaa !9
  call void @free(ptr noundef %668) #12
  %669 = call i32 (ptr, ...) @printf(ptr noundef @.str.19)
  %670 = load i32, ptr %54, align 4, !tbaa !5
  %671 = call i32 (ptr, ...) @printf(ptr noundef @.str.85, i32 noundef %670)
  %672 = load ptr, ptr @stdout, align 8, !tbaa !9
  %673 = call i32 @fflush(ptr noundef %672)
  call void @finalize_output(ptr noundef %29)
  call void @free_database(ptr noundef %30)
  %674 = load ptr, ptr %33, align 8, !tbaa !9
  %675 = icmp ne ptr %674, null
  br i1 %675, label %676, label %678

676:                                              ; preds = %660
  %677 = load ptr, ptr %33, align 8, !tbaa !9
  call void @free_database(ptr noundef %677)
  br label %678

678:                                              ; preds = %676, %660
  %679 = getelementptr inbounds %struct.config_t, ptr %34, i32 0, i32 6
  %680 = getelementptr inbounds { ptr, i32 }, ptr %679, i32 0, i32 0
  %681 = load ptr, ptr %680, align 8
  %682 = getelementptr inbounds { ptr, i32 }, ptr %679, i32 0, i32 1
  %683 = load i32, ptr %682, align 8
  call void @free_mismatch_matrix(ptr %681, i32 %683)
  store i32 0, ptr %3, align 4
  store i32 1, ptr %28, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %55) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %54) #12
  call void @llvm.lifetime.end.p0(i64 12, ptr %53) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr %51) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr %50) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #12
  call void @llvm.lifetime.end.p0(i64 40, ptr %48) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #12
  call void @llvm.lifetime.end.p0(i64 40, ptr %34) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr %32) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr %30) #12
  call void @llvm.lifetime.end.p0(i64 112, ptr %29) #12
  br label %684

684:                                              ; preds = %678, %245, %134
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #12
  %685 = load i32, ptr %3, align 4
  ret i32 %685
}

; Function Attrs: nounwind
declare ptr @setlocale(i32 noundef, ptr noundef) #5

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

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

; Function Attrs: inlinehint nounwind willreturn memory(read) uwtable
declare i64 @atol(ptr noundef nonnull) #11

; Function Attrs: inlinehint nounwind willreturn memory(read) uwtable
declare double @atof(ptr noundef nonnull) #11

; Function Attrs: noreturn nounwind
declare void @abort() #6

declare i32 @fclose(ptr noundef) #4

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @free_subgraph_store(ptr noundef) #10

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @free_database(ptr noundef) #10

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @free_mismatch_matrix(ptr, i32) #10

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

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

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


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

%struct.output_t = type { ptr, i32, i64, i64, i64, ptr, i32, %union.pthread_mutex_t, i32, i32, i32, i32 }
%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 }
%struct.database_t = type { ptr, i32, i32, i32 }
%struct.config_t = type { i32, i32, i32, i32, i32, float, %struct.mismatch_matrix_t }
%struct.mismatch_matrix_t = type { ptr, i32 }
%struct.extension_store_t = type { ptr, ptr, ptr, i32, i32, i32 }
%struct.subgraph_store_t = type { ptr, ptr, i32, i32 }
%struct.database_entry_t = type { ptr, ptr, ptr, i32, i32, i32, i32 }

@.str = external hidden unnamed_addr constant [2 x i8], align 1
@stderr = external local_unnamed_addr global ptr, align 8
@.str.1 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [2 x i8], align 1
@stdout = external local_unnamed_addr global ptr, align 8
@.str.51 = external hidden unnamed_addr constant [2 x i8], align 1
@opterr = external local_unnamed_addr global i32, align 4
@.str.52 = external hidden unnamed_addr constant [25 x i8], align 1
@optarg = external local_unnamed_addr global ptr, align 8
@.str.53 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.54 = external hidden unnamed_addr constant [35 x i8], align 1
@.str.55 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.56 = external hidden unnamed_addr constant [51 x i8], align 1
@.str.57 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.58 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.59 = external hidden unnamed_addr constant [41 x i8], align 1
@.str.60 = external hidden unnamed_addr constant [32 x i8], align 1
@.str.61 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.62 = external hidden unnamed_addr constant [32 x i8], align 1
@.str.63 = external hidden unnamed_addr constant [67 x i8], align 1
@.str.64 = external hidden unnamed_addr constant [67 x i8], align 1
@.str.65 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.66 = external hidden unnamed_addr constant [59 x i8], align 1
@.str.67 = external hidden unnamed_addr constant [59 x i8], align 1
@optind = external local_unnamed_addr global i32, align 4
@.str.68 = external hidden unnamed_addr constant [46 x i8], align 1
@.str.69 = external hidden unnamed_addr constant [51 x i8], align 1
@.str.70 = external hidden unnamed_addr constant [85 x i8], align 1
@.str.71 = external hidden unnamed_addr constant [143 x i8], align 1
@.str.72 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.73 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.74 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.75 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.76 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.77 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.78 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.79 = external hidden unnamed_addr constant [32 x i8], align 1
@.str.80 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.81 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.82 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.83 = external hidden unnamed_addr constant [46 x i8], align 1
@.str.84 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.85 = external hidden unnamed_addr constant [30 x i8], align 1

; Function Attrs: nounwind uwtable
declare dso_local { ptr, i32 } @generate_default_mismatch_matrix(i32 noundef) local_unnamed_addr #0

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

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

; Function Attrs: mustprogress nofree nounwind willreturn allockind("alloc,uninitialized") allocsize(0) memory(inaccessiblemem: readwrite)
declare noalias noundef ptr @malloc(i64 noundef) local_unnamed_addr #3

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

; Function Attrs: nounwind uwtable
declare dso_local { ptr, i32 } @parse_mismatch_matrix(i32 noundef, ptr noundef) local_unnamed_addr #0

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

; 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 nounwind willreturn allockind("free") memory(argmem: readwrite, inaccessiblemem: readwrite)
declare void @free(ptr allocptr nocapture noundef) local_unnamed_addr #6

; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #7

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

; Function Attrs: nounwind uwtable
declare dso_local void @init_output(ptr noundef, ptr noundef, i64 noundef, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #0

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

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

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

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

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

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

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

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

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @init_extension_store(ptr noundef, i32 noundef, ptr noundef) local_unnamed_addr #11

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

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @free_extension_store(ptr noundef) local_unnamed_addr #11

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

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

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

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

; Function Attrs: nounwind uwtable
define dso_local range(i32 0, 2) i32 @main(i32 noundef %0, ptr noundef %1) local_unnamed_addr #0 {
  %3 = alloca %struct.output_t, align 8
  %4 = alloca %struct.database_t, align 8
  %5 = alloca %struct.database_t, align 8
  %6 = alloca %struct.config_t, align 8
  %7 = alloca %struct.extension_store_t, align 8
  %8 = alloca %struct.subgraph_store_t, align 8
  %9 = alloca %struct.subgraph_store_t, align 8
  %10 = alloca ptr, align 8
  %11 = alloca [3 x i32], align 4
  %12 = tail call ptr @setlocale(i32 noundef 1, ptr noundef nonnull @.str.51) #15
  store i32 0, ptr @opterr, align 4, !tbaa !5
  br label %13

13:                                               ; preds = %.loopexit, %2
  %.0231 = phi i64 [ 500000000, %2 ], [ %.5, %.loopexit ]
  %.0229 = phi i32 [ 1, %2 ], [ %.1230, %.loopexit ]
  %.0226 = phi float [ -1.000000e+00, %2 ], [ %.2228, %.loopexit ]
  %.0223 = phi i32 [ 0, %2 ], [ %.1224, %.loopexit ]
  %.0219 = phi i32 [ 0, %2 ], [ %.1220, %.loopexit ]
  %.0217 = phi i32 [ 0, %2 ], [ %.1218, %.loopexit ]
  %.0215 = phi i32 [ 0, %2 ], [ %.1216, %.loopexit ]
  %.0212 = phi i32 [ 0, %2 ], [ %.1213, %.loopexit ]
  %.0210 = phi i32 [ 1, %2 ], [ %.1211, %.loopexit ]
  %.0208 = phi i32 [ 1, %2 ], [ %.1209, %.loopexit ]
  %.0206 = phi ptr [ null, %2 ], [ %.1207, %.loopexit ]
  %.0204 = phi ptr [ null, %2 ], [ %.1205, %.loopexit ]
  %.0199 = phi ptr [ null, %2 ], [ %.1200, %.loopexit ]
  %14 = tail call i32 @getopt(i32 noundef %0, ptr noundef %1, ptr noundef nonnull @.str.52) #15
  switch i32 %14, label %73 [
    i32 -1, label %82
    i32 116, label %15
    i32 111, label %18
    i32 102, label %21
    i32 99, label %45
    i32 108, label %47
    i32 114, label %.loopexit
    i32 97, label %49
    i32 100, label %52
    i32 105, label %55
    i32 115, label %58
    i32 109, label %61
    i32 120, label %66
    i32 121, label %68
    i32 63, label %71
  ]

15:                                               ; preds = %13
  %16 = load ptr, ptr @optarg, align 8, !tbaa !9
  %17 = tail call i32 @atoi(ptr nocapture noundef %16) #16
  br label %.loopexit

18:                                               ; preds = %13
  %19 = load ptr, ptr @optarg, align 8, !tbaa !9
  %20 = tail call i32 @atoi(ptr nocapture noundef %19) #16
  br label %.loopexit

21:                                               ; preds = %13
  %22 = load ptr, ptr @optarg, align 8, !tbaa !9
  %23 = tail call i64 @atol(ptr nocapture noundef %22) #16
  %24 = tail call i64 @strlen(ptr noundef nonnull dereferenceable(1) %22) #16
  %25 = trunc i64 %24 to i32
  %26 = icmp sgt i32 %25, 0
  br i1 %26, label %.lr.ph.preheader, label %.loopexit

.lr.ph.preheader:                                 ; preds = %21
  %wide.trip.count = and i64 %24, 2147483647
  %xtraiter = and i64 %24, 1
  %27 = icmp eq i64 %wide.trip.count, 1
  br i1 %27, label %.loopexit.loopexit.unr-lcssa, label %.lr.ph.preheader.new

.lr.ph.preheader.new:                             ; preds = %.lr.ph.preheader
  %unroll_iter = sub nsw i64 %wide.trip.count, %xtraiter
  br label %.lr.ph

.lr.ph:                                           ; preds = %44, %.lr.ph.preheader.new
  %indvars.iv = phi i64 [ 0, %.lr.ph.preheader.new ], [ %indvars.iv.next.1, %44 ]
  %.1232280 = phi i64 [ %23, %.lr.ph.preheader.new ], [ %.4.1, %44 ]
  %niter = phi i64 [ 0, %.lr.ph.preheader.new ], [ %niter.next.1, %44 ]
  %28 = getelementptr inbounds i8, ptr %22, i64 %indvars.iv
  %29 = load i8, ptr %28, align 1, !tbaa !11
  switch i8 %29, label %.lr.ph.1 [
    i8 71, label %30
    i8 103, label %30
    i8 77, label %32
    i8 109, label %32
    i8 75, label %34
    i8 107, label %34
  ]

30:                                               ; preds = %.lr.ph, %.lr.ph
  %31 = mul nsw i64 %.1232280, 1000
  br label %32

32:                                               ; preds = %30, %.lr.ph, %.lr.ph
  %.2233 = phi i64 [ %.1232280, %.lr.ph ], [ %.1232280, %.lr.ph ], [ %31, %30 ]
  %33 = mul nsw i64 %.2233, 1000
  br label %34

34:                                               ; preds = %32, %.lr.ph, %.lr.ph
  %.3234 = phi i64 [ %.1232280, %.lr.ph ], [ %.1232280, %.lr.ph ], [ %33, %32 ]
  %35 = mul nsw i64 %.3234, 1000
  br label %.lr.ph.1

.lr.ph.1:                                         ; preds = %.lr.ph, %34
  %.4 = phi i64 [ %.1232280, %.lr.ph ], [ %35, %34 ]
  %indvars.iv.next = or disjoint i64 %indvars.iv, 1
  %36 = getelementptr inbounds i8, ptr %22, i64 %indvars.iv.next
  %37 = load i8, ptr %36, align 1, !tbaa !11
  switch i8 %37, label %44 [
    i8 71, label %38
    i8 103, label %38
    i8 77, label %40
    i8 109, label %40
    i8 75, label %42
    i8 107, label %42
  ]

38:                                               ; preds = %.lr.ph.1, %.lr.ph.1
  %39 = mul nsw i64 %.4, 1000
  br label %40

40:                                               ; preds = %38, %.lr.ph.1, %.lr.ph.1
  %.2233.1 = phi i64 [ %.4, %.lr.ph.1 ], [ %.4, %.lr.ph.1 ], [ %39, %38 ]
  %41 = mul nsw i64 %.2233.1, 1000
  br label %42

42:                                               ; preds = %40, %.lr.ph.1, %.lr.ph.1
  %.3234.1 = phi i64 [ %.4, %.lr.ph.1 ], [ %.4, %.lr.ph.1 ], [ %41, %40 ]
  %43 = mul nsw i64 %.3234.1, 1000
  br label %44

44:                                               ; preds = %42, %.lr.ph.1
  %.4.1 = phi i64 [ %.4, %.lr.ph.1 ], [ %43, %42 ]
  %indvars.iv.next.1 = add nuw nsw i64 %indvars.iv, 2
  %niter.next.1 = add i64 %niter, 2
  %niter.ncmp.1 = icmp eq i64 %niter.next.1, %unroll_iter
  br i1 %niter.ncmp.1, label %.loopexit.loopexit.unr-lcssa, label %.lr.ph, !llvm.loop !12

45:                                               ; preds = %13
  %46 = load ptr, ptr @optarg, align 8, !tbaa !9
  br label %.loopexit

47:                                               ; preds = %13
  %48 = load ptr, ptr @optarg, align 8, !tbaa !9
  br label %.loopexit

49:                                               ; preds = %13
  %50 = load ptr, ptr @optarg, align 8, !tbaa !9
  %51 = tail call i32 @atoi(ptr nocapture noundef %50) #16
  br label %.loopexit

52:                                               ; preds = %13
  %53 = load ptr, ptr @optarg, align 8, !tbaa !9
  %54 = tail call i32 @atoi(ptr nocapture noundef %53) #16
  br label %.loopexit

55:                                               ; preds = %13
  %56 = load ptr, ptr @optarg, align 8, !tbaa !9
  %57 = tail call i32 @atoi(ptr nocapture noundef %56) #16
  br label %.loopexit

58:                                               ; preds = %13
  %59 = load ptr, ptr @optarg, align 8, !tbaa !9
  %60 = tail call i32 @atoi(ptr nocapture noundef %59) #16
  br label %.loopexit

61:                                               ; preds = %13
  %62 = load ptr, ptr @optarg, align 8, !tbaa !9
  %63 = tail call double @atof(ptr noundef %62) #16
  %64 = fptrunc double %63 to float
  %65 = fcmp olt float %64, 0.000000e+00
  %. = select i1 %65, float -2.000000e+00, float %64
  br label %.loopexit

66:                                               ; preds = %13
  %67 = load ptr, ptr @optarg, align 8, !tbaa !9
  br label %.loopexit

68:                                               ; preds = %13
  %69 = load ptr, ptr @optarg, align 8, !tbaa !9
  %70 = tail call i32 @atoi(ptr nocapture noundef %69) #16
  br label %.loopexit

71:                                               ; preds = %13
  %72 = load ptr, ptr %1, align 8, !tbaa !9
  tail call void @print_usage(ptr noundef %72)
  br label %348

73:                                               ; preds = %13
  tail call void @abort() #17
  unreachable

.loopexit.loopexit.unr-lcssa:                     ; preds = %44, %.lr.ph.preheader
  %.4.lcssa.ph = phi i64 [ poison, %.lr.ph.preheader ], [ %.4.1, %44 ]
  %indvars.iv.unr = phi i64 [ 0, %.lr.ph.preheader ], [ %indvars.iv.next.1, %44 ]
  %.1232280.unr = phi i64 [ %23, %.lr.ph.preheader ], [ %.4.1, %44 ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.loopexit, label %.lr.ph.epil

.lr.ph.epil:                                      ; preds = %.loopexit.loopexit.unr-lcssa
  %74 = getelementptr inbounds i8, ptr %22, i64 %indvars.iv.unr
  %75 = load i8, ptr %74, align 1, !tbaa !11
  switch i8 %75, label %.loopexit [
    i8 71, label %76
    i8 103, label %76
    i8 77, label %78
    i8 109, label %78
    i8 75, label %80
    i8 107, label %80
  ]

76:                                               ; preds = %.lr.ph.epil, %.lr.ph.epil
  %77 = mul nsw i64 %.1232280.unr, 1000
  br label %78

78:                                               ; preds = %76, %.lr.ph.epil, %.lr.ph.epil
  %.2233.epil = phi i64 [ %.1232280.unr, %.lr.ph.epil ], [ %.1232280.unr, %.lr.ph.epil ], [ %77, %76 ]
  %79 = mul nsw i64 %.2233.epil, 1000
  br label %80

80:                                               ; preds = %78, %.lr.ph.epil, %.lr.ph.epil
  %.3234.epil = phi i64 [ %.1232280.unr, %.lr.ph.epil ], [ %.1232280.unr, %.lr.ph.epil ], [ %79, %78 ]
  %81 = mul nsw i64 %.3234.epil, 1000
  br label %.loopexit

.loopexit:                                        ; preds = %.loopexit.loopexit.unr-lcssa, %80, %.lr.ph.epil, %21, %13, %68, %66, %61, %58, %55, %52, %49, %47, %45, %18, %15
  %.5 = phi i64 [ %.0231, %68 ], [ %.0231, %66 ], [ %.0231, %61 ], [ %.0231, %58 ], [ %.0231, %55 ], [ %.0231, %52 ], [ %.0231, %49 ], [ %.0231, %47 ], [ %.0231, %45 ], [ %.0231, %18 ], [ %.0231, %15 ], [ %.0231, %13 ], [ %23, %21 ], [ %.4.lcssa.ph, %.loopexit.loopexit.unr-lcssa ], [ %.1232280.unr, %.lr.ph.epil ], [ %81, %80 ]
  %.1230 = phi i32 [ %.0229, %68 ], [ %.0229, %66 ], [ %.0229, %61 ], [ %.0229, %58 ], [ %.0229, %55 ], [ %.0229, %52 ], [ %.0229, %49 ], [ %.0229, %47 ], [ %.0229, %45 ], [ %20, %18 ], [ %.0229, %15 ], [ %.0229, %13 ], [ %.0229, %21 ], [ %.0229, %.lr.ph.epil ], [ %.0229, %80 ], [ %.0229, %.loopexit.loopexit.unr-lcssa ]
  %.2228 = phi float [ %.0226, %68 ], [ %.0226, %66 ], [ %., %61 ], [ %.0226, %58 ], [ %.0226, %55 ], [ %.0226, %52 ], [ %.0226, %49 ], [ %.0226, %47 ], [ %.0226, %45 ], [ %.0226, %18 ], [ %.0226, %15 ], [ %.0226, %13 ], [ %.0226, %21 ], [ %.0226, %.lr.ph.epil ], [ %.0226, %80 ], [ %.0226, %.loopexit.loopexit.unr-lcssa ]
  %.1224 = phi i32 [ %.0223, %68 ], [ %.0223, %66 ], [ %.0223, %61 ], [ %60, %58 ], [ %.0223, %55 ], [ %.0223, %52 ], [ %.0223, %49 ], [ %.0223, %47 ], [ %.0223, %45 ], [ %.0223, %18 ], [ %.0223, %15 ], [ %.0223, %13 ], [ %.0223, %21 ], [ %.0223, %.lr.ph.epil ], [ %.0223, %80 ], [ %.0223, %.loopexit.loopexit.unr-lcssa ]
  %.1220 = phi i32 [ %.0219, %68 ], [ %.0219, %66 ], [ %.0219, %61 ], [ %.0219, %58 ], [ %57, %55 ], [ %.0219, %52 ], [ %.0219, %49 ], [ %.0219, %47 ], [ %.0219, %45 ], [ %.0219, %18 ], [ %.0219, %15 ], [ %.0219, %13 ], [ %.0219, %21 ], [ %.0219, %.lr.ph.epil ], [ %.0219, %80 ], [ %.0219, %.loopexit.loopexit.unr-lcssa ]
  %.1218 = phi i32 [ %.0217, %68 ], [ %.0217, %66 ], [ %.0217, %61 ], [ %.0217, %58 ], [ %.0217, %55 ], [ %54, %52 ], [ %.0217, %49 ], [ %.0217, %47 ], [ %.0217, %45 ], [ %.0217, %18 ], [ %.0217, %15 ], [ %.0217, %13 ], [ %.0217, %21 ], [ %.0217, %.lr.ph.epil ], [ %.0217, %80 ], [ %.0217, %.loopexit.loopexit.unr-lcssa ]
  %.1216 = phi i32 [ %.0215, %68 ], [ %.0215, %66 ], [ %.0215, %61 ], [ %.0215, %58 ], [ %.0215, %55 ], [ %.0215, %52 ], [ %51, %49 ], [ %.0215, %47 ], [ %.0215, %45 ], [ %.0215, %18 ], [ %.0215, %15 ], [ %.0215, %13 ], [ %.0215, %21 ], [ %.0215, %.lr.ph.epil ], [ %.0215, %80 ], [ %.0215, %.loopexit.loopexit.unr-lcssa ]
  %.1213 = phi i32 [ %.0212, %68 ], [ %.0212, %66 ], [ %.0212, %61 ], [ %.0212, %58 ], [ %.0212, %55 ], [ %.0212, %52 ], [ %.0212, %49 ], [ %.0212, %47 ], [ %.0212, %45 ], [ %.0212, %18 ], [ %.0212, %15 ], [ 1, %13 ], [ %.0212, %21 ], [ %.0212, %.lr.ph.epil ], [ %.0212, %80 ], [ %.0212, %.loopexit.loopexit.unr-lcssa ]
  %.1211 = phi i32 [ %70, %68 ], [ %.0210, %66 ], [ %.0210, %61 ], [ %.0210, %58 ], [ %.0210, %55 ], [ %.0210, %52 ], [ %.0210, %49 ], [ %.0210, %47 ], [ %.0210, %45 ], [ %.0210, %18 ], [ %.0210, %15 ], [ %.0210, %13 ], [ %.0210, %21 ], [ %.0210, %.lr.ph.epil ], [ %.0210, %80 ], [ %.0210, %.loopexit.loopexit.unr-lcssa ]
  %.1209 = phi i32 [ %.0208, %68 ], [ %.0208, %66 ], [ %.0208, %61 ], [ %.0208, %58 ], [ %.0208, %55 ], [ %.0208, %52 ], [ %.0208, %49 ], [ %.0208, %47 ], [ %.0208, %45 ], [ %.0208, %18 ], [ %17, %15 ], [ %.0208, %13 ], [ %.0208, %21 ], [ %.0208, %.lr.ph.epil ], [ %.0208, %80 ], [ %.0208, %.loopexit.loopexit.unr-lcssa ]
  %.1207 = phi ptr [ %.0206, %68 ], [ %.0206, %66 ], [ %.0206, %61 ], [ %.0206, %58 ], [ %.0206, %55 ], [ %.0206, %52 ], [ %.0206, %49 ], [ %.0206, %47 ], [ %46, %45 ], [ %.0206, %18 ], [ %.0206, %15 ], [ %.0206, %13 ], [ %.0206, %21 ], [ %.0206, %.lr.ph.epil ], [ %.0206, %80 ], [ %.0206, %.loopexit.loopexit.unr-lcssa ]
  %.1205 = phi ptr [ %.0204, %68 ], [ %67, %66 ], [ %.0204, %61 ], [ %.0204, %58 ], [ %.0204, %55 ], [ %.0204, %52 ], [ %.0204, %49 ], [ %.0204, %47 ], [ %.0204, %45 ], [ %.0204, %18 ], [ %.0204, %15 ], [ %.0204, %13 ], [ %.0204, %21 ], [ %.0204, %.lr.ph.epil ], [ %.0204, %80 ], [ %.0204, %.loopexit.loopexit.unr-lcssa ]
  %.1200 = phi ptr [ %.0199, %68 ], [ %.0199, %66 ], [ %.0199, %61 ], [ %.0199, %58 ], [ %.0199, %55 ], [ %.0199, %52 ], [ %.0199, %49 ], [ %48, %47 ], [ %.0199, %45 ], [ %.0199, %18 ], [ %.0199, %15 ], [ %.0199, %13 ], [ %.0199, %21 ], [ %.0199, %.lr.ph.epil ], [ %.0199, %80 ], [ %.0199, %.loopexit.loopexit.unr-lcssa ]
  br label %13, !llvm.loop !14

82:                                               ; preds = %13
  %83 = icmp slt i32 %.0208, 1
  br i1 %83, label %84, label %89

84:                                               ; preds = %82
  %85 = load ptr, ptr @stderr, align 8, !tbaa !9
  %86 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %85, ptr noundef nonnull @.str.53, i32 noundef %.0208) #18
  %87 = load ptr, ptr @stderr, align 8, !tbaa !9
  %88 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %87, ptr noundef nonnull @.str.54) #18
  tail call void @exit(i32 noundef 1) #17
  unreachable

89:                                               ; preds = %82
  %90 = icmp slt i64 %.0231, 0
  br i1 %90, label %91, label %96

91:                                               ; preds = %89
  %92 = load ptr, ptr @stderr, align 8, !tbaa !9
  %93 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %92, ptr noundef nonnull @.str.55, i64 noundef %.0231) #18
  %94 = load ptr, ptr @stderr, align 8, !tbaa !9
  %95 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %94, ptr noundef nonnull @.str.56) #18
  tail call void @exit(i32 noundef 1) #17
  unreachable

96:                                               ; preds = %89
  %97 = icmp slt i32 %.0229, 1
  br i1 %97, label %98, label %103

98:                                               ; preds = %96
  %99 = load ptr, ptr @stderr, align 8, !tbaa !9
  %100 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %99, ptr noundef nonnull @.str.57, i32 noundef %.0229) #18
  %101 = load ptr, ptr @stderr, align 8, !tbaa !9
  %102 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %101, ptr noundef nonnull @.str.58) #18
  tail call void @exit(i32 noundef 1) #17
  unreachable

103:                                              ; preds = %96
  %104 = icmp slt i32 %.0219, 0
  br i1 %104, label %105, label %110

105:                                              ; preds = %103
  %106 = load ptr, ptr @stderr, align 8, !tbaa !9
  %107 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %106, ptr noundef nonnull @.str.59, i32 noundef %.0219) #18
  %108 = load ptr, ptr @stderr, align 8, !tbaa !9
  %109 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %108, ptr noundef nonnull @.str.60) #18
  tail call void @exit(i32 noundef 1) #17
  unreachable

110:                                              ; preds = %103
  %111 = fcmp oeq float %.0226, -2.000000e+00
  br i1 %111, label %112, label %117

112:                                              ; preds = %110
  %113 = load ptr, ptr @stderr, align 8, !tbaa !9
  %114 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %113, ptr noundef nonnull @.str.61, double noundef -2.000000e+00) #18
  %115 = load ptr, ptr @stderr, align 8, !tbaa !9
  %116 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %115, ptr noundef nonnull @.str.62) #18
  tail call void @exit(i32 noundef 1) #17
  unreachable

117:                                              ; preds = %110
  %118 = fcmp une float %.0226, -1.000000e+00
  %119 = icmp eq ptr %.0204, null
  %or.cond = select i1 %118, i1 %119, i1 false
  br i1 %or.cond, label %120, label %123

120:                                              ; preds = %117
  %121 = load ptr, ptr @stderr, align 8, !tbaa !9
  %122 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %121, ptr noundef nonnull @.str.63) #18
  tail call void @exit(i32 noundef 1) #17
  unreachable

123:                                              ; preds = %117
  %124 = fcmp oeq float %.0226, -1.000000e+00
  %125 = icmp ne ptr %.0204, null
  %or.cond3 = select i1 %124, i1 %125, i1 false
  br i1 %or.cond3, label %126, label %129

126:                                              ; preds = %123
  %127 = load ptr, ptr @stderr, align 8, !tbaa !9
  %128 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %127, ptr noundef nonnull @.str.64) #18
  tail call void @exit(i32 noundef 1) #17
  unreachable

129:                                              ; preds = %123
  %130 = icmp slt i32 %.0223, 0
  br i1 %130, label %131, label %136

131:                                              ; preds = %129
  %132 = load ptr, ptr @stderr, align 8, !tbaa !9
  %133 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %132, ptr noundef nonnull @.str.65, i32 noundef %.0223) #18
  %134 = load ptr, ptr @stderr, align 8, !tbaa !9
  %135 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %134, ptr noundef nonnull @.str.60) #18
  tail call void @exit(i32 noundef 1) #17
  unreachable

136:                                              ; preds = %129
  %137 = icmp eq ptr %.0199, null
  %138 = icmp ne ptr %.0206, null
  %or.cond5 = select i1 %137, i1 true, i1 %138
  br i1 %or.cond5, label %142, label %139

139:                                              ; preds = %136
  %140 = load ptr, ptr @stderr, align 8, !tbaa !9
  %141 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %140, ptr noundef nonnull @.str.66) #18
  tail call void @exit(i32 noundef 1) #17
  unreachable

142:                                              ; preds = %136
  %or.cond7 = select i1 %137, i1 %138, i1 false
  br i1 %or.cond7, label %143, label %146

143:                                              ; preds = %142
  %144 = load ptr, ptr @stderr, align 8, !tbaa !9
  %145 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %144, ptr noundef nonnull @.str.67) #18
  tail call void @exit(i32 noundef 1) #17
  unreachable

146:                                              ; preds = %142
  %.3 = select i1 %124, float 0.000000e+00, float %.0226
  %147 = load i32, ptr @optind, align 4, !tbaa !5
  %148 = sub nsw i32 %0, %147
  %149 = add i32 %148, -4
  %or.cond251 = icmp ult i32 %149, -2
  br i1 %or.cond251, label %150, label %152

150:                                              ; preds = %146
  %151 = load ptr, ptr %1, align 8, !tbaa !9
  tail call void @print_usage(ptr noundef %151)
  br label %348

152:                                              ; preds = %146
  %153 = sext i32 %147 to i64
  %154 = getelementptr inbounds ptr, ptr %1, i64 %153
  %155 = load ptr, ptr %154, align 8, !tbaa !9
  %156 = tail call i32 @atoi(ptr nocapture noundef %155) #16
  %157 = getelementptr i8, ptr %154, i64 8
  %158 = load ptr, ptr %157, align 8, !tbaa !9
  %159 = icmp eq i32 %148, 3
  br i1 %159, label %160, label %163

160:                                              ; preds = %152
  %161 = getelementptr i8, ptr %154, i64 16
  %162 = load ptr, ptr %161, align 8, !tbaa !9
  br label %163

163:                                              ; preds = %160, %152
  %.0201 = phi ptr [ %162, %160 ], [ null, %152 ]
  %164 = tail call noalias ptr @fopen(ptr noundef %158, ptr noundef nonnull @.str)
  %.not244 = icmp eq ptr %164, null
  br i1 %.not244, label %165, label %168

165:                                              ; preds = %163
  %166 = load ptr, ptr @stderr, align 8, !tbaa !9
  %167 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %166, ptr noundef nonnull @.str.1, ptr noundef %158) #18
  tail call void @exit(i32 noundef 1) #17
  unreachable

168:                                              ; preds = %163
  call void @llvm.lifetime.start.p0(i64 112, ptr nonnull %3) #15
  %169 = icmp ne i32 %.0219, 0
  %170 = zext i1 %169 to i32
  call void @init_output(ptr noundef nonnull %3, ptr noundef %.0201, i64 noundef %.0231, i32 noundef %.0229, i32 noundef %170, i32 noundef %.0212)
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %4) #15
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %4, i8 0, i64 24, i1 false)
  %171 = icmp ne i32 %.0210, 0
  %172 = zext i1 %171 to i32
  call void @read_database_file(ptr noundef nonnull %164, ptr noundef nonnull %4, i32 noundef %172, i32 noundef %170, i32 noundef %.0212, i32 noundef 1, ptr noundef null, ptr noundef nonnull %3)
  %173 = call i32 @fclose(ptr noundef nonnull %164)
  %174 = getelementptr inbounds i8, ptr %4, i64 8
  %175 = load i32, ptr %174, align 8
  %.inv = icmp sgt i32 %156, 0
  %176 = select i1 %.inv, i32 0, i32 %175
  %.0214 = add i32 %176, %156
  %.inv253 = icmp sgt i32 %.0215, 0
  %177 = select i1 %.inv253, i32 0, i32 %.0214
  %.2 = add nsw i32 %177, %.0215
  %178 = getelementptr inbounds i8, ptr %4, i64 16
  %179 = load i32, ptr %178, align 8, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %5) #15
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %5, i8 0, i64 24, i1 false)
  %180 = icmp ne ptr %.0199, null
  %or.cond9 = select i1 %180, i1 %138, i1 false
  br i1 %or.cond9, label %181, label %191

181:                                              ; preds = %168
  %182 = call noalias ptr @fopen(ptr noundef nonnull %.0199, ptr noundef nonnull @.str)
  %.not245 = icmp eq ptr %182, null
  br i1 %.not245, label %183, label %186

183:                                              ; preds = %181
  %184 = load ptr, ptr @stderr, align 8, !tbaa !9
  %185 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %184, ptr noundef nonnull @.str.1, ptr noundef nonnull %.0199) #18
  call void @exit(i32 noundef 1) #17
  unreachable

186:                                              ; preds = %181
  call void @read_database_file(ptr noundef nonnull %182, ptr noundef nonnull %5, i32 noundef %172, i32 noundef %170, i32 noundef %.0212, i32 noundef 0, ptr noundef nonnull %.0206, ptr noundef null)
  %187 = call i32 @fclose(ptr noundef nonnull %182)
  %188 = getelementptr inbounds i8, ptr %5, i64 16
  %189 = load i32, ptr %188, align 8
  %190 = call i32 @llvm.umax.i32(i32 %179, i32 %189)
  br label %191

191:                                              ; preds = %186, %168
  %.0222 = phi i32 [ %190, %186 ], [ %179, %168 ]
  %.0221 = phi ptr [ %5, %186 ], [ null, %168 ]
  %192 = icmp slt i32 %.0214, 1
  br i1 %192, label %196, label %193

193:                                              ; preds = %191
  %194 = load i32, ptr %174, align 8, !tbaa !17
  %195 = icmp ugt i32 %.0214, %194
  br i1 %195, label %196, label %199

196:                                              ; preds = %193, %191
  %197 = load ptr, ptr @stderr, align 8, !tbaa !9
  %198 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %197, ptr noundef nonnull @.str.68, i32 noundef %.0214) #18
  call void @exit(i32 noundef 1) #17
  unreachable

199:                                              ; preds = %193
  %200 = icmp slt i32 %.2, 1
  %201 = icmp ugt i32 %.2, %194
  %or.cond252 = or i1 %200, %201
  br i1 %or.cond252, label %202, label %205

202:                                              ; preds = %199
  %203 = load ptr, ptr @stderr, align 8, !tbaa !9
  %204 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %203, ptr noundef nonnull @.str.69, i32 noundef %.2) #18
  call void @exit(i32 noundef 1) #17
  unreachable

205:                                              ; preds = %199
  %206 = icmp ult i32 %.0214, %.2
  br i1 %206, label %207, label %210

207:                                              ; preds = %205
  %208 = load ptr, ptr @stderr, align 8, !tbaa !9
  %209 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %208, ptr noundef nonnull @.str.70) #18
  call void @exit(i32 noundef 1) #17
  unreachable

210:                                              ; preds = %205
  %211 = sub nsw i32 %.0214, %.0217
  %212 = icmp sgt i32 %.2, %211
  br i1 %212, label %213, label %216

213:                                              ; preds = %210
  %214 = load ptr, ptr @stderr, align 8, !tbaa !9
  %215 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %214, ptr noundef nonnull @.str.71, i32 noundef %.0217, i32 noundef %.0214, i32 noundef %.2) #18
  call void @exit(i32 noundef 1) #17
  unreachable

216:                                              ; preds = %210
  %217 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.72, ptr noundef %158)
  %218 = load i32, ptr %174, align 8, !tbaa !17
  %219 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.73, i32 noundef %218)
  %220 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.74, i32 noundef %.0214)
  %221 = icmp ult i32 %.2, %.0214
  %222 = icmp sgt i32 %.0217, 0
  %or.cond11 = select i1 %221, i1 %222, i1 false
  br i1 %or.cond11, label %223, label %226

223:                                              ; preds = %216
  %224 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.75, i32 noundef %.2)
  %225 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.76, i32 noundef %.0217)
  br label %226

226:                                              ; preds = %223, %216
  br i1 %125, label %227, label %231

227:                                              ; preds = %226
  %228 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.77, ptr noundef nonnull %.0204)
  %229 = fpext float %.3 to double
  %230 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.78, double noundef %229)
  br label %231

231:                                              ; preds = %227, %226
  br i1 %180, label %232, label %240

232:                                              ; preds = %231
  %233 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.79, ptr noundef nonnull %.0199)
  %234 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.80, ptr noundef %.0206)
  %235 = getelementptr inbounds i8, ptr %5, i64 12
  %236 = load i32, ptr %235, align 4, !tbaa !18
  %237 = getelementptr inbounds i8, ptr %5, i64 8
  %238 = load i32, ptr %237, align 8, !tbaa !17
  %239 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.81, i32 noundef %236, i32 noundef %238)
  br label %240

240:                                              ; preds = %232, %231
  %.not247 = icmp eq ptr %.0201, null
  br i1 %.not247, label %247, label %241

241:                                              ; preds = %240
  %242 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.82, ptr noundef nonnull %.0201)
  %243 = udiv i64 %.0231, 1000000
  %244 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.83, i64 noundef %243, i64 noundef %.0231)
  %.not248 = icmp eq i32 %.0229, 1
  br i1 %.not248, label %247, label %245

245:                                              ; preds = %241
  %246 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.84, i32 noundef %.0229)
  br label %247

247:                                              ; preds = %241, %245, %240
  %248 = load ptr, ptr @stdout, align 8, !tbaa !9
  %249 = call i32 @fflush(ptr noundef %248)
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %6) #15
  %250 = getelementptr inbounds i8, ptr %6, i64 24
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(40) %250, i8 0, i64 16, i1 false)
  store i32 %.0214, ptr %6, align 8, !tbaa !19
  %251 = getelementptr inbounds i8, ptr %6, i64 8
  store i32 %.2, ptr %251, align 8, !tbaa !23
  %252 = getelementptr inbounds i8, ptr %6, i64 4
  store i32 %.0217, ptr %252, align 4, !tbaa !24
  %253 = getelementptr inbounds i8, ptr %6, i64 20
  store float %.3, ptr %253, align 4, !tbaa !25
  %254 = getelementptr inbounds i8, ptr %6, i64 12
  store i32 %.0219, ptr %254, align 4, !tbaa !26
  %255 = getelementptr inbounds i8, ptr %6, i64 16
  store i32 %.0223, ptr %255, align 8, !tbaa !27
  br i1 %125, label %256, label %258

256:                                              ; preds = %247
  %257 = call { ptr, i32 } @parse_mismatch_matrix(i32 noundef %.0222, ptr noundef nonnull %.0204)
  br label %260

258:                                              ; preds = %247
  %259 = call { ptr, i32 } @generate_default_mismatch_matrix(i32 noundef %.0222)
  br label %260

260:                                              ; preds = %258, %256
  %.pn = phi { ptr, i32 } [ %257, %256 ], [ %259, %258 ]
  %.sink = extractvalue { ptr, i32 } %.pn, 1
  %.sink348 = extractvalue { ptr, i32 } %.pn, 0
  %261 = getelementptr inbounds i8, ptr %6, i64 24
  store ptr %.sink348, ptr %261, align 8
  %262 = getelementptr inbounds i8, ptr %6, i64 32
  store i32 %.sink, ptr %262, align 8
  %263 = load i32, ptr %174, align 8, !tbaa !17
  %264 = sub i32 %263, %.0214
  %265 = load ptr, ptr %4, align 8, !tbaa !28
  %266 = zext i32 %264 to i64
  %267 = getelementptr inbounds %struct.database_entry_t, ptr %265, i64 %266, i32 5
  %268 = load i32, ptr %267, align 8, !tbaa !29
  %.fr = freeze i32 %268
  %269 = add i32 %.fr, 1
  %270 = zext i32 %269 to i64
  %271 = call noalias ptr @calloc(i64 noundef %270, i64 noundef 4) #19
  %.not = icmp eq i32 %263, 0
  br i1 %.not, label %._crit_edge296, label %.lr.ph295

.lr.ph295:                                        ; preds = %260
  %.not250286 = icmp ult i32 %.fr, 2
  br i1 %.not250286, label %.lr.ph295.split.us, label %.lr.ph289

.lr.ph295.split.us:                               ; preds = %.lr.ph295, %.lr.ph295.split.us
  %indvars.iv345 = phi i64 [ %indvars.iv.next346, %.lr.ph295.split.us ], [ 0, %.lr.ph295 ]
  %.0203292.us = phi i32 [ %276, %.lr.ph295.split.us ], [ 0, %.lr.ph295 ]
  %272 = load ptr, ptr %4, align 8, !tbaa !28
  %273 = getelementptr inbounds %struct.database_entry_t, ptr %272, i64 %indvars.iv345
  %274 = getelementptr inbounds i8, ptr %273, i64 36
  %275 = load i32, ptr %274, align 4, !tbaa !31
  %276 = add i32 %275, %.0203292.us
  %277 = getelementptr inbounds i8, ptr %273, i64 32
  %278 = load i32, ptr %277, align 8, !tbaa !29
  %279 = zext i32 %278 to i64
  %280 = shl nuw nsw i64 %279, 2
  %281 = call noalias ptr @malloc(i64 noundef %280) #20
  %282 = getelementptr inbounds i8, ptr %273, i64 8
  %283 = load ptr, ptr %282, align 8, !tbaa !32
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %281, ptr align 4 %283, i64 %280, i1 false)
  %284 = load i32, ptr %277, align 8, !tbaa !29
  %285 = zext i32 %284 to i64
  call void @qsort(ptr noundef %281, i64 noundef %285, i64 noundef 4, ptr noundef nonnull @vertex_degree_compare_desc) #15
  call void @free(ptr noundef %281) #15
  %indvars.iv.next346 = add nuw nsw i64 %indvars.iv345, 1
  %286 = load i32, ptr %174, align 8, !tbaa !17
  %287 = zext i32 %286 to i64
  %288 = icmp ult i64 %indvars.iv.next346, %287
  br i1 %288, label %.lr.ph295.split.us, label %._crit_edge296, !llvm.loop !33

._crit_edge296:                                   ; preds = %._crit_edge290, %.lr.ph295.split.us, %260
  %.0203.lcssa = phi i32 [ 0, %260 ], [ %276, %.lr.ph295.split.us ], [ %299, %._crit_edge290 ]
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %7) #15
  call void @init_extension_store(ptr noundef nonnull %7, i32 noundef %.0203.lcssa, ptr noundef %271)
  %289 = call ptr @setup_thread_data(i32 noundef %.0208, ptr noundef nonnull %6, ptr noundef nonnull %4, ptr noundef %.0221, ptr noundef nonnull %7, ptr noundef nonnull %3, i32 noundef %.fr, i32 noundef %.0203.lcssa, ptr noundef %271)
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %8) #15
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %9) #15
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %10) #15
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %11) #15
  call void @gspan_init(ptr noundef nonnull %4, ptr noundef %.0221, i32 noundef %.0208, ptr noundef %289, ptr noundef nonnull %8, ptr noundef nonnull %11, ptr noundef nonnull %10)
  call void @free_extension_store(ptr noundef nonnull %7)
  %290 = getelementptr inbounds i8, ptr %8, i64 16
  %291 = load i32, ptr %290, align 8, !tbaa !34
  %292 = load ptr, ptr %10, align 8, !tbaa !9
  call void @print_result(i32 noundef 1, i32 noundef %291, ptr noundef nonnull %11, i32 noundef %291, ptr noundef %292, ptr noundef %.0221)
  %293 = load i32, ptr %290, align 8, !tbaa !34
  %.not249298 = icmp eq i32 %293, 0
  br i1 %.not249298, label %._crit_edge303, label %.lr.ph302

.lr.ph302:                                        ; preds = %._crit_edge296
  %294 = getelementptr inbounds i8, ptr %9, i64 16
  br label %332

.lr.ph289:                                        ; preds = %.lr.ph295, %._crit_edge290
  %indvars.iv342 = phi i64 [ %indvars.iv.next343, %._crit_edge290 ], [ 0, %.lr.ph295 ]
  %.0203292 = phi i32 [ %299, %._crit_edge290 ], [ 0, %.lr.ph295 ]
  %295 = load ptr, ptr %4, align 8, !tbaa !28
  %296 = getelementptr inbounds %struct.database_entry_t, ptr %295, i64 %indvars.iv342
  %297 = getelementptr inbounds i8, ptr %296, i64 36
  %298 = load i32, ptr %297, align 4, !tbaa !31
  %299 = add i32 %298, %.0203292
  %300 = getelementptr inbounds i8, ptr %296, i64 32
  %301 = load i32, ptr %300, align 8, !tbaa !29
  %302 = zext i32 %301 to i64
  %303 = shl nuw nsw i64 %302, 2
  %304 = call noalias ptr @malloc(i64 noundef %303) #20
  %305 = getelementptr inbounds i8, ptr %296, i64 8
  %306 = load ptr, ptr %305, align 8, !tbaa !32
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %304, ptr align 4 %306, i64 %303, i1 false)
  %307 = load i32, ptr %300, align 8, !tbaa !29
  %308 = zext i32 %307 to i64
  call void @qsort(ptr noundef %304, i64 noundef %308, i64 noundef 4, ptr noundef nonnull @vertex_degree_compare_desc) #15
  %.pre = load i32, ptr %300, align 8, !tbaa !29
  br label %309

309:                                              ; preds = %.lr.ph289, %327
  %.0198287 = phi i32 [ 2, %.lr.ph289 ], [ %328, %327 ]
  %310 = zext i32 %.0198287 to i64
  %311 = icmp ugt i32 %.0198287, %.pre
  br i1 %311, label %._crit_edge290, label %.preheader

.preheader:                                       ; preds = %309
  %.not305 = icmp eq i32 %.0198287, 0
  br i1 %.not305, label %._crit_edge, label %.lr.ph284.preheader

.lr.ph284.preheader:                              ; preds = %.preheader
  %wide.trip.count340 = zext i32 %.0198287 to i64
  %min.iters.check = icmp ult i32 %.0198287, 8
  br i1 %min.iters.check, label %.lr.ph284.preheader414, label %vector.ph

.lr.ph284.preheader414:                           ; preds = %middle.block, %.lr.ph284.preheader
  %indvars.iv337.ph = phi i64 [ 0, %.lr.ph284.preheader ], [ %n.vec, %middle.block ]
  %.0197282.ph = phi i32 [ 0, %.lr.ph284.preheader ], [ %317, %middle.block ]
  br label %.lr.ph284

vector.ph:                                        ; preds = %.lr.ph284.preheader
  %n.vec = and i64 %310, 4294967288
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %vec.phi = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %314, %vector.body ]
  %vec.phi411 = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %315, %vector.body ]
  %312 = getelementptr inbounds i32, ptr %304, i64 %index
  %313 = getelementptr inbounds i8, ptr %312, i64 16
  %wide.load = load <4 x i32>, ptr %312, align 4, !tbaa !5
  %wide.load412 = load <4 x i32>, ptr %313, align 4, !tbaa !5
  %314 = add <4 x i32> %wide.load, %vec.phi
  %315 = add <4 x i32> %wide.load412, %vec.phi411
  %index.next = add nuw i64 %index, 8
  %316 = icmp eq i64 %index.next, %n.vec
  br i1 %316, label %middle.block, label %vector.body, !llvm.loop !36

middle.block:                                     ; preds = %vector.body
  %bin.rdx = add <4 x i32> %315, %314
  %317 = call i32 @llvm.vector.reduce.add.v4i32(<4 x i32> %bin.rdx)
  %cmp.n = icmp eq i64 %n.vec, %310
  br i1 %cmp.n, label %._crit_edge, label %.lr.ph284.preheader414

._crit_edge:                                      ; preds = %.lr.ph284, %middle.block, %.preheader
  %.pre-phi = phi i64 [ 0, %.preheader ], [ %wide.trip.count340, %middle.block ], [ %wide.trip.count340, %.lr.ph284 ]
  %.0197.lcssa = phi i32 [ 0, %.preheader ], [ %317, %middle.block ], [ %325, %.lr.ph284 ]
  %318 = shl i32 %.0198287, 1
  %319 = add i32 %318, -2
  %.1 = call i32 @llvm.usub.sat.i32(i32 %.0197.lcssa, i32 %319)
  %320 = getelementptr inbounds i32, ptr %271, i64 %.pre-phi
  %321 = load i32, ptr %320, align 4, !tbaa !5
  %322 = icmp ugt i32 %.1, %321
  br i1 %322, label %326, label %327

.lr.ph284:                                        ; preds = %.lr.ph284.preheader414, %.lr.ph284
  %indvars.iv337 = phi i64 [ %indvars.iv.next338, %.lr.ph284 ], [ %indvars.iv337.ph, %.lr.ph284.preheader414 ]
  %.0197282 = phi i32 [ %325, %.lr.ph284 ], [ %.0197282.ph, %.lr.ph284.preheader414 ]
  %323 = getelementptr inbounds i32, ptr %304, i64 %indvars.iv337
  %324 = load i32, ptr %323, align 4, !tbaa !5
  %325 = add i32 %324, %.0197282
  %indvars.iv.next338 = add nuw nsw i64 %indvars.iv337, 1
  %exitcond341.not = icmp eq i64 %indvars.iv.next338, %wide.trip.count340
  br i1 %exitcond341.not, label %._crit_edge, label %.lr.ph284, !llvm.loop !39

326:                                              ; preds = %._crit_edge
  store i32 %.1, ptr %320, align 4, !tbaa !5
  br label %327

327:                                              ; preds = %326, %._crit_edge
  %328 = add i32 %.0198287, 1
  %.not250 = icmp ugt i32 %328, %.fr
  br i1 %.not250, label %._crit_edge290, label %309, !llvm.loop !40

._crit_edge290:                                   ; preds = %327, %309
  call void @free(ptr noundef %304) #15
  %indvars.iv.next343 = add nuw nsw i64 %indvars.iv342, 1
  %329 = load i32, ptr %174, align 8, !tbaa !17
  %330 = zext i32 %329 to i64
  %331 = icmp ult i64 %indvars.iv.next343, %330
  br i1 %331, label %.lr.ph289, label %._crit_edge296, !llvm.loop !33

332:                                              ; preds = %.lr.ph302, %332
  %.0300 = phi i32 [ 1, %.lr.ph302 ], [ %333, %332 ]
  %.0194299 = phi i32 [ %291, %.lr.ph302 ], [ %335, %332 ]
  %333 = add i32 %.0300, 1
  call void @gspan_step(ptr noundef nonnull %4, ptr noundef %.0221, i32 noundef %.0208, ptr noundef %289, ptr noundef nonnull %8, ptr noundef nonnull %9, ptr noundef nonnull %11, ptr noundef nonnull %10, ptr noundef nonnull %3)
  %334 = load i32, ptr %294, align 8, !tbaa !34
  %335 = add i32 %334, %.0194299
  %336 = load ptr, ptr %10, align 8, !tbaa !9
  call void @print_result(i32 noundef %333, i32 noundef %334, ptr noundef nonnull %11, i32 noundef %335, ptr noundef %336, ptr noundef %.0221)
  call void @free_subgraph_store(ptr noundef nonnull %8)
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %8, ptr noundef nonnull align 8 dereferenceable(24) %9, i64 24, i1 false), !tbaa.struct !41
  %337 = load i32, ptr %290, align 8, !tbaa !34
  %.not249 = icmp eq i32 %337, 0
  br i1 %.not249, label %._crit_edge303, label %332, !llvm.loop !42

._crit_edge303:                                   ; preds = %332, %._crit_edge296
  %.0194.lcssa = phi i32 [ %291, %._crit_edge296 ], [ %335, %332 ]
  call void @free_subgraph_store(ptr noundef nonnull %8)
  %338 = icmp ne ptr %.0221, null
  %339 = zext i1 %338 to i32
  call void @free_thread_data(ptr noundef %289, i32 noundef %.0208, i32 noundef %339)
  call void @free(ptr noundef %271) #15
  %340 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.19)
  %341 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.85, i32 noundef %.0194.lcssa)
  %342 = load ptr, ptr @stdout, align 8, !tbaa !9
  %343 = call i32 @fflush(ptr noundef %342)
  call void @finalize_output(ptr noundef nonnull %3)
  call void @free_database(ptr noundef nonnull %4)
  br i1 %338, label %344, label %345

344:                                              ; preds = %._crit_edge303
  call void @free_database(ptr noundef nonnull %.0221)
  br label %345

345:                                              ; preds = %344, %._crit_edge303
  %346 = load ptr, ptr %261, align 8
  %347 = load i32, ptr %262, align 8
  call void @free_mismatch_matrix(ptr %346, i32 %347)
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %11) #15
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #15
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %9) #15
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %8) #15
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %7) #15
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %6) #15
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %5) #15
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %4) #15
  call void @llvm.lifetime.end.p0(i64 112, ptr nonnull %3) #15
  br label %348

348:                                              ; preds = %345, %150, %71
  %.0195 = phi i32 [ 1, %71 ], [ 1, %150 ], [ 0, %345 ]
  ret i32 %.0195
}

; Function Attrs: nounwind
declare ptr @setlocale(i32 noundef, ptr noundef) local_unnamed_addr #12

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

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

; Function Attrs: inlinehint mustprogress nofree nounwind willreturn memory(read) uwtable
declare i64 @atol(ptr nocapture noundef nonnull) local_unnamed_addr #13

; Function Attrs: inlinehint mustprogress nofree nounwind willreturn memory(read) uwtable
declare double @atof(ptr nocapture noundef nonnull) local_unnamed_addr #13

; Function Attrs: noreturn nounwind
declare void @abort() local_unnamed_addr #5

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

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @free_subgraph_store(ptr noundef) local_unnamed_addr #11

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @free_database(ptr noundef) local_unnamed_addr #11

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @free_mismatch_matrix(ptr, i32) local_unnamed_addr #11

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

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

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

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

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

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


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