; LLVM IR from davidesantangelo/krep :: krep (print_matching_items)

; 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.match_position_t = type { i64, i64 }
%struct.match_result_t = type { ptr, i64, i64 }
%struct.search_params = type { ptr, i64, ptr, ptr, i64, i8, i8, i8, i8, i8, i8, ptr, ptr, i64 }

@stderr = external global ptr, align 8
@print_matching_items.stdout_buf = external hidden global [8388608 x i8], align 16
@stdout = external global ptr, align 8
@.str.11 = external hidden unnamed_addr constant [30 x i8], align 1
@print_matching_items.line_match_positions = external hidden global [2048 x %struct.match_position_t], align 16
@.str.12 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [8 x i8], align 1
@color_output_enabled = external hidden global i8, align 1
@only_matching = external hidden global i8, align 1
@print_matching_items.o_batch_buffer = external hidden global [8388608 x i8], align 16
@.str.16 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [47 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [12 x i8], align 1
@print_matching_items.line_batch_buffer = external hidden global [8388608 x i8], align 16
@.str.24 = external hidden unnamed_addr constant [82 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [102 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [78 x i8], align 1
@.str.29 = external hidden unnamed_addr constant [48 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [48 x i8], align 1

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

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

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

declare void @perror(ptr noundef) #2

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

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

; Function Attrs: nounwind uwtable
declare dso_local i64 @find_line_start(ptr noundef, i64 noundef, i64 noundef) #4

; Function Attrs: nounwind uwtable
declare dso_local i64 @find_line_end(ptr noundef, i64 noundef, i64 noundef) #4

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

; Function Attrs: nounwind uwtable
define dso_local i64 @print_matching_items(ptr noundef %0, ptr noundef %1, i64 noundef %2, ptr noundef %3, ptr noundef %4) #4 {
  %6 = alloca i64, align 8
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca i64, align 8
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca i64, align 8
  %13 = alloca i64, align 8
  %14 = alloca ptr, align 8
  %15 = alloca i32, align 4
  %16 = alloca i64, align 8
  %17 = alloca ptr, align 8
  %18 = alloca ptr, align 8
  %19 = alloca ptr, align 8
  %20 = alloca ptr, align 8
  %21 = alloca ptr, align 8
  %22 = alloca i64, align 8
  %23 = alloca i64, align 8
  %24 = alloca i64, align 8
  %25 = alloca i64, align 8
  %26 = alloca ptr, align 8
  %27 = alloca i64, align 8
  %28 = alloca i64, align 8
  %29 = alloca i64, align 8
  %30 = alloca i64, align 8
  %31 = alloca i64, align 8
  %32 = alloca [4160 x i8], align 16
  %33 = alloca i64, align 8
  %34 = alloca i64, align 8
  %35 = alloca i64, align 8
  %36 = alloca i64, align 8
  %37 = alloca [32 x i8], align 16
  %38 = alloca i64, align 8
  %39 = alloca i64, align 8
  %40 = alloca i64, align 8
  %41 = alloca i64, align 8
  %42 = alloca i64, align 8
  %43 = alloca i64, align 8
  %44 = alloca i64, align 8
  %45 = alloca ptr, align 8
  %46 = alloca ptr, align 8
  %47 = alloca ptr, align 8
  %48 = alloca i32, align 4
  %49 = alloca i64, align 8
  %50 = alloca ptr, align 8
  %51 = alloca ptr, align 8
  %52 = alloca ptr, align 8
  %53 = alloca i64, align 8
  %54 = alloca i8, align 1
  %55 = alloca i64, align 8
  %56 = alloca [4160 x i8], align 16
  %57 = alloca i64, align 8
  %58 = alloca i64, align 8
  %59 = alloca i64, align 8
  %60 = alloca i64, align 8
  %61 = alloca i64, align 8
  %62 = alloca i64, align 8
  %63 = alloca i64, align 8
  %64 = alloca i64, align 8
  %65 = alloca i64, align 8
  %66 = alloca i64, align 8
  %67 = alloca i64, align 8
  %68 = alloca i64, align 8
  %69 = alloca i64, align 8
  %70 = alloca i64, align 8
  %71 = alloca ptr, align 8
  %72 = alloca i64, align 8
  %73 = alloca i64, align 8
  %74 = alloca i64, align 8
  %75 = alloca i64, align 8
  %76 = alloca i64, align 8
  %77 = alloca i64, align 8
  %78 = alloca i64, align 8
  store ptr %0, ptr %7, align 8, !tbaa !5
  store ptr %1, ptr %8, align 8, !tbaa !5
  store i64 %2, ptr %9, align 8, !tbaa !9
  store ptr %3, ptr %10, align 8, !tbaa !5
  store ptr %4, ptr %11, align 8, !tbaa !5
  %79 = load ptr, ptr %10, align 8, !tbaa !5
  %80 = icmp ne ptr %79, null
  br i1 %80, label %81, label %89

81:                                               ; preds = %5
  %82 = load ptr, ptr %8, align 8, !tbaa !5
  %83 = icmp ne ptr %82, null
  br i1 %83, label %84, label %89

84:                                               ; preds = %81
  %85 = load ptr, ptr %10, align 8, !tbaa !5
  %86 = getelementptr inbounds %struct.match_result_t, ptr %85, i32 0, i32 1
  %87 = load i64, ptr %86, align 8, !tbaa !11
  %88 = icmp eq i64 %87, 0
  br i1 %88, label %89, label %90

89:                                               ; preds = %84, %81, %5
  store i64 0, ptr %6, align 8
  br label %935

90:                                               ; preds = %84
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #9
  store i64 0, ptr %12, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #9
  %91 = load ptr, ptr %11, align 8, !tbaa !5
  %92 = getelementptr inbounds %struct.search_params, ptr %91, i32 0, i32 13
  %93 = load i64, ptr %92, align 8, !tbaa !13
  store i64 %93, ptr %13, align 8, !tbaa !9
  %94 = load ptr, ptr @stdout, align 8, !tbaa !5
  %95 = call i32 @setvbuf(ptr noundef %94, ptr noundef @print_matching_items.stdout_buf, i32 noundef 0, i64 noundef 8388608) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #9
  %96 = call noalias ptr @malloc(i64 noundef 524288) #10
  store ptr %96, ptr %14, align 8, !tbaa !5
  %97 = load ptr, ptr %14, align 8, !tbaa !5
  %98 = icmp ne ptr %97, null
  br i1 %98, label %100, label %99

99:                                               ; preds = %90
  call void @perror(ptr noundef @.str.11)
  store i64 0, ptr %6, align 8
  store i32 1, ptr %15, align 4
  br label %934

100:                                              ; preds = %90
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #9
  store i64 524288, ptr %16, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #9
  store ptr @.str.12, ptr %17, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #9
  store ptr @.str.13, ptr %18, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #9
  store ptr @.str.14, ptr %19, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #9
  store ptr @.str.13, ptr %20, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #9
  store ptr @.str.15, ptr %21, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #9
  %101 = load i8, ptr @color_output_enabled, align 1, !tbaa !16, !range !17, !noundef !18
  %102 = trunc i8 %101 to i1
  br i1 %102, label %103, label %106

103:                                              ; preds = %100
  %104 = load ptr, ptr %18, align 8, !tbaa !5
  %105 = call i64 @strlen(ptr noundef %104) #11
  br label %107

106:                                              ; preds = %100
  br label %107

107:                                              ; preds = %106, %103
  %108 = phi i64 [ %105, %103 ], [ 0, %106 ]
  store i64 %108, ptr %22, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #9
  %109 = load i8, ptr @color_output_enabled, align 1, !tbaa !16, !range !17, !noundef !18
  %110 = trunc i8 %109 to i1
  br i1 %110, label %111, label %114

111:                                              ; preds = %107
  %112 = load ptr, ptr %20, align 8, !tbaa !5
  %113 = call i64 @strlen(ptr noundef %112) #11
  br label %115

114:                                              ; preds = %107
  br label %115

115:                                              ; preds = %114, %111
  %116 = phi i64 [ %113, %111 ], [ 0, %114 ]
  store i64 %116, ptr %23, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #9
  %117 = load i8, ptr @color_output_enabled, align 1, !tbaa !16, !range !17, !noundef !18
  %118 = trunc i8 %117 to i1
  br i1 %118, label %119, label %122

119:                                              ; preds = %115
  %120 = load ptr, ptr %21, align 8, !tbaa !5
  %121 = call i64 @strlen(ptr noundef %120) #11
  br label %123

122:                                              ; preds = %115
  br label %123

123:                                              ; preds = %122, %119
  %124 = phi i64 [ %121, %119 ], [ 0, %122 ]
  store i64 %124, ptr %24, align 8, !tbaa !9
  %125 = load i8, ptr @only_matching, align 1, !tbaa !16, !range !17, !noundef !18
  %126 = trunc i8 %125 to i1
  br i1 %126, label %127, label %514

127:                                              ; preds = %123
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #9
  store i64 0, ptr %25, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #9
  store ptr null, ptr %26, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #9
  store i64 0, ptr %27, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #9
  store i64 0, ptr %28, align 8, !tbaa !9
  %128 = load ptr, ptr %10, align 8, !tbaa !5
  %129 = getelementptr inbounds %struct.match_result_t, ptr %128, i32 0, i32 1
  %130 = load i64, ptr %129, align 8, !tbaa !11
  %131 = icmp ugt i64 %130, 10
  br i1 %131, label %132, label %185

132:                                              ; preds = %127
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #9
  store i64 0, ptr %29, align 8, !tbaa !9
  br label %133

133:                                              ; preds = %149, %132
  %134 = load i64, ptr %29, align 8, !tbaa !9
  %135 = load i64, ptr %9, align 8, !tbaa !9
  %136 = icmp ult i64 %134, %135
  br i1 %136, label %138, label %137

137:                                              ; preds = %133
  store i32 2, ptr %15, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #9
  br label %152

138:                                              ; preds = %133
  %139 = load ptr, ptr %8, align 8, !tbaa !5
  %140 = load i64, ptr %29, align 8, !tbaa !9
  %141 = getelementptr inbounds i8, ptr %139, i64 %140
  %142 = load i8, ptr %141, align 1, !tbaa !19
  %143 = sext i8 %142 to i32
  %144 = icmp eq i32 %143, 10
  br i1 %144, label %145, label %148

145:                                              ; preds = %138
  %146 = load i64, ptr %27, align 8, !tbaa !9
  %147 = add i64 %146, 1
  store i64 %147, ptr %27, align 8, !tbaa !9
  br label %148

148:                                              ; preds = %145, %138
  br label %149

149:                                              ; preds = %148
  %150 = load i64, ptr %29, align 8, !tbaa !9
  %151 = add i64 %150, 1
  store i64 %151, ptr %29, align 8, !tbaa !9
  br label %133, !llvm.loop !20

152:                                              ; preds = %137
  %153 = load i64, ptr %27, align 8, !tbaa !9
  %154 = add i64 %153, 1
  store i64 %154, ptr %28, align 8, !tbaa !9
  %155 = load i64, ptr %28, align 8, !tbaa !9
  %156 = mul i64 %155, 8
  %157 = call noalias ptr @malloc(i64 noundef %156) #10
  store ptr %157, ptr %26, align 8, !tbaa !5
  %158 = load ptr, ptr %26, align 8, !tbaa !5
  %159 = icmp ne ptr %158, null
  br i1 %159, label %160, label %184

160:                                              ; preds = %152
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #9
  store i64 0, ptr %30, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #9
  store i64 0, ptr %31, align 8, !tbaa !9
  br label %161

161:                                              ; preds = %180, %160
  %162 = load i64, ptr %31, align 8, !tbaa !9
  %163 = load i64, ptr %9, align 8, !tbaa !9
  %164 = icmp ult i64 %162, %163
  br i1 %164, label %166, label %165

165:                                              ; preds = %161
  store i32 5, ptr %15, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #9
  br label %183

166:                                              ; preds = %161
  %167 = load ptr, ptr %8, align 8, !tbaa !5
  %168 = load i64, ptr %31, align 8, !tbaa !9
  %169 = getelementptr inbounds i8, ptr %167, i64 %168
  %170 = load i8, ptr %169, align 1, !tbaa !19
  %171 = sext i8 %170 to i32
  %172 = icmp eq i32 %171, 10
  br i1 %172, label %173, label %179

173:                                              ; preds = %166
  %174 = load i64, ptr %31, align 8, !tbaa !9
  %175 = load ptr, ptr %26, align 8, !tbaa !5
  %176 = load i64, ptr %30, align 8, !tbaa !9
  %177 = add i64 %176, 1
  store i64 %177, ptr %30, align 8, !tbaa !9
  %178 = getelementptr inbounds i64, ptr %175, i64 %176
  store i64 %174, ptr %178, align 8, !tbaa !9
  br label %179

179:                                              ; preds = %173, %166
  br label %180

180:                                              ; preds = %179
  %181 = load i64, ptr %31, align 8, !tbaa !9
  %182 = add i64 %181, 1
  store i64 %182, ptr %31, align 8, !tbaa !9
  br label %161, !llvm.loop !22

183:                                              ; preds = %165
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #9
  br label %184

184:                                              ; preds = %183, %152
  br label %185

185:                                              ; preds = %184, %127
  call void @llvm.lifetime.start.p0(i64 4160, ptr %32) #9
  call void @llvm.memset.p0.i64(ptr align 16 %32, i8 0, i64 4160, i1 false)
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #9
  store i64 0, ptr %33, align 8, !tbaa !9
  %186 = load ptr, ptr %7, align 8, !tbaa !5
  %187 = icmp ne ptr %186, null
  br i1 %187, label %188, label %219

188:                                              ; preds = %185
  %189 = load i8, ptr @color_output_enabled, align 1, !tbaa !16, !range !17, !noundef !18
  %190 = trunc i8 %189 to i1
  br i1 %190, label %191, label %199

191:                                              ; preds = %188
  %192 = getelementptr inbounds [4160 x i8], ptr %32, i64 0, i64 0
  %193 = load ptr, ptr %17, align 8, !tbaa !5
  %194 = load ptr, ptr %7, align 8, !tbaa !5
  %195 = load ptr, ptr %18, align 8, !tbaa !5
  %196 = load ptr, ptr %19, align 8, !tbaa !5
  %197 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %192, i64 noundef 4160, ptr noundef @.str.16, ptr noundef %193, ptr noundef %194, ptr noundef %195, ptr noundef %196) #9
  %198 = sext i32 %197 to i64
  store i64 %198, ptr %33, align 8, !tbaa !9
  br label %204

199:                                              ; preds = %188
  %200 = getelementptr inbounds [4160 x i8], ptr %32, i64 0, i64 0
  %201 = load ptr, ptr %7, align 8, !tbaa !5
  %202 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %200, i64 noundef 4160, ptr noundef @.str.17, ptr noundef %201) #9
  %203 = sext i32 %202 to i64
  store i64 %203, ptr %33, align 8, !tbaa !9
  br label %204

204:                                              ; preds = %199, %191
  %205 = load i64, ptr %33, align 8, !tbaa !9
  %206 = icmp ule i64 %205, 0
  br i1 %206, label %210, label %207

207:                                              ; preds = %204
  %208 = load i64, ptr %33, align 8, !tbaa !9
  %209 = icmp uge i64 %208, 4160
  br i1 %209, label %210, label %218

210:                                              ; preds = %207, %204
  store i64 4159, ptr %33, align 8, !tbaa !9
  %211 = load i64, ptr %33, align 8, !tbaa !9
  %212 = icmp ugt i64 %211, 0
  br i1 %212, label %213, label %216

213:                                              ; preds = %210
  %214 = load i64, ptr %33, align 8, !tbaa !9
  %215 = getelementptr inbounds [4160 x i8], ptr %32, i64 0, i64 %214
  store i8 0, ptr %215, align 1, !tbaa !19
  br label %217

216:                                              ; preds = %210
  store i64 0, ptr %33, align 8, !tbaa !9
  br label %217

217:                                              ; preds = %216, %213
  br label %218

218:                                              ; preds = %217, %207
  br label %219

219:                                              ; preds = %218, %185
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #9
  store i64 1, ptr %34, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #9
  store i64 0, ptr %35, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #9
  store i64 0, ptr %36, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 32, ptr %37) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #9
  store i64 0, ptr %38, align 8, !tbaa !9
  br label %220

220:                                              ; preds = %497, %219
  %221 = load i64, ptr %38, align 8, !tbaa !9
  %222 = load ptr, ptr %10, align 8, !tbaa !5
  %223 = getelementptr inbounds %struct.match_result_t, ptr %222, i32 0, i32 1
  %224 = load i64, ptr %223, align 8, !tbaa !11
  %225 = icmp ult i64 %221, %224
  br i1 %225, label %227, label %226

226:                                              ; preds = %220
  store i32 8, ptr %15, align 4
  br label %500

227:                                              ; preds = %220
  %228 = load i64, ptr %13, align 8, !tbaa !9
  %229 = icmp ne i64 %228, -1
  br i1 %229, label %230, label %235

230:                                              ; preds = %227
  %231 = load i64, ptr %12, align 8, !tbaa !9
  %232 = load i64, ptr %13, align 8, !tbaa !9
  %233 = icmp uge i64 %231, %232
  br i1 %233, label %234, label %235

234:                                              ; preds = %230
  store i32 8, ptr %15, align 4
  br label %500

235:                                              ; preds = %230, %227
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #9
  %236 = load ptr, ptr %10, align 8, !tbaa !5
  %237 = getelementptr inbounds %struct.match_result_t, ptr %236, i32 0, i32 0
  %238 = load ptr, ptr %237, align 8, !tbaa !23
  %239 = load i64, ptr %38, align 8, !tbaa !9
  %240 = getelementptr inbounds %struct.match_position_t, ptr %238, i64 %239
  %241 = getelementptr inbounds %struct.match_position_t, ptr %240, i32 0, i32 0
  %242 = load i64, ptr %241, align 8, !tbaa !24
  store i64 %242, ptr %39, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #9
  %243 = load ptr, ptr %10, align 8, !tbaa !5
  %244 = getelementptr inbounds %struct.match_result_t, ptr %243, i32 0, i32 0
  %245 = load ptr, ptr %244, align 8, !tbaa !23
  %246 = load i64, ptr %38, align 8, !tbaa !9
  %247 = getelementptr inbounds %struct.match_position_t, ptr %245, i64 %246
  %248 = getelementptr inbounds %struct.match_position_t, ptr %247, i32 0, i32 1
  %249 = load i64, ptr %248, align 8, !tbaa !26
  store i64 %249, ptr %40, align 8, !tbaa !9
  %250 = load i64, ptr %39, align 8, !tbaa !9
  %251 = load i64, ptr %9, align 8, !tbaa !9
  %252 = icmp uge i64 %250, %251
  br i1 %252, label %257, label %253

253:                                              ; preds = %235
  %254 = load i64, ptr %39, align 8, !tbaa !9
  %255 = load i64, ptr %40, align 8, !tbaa !9
  %256 = icmp ugt i64 %254, %255
  br i1 %256, label %257, label %258

257:                                              ; preds = %253, %235
  store i32 10, ptr %15, align 4
  br label %494

258:                                              ; preds = %253
  %259 = load i64, ptr %40, align 8, !tbaa !9
  %260 = load i64, ptr %9, align 8, !tbaa !9
  %261 = icmp ugt i64 %259, %260
  br i1 %261, label %262, label %264

262:                                              ; preds = %258
  %263 = load i64, ptr %9, align 8, !tbaa !9
  store i64 %263, ptr %40, align 8, !tbaa !9
  br label %264

264:                                              ; preds = %262, %258
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #9
  %265 = load i64, ptr %40, align 8, !tbaa !9
  %266 = load i64, ptr %39, align 8, !tbaa !9
  %267 = sub i64 %265, %266
  store i64 %267, ptr %41, align 8, !tbaa !9
  %268 = load ptr, ptr %26, align 8, !tbaa !5
  %269 = icmp ne ptr %268, null
  br i1 %269, label %270, label %333

270:                                              ; preds = %264
  %271 = load i64, ptr %27, align 8, !tbaa !9
  %272 = icmp ugt i64 %271, 0
  br i1 %272, label %273, label %333

273:                                              ; preds = %270
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #9
  store i64 0, ptr %42, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #9
  %274 = load i64, ptr %27, align 8, !tbaa !9
  %275 = sub i64 %274, 1
  store i64 %275, ptr %43, align 8, !tbaa !9
  br label %276

276:                                              ; preds = %315, %273
  %277 = load i64, ptr %42, align 8, !tbaa !9
  %278 = load i64, ptr %43, align 8, !tbaa !9
  %279 = icmp ule i64 %277, %278
  br i1 %279, label %280, label %316

280:                                              ; preds = %276
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #9
  %281 = load i64, ptr %42, align 8, !tbaa !9
  %282 = load i64, ptr %43, align 8, !tbaa !9
  %283 = load i64, ptr %42, align 8, !tbaa !9
  %284 = sub i64 %282, %283
  %285 = udiv i64 %284, 2
  %286 = add i64 %281, %285
  store i64 %286, ptr %44, align 8, !tbaa !9
  %287 = load ptr, ptr %26, align 8, !tbaa !5
  %288 = load i64, ptr %44, align 8, !tbaa !9
  %289 = getelementptr inbounds i64, ptr %287, i64 %288
  %290 = load i64, ptr %289, align 8, !tbaa !9
  %291 = load i64, ptr %39, align 8, !tbaa !9
  %292 = icmp ult i64 %290, %291
  br i1 %292, label %293, label %296

293:                                              ; preds = %280
  %294 = load i64, ptr %44, align 8, !tbaa !9
  %295 = add i64 %294, 1
  store i64 %295, ptr %42, align 8, !tbaa !9
  br label %312

296:                                              ; preds = %280
  %297 = load i64, ptr %44, align 8, !tbaa !9
  %298 = icmp eq i64 %297, 0
  br i1 %298, label %307, label %299

299:                                              ; preds = %296
  %300 = load ptr, ptr %26, align 8, !tbaa !5
  %301 = load i64, ptr %44, align 8, !tbaa !9
  %302 = sub i64 %301, 1
  %303 = getelementptr inbounds i64, ptr %300, i64 %302
  %304 = load i64, ptr %303, align 8, !tbaa !9
  %305 = load i64, ptr %39, align 8, !tbaa !9
  %306 = icmp ult i64 %304, %305
  br i1 %306, label %307, label %309

307:                                              ; preds = %299, %296
  %308 = load i64, ptr %44, align 8, !tbaa !9
  store i64 %308, ptr %36, align 8, !tbaa !9
  store i32 12, ptr %15, align 4
  br label %313

309:                                              ; preds = %299
  %310 = load i64, ptr %44, align 8, !tbaa !9
  %311 = sub i64 %310, 1
  store i64 %311, ptr %43, align 8, !tbaa !9
  br label %312

312:                                              ; preds = %309, %293
  store i32 0, ptr %15, align 4
  br label %313

313:                                              ; preds = %312, %307
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #9
  %314 = load i32, ptr %15, align 4
  switch i32 %314, label %937 [
    i32 0, label %315
    i32 12, label %316
  ]

315:                                              ; preds = %313
  br label %276, !llvm.loop !27

316:                                              ; preds = %313, %276
  %317 = load i64, ptr %36, align 8, !tbaa !9
  %318 = icmp ugt i64 %317, 0
  br i1 %318, label %319, label %330

319:                                              ; preds = %316
  %320 = load ptr, ptr %26, align 8, !tbaa !5
  %321 = load i64, ptr %36, align 8, !tbaa !9
  %322 = sub i64 %321, 1
  %323 = getelementptr inbounds i64, ptr %320, i64 %322
  %324 = load i64, ptr %323, align 8, !tbaa !9
  %325 = load i64, ptr %39, align 8, !tbaa !9
  %326 = icmp uge i64 %324, %325
  br i1 %326, label %327, label %330

327:                                              ; preds = %319
  %328 = load i64, ptr %36, align 8, !tbaa !9
  %329 = add i64 %328, -1
  store i64 %329, ptr %36, align 8, !tbaa !9
  br label %330

330:                                              ; preds = %327, %319, %316
  %331 = load i64, ptr %36, align 8, !tbaa !9
  %332 = add i64 %331, 1
  store i64 %332, ptr %34, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #9
  br label %370

333:                                              ; preds = %270, %264
  %334 = load i64, ptr %39, align 8, !tbaa !9
  %335 = load i64, ptr %35, align 8, !tbaa !9
  %336 = icmp ugt i64 %334, %335
  br i1 %336, label %337, label %369

337:                                              ; preds = %333
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #9
  %338 = load ptr, ptr %8, align 8, !tbaa !5
  %339 = load i64, ptr %35, align 8, !tbaa !9
  %340 = getelementptr inbounds i8, ptr %338, i64 %339
  store ptr %340, ptr %45, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #9
  %341 = load ptr, ptr %8, align 8, !tbaa !5
  %342 = load i64, ptr %39, align 8, !tbaa !9
  %343 = getelementptr inbounds i8, ptr %341, i64 %342
  store ptr %343, ptr %46, align 8, !tbaa !5
  br label %344

344:                                              ; preds = %367, %337
  %345 = load ptr, ptr %45, align 8, !tbaa !5
  %346 = load ptr, ptr %46, align 8, !tbaa !5
  %347 = icmp ult ptr %345, %346
  br i1 %347, label %348, label %368

348:                                              ; preds = %344
  call void @llvm.lifetime.start.p0(i64 8, ptr %47) #9
  %349 = load ptr, ptr %45, align 8, !tbaa !5
  %350 = load ptr, ptr %46, align 8, !tbaa !5
  %351 = load ptr, ptr %45, align 8, !tbaa !5
  %352 = ptrtoint ptr %350 to i64
  %353 = ptrtoint ptr %351 to i64
  %354 = sub i64 %352, %353
  %355 = call ptr @memchr(ptr noundef %349, i32 noundef 10, i64 noundef %354) #11
  store ptr %355, ptr %47, align 8, !tbaa !5
  %356 = load ptr, ptr %47, align 8, !tbaa !5
  %357 = icmp ne ptr %356, null
  br i1 %357, label %358, label %363

358:                                              ; preds = %348
  %359 = load i64, ptr %34, align 8, !tbaa !9
  %360 = add i64 %359, 1
  store i64 %360, ptr %34, align 8, !tbaa !9
  %361 = load ptr, ptr %47, align 8, !tbaa !5
  %362 = getelementptr inbounds i8, ptr %361, i64 1
  store ptr %362, ptr %45, align 8, !tbaa !5
  br label %364

363:                                              ; preds = %348
  store i32 14, ptr %15, align 4
  br label %365

364:                                              ; preds = %358
  store i32 0, ptr %15, align 4
  br label %365

365:                                              ; preds = %364, %363
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #9
  %366 = load i32, ptr %15, align 4
  switch i32 %366, label %937 [
    i32 0, label %367
    i32 14, label %368
  ]

367:                                              ; preds = %365
  br label %344, !llvm.loop !28

368:                                              ; preds = %365, %344
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #9
  br label %369

369:                                              ; preds = %368, %333
  br label %370

370:                                              ; preds = %369, %330
  %371 = load i64, ptr %39, align 8, !tbaa !9
  store i64 %371, ptr %35, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %48) #9
  %372 = getelementptr inbounds [32 x i8], ptr %37, i64 0, i64 0
  %373 = load i64, ptr %34, align 8, !tbaa !9
  %374 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %372, i64 noundef 32, ptr noundef @.str.18, i64 noundef %373) #9
  store i32 %374, ptr %48, align 4, !tbaa !29
  %375 = load i32, ptr %48, align 4, !tbaa !29
  %376 = icmp sle i32 %375, 0
  br i1 %376, label %381, label %377

