; LLVM IR from mbheinen/bpa-ipf-tsp :: cflow (post_pvcurve)

; 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.CRIT = type { i32, [60 x i8], [60 x i8], [60 x i8], [60 x i8] }
%struct.MATRIX = type { i32, i32, i32, i32, [200 x i32], [500 x i32], [3 x [60 x i8]], [500 x [200 x ptr]] }
%struct.tm = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i64, ptr }

@VERSION = external dso_local global ptr, align 8
@stderr = external global ptr, align 8
@__const.main.day = external hidden unnamed_addr constant [7 x ptr], align 16
@__const.main.month = external hidden unnamed_addr constant [12 x ptr], align 16
@progname = external dso_local global ptr, align 8
@debug_filename = external dso_local global [60 x i8], align 16
@.str.25 = external hidden unnamed_addr constant [1 x i8], align 1
@debug_fp = external dso_local global ptr, align 8
@.str.26 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.29 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.31 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.32 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.33 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.34 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.36 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.37 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.38 = external hidden unnamed_addr constant [47 x i8], align 1
@.str.39 = external hidden unnamed_addr constant [67 x i8], align 1
@.str.40 = external hidden unnamed_addr constant [53 x i8], align 1
@.str.41 = external hidden unnamed_addr constant [47 x i8], align 1
@temp_critical = external dso_local global [200 x i32], align 16
@temp_pre_critical = external dso_local global [200 x i32], align 16
@caselog_filename = external dso_local global [60 x i8], align 16
@.str.42 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.43 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.44 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.45 = external hidden unnamed_addr constant [13 x i8], align 1
@caselog_fp = external dso_local global ptr, align 8
@.str.46 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.47 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.48 = external hidden unnamed_addr constant [51 x i8], align 1
@.str.49 = external hidden unnamed_addr constant [47 x i8], align 1
@.str.50 = external hidden unnamed_addr constant [22 x i8], align 1
@critical = external dso_local global [200 x %struct.CRIT], align 16
@.str.51 = external hidden unnamed_addr constant [51 x i8], align 1
@pre_critical = external dso_local global [200 x %struct.CRIT], align 16
@.str.52 = external hidden unnamed_addr constant [32 x i8], align 1

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

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

; Function Attrs: nounwind uwtable
define dso_local i32 @main(i32 noundef %0, ptr noundef %1) #0 {
  %3 = alloca i32, align 4
  %4 = alloca i32, align 4
  %5 = alloca ptr, align 8
  %6 = alloca [10 x ptr], align 16
  %7 = alloca [10 x [60 x i8]], align 16
  %8 = alloca ptr, align 8
  %9 = alloca [7 x ptr], align 16
  %10 = alloca [12 x ptr], align 16
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %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 i32, align 4
  %22 = alloca ptr, align 8
  %23 = alloca i64, align 8
  %24 = alloca ptr, align 8
  %25 = alloca [8 x %struct.MATRIX], align 16
  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 80, ptr %6) #7
  call void @llvm.lifetime.start.p0(i64 600, ptr %7) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #7
  call void @llvm.lifetime.start.p0(i64 56, ptr %9) #7
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %9, ptr align 16 @__const.main.day, i64 56, i1 false)
  call void @llvm.lifetime.start.p0(i64 96, ptr %10) #7
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %10, ptr align 16 @__const.main.month, i64 96, i1 false)
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #7
  store i32 0, ptr %15, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #7
  store i32 0, ptr %16, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #7
  store i32 0, ptr %18, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #7
  store i32 0, ptr %19, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #7
  call void @llvm.lifetime.start.p0(i64 6424000, ptr %25) #7
  %26 = load ptr, ptr %5, align 8, !tbaa !9
  %27 = getelementptr inbounds ptr, ptr %26, i64 0
  %28 = load ptr, ptr %27, align 8, !tbaa !9
  store ptr %28, ptr @progname, align 8, !tbaa !9
  %29 = call ptr @strcpy(ptr noundef @debug_filename, ptr noundef @.str.25) #7
  store ptr null, ptr @debug_fp, align 8, !tbaa !9
  %30 = load ptr, ptr @stderr, align 8, !tbaa !9
  %31 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %30, ptr noundef @.str.26, i64 noundef 6424000) #7
  store i32 0, ptr %11, align 4, !tbaa !5
  br label %32

32:                                               ; preds = %62, %2
  %33 = load i32, ptr %11, align 4, !tbaa !5
  %34 = icmp slt i32 %33, 8
  br i1 %34, label %35, label %65

35:                                               ; preds = %32
  store i32 0, ptr %12, align 4, !tbaa !5
  br label %36

36:                                               ; preds = %58, %35
  %37 = load i32, ptr %12, align 4, !tbaa !5
  %38 = icmp slt i32 %37, 500
  br i1 %38, label %39, label %61

39:                                               ; preds = %36
  store i32 0, ptr %13, align 4, !tbaa !5
  br label %40

40:                                               ; preds = %54, %39
  %41 = load i32, ptr %13, align 4, !tbaa !5
  %42 = icmp slt i32 %41, 200
  br i1 %42, label %43, label %57

43:                                               ; preds = %40
  %44 = load i32, ptr %11, align 4, !tbaa !5
  %45 = sext i32 %44 to i64
  %46 = getelementptr inbounds [8 x %struct.MATRIX], ptr %25, i64 0, i64 %45
  %47 = getelementptr inbounds %struct.MATRIX, ptr %46, i32 0, i32 7
  %48 = load i32, ptr %12, align 4, !tbaa !5
  %49 = sext i32 %48 to i64
  %50 = getelementptr inbounds [500 x [200 x ptr]], ptr %47, i64 0, i64 %49
  %51 = load i32, ptr %13, align 4, !tbaa !5
  %52 = sext i32 %51 to i64
  %53 = getelementptr inbounds [200 x ptr], ptr %50, i64 0, i64 %52
  store ptr null, ptr %53, align 8, !tbaa !9
  br label %54

54:                                               ; preds = %43
  %55 = load i32, ptr %13, align 4, !tbaa !5
  %56 = add nsw i32 %55, 1
  store i32 %56, ptr %13, align 4, !tbaa !5
  br label %40, !llvm.loop !11

57:                                               ; preds = %40
  br label %58

58:                                               ; preds = %57
  %59 = load i32, ptr %12, align 4, !tbaa !5
  %60 = add nsw i32 %59, 1
  store i32 %60, ptr %12, align 4, !tbaa !5
  br label %36, !llvm.loop !13

61:                                               ; preds = %36
  br label %62

62:                                               ; preds = %61
  %63 = load i32, ptr %11, align 4, !tbaa !5
  %64 = add nsw i32 %63, 1
  store i32 %64, ptr %11, align 4, !tbaa !5
  br label %32, !llvm.loop !14

65:                                               ; preds = %32
  %66 = load i32, ptr %4, align 4, !tbaa !5
  %67 = icmp slt i32 %66, 3
  br i1 %67, label %68, label %71

68:                                               ; preds = %65
  %69 = load ptr, ptr @stderr, align 8, !tbaa !9
  %70 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %69, ptr noundef @.str.27) #7
  call void @usage_error_exit()
  br label %71

71:                                               ; preds = %68, %65
  store i32 0, ptr %11, align 4, !tbaa !5
  br label %72

72:                                               ; preds = %84, %71
  %73 = load i32, ptr %11, align 4, !tbaa !5
  %74 = icmp slt i32 %73, 10
  br i1 %74, label %75, label %87

75:                                               ; preds = %72
  %76 = load i32, ptr %11, align 4, !tbaa !5
  %77 = sext i32 %76 to i64
  %78 = getelementptr inbounds [10 x [60 x i8]], ptr %7, i64 0, i64 %77
  %79 = getelementptr inbounds [60 x i8], ptr %78, i64 0, i64 0
  %80 = call ptr @strcpy(ptr noundef %79, ptr noundef @.str.25) #7
  %81 = load i32, ptr %11, align 4, !tbaa !5
  %82 = sext i32 %81 to i64
  %83 = getelementptr inbounds [10 x ptr], ptr %6, i64 0, i64 %82
  store ptr null, ptr %83, align 8, !tbaa !9
  br label %84

84:                                               ; preds = %75
  %85 = load i32, ptr %11, align 4, !tbaa !5
  %86 = add nsw i32 %85, 1
  store i32 %86, ptr %11, align 4, !tbaa !5
  br label %72, !llvm.loop !15

87:                                               ; preds = %72
  store i32 1, ptr %11, align 4, !tbaa !5
  br label %88

88:                                               ; preds = %210, %87
  %89 = load i32, ptr %11, align 4, !tbaa !5
  %90 = load i32, ptr %4, align 4, !tbaa !5
  %91 = icmp slt i32 %89, %90
  br i1 %91, label %92, label %213

92:                                               ; preds = %88
  %93 = load ptr, ptr %5, align 8, !tbaa !9
  %94 = load i32, ptr %11, align 4, !tbaa !5
  %95 = sext i32 %94 to i64
  %96 = getelementptr inbounds ptr, ptr %93, i64 %95
  %97 = load ptr, ptr %96, align 8, !tbaa !9
  %98 = call i32 @strncmp(ptr noundef %97, ptr noundef @.str.28, i64 noundef 2) #8
  %99 = icmp eq i32 %98, 0
  br i1 %99, label %100, label %114

100:                                              ; preds = %92
  %101 = load ptr, ptr %5, align 8, !tbaa !9
  %102 = load i32, ptr %11, align 4, !tbaa !5
  %103 = sext i32 %102 to i64
  %104 = getelementptr inbounds ptr, ptr %101, i64 %103
  %105 = load ptr, ptr %104, align 8, !tbaa !9
  %106 = getelementptr inbounds i8, ptr %105, i64 2
  %107 = call i32 @atoi(ptr noundef %106) #8
  store i32 %107, ptr %14, align 4, !tbaa !5
  %108 = load i32, ptr %14, align 4, !tbaa !5
  %109 = icmp slt i32 %108, 1
  br i1 %109, label %110, label %113

110:                                              ; preds = %100
  %111 = load ptr, ptr @stderr, align 8, !tbaa !9
  %112 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %111, ptr noundef @.str.29) #7
  call void @usage_error_exit()
  br label %113

113:                                              ; preds = %110, %100
  br label %209

114:                                              ; preds = %92
  %115 = load ptr, ptr %5, align 8, !tbaa !9
  %116 = load i32, ptr %11, align 4, !tbaa !5
  %117 = sext i32 %116 to i64
  %118 = getelementptr inbounds ptr, ptr %115, i64 %117
  %119 = load ptr, ptr %118, align 8, !tbaa !9
  %120 = call i32 @strncmp(ptr noundef %119, ptr noundef @.str.30, i64 noundef 2) #8
  %121 = icmp eq i32 %120, 0
  br i1 %121, label %122, label %137