377:                                              ; preds = %370
  %378 = load i32, ptr %48, align 4, !tbaa !29
  %379 = sext i32 %378 to i64
  %380 = icmp uge i64 %379, 32
  br i1 %380, label %381, label %384

381:                                              ; preds = %377, %370
  %382 = getelementptr inbounds [32 x i8], ptr %37, i64 0, i64 0
  %383 = call ptr @strcpy(ptr noundef %382, ptr noundef @.str.19) #9
  store i32 4, ptr %48, align 4, !tbaa !29
  br label %384

384:                                              ; preds = %381, %377
  call void @llvm.lifetime.start.p0(i64 8, ptr %49) #9
  %385 = load i64, ptr %33, align 8, !tbaa !9
  %386 = load i32, ptr %48, align 4, !tbaa !29
  %387 = sext i32 %386 to i64
  %388 = add i64 %385, %387
  %389 = load i64, ptr %41, align 8, !tbaa !9
  %390 = add i64 %388, %389
  %391 = add i64 %390, 1
  store i64 %391, ptr %49, align 8, !tbaa !9
  %392 = load i8, ptr @color_output_enabled, align 1, !tbaa !16, !range !17, !noundef !18
  %393 = trunc i8 %392 to i1
  br i1 %393, label %394, label %400

394:                                              ; preds = %384
  %395 = load i64, ptr %24, align 8, !tbaa !9
  %396 = load i64, ptr %22, align 8, !tbaa !9
  %397 = add i64 %395, %396
  %398 = load i64, ptr %49, align 8, !tbaa !9
  %399 = add i64 %398, %397
  store i64 %399, ptr %49, align 8, !tbaa !9
  br label %400

400:                                              ; preds = %394, %384
  %401 = load i64, ptr %25, align 8, !tbaa !9
  %402 = load i64, ptr %49, align 8, !tbaa !9
  %403 = add i64 %401, %402
  %404 = icmp ugt i64 %403, 8388608
  br i1 %404, label %405, label %413

405:                                              ; preds = %400
  %406 = load i64, ptr %25, align 8, !tbaa !9
  %407 = load ptr, ptr @stdout, align 8, !tbaa !5
  %408 = call i64 @fwrite(ptr noundef @print_matching_items.o_batch_buffer, i64 noundef 1, i64 noundef %406, ptr noundef %407)
  %409 = load i64, ptr %25, align 8, !tbaa !9
  %410 = icmp ne i64 %408, %409
  br i1 %410, label %411, label %412

411:                                              ; preds = %405
  call void @perror(ptr noundef @.str.20)
  store i32 8, ptr %15, align 4
  br label %493

412:                                              ; preds = %405
  store i64 0, ptr %25, align 8, !tbaa !9
  br label %413

413:                                              ; preds = %412, %400
  call void @llvm.lifetime.start.p0(i64 8, ptr %50) #9
  %414 = load i64, ptr %25, align 8, !tbaa !9
  %415 = getelementptr inbounds i8, ptr @print_matching_items.o_batch_buffer, i64 %414
  store ptr %415, ptr %50, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %51) #9
  store ptr getelementptr inbounds (i8, ptr @print_matching_items.o_batch_buffer, i64 8388608), ptr %51, align 8, !tbaa !5
  %416 = load i64, ptr %33, align 8, !tbaa !9
  %417 = icmp ugt i64 %416, 0
  br i1 %417, label %418, label %422

418:                                              ; preds = %413
  %419 = load ptr, ptr %51, align 8, !tbaa !5
  %420 = getelementptr inbounds [4160 x i8], ptr %32, i64 0, i64 0
  %421 = load i64, ptr %33, align 8, !tbaa !9
  call void @safe_append_to_batch(ptr noundef %50, ptr noundef %419, ptr noundef %25, i64 noundef 8388608, ptr noundef %420, i64 noundef %421)
  br label %422

422:                                              ; preds = %418, %413
  %423 = load ptr, ptr %51, align 8, !tbaa !5
  %424 = getelementptr inbounds [32 x i8], ptr %37, i64 0, i64 0
  %425 = load i32, ptr %48, align 4, !tbaa !29
  %426 = sext i32 %425 to i64
  call void @safe_append_to_batch(ptr noundef %50, ptr noundef %423, ptr noundef %25, i64 noundef 8388608, ptr noundef %424, i64 noundef %426)
  %427 = load i8, ptr @color_output_enabled, align 1, !tbaa !16, !range !17, !noundef !18
  %428 = trunc i8 %427 to i1
  br i1 %428, label %429, label %433

429:                                              ; preds = %422
  %430 = load ptr, ptr %51, align 8, !tbaa !5
  %431 = load ptr, ptr %21, align 8, !tbaa !5
  %432 = load i64, ptr %24, align 8, !tbaa !9
  call void @safe_append_to_batch(ptr noundef %50, ptr noundef %430, ptr noundef %25, i64 noundef 8388608, ptr noundef %431, i64 noundef %432)
  br label %433

433:                                              ; preds = %429, %422
  call void @llvm.lifetime.start.p0(i64 8, ptr %52) #9
  %434 = load ptr, ptr %8, align 8, !tbaa !5
  %435 = load i64, ptr %39, align 8, !tbaa !9
  %436 = getelementptr inbounds i8, ptr %434, i64 %435
  store ptr %436, ptr %52, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %53) #9
  store i64 0, ptr %53, align 8, !tbaa !9
  br label %437

437:                                              ; preds = %462, %433
  %438 = load i64, ptr %53, align 8, !tbaa !9
  %439 = load i64, ptr %41, align 8, !tbaa !9
  %440 = icmp ult i64 %438, %439
  br i1 %440, label %442, label %441

441:                                              ; preds = %437
  store i32 15, ptr %15, align 4
  br label %465

442:                                              ; preds = %437
  call void @llvm.lifetime.start.p0(i64 1, ptr %54) #9
  %443 = load ptr, ptr %52, align 8, !tbaa !5
  %444 = load i64, ptr %53, align 8, !tbaa !9
  %445 = getelementptr inbounds i8, ptr %443, i64 %444
  %446 = load i8, ptr %445, align 1, !tbaa !19
  store i8 %446, ptr %54, align 1, !tbaa !19
  %447 = load i8, ptr %54, align 1, !tbaa !19
  %448 = sext i8 %447 to i32
  %449 = icmp eq i32 %448, 10
  br i1 %449, label %450, label %452

450:                                              ; preds = %442
  %451 = load ptr, ptr %51, align 8, !tbaa !5
  call void @safe_append_to_batch(ptr noundef %50, ptr noundef %451, ptr noundef %25, i64 noundef 8388608, ptr noundef @.str.21, i64 noundef 1)
  br label %454

452:                                              ; preds = %442
  %453 = load ptr, ptr %51, align 8, !tbaa !5
  call void @safe_append_to_batch(ptr noundef %50, ptr noundef %453, ptr noundef %25, i64 noundef 8388608, ptr noundef %54, i64 noundef 1)
  br label %454

454:                                              ; preds = %452, %450
  %455 = load i64, ptr %25, align 8, !tbaa !9
  %456 = icmp eq i64 %455, 8388608
  br i1 %456, label %457, label %458

457:                                              ; preds = %454
  store i32 15, ptr %15, align 4
  br label %459

458:                                              ; preds = %454
  store i32 0, ptr %15, align 4
  br label %459

459:                                              ; preds = %458, %457
  call void @llvm.lifetime.end.p0(i64 1, ptr %54) #9
  %460 = load i32, ptr %15, align 4
  switch i32 %460, label %465 [
    i32 0, label %461
  ]

461:                                              ; preds = %459
  br label %462

462:                                              ; preds = %461
  %463 = load i64, ptr %53, align 8, !tbaa !9
  %464 = add i64 %463, 1
  store i64 %464, ptr %53, align 8, !tbaa !9
  br label %437, !llvm.loop !31

465:                                              ; preds = %459, %441
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #9
  br label %466

466:                                              ; preds = %465
  %467 = load i64, ptr %25, align 8, !tbaa !9
  %468 = icmp eq i64 %467, 8388608
  br i1 %468, label %469, label %470

469:                                              ; preds = %466
  store i32 10, ptr %15, align 4
  br label %492

470:                                              ; preds = %466
  %471 = load i8, ptr @color_output_enabled, align 1, !tbaa !16, !range !17, !noundef !18
  %472 = trunc i8 %471 to i1
  br i1 %472, label %473, label %477

473:                                              ; preds = %470
  %474 = load ptr, ptr %51, align 8, !tbaa !5
  %475 = load ptr, ptr %18, align 8, !tbaa !5
  %476 = load i64, ptr %22, align 8, !tbaa !9
  call void @safe_append_to_batch(ptr noundef %50, ptr noundef %474, ptr noundef %25, i64 noundef 8388608, ptr noundef %475, i64 noundef %476)
  br label %477

477:                                              ; preds = %473, %470
  %478 = load i64, ptr %25, align 8, !tbaa !9
  %479 = icmp ult i64 %478, 8388608
  br i1 %479, label %480, label %482

480:                                              ; preds = %477
  %481 = load ptr, ptr %51, align 8, !tbaa !5
  call void @safe_append_to_batch(ptr noundef %50, ptr noundef %481, ptr noundef %25, i64 noundef 8388608, ptr noundef @.str.22, i64 noundef 1)
  br label %482

482:                                              ; preds = %480, %477
  %483 = load i64, ptr %25, align 8, !tbaa !9
  %484 = icmp ne i64 %483, 8388608
  br i1 %484, label %485, label %489

485:                                              ; preds = %482
  %486 = load ptr, ptr %50, align 8, !tbaa !5
  %487 = ptrtoint ptr %486 to i64
  %488 = sub i64 %487, ptrtoint (ptr @print_matching_items.o_batch_buffer to i64)
  store i64 %488, ptr %25, align 8, !tbaa !9
  br label %489

489:                                              ; preds = %485, %482
  %490 = load i64, ptr %12, align 8, !tbaa !9
  %491 = add i64 %490, 1
  store i64 %491, ptr %12, align 8, !tbaa !9
  store i32 0, ptr %15, align 4
  br label %492

492:                                              ; preds = %489, %469
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #9
  br label %493

493:                                              ; preds = %492, %411
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #9
  br label %494

494:                                              ; preds = %493, %257
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #9
  %495 = load i32, ptr %15, align 4
  switch i32 %495, label %500 [
    i32 0, label %496
    i32 10, label %497
  ]

496:                                              ; preds = %494
  br label %497

497:                                              ; preds = %496, %494
  %498 = load i64, ptr %38, align 8, !tbaa !9
  %499 = add i64 %498, 1
  store i64 %499, ptr %38, align 8, !tbaa !9
  br label %220, !llvm.loop !32

500:                                              ; preds = %494, %234, %226
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #9
  br label %501

501:                                              ; preds = %500
  %502 = load i64, ptr %25, align 8, !tbaa !9
  %503 = icmp ugt i64 %502, 0
  br i1 %503, label %504, label %508

504:                                              ; preds = %501
  %505 = load i64, ptr %25, align 8, !tbaa !9
  %506 = load ptr, ptr @stdout, align 8, !tbaa !5
  %507 = call i64 @fwrite(ptr noundef @print_matching_items.o_batch_buffer, i64 noundef 1, i64 noundef %505, ptr noundef %506)
  br label %508

508:                                              ; preds = %504, %501
  %509 = load ptr, ptr %26, align 8, !tbaa !5
  %510 = icmp ne ptr %509, null
  br i1 %510, label %511, label %513

511:                                              ; preds = %508
  %512 = load ptr, ptr %26, align 8, !tbaa !5
  call void @free(ptr noundef %512) #9
  br label %513

513:                                              ; preds = %511, %508
  call void @llvm.lifetime.end.p0(i64 32, ptr %37) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #9
  call void @llvm.lifetime.end.p0(i64 4160, ptr %32) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #9
  br label %929

514:                                              ; preds = %123
  call void @llvm.lifetime.start.p0(i64 8, ptr %55) #9
  store i64 -1, ptr %55, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4160, ptr %56) #9
  call void @llvm.memset.p0.i64(ptr align 16 %56, i8 0, i64 4160, i1 false)
  call void @llvm.lifetime.start.p0(i64 8, ptr %57) #9
  store i64 0, ptr %57, align 8, !tbaa !9
  %515 = load ptr, ptr %7, align 8, !tbaa !5
  %516 = icmp ne ptr %515, null
  br i1 %516, label %517, label %549

517:                                              ; preds = %514
  %518 = load i8, ptr @color_output_enabled, align 1, !tbaa !16, !range !17, !noundef !18
  %519 = trunc i8 %518 to i1
  br i1 %519, label %520, label %529

520:                                              ; preds = %517
  %521 = getelementptr inbounds [4160 x i8], ptr %56, i64 0, i64 0
  %522 = load ptr, ptr %17, align 8, !tbaa !5
  %523 = load ptr, ptr %7, align 8, !tbaa !5
  %524 = load ptr, ptr %18, align 8, !tbaa !5
  %525 = load ptr, ptr %19, align 8, !tbaa !5
  %526 = load ptr, ptr %20, align 8, !tbaa !5
  %527 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %521, i64 noundef 4160, ptr noundef @.str.23, ptr noundef %522, ptr noundef %523, ptr noundef %524, ptr noundef %525, ptr noundef %526) #9
  %528 = sext i32 %527 to i64
  store i64 %528, ptr %57, align 8, !tbaa !9
  br label %534

529:                                              ; preds = %517
  %530 = getelementptr inbounds [4160 x i8], ptr %56, i64 0, i64 0
  %531 = load ptr, ptr %7, align 8, !tbaa !5
  %532 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %530, i64 noundef 4160, ptr noundef @.str.17, ptr noundef %531) #9
  %533 = sext i32 %532 to i64
  store i64 %533, ptr %57, align 8, !tbaa !9
  br label %534

534:                                              ; preds = %529, %520
  %535 = load i64, ptr %57, align 8, !tbaa !9
  %536 = icmp ule i64 %535, 0
  br i1 %536, label %540, label %537

537:                                              ; preds = %534
  %538 = load i64, ptr %57, align 8, !tbaa !9
  %539 = icmp uge i64 %538, 4160
  br i1 %539, label %540, label %548

540:                                              ; preds = %537, %534
  store i64 4159, ptr %57, align 8, !tbaa !9
  %541 = load i64, ptr %57, align 8, !tbaa !9
  %542 = icmp ugt i64 %541, 0
  br i1 %542, label %543, label %546

543:                                              ; preds = %540
  %544 = load i64, ptr %57, align 8, !tbaa !9
  %545 = getelementptr inbounds [4160 x i8], ptr %56, i64 0, i64 %544
  store i8 0, ptr %545, align 1, !tbaa !19
  br label %547

546:                                              ; preds = %540
  store i64 0, ptr %57, align 8, !tbaa !9
  br label %547

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

548:                                              ; preds = %547, %537
  br label %549

549:                                              ; preds = %548, %514
  call void @llvm.lifetime.start.p0(i64 8, ptr %58) #9
  store i64 0, ptr %58, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %59) #9
  store i64 0, ptr %59, align 8, !tbaa !9
  br label %550

550:                                              ; preds = %916, %549
  %551 = load i64, ptr %59, align 8, !tbaa !9
  %552 = load ptr, ptr %10, align 8, !tbaa !5
  %553 = getelementptr inbounds %struct.match_result_t, ptr %552, i32 0, i32 1
  %554 = load i64, ptr %553, align 8, !tbaa !11
  %555 = icmp ult i64 %551, %554
  br i1 %555, label %556, label %917

556:                                              ; preds = %550
  %557 = load i64, ptr %13, align 8, !tbaa !9
  %558 = icmp ne i64 %557, -1
  br i1 %558, label %559, label %564

559:                                              ; preds = %556
  %560 = load i64, ptr %12, align 8, !tbaa !9
  %561 = load i64, ptr %13, align 8, !tbaa !9
  %562 = icmp uge i64 %560, %561
  br i1 %562, label %563, label %564

563:                                              ; preds = %559
  br label %917

564:                                              ; preds = %559, %556
  call void @llvm.lifetime.start.p0(i64 8, ptr %60) #9
  %565 = load ptr, ptr %10, align 8, !tbaa !5
  %566 = getelementptr inbounds %struct.match_result_t, ptr %565, i32 0, i32 0
  %567 = load ptr, ptr %566, align 8, !tbaa !23
  %568 = load i64, ptr %59, align 8, !tbaa !9
  %569 = getelementptr inbounds %struct.match_position_t, ptr %567, i64 %568
  %570 = getelementptr inbounds %struct.match_position_t, ptr %569, i32 0, i32 0
  %571 = load i64, ptr %570, align 8, !tbaa !24
  store i64 %571, ptr %60, align 8, !tbaa !9
  %572 = load i64, ptr %60, align 8, !tbaa !9
  %573 = load i64, ptr %9, align 8, !tbaa !9
  %574 = icmp uge i64 %572, %573
  br i1 %574, label %575, label %578

575:                                              ; preds = %564
  %576 = load i64, ptr %59, align 8, !tbaa !9
  %577 = add i64 %576, 1
  store i64 %577, ptr %59, align 8, !tbaa !9
  store i32 18, ptr %15, align 4
  br label %916, !llvm.loop !33

578:                                              ; preds = %564
  call void @llvm.lifetime.start.p0(i64 8, ptr %61) #9
  %579 = load ptr, ptr %8, align 8, !tbaa !5
  %580 = load i64, ptr %9, align 8, !tbaa !9
  %581 = load i64, ptr %60, align 8, !tbaa !9
  %582 = call i64 @find_line_start(ptr noundef %579, i64 noundef %580, i64 noundef %581)
  store i64 %582, ptr %61, align 8, !tbaa !9
  %583 = load i64, ptr %61, align 8, !tbaa !9
  %584 = load i64, ptr %55, align 8, !tbaa !9
  %585 = icmp eq i64 %583, %584
  br i1 %585, label %586, label %613

586:                                              ; preds = %578
  call void @llvm.lifetime.start.p0(i64 8, ptr %62) #9
  %587 = load ptr, ptr %8, align 8, !tbaa !5
  %588 = load i64, ptr %9, align 8, !tbaa !9
  %589 = load i64, ptr %61, align 8, !tbaa !9
  %590 = call i64 @find_line_end(ptr noundef %587, i64 noundef %588, i64 noundef %589)
  store i64 %590, ptr %62, align 8, !tbaa !9
  br label %591

591:                                              ; preds = %609, %586
  %592 = load i64, ptr %59, align 8, !tbaa !9
  %593 = load ptr, ptr %10, align 8, !tbaa !5
  %594 = getelementptr inbounds %struct.match_result_t, ptr %593, i32 0, i32 1
  %595 = load i64, ptr %594, align 8, !tbaa !11
  %596 = icmp ult i64 %592, %595
  br i1 %596, label %597, label %607

597:                                              ; preds = %591
  %598 = load ptr, ptr %10, align 8, !tbaa !5
  %599 = getelementptr inbounds %struct.match_result_t, ptr %598, i32 0, i32 0
  %600 = load ptr, ptr %599, align 8, !tbaa !23
  %601 = load i64, ptr %59, align 8, !tbaa !9
  %602 = getelementptr inbounds %struct.match_position_t, ptr %600, i64 %601
  %603 = getelementptr inbounds %struct.match_position_t, ptr %602, i32 0, i32 0
  %604 = load i64, ptr %603, align 8, !tbaa !24
  %605 = load i64, ptr %62, align 8, !tbaa !9
  %606 = icmp ult i64 %604, %605
  br label %607

607:                                              ; preds = %597, %591
  %608 = phi i1 [ false, %591 ], [ %606, %597 ]
  br i1 %608, label %609, label %612

609:                                              ; preds = %607
  %610 = load i64, ptr %59, align 8, !tbaa !9
  %611 = add i64 %610, 1
  store i64 %611, ptr %59, align 8, !tbaa !9
  br label %591, !llvm.loop !34

612:                                              ; preds = %607
  store i32 18, ptr %15, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %62) #9
  br label %915