122:                                              ; preds = %114
  %123 = load ptr, ptr %5, align 8, !tbaa !9
  %124 = load i32, ptr %11, align 4, !tbaa !5
  %125 = add nsw i32 %124, 1
  store i32 %125, ptr %11, align 4, !tbaa !5
  %126 = sext i32 %125 to i64
  %127 = getelementptr inbounds ptr, ptr %123, i64 %126
  %128 = load ptr, ptr %127, align 8, !tbaa !9
  %129 = call ptr @strcpy(ptr noundef @debug_filename, ptr noundef %128) #7
  %130 = call ptr @efopen(ptr noundef @debug_filename, ptr noundef @.str.31)
  store ptr %130, ptr @debug_fp, align 8, !tbaa !9
  %131 = load ptr, ptr @debug_fp, align 8, !tbaa !9
  %132 = icmp eq ptr %131, null
  br i1 %132, label %133, label %136

133:                                              ; preds = %122
  %134 = load ptr, ptr @stderr, align 8, !tbaa !9
  %135 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %134, ptr noundef @.str.32, ptr noundef @debug_filename) #7
  call void @usage_error_exit()
  br label %136

136:                                              ; preds = %133, %122
  br label %208

137:                                              ; preds = %114
  %138 = load ptr, ptr %5, align 8, !tbaa !9
  %139 = load i32, ptr %11, align 4, !tbaa !5
  %140 = sext i32 %139 to i64
  %141 = getelementptr inbounds ptr, ptr %138, i64 %140
  %142 = load ptr, ptr %141, align 8, !tbaa !9
  %143 = call i32 @strncmp(ptr noundef %142, ptr noundef @.str.33, i64 noundef 2) #8
  %144 = icmp eq i32 %143, 0
  br i1 %144, label %145, label %146

145:                                              ; preds = %137
  store i32 1, ptr %15, align 4, !tbaa !5
  br label %207

146:                                              ; preds = %137
  %147 = load ptr, ptr %5, align 8, !tbaa !9
  %148 = load i32, ptr %11, align 4, !tbaa !5
  %149 = sext i32 %148 to i64
  %150 = getelementptr inbounds ptr, ptr %147, i64 %149
  %151 = load ptr, ptr %150, align 8, !tbaa !9
  %152 = call i32 @strncmp(ptr noundef %151, ptr noundef @.str.34, i64 noundef 1) #8
  %153 = icmp eq i32 %152, 0
  br i1 %153, label %154, label %162

154:                                              ; preds = %146
  %155 = load ptr, ptr @stderr, align 8, !tbaa !9
  %156 = load ptr, ptr %5, align 8, !tbaa !9
  %157 = load i32, ptr %11, align 4, !tbaa !5
  %158 = sext i32 %157 to i64
  %159 = getelementptr inbounds ptr, ptr %156, i64 %158
  %160 = load ptr, ptr %159, align 8, !tbaa !9
  %161 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %155, ptr noundef @.str.35, ptr noundef %160) #7
  call void @usage_error_exit()
  br label %206

162:                                              ; preds = %146
  %163 = load i32, ptr %16, align 4, !tbaa !5
  %164 = sext i32 %163 to i64
  %165 = getelementptr inbounds [10 x [60 x i8]], ptr %7, i64 0, i64 %164
  %166 = getelementptr inbounds [60 x i8], ptr %165, i64 0, i64 0
  %167 = load ptr, ptr %5, align 8, !tbaa !9
  %168 = load i32, ptr %11, align 4, !tbaa !5
  %169 = sext i32 %168 to i64
  %170 = getelementptr inbounds ptr, ptr %167, i64 %169
  %171 = load ptr, ptr %170, align 8, !tbaa !9
  %172 = call ptr @strcpy(ptr noundef %166, ptr noundef %171) #7
  %173 = load i32, ptr %16, align 4, !tbaa !5
  %174 = sext i32 %173 to i64
  %175 = getelementptr inbounds [10 x [60 x i8]], ptr %7, i64 0, i64 %174
  %176 = getelementptr inbounds [60 x i8], ptr %175, i64 0, i64 0
  %177 = call ptr @efopen(ptr noundef %176, ptr noundef @.str.36)
  %178 = load i32, ptr %16, align 4, !tbaa !5
  %179 = sext i32 %178 to i64
  %180 = getelementptr inbounds [10 x ptr], ptr %6, i64 0, i64 %179
  store ptr %177, ptr %180, align 8, !tbaa !9
  %181 = load i32, ptr %16, align 4, !tbaa !5
  %182 = sext i32 %181 to i64
  %183 = getelementptr inbounds [10 x ptr], ptr %6, i64 0, i64 %182
  %184 = load ptr, ptr %183, align 8, !tbaa !9
  %185 = icmp eq ptr %184, null
  br i1 %185, label %186, label %193

186:                                              ; preds = %162
  %187 = load ptr, ptr @stderr, align 8, !tbaa !9
  %188 = load i32, ptr %16, align 4, !tbaa !5
  %189 = sext i32 %188 to i64
  %190 = getelementptr inbounds [10 x [60 x i8]], ptr %7, i64 0, i64 %189
  %191 = getelementptr inbounds [60 x i8], ptr %190, i64 0, i64 0
  %192 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %187, ptr noundef @.str.32, ptr noundef %191) #7
  call void @usage_error_exit()
  br label %203

193:                                              ; preds = %162
  %194 = load i32, ptr %16, align 4, !tbaa !5
  %195 = sext i32 %194 to i64
  %196 = getelementptr inbounds [10 x ptr], ptr %6, i64 0, i64 %195
  %197 = load ptr, ptr %196, align 8, !tbaa !9
  %198 = load i32, ptr %16, align 4, !tbaa !5
  %199 = sext i32 %198 to i64
  %200 = getelementptr inbounds [10 x [60 x i8]], ptr %7, i64 0, i64 %199
  %201 = getelementptr inbounds [60 x i8], ptr %200, i64 0, i64 0
  %202 = call i32 @parse_input_file(ptr noundef %197, ptr noundef %201, ptr noundef %18, ptr noundef %19)
  store i32 %202, ptr %17, align 4, !tbaa !5
  br label %203

203:                                              ; preds = %193, %186
  %204 = load i32, ptr %16, align 4, !tbaa !5
  %205 = add nsw i32 %204, 1
  store i32 %205, ptr %16, align 4, !tbaa !5
  br label %206

206:                                              ; preds = %203, %154
  br label %207

207:                                              ; preds = %206, %145
  br label %208

208:                                              ; preds = %207, %136
  br label %209

209:                                              ; preds = %208, %113
  br label %210

210:                                              ; preds = %209
  %211 = load i32, ptr %11, align 4, !tbaa !5
  %212 = add nsw i32 %211, 1
  store i32 %212, ptr %11, align 4, !tbaa !5
  br label %88, !llvm.loop !16

213:                                              ; preds = %88
  %214 = load i32, ptr %16, align 4, !tbaa !5
  %215 = icmp eq i32 %214, 0
  br i1 %215, label %216, label %219

216:                                              ; preds = %213
  %217 = load ptr, ptr @stderr, align 8, !tbaa !9
  %218 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %217, ptr noundef @.str.37) #7
  call void @usage_error_exit()
  br label %234

219:                                              ; preds = %213
  store i32 0, ptr %11, align 4, !tbaa !5
  br label %220

220:                                              ; preds = %230, %219
  %221 = load i32, ptr %11, align 4, !tbaa !5
  %222 = load i32, ptr %16, align 4, !tbaa !5
  %223 = icmp slt i32 %221, %222
  br i1 %223, label %224, label %233

224:                                              ; preds = %220
  %225 = load i32, ptr %11, align 4, !tbaa !5
  %226 = sext i32 %225 to i64
  %227 = getelementptr inbounds [10 x ptr], ptr %6, i64 0, i64 %226
  %228 = load ptr, ptr %227, align 8, !tbaa !9
  %229 = call i32 @fclose(ptr noundef %228)
  br label %230

230:                                              ; preds = %224
  %231 = load i32, ptr %11, align 4, !tbaa !5
  %232 = add nsw i32 %231, 1
  store i32 %232, ptr %11, align 4, !tbaa !5
  br label %220, !llvm.loop !17

233:                                              ; preds = %220
  br label %234

234:                                              ; preds = %233, %216
  %235 = load i32, ptr %18, align 4, !tbaa !5
  %236 = icmp eq i32 %235, 0
  br i1 %236, label %237, label %242

237:                                              ; preds = %234
  %238 = load ptr, ptr @stderr, align 8, !tbaa !9
  %239 = getelementptr inbounds [10 x [60 x i8]], ptr %7, i64 0, i64 2
  %240 = getelementptr inbounds [60 x i8], ptr %239, i64 0, i64 0
  %241 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %238, ptr noundef @.str.38, ptr noundef %240) #7
  call void @usage_error_exit()
  br label %266

242:                                              ; preds = %234
  %243 = load i32, ptr %18, align 4, !tbaa !5
  %244 = icmp sge i32 %243, 200
  br i1 %244, label %245, label %251

245:                                              ; preds = %242
  %246 = load ptr, ptr @stderr, align 8, !tbaa !9
  %247 = load i32, ptr %18, align 4, !tbaa !5
  %248 = getelementptr inbounds [10 x [60 x i8]], ptr %7, i64 0, i64 2
  %249 = getelementptr inbounds [60 x i8], ptr %248, i64 0, i64 0
  %250 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %246, ptr noundef @.str.39, i32 noundef %247, ptr noundef %249) #7
  call void @usage_error_exit()
  br label %265

251:                                              ; preds = %242
  %252 = load i32, ptr %14, align 4, !tbaa !5
  %253 = load i32, ptr %18, align 4, !tbaa !5
  %254 = icmp sgt i32 %252, %253
  br i1 %254, label %255, label %264

255:                                              ; preds = %251
  %256 = load ptr, ptr @stderr, align 8, !tbaa !9
  %257 = load i32, ptr %18, align 4, !tbaa !5
  %258 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %256, ptr noundef @.str.40, i32 noundef %257) #7
  %259 = load ptr, ptr @stderr, align 8, !tbaa !9
  %260 = load i32, ptr %14, align 4, !tbaa !5
  %261 = load i32, ptr %18, align 4, !tbaa !5
  %262 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %259, ptr noundef @.str.41, i32 noundef %260, i32 noundef %261) #7
  %263 = load i32, ptr %18, align 4, !tbaa !5
  store i32 %263, ptr %14, align 4, !tbaa !5
  br label %264