613:                                              ; preds = %578
  call void @llvm.lifetime.start.p0(i64 8, ptr %63) #9
  %614 = load ptr, ptr %8, align 8, !tbaa !5
  %615 = load i64, ptr %9, align 8, !tbaa !9
  %616 = load i64, ptr %61, align 8, !tbaa !9
  %617 = call i64 @find_line_end(ptr noundef %614, i64 noundef %615, i64 noundef %616)
  store i64 %617, ptr %63, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %64) #9
  store i64 0, ptr %64, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %65) #9
  %618 = load i64, ptr %59, align 8, !tbaa !9
  store i64 %618, ptr %65, align 8, !tbaa !9
  br label %619

619:                                              ; preds = %685, %613
  %620 = load i64, ptr %65, align 8, !tbaa !9
  %621 = load ptr, ptr %10, align 8, !tbaa !5
  %622 = getelementptr inbounds %struct.match_result_t, ptr %621, i32 0, i32 1
  %623 = load i64, ptr %622, align 8, !tbaa !11
  %624 = icmp ult i64 %620, %623
  br i1 %624, label %625, label %686

625:                                              ; preds = %619
  call void @llvm.lifetime.start.p0(i64 8, ptr %66) #9
  %626 = load ptr, ptr %10, align 8, !tbaa !5
  %627 = getelementptr inbounds %struct.match_result_t, ptr %626, i32 0, i32 0
  %628 = load ptr, ptr %627, align 8, !tbaa !23
  %629 = load i64, ptr %65, align 8, !tbaa !9
  %630 = getelementptr inbounds %struct.match_position_t, ptr %628, i64 %629
  %631 = getelementptr inbounds %struct.match_position_t, ptr %630, i32 0, i32 0
  %632 = load i64, ptr %631, align 8, !tbaa !24
  store i64 %632, ptr %66, align 8, !tbaa !9
  %633 = load i64, ptr %66, align 8, !tbaa !9
  %634 = load i64, ptr %63, align 8, !tbaa !9
  %635 = icmp uge i64 %633, %634
  br i1 %635, label %636, label %637

636:                                              ; preds = %625
  store i32 23, ptr %15, align 4
  br label %683

637:                                              ; preds = %625
  %638 = load i64, ptr %66, align 8, !tbaa !9
  %639 = load i64, ptr %61, align 8, !tbaa !9
  %640 = icmp uge i64 %638, %639
  br i1 %640, label %641, label %680

641:                                              ; preds = %637
  %642 = load i64, ptr %64, align 8, !tbaa !9
  %643 = icmp ult i64 %642, 2048
  br i1 %643, label %644, label %668

644:                                              ; preds = %641
  call void @llvm.lifetime.start.p0(i64 8, ptr %67) #9
  %645 = load ptr, ptr %10, align 8, !tbaa !5
  %646 = getelementptr inbounds %struct.match_result_t, ptr %645, i32 0, i32 0
  %647 = load ptr, ptr %646, align 8, !tbaa !23
  %648 = load i64, ptr %65, align 8, !tbaa !9
  %649 = getelementptr inbounds %struct.match_position_t, ptr %647, i64 %648
  %650 = getelementptr inbounds %struct.match_position_t, ptr %649, i32 0, i32 1
  %651 = load i64, ptr %650, align 8, !tbaa !26
  store i64 %651, ptr %67, align 8, !tbaa !9
  %652 = load i64, ptr %67, align 8, !tbaa !9
  %653 = load i64, ptr %9, align 8, !tbaa !9
  %654 = icmp ugt i64 %652, %653
  br i1 %654, label %655, label %657

655:                                              ; preds = %644
  %656 = load i64, ptr %9, align 8, !tbaa !9
  store i64 %656, ptr %67, align 8, !tbaa !9
  br label %657

657:                                              ; preds = %655, %644
  %658 = load i64, ptr %66, align 8, !tbaa !9
  %659 = load i64, ptr %64, align 8, !tbaa !9
  %660 = getelementptr inbounds [2048 x %struct.match_position_t], ptr @print_matching_items.line_match_positions, i64 0, i64 %659
  %661 = getelementptr inbounds %struct.match_position_t, ptr %660, i32 0, i32 0
  store i64 %658, ptr %661, align 16, !tbaa !24
  %662 = load i64, ptr %67, align 8, !tbaa !9
  %663 = load i64, ptr %64, align 8, !tbaa !9
  %664 = getelementptr inbounds [2048 x %struct.match_position_t], ptr @print_matching_items.line_match_positions, i64 0, i64 %663
  %665 = getelementptr inbounds %struct.match_position_t, ptr %664, i32 0, i32 1
  store i64 %662, ptr %665, align 8, !tbaa !26
  %666 = load i64, ptr %64, align 8, !tbaa !9
  %667 = add i64 %666, 1
  store i64 %667, ptr %64, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %67) #9
  br label %679

668:                                              ; preds = %641
  %669 = load ptr, ptr @stderr, align 8, !tbaa !5
  %670 = load i64, ptr %61, align 8, !tbaa !9
  %671 = load ptr, ptr %7, align 8, !tbaa !5
  %672 = icmp ne ptr %671, null
  br i1 %672, label %673, label %675

673:                                              ; preds = %668
  %674 = load ptr, ptr %7, align 8, !tbaa !5
  br label %676

675:                                              ; preds = %668
  br label %676

676:                                              ; preds = %675, %673
  %677 = phi ptr [ %674, %673 ], [ @.str.25, %675 ]
  %678 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %669, ptr noundef @.str.24, i32 noundef 2048, i64 noundef %670, ptr noundef %677) #9
  store i32 23, ptr %15, align 4
  br label %683

679:                                              ; preds = %657
  br label %680

680:                                              ; preds = %679, %637
  %681 = load i64, ptr %65, align 8, !tbaa !9
  %682 = add i64 %681, 1
  store i64 %682, ptr %65, align 8, !tbaa !9
  store i32 0, ptr %15, align 4
  br label %683

683:                                              ; preds = %680, %676, %636
  call void @llvm.lifetime.end.p0(i64 8, ptr %66) #9
  %684 = load i32, ptr %15, align 4
  switch i32 %684, label %937 [
    i32 0, label %685
    i32 23, label %686
  ]

685:                                              ; preds = %683
  br label %619, !llvm.loop !35

686:                                              ; preds = %683, %619
  call void @llvm.lifetime.start.p0(i64 8, ptr %68) #9
  %687 = load i64, ptr %63, align 8, !tbaa !9
  %688 = load i64, ptr %61, align 8, !tbaa !9
  %689 = sub i64 %687, %688
  store i64 %689, ptr %68, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %69) #9
  %690 = load i64, ptr %57, align 8, !tbaa !9
  %691 = load i64, ptr %68, align 8, !tbaa !9
  %692 = add i64 %690, %691
  %693 = add i64 %692, 1
  store i64 %693, ptr %69, align 8, !tbaa !9
  %694 = load i8, ptr @color_output_enabled, align 1, !tbaa !16, !range !17, !noundef !18
  %695 = trunc i8 %694 to i1
  br i1 %695, label %696, label %714

696:                                              ; preds = %686
  %697 = load i64, ptr %57, align 8, !tbaa !9
  %698 = icmp eq i64 %697, 0
  br i1 %698, label %699, label %701

699:                                              ; preds = %696
  %700 = load i64, ptr %23, align 8, !tbaa !9
  br label %702

701:                                              ; preds = %696
  br label %702

702:                                              ; preds = %701, %699
  %703 = phi i64 [ %700, %699 ], [ 0, %701 ]
  %704 = load i64, ptr %64, align 8, !tbaa !9
  %705 = load i64, ptr %24, align 8, !tbaa !9
  %706 = load i64, ptr %23, align 8, !tbaa !9
  %707 = add i64 %705, %706
  %708 = mul i64 %704, %707
  %709 = add i64 %703, %708
  %710 = load i64, ptr %22, align 8, !tbaa !9
  %711 = add i64 %709, %710
  %712 = load i64, ptr %69, align 8, !tbaa !9
  %713 = add i64 %712, %711
  store i64 %713, ptr %69, align 8, !tbaa !9
  br label %714

714:                                              ; preds = %702, %686
  %715 = load i64, ptr %69, align 8, !tbaa !9
  %716 = call zeroext i1 @ensure_line_buffer_capacity(ptr noundef %14, ptr noundef %16, i64 noundef 0, i64 noundef %715)
  br i1 %716, label %730, label %717

717:                                              ; preds = %714
  %718 = load ptr, ptr @stderr, align 8, !tbaa !5
  %719 = load i64, ptr %69, align 8, !tbaa !9
  %720 = load i64, ptr %61, align 8, !tbaa !9
  %721 = load ptr, ptr %7, align 8, !tbaa !5
  %722 = icmp ne ptr %721, null
  br i1 %722, label %723, label %725

723:                                              ; preds = %717
  %724 = load ptr, ptr %7, align 8, !tbaa !5
  br label %726

725:                                              ; preds = %717
  br label %726

726:                                              ; preds = %725, %723
  %727 = phi ptr [ %724, %723 ], [ @.str.25, %725 ]
  %728 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %718, ptr noundef @.str.26, i64 noundef %719, i64 noundef %720, ptr noundef %727) #9
  %729 = load i64, ptr %65, align 8, !tbaa !9
  store i64 %729, ptr %59, align 8, !tbaa !9
  store i32 18, ptr %15, align 4
  br label %914, !llvm.loop !33

730:                                              ; preds = %714
  call void @llvm.lifetime.start.p0(i64 8, ptr %70) #9
  store i64 0, ptr %70, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %71) #9
  %731 = load ptr, ptr %14, align 8, !tbaa !5
  store ptr %731, ptr %71, align 8, !tbaa !5
  %732 = load i64, ptr %57, align 8, !tbaa !9
  %733 = icmp ugt i64 %732, 0
  br i1 %733, label %734, label %741

734:                                              ; preds = %730
  %735 = load ptr, ptr %71, align 8, !tbaa !5
  %736 = getelementptr inbounds [4160 x i8], ptr %56, i64 0, i64 0
  %737 = load i64, ptr %57, align 8, !tbaa !9
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %735, ptr align 16 %736, i64 %737, i1 false)
  %738 = load i64, ptr %57, align 8, !tbaa !9
  %739 = load ptr, ptr %71, align 8, !tbaa !5
  %740 = getelementptr inbounds i8, ptr %739, i64 %738
  store ptr %740, ptr %71, align 8, !tbaa !5
  br label %752

741:                                              ; preds = %730
  %742 = load i8, ptr @color_output_enabled, align 1, !tbaa !16, !range !17, !noundef !18
  %743 = trunc i8 %742 to i1
  br i1 %743, label %744, label %751

744:                                              ; preds = %741
  %745 = load ptr, ptr %71, align 8, !tbaa !5
  %746 = load ptr, ptr %20, align 8, !tbaa !5
  %747 = load i64, ptr %23, align 8, !tbaa !9
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %745, ptr align 1 %746, i64 %747, i1 false)
  %748 = load i64, ptr %23, align 8, !tbaa !9
  %749 = load ptr, ptr %71, align 8, !tbaa !5
  %750 = getelementptr inbounds i8, ptr %749, i64 %748
  store ptr %750, ptr %71, align 8, !tbaa !5
  br label %751

751:                                              ; preds = %744, %741
  br label %752

752:                                              ; preds = %751, %734
  call void @llvm.lifetime.start.p0(i64 8, ptr %72) #9
  %753 = load i64, ptr %61, align 8, !tbaa !9
  store i64 %753, ptr %72, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %73) #9
  store i64 0, ptr %73, align 8, !tbaa !9
  br label %754

754:                                              ; preds = %836, %752
  %755 = load i64, ptr %73, align 8, !tbaa !9
  %756 = load i64, ptr %64, align 8, !tbaa !9
  %757 = icmp ult i64 %755, %756
  br i1 %757, label %759, label %758

758:                                              ; preds = %754
  store i32 24, ptr %15, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %73) #9
  br label %839

759:                                              ; preds = %754
  call void @llvm.lifetime.start.p0(i64 8, ptr %74) #9
  %760 = load i64, ptr %73, align 8, !tbaa !9
  %761 = getelementptr inbounds [2048 x %struct.match_position_t], ptr @print_matching_items.line_match_positions, i64 0, i64 %760
  %762 = getelementptr inbounds %struct.match_position_t, ptr %761, i32 0, i32 0
  %763 = load i64, ptr %762, align 16, !tbaa !24
  store i64 %763, ptr %74, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %75) #9
  %764 = load i64, ptr %73, align 8, !tbaa !9
  %765 = getelementptr inbounds [2048 x %struct.match_position_t], ptr @print_matching_items.line_match_positions, i64 0, i64 %764
  %766 = getelementptr inbounds %struct.match_position_t, ptr %765, i32 0, i32 1
  %767 = load i64, ptr %766, align 8, !tbaa !26
  store i64 %767, ptr %75, align 8, !tbaa !9
  %768 = load i64, ptr %74, align 8, !tbaa !9
  %769 = load i64, ptr %61, align 8, !tbaa !9
  %770 = icmp ult i64 %768, %769
  br i1 %770, label %771, label %773

771:                                              ; preds = %759
  %772 = load i64, ptr %61, align 8, !tbaa !9
  store i64 %772, ptr %74, align 8, !tbaa !9
  br label %773

773:                                              ; preds = %771, %759
  %774 = load i64, ptr %75, align 8, !tbaa !9
  %775 = load i64, ptr %63, align 8, !tbaa !9
  %776 = icmp ugt i64 %774, %775
  br i1 %776, label %777, label %779

777:                                              ; preds = %773
  %778 = load i64, ptr %63, align 8, !tbaa !9
  store i64 %778, ptr %75, align 8, !tbaa !9
  br label %779

779:                                              ; preds = %777, %773
  %780 = load i64, ptr %74, align 8, !tbaa !9
  %781 = load i64, ptr %75, align 8, !tbaa !9
  %782 = icmp uge i64 %780, %781
  br i1 %782, label %783, label %784

783:                                              ; preds = %779
  store i32 26, ptr %15, align 4
  br label %833

784:                                              ; preds = %779
  %785 = load i64, ptr %74, align 8, !tbaa !9
  %786 = load i64, ptr %72, align 8, !tbaa !9
  %787 = icmp ugt i64 %785, %786
  br i1 %787, label %788, label %800

788:                                              ; preds = %784
  call void @llvm.lifetime.start.p0(i64 8, ptr %76) #9
  %789 = load i64, ptr %74, align 8, !tbaa !9
  %790 = load i64, ptr %72, align 8, !tbaa !9
  %791 = sub i64 %789, %790
  store i64 %791, ptr %76, align 8, !tbaa !9
  %792 = load ptr, ptr %71, align 8, !tbaa !5
  %793 = load ptr, ptr %8, align 8, !tbaa !5
  %794 = load i64, ptr %72, align 8, !tbaa !9
  %795 = getelementptr inbounds i8, ptr %793, i64 %794
  %796 = load i64, ptr %76, align 8, !tbaa !9
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %792, ptr align 1 %795, i64 %796, i1 false)
  %797 = load i64, ptr %76, align 8, !tbaa !9
  %798 = load ptr, ptr %71, align 8, !tbaa !5
  %799 = getelementptr inbounds i8, ptr %798, i64 %797
  store ptr %799, ptr %71, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %76) #9
  br label %800

800:                                              ; preds = %788, %784
  call void @llvm.lifetime.start.p0(i64 8, ptr %77) #9
  %801 = load i64, ptr %75, align 8, !tbaa !9
  %802 = load i64, ptr %74, align 8, !tbaa !9
  %803 = sub i64 %801, %802
  store i64 %803, ptr %77, align 8, !tbaa !9
  %804 = load i8, ptr @color_output_enabled, align 1, !tbaa !16, !range !17, !noundef !18
  %805 = trunc i8 %804 to i1
  br i1 %805, label %806, label %813

806:                                              ; preds = %800
  %807 = load ptr, ptr %71, align 8, !tbaa !5
  %808 = load ptr, ptr %21, align 8, !tbaa !5
  %809 = load i64, ptr %24, align 8, !tbaa !9
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %807, ptr align 1 %808, i64 %809, i1 false)
  %810 = load i64, ptr %24, align 8, !tbaa !9
  %811 = load ptr, ptr %71, align 8, !tbaa !5
  %812 = getelementptr inbounds i8, ptr %811, i64 %810
  store ptr %812, ptr %71, align 8, !tbaa !5
  br label %813

813:                                              ; preds = %806, %800
  %814 = load ptr, ptr %71, align 8, !tbaa !5
  %815 = load ptr, ptr %8, align 8, !tbaa !5
  %816 = load i64, ptr %74, align 8, !tbaa !9
  %817 = getelementptr inbounds i8, ptr %815, i64 %816
  %818 = load i64, ptr %77, align 8, !tbaa !9
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %814, ptr align 1 %817, i64 %818, i1 false)
  %819 = load i64, ptr %77, align 8, !tbaa !9
  %820 = load ptr, ptr %71, align 8, !tbaa !5
  %821 = getelementptr inbounds i8, ptr %820, i64 %819
  store ptr %821, ptr %71, align 8, !tbaa !5
  %822 = load i8, ptr @color_output_enabled, align 1, !tbaa !16, !range !17, !noundef !18
  %823 = trunc i8 %822 to i1
  br i1 %823, label %824, label %831

824:                                              ; preds = %813
  %825 = load ptr, ptr %71, align 8, !tbaa !5
  %826 = load ptr, ptr %20, align 8, !tbaa !5
  %827 = load i64, ptr %23, align 8, !tbaa !9
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %825, ptr align 1 %826, i64 %827, i1 false)
  %828 = load i64, ptr %23, align 8, !tbaa !9
  %829 = load ptr, ptr %71, align 8, !tbaa !5
  %830 = getelementptr inbounds i8, ptr %829, i64 %828
  store ptr %830, ptr %71, align 8, !tbaa !5
  br label %831

831:                                              ; preds = %824, %813
  %832 = load i64, ptr %75, align 8, !tbaa !9
  store i64 %832, ptr %72, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %77) #9
  store i32 0, ptr %15, align 4
  br label %833

833:                                              ; preds = %831, %783
  call void @llvm.lifetime.end.p0(i64 8, ptr %75) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %74) #9
  %834 = load i32, ptr %15, align 4
  switch i32 %834, label %937 [
    i32 0, label %835
    i32 26, label %836
  ]

835:                                              ; preds = %833
  br label %836

836:                                              ; preds = %835, %833
  %837 = load i64, ptr %73, align 8, !tbaa !9
  %838 = add i64 %837, 1
  store i64 %838, ptr %73, align 8, !tbaa !9
  br label %754, !llvm.loop !36

839:                                              ; preds = %758
  %840 = load i64, ptr %72, align 8, !tbaa !9
  %841 = load i64, ptr %63, align 8, !tbaa !9
  %842 = icmp ult i64 %840, %841
  br i1 %842, label %843, label %855

843:                                              ; preds = %839
  call void @llvm.lifetime.start.p0(i64 8, ptr %78) #9
  %844 = load i64, ptr %63, align 8, !tbaa !9
  %845 = load i64, ptr %72, align 8, !tbaa !9
  %846 = sub i64 %844, %845
  store i64 %846, ptr %78, align 8, !tbaa !9
  %847 = load ptr, ptr %71, align 8, !tbaa !5
  %848 = load ptr, ptr %8, align 8, !tbaa !5
  %849 = load i64, ptr %72, align 8, !tbaa !9
  %850 = getelementptr inbounds i8, ptr %848, i64 %849
  %851 = load i64, ptr %78, align 8, !tbaa !9
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %847, ptr align 1 %850, i64 %851, i1 false)
  %852 = load i64, ptr %78, align 8, !tbaa !9
  %853 = load ptr, ptr %71, align 8, !tbaa !5
  %854 = getelementptr inbounds i8, ptr %853, i64 %852
  store ptr %854, ptr %71, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %78) #9
  br label %855

855:                                              ; preds = %843, %839
  %856 = load i8, ptr @color_output_enabled, align 1, !tbaa !16, !range !17, !noundef !18
  %857 = trunc i8 %856 to i1
  br i1 %857, label %858, label %865

858:                                              ; preds = %855
  %859 = load ptr, ptr %71, align 8, !tbaa !5
  %860 = load ptr, ptr %18, align 8, !tbaa !5
  %861 = load i64, ptr %22, align 8, !tbaa !9
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %859, ptr align 1 %860, i64 %861, i1 false)
  %862 = load i64, ptr %22, align 8, !tbaa !9
  %863 = load ptr, ptr %71, align 8, !tbaa !5
  %864 = getelementptr inbounds i8, ptr %863, i64 %862
  store ptr %864, ptr %71, align 8, !tbaa !5
  br label %865

865:                                              ; preds = %858, %855
  %866 = load ptr, ptr %71, align 8, !tbaa !5
  store i8 10, ptr %866, align 1, !tbaa !19
  %867 = load ptr, ptr %71, align 8, !tbaa !5
  %868 = getelementptr inbounds i8, ptr %867, i32 1
  store ptr %868, ptr %71, align 8, !tbaa !5
  %869 = load ptr, ptr %71, align 8, !tbaa !5
  %870 = load ptr, ptr %14, align 8, !tbaa !5
  %871 = ptrtoint ptr %869 to i64
  %872 = ptrtoint ptr %870 to i64
  %873 = sub i64 %871, %872
  store i64 %873, ptr %70, align 8, !tbaa !9
  %874 = load i64, ptr %58, align 8, !tbaa !9
  %875 = load i64, ptr %70, align 8, !tbaa !9
  %876 = add i64 %874, %875
  %877 = icmp ugt i64 %876, 8388608
  br i1 %877, label %878, label %886

878:                                              ; preds = %865
  %879 = load i64, ptr %58, align 8, !tbaa !9
  %880 = load ptr, ptr @stdout, align 8, !tbaa !5
  %881 = call i64 @fwrite(ptr noundef @print_matching_items.line_batch_buffer, i64 noundef 1, i64 noundef %879, ptr noundef %880)
  %882 = load i64, ptr %58, align 8, !tbaa !9
  %883 = icmp ne i64 %881, %882
  br i1 %883, label %884, label %885

884:                                              ; preds = %878
  call void @perror(ptr noundef @.str.27)
  br label %885

885:                                              ; preds = %884, %878
  store i64 0, ptr %58, align 8, !tbaa !9
  br label %886

886:                                              ; preds = %885, %865
  %887 = load i64, ptr %70, align 8, !tbaa !9
  %888 = icmp ule i64 %887, 8388608
  br i1 %888, label %889, label %897

889:                                              ; preds = %886
  %890 = load i64, ptr %58, align 8, !tbaa !9
  %891 = getelementptr inbounds i8, ptr @print_matching_items.line_batch_buffer, i64 %890
  %892 = load ptr, ptr %14, align 8, !tbaa !5
  %893 = load i64, ptr %70, align 8, !tbaa !9
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %891, ptr align 1 %892, i64 %893, i1 false)
  %894 = load i64, ptr %70, align 8, !tbaa !9
  %895 = load i64, ptr %58, align 8, !tbaa !9
  %896 = add i64 %895, %894
  store i64 %896, ptr %58, align 8, !tbaa !9
  br label %909

897:                                              ; preds = %886
  %898 = load ptr, ptr @stderr, align 8, !tbaa !5
  %899 = load i64, ptr %70, align 8, !tbaa !9
  %900 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %898, ptr noundef @.str.28, i64 noundef %899, i32 noundef 8388608) #9
  %901 = load ptr, ptr %14, align 8, !tbaa !5
  %902 = load i64, ptr %70, align 8, !tbaa !9
  %903 = load ptr, ptr @stdout, align 8, !tbaa !5
  %904 = call i64 @fwrite(ptr noundef %901, i64 noundef 1, i64 noundef %902, ptr noundef %903)
  %905 = load i64, ptr %70, align 8, !tbaa !9
  %906 = icmp ne i64 %904, %905
  br i1 %906, label %907, label %908

907:                                              ; preds = %897
  call void @perror(ptr noundef @.str.29)
  br label %908

908:                                              ; preds = %907, %897
  br label %909

909:                                              ; preds = %908, %889
  %910 = load i64, ptr %12, align 8, !tbaa !9
  %911 = add i64 %910, 1
  store i64 %911, ptr %12, align 8, !tbaa !9
  %912 = load i64, ptr %61, align 8, !tbaa !9
  store i64 %912, ptr %55, align 8, !tbaa !9
  %913 = load i64, ptr %65, align 8, !tbaa !9
  store i64 %913, ptr %59, align 8, !tbaa !9
  store i32 18, ptr %15, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %72) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %71) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %70) #9
  br label %914

914:                                              ; preds = %909, %726
  call void @llvm.lifetime.end.p0(i64 8, ptr %69) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %68) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %65) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #9
  br label %915

915:                                              ; preds = %914, %612
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #9
  br label %916

916:                                              ; preds = %915, %575
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #9
  br label %550

917:                                              ; preds = %563, %550
  %918 = load i64, ptr %58, align 8, !tbaa !9
  %919 = icmp ugt i64 %918, 0
  br i1 %919, label %920, label %928

920:                                              ; preds = %917
  %921 = load i64, ptr %58, align 8, !tbaa !9
  %922 = load ptr, ptr @stdout, align 8, !tbaa !5
  %923 = call i64 @fwrite(ptr noundef @print_matching_items.line_batch_buffer, i64 noundef 1, i64 noundef %921, ptr noundef %922)
  %924 = load i64, ptr %58, align 8, !tbaa !9
  %925 = icmp ne i64 %923, %924
  br i1 %925, label %926, label %927

926:                                              ; preds = %920
  call void @perror(ptr noundef @.str.30)
  br label %927

927:                                              ; preds = %926, %920
  br label %928

928:                                              ; preds = %927, %917
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %57) #9
  call void @llvm.lifetime.end.p0(i64 4160, ptr %56) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #9
  br label %929

929:                                              ; preds = %928, %513
  %930 = load ptr, ptr @stdout, align 8, !tbaa !5
  %931 = call i32 @fflush(ptr noundef %930)
  %932 = load ptr, ptr %14, align 8, !tbaa !5
  call void @free(ptr noundef %932) #9
  %933 = load i64, ptr %12, align 8, !tbaa !9
  store i64 %933, ptr %6, align 8
  store i32 1, ptr %15, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #9
  br label %934

934:                                              ; preds = %929, %99
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #9
  br label %935

935:                                              ; preds = %934, %89
  %936 = load i64, ptr %6, align 8
  ret i64 %936

937:                                              ; preds = %833, %683, %365, %313
  unreachable
}

; Function Attrs: nounwind
declare i32 @setvbuf(ptr noundef, ptr noundef, i32 noundef, i64 noundef) #3

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

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

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

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

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

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @safe_append_to_batch(ptr noundef, ptr noundef, ptr noundef, i64 noundef, ptr noundef, i64 noundef) #7

; Function Attrs: nounwind uwtable
declare hidden zeroext i1 @ensure_line_buffer_capacity(ptr noundef, ptr noundef, i64 noundef, i64 noundef) #4

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

declare i32 @fflush(ptr noundef) #2

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #2 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { 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 #6 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #7 = { 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 #8 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #9 = { nounwind }
attributes #10 = { nounwind allocsize(0) }
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 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"long", !7, i64 0}
!11 = !{!12, !10, i64 8}
!12 = !{!"match_result_t", !6, i64 0, !10, i64 8, !10, i64 16}
!13 = !{!14, !10, i64 64}
!14 = !{!"search_params", !6, i64 0, !10, i64 8, !6, i64 16, !6, i64 24, !10, i64 32, !15, i64 40, !15, i64 41, !15, i64 42, !15, i64 43, !15, i64 44, !15, i64 45, !6, i64 48, !6, i64 56, !10, i64 64}
!15 = !{!"_Bool", !7, i64 0}
!16 = !{!15, !15, i64 0}
!17 = !{i8 0, i8 2}
!18 = !{}
!19 = !{!7, !7, i64 0}
!20 = distinct !{!20, !21}
!21 = !{!"llvm.loop.mustprogress"}
!22 = distinct !{!22, !21}
!23 = !{!12, !6, i64 0}
!24 = !{!25, !10, i64 0}
!25 = !{!"", !10, i64 0, !10, i64 8}
!26 = !{!25, !10, i64 8}
!27 = distinct !{!27, !21}
!28 = distinct !{!28, !21}
!29 = !{!30, !30, i64 0}
!30 = !{!"int", !7, i64 0}
!31 = distinct !{!31, !21}
!32 = distinct !{!32, !21}
!33 = distinct !{!33, !21}
!34 = distinct !{!34, !21}
!35 = distinct !{!35, !21}
!36 = distinct !{!36, !21}


; 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.match_position_t = type { i64, i64 }

@stderr = external local_unnamed_addr global ptr, align 8
@print_matching_items.stdout_buf = external hidden global [8388608 x i8], align 16
@stdout = external local_unnamed_addr global ptr, align 8
@.str.11 = external hidden unnamed_addr constant [30 x i8], align 1
@print_matching_items.line_match_positions = external hidden local_unnamed_addr global [2048 x %struct.match_position_t], align 16
@.str.12 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [8 x i8], align 1
@color_output_enabled = external hidden local_unnamed_addr global i8, align 1
@only_matching = external hidden local_unnamed_addr global i8, align 1
@print_matching_items.o_batch_buffer = external hidden global [8388608 x i8], align 16
@.str.16 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [47 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [12 x i8], align 1
@print_matching_items.line_batch_buffer = external hidden global [8388608 x i8], align 16
@.str.24 = external hidden unnamed_addr constant [82 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [102 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [78 x i8], align 1
@.str.29 = external hidden unnamed_addr constant [48 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [48 x i8], align 1

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

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

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

; Function Attrs: nofree nounwind
declare void @perror(ptr nocapture noundef readonly) local_unnamed_addr #2

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

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

; Function Attrs: nounwind uwtable
declare dso_local i64 @find_line_start(ptr noundef, i64 noundef, i64 noundef) local_unnamed_addr #4

; Function Attrs: nounwind uwtable
declare dso_local i64 @find_line_end(ptr noundef, i64 noundef, i64 noundef) local_unnamed_addr #4

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

; Function Attrs: nounwind uwtable
define dso_local i64 @print_matching_items(ptr noundef %0, ptr noundef %1, i64 noundef %2, ptr noundef readonly %3, ptr nocapture noundef readonly %4) local_unnamed_addr #4 {
  %6 = alloca ptr, align 8
  %7 = alloca i64, align 8
  %8 = alloca i64, align 8
  %9 = alloca [4160 x i8], align 16
  %10 = alloca [32 x i8], align 16
  %11 = alloca ptr, align 8
  %12 = alloca i8, align 1
  %13 = alloca [4160 x i8], align 16
  %14 = icmp ne ptr %3, null
  %15 = icmp ne ptr %1, null
  %or.cond = and i1 %15, %14
  br i1 %or.cond, label %16, label %355

16:                                               ; preds = %5
  %17 = getelementptr inbounds i8, ptr %3, i64 8
  %18 = load i64, ptr %17, align 8, !tbaa !5
  %19 = icmp eq i64 %18, 0
  br i1 %19, label %355, label %20

20:                                               ; preds = %16
  %21 = getelementptr inbounds i8, ptr %4, i64 64
  %22 = load i64, ptr %21, align 8, !tbaa !11
  %23 = load ptr, ptr @stdout, align 8, !tbaa !14
  %24 = tail call i32 @setvbuf(ptr noundef %23, ptr noundef nonnull @print_matching_items.stdout_buf, i32 noundef 0, i64 noundef 8388608) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %6) #11
  %25 = tail call noalias dereferenceable_or_null(524288) ptr @malloc(i64 noundef 524288) #12
  store ptr %25, ptr %6, align 8, !tbaa !14
  %.not = icmp eq ptr %25, null
  br i1 %.not, label %26, label %27

26:                                               ; preds = %20
  tail call void @perror(ptr noundef nonnull @.str.11) #13
  br label %354

27:                                               ; preds = %20
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %7) #11
  store i64 524288, ptr %7, align 8, !tbaa !15
  %28 = load i8, ptr @color_output_enabled, align 1, !tbaa !16, !range !17, !noundef !18
  %29 = trunc nuw i8 %28 to i1
  br i1 %29, label %30, label %33

30:                                               ; preds = %27
  %31 = tail call i64 @strlen(ptr noundef nonnull dereferenceable(1) @.str.13) #14
  %32 = tail call i64 @strlen(ptr noundef nonnull dereferenceable(1) @.str.15) #14
  br label %33

33:                                               ; preds = %27, %30
  %34 = phi i64 [ %31, %30 ], [ 0, %27 ]
  %35 = phi i64 [ %32, %30 ], [ 0, %27 ]
  %36 = load i8, ptr @only_matching, align 1, !tbaa !16, !range !17, !noundef !18
  %37 = trunc nuw i8 %36 to i1
  br i1 %37, label %38, label %200

38:                                               ; preds = %33
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %8) #11
  store i64 0, ptr %8, align 8, !tbaa !15
  %39 = load i64, ptr %17, align 8, !tbaa !5
  %40 = icmp ugt i64 %39, 10
  br i1 %40, label %.preheader501, label %.loopexit500

.preheader501:                                    ; preds = %38
  %.not565 = icmp eq i64 %2, 0
  br i1 %.not565, label %._crit_edge542, label %.lr.ph541.preheader

.lr.ph541.preheader:                              ; preds = %.preheader501
  %min.iters.check = icmp ult i64 %2, 4
  br i1 %min.iters.check, label %.lr.ph541.preheader617, label %vector.ph

.lr.ph541.preheader617:                           ; preds = %middle.block, %.lr.ph541.preheader
  %.0336540.ph = phi i64 [ 0, %.lr.ph541.preheader ], [ %50, %middle.block ]
  %.0346539.ph = phi i64 [ 0, %.lr.ph541.preheader ], [ %n.vec, %middle.block ]
  br label %.lr.ph541

vector.ph:                                        ; preds = %.lr.ph541.preheader
  %n.vec = and i64 %2, -4
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %vec.phi = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %47, %vector.body ]
  %vec.phi608 = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %48, %vector.body ]
  %41 = getelementptr inbounds i8, ptr %1, i64 %index
  %42 = getelementptr inbounds i8, ptr %41, i64 2
  %wide.load = load <2 x i8>, ptr %41, align 1, !tbaa !19
  %wide.load609 = load <2 x i8>, ptr %42, align 1, !tbaa !19
  %43 = icmp eq <2 x i8> %wide.load, <i8 10, i8 10>
  %44 = icmp eq <2 x i8> %wide.load609, <i8 10, i8 10>
  %45 = zext <2 x i1> %43 to <2 x i64>
  %46 = zext <2 x i1> %44 to <2 x i64>
  %47 = add <2 x i64> %vec.phi, %45
  %48 = add <2 x i64> %vec.phi608, %46
  %index.next = add nuw i64 %index, 4
  %49 = icmp eq i64 %index.next, %n.vec
  br i1 %49, label %middle.block, label %vector.body, !llvm.loop !20