264:                                              ; preds = %255, %251
  br label %265

265:                                              ; preds = %264, %245
  br label %266

266:                                              ; preds = %265, %237
  store i32 0, ptr %11, align 4, !tbaa !5
  br label %267

267:                                              ; preds = %275, %266
  %268 = load i32, ptr %11, align 4, !tbaa !5
  %269 = icmp slt i32 %268, 200
  br i1 %269, label %270, label %278

270:                                              ; preds = %267
  %271 = load i32, ptr %11, align 4, !tbaa !5
  %272 = load i32, ptr %11, align 4, !tbaa !5
  %273 = sext i32 %272 to i64
  %274 = getelementptr inbounds [200 x i32], ptr @temp_critical, i64 0, i64 %273
  store i32 %271, ptr %274, align 4, !tbaa !5
  br label %275

275:                                              ; preds = %270
  %276 = load i32, ptr %11, align 4, !tbaa !5
  %277 = add nsw i32 %276, 1
  store i32 %277, ptr %11, align 4, !tbaa !5
  br label %267, !llvm.loop !18

278:                                              ; preds = %267
  %279 = load i32, ptr %18, align 4, !tbaa !5
  %280 = sext i32 %279 to i64
  call void @qsort(ptr noundef @temp_critical, i64 noundef %280, i64 noundef 4, ptr noundef @compare_critical)
  %281 = load i32, ptr %19, align 4, !tbaa !5
  %282 = icmp sgt i32 %281, 0
  br i1 %282, label %283, label %298

283:                                              ; preds = %278
  store i32 0, ptr %11, align 4, !tbaa !5
  br label %284

284:                                              ; preds = %292, %283
  %285 = load i32, ptr %11, align 4, !tbaa !5
  %286 = icmp slt i32 %285, 200
  br i1 %286, label %287, label %295

287:                                              ; preds = %284
  %288 = load i32, ptr %11, align 4, !tbaa !5
  %289 = load i32, ptr %11, align 4, !tbaa !5
  %290 = sext i32 %289 to i64
  %291 = getelementptr inbounds [200 x i32], ptr @temp_pre_critical, i64 0, i64 %290
  store i32 %288, ptr %291, align 4, !tbaa !5
  br label %292

292:                                              ; preds = %287
  %293 = load i32, ptr %11, align 4, !tbaa !5
  %294 = add nsw i32 %293, 1
  store i32 %294, ptr %11, align 4, !tbaa !5
  br label %284, !llvm.loop !19

295:                                              ; preds = %284
  %296 = load i32, ptr %19, align 4, !tbaa !5
  %297 = sext i32 %296 to i64
  call void @qsort(ptr noundef @temp_pre_critical, i64 noundef %297, i64 noundef 4, ptr noundef @compare_pre_critical)
  br label %298

298:                                              ; preds = %295, %278
  %299 = getelementptr inbounds [10 x [60 x i8]], ptr %7, i64 0, i64 0
  %300 = getelementptr inbounds [60 x i8], ptr %299, i64 0, i64 0
  %301 = call ptr @extract_dir(ptr noundef %300)
  store ptr %301, ptr %8, align 8, !tbaa !9
  %302 = load ptr, ptr %8, align 8, !tbaa !9
  %303 = call ptr @strcpy(ptr noundef @caselog_filename, ptr noundef %302) #7
  %304 = call ptr @strstr(ptr noundef @caselog_filename, ptr noundef @.str.42) #8
  store ptr %304, ptr %8, align 8, !tbaa !9
  %305 = load ptr, ptr %8, align 8, !tbaa !9
  %306 = icmp eq ptr %305, null
  br i1 %306, label %307, label %309

307:                                              ; preds = %298
  %308 = call ptr @strstr(ptr noundef @caselog_filename, ptr noundef @.str.43) #8
  store ptr %308, ptr %8, align 8, !tbaa !9
  br label %309

309:                                              ; preds = %307, %298
  %310 = load ptr, ptr %8, align 8, !tbaa !9
  %311 = icmp ne ptr %310, null
  br i1 %311, label %312, label %315

312:                                              ; preds = %309
  %313 = load ptr, ptr %8, align 8, !tbaa !9
  store i8 0, ptr %313, align 1, !tbaa !20
  %314 = call ptr @strcat(ptr noundef @caselog_filename, ptr noundef @.str.44) #7
  br label %317

315:                                              ; preds = %309
  %316 = call ptr @strcpy(ptr noundef @caselog_filename, ptr noundef @.str.45) #7
  br label %317

317:                                              ; preds = %315, %312
  %318 = call ptr @efopen(ptr noundef @caselog_filename, ptr noundef @.str.31)
  store ptr %318, ptr @caselog_fp, align 8, !tbaa !9
  store ptr %23, ptr %22, align 8, !tbaa !9
  %319 = load ptr, ptr %22, align 8, !tbaa !9
  %320 = call i64 @time(ptr noundef %319) #7
  %321 = load ptr, ptr %22, align 8, !tbaa !9
  %322 = call ptr @localtime(ptr noundef %321) #7
  store ptr %322, ptr %24, align 8, !tbaa !9
  %323 = load ptr, ptr @caselog_fp, align 8, !tbaa !9
  %324 = load ptr, ptr @VERSION, align 8, !tbaa !9
  %325 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %323, ptr noundef @.str.46, ptr noundef %324) #7
  %326 = load ptr, ptr %24, align 8, !tbaa !9
  %327 = getelementptr inbounds %struct.tm, ptr %326, i32 0, i32 5
  %328 = load i32, ptr %327, align 4, !tbaa !21
  %329 = add nsw i32 1900, %328
  store i32 %329, ptr %20, align 4, !tbaa !5
  %330 = load ptr, ptr @caselog_fp, align 8, !tbaa !9
  %331 = load ptr, ptr %24, align 8, !tbaa !9
  %332 = getelementptr inbounds %struct.tm, ptr %331, i32 0, i32 6
  %333 = load i32, ptr %332, align 8, !tbaa !24
  %334 = sext i32 %333 to i64
  %335 = getelementptr inbounds [7 x ptr], ptr %9, i64 0, i64 %334
  %336 = load ptr, ptr %335, align 8, !tbaa !9
  %337 = load ptr, ptr %24, align 8, !tbaa !9
  %338 = getelementptr inbounds %struct.tm, ptr %337, i32 0, i32 3
  %339 = load i32, ptr %338, align 4, !tbaa !25
  %340 = load ptr, ptr %24, align 8, !tbaa !9
  %341 = getelementptr inbounds %struct.tm, ptr %340, i32 0, i32 4
  %342 = load i32, ptr %341, align 8, !tbaa !26
  %343 = sext i32 %342 to i64
  %344 = getelementptr inbounds [12 x ptr], ptr %10, i64 0, i64 %343
  %345 = load ptr, ptr %344, align 8, !tbaa !9
  %346 = load i32, ptr %20, align 4, !tbaa !5
  %347 = load ptr, ptr %24, align 8, !tbaa !9
  %348 = getelementptr inbounds %struct.tm, ptr %347, i32 0, i32 2
  %349 = load i32, ptr %348, align 8, !tbaa !27
  %350 = load ptr, ptr %24, align 8, !tbaa !9
  %351 = getelementptr inbounds %struct.tm, ptr %350, i32 0, i32 1
  %352 = load i32, ptr %351, align 4, !tbaa !28
  %353 = load ptr, ptr %24, align 8, !tbaa !9
  %354 = getelementptr inbounds %struct.tm, ptr %353, i32 0, i32 0
  %355 = load i32, ptr %354, align 8, !tbaa !29
  %356 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %330, ptr noundef @.str.47, ptr noundef %336, i32 noundef %339, ptr noundef %345, i32 noundef %346, i32 noundef %349, i32 noundef %352, i32 noundef %355) #7
  %357 = load ptr, ptr @caselog_fp, align 8, !tbaa !9
  %358 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %357, ptr noundef @.str.48) #7
  %359 = load ptr, ptr @caselog_fp, align 8, !tbaa !9
  %360 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %359, ptr noundef @.str.49) #7
  store i32 0, ptr %11, align 4, !tbaa !5
  br label %361

361:                                              ; preds = %387, %317
  %362 = load i32, ptr %11, align 4, !tbaa !5
  %363 = load i32, ptr %18, align 4, !tbaa !5
  %364 = icmp slt i32 %362, %363
  br i1 %364, label %365, label %390

365:                                              ; preds = %361
  %366 = load i32, ptr %11, align 4, !tbaa !5
  %367 = sext i32 %366 to i64
  %368 = getelementptr inbounds [200 x i32], ptr @temp_critical, i64 0, i64 %367
  %369 = load i32, ptr %368, align 4, !tbaa !5
  store i32 %369, ptr %12, align 4, !tbaa !5
  %370 = load ptr, ptr @caselog_fp, align 8, !tbaa !9
  %371 = load i32, ptr %12, align 4, !tbaa !5
  %372 = sext i32 %371 to i64
  %373 = getelementptr inbounds [200 x %struct.CRIT], ptr @critical, i64 0, i64 %372
  %374 = getelementptr inbounds %struct.CRIT, ptr %373, i32 0, i32 0
  %375 = load i32, ptr %374, align 4, !tbaa !30
  %376 = load i32, ptr %12, align 4, !tbaa !5
  %377 = sext i32 %376 to i64
  %378 = getelementptr inbounds [200 x %struct.CRIT], ptr @critical, i64 0, i64 %377
  %379 = getelementptr inbounds %struct.CRIT, ptr %378, i32 0, i32 3
  %380 = getelementptr inbounds [60 x i8], ptr %379, i64 0, i64 0
  %381 = load i32, ptr %12, align 4, !tbaa !5
  %382 = sext i32 %381 to i64
  %383 = getelementptr inbounds [200 x %struct.CRIT], ptr @critical, i64 0, i64 %382
  %384 = getelementptr inbounds %struct.CRIT, ptr %383, i32 0, i32 1
  %385 = getelementptr inbounds [60 x i8], ptr %384, i64 0, i64 0
  %386 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %370, ptr noundef @.str.50, i32 noundef %375, ptr noundef %380, ptr noundef %385) #7
  br label %387

387:                                              ; preds = %365
  %388 = load i32, ptr %11, align 4, !tbaa !5
  %389 = add nsw i32 %388, 1
  store i32 %389, ptr %11, align 4, !tbaa !5
  br label %361, !llvm.loop !32

390:                                              ; preds = %361
  %391 = load ptr, ptr @caselog_fp, align 8, !tbaa !9
  %392 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %391, ptr noundef @.str.51) #7
  %393 = load ptr, ptr @caselog_fp, align 8, !tbaa !9
  %394 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %393, ptr noundef @.str.49) #7
  store i32 0, ptr %11, align 4, !tbaa !5
  br label %395

395:                                              ; preds = %421, %390
  %396 = load i32, ptr %11, align 4, !tbaa !5
  %397 = load i32, ptr %19, align 4, !tbaa !5
  %398 = icmp slt i32 %396, %397
  br i1 %398, label %399, label %424

399:                                              ; preds = %395
  %400 = load i32, ptr %11, align 4, !tbaa !5
  %401 = sext i32 %400 to i64
  %402 = getelementptr inbounds [200 x i32], ptr @temp_pre_critical, i64 0, i64 %401
  %403 = load i32, ptr %402, align 4, !tbaa !5
  store i32 %403, ptr %12, align 4, !tbaa !5
  %404 = load ptr, ptr @caselog_fp, align 8, !tbaa !9
  %405 = load i32, ptr %12, align 4, !tbaa !5
  %406 = sext i32 %405 to i64
  %407 = getelementptr inbounds [200 x %struct.CRIT], ptr @pre_critical, i64 0, i64 %406
  %408 = getelementptr inbounds %struct.CRIT, ptr %407, i32 0, i32 0
  %409 = load i32, ptr %408, align 4, !tbaa !30
  %410 = load i32, ptr %12, align 4, !tbaa !5
  %411 = sext i32 %410 to i64
  %412 = getelementptr inbounds [200 x %struct.CRIT], ptr @pre_critical, i64 0, i64 %411
  %413 = getelementptr inbounds %struct.CRIT, ptr %412, i32 0, i32 3
  %414 = getelementptr inbounds [60 x i8], ptr %413, i64 0, i64 0
  %415 = load i32, ptr %12, align 4, !tbaa !5
  %416 = sext i32 %415 to i64
  %417 = getelementptr inbounds [200 x %struct.CRIT], ptr @pre_critical, i64 0, i64 %416
  %418 = getelementptr inbounds %struct.CRIT, ptr %417, i32 0, i32 1
  %419 = getelementptr inbounds [60 x i8], ptr %418, i64 0, i64 0
  %420 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %404, ptr noundef @.str.50, i32 noundef %409, ptr noundef %414, ptr noundef %419) #7
  br label %421

421:                                              ; preds = %399
  %422 = load i32, ptr %11, align 4, !tbaa !5
  %423 = add nsw i32 %422, 1
  store i32 %423, ptr %11, align 4, !tbaa !5
  br label %395, !llvm.loop !33

424:                                              ; preds = %395
  store i32 0, ptr %11, align 4, !tbaa !5
  br label %425

425:                                              ; preds = %438, %424
  %426 = load i32, ptr %11, align 4, !tbaa !5
  %427 = load i32, ptr %14, align 4, !tbaa !5
  %428 = icmp slt i32 %426, %427
  br i1 %428, label %429, label %441

429:                                              ; preds = %425
  %430 = load i32, ptr %11, align 4, !tbaa !5
  %431 = sext i32 %430 to i64
  %432 = getelementptr inbounds [200 x i32], ptr @temp_critical, i64 0, i64 %431
  %433 = load i32, ptr %432, align 4, !tbaa !5
  store i32 %433, ptr %12, align 4, !tbaa !5
  %434 = load i32, ptr %12, align 4, !tbaa !5
  %435 = load i32, ptr %15, align 4, !tbaa !5
  %436 = getelementptr inbounds [8 x %struct.MATRIX], ptr %25, i64 0, i64 0
  %437 = call i32 @concat(i32 noundef %434, i32 noundef %435, ptr noundef %436)
  store i32 %437, ptr %17, align 4, !tbaa !5
  br label %438

438:                                              ; preds = %429
  %439 = load i32, ptr %11, align 4, !tbaa !5
  %440 = add nsw i32 %439, 1
  store i32 %440, ptr %11, align 4, !tbaa !5
  br label %425, !llvm.loop !34

441:                                              ; preds = %425
  %442 = load ptr, ptr @caselog_fp, align 8, !tbaa !9
  %443 = call i32 @fclose(ptr noundef %442)
  %444 = load ptr, ptr @stderr, align 8, !tbaa !9
  %445 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %444, ptr noundef @.str.52, ptr noundef @caselog_filename) #7
  call void @llvm.lifetime.end.p0(i64 6424000, ptr %25) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #7
  call void @llvm.lifetime.end.p0(i64 96, ptr %10) #7
  call void @llvm.lifetime.end.p0(i64 56, ptr %9) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #7
  call void @llvm.lifetime.end.p0(i64 600, ptr %7) #7
  call void @llvm.lifetime.end.p0(i64 80, ptr %6) #7
  ret i32 1
}

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

; 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) #3

; Function Attrs: nounwind
declare ptr @strcpy(ptr noundef, ptr noundef) #1

; Function Attrs: nounwind willreturn memory(read)
declare i32 @strncmp(ptr noundef, ptr noundef, i64 noundef) #4

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

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

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

declare i32 @fclose(ptr noundef) #6

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

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

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

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

; Function Attrs: nounwind willreturn memory(read)
declare ptr @strstr(ptr noundef, ptr noundef) #4

; Function Attrs: nounwind
declare ptr @strcat(ptr noundef, ptr noundef) #1

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

; Function Attrs: nounwind
declare ptr @localtime(ptr noundef) #1

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

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

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

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

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


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

%struct.CRIT = type { i32, [60 x i8], [60 x i8], [60 x i8], [60 x i8] }
%struct.MATRIX = type { i32, i32, i32, i32, [200 x i32], [500 x i32], [3 x [60 x i8]], [500 x [200 x ptr]] }

@VERSION = external dso_local local_unnamed_addr global ptr, align 8
@stderr = external local_unnamed_addr global ptr, align 8
@__const.main.day = external hidden unnamed_addr constant [7 x ptr], align 16
@__const.main.month = external hidden unnamed_addr constant [12 x ptr], align 16
@progname = external dso_local local_unnamed_addr global ptr, align 8
@debug_filename = external dso_local global [60 x i8], align 16
@.str.25 = external hidden unnamed_addr constant [1 x i8], align 1
@debug_fp = external dso_local local_unnamed_addr global ptr, align 8
@.str.26 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.29 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.31 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.32 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.33 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.34 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.36 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.37 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.38 = external hidden unnamed_addr constant [47 x i8], align 1
@.str.39 = external hidden unnamed_addr constant [67 x i8], align 1
@.str.40 = external hidden unnamed_addr constant [53 x i8], align 1
@.str.41 = external hidden unnamed_addr constant [47 x i8], align 1
@temp_critical = external dso_local global [200 x i32], align 16
@temp_pre_critical = external dso_local global [200 x i32], align 16
@caselog_filename = external dso_local global [60 x i8], align 16
@.str.42 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.43 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.44 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.45 = external hidden unnamed_addr constant [13 x i8], align 1
@caselog_fp = external dso_local local_unnamed_addr global ptr, align 8
@.str.46 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.47 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.48 = external hidden unnamed_addr constant [51 x i8], align 1
@.str.49 = external hidden unnamed_addr constant [47 x i8], align 1
@.str.50 = external hidden unnamed_addr constant [22 x i8], align 1
@critical = external dso_local global [200 x %struct.CRIT], align 16
@.str.51 = external hidden unnamed_addr constant [51 x i8], align 1
@pre_critical = external dso_local global [200 x %struct.CRIT], align 16
@.str.52 = external hidden unnamed_addr constant [32 x i8], align 1

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

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

; Function Attrs: nounwind uwtable
define dso_local noundef i32 @main(i32 noundef %0, ptr nocapture noundef readonly %1) local_unnamed_addr #0 {
.preheader111:
  %2 = alloca [10 x ptr], align 16
  %3 = alloca [10 x [60 x i8]], align 16
  %4 = alloca i32, align 4
  %5 = alloca i32, align 4
  %6 = alloca i64, align 8
  %7 = alloca [8 x %struct.MATRIX], align 16
  call void @llvm.lifetime.start.p0(i64 80, ptr nonnull %2) #9
  call void @llvm.lifetime.start.p0(i64 600, ptr nonnull %3) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %4) #9
  store i32 0, ptr %4, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %5) #9
  store i32 0, ptr %5, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %6) #9
  call void @llvm.lifetime.start.p0(i64 6424000, ptr nonnull %7) #9
  %8 = load ptr, ptr %1, align 8, !tbaa !9
  store ptr %8, ptr @progname, align 8, !tbaa !9
  %9 = tail call ptr @strcpy(ptr noundef nonnull dereferenceable(1) @debug_filename, ptr noundef nonnull dereferenceable(1) @.str.25) #9
  store ptr null, ptr @debug_fp, align 8, !tbaa !9
  %10 = load ptr, ptr @stderr, align 8, !tbaa !9
  %11 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %10, ptr noundef nonnull @.str.26, i64 noundef 6424000) #10
  %scevgep139 = getelementptr inbounds i8, ptr %7, i64 3000
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(800000) %scevgep139, i8 0, i64 800000, i1 false), !tbaa !9
  %scevgep139.1 = getelementptr inbounds i8, ptr %7, i64 806000
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(800000) %scevgep139.1, i8 0, i64 800000, i1 false), !tbaa !9
  %scevgep139.2 = getelementptr inbounds i8, ptr %7, i64 1609000
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(800000) %scevgep139.2, i8 0, i64 800000, i1 false), !tbaa !9
  %scevgep139.3 = getelementptr inbounds i8, ptr %7, i64 2412000
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(800000) %scevgep139.3, i8 0, i64 800000, i1 false), !tbaa !9
  %scevgep139.4 = getelementptr inbounds i8, ptr %7, i64 3215000
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(800000) %scevgep139.4, i8 0, i64 800000, i1 false), !tbaa !9
  %scevgep139.5 = getelementptr inbounds i8, ptr %7, i64 4018000
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(800000) %scevgep139.5, i8 0, i64 800000, i1 false), !tbaa !9
  %scevgep139.6 = getelementptr inbounds i8, ptr %7, i64 4821000
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(800000) %scevgep139.6, i8 0, i64 800000, i1 false), !tbaa !9
  %scevgep139.7 = getelementptr inbounds i8, ptr %7, i64 5624000
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(800000) %scevgep139.7, i8 0, i64 800000, i1 false), !tbaa !9
  %12 = icmp slt i32 %0, 3
  br i1 %12, label %13, label %.preheader109

13:                                               ; preds = %.preheader111
  %14 = load ptr, ptr @stderr, align 8, !tbaa !9
  %15 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %14, ptr noundef nonnull @.str.27) #10
  tail call void @usage_error_exit()
  br label %.preheader109