middle.block:                                     ; preds = %vector.body
  %bin.rdx = add <2 x i64> %48, %47
  %50 = tail call i64 @llvm.vector.reduce.add.v2i64(<2 x i64> %bin.rdx)
  %cmp.n = icmp eq i64 %n.vec, %2
  br i1 %cmp.n, label %._crit_edge542, label %.lr.ph541.preheader617

._crit_edge542:                                   ; preds = %.lr.ph541, %middle.block, %.preheader501
  %.0336.lcssa = phi i64 [ 0, %.preheader501 ], [ %50, %middle.block ], [ %spec.select, %.lr.ph541 ]
  %51 = shl i64 %.0336.lcssa, 3
  %52 = add i64 %51, 8
  %53 = tail call noalias ptr @malloc(i64 noundef %52) #12
  %.not438 = icmp eq ptr %53, null
  %brmerge = or i1 %.not438, %.not565
  br i1 %brmerge, label %.loopexit500, label %.lr.ph546.preheader

.lr.ph546.preheader:                              ; preds = %._crit_edge542
  %xtraiter = and i64 %2, 1
  %54 = icmp eq i64 %2, 1
  br i1 %54, label %.loopexit500.loopexit.unr-lcssa, label %.lr.ph546.preheader.new

.lr.ph546.preheader.new:                          ; preds = %.lr.ph546.preheader
  %unroll_iter = and i64 %2, -2
  br label %.lr.ph546

.lr.ph541:                                        ; preds = %.lr.ph541.preheader617, %.lr.ph541
  %.0336540 = phi i64 [ %spec.select, %.lr.ph541 ], [ %.0336540.ph, %.lr.ph541.preheader617 ]
  %.0346539 = phi i64 [ %59, %.lr.ph541 ], [ %.0346539.ph, %.lr.ph541.preheader617 ]
  %55 = getelementptr inbounds i8, ptr %1, i64 %.0346539
  %56 = load i8, ptr %55, align 1, !tbaa !19
  %57 = icmp eq i8 %56, 10
  %58 = zext i1 %57 to i64
  %spec.select = add i64 %.0336540, %58
  %59 = add nuw i64 %.0346539, 1
  %exitcond577.not = icmp eq i64 %59, %2
  br i1 %exitcond577.not, label %._crit_edge542, label %.lr.ph541, !llvm.loop !24

.lr.ph546:                                        ; preds = %73, %.lr.ph546.preheader.new
  %.0347545 = phi i64 [ 0, %.lr.ph546.preheader.new ], [ %.1348.1, %73 ]
  %.0349544 = phi i64 [ 0, %.lr.ph546.preheader.new ], [ %74, %73 ]
  %niter = phi i64 [ 0, %.lr.ph546.preheader.new ], [ %niter.next.1, %73 ]
  %60 = getelementptr inbounds i8, ptr %1, i64 %.0349544
  %61 = load i8, ptr %60, align 1, !tbaa !19
  %62 = icmp eq i8 %61, 10
  br i1 %62, label %63, label %.lr.ph546.1

63:                                               ; preds = %.lr.ph546
  %64 = add i64 %.0347545, 1
  %65 = getelementptr inbounds i64, ptr %53, i64 %.0347545
  store i64 %.0349544, ptr %65, align 8, !tbaa !15
  br label %.lr.ph546.1

.lr.ph546.1:                                      ; preds = %.lr.ph546, %63
  %.1348 = phi i64 [ %64, %63 ], [ %.0347545, %.lr.ph546 ]
  %66 = or disjoint i64 %.0349544, 1
  %67 = getelementptr inbounds i8, ptr %1, i64 %66
  %68 = load i8, ptr %67, align 1, !tbaa !19
  %69 = icmp eq i8 %68, 10
  br i1 %69, label %70, label %73

70:                                               ; preds = %.lr.ph546.1
  %71 = add i64 %.1348, 1
  %72 = getelementptr inbounds i64, ptr %53, i64 %.1348
  store i64 %66, ptr %72, align 8, !tbaa !15
  br label %73

73:                                               ; preds = %70, %.lr.ph546.1
  %.1348.1 = phi i64 [ %71, %70 ], [ %.1348, %.lr.ph546.1 ]
  %74 = add nuw i64 %.0349544, 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 %.loopexit500.loopexit.unr-lcssa, label %.lr.ph546, !llvm.loop !25

.loopexit500.loopexit.unr-lcssa:                  ; preds = %73, %.lr.ph546.preheader
  %.0347545.unr = phi i64 [ 0, %.lr.ph546.preheader ], [ %.1348.1, %73 ]
  %.0349544.unr = phi i64 [ 0, %.lr.ph546.preheader ], [ %74, %73 ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.loopexit500, label %.lr.ph546.epil

.lr.ph546.epil:                                   ; preds = %.loopexit500.loopexit.unr-lcssa
  %75 = getelementptr inbounds i8, ptr %1, i64 %.0349544.unr
  %76 = load i8, ptr %75, align 1, !tbaa !19
  %77 = icmp eq i8 %76, 10
  br i1 %77, label %78, label %.loopexit500

78:                                               ; preds = %.lr.ph546.epil
  %79 = getelementptr inbounds i64, ptr %53, i64 %.0347545.unr
  store i64 %.0349544.unr, ptr %79, align 8, !tbaa !15
  br label %.loopexit500

.loopexit500:                                     ; preds = %.loopexit500.loopexit.unr-lcssa, %78, %.lr.ph546.epil, %._crit_edge542, %38
  %.2338 = phi i64 [ %.0336.lcssa, %._crit_edge542 ], [ 0, %38 ], [ %.0336.lcssa, %.lr.ph546.epil ], [ %.0336.lcssa, %78 ], [ %.0336.lcssa, %.loopexit500.loopexit.unr-lcssa ]
  %.0334 = phi ptr [ %53, %._crit_edge542 ], [ null, %38 ], [ %53, %.lr.ph546.epil ], [ %53, %78 ], [ %53, %.loopexit500.loopexit.unr-lcssa ]
  call void @llvm.lifetime.start.p0(i64 4160, ptr nonnull %9) #11
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(4160) %9, i8 0, i64 4160, i1 false)
  %.not439 = icmp eq ptr %0, null
  br i1 %.not439, label %89, label %80

80:                                               ; preds = %.loopexit500
  br i1 %29, label %81, label %83

81:                                               ; preds = %80
  %82 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef nonnull dereferenceable(1) %9, i64 noundef 4160, ptr noundef nonnull @.str.16, ptr noundef nonnull @.str.12, ptr noundef nonnull %0, ptr noundef nonnull @.str.13, ptr noundef nonnull @.str.14) #11
  br label %85

83:                                               ; preds = %80
  %84 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef nonnull dereferenceable(1) %9, i64 noundef 4160, ptr noundef nonnull @.str.17, ptr noundef nonnull %0) #11
  br label %85

85:                                               ; preds = %83, %81
  %.0368.in = phi i32 [ %82, %81 ], [ %84, %83 ]
  %.0368 = zext nneg i32 %.0368.in to i64
  %86 = add i32 %.0368.in, -4160
  %or.cond3 = icmp ult i32 %86, -4159
  br i1 %or.cond3, label %87, label %89

87:                                               ; preds = %85
  %88 = getelementptr inbounds i8, ptr %9, i64 4159
  store i8 0, ptr %88, align 1, !tbaa !19
  br label %89

89:                                               ; preds = %85, %87, %.loopexit500
  %.1369 = phi i64 [ 4159, %87 ], [ %.0368, %85 ], [ 0, %.loopexit500 ]
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %10) #11
  %90 = load i64, ptr %17, align 8, !tbaa !5
  %.not567 = icmp eq i64 %90, 0
  br i1 %.not567, label %.loopexit499, label %.lr.ph559

.lr.ph559:                                        ; preds = %89
  %.not440 = icmp eq i64 %22, -1
  %91 = icmp ne ptr %.0334, null
  %92 = icmp ne i64 %.2338, 0
  %or.cond5 = and i1 %91, %92
  %93 = add i64 %.2338, -1
  %94 = add i64 %35, %34
  %95 = add nuw nsw i64 %.1369, 1
  %.not448 = icmp eq i64 %.1369, 0
  br label %96

96:                                               ; preds = %.lr.ph559, %.thread477
  %97 = phi i64 [ %90, %.lr.ph559 ], [ %190, %.thread477 ]
  %.0311557 = phi i64 [ 0, %.lr.ph559 ], [ %.3486, %.thread477 ]
  %.0370556 = phi i64 [ 1, %.lr.ph559 ], [ %.5375485, %.thread477 ]
  %.0378555 = phi i64 [ 0, %.lr.ph559 ], [ %.1379484, %.thread477 ]
  %.0380554 = phi i64 [ 0, %.lr.ph559 ], [ %.6386483, %.thread477 ]
  %.0389553 = phi i64 [ 0, %.lr.ph559 ], [ %191, %.thread477 ]
  %.not441 = icmp ult i64 %.0311557, %22
  %or.cond453 = select i1 %.not440, i1 true, i1 %.not441
  br i1 %or.cond453, label %98, label %.loopexit499

98:                                               ; preds = %96
  %99 = load ptr, ptr %3, align 8, !tbaa !26
  %100 = getelementptr inbounds %struct.match_position_t, ptr %99, i64 %.0389553
  %101 = load i64, ptr %100, align 8, !tbaa !27
  %102 = getelementptr inbounds i8, ptr %100, i64 8
  %103 = load i64, ptr %102, align 8, !tbaa !29
  %.not442 = icmp uge i64 %101, %2
  %104 = icmp ugt i64 %101, %103
  %or.cond454 = select i1 %.not442, i1 true, i1 %104
  br i1 %or.cond454, label %.thread477, label %105

105:                                              ; preds = %98
  %spec.select455 = call i64 @llvm.umin.i64(i64 %103, i64 %2)
  %106 = sub i64 %spec.select455, %101
  br i1 %or.cond5, label %.preheader569, label %125

.preheader569:                                    ; preds = %105, %122
  %.0390548 = phi i64 [ %.2392, %122 ], [ %93, %105 ]
  %.0393547 = phi i64 [ %.2395, %122 ], [ 0, %105 ]
  %107 = sub i64 %.0390548, %.0393547
  %108 = lshr i64 %107, 1
  %109 = add i64 %108, %.0393547
  %110 = getelementptr inbounds i64, ptr %.0334, i64 %109
  %111 = load i64, ptr %110, align 8, !tbaa !15
  %112 = icmp ult i64 %111, %101
  br i1 %112, label %113, label %115

113:                                              ; preds = %.preheader569
  %114 = add i64 %109, 1
  br label %122

115:                                              ; preds = %.preheader569
  %116 = icmp eq i64 %109, 0
  br i1 %116, label %.thread463.thread, label %117

117:                                              ; preds = %115
  %118 = add i64 %109, -1
  %119 = getelementptr inbounds i64, ptr %.0334, i64 %118
  %120 = load i64, ptr %119, align 8, !tbaa !15
  %121 = icmp ult i64 %120, %101
  br i1 %121, label %.thread463.thread495, label %122

122:                                              ; preds = %117, %113
  %.2395 = phi i64 [ %114, %113 ], [ %.0393547, %117 ]
  %.2392 = phi i64 [ %.0390548, %113 ], [ %118, %117 ]
  %.not444 = icmp ugt i64 %.2395, %.2392
  br i1 %.not444, label %.thread463, label %.preheader569

.thread463:                                       ; preds = %122
  %.not445 = icmp eq i64 %.0380554, 0
  br i1 %.not445, label %.thread463.thread, label %.thread463..thread463.thread495_crit_edge

.thread463..thread463.thread495_crit_edge:        ; preds = %.thread463
  %.pre582 = add i64 %.0380554, -1
  %.phi.trans.insert = getelementptr inbounds i64, ptr %.0334, i64 %.pre582
  %.pre583 = load i64, ptr %.phi.trans.insert, align 8, !tbaa !15
  br label %.thread463.thread495

.thread463.thread495:                             ; preds = %117, %.thread463..thread463.thread495_crit_edge
  %123 = phi i64 [ %.pre583, %.thread463..thread463.thread495_crit_edge ], [ %120, %117 ]
  %.pre-phi = phi i64 [ %.pre582, %.thread463..thread463.thread495_crit_edge ], [ %118, %117 ]
  %.3383498 = phi i64 [ %.0380554, %.thread463..thread463.thread495_crit_edge ], [ %109, %117 ]
  %.not446 = icmp ult i64 %123, %101
  %spec.select456 = select i1 %.not446, i64 %.3383498, i64 %.pre-phi
  br label %.thread463.thread

.thread463.thread:                                ; preds = %115, %.thread463.thread495, %.thread463
  %.4384 = phi i64 [ 0, %.thread463 ], [ %spec.select456, %.thread463.thread495 ], [ 0, %115 ]
  %124 = add i64 %.4384, 1
  br label %.loopexit

125:                                              ; preds = %105
  %126 = icmp ugt i64 %101, %.0378555
  br i1 %126, label %127, label %.loopexit

127:                                              ; preds = %125
  %128 = getelementptr inbounds i8, ptr %1, i64 %.0378555
  %129 = getelementptr inbounds i8, ptr %1, i64 %101
  %130 = ptrtoint ptr %129 to i64
  br label %131