.preheader109:                                    ; preds = %13, %.preheader111
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(80) %2, i8 0, i64 80, i1 false), !tbaa !9
  %16 = call ptr @strcpy(ptr noundef nonnull dereferenceable(1) %3, ptr noundef nonnull dereferenceable(1) @.str.25) #9
  %17 = getelementptr inbounds i8, ptr %3, i64 60
  %18 = call ptr @strcpy(ptr noundef nonnull dereferenceable(1) %17, ptr noundef nonnull dereferenceable(1) @.str.25) #9
  %19 = getelementptr inbounds i8, ptr %3, i64 120
  %20 = call ptr @strcpy(ptr noundef nonnull dereferenceable(1) %19, ptr noundef nonnull dereferenceable(1) @.str.25) #9
  %21 = getelementptr inbounds i8, ptr %3, i64 180
  %22 = call ptr @strcpy(ptr noundef nonnull dereferenceable(1) %21, ptr noundef nonnull dereferenceable(1) @.str.25) #9
  %23 = getelementptr inbounds i8, ptr %3, i64 240
  %24 = call ptr @strcpy(ptr noundef nonnull dereferenceable(1) %23, ptr noundef nonnull dereferenceable(1) @.str.25) #9
  %25 = getelementptr inbounds i8, ptr %3, i64 300
  %26 = call ptr @strcpy(ptr noundef nonnull dereferenceable(1) %25, ptr noundef nonnull dereferenceable(1) @.str.25) #9
  %27 = getelementptr inbounds i8, ptr %3, i64 360
  %28 = call ptr @strcpy(ptr noundef nonnull dereferenceable(1) %27, ptr noundef nonnull dereferenceable(1) @.str.25) #9
  %29 = getelementptr inbounds i8, ptr %3, i64 420
  %30 = call ptr @strcpy(ptr noundef nonnull dereferenceable(1) %29, ptr noundef nonnull dereferenceable(1) @.str.25) #9
  %31 = getelementptr inbounds i8, ptr %3, i64 480
  %32 = call ptr @strcpy(ptr noundef nonnull dereferenceable(1) %31, ptr noundef nonnull dereferenceable(1) @.str.25) #9
  %33 = getelementptr inbounds i8, ptr %3, i64 540
  %34 = call ptr @strcpy(ptr noundef nonnull dereferenceable(1) %33, ptr noundef nonnull dereferenceable(1) @.str.25) #9
  %35 = icmp sgt i32 %0, 1
  br i1 %35, label %.lr.ph, label %._crit_edge.thread

.lr.ph:                                           ; preds = %.preheader109
  %rhsc = load i8, ptr @.str.34, align 1
  br label %36

36:                                               ; preds = %.lr.ph, %85
  %.2119 = phi i32 [ 1, %.lr.ph ], [ %86, %85 ]
  %.092118 = phi i32 [ 0, %.lr.ph ], [ %.193, %85 ]
  %.094117 = phi i32 [ 0, %.lr.ph ], [ %.195, %85 ]
  %.096116 = phi i32 [ undef, %.lr.ph ], [ %.197, %85 ]
  %37 = sext i32 %.2119 to i64
  %38 = getelementptr inbounds ptr, ptr %1, i64 %37
  %39 = load ptr, ptr %38, align 8, !tbaa !9
  %40 = call i32 @strncmp(ptr noundef nonnull dereferenceable(1) %39, ptr noundef nonnull dereferenceable(1) @.str.28, i64 noundef 2) #11
  %41 = icmp eq i32 %40, 0
  br i1 %41, label %42, label %49

42:                                               ; preds = %36
  %43 = getelementptr inbounds i8, ptr %39, i64 2
  %44 = call i32 @atoi(ptr nocapture noundef %43) #11
  %45 = icmp slt i32 %44, 1
  br i1 %45, label %46, label %85

46:                                               ; preds = %42
  %47 = load ptr, ptr @stderr, align 8, !tbaa !9
  %48 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %47, ptr noundef nonnull @.str.29) #10
  call void @usage_error_exit()
  br label %85

49:                                               ; preds = %36
  %50 = call i32 @strncmp(ptr noundef nonnull dereferenceable(1) %39, ptr noundef nonnull dereferenceable(1) @.str.30, i64 noundef 2) #11
  %51 = icmp eq i32 %50, 0
  br i1 %51, label %52, label %63

52:                                               ; preds = %49
  %53 = add nsw i32 %.2119, 1
  %54 = sext i32 %53 to i64
  %55 = getelementptr inbounds ptr, ptr %1, i64 %54
  %56 = load ptr, ptr %55, align 8, !tbaa !9
  %57 = call ptr @strcpy(ptr noundef nonnull dereferenceable(1) @debug_filename, ptr noundef nonnull dereferenceable(1) %56) #9
  %58 = call ptr @efopen(ptr noundef nonnull @debug_filename, ptr noundef nonnull @.str.31)
  store ptr %58, ptr @debug_fp, align 8, !tbaa !9
  %59 = icmp eq ptr %58, null
  br i1 %59, label %60, label %85

60:                                               ; preds = %52
  %61 = load ptr, ptr @stderr, align 8, !tbaa !9
  %62 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %61, ptr noundef nonnull @.str.32, ptr noundef nonnull @debug_filename) #10
  call void @usage_error_exit()
  br label %85

63:                                               ; preds = %49
  %64 = call i32 @strncmp(ptr noundef nonnull dereferenceable(1) %39, ptr noundef nonnull dereferenceable(1) @.str.33, i64 noundef 2) #11
  %65 = icmp eq i32 %64, 0
  br i1 %65, label %85, label %66

66:                                               ; preds = %63
  %lhsc = load i8, ptr %39, align 1
  %67 = icmp eq i8 %lhsc, %rhsc
  br i1 %67, label %68, label %71

68:                                               ; preds = %66
  %69 = load ptr, ptr @stderr, align 8, !tbaa !9
  %70 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %69, ptr noundef nonnull @.str.35, ptr noundef nonnull %39) #10
  call void @usage_error_exit()
  br label %85

71:                                               ; preds = %66
  %72 = sext i32 %.092118 to i64
  %73 = getelementptr inbounds [10 x [60 x i8]], ptr %3, i64 0, i64 %72
  %74 = call ptr @strcpy(ptr noundef nonnull dereferenceable(1) %73, ptr noundef nonnull dereferenceable(1) %39) #9
  %75 = call ptr @efopen(ptr noundef nonnull %73, ptr noundef nonnull @.str.36)
  %76 = getelementptr inbounds [10 x ptr], ptr %2, i64 0, i64 %72
  store ptr %75, ptr %76, align 8, !tbaa !9
  %77 = icmp eq ptr %75, null
  br i1 %77, label %78, label %81

78:                                               ; preds = %71
  %79 = load ptr, ptr @stderr, align 8, !tbaa !9
  %80 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %79, ptr noundef nonnull @.str.32, ptr noundef nonnull %73) #10
  call void @usage_error_exit()
  br label %83

81:                                               ; preds = %71
  %82 = call i32 @parse_input_file(ptr noundef nonnull %75, ptr noundef nonnull %73, ptr noundef nonnull %4, ptr noundef nonnull %5)
  br label %83

83:                                               ; preds = %81, %78
  %84 = add nsw i32 %.092118, 1
  br label %85

85:                                               ; preds = %63, %46, %42, %83, %68, %52, %60
  %.197 = phi i32 [ %44, %46 ], [ %44, %42 ], [ %.096116, %60 ], [ %.096116, %52 ], [ %.096116, %68 ], [ %.096116, %83 ], [ %.096116, %63 ]
  %.195 = phi i32 [ %.094117, %46 ], [ %.094117, %42 ], [ %.094117, %60 ], [ %.094117, %52 ], [ %.094117, %68 ], [ %.094117, %83 ], [ 1, %63 ]
  %.193 = phi i32 [ %.092118, %46 ], [ %.092118, %42 ], [ %.092118, %60 ], [ %.092118, %52 ], [ %.092118, %68 ], [ %84, %83 ], [ %.092118, %63 ]
  %.3 = phi i32 [ %.2119, %46 ], [ %.2119, %42 ], [ %53, %60 ], [ %53, %52 ], [ %.2119, %68 ], [ %.2119, %83 ], [ %.2119, %63 ]
  %86 = add nsw i32 %.3, 1
  %87 = icmp slt i32 %86, %0
  br i1 %87, label %36, label %._crit_edge, !llvm.loop !11

._crit_edge:                                      ; preds = %85
  %88 = icmp eq i32 %.193, 0
  br i1 %88, label %._crit_edge.thread, label %.preheader108

.preheader108:                                    ; preds = %._crit_edge
  %89 = icmp sgt i32 %.193, 0
  br i1 %89, label %.lr.ph123.preheader, label %.loopexit

.lr.ph123.preheader:                              ; preds = %.preheader108
  %wide.trip.count = zext nneg i32 %.193 to i64
  br label %.lr.ph123

._crit_edge.thread:                               ; preds = %.preheader109, %._crit_edge
  %.094.lcssa169 = phi i32 [ %.195, %._crit_edge ], [ 0, %.preheader109 ]
  %.096.lcssa167 = phi i32 [ %.197, %._crit_edge ], [ undef, %.preheader109 ]
  %90 = load ptr, ptr @stderr, align 8, !tbaa !9
  %91 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %90, ptr noundef nonnull @.str.37) #10
  call void @usage_error_exit()
  br label %.loopexit

.lr.ph123:                                        ; preds = %.lr.ph123.preheader, %.lr.ph123
  %indvars.iv = phi i64 [ 0, %.lr.ph123.preheader ], [ %indvars.iv.next, %.lr.ph123 ]
  %92 = getelementptr inbounds [10 x ptr], ptr %2, i64 0, i64 %indvars.iv
  %93 = load ptr, ptr %92, align 8, !tbaa !9
  %94 = call i32 @fclose(ptr noundef %93)
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond.not, label %.loopexit, label %.lr.ph123, !llvm.loop !13

.loopexit:                                        ; preds = %.lr.ph123, %.preheader108, %._crit_edge.thread
  %.094.lcssa168 = phi i32 [ %.195, %.preheader108 ], [ %.094.lcssa169, %._crit_edge.thread ], [ %.195, %.lr.ph123 ]
  %.096.lcssa166 = phi i32 [ %.197, %.preheader108 ], [ %.096.lcssa167, %._crit_edge.thread ], [ %.197, %.lr.ph123 ]
  %95 = load i32, ptr %4, align 4, !tbaa !5
  %96 = icmp eq i32 %95, 0
  br i1 %96, label %97, label %100

97:                                               ; preds = %.loopexit
  %98 = load ptr, ptr @stderr, align 8, !tbaa !9
  %99 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %98, ptr noundef nonnull @.str.38, ptr noundef nonnull %19) #10
  call void @usage_error_exit()
  br label %vector.body

100:                                              ; preds = %.loopexit
  %101 = icmp sgt i32 %95, 199
  br i1 %101, label %102, label %105

102:                                              ; preds = %100
  %103 = load ptr, ptr @stderr, align 8, !tbaa !9
  %104 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %103, ptr noundef nonnull @.str.39, i32 noundef %95, ptr noundef nonnull %19) #10
  call void @usage_error_exit()
  br label %vector.body

105:                                              ; preds = %100
  %106 = icmp sgt i32 %.096.lcssa166, %95
  br i1 %106, label %107, label %vector.body

107:                                              ; preds = %105
  %108 = load ptr, ptr @stderr, align 8, !tbaa !9
  %109 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %108, ptr noundef nonnull @.str.40, i32 noundef %95) #10
  %110 = load ptr, ptr @stderr, align 8, !tbaa !9
  %111 = load i32, ptr %4, align 4, !tbaa !5
  %112 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %110, ptr noundef nonnull @.str.41, i32 noundef %.096.lcssa166, i32 noundef %111) #10
  %113 = load i32, ptr %4, align 4, !tbaa !5
  br label %vector.body

vector.body:                                      ; preds = %102, %107, %105, %97
  %.298 = phi i32 [ %.096.lcssa166, %97 ], [ %.096.lcssa166, %102 ], [ %113, %107 ], [ %.096.lcssa166, %105 ]
  store <4 x i32> <i32 0, i32 1, i32 2, i32 3>, ptr @temp_critical, align 16, !tbaa !5
  store <4 x i32> <i32 4, i32 5, i32 6, i32 7>, ptr getelementptr inbounds (i8, ptr @temp_critical, i64 16), align 16, !tbaa !5
  store <4 x i32> <i32 8, i32 9, i32 10, i32 11>, ptr getelementptr inbounds (i8, ptr @temp_critical, i64 32), align 16, !tbaa !5
  store <4 x i32> <i32 12, i32 13, i32 14, i32 15>, ptr getelementptr inbounds (i8, ptr @temp_critical, i64 48), align 16, !tbaa !5
  store <4 x i32> <i32 16, i32 17, i32 18, i32 19>, ptr getelementptr inbounds (i8, ptr @temp_critical, i64 64), align 16, !tbaa !5
  store <4 x i32> <i32 20, i32 21, i32 22, i32 23>, ptr getelementptr inbounds (i8, ptr @temp_critical, i64 80), align 16, !tbaa !5
  store <4 x i32> <i32 24, i32 25, i32 26, i32 27>, ptr getelementptr inbounds (i8, ptr @temp_critical, i64 96), align 16, !tbaa !5
  store <4 x i32> <i32 28, i32 29, i32 30, i32 31>, ptr getelementptr inbounds (i8, ptr @temp_critical, i64 112), align 16, !tbaa !5
  store <4 x i32> <i32 32, i32 33, i32 34, i32 35>, ptr getelementptr inbounds (i8, ptr @temp_critical, i64 128), align 16, !tbaa !5
  store <4 x i32> <i32 36, i32 37, i32 38, i32 39>, ptr getelementptr inbounds (i8, ptr @temp_critical, i64 144), align 16, !tbaa !5
  store <4 x i32> <i32 40, i32 41, i32 42, i32 43>, ptr getelementptr inbounds (i8, ptr @temp_critical, i64 160), align 16, !tbaa !5
  store <4 x i32> <i32 44, i32 45, i32 46, i32 47>, ptr getelementptr inbounds (i8, ptr @temp_critical, i64 176), align 16, !tbaa !5
  store <4 x i32> <i32 48, i32 49, i32 50, i32 51>, ptr getelementptr inbounds (i8, ptr @temp_critical, i64 192), align 16, !tbaa !5
  store <4 x i32> <i32 52, i32 53, i32 54, i32 55>, ptr getelementptr inbounds (i8, ptr @temp_critical, i64 208), align 16, !tbaa !5
  store <4 x i32> <i32 56, i32 57, i32 58, i32 59>, ptr getelementptr inbounds (i8, ptr @temp_critical, i64 224), align 16, !tbaa !5
  store <4 x i32> <i32 60, i32 61, i32 62, i32 63>, ptr getelementptr inbounds (i8, ptr @temp_critical, i64 240), align 16, !tbaa !5
  store <4 x i32> <i32 64, i32 65, i32 66, i32 67>, ptr getelementptr inbounds (i8, ptr @temp_critical, i64 256), align 16, !tbaa !5
  store <4 x i32> <i32 68, i32 69, i32 70, i32 71>, ptr getelementptr inbounds (i8, ptr @temp_critical, i64 272), align 16, !tbaa !5
  store <4 x i32> <i32 72, i32 73, i32 74, i32 75>, ptr getelementptr inbounds (i8, ptr @temp_critical, i64 288), align 16, !tbaa !5
  store <4 x i32> <i32 76, i32 77, i32 78, i32 79>, ptr getelementptr inbounds (i8, ptr @temp_critical, i64 304), align 16, !tbaa !5
  store <4 x i32> <i32 80, i32 81, i32 82, i32 83>, ptr getelementptr inbounds (i8, ptr @temp_critical, i64 320), align 16, !tbaa !5
  store <4 x i32> <i32 84, i32 85, i32 86, i32 87>, ptr getelementptr inbounds (i8, ptr @temp_critical, i64 336), align 16, !tbaa !5
  store <4 x i32> <i32 88, i32 89, i32 90, i32 91>, ptr getelementptr inbounds (i8, ptr @temp_critical, i64 352), align 16, !tbaa !5
  store <4 x i32> <i32 92, i32 93, i32 94, i32 95>, ptr getelementptr inbounds (i8, ptr @temp_critical, i64 368), align 16, !tbaa !5
  store <4 x i32> <i32 96, i32 97, i32 98, i32 99>, ptr getelementptr inbounds (i8, ptr @temp_critical, i64 384), align 16, !tbaa !5
  store <4 x i32> <i32 100, i32 101, i32 102, i32 103>, ptr getelementptr inbounds (i8, ptr @temp_critical, i64 400), align 16, !tbaa !5
  store <4 x i32> <i32 104, i32 105, i32 106, i32 107>, ptr getelementptr inbounds (i8, ptr @temp_critical, i64 416), align 16, !tbaa !5
  store <4 x i32> <i32 108, i32 109, i32 110, i32 111>, ptr getelementptr inbounds (i8, ptr @temp_critical, i64 432), align 16, !tbaa !5
  store <4 x i32> <i32 112, i32 113, i32 114, i32 115>, ptr getelementptr inbounds (i8, ptr @temp_critical, i64 448), align 16, !tbaa !5
  store <4 x i32> <i32 116, i32 117, i32 118, i32 119>, ptr getelementptr inbounds (i8, ptr @temp_critical, i64 464), align 16, !tbaa !5
  store <4 x i32> <i32 120, i32 121, i32 122, i32 123>, ptr getelementptr inbounds (i8, ptr @temp_critical, i64 480), align 16, !tbaa !5
  store <4 x i32> <i32 124, i32 125, i32 126, i32 127>, ptr getelementptr inbounds (i8, ptr @temp_critical, i64 496), align 16, !tbaa !5
  store <4 x i32> <i32 128, i32 129, i32 130, i32 131>, ptr getelementptr inbounds (i8, ptr @temp_critical, i64 512), align 16, !tbaa !5
  store <4 x i32> <i32 132, i32 133, i32 134, i32 135>, ptr getelementptr inbounds (i8, ptr @temp_critical, i64 528), align 16, !tbaa !5
  store <4 x i32> <i32 136, i32 137, i32 138, i32 139>, ptr getelementptr inbounds (i8, ptr @temp_critical, i64 544), align 16, !tbaa !5
  store <4 x i32> <i32 140, i32 141, i32 142, i32 143>, ptr getelementptr inbounds (i8, ptr @temp_critical, i64 560), align 16, !tbaa !5
  store <4 x i32> <i32 144, i32 145, i32 146, i32 147>, ptr getelementptr inbounds (i8, ptr @temp_critical, i64 576), align 16, !tbaa !5
  store <4 x i32> <i32 148, i32 149, i32 150, i32 151>, ptr getelementptr inbounds (i8, ptr @temp_critical, i64 592), align 16, !tbaa !5
  store <4 x i32> <i32 152, i32 153, i32 154, i32 155>, ptr getelementptr inbounds (i8, ptr @temp_critical, i64 608), align 16, !tbaa !5
  store <4 x i32> <i32 156, i32 157, i32 158, i32 159>, ptr getelementptr inbounds (i8, ptr @temp_critical, i64 624), align 16, !tbaa !5
  store <4 x i32> <i32 160, i32 161, i32 162, i32 163>, ptr getelementptr inbounds (i8, ptr @temp_critical, i64 640), align 16, !tbaa !5
  store <4 x i32> <i32 164, i32 165, i32 166, i32 167>, ptr getelementptr inbounds (i8, ptr @temp_critical, i64 656), align 16, !tbaa !5
  store <4 x i32> <i32 168, i32 169, i32 170, i32 171>, ptr getelementptr inbounds (i8, ptr @temp_critical, i64 672), align 16, !tbaa !5
  store <4 x i32> <i32 172, i32 173, i32 174, i32 175>, ptr getelementptr inbounds (i8, ptr @temp_critical, i64 688), align 16, !tbaa !5
  store <4 x i32> <i32 176, i32 177, i32 178, i32 179>, ptr getelementptr inbounds (i8, ptr @temp_critical, i64 704), align 16, !tbaa !5
  store <4 x i32> <i32 180, i32 181, i32 182, i32 183>, ptr getelementptr inbounds (i8, ptr @temp_critical, i64 720), align 16, !tbaa !5
  store <4 x i32> <i32 184, i32 185, i32 186, i32 187>, ptr getelementptr inbounds (i8, ptr @temp_critical, i64 736), align 16, !tbaa !5
  store <4 x i32> <i32 188, i32 189, i32 190, i32 191>, ptr getelementptr inbounds (i8, ptr @temp_critical, i64 752), align 16, !tbaa !5
  store <4 x i32> <i32 192, i32 193, i32 194, i32 195>, ptr getelementptr inbounds (i8, ptr @temp_critical, i64 768), align 16, !tbaa !5
  store <4 x i32> <i32 196, i32 197, i32 198, i32 199>, ptr getelementptr inbounds (i8, ptr @temp_critical, i64 784), align 16, !tbaa !5
  %114 = load i32, ptr %4, align 4, !tbaa !5
  %115 = sext i32 %114 to i64
  call void @qsort(ptr noundef nonnull @temp_critical, i64 noundef %115, i64 noundef 4, ptr noundef nonnull @compare_critical) #9
  %116 = load i32, ptr %5, align 4, !tbaa !5
  %117 = icmp sgt i32 %116, 0
  br i1 %117, label %vector.body175, label %119