131:                                              ; preds = %133, %127
  %.0387 = phi ptr [ %128, %127 ], [ %138, %133 ]
  %.1371 = phi i64 [ %.0370556, %127 ], [ %137, %133 ]
  %132 = icmp ult ptr %.0387, %129
  br i1 %132, label %133, label %.loopexit

133:                                              ; preds = %131
  %134 = ptrtoint ptr %.0387 to i64
  %135 = sub i64 %130, %134
  %136 = call ptr @memchr(ptr noundef %.0387, i32 noundef 10, i64 noundef %135) #14
  %.not443 = icmp eq ptr %136, null
  %137 = add i64 %.1371, 1
  %138 = getelementptr inbounds i8, ptr %136, i64 1
  br i1 %.not443, label %.loopexit, label %131

.loopexit:                                        ; preds = %133, %131, %125, %.thread463.thread
  %.5385 = phi i64 [ %.4384, %.thread463.thread ], [ %.0380554, %125 ], [ %.0380554, %131 ], [ %.0380554, %133 ]
  %.4374 = phi i64 [ %124, %.thread463.thread ], [ %.0370556, %125 ], [ %.1371, %131 ], [ %.1371, %133 ]
  %139 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef nonnull dereferenceable(1) %10, i64 noundef 32, ptr noundef nonnull @.str.18, i64 noundef %.4374) #11
  %140 = add i32 %139, -32
  %or.cond8 = icmp ult i32 %140, -31
  br i1 %or.cond8, label %141, label %143

141:                                              ; preds = %.loopexit
  %142 = call ptr @strcpy(ptr noundef nonnull dereferenceable(1) %10, ptr noundef nonnull dereferenceable(1) @.str.19) #11
  br label %143

143:                                              ; preds = %.loopexit, %141
  %.0377 = phi i32 [ 4, %141 ], [ %139, %.loopexit ]
  %144 = zext nneg i32 %.0377 to i64
  %145 = load i8, ptr @color_output_enabled, align 1, !tbaa !16, !range !17, !noundef !18
  %146 = trunc nuw i8 %145 to i1
  %147 = select i1 %146, i64 %94, i64 0
  %148 = load i64, ptr %8, align 8, !tbaa !15
  %149 = add i64 %95, %106
  %150 = add i64 %149, %144
  %.0376 = add i64 %150, %148
  %151 = add i64 %.0376, %147
  %152 = icmp ugt i64 %151, 8388608
  br i1 %152, label %153, label %158

153:                                              ; preds = %143
  %154 = load ptr, ptr @stdout, align 8, !tbaa !14
  %155 = call i64 @fwrite(ptr noundef nonnull @print_matching_items.o_batch_buffer, i64 noundef 1, i64 noundef %148, ptr noundef %154)
  %156 = load i64, ptr %8, align 8, !tbaa !15
  %.not447 = icmp eq i64 %155, %156
  br i1 %.not447, label %157, label %.thread471

.thread471:                                       ; preds = %153
  call void @perror(ptr noundef nonnull @.str.20) #13
  br label %.loopexit499

157:                                              ; preds = %153
  store i64 0, ptr %8, align 8, !tbaa !15
  br label %158

158:                                              ; preds = %157, %143
  %159 = phi i64 [ 0, %157 ], [ %148, %143 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %11) #11
  %160 = getelementptr inbounds i8, ptr @print_matching_items.o_batch_buffer, i64 %159
  store ptr %160, ptr %11, align 8, !tbaa !14
  br i1 %.not448, label %162, label %161

161:                                              ; preds = %158
  call void @safe_append_to_batch(ptr noundef nonnull %11, ptr noundef nonnull getelementptr inbounds (i8, ptr @print_matching_items.o_batch_buffer, i64 8388608), ptr noundef nonnull %8, i64 noundef 8388608, ptr noundef nonnull %9, i64 noundef %.1369)
  br label %162

162:                                              ; preds = %161, %158
  call void @safe_append_to_batch(ptr noundef nonnull %11, ptr noundef nonnull getelementptr inbounds (i8, ptr @print_matching_items.o_batch_buffer, i64 8388608), ptr noundef nonnull %8, i64 noundef 8388608, ptr noundef nonnull %10, i64 noundef %144)
  %163 = load i8, ptr @color_output_enabled, align 1, !tbaa !16, !range !17, !noundef !18
  %164 = trunc nuw i8 %163 to i1
  br i1 %164, label %165, label %166

165:                                              ; preds = %162
  call void @safe_append_to_batch(ptr noundef nonnull %11, ptr noundef nonnull getelementptr inbounds (i8, ptr @print_matching_items.o_batch_buffer, i64 8388608), ptr noundef nonnull %8, i64 noundef 8388608, ptr noundef nonnull @.str.15, i64 noundef %35)
  br label %166

166:                                              ; preds = %165, %162
  %167 = getelementptr inbounds i8, ptr %1, i64 %101
  %.not568 = icmp eq i64 %spec.select455, %101
  br i1 %.not568, label %._crit_edge552, label %.lr.ph551

168:                                              ; preds = %.lr.ph551
  %169 = add nuw i64 %.0367549, 1
  %exitcond579.not = icmp eq i64 %169, %106
  br i1 %exitcond579.not, label %._crit_edge552.thread, label %.lr.ph551, !llvm.loop !30

.lr.ph551:                                        ; preds = %166, %168
  %.0367549 = phi i64 [ %169, %168 ], [ 0, %166 ]
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %12) #11
  %170 = getelementptr inbounds i8, ptr %167, i64 %.0367549
  %171 = load i8, ptr %170, align 1, !tbaa !19
  store i8 %171, ptr %12, align 1, !tbaa !19
  %172 = icmp eq i8 %171, 10
  %.str.21. = select i1 %172, ptr @.str.21, ptr %12
  call void @safe_append_to_batch(ptr noundef nonnull %11, ptr noundef nonnull getelementptr inbounds (i8, ptr @print_matching_items.o_batch_buffer, i64 8388608), ptr noundef nonnull %8, i64 noundef 8388608, ptr noundef nonnull %.str.21., i64 noundef 1)
  %173 = load i64, ptr %8, align 8, !tbaa !15
  %.not449 = icmp eq i64 %173, 8388608
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %12) #11
  br i1 %.not449, label %.thread469, label %168

._crit_edge552:                                   ; preds = %166
  %.pr.pre = load i64, ptr %8, align 8, !tbaa !15
  %174 = icmp eq i64 %.pr.pre, 8388608
  br i1 %174, label %.thread469, label %._crit_edge552.thread

._crit_edge552.thread:                            ; preds = %168, %._crit_edge552
  %.pr585 = phi i64 [ %.pr.pre, %._crit_edge552 ], [ %173, %168 ]
  %175 = load i8, ptr @color_output_enabled, align 1, !tbaa !16, !range !17, !noundef !18
  %176 = trunc nuw i8 %175 to i1
  br i1 %176, label %177, label %178

177:                                              ; preds = %._crit_edge552.thread
  call void @safe_append_to_batch(ptr noundef nonnull %11, ptr noundef nonnull getelementptr inbounds (i8, ptr @print_matching_items.o_batch_buffer, i64 8388608), ptr noundef nonnull %8, i64 noundef 8388608, ptr noundef nonnull @.str.13, i64 noundef %34)
  %.pr470 = load i64, ptr %8, align 8, !tbaa !15
  br label %178

178:                                              ; preds = %177, %._crit_edge552.thread
  %179 = phi i64 [ %.pr470, %177 ], [ %.pr585, %._crit_edge552.thread ]
  %180 = icmp ult i64 %179, 8388608
  br i1 %180, label %181, label %182

181:                                              ; preds = %178
  call void @safe_append_to_batch(ptr noundef nonnull %11, ptr noundef nonnull getelementptr inbounds (i8, ptr @print_matching_items.o_batch_buffer, i64 8388608), ptr noundef nonnull %8, i64 noundef 8388608, ptr noundef nonnull @.str.22, i64 noundef 1)
  %.pre = load i64, ptr %8, align 8, !tbaa !15
  br label %182

182:                                              ; preds = %181, %178
  %183 = phi i64 [ %.pre, %181 ], [ %179, %178 ]
  %.not450 = icmp eq i64 %183, 8388608
  br i1 %.not450, label %188, label %184

184:                                              ; preds = %182
  %185 = load ptr, ptr %11, align 8, !tbaa !14
  %186 = ptrtoint ptr %185 to i64
  %187 = sub i64 %186, ptrtoint (ptr @print_matching_items.o_batch_buffer to i64)
  store i64 %187, ptr %8, align 8, !tbaa !15
  br label %188

188:                                              ; preds = %184, %182
  %189 = add i64 %.0311557, 1
  br label %.thread469

.thread469:                                       ; preds = %.lr.ph551, %188, %._crit_edge552
  %.1312 = phi i64 [ %189, %188 ], [ %.0311557, %._crit_edge552 ], [ %.0311557, %.lr.ph551 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #11
  %.pre581 = load i64, ptr %17, align 8, !tbaa !5
  br label %.thread477

.thread477:                                       ; preds = %98, %.thread469
  %190 = phi i64 [ %.pre581, %.thread469 ], [ %97, %98 ]
  %.3486 = phi i64 [ %.1312, %.thread469 ], [ %.0311557, %98 ]
  %.5375485 = phi i64 [ %.4374, %.thread469 ], [ %.0370556, %98 ]
  %.1379484 = phi i64 [ %101, %.thread469 ], [ %.0378555, %98 ]
  %.6386483 = phi i64 [ %.5385, %.thread469 ], [ %.0380554, %98 ]
  %191 = add nuw i64 %.0389553, 1
  %192 = icmp ult i64 %191, %190
  br i1 %192, label %96, label %.loopexit499, !llvm.loop !31

.loopexit499:                                     ; preds = %.thread477, %96, %89, %.thread471
  %.0311504 = phi i64 [ %.0311557, %.thread471 ], [ 0, %89 ], [ %.3486, %.thread477 ], [ %.0311557, %96 ]
  %193 = load i64, ptr %8, align 8, !tbaa !15
  %.not451 = icmp eq i64 %193, 0
  br i1 %.not451, label %197, label %194

194:                                              ; preds = %.loopexit499
  %195 = load ptr, ptr @stdout, align 8, !tbaa !14
  %196 = call i64 @fwrite(ptr noundef nonnull @print_matching_items.o_batch_buffer, i64 noundef 1, i64 noundef %193, ptr noundef %195)
  br label %197

197:                                              ; preds = %194, %.loopexit499
  %.not452 = icmp eq ptr %.0334, null
  br i1 %.not452, label %199, label %198

198:                                              ; preds = %197
  call void @free(ptr noundef nonnull %.0334) #11
  br label %199

199:                                              ; preds = %198, %197
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %10) #11
  call void @llvm.lifetime.end.p0(i64 4160, ptr nonnull %9) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #11
  br label %350

200:                                              ; preds = %33
  call void @llvm.lifetime.start.p0(i64 4160, ptr nonnull %13) #11
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(4160) %13, i8 0, i64 4160, i1 false)
  %.not426 = icmp eq ptr %0, null
  br i1 %.not426, label %210, label %201

201:                                              ; preds = %200
  br i1 %29, label %202, label %204

202:                                              ; preds = %201
  %203 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef nonnull dereferenceable(1) %13, i64 noundef 4160, ptr noundef nonnull @.str.23, ptr noundef nonnull @.str.12, ptr noundef nonnull %0, ptr noundef nonnull @.str.13, ptr noundef nonnull @.str.14, ptr noundef nonnull @.str.13) #11
  br label %206

204:                                              ; preds = %201
  %205 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef nonnull dereferenceable(1) %13, i64 noundef 4160, ptr noundef nonnull @.str.17, ptr noundef nonnull %0) #11
  br label %206

206:                                              ; preds = %204, %202
  %.0361.in = phi i32 [ %203, %202 ], [ %205, %204 ]
  %.0361 = zext nneg i32 %.0361.in to i64
  %207 = add i32 %.0361.in, -4160
  %or.cond10 = icmp ult i32 %207, -4159
  br i1 %or.cond10, label %208, label %210

208:                                              ; preds = %206
  %209 = getelementptr inbounds i8, ptr %13, i64 4159
  store i8 0, ptr %209, align 1, !tbaa !19
  br label %210

210:                                              ; preds = %206, %208, %200
  %.1362 = phi i64 [ 4159, %208 ], [ %.0361, %206 ], [ 0, %200 ]
  %211 = load i64, ptr %17, align 8, !tbaa !5
  %.not563 = icmp eq i64 %211, 0
  br i1 %.not563, label %._crit_edge533.thread, label %.lr.ph532

.lr.ph532:                                        ; preds = %210
  %.not427 = icmp eq i64 %22, -1
  %212 = select i1 %.not426, ptr @.str.25, ptr %0
  %213 = add nuw nsw i64 %.1362, 1
  %214 = icmp eq i64 %.1362, 0
  %215 = select i1 %214, i64 %34, i64 0
  %216 = add i64 %35, %34
  %217 = add i64 %215, %34
  br label %218

218:                                              ; preds = %.lr.ph532, %.critedge
  %.5530 = phi i64 [ 0, %.lr.ph532 ], [ %.8, %.critedge ]
  %.0350529 = phi i64 [ 0, %.lr.ph532 ], [ %.4354, %.critedge ]
  %.0355528 = phi i64 [ 0, %.lr.ph532 ], [ %.5360, %.critedge ]
  %.0363527 = phi i64 [ -1, %.lr.ph532 ], [ %.3366, %.critedge ]
  %.not428 = icmp ult i64 %.5530, %22
  %or.cond457 = select i1 %.not427, i1 true, i1 %.not428
  br i1 %or.cond457, label %219, label %._crit_edge533

219:                                              ; preds = %218
  %220 = load ptr, ptr %3, align 8, !tbaa !26
  %221 = getelementptr inbounds %struct.match_position_t, ptr %220, i64 %.0350529
  %222 = load i64, ptr %221, align 8, !tbaa !27
  %.not429 = icmp ult i64 %222, %2
  br i1 %.not429, label %225, label %223

223:                                              ; preds = %219
  %224 = add nuw i64 %.0350529, 1
  br label %.critedge, !llvm.loop !32

225:                                              ; preds = %219
  %226 = call i64 @find_line_start(ptr noundef nonnull %1, i64 noundef %2, i64 noundef %222)
  %227 = icmp eq i64 %226, %.0363527
  br i1 %227, label %228, label %239

228:                                              ; preds = %225
  %229 = call i64 @find_line_end(ptr noundef nonnull %1, i64 noundef %2, i64 noundef %.0363527)
  %230 = load i64, ptr %17, align 8, !tbaa !5
  %231 = icmp ult i64 %.0350529, %230
  br i1 %231, label %.lr.ph523, label %.critedge

.lr.ph523:                                        ; preds = %228
  %232 = load ptr, ptr %3, align 8, !tbaa !26
  br label %233

233:                                              ; preds = %.lr.ph523, %237
  %.1351521 = phi i64 [ %.0350529, %.lr.ph523 ], [ %238, %237 ]
  %234 = getelementptr inbounds %struct.match_position_t, ptr %232, i64 %.1351521
  %235 = load i64, ptr %234, align 8, !tbaa !27
  %236 = icmp ult i64 %235, %229
  br i1 %236, label %237, label %.critedge

237:                                              ; preds = %233
  %238 = add i64 %.1351521, 1
  %exitcond576.not = icmp eq i64 %238, %230
  br i1 %exitcond576.not, label %.critedge, label %233, !llvm.loop !33

239:                                              ; preds = %225
  %240 = call i64 @find_line_end(ptr noundef nonnull %1, i64 noundef %2, i64 noundef %226)
  %241 = load i64, ptr %17, align 8, !tbaa !5
  %242 = icmp ult i64 %.0350529, %241
  br i1 %242, label %.lr.ph, label %.thread488

.lr.ph:                                           ; preds = %239
  %243 = load ptr, ptr %3, align 8, !tbaa !26
  br label %244

244:                                              ; preds = %.lr.ph, %259
  %.0339510 = phi i64 [ %.0350529, %.lr.ph ], [ %260, %259 ]
  %.0342509 = phi i64 [ 0, %.lr.ph ], [ %.1343, %259 ]
  %245 = getelementptr inbounds %struct.match_position_t, ptr %243, i64 %.0339510
  %246 = load i64, ptr %245, align 8, !tbaa !27
  %.not430 = icmp ult i64 %246, %240
  br i1 %.not430, label %247, label %.thread488

247:                                              ; preds = %244
  %.not431 = icmp ult i64 %246, %226
  br i1 %.not431, label %259, label %248

248:                                              ; preds = %247
  %249 = icmp ult i64 %.0342509, 2048
  br i1 %249, label %250, label %256

250:                                              ; preds = %248
  %251 = getelementptr inbounds i8, ptr %245, i64 8
  %252 = load i64, ptr %251, align 8, !tbaa !29
  %spec.select458 = call i64 @llvm.umin.i64(i64 %252, i64 %2)
  %253 = getelementptr inbounds [2048 x %struct.match_position_t], ptr @print_matching_items.line_match_positions, i64 0, i64 %.0342509
  store i64 %246, ptr %253, align 16, !tbaa !27
  %254 = getelementptr inbounds i8, ptr %253, i64 8
  store i64 %spec.select458, ptr %254, align 8, !tbaa !29
  %255 = add nuw nsw i64 %.0342509, 1
  br label %259

256:                                              ; preds = %248
  %257 = load ptr, ptr @stderr, align 8, !tbaa !14
  %258 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %257, ptr noundef nonnull @.str.24, i32 noundef 2048, i64 noundef %226, ptr noundef nonnull %212) #15
  br label %.thread488

259:                                              ; preds = %247, %250
  %.1343 = phi i64 [ %255, %250 ], [ %.0342509, %247 ]
  %260 = add nuw i64 %.0339510, 1
  %exitcond.not = icmp eq i64 %260, %241
  br i1 %exitcond.not, label %.thread488, label %244

.thread488:                                       ; preds = %259, %244, %239, %256
  %.0342508 = phi i64 [ %.0342509, %256 ], [ 0, %239 ], [ %.1343, %259 ], [ %.0342509, %244 ]
  %.0339506 = phi i64 [ %.0339510, %256 ], [ %.0350529, %239 ], [ %241, %259 ], [ %.0339510, %244 ]
  %261 = sub i64 %213, %226
  %262 = add i64 %261, %240
  %263 = load i8, ptr @color_output_enabled, align 1, !tbaa !16, !range !17, !noundef !18
  %264 = trunc nuw i8 %263 to i1
  %265 = mul i64 %.0342508, %216
  %266 = add i64 %217, %262
  %267 = add i64 %266, %265
  %.0333 = select i1 %264, i64 %267, i64 %262
  %268 = call zeroext i1 @ensure_line_buffer_capacity(ptr noundef nonnull %6, ptr noundef nonnull %7, i64 noundef 0, i64 noundef %.0333)
  br i1 %268, label %272, label %269

269:                                              ; preds = %.thread488
  %270 = load ptr, ptr @stderr, align 8, !tbaa !14
  %271 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %270, ptr noundef nonnull @.str.26, i64 noundef %.0333, i64 noundef %226, ptr noundef nonnull %212) #15
  br label %.critedge, !llvm.loop !32

272:                                              ; preds = %.thread488
  %273 = load ptr, ptr %6, align 8, !tbaa !14
  br i1 %214, label %276, label %274

274:                                              ; preds = %272
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %273, ptr nonnull align 16 %13, i64 %.1362, i1 false)
  %275 = getelementptr inbounds i8, ptr %273, i64 %.1362
  br label %281

276:                                              ; preds = %272
  %277 = load i8, ptr @color_output_enabled, align 1, !tbaa !16, !range !17, !noundef !18
  %278 = trunc nuw i8 %277 to i1
  br i1 %278, label %279, label %281

279:                                              ; preds = %276
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %273, ptr nonnull align 1 @.str.13, i64 %34, i1 false)
  %280 = getelementptr inbounds i8, ptr %273, i64 %34
  br label %281

281:                                              ; preds = %276, %279, %274
  %.0325 = phi ptr [ %275, %274 ], [ %280, %279 ], [ %273, %276 ]
  %.not564 = icmp eq i64 %.0342508, 0
  br i1 %.not564, label %._crit_edge, label %.lr.ph518

._crit_edge:                                      ; preds = %306, %281
  %.1326.lcssa = phi ptr [ %.0325, %281 ], [ %.5330, %306 ]
  %.0323.lcssa = phi i64 [ %226, %281 ], [ %.1324, %306 ]
  %282 = icmp ult i64 %.0323.lcssa, %240
  br i1 %282, label %308, label %312

.lr.ph518:                                        ; preds = %281, %306
  %.0322517 = phi i64 [ %307, %306 ], [ 0, %281 ]
  %.0323516 = phi i64 [ %.1324, %306 ], [ %226, %281 ]
  %.1326515 = phi ptr [ %.5330, %306 ], [ %.0325, %281 ]
  %283 = getelementptr inbounds [2048 x %struct.match_position_t], ptr @print_matching_items.line_match_positions, i64 0, i64 %.0322517
  %284 = load i64, ptr %283, align 16, !tbaa !27
  %285 = getelementptr inbounds i8, ptr %283, i64 8
  %286 = load i64, ptr %285, align 8, !tbaa !29
  %spec.select461 = call i64 @llvm.umax.i64(i64 %284, i64 %226)
  %.0320 = call i64 @llvm.umin.i64(i64 %286, i64 %240)
  %.not435 = icmp ult i64 %spec.select461, %.0320
  br i1 %.not435, label %287, label %306

287:                                              ; preds = %.lr.ph518
  %288 = icmp ugt i64 %spec.select461, %.0323516
  br i1 %288, label %289, label %293

289:                                              ; preds = %287
  %290 = sub i64 %spec.select461, %.0323516
  %291 = getelementptr inbounds i8, ptr %1, i64 %.0323516
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %.1326515, ptr nonnull align 1 %291, i64 %290, i1 false)
  %292 = getelementptr inbounds i8, ptr %.1326515, i64 %290
  br label %293

293:                                              ; preds = %289, %287
  %.2327 = phi ptr [ %292, %289 ], [ %.1326515, %287 ]
  %294 = sub i64 %.0320, %spec.select461
  %295 = load i8, ptr @color_output_enabled, align 1, !tbaa !16, !range !17, !noundef !18
  %296 = trunc nuw i8 %295 to i1
  br i1 %296, label %297, label %299

297:                                              ; preds = %293
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %.2327, ptr nonnull align 1 @.str.15, i64 %35, i1 false)
  %298 = getelementptr inbounds i8, ptr %.2327, i64 %35
  br label %299

299:                                              ; preds = %297, %293
  %.3328 = phi ptr [ %298, %297 ], [ %.2327, %293 ]
  %300 = getelementptr inbounds i8, ptr %1, i64 %spec.select461
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %.3328, ptr nonnull align 1 %300, i64 %294, i1 false)
  %301 = getelementptr inbounds i8, ptr %.3328, i64 %294
  %302 = load i8, ptr @color_output_enabled, align 1, !tbaa !16, !range !17, !noundef !18
  %303 = trunc nuw i8 %302 to i1
  br i1 %303, label %304, label %306

304:                                              ; preds = %299
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %301, ptr nonnull align 1 @.str.13, i64 %34, i1 false)
  %305 = getelementptr inbounds i8, ptr %301, i64 %34
  br label %306

306:                                              ; preds = %299, %304, %.lr.ph518
  %.5330 = phi ptr [ %.1326515, %.lr.ph518 ], [ %305, %304 ], [ %301, %299 ]
  %.1324 = phi i64 [ %.0323516, %.lr.ph518 ], [ %.0320, %304 ], [ %.0320, %299 ]
  %307 = add nuw i64 %.0322517, 1
  %exitcond575.not = icmp eq i64 %307, %.0342508
  br i1 %exitcond575.not, label %._crit_edge, label %.lr.ph518, !llvm.loop !34

308:                                              ; preds = %._crit_edge
  %309 = sub i64 %240, %.0323.lcssa
  %310 = getelementptr inbounds i8, ptr %1, i64 %.0323.lcssa
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %.1326.lcssa, ptr nonnull align 1 %310, i64 %309, i1 false)
  %311 = getelementptr inbounds i8, ptr %.1326.lcssa, i64 %309
  br label %312

312:                                              ; preds = %308, %._crit_edge
  %.6331 = phi ptr [ %311, %308 ], [ %.1326.lcssa, %._crit_edge ]
  %313 = load i8, ptr @color_output_enabled, align 1, !tbaa !16, !range !17, !noundef !18
  %314 = trunc nuw i8 %313 to i1
  br i1 %314, label %315, label %317

315:                                              ; preds = %312
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %.6331, ptr nonnull align 1 @.str.13, i64 %34, i1 false)
  %316 = getelementptr inbounds i8, ptr %.6331, i64 %34
  br label %317

317:                                              ; preds = %315, %312
  %.7332 = phi ptr [ %316, %315 ], [ %.6331, %312 ]
  store i8 10, ptr %.7332, align 1, !tbaa !19
  %318 = getelementptr inbounds i8, ptr %.7332, i64 1
  %319 = load ptr, ptr %6, align 8, !tbaa !14
  %320 = ptrtoint ptr %318 to i64
  %321 = ptrtoint ptr %319 to i64
  %322 = sub i64 %320, %321
  %323 = add i64 %322, %.0355528
  %324 = icmp ugt i64 %323, 8388608
  br i1 %324, label %325, label %329

325:                                              ; preds = %317
  %326 = load ptr, ptr @stdout, align 8, !tbaa !14
  %327 = call i64 @fwrite(ptr noundef nonnull @print_matching_items.line_batch_buffer, i64 noundef 1, i64 noundef %.0355528, ptr noundef %326)
  %.not433 = icmp eq i64 %327, %.0355528
  br i1 %.not433, label %329, label %328

328:                                              ; preds = %325
  call void @perror(ptr noundef nonnull @.str.27) #13
  br label %329

329:                                              ; preds = %325, %328, %317
  %.1356 = phi i64 [ %.0355528, %317 ], [ 0, %328 ], [ 0, %325 ]
  %330 = icmp ult i64 %322, 8388609
  br i1 %330, label %331, label %335

331:                                              ; preds = %329
  %332 = getelementptr inbounds i8, ptr @print_matching_items.line_batch_buffer, i64 %.1356
  %333 = load ptr, ptr %6, align 8, !tbaa !14
  call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 1 %332, ptr align 1 %333, i64 %322, i1 false)
  %334 = add i64 %.1356, %322
  br label %342

335:                                              ; preds = %329
  %336 = load ptr, ptr @stderr, align 8, !tbaa !14
  %337 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %336, ptr noundef nonnull @.str.28, i64 noundef %322, i32 noundef 8388608) #15
  %338 = load ptr, ptr %6, align 8, !tbaa !14
  %339 = load ptr, ptr @stdout, align 8, !tbaa !14
  %340 = call i64 @fwrite(ptr noundef %338, i64 noundef 1, i64 noundef %322, ptr noundef %339)
  %.not434 = icmp eq i64 %340, %322
  br i1 %.not434, label %342, label %341

341:                                              ; preds = %335
  call void @perror(ptr noundef nonnull @.str.29) #13
  br label %342

342:                                              ; preds = %335, %341, %331
  %.2357 = phi i64 [ %334, %331 ], [ %.1356, %341 ], [ %.1356, %335 ]
  %343 = add i64 %.5530, 1
  br label %.critedge

.critedge:                                        ; preds = %233, %237, %228, %342, %269, %223
  %.3366 = phi i64 [ %.0363527, %223 ], [ %226, %342 ], [ %.0363527, %269 ], [ %.0363527, %228 ], [ %.0363527, %237 ], [ %.0363527, %233 ]
  %.5360 = phi i64 [ %.0355528, %223 ], [ %.2357, %342 ], [ %.0355528, %269 ], [ %.0355528, %228 ], [ %.0355528, %237 ], [ %.0355528, %233 ]
  %.4354 = phi i64 [ %224, %223 ], [ %.0339506, %342 ], [ %.0339506, %269 ], [ %.0350529, %228 ], [ %.1351521, %233 ], [ %230, %237 ]
  %.8 = phi i64 [ %.5530, %223 ], [ %343, %342 ], [ %.5530, %269 ], [ %.5530, %228 ], [ %.5530, %237 ], [ %.5530, %233 ]
  %344 = load i64, ptr %17, align 8, !tbaa !5
  %345 = icmp ult i64 %.4354, %344
  br i1 %345, label %218, label %._crit_edge533

._crit_edge533:                                   ; preds = %.critedge, %218
  %.0355.lcssa = phi i64 [ %.5360, %.critedge ], [ %.0355528, %218 ]
  %.5.lcssa = phi i64 [ %.8, %.critedge ], [ %.5530, %218 ]
  %.not436 = icmp eq i64 %.0355.lcssa, 0
  br i1 %.not436, label %._crit_edge533.thread, label %346

346:                                              ; preds = %._crit_edge533
  %347 = load ptr, ptr @stdout, align 8, !tbaa !14
  %348 = call i64 @fwrite(ptr noundef nonnull @print_matching_items.line_batch_buffer, i64 noundef 1, i64 noundef %.0355.lcssa, ptr noundef %347)
  %.not437 = icmp eq i64 %348, %.0355.lcssa
  br i1 %.not437, label %._crit_edge533.thread, label %349

349:                                              ; preds = %346
  call void @perror(ptr noundef nonnull @.str.30) #13
  br label %._crit_edge533.thread

._crit_edge533.thread:                            ; preds = %210, %346, %349, %._crit_edge533
  %.5.lcssa589 = phi i64 [ %.5.lcssa, %346 ], [ %.5.lcssa, %349 ], [ %.5.lcssa, %._crit_edge533 ], [ 0, %210 ]
  call void @llvm.lifetime.end.p0(i64 4160, ptr nonnull %13) #11
  br label %350

350:                                              ; preds = %._crit_edge533.thread, %199
  %.9 = phi i64 [ %.0311504, %199 ], [ %.5.lcssa589, %._crit_edge533.thread ]
  %351 = load ptr, ptr @stdout, align 8, !tbaa !14
  %352 = call i32 @fflush(ptr noundef %351)
  %353 = load ptr, ptr %6, align 8, !tbaa !14
  call void @free(ptr noundef %353) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #11
  br label %354

354:                                              ; preds = %350, %26
  %.0 = phi i64 [ %.9, %350 ], [ 0, %26 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #11
  br label %355

355:                                              ; preds = %5, %16, %354
  %.1 = phi i64 [ %.0, %354 ], [ 0, %16 ], [ 0, %5 ]
  ret i64 %.1
}

; Function Attrs: nofree nounwind
declare noundef i32 @setvbuf(ptr nocapture noundef, ptr noundef, i32 noundef, i64 noundef) local_unnamed_addr #2

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

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

; Function Attrs: nofree nounwind
declare noundef i32 @snprintf(ptr noalias nocapture noundef writeonly, i64 noundef, ptr nocapture noundef readonly, ...) local_unnamed_addr #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 #7

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

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @safe_append_to_batch(ptr noundef, ptr noundef, ptr noundef, i64 noundef, ptr noundef, i64 noundef) local_unnamed_addr #8

; Function Attrs: nounwind uwtable
declare hidden zeroext i1 @ensure_line_buffer_capacity(ptr noundef, ptr noundef, i64 noundef, i64 noundef) local_unnamed_addr #4

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

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

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

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

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

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #2 = { 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 #3 = { 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 #4 = { 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 #5 = { 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 #6 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #7 = { 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 #8 = { 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 #9 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #10 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #11 = { nounwind }
attributes #12 = { nounwind allocsize(0) }
attributes #13 = { cold }
attributes #14 = { nounwind willreturn memory(read) }
attributes #15 = { cold nounwind }

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

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


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