vector.body175:                                   ; preds = %vector.body
  store <4 x i32> <i32 0, i32 1, i32 2, i32 3>, ptr @temp_pre_critical, align 16, !tbaa !5
  store <4 x i32> <i32 4, i32 5, i32 6, i32 7>, ptr getelementptr inbounds (i8, ptr @temp_pre_critical, i64 16), align 16, !tbaa !5
  store <4 x i32> <i32 8, i32 9, i32 10, i32 11>, ptr getelementptr inbounds (i8, ptr @temp_pre_critical, i64 32), align 16, !tbaa !5
  store <4 x i32> <i32 12, i32 13, i32 14, i32 15>, ptr getelementptr inbounds (i8, ptr @temp_pre_critical, i64 48), align 16, !tbaa !5
  store <4 x i32> <i32 16, i32 17, i32 18, i32 19>, ptr getelementptr inbounds (i8, ptr @temp_pre_critical, i64 64), align 16, !tbaa !5
  store <4 x i32> <i32 20, i32 21, i32 22, i32 23>, ptr getelementptr inbounds (i8, ptr @temp_pre_critical, i64 80), align 16, !tbaa !5
  store <4 x i32> <i32 24, i32 25, i32 26, i32 27>, ptr getelementptr inbounds (i8, ptr @temp_pre_critical, i64 96), align 16, !tbaa !5
  store <4 x i32> <i32 28, i32 29, i32 30, i32 31>, ptr getelementptr inbounds (i8, ptr @temp_pre_critical, i64 112), align 16, !tbaa !5
  store <4 x i32> <i32 32, i32 33, i32 34, i32 35>, ptr getelementptr inbounds (i8, ptr @temp_pre_critical, i64 128), align 16, !tbaa !5
  store <4 x i32> <i32 36, i32 37, i32 38, i32 39>, ptr getelementptr inbounds (i8, ptr @temp_pre_critical, i64 144), align 16, !tbaa !5
  store <4 x i32> <i32 40, i32 41, i32 42, i32 43>, ptr getelementptr inbounds (i8, ptr @temp_pre_critical, i64 160), align 16, !tbaa !5
  store <4 x i32> <i32 44, i32 45, i32 46, i32 47>, ptr getelementptr inbounds (i8, ptr @temp_pre_critical, i64 176), align 16, !tbaa !5
  store <4 x i32> <i32 48, i32 49, i32 50, i32 51>, ptr getelementptr inbounds (i8, ptr @temp_pre_critical, i64 192), align 16, !tbaa !5
  store <4 x i32> <i32 52, i32 53, i32 54, i32 55>, ptr getelementptr inbounds (i8, ptr @temp_pre_critical, i64 208), align 16, !tbaa !5
  store <4 x i32> <i32 56, i32 57, i32 58, i32 59>, ptr getelementptr inbounds (i8, ptr @temp_pre_critical, i64 224), align 16, !tbaa !5
  store <4 x i32> <i32 60, i32 61, i32 62, i32 63>, ptr getelementptr inbounds (i8, ptr @temp_pre_critical, i64 240), align 16, !tbaa !5
  store <4 x i32> <i32 64, i32 65, i32 66, i32 67>, ptr getelementptr inbounds (i8, ptr @temp_pre_critical, i64 256), align 16, !tbaa !5
  store <4 x i32> <i32 68, i32 69, i32 70, i32 71>, ptr getelementptr inbounds (i8, ptr @temp_pre_critical, i64 272), align 16, !tbaa !5
  store <4 x i32> <i32 72, i32 73, i32 74, i32 75>, ptr getelementptr inbounds (i8, ptr @temp_pre_critical, i64 288), align 16, !tbaa !5
  store <4 x i32> <i32 76, i32 77, i32 78, i32 79>, ptr getelementptr inbounds (i8, ptr @temp_pre_critical, i64 304), align 16, !tbaa !5
  store <4 x i32> <i32 80, i32 81, i32 82, i32 83>, ptr getelementptr inbounds (i8, ptr @temp_pre_critical, i64 320), align 16, !tbaa !5
  store <4 x i32> <i32 84, i32 85, i32 86, i32 87>, ptr getelementptr inbounds (i8, ptr @temp_pre_critical, i64 336), align 16, !tbaa !5
  store <4 x i32> <i32 88, i32 89, i32 90, i32 91>, ptr getelementptr inbounds (i8, ptr @temp_pre_critical, i64 352), align 16, !tbaa !5
  store <4 x i32> <i32 92, i32 93, i32 94, i32 95>, ptr getelementptr inbounds (i8, ptr @temp_pre_critical, i64 368), align 16, !tbaa !5
  store <4 x i32> <i32 96, i32 97, i32 98, i32 99>, ptr getelementptr inbounds (i8, ptr @temp_pre_critical, i64 384), align 16, !tbaa !5
  store <4 x i32> <i32 100, i32 101, i32 102, i32 103>, ptr getelementptr inbounds (i8, ptr @temp_pre_critical, i64 400), align 16, !tbaa !5
  store <4 x i32> <i32 104, i32 105, i32 106, i32 107>, ptr getelementptr inbounds (i8, ptr @temp_pre_critical, i64 416), align 16, !tbaa !5
  store <4 x i32> <i32 108, i32 109, i32 110, i32 111>, ptr getelementptr inbounds (i8, ptr @temp_pre_critical, i64 432), align 16, !tbaa !5
  store <4 x i32> <i32 112, i32 113, i32 114, i32 115>, ptr getelementptr inbounds (i8, ptr @temp_pre_critical, i64 448), align 16, !tbaa !5
  store <4 x i32> <i32 116, i32 117, i32 118, i32 119>, ptr getelementptr inbounds (i8, ptr @temp_pre_critical, i64 464), align 16, !tbaa !5
  store <4 x i32> <i32 120, i32 121, i32 122, i32 123>, ptr getelementptr inbounds (i8, ptr @temp_pre_critical, i64 480), align 16, !tbaa !5
  store <4 x i32> <i32 124, i32 125, i32 126, i32 127>, ptr getelementptr inbounds (i8, ptr @temp_pre_critical, i64 496), align 16, !tbaa !5
  store <4 x i32> <i32 128, i32 129, i32 130, i32 131>, ptr getelementptr inbounds (i8, ptr @temp_pre_critical, i64 512), align 16, !tbaa !5
  store <4 x i32> <i32 132, i32 133, i32 134, i32 135>, ptr getelementptr inbounds (i8, ptr @temp_pre_critical, i64 528), align 16, !tbaa !5
  store <4 x i32> <i32 136, i32 137, i32 138, i32 139>, ptr getelementptr inbounds (i8, ptr @temp_pre_critical, i64 544), align 16, !tbaa !5
  store <4 x i32> <i32 140, i32 141, i32 142, i32 143>, ptr getelementptr inbounds (i8, ptr @temp_pre_critical, i64 560), align 16, !tbaa !5
  store <4 x i32> <i32 144, i32 145, i32 146, i32 147>, ptr getelementptr inbounds (i8, ptr @temp_pre_critical, i64 576), align 16, !tbaa !5
  store <4 x i32> <i32 148, i32 149, i32 150, i32 151>, ptr getelementptr inbounds (i8, ptr @temp_pre_critical, i64 592), align 16, !tbaa !5
  store <4 x i32> <i32 152, i32 153, i32 154, i32 155>, ptr getelementptr inbounds (i8, ptr @temp_pre_critical, i64 608), align 16, !tbaa !5
  store <4 x i32> <i32 156, i32 157, i32 158, i32 159>, ptr getelementptr inbounds (i8, ptr @temp_pre_critical, i64 624), align 16, !tbaa !5
  store <4 x i32> <i32 160, i32 161, i32 162, i32 163>, ptr getelementptr inbounds (i8, ptr @temp_pre_critical, i64 640), align 16, !tbaa !5
  store <4 x i32> <i32 164, i32 165, i32 166, i32 167>, ptr getelementptr inbounds (i8, ptr @temp_pre_critical, i64 656), align 16, !tbaa !5
  store <4 x i32> <i32 168, i32 169, i32 170, i32 171>, ptr getelementptr inbounds (i8, ptr @temp_pre_critical, i64 672), align 16, !tbaa !5
  store <4 x i32> <i32 172, i32 173, i32 174, i32 175>, ptr getelementptr inbounds (i8, ptr @temp_pre_critical, i64 688), align 16, !tbaa !5
  store <4 x i32> <i32 176, i32 177, i32 178, i32 179>, ptr getelementptr inbounds (i8, ptr @temp_pre_critical, i64 704), align 16, !tbaa !5
  store <4 x i32> <i32 180, i32 181, i32 182, i32 183>, ptr getelementptr inbounds (i8, ptr @temp_pre_critical, i64 720), align 16, !tbaa !5
  store <4 x i32> <i32 184, i32 185, i32 186, i32 187>, ptr getelementptr inbounds (i8, ptr @temp_pre_critical, i64 736), align 16, !tbaa !5
  store <4 x i32> <i32 188, i32 189, i32 190, i32 191>, ptr getelementptr inbounds (i8, ptr @temp_pre_critical, i64 752), align 16, !tbaa !5
  store <4 x i32> <i32 192, i32 193, i32 194, i32 195>, ptr getelementptr inbounds (i8, ptr @temp_pre_critical, i64 768), align 16, !tbaa !5
  store <4 x i32> <i32 196, i32 197, i32 198, i32 199>, ptr getelementptr inbounds (i8, ptr @temp_pre_critical, i64 784), align 16, !tbaa !5
  %118 = zext nneg i32 %116 to i64
  call void @qsort(ptr noundef nonnull @temp_pre_critical, i64 noundef %118, i64 noundef 4, ptr noundef nonnull @compare_pre_critical) #9
  br label %119

119:                                              ; preds = %vector.body175, %vector.body
  %120 = call ptr @extract_dir(ptr noundef nonnull %3)
  %121 = call ptr @strcpy(ptr noundef nonnull dereferenceable(1) @caselog_filename, ptr noundef nonnull dereferenceable(1) %120) #9
  %122 = call ptr @strstr(ptr noundef nonnull dereferenceable(1) @caselog_filename, ptr noundef nonnull dereferenceable(1) @.str.42) #11
  %123 = icmp eq ptr %122, null
  br i1 %123, label %124, label %.thread

124:                                              ; preds = %119
  %125 = call ptr @strstr(ptr noundef nonnull dereferenceable(1) @caselog_filename, ptr noundef nonnull dereferenceable(1) @.str.43) #11
  %.not = icmp eq ptr %125, null
  br i1 %.not, label %127, label %.thread

.thread:                                          ; preds = %119, %124
  %.0106 = phi ptr [ %125, %124 ], [ %122, %119 ]
  store i8 0, ptr %.0106, align 1, !tbaa !14
  %126 = call ptr @strcat(ptr noundef nonnull dereferenceable(1) @caselog_filename, ptr noundef nonnull dereferenceable(1) @.str.44) #9
  br label %129

127:                                              ; preds = %124
  %128 = call ptr @strcpy(ptr noundef nonnull dereferenceable(1) @caselog_filename, ptr noundef nonnull dereferenceable(1) @.str.45) #9
  br label %129

129:                                              ; preds = %127, %.thread
  %130 = call ptr @efopen(ptr noundef nonnull @caselog_filename, ptr noundef nonnull @.str.31)
  store ptr %130, ptr @caselog_fp, align 8, !tbaa !9
  %131 = call i64 @time(ptr noundef nonnull %6) #9
  %132 = call ptr @localtime(ptr noundef nonnull %6) #9
  %133 = load ptr, ptr @caselog_fp, align 8, !tbaa !9
  %134 = load ptr, ptr @VERSION, align 8, !tbaa !9
  %135 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %133, ptr noundef nonnull @.str.46, ptr noundef %134) #9
  %136 = getelementptr inbounds i8, ptr %132, i64 20
  %137 = load i32, ptr %136, align 4, !tbaa !15
  %138 = add nsw i32 %137, 1900
  %139 = load ptr, ptr @caselog_fp, align 8, !tbaa !9
  %140 = getelementptr inbounds i8, ptr %132, i64 24
  %141 = load i32, ptr %140, align 8, !tbaa !18
  %142 = sext i32 %141 to i64
  %143 = getelementptr inbounds [7 x ptr], ptr @__const.main.day, i64 0, i64 %142
  %144 = load ptr, ptr %143, align 8, !tbaa !9
  %145 = getelementptr inbounds i8, ptr %132, i64 12
  %146 = load i32, ptr %145, align 4, !tbaa !19
  %147 = getelementptr inbounds i8, ptr %132, i64 16
  %148 = load i32, ptr %147, align 8, !tbaa !20
  %149 = sext i32 %148 to i64
  %150 = getelementptr inbounds [12 x ptr], ptr @__const.main.month, i64 0, i64 %149
  %151 = load ptr, ptr %150, align 8, !tbaa !9
  %152 = getelementptr inbounds i8, ptr %132, i64 8
  %153 = load i32, ptr %152, align 8, !tbaa !21
  %154 = getelementptr inbounds i8, ptr %132, i64 4
  %155 = load i32, ptr %154, align 4, !tbaa !22
  %156 = load i32, ptr %132, align 8, !tbaa !23
  %157 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %139, ptr noundef nonnull @.str.47, ptr noundef %144, i32 noundef %146, ptr noundef %151, i32 noundef %138, i32 noundef %153, i32 noundef %155, i32 noundef %156) #9
  %158 = load ptr, ptr @caselog_fp, align 8, !tbaa !9
  %159 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %158, ptr noundef nonnull @.str.48) #9
  %160 = load ptr, ptr @caselog_fp, align 8, !tbaa !9
  %161 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %160, ptr noundef nonnull @.str.49) #9
  %162 = load i32, ptr %4, align 4, !tbaa !5
  %163 = icmp sgt i32 %162, 0
  br i1 %163, label %.lr.ph128, label %._crit_edge129

.lr.ph128:                                        ; preds = %129, %.lr.ph128
  %indvars.iv152 = phi i64 [ %indvars.iv.next153, %.lr.ph128 ], [ 0, %129 ]
  %164 = getelementptr inbounds [200 x i32], ptr @temp_critical, i64 0, i64 %indvars.iv152
  %165 = load i32, ptr %164, align 4, !tbaa !5
  %166 = load ptr, ptr @caselog_fp, align 8, !tbaa !9
  %167 = sext i32 %165 to i64
  %168 = getelementptr inbounds [200 x %struct.CRIT], ptr @critical, i64 0, i64 %167
  %169 = load i32, ptr %168, align 4, !tbaa !24
  %170 = getelementptr inbounds i8, ptr %168, i64 124
  %171 = getelementptr inbounds i8, ptr %168, i64 4
  %172 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %166, ptr noundef nonnull @.str.50, i32 noundef %169, ptr noundef nonnull %170, ptr noundef nonnull %171) #9
  %indvars.iv.next153 = add nuw nsw i64 %indvars.iv152, 1
  %173 = load i32, ptr %4, align 4, !tbaa !5
  %174 = sext i32 %173 to i64
  %175 = icmp slt i64 %indvars.iv.next153, %174
  br i1 %175, label %.lr.ph128, label %._crit_edge129, !llvm.loop !26

._crit_edge129:                                   ; preds = %.lr.ph128, %129
  %176 = load ptr, ptr @caselog_fp, align 8, !tbaa !9
  %177 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %176, ptr noundef nonnull @.str.51) #9
  %178 = load ptr, ptr @caselog_fp, align 8, !tbaa !9
  %179 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %178, ptr noundef nonnull @.str.49) #9
  %180 = load i32, ptr %5, align 4, !tbaa !5
  %181 = icmp sgt i32 %180, 0
  br i1 %181, label %.lr.ph132, label %.preheader

.preheader:                                       ; preds = %.lr.ph132, %._crit_edge129
  %182 = icmp sgt i32 %.298, 0
  br i1 %182, label %.lr.ph134.preheader, label %._crit_edge135

.lr.ph134.preheader:                              ; preds = %.preheader
  %wide.trip.count161 = zext nneg i32 %.298 to i64
  br label %.lr.ph134

.lr.ph132:                                        ; preds = %._crit_edge129, %.lr.ph132
  %indvars.iv155 = phi i64 [ %indvars.iv.next156, %.lr.ph132 ], [ 0, %._crit_edge129 ]
  %183 = getelementptr inbounds [200 x i32], ptr @temp_pre_critical, i64 0, i64 %indvars.iv155
  %184 = load i32, ptr %183, align 4, !tbaa !5
  %185 = load ptr, ptr @caselog_fp, align 8, !tbaa !9
  %186 = sext i32 %184 to i64
  %187 = getelementptr inbounds [200 x %struct.CRIT], ptr @pre_critical, i64 0, i64 %186
  %188 = load i32, ptr %187, align 4, !tbaa !24
  %189 = getelementptr inbounds i8, ptr %187, i64 124
  %190 = getelementptr inbounds i8, ptr %187, i64 4
  %191 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %185, ptr noundef nonnull @.str.50, i32 noundef %188, ptr noundef nonnull %189, ptr noundef nonnull %190) #9
  %indvars.iv.next156 = add nuw nsw i64 %indvars.iv155, 1
  %192 = load i32, ptr %5, align 4, !tbaa !5
  %193 = sext i32 %192 to i64
  %194 = icmp slt i64 %indvars.iv.next156, %193
  br i1 %194, label %.lr.ph132, label %.preheader, !llvm.loop !27

.lr.ph134:                                        ; preds = %.lr.ph134.preheader, %.lr.ph134
  %indvars.iv158 = phi i64 [ 0, %.lr.ph134.preheader ], [ %indvars.iv.next159, %.lr.ph134 ]
  %195 = getelementptr inbounds [200 x i32], ptr @temp_critical, i64 0, i64 %indvars.iv158
  %196 = load i32, ptr %195, align 4, !tbaa !5
  %197 = call i32 @concat(i32 noundef %196, i32 noundef %.094.lcssa168, ptr noundef nonnull %7)
  %indvars.iv.next159 = add nuw nsw i64 %indvars.iv158, 1
  %exitcond162.not = icmp eq i64 %indvars.iv.next159, %wide.trip.count161
  br i1 %exitcond162.not, label %._crit_edge135, label %.lr.ph134, !llvm.loop !28

._crit_edge135:                                   ; preds = %.lr.ph134, %.preheader
  %198 = load ptr, ptr @caselog_fp, align 8, !tbaa !9
  %199 = call i32 @fclose(ptr noundef %198)
  %200 = load ptr, ptr @stderr, align 8, !tbaa !9
  %201 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %200, ptr noundef nonnull @.str.52, ptr noundef nonnull @caselog_filename) #10
  call void @llvm.lifetime.end.p0(i64 6424000, ptr nonnull %7) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %5) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %4) #9
  call void @llvm.lifetime.end.p0(i64 600, ptr nonnull %3) #9
  call void @llvm.lifetime.end.p0(i64 80, ptr nonnull %2) #9
  ret i32 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 memory(argmem: readwrite)
declare ptr @strcpy(ptr noalias noundef returned writeonly, ptr noalias nocapture noundef readonly) local_unnamed_addr #3

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

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress nofree nounwind willreturn memory(argmem: readwrite)
declare ptr @strcat(ptr noalias noundef returned, ptr noalias nocapture noundef readonly) local_unnamed_addr #3

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

; Function Attrs: nounwind
declare ptr @localtime(ptr noundef) local_unnamed_addr #7

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

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"any pointer", !7, i64 0}
!11 = distinct !{!11, !12}
!12 = !{!"llvm.loop.mustprogress"}
!13 = distinct !{!13, !12}
!14 = !{!7, !7, i64 0}
!15 = !{!16, !6, i64 20}
!16 = !{!"tm", !6, i64 0, !6, i64 4, !6, i64 8, !6, i64 12, !6, i64 16, !6, i64 20, !6, i64 24, !6, i64 28, !6, i64 32, !17, i64 40, !10, i64 48}
!17 = !{!"long", !7, i64 0}
!18 = !{!16, !6, i64 24}
!19 = !{!16, !6, i64 12}
!20 = !{!16, !6, i64 16}
!21 = !{!16, !6, i64 8}
!22 = !{!16, !6, i64 4}
!23 = !{!16, !6, i64 0}
!24 = !{!25, !6, i64 0}
!25 = !{!"", !6, i64 0, !7, i64 4, !7, i64 64, !7, i64 124, !7, i64 184}
!26 = distinct !{!26, !12}
!27 = distinct !{!27, !12}
!28 = distinct !{!28, !12}


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