; LLVM IR from musetronstar/tagd :: tagl/src (lemon)

; 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.pstate = type { ptr, i32, i32, ptr, ptr, i32, ptr, ptr, ptr, ptr, i32, [1000 x ptr], [1000 x ptr], ptr, ptr, ptr, i32, ptr, i32, i32, ptr, ptr }
%struct.lemon = type { ptr, ptr, ptr, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, ptr, i32, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i32, i32, i32, i32, i32, i32, i32, ptr }

@.str.78 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.79 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.80 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.81 = external hidden unnamed_addr constant [41 x i8], align 1
@.str.82 = external hidden unnamed_addr constant [75 x i8], align 1
@.str.83 = external hidden unnamed_addr constant [75 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
declare void @free(ptr noundef) #1

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

; Function Attrs: nounwind uwtable
declare dso_local void @ErrorMsg(ptr noundef, i32 noundef, ptr noundef, ...) #3

; Function Attrs: nounwind uwtable
define dso_local void @Parse(ptr noundef %0) #3 {
  %2 = alloca ptr, align 8
  %3 = alloca %struct.pstate, align 8
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  store ptr %0, ptr %2, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16144, ptr %3) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %4) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %5) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #7
  store i32 0, ptr %11, align 4, !tbaa !9
  call void @llvm.memset.p0.i64(ptr align 8 %3, i8 0, i64 16144, i1 false)
  %17 = load ptr, ptr %2, align 8, !tbaa !5
  %18 = getelementptr inbounds %struct.pstate, ptr %3, i32 0, i32 4
  store ptr %17, ptr %18, align 8, !tbaa !11
  %19 = load ptr, ptr %2, align 8, !tbaa !5
  %20 = getelementptr inbounds %struct.lemon, ptr %19, i32 0, i32 34
  %21 = load ptr, ptr %20, align 8, !tbaa !13
  %22 = getelementptr inbounds %struct.pstate, ptr %3, i32 0, i32 0
  store ptr %21, ptr %22, align 8, !tbaa !15
  %23 = getelementptr inbounds %struct.pstate, ptr %3, i32 0, i32 2
  store i32 0, ptr %23, align 4, !tbaa !16
  %24 = getelementptr inbounds %struct.pstate, ptr %3, i32 0, i32 5
  store i32 0, ptr %24, align 8, !tbaa !17
  %25 = getelementptr inbounds %struct.pstate, ptr %3, i32 0, i32 0
  %26 = load ptr, ptr %25, align 8, !tbaa !15
  %27 = call noalias ptr @fopen(ptr noundef %26, ptr noundef @.str.78)
  store ptr %27, ptr %4, align 8, !tbaa !5
  %28 = load ptr, ptr %4, align 8, !tbaa !5
  %29 = icmp eq ptr %28, null
  br i1 %29, label %30, label %37

30:                                               ; preds = %1
  %31 = getelementptr inbounds %struct.pstate, ptr %3, i32 0, i32 0
  %32 = load ptr, ptr %31, align 8, !tbaa !15
  call void (ptr, i32, ptr, ...) @ErrorMsg(ptr noundef %32, i32 noundef 0, ptr noundef @.str.79)
  %33 = load ptr, ptr %2, align 8, !tbaa !5
  %34 = getelementptr inbounds %struct.lemon, ptr %33, i32 0, i32 16
  %35 = load i32, ptr %34, align 8, !tbaa !18
  %36 = add nsw i32 %35, 1
  store i32 %36, ptr %34, align 8, !tbaa !18
  store i32 1, ptr %12, align 4
  br label %550

37:                                               ; preds = %1
  %38 = load ptr, ptr %4, align 8, !tbaa !5
  %39 = call i32 @fseek(ptr noundef %38, i64 noundef 0, i32 noundef 2)
  %40 = load ptr, ptr %4, align 8, !tbaa !5
  %41 = call i64 @ftell(ptr noundef %40)
  %42 = trunc i64 %41 to i32
  store i32 %42, ptr %6, align 4, !tbaa !9
  %43 = load ptr, ptr %4, align 8, !tbaa !5
  call void @rewind(ptr noundef %43)
  %44 = load i32, ptr %6, align 4, !tbaa !9
  %45 = add i32 %44, 1
  %46 = zext i32 %45 to i64
  %47 = call noalias ptr @malloc(i64 noundef %46) #8
  store ptr %47, ptr %5, align 8, !tbaa !5
  %48 = load i32, ptr %6, align 4, !tbaa !9
  %49 = icmp ugt i32 %48, 100000000
  br i1 %49, label %53, label %50

50:                                               ; preds = %37
  %51 = load ptr, ptr %5, align 8, !tbaa !5
  %52 = icmp eq ptr %51, null
  br i1 %52, label %53, label %63

53:                                               ; preds = %50, %37
  %54 = getelementptr inbounds %struct.pstate, ptr %3, i32 0, i32 0
  %55 = load ptr, ptr %54, align 8, !tbaa !15
  call void (ptr, i32, ptr, ...) @ErrorMsg(ptr noundef %55, i32 noundef 0, ptr noundef @.str.80)
  %56 = load ptr, ptr %5, align 8, !tbaa !5
  call void @free(ptr noundef %56) #7
  %57 = load ptr, ptr %2, align 8, !tbaa !5
  %58 = getelementptr inbounds %struct.lemon, ptr %57, i32 0, i32 16
  %59 = load i32, ptr %58, align 8, !tbaa !18
  %60 = add nsw i32 %59, 1
  store i32 %60, ptr %58, align 8, !tbaa !18
  %61 = load ptr, ptr %4, align 8, !tbaa !5
  %62 = call i32 @fclose(ptr noundef %61)
  store i32 1, ptr %12, align 4
  br label %550

63:                                               ; preds = %50
  %64 = load ptr, ptr %5, align 8, !tbaa !5
  %65 = load i32, ptr %6, align 4, !tbaa !9
  %66 = zext i32 %65 to i64
  %67 = load ptr, ptr %4, align 8, !tbaa !5
  %68 = call i64 @fread(ptr noundef %64, i64 noundef 1, i64 noundef %66, ptr noundef %67)
  %69 = load i32, ptr %6, align 4, !tbaa !9
  %70 = zext i32 %69 to i64
  %71 = icmp ne i64 %68, %70
  br i1 %71, label %72, label %83

72:                                               ; preds = %63
  %73 = getelementptr inbounds %struct.pstate, ptr %3, i32 0, i32 0
  %74 = load ptr, ptr %73, align 8, !tbaa !15
  %75 = load i32, ptr %6, align 4, !tbaa !9
  call void (ptr, i32, ptr, ...) @ErrorMsg(ptr noundef %74, i32 noundef 0, ptr noundef @.str.81, i32 noundef %75)
  %76 = load ptr, ptr %5, align 8, !tbaa !5
  call void @free(ptr noundef %76) #7
  %77 = load ptr, ptr %2, align 8, !tbaa !5
  %78 = getelementptr inbounds %struct.lemon, ptr %77, i32 0, i32 16
  %79 = load i32, ptr %78, align 8, !tbaa !18
  %80 = add nsw i32 %79, 1
  store i32 %80, ptr %78, align 8, !tbaa !18
  %81 = load ptr, ptr %4, align 8, !tbaa !5
  %82 = call i32 @fclose(ptr noundef %81)
  store i32 1, ptr %12, align 4
  br label %550

83:                                               ; preds = %63
  %84 = load ptr, ptr %4, align 8, !tbaa !5
  %85 = call i32 @fclose(ptr noundef %84)
  %86 = load ptr, ptr %5, align 8, !tbaa !5
  %87 = load i32, ptr %6, align 4, !tbaa !9
  %88 = zext i32 %87 to i64
  %89 = getelementptr inbounds i8, ptr %86, i64 %88
  store i8 0, ptr %89, align 1, !tbaa !19
  %90 = load ptr, ptr %5, align 8, !tbaa !5
  call void @preprocess_input(ptr noundef %90)
  store i32 1, ptr %7, align 4, !tbaa !9
  %91 = load ptr, ptr %5, align 8, !tbaa !5
  store ptr %91, ptr %9, align 8, !tbaa !5
  br label %92

92:                                               ; preds = %531, %189, %143, %115, %83
  %93 = load ptr, ptr %9, align 8, !tbaa !5
  %94 = load i8, ptr %93, align 1, !tbaa !19
  %95 = sext i8 %94 to i32
  store i32 %95, ptr %8, align 4, !tbaa !9
  %96 = icmp ne i32 %95, 0
  br i1 %96, label %97, label %540

97:                                               ; preds = %92
  %98 = load i32, ptr %8, align 4, !tbaa !9
  %99 = icmp eq i32 %98, 10
  br i1 %99, label %100, label %103

100:                                              ; preds = %97
  %101 = load i32, ptr %7, align 4, !tbaa !9
  %102 = add nsw i32 %101, 1
  store i32 %102, ptr %7, align 4, !tbaa !9
  br label %103

103:                                              ; preds = %100, %97
  %104 = call ptr @__ctype_b_loc() #9
  %105 = load ptr, ptr %104, align 8, !tbaa !5
  %106 = load i32, ptr %8, align 4, !tbaa !9
  %107 = trunc i32 %106 to i8
  %108 = zext i8 %107 to i32
  %109 = sext i32 %108 to i64
  %110 = getelementptr inbounds i16, ptr %105, i64 %109
  %111 = load i16, ptr %110, align 2, !tbaa !20
  %112 = zext i16 %111 to i32
  %113 = and i32 %112, 8192
  %114 = icmp ne i32 %113, 0
  br i1 %114, label %115, label %118

115:                                              ; preds = %103
  %116 = load ptr, ptr %9, align 8, !tbaa !5
  %117 = getelementptr inbounds i8, ptr %116, i32 1
  store ptr %117, ptr %9, align 8, !tbaa !5
  br label %92, !llvm.loop !22

118:                                              ; preds = %103
  %119 = load i32, ptr %8, align 4, !tbaa !9
  %120 = icmp eq i32 %119, 47
  br i1 %120, label %121, label %144

121:                                              ; preds = %118
  %122 = load ptr, ptr %9, align 8, !tbaa !5
  %123 = getelementptr inbounds i8, ptr %122, i64 1
  %124 = load i8, ptr %123, align 1, !tbaa !19
  %125 = sext i8 %124 to i32
  %126 = icmp eq i32 %125, 47
  br i1 %126, label %127, label %144

127:                                              ; preds = %121
  %128 = load ptr, ptr %9, align 8, !tbaa !5
  %129 = getelementptr inbounds i8, ptr %128, i64 2
  store ptr %129, ptr %9, align 8, !tbaa !5
  br label %130

130:                                              ; preds = %140, %127
  %131 = load ptr, ptr %9, align 8, !tbaa !5
  %132 = load i8, ptr %131, align 1, !tbaa !19
  %133 = sext i8 %132 to i32
  store i32 %133, ptr %8, align 4, !tbaa !9
  %134 = icmp ne i32 %133, 0
  br i1 %134, label %135, label %138

135:                                              ; preds = %130
  %136 = load i32, ptr %8, align 4, !tbaa !9
  %137 = icmp ne i32 %136, 10
  br label %138

138:                                              ; preds = %135, %130
  %139 = phi i1 [ false, %130 ], [ %137, %135 ]
  br i1 %139, label %140, label %143

140:                                              ; preds = %138
  %141 = load ptr, ptr %9, align 8, !tbaa !5
  %142 = getelementptr inbounds i8, ptr %141, i32 1
  store ptr %142, ptr %9, align 8, !tbaa !5
  br label %130, !llvm.loop !24

143:                                              ; preds = %138
  br label %92, !llvm.loop !22

144:                                              ; preds = %121, %118
  %145 = load i32, ptr %8, align 4, !tbaa !9
  %146 = icmp eq i32 %145, 47
  br i1 %146, label %147, label %190

147:                                              ; preds = %144
  %148 = load ptr, ptr %9, align 8, !tbaa !5
  %149 = getelementptr inbounds i8, ptr %148, i64 1
  %150 = load i8, ptr %149, align 1, !tbaa !19
  %151 = sext i8 %150 to i32
  %152 = icmp eq i32 %151, 42
  br i1 %152, label %153, label %190

153:                                              ; preds = %147
  %154 = load ptr, ptr %9, align 8, !tbaa !5
  %155 = getelementptr inbounds i8, ptr %154, i64 2
  store ptr %155, ptr %9, align 8, !tbaa !5
  br label %156

156:                                              ; preds = %180, %153
  %157 = load ptr, ptr %9, align 8, !tbaa !5
  %158 = load i8, ptr %157, align 1, !tbaa !19
  %159 = sext i8 %158 to i32
  store i32 %159, ptr %8, align 4, !tbaa !9
  %160 = icmp ne i32 %159, 0
  br i1 %160, label %161, label %172

161:                                              ; preds = %156
  %162 = load i32, ptr %8, align 4, !tbaa !9
  %163 = icmp ne i32 %162, 47
  br i1 %163, label %170, label %164

164:                                              ; preds = %161
  %165 = load ptr, ptr %9, align 8, !tbaa !5
  %166 = getelementptr inbounds i8, ptr %165, i64 -1
  %167 = load i8, ptr %166, align 1, !tbaa !19
  %168 = sext i8 %167 to i32
  %169 = icmp ne i32 %168, 42
  br label %170

170:                                              ; preds = %164, %161
  %171 = phi i1 [ true, %161 ], [ %169, %164 ]
  br label %172

172:                                              ; preds = %170, %156
  %173 = phi i1 [ false, %156 ], [ %171, %170 ]
  br i1 %173, label %174, label %183

174:                                              ; preds = %172
  %175 = load i32, ptr %8, align 4, !tbaa !9
  %176 = icmp eq i32 %175, 10
  br i1 %176, label %177, label %180

177:                                              ; preds = %174
  %178 = load i32, ptr %7, align 4, !tbaa !9
  %179 = add nsw i32 %178, 1
  store i32 %179, ptr %7, align 4, !tbaa !9
  br label %180

180:                                              ; preds = %177, %174
  %181 = load ptr, ptr %9, align 8, !tbaa !5
  %182 = getelementptr inbounds i8, ptr %181, i32 1
  store ptr %182, ptr %9, align 8, !tbaa !5
  br label %156, !llvm.loop !25

183:                                              ; preds = %172
  %184 = load i32, ptr %8, align 4, !tbaa !9
  %185 = icmp ne i32 %184, 0
  br i1 %185, label %186, label %189

186:                                              ; preds = %183
  %187 = load ptr, ptr %9, align 8, !tbaa !5
  %188 = getelementptr inbounds i8, ptr %187, i32 1
  store ptr %188, ptr %9, align 8, !tbaa !5
  br label %189

189:                                              ; preds = %186, %183
  br label %92, !llvm.loop !22

190:                                              ; preds = %147, %144
  %191 = load ptr, ptr %9, align 8, !tbaa !5
  %192 = getelementptr inbounds %struct.pstate, ptr %3, i32 0, i32 3
  store ptr %191, ptr %192, align 8, !tbaa !26
  %193 = load i32, ptr %7, align 4, !tbaa !9
  %194 = getelementptr inbounds %struct.pstate, ptr %3, i32 0, i32 1
  store i32 %193, ptr %194, align 8, !tbaa !27
  %195 = load i32, ptr %8, align 4, !tbaa !9
  %196 = icmp eq i32 %195, 34
  br i1 %196, label %197, label %234

197:                                              ; preds = %190
  %198 = load ptr, ptr %9, align 8, !tbaa !5
  %199 = getelementptr inbounds i8, ptr %198, i32 1
  store ptr %199, ptr %9, align 8, !tbaa !5
  br label %200

200:                                              ; preds = %216, %197
  %201 = load ptr, ptr %9, align 8, !tbaa !5
  %202 = load i8, ptr %201, align 1, !tbaa !19
  %203 = sext i8 %202 to i32
  store i32 %203, ptr %8, align 4, !tbaa !9
  %204 = icmp ne i32 %203, 0
  br i1 %204, label %205, label %208

205:                                              ; preds = %200
  %206 = load i32, ptr %8, align 4, !tbaa !9
  %207 = icmp ne i32 %206, 34
  br label %208

208:                                              ; preds = %205, %200
  %209 = phi i1 [ false, %200 ], [ %207, %205 ]
  br i1 %209, label %210, label %219

210:                                              ; preds = %208
  %211 = load i32, ptr %8, align 4, !tbaa !9
  %212 = icmp eq i32 %211, 10
  br i1 %212, label %213, label %216

213:                                              ; preds = %210
  %214 = load i32, ptr %7, align 4, !tbaa !9
  %215 = add nsw i32 %214, 1
  store i32 %215, ptr %7, align 4, !tbaa !9
  br label %216

216:                                              ; preds = %213, %210
  %217 = load ptr, ptr %9, align 8, !tbaa !5
  %218 = getelementptr inbounds i8, ptr %217, i32 1
  store ptr %218, ptr %9, align 8, !tbaa !5
  br label %200, !llvm.loop !28

219:                                              ; preds = %208
  %220 = load i32, ptr %8, align 4, !tbaa !9
  %221 = icmp eq i32 %220, 0
  br i1 %221, label %222, label %230

222:                                              ; preds = %219
  %223 = getelementptr inbounds %struct.pstate, ptr %3, i32 0, i32 0
  %224 = load ptr, ptr %223, align 8, !tbaa !15
  %225 = load i32, ptr %11, align 4, !tbaa !9
  call void (ptr, i32, ptr, ...) @ErrorMsg(ptr noundef %224, i32 noundef %225, ptr noundef @.str.82)
  %226 = getelementptr inbounds %struct.pstate, ptr %3, i32 0, i32 2
  %227 = load i32, ptr %226, align 4, !tbaa !16
  %228 = add nsw i32 %227, 1
  store i32 %228, ptr %226, align 4, !tbaa !16
  %229 = load ptr, ptr %9, align 8, !tbaa !5
  store ptr %229, ptr %10, align 8, !tbaa !5
  br label %233

230:                                              ; preds = %219
  %231 = load ptr, ptr %9, align 8, !tbaa !5
  %232 = getelementptr inbounds i8, ptr %231, i64 1
  store ptr %232, ptr %10, align 8, !tbaa !5
  br label %233

233:                                              ; preds = %230, %222
  br label %531

234:                                              ; preds = %190
  %235 = load i32, ptr %8, align 4, !tbaa !9
  %236 = icmp eq i32 %235, 123
  br i1 %236, label %237, label %411

237:                                              ; preds = %234
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #7
  %238 = load ptr, ptr %9, align 8, !tbaa !5
  %239 = getelementptr inbounds i8, ptr %238, i32 1
  store ptr %239, ptr %9, align 8, !tbaa !5
  store i32 1, ptr %13, align 4, !tbaa !9
  br label %240

240:                                              ; preds = %392, %237
  %241 = load ptr, ptr %9, align 8, !tbaa !5
  %242 = load i8, ptr %241, align 1, !tbaa !19
  %243 = sext i8 %242 to i32
  store i32 %243, ptr %8, align 4, !tbaa !9
  %244 = icmp ne i32 %243, 0
  br i1 %244, label %245, label %253

245:                                              ; preds = %240
  %246 = load i32, ptr %13, align 4, !tbaa !9
  %247 = icmp sgt i32 %246, 1
  br i1 %247, label %251, label %248

248:                                              ; preds = %245
  %249 = load i32, ptr %8, align 4, !tbaa !9
  %250 = icmp ne i32 %249, 125
  br label %251

251:                                              ; preds = %248, %245
  %252 = phi i1 [ true, %245 ], [ %250, %248 ]
  br label %253

253:                                              ; preds = %251, %240
  %254 = phi i1 [ false, %240 ], [ %252, %251 ]
  br i1 %254, label %255, label %395

255:                                              ; preds = %253
  %256 = load i32, ptr %8, align 4, !tbaa !9
  %257 = icmp eq i32 %256, 10
  br i1 %257, label %258, label %261

258:                                              ; preds = %255
  %259 = load i32, ptr %7, align 4, !tbaa !9
  %260 = add nsw i32 %259, 1
  store i32 %260, ptr %7, align 4, !tbaa !9
  br label %391

261:                                              ; preds = %255
  %262 = load i32, ptr %8, align 4, !tbaa !9
  %263 = icmp eq i32 %262, 123
  br i1 %263, label %264, label %267

264:                                              ; preds = %261
  %265 = load i32, ptr %13, align 4, !tbaa !9
  %266 = add nsw i32 %265, 1
  store i32 %266, ptr %13, align 4, !tbaa !9
  br label %390

267:                                              ; preds = %261
  %268 = load i32, ptr %8, align 4, !tbaa !9
  %269 = icmp eq i32 %268, 125
  br i1 %269, label %270, label %273

270:                                              ; preds = %267
  %271 = load i32, ptr %13, align 4, !tbaa !9
  %272 = add nsw i32 %271, -1
  store i32 %272, ptr %13, align 4, !tbaa !9
  br label %389

273:                                              ; preds = %267
  %274 = load i32, ptr %8, align 4, !tbaa !9
  %275 = icmp eq i32 %274, 47
  br i1 %275, label %276, label %311

276:                                              ; preds = %273
  %277 = load ptr, ptr %9, align 8, !tbaa !5
  %278 = getelementptr inbounds i8, ptr %277, i64 1
  %279 = load i8, ptr %278, align 1, !tbaa !19
  %280 = sext i8 %279 to i32
  %281 = icmp eq i32 %280, 42
  br i1 %281, label %282, label %311

282:                                              ; preds = %276
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #7
  %283 = load ptr, ptr %9, align 8, !tbaa !5
  %284 = getelementptr inbounds i8, ptr %283, i64 2
  store ptr %284, ptr %9, align 8, !tbaa !5
  store i32 0, ptr %14, align 4, !tbaa !9
  br label %285

285:                                              ; preds = %306, %282
  %286 = load ptr, ptr %9, align 8, !tbaa !5
  %287 = load i8, ptr %286, align 1, !tbaa !19
  %288 = sext i8 %287 to i32
  store i32 %288, ptr %8, align 4, !tbaa !9
  %289 = icmp ne i32 %288, 0
  br i1 %289, label %290, label %298

290:                                              ; preds = %285
  %291 = load i32, ptr %8, align 4, !tbaa !9
  %292 = icmp ne i32 %291, 47
  br i1 %292, label %296, label %293

293:                                              ; preds = %290
  %294 = load i32, ptr %14, align 4, !tbaa !9
  %295 = icmp ne i32 %294, 42
  br label %296

296:                                              ; preds = %293, %290
  %297 = phi i1 [ true, %290 ], [ %295, %293 ]
  br label %298

298:                                              ; preds = %296, %285
  %299 = phi i1 [ false, %285 ], [ %297, %296 ]
  br i1 %299, label %300, label %310

300:                                              ; preds = %298
  %301 = load i32, ptr %8, align 4, !tbaa !9
  %302 = icmp eq i32 %301, 10
  br i1 %302, label %303, label %306

303:                                              ; preds = %300
  %304 = load i32, ptr %7, align 4, !tbaa !9
  %305 = add nsw i32 %304, 1
  store i32 %305, ptr %7, align 4, !tbaa !9
  br label %306

306:                                              ; preds = %303, %300
  %307 = load i32, ptr %8, align 4, !tbaa !9
  store i32 %307, ptr %14, align 4, !tbaa !9
  %308 = load ptr, ptr %9, align 8, !tbaa !5
  %309 = getelementptr inbounds i8, ptr %308, i32 1
  store ptr %309, ptr %9, align 8, !tbaa !5
  br label %285, !llvm.loop !29

310:                                              ; preds = %298
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #7
  br label %388

311:                                              ; preds = %276, %273
  %312 = load i32, ptr %8, align 4, !tbaa !9
  %313 = icmp eq i32 %312, 47
  br i1 %313, label %314, label %343

314:                                              ; preds = %311
  %315 = load ptr, ptr %9, align 8, !tbaa !5
  %316 = getelementptr inbounds i8, ptr %315, i64 1
  %317 = load i8, ptr %316, align 1, !tbaa !19
  %318 = sext i8 %317 to i32
  %319 = icmp eq i32 %318, 47
  br i1 %319, label %320, label %343

320:                                              ; preds = %314
  %321 = load ptr, ptr %9, align 8, !tbaa !5
  %322 = getelementptr inbounds i8, ptr %321, i64 2
  store ptr %322, ptr %9, align 8, !tbaa !5
  br label %323

323:                                              ; preds = %333, %320
  %324 = load ptr, ptr %9, align 8, !tbaa !5
  %325 = load i8, ptr %324, align 1, !tbaa !19
  %326 = sext i8 %325 to i32
  store i32 %326, ptr %8, align 4, !tbaa !9
  %327 = icmp ne i32 %326, 0
  br i1 %327, label %328, label %331

328:                                              ; preds = %323
  %329 = load i32, ptr %8, align 4, !tbaa !9
  %330 = icmp ne i32 %329, 10
  br label %331

331:                                              ; preds = %328, %323
  %332 = phi i1 [ false, %323 ], [ %330, %328 ]
  br i1 %332, label %333, label %336

333:                                              ; preds = %331
  %334 = load ptr, ptr %9, align 8, !tbaa !5
  %335 = getelementptr inbounds i8, ptr %334, i32 1
  store ptr %335, ptr %9, align 8, !tbaa !5
  br label %323, !llvm.loop !30

336:                                              ; preds = %331
  %337 = load i32, ptr %8, align 4, !tbaa !9
  %338 = icmp ne i32 %337, 0
  br i1 %338, label %339, label %342

339:                                              ; preds = %336
  %340 = load i32, ptr %7, align 4, !tbaa !9
  %341 = add nsw i32 %340, 1
  store i32 %341, ptr %7, align 4, !tbaa !9
  br label %342

342:                                              ; preds = %339, %336
  br label %387

343:                                              ; preds = %314, %311
  %344 = load i32, ptr %8, align 4, !tbaa !9
  %345 = icmp eq i32 %344, 39
  br i1 %345, label %349, label %346

346:                                              ; preds = %343
  %347 = load i32, ptr %8, align 4, !tbaa !9
  %348 = icmp eq i32 %347, 34
  br i1 %348, label %349, label %386

349:                                              ; preds = %346, %343
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #7
  %350 = load i32, ptr %8, align 4, !tbaa !9
  store i32 %350, ptr %15, align 4, !tbaa !9
  store i32 0, ptr %16, align 4, !tbaa !9
  %351 = load ptr, ptr %9, align 8, !tbaa !5
  %352 = getelementptr inbounds i8, ptr %351, i32 1
  store ptr %352, ptr %9, align 8, !tbaa !5
  br label %353

353:                                              ; preds = %382, %349
  %354 = load ptr, ptr %9, align 8, !tbaa !5
  %355 = load i8, ptr %354, align 1, !tbaa !19
  %356 = sext i8 %355 to i32
  store i32 %356, ptr %8, align 4, !tbaa !9
  %357 = icmp ne i32 %356, 0
  br i1 %357, label %358, label %367

358:                                              ; preds = %353
  %359 = load i32, ptr %8, align 4, !tbaa !9
  %360 = load i32, ptr %15, align 4, !tbaa !9
  %361 = icmp ne i32 %359, %360
  br i1 %361, label %365, label %362

362:                                              ; preds = %358
  %363 = load i32, ptr %16, align 4, !tbaa !9
  %364 = icmp eq i32 %363, 92
  br label %365

365:                                              ; preds = %362, %358
  %366 = phi i1 [ true, %358 ], [ %364, %362 ]
  br label %367

367:                                              ; preds = %365, %353
  %368 = phi i1 [ false, %353 ], [ %366, %365 ]
  br i1 %368, label %369, label %385

369:                                              ; preds = %367
  %370 = load i32, ptr %8, align 4, !tbaa !9
  %371 = icmp eq i32 %370, 10
  br i1 %371, label %372, label %375

372:                                              ; preds = %369
  %373 = load i32, ptr %7, align 4, !tbaa !9
  %374 = add nsw i32 %373, 1
  store i32 %374, ptr %7, align 4, !tbaa !9
  br label %375

375:                                              ; preds = %372, %369
  %376 = load i32, ptr %16, align 4, !tbaa !9
  %377 = icmp eq i32 %376, 92
  br i1 %377, label %378, label %379

378:                                              ; preds = %375
  store i32 0, ptr %16, align 4, !tbaa !9
  br label %381

379:                                              ; preds = %375
  %380 = load i32, ptr %8, align 4, !tbaa !9
  store i32 %380, ptr %16, align 4, !tbaa !9
  br label %381

381:                                              ; preds = %379, %378
  br label %382

382:                                              ; preds = %381
  %383 = load ptr, ptr %9, align 8, !tbaa !5
  %384 = getelementptr inbounds i8, ptr %383, i32 1
  store ptr %384, ptr %9, align 8, !tbaa !5
  br label %353, !llvm.loop !31

385:                                              ; preds = %367
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #7
  br label %386

386:                                              ; preds = %385, %346
  br label %387

387:                                              ; preds = %386, %342
  br label %388

388:                                              ; preds = %387, %310
  br label %389

389:                                              ; preds = %388, %270
  br label %390

390:                                              ; preds = %389, %264
  br label %391

391:                                              ; preds = %390, %258
  br label %392

392:                                              ; preds = %391
  %393 = load ptr, ptr %9, align 8, !tbaa !5
  %394 = getelementptr inbounds i8, ptr %393, i32 1
  store ptr %394, ptr %9, align 8, !tbaa !5
  br label %240, !llvm.loop !32

395:                                              ; preds = %253
  %396 = load i32, ptr %8, align 4, !tbaa !9
  %397 = icmp eq i32 %396, 0
  br i1 %397, label %398, label %407

398:                                              ; preds = %395
  %399 = getelementptr inbounds %struct.pstate, ptr %3, i32 0, i32 0
  %400 = load ptr, ptr %399, align 8, !tbaa !15
  %401 = getelementptr inbounds %struct.pstate, ptr %3, i32 0, i32 1
  %402 = load i32, ptr %401, align 8, !tbaa !27
  call void (ptr, i32, ptr, ...) @ErrorMsg(ptr noundef %400, i32 noundef %402, ptr noundef @.str.83)
  %403 = getelementptr inbounds %struct.pstate, ptr %3, i32 0, i32 2
  %404 = load i32, ptr %403, align 4, !tbaa !16
  %405 = add nsw i32 %404, 1
  store i32 %405, ptr %403, align 4, !tbaa !16
  %406 = load ptr, ptr %9, align 8, !tbaa !5
  store ptr %406, ptr %10, align 8, !tbaa !5
  br label %410

407:                                              ; preds = %395
  %408 = load ptr, ptr %9, align 8, !tbaa !5
  %409 = getelementptr inbounds i8, ptr %408, i64 1
  store ptr %409, ptr %10, align 8, !tbaa !5
  br label %410

410:                                              ; preds = %407, %398
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #7
  br label %530

411:                                              ; preds = %234
  %412 = call ptr @__ctype_b_loc() #9
  %413 = load ptr, ptr %412, align 8, !tbaa !5
  %414 = load i32, ptr %8, align 4, !tbaa !9
  %415 = trunc i32 %414 to i8
  %416 = zext i8 %415 to i32
  %417 = sext i32 %416 to i64
  %418 = getelementptr inbounds i16, ptr %413, i64 %417
  %419 = load i16, ptr %418, align 2, !tbaa !20
  %420 = zext i16 %419 to i32
  %421 = and i32 %420, 8
  %422 = icmp ne i32 %421, 0
  br i1 %422, label %423, label %453

423:                                              ; preds = %411
  br label %424

424:                                              ; preds = %448, %423
  %425 = load ptr, ptr %9, align 8, !tbaa !5
  %426 = load i8, ptr %425, align 1, !tbaa !19
  %427 = sext i8 %426 to i32
  store i32 %427, ptr %8, align 4, !tbaa !9
  %428 = icmp ne i32 %427, 0
  br i1 %428, label %429, label %446

429:                                              ; preds = %424
  %430 = call ptr @__ctype_b_loc() #9
  %431 = load ptr, ptr %430, align 8, !tbaa !5
  %432 = load i32, ptr %8, align 4, !tbaa !9
  %433 = trunc i32 %432 to i8
  %434 = zext i8 %433 to i32
  %435 = sext i32 %434 to i64
  %436 = getelementptr inbounds i16, ptr %431, i64 %435
  %437 = load i16, ptr %436, align 2, !tbaa !20
  %438 = zext i16 %437 to i32
  %439 = and i32 %438, 8
  %440 = icmp ne i32 %439, 0
  br i1 %440, label %444, label %441

441:                                              ; preds = %429
  %442 = load i32, ptr %8, align 4, !tbaa !9
  %443 = icmp eq i32 %442, 95
  br label %444

444:                                              ; preds = %441, %429
  %445 = phi i1 [ true, %429 ], [ %443, %441 ]
  br label %446

446:                                              ; preds = %444, %424
  %447 = phi i1 [ false, %424 ], [ %445, %444 ]
  br i1 %447, label %448, label %451

448:                                              ; preds = %446
  %449 = load ptr, ptr %9, align 8, !tbaa !5
  %450 = getelementptr inbounds i8, ptr %449, i32 1
  store ptr %450, ptr %9, align 8, !tbaa !5
  br label %424, !llvm.loop !33

451:                                              ; preds = %446
  %452 = load ptr, ptr %9, align 8, !tbaa !5
  store ptr %452, ptr %10, align 8, !tbaa !5
  br label %529

453:                                              ; preds = %411
  %454 = load i32, ptr %8, align 4, !tbaa !9
  %455 = icmp eq i32 %454, 58
  br i1 %455, label %456, label %472

456:                                              ; preds = %453
  %457 = load ptr, ptr %9, align 8, !tbaa !5
  %458 = getelementptr inbounds i8, ptr %457, i64 1
  %459 = load i8, ptr %458, align 1, !tbaa !19
  %460 = sext i8 %459 to i32
  %461 = icmp eq i32 %460, 58
  br i1 %461, label %462, label %472

462:                                              ; preds = %456
  %463 = load ptr, ptr %9, align 8, !tbaa !5
  %464 = getelementptr inbounds i8, ptr %463, i64 2
  %465 = load i8, ptr %464, align 1, !tbaa !19
  %466 = sext i8 %465 to i32
  %467 = icmp eq i32 %466, 61
  br i1 %467, label %468, label %472

468:                                              ; preds = %462
  %469 = load ptr, ptr %9, align 8, !tbaa !5
  %470 = getelementptr inbounds i8, ptr %469, i64 3
  store ptr %470, ptr %9, align 8, !tbaa !5
  %471 = load ptr, ptr %9, align 8, !tbaa !5
  store ptr %471, ptr %10, align 8, !tbaa !5
  br label %528

472:                                              ; preds = %462, %456, %453
  %473 = load i32, ptr %8, align 4, !tbaa !9
  %474 = icmp eq i32 %473, 47
  br i1 %474, label %478, label %475

475:                                              ; preds = %472
  %476 = load i32, ptr %8, align 4, !tbaa !9
  %477 = icmp eq i32 %476, 124
  br i1 %477, label %478, label %523

478:                                              ; preds = %475, %472
  %479 = call ptr @__ctype_b_loc() #9
  %480 = load ptr, ptr %479, align 8, !tbaa !5
  %481 = load ptr, ptr %9, align 8, !tbaa !5
  %482 = getelementptr inbounds i8, ptr %481, i64 1
  %483 = load i8, ptr %482, align 1, !tbaa !19
  %484 = zext i8 %483 to i32
  %485 = sext i32 %484 to i64
  %486 = getelementptr inbounds i16, ptr %480, i64 %485
  %487 = load i16, ptr %486, align 2, !tbaa !20
  %488 = zext i16 %487 to i32
  %489 = and i32 %488, 1024
  %490 = icmp ne i32 %489, 0
  br i1 %490, label %491, label %523

491:                                              ; preds = %478
  %492 = load ptr, ptr %9, align 8, !tbaa !5
  %493 = getelementptr inbounds i8, ptr %492, i64 2
  store ptr %493, ptr %9, align 8, !tbaa !5
  br label %494

494:                                              ; preds = %518, %491
  %495 = load ptr, ptr %9, align 8, !tbaa !5
  %496 = load i8, ptr %495, align 1, !tbaa !19
  %497 = sext i8 %496 to i32
  store i32 %497, ptr %8, align 4, !tbaa !9
  %498 = icmp ne i32 %497, 0
  br i1 %498, label %499, label %516

499:                                              ; preds = %494
  %500 = call ptr @__ctype_b_loc() #9
  %501 = load ptr, ptr %500, align 8, !tbaa !5
  %502 = load i32, ptr %8, align 4, !tbaa !9
  %503 = trunc i32 %502 to i8
  %504 = zext i8 %503 to i32
  %505 = sext i32 %504 to i64
  %506 = getelementptr inbounds i16, ptr %501, i64 %505
  %507 = load i16, ptr %506, align 2, !tbaa !20
  %508 = zext i16 %507 to i32
  %509 = and i32 %508, 8
  %510 = icmp ne i32 %509, 0
  br i1 %510, label %514, label %511

511:                                              ; preds = %499
  %512 = load i32, ptr %8, align 4, !tbaa !9
  %513 = icmp eq i32 %512, 95
  br label %514

514:                                              ; preds = %511, %499
  %515 = phi i1 [ true, %499 ], [ %513, %511 ]
  br label %516

516:                                              ; preds = %514, %494
  %517 = phi i1 [ false, %494 ], [ %515, %514 ]
  br i1 %517, label %518, label %521

518:                                              ; preds = %516
  %519 = load ptr, ptr %9, align 8, !tbaa !5
  %520 = getelementptr inbounds i8, ptr %519, i32 1
  store ptr %520, ptr %9, align 8, !tbaa !5
  br label %494, !llvm.loop !34

521:                                              ; preds = %516
  %522 = load ptr, ptr %9, align 8, !tbaa !5
  store ptr %522, ptr %10, align 8, !tbaa !5
  br label %527

523:                                              ; preds = %478, %475
  %524 = load ptr, ptr %9, align 8, !tbaa !5
  %525 = getelementptr inbounds i8, ptr %524, i32 1
  store ptr %525, ptr %9, align 8, !tbaa !5
  %526 = load ptr, ptr %9, align 8, !tbaa !5
  store ptr %526, ptr %10, align 8, !tbaa !5
  br label %527

527:                                              ; preds = %523, %521
  br label %528

528:                                              ; preds = %527, %468
  br label %529

529:                                              ; preds = %528, %451
  br label %530

530:                                              ; preds = %529, %410
  br label %531

531:                                              ; preds = %530, %233
  %532 = load ptr, ptr %9, align 8, !tbaa !5
  %533 = load i8, ptr %532, align 1, !tbaa !19
  %534 = sext i8 %533 to i32
  store i32 %534, ptr %8, align 4, !tbaa !9
  %535 = load ptr, ptr %9, align 8, !tbaa !5
  store i8 0, ptr %535, align 1, !tbaa !19
  call void @parseonetoken(ptr noundef %3)
  %536 = load i32, ptr %8, align 4, !tbaa !9
  %537 = trunc i32 %536 to i8
  %538 = load ptr, ptr %9, align 8, !tbaa !5
  store i8 %537, ptr %538, align 1, !tbaa !19
  %539 = load ptr, ptr %10, align 8, !tbaa !5
  store ptr %539, ptr %9, align 8, !tbaa !5
  br label %92, !llvm.loop !22

540:                                              ; preds = %92
  %541 = load ptr, ptr %5, align 8, !tbaa !5
  call void @free(ptr noundef %541) #7
  %542 = getelementptr inbounds %struct.pstate, ptr %3, i32 0, i32 20
  %543 = load ptr, ptr %542, align 8, !tbaa !35
  %544 = load ptr, ptr %2, align 8, !tbaa !5
  %545 = getelementptr inbounds %struct.lemon, ptr %544, i32 0, i32 1
  store ptr %543, ptr %545, align 8, !tbaa !36
  %546 = getelementptr inbounds %struct.pstate, ptr %3, i32 0, i32 2
  %547 = load i32, ptr %546, align 4, !tbaa !16
  %548 = load ptr, ptr %2, align 8, !tbaa !5
  %549 = getelementptr inbounds %struct.lemon, ptr %548, i32 0, i32 16
  store i32 %547, ptr %549, align 8, !tbaa !18
  store i32 0, ptr %12, align 4
  br label %550

550:                                              ; preds = %540, %72, %53, %30
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %4) #7
  call void @llvm.lifetime.end.p0(i64 16144, ptr %3) #7
  %551 = load i32, ptr %12, align 4
  switch i32 %551, label %553 [
    i32 0, label %552
    i32 1, label %552
  ]

552:                                              ; preds = %550, %550
  ret void

553:                                              ; preds = %550
  unreachable
}

; Function Attrs: nounwind willreturn memory(none)
declare ptr @__ctype_b_loc() #4

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

declare i32 @fseek(ptr noundef, i64 noundef, i32 noundef) #5

declare i64 @ftell(ptr noundef) #5

declare void @rewind(ptr noundef) #5

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

declare i32 @fclose(ptr noundef) #5

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

; Function Attrs: nounwind uwtable
declare hidden void @preprocess_input(ptr noundef) #3

; Function Attrs: nounwind uwtable
declare hidden void @parseonetoken(ptr noundef) #3

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !6, i64 24}
!12 = !{!"pstate", !6, i64 0, !10, i64 8, !10, i64 12, !6, i64 16, !6, i64 24, !10, i64 32, !6, i64 40, !6, i64 48, !6, i64 56, !6, i64 64, !10, i64 72, !7, i64 80, !7, i64 8080, !6, i64 16080, !6, i64 16088, !6, i64 16096, !10, i64 16104, !6, i64 16112, !10, i64 16120, !10, i64 16124, !6, i64 16128, !6, i64 16136}
!13 = !{!14, !6, i64 224}
!14 = !{!"lemon", !6, i64 0, !6, i64 8, !6, i64 16, !10, i64 24, !10, i64 28, !10, i64 32, !10, i64 36, !10, i64 40, !10, i64 44, !10, i64 48, !10, i64 52, !10, i64 56, !10, i64 60, !10, i64 64, !10, i64 68, !6, i64 72, !10, i64 80, !6, i64 88, !6, i64 96, !6, i64 104, !6, i64 112, !6, i64 120, !6, i64 128, !6, i64 136, !6, i64 144, !6, i64 152, !6, i64 160, !6, i64 168, !6, i64 176, !6, i64 184, !6, i64 192, !6, i64 200, !6, i64 208, !6, i64 216, !6, i64 224, !6, i64 232, !6, i64 240, !10, i64 248, !10, i64 252, !10, i64 256, !10, i64 260, !10, i64 264, !10, i64 268, !10, i64 272, !6, i64 280}
!15 = !{!12, !6, i64 0}
!16 = !{!12, !10, i64 12}
!17 = !{!12, !10, i64 32}
!18 = !{!14, !10, i64 80}
!19 = !{!7, !7, i64 0}
!20 = !{!21, !21, i64 0}
!21 = !{!"short", !7, i64 0}
!22 = distinct !{!22, !23}
!23 = !{!"llvm.loop.mustprogress"}
!24 = distinct !{!24, !23}
!25 = distinct !{!25, !23}
!26 = !{!12, !6, i64 16}
!27 = !{!12, !10, i64 8}
!28 = distinct !{!28, !23}
!29 = distinct !{!29, !23}
!30 = distinct !{!30, !23}
!31 = distinct !{!31, !23}
!32 = distinct !{!32, !23}
!33 = distinct !{!33, !23}
!34 = distinct !{!34, !23}
!35 = !{!12, !6, i64 16128}
!36 = !{!14, !6, i64 8}


; 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.pstate = type { ptr, i32, i32, ptr, ptr, i32, ptr, ptr, ptr, ptr, i32, [1000 x ptr], [1000 x ptr], ptr, ptr, ptr, i32, ptr, i32, i32, ptr, ptr }

@.str.78 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.79 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.80 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.81 = external hidden unnamed_addr constant [41 x i8], align 1
@.str.82 = external hidden unnamed_addr constant [75 x i8], align 1
@.str.83 = external hidden unnamed_addr constant [75 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 nounwind willreturn allockind("free") memory(argmem: readwrite, inaccessiblemem: readwrite)
declare void @free(ptr allocptr nocapture noundef) local_unnamed_addr #1

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

; Function Attrs: nounwind uwtable
declare dso_local void @ErrorMsg(ptr noundef, i32 noundef, ptr noundef, ...) local_unnamed_addr #3

; Function Attrs: nounwind uwtable
define dso_local void @Parse(ptr noundef %0) local_unnamed_addr #3 {
  %2 = alloca %struct.pstate, align 8
  call void @llvm.lifetime.start.p0(i64 16144, ptr nonnull %2) #7
  %3 = getelementptr inbounds i8, ptr %2, i64 8
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16144) %3, i8 0, i64 16136, i1 false)
  %4 = getelementptr inbounds i8, ptr %2, i64 24
  store ptr %0, ptr %4, align 8, !tbaa !5
  %5 = getelementptr inbounds i8, ptr %0, i64 224
  %6 = load ptr, ptr %5, align 8, !tbaa !11
  store ptr %6, ptr %2, align 8, !tbaa !13
  %7 = getelementptr inbounds i8, ptr %2, i64 12
  %8 = getelementptr inbounds i8, ptr %2, i64 32
  store i32 0, ptr %8, align 8, !tbaa !14
  %9 = tail call noalias ptr @fopen(ptr noundef %6, ptr noundef nonnull @.str.78)
  %10 = icmp eq ptr %9, null
  br i1 %10, label %11, label %15

11:                                               ; preds = %1
  tail call void (ptr, i32, ptr, ...) @ErrorMsg(ptr noundef %6, i32 noundef 0, ptr noundef nonnull @.str.79)
  %12 = getelementptr inbounds i8, ptr %0, i64 80
  %13 = load i32, ptr %12, align 8, !tbaa !15
  %14 = add nsw i32 %13, 1
  store i32 %14, ptr %12, align 8, !tbaa !15
  br label %195

15:                                               ; preds = %1
  %16 = tail call i32 @fseek(ptr noundef nonnull %9, i64 noundef 0, i32 noundef 2)
  %17 = tail call i64 @ftell(ptr noundef nonnull %9)
  %18 = trunc i64 %17 to i32
  tail call void @rewind(ptr noundef nonnull %9)
  %19 = add i64 %17, 1
  %20 = and i64 %19, 4294967295
  %21 = tail call noalias ptr @malloc(i64 noundef %20) #8
  %22 = icmp ugt i32 %18, 100000000
  %23 = icmp eq ptr %21, null
  %or.cond = or i1 %22, %23
  br i1 %or.cond, label %24, label %29

24:                                               ; preds = %15
  tail call void (ptr, i32, ptr, ...) @ErrorMsg(ptr noundef %6, i32 noundef 0, ptr noundef nonnull @.str.80)
  tail call void @free(ptr noundef %21) #7
  %25 = getelementptr inbounds i8, ptr %0, i64 80
  %26 = load i32, ptr %25, align 8, !tbaa !15
  %27 = add nsw i32 %26, 1
  store i32 %27, ptr %25, align 8, !tbaa !15
  %28 = tail call i32 @fclose(ptr noundef nonnull %9)
  br label %195

29:                                               ; preds = %15
  %30 = and i64 %17, 134217727
  %31 = tail call i64 @fread(ptr noundef nonnull %21, i64 noundef 1, i64 noundef %30, ptr noundef nonnull %9)
  %.not = icmp eq i64 %31, %30
  br i1 %.not, label %37, label %32

32:                                               ; preds = %29
  tail call void (ptr, i32, ptr, ...) @ErrorMsg(ptr noundef %6, i32 noundef 0, ptr noundef nonnull @.str.81, i32 noundef %18)
  tail call void @free(ptr noundef nonnull %21) #7
  %33 = getelementptr inbounds i8, ptr %0, i64 80
  %34 = load i32, ptr %33, align 8, !tbaa !15
  %35 = add nsw i32 %34, 1
  store i32 %35, ptr %33, align 8, !tbaa !15
  %36 = tail call i32 @fclose(ptr noundef nonnull %9)
  br label %195

37:                                               ; preds = %29
  %38 = tail call i32 @fclose(ptr noundef nonnull %9)
  %39 = getelementptr inbounds i8, ptr %21, i64 %30
  store i8 0, ptr %39, align 1, !tbaa !16
  tail call void @preprocess_input(ptr noundef nonnull %21)
  %40 = getelementptr inbounds i8, ptr %2, i64 16
  %41 = getelementptr inbounds i8, ptr %2, i64 8
  br label %thread-pre-split

thread-pre-split:                                 ; preds = %thread-pre-split.backedge, %37
  %.0160.ph = phi ptr [ %21, %37 ], [ %.0160.ph.be, %thread-pre-split.backedge ]
  %.0153.ph = phi i32 [ 1, %37 ], [ %.0153.ph.be, %thread-pre-split.backedge ]
  %.pr = load i8, ptr %.0160.ph, align 1, !tbaa !16
  br label %.loopexit

.loopexit.loopexit:                               ; preds = %61, %61
  br label %.loopexit

.loopexit:                                        ; preds = %.loopexit.loopexit, %thread-pre-split
  %42 = phi i8 [ %.pr, %thread-pre-split ], [ %62, %.loopexit.loopexit ]
  %.0160 = phi ptr [ %.0160.ph, %thread-pre-split ], [ %.1161, %.loopexit.loopexit ]
  %.0153 = phi i32 [ %.0153.ph, %thread-pre-split ], [ %.1154, %.loopexit.loopexit ]
  switch i8 %42, label %45 [
    i8 0, label %189
    i8 10, label %43
  ]

43:                                               ; preds = %.loopexit
  %44 = add nsw i32 %.0153, 1
  br label %45

45:                                               ; preds = %.loopexit, %43
  %.1154 = phi i32 [ %44, %43 ], [ %.0153, %.loopexit ]
  %46 = tail call ptr @__ctype_b_loc() #9
  %47 = load ptr, ptr %46, align 8, !tbaa !17
  %48 = zext i8 %42 to i64
  %49 = getelementptr inbounds i16, ptr %47, i64 %48
  %50 = load i16, ptr %49, align 2, !tbaa !18
  %51 = and i16 %50, 8192
  %.not186 = icmp eq i16 %51, 0
  br i1 %.not186, label %54, label %52

52:                                               ; preds = %45
  %53 = getelementptr inbounds i8, ptr %.0160, i64 1
  br label %thread-pre-split.backedge

54:                                               ; preds = %45
  %55 = icmp eq i8 %42, 47
  br i1 %55, label %56, label %.critedge199

56:                                               ; preds = %54
  %57 = getelementptr inbounds i8, ptr %.0160, i64 1
  %58 = load i8, ptr %57, align 1, !tbaa !16
  switch i8 %58, label %.critedge199.thread [
    i8 47, label %59
    i8 42, label %65
  ]

59:                                               ; preds = %56
  %60 = getelementptr inbounds i8, ptr %.0160, i64 2
  br label %61

61:                                               ; preds = %63, %59
  %.1161 = phi ptr [ %60, %59 ], [ %64, %63 ]
  %62 = load i8, ptr %.1161, align 1, !tbaa !16
  switch i8 %62, label %63 [
    i8 10, label %.loopexit.loopexit
    i8 0, label %.loopexit.loopexit
  ]

63:                                               ; preds = %61
  %64 = getelementptr inbounds i8, ptr %.1161, i64 1
  br label %61, !llvm.loop !20

.critedge199.thread:                              ; preds = %56
  store ptr %.0160, ptr %40, align 8, !tbaa !22
  store i32 %.1154, ptr %41, align 8, !tbaa !23
  br label %137

65:                                               ; preds = %56
  %66 = getelementptr inbounds i8, ptr %.0160, i64 2
  %67 = load i8, ptr %66, align 1, !tbaa !16
  %.not195266.not = icmp eq i8 %67, 0
  br i1 %.not195266.not, label %.critedge, label %.lr.ph271

.lr.ph271:                                        ; preds = %65, %.critedge3
  %68 = phi i8 [ %75, %.critedge3 ], [ %67, %65 ]
  %.2268 = phi i32 [ %.3, %.critedge3 ], [ %.1154, %65 ]
  %.2162267 = phi ptr [ %74, %.critedge3 ], [ %66, %65 ]
  switch i8 %68, label %.critedge3 [
    i8 47, label %69
    i8 10, label %72
  ]

69:                                               ; preds = %.lr.ph271
  %70 = getelementptr inbounds i8, ptr %.2162267, i64 -1
  %71 = load i8, ptr %70, align 1, !tbaa !16
  %.not197 = icmp eq i8 %71, 42
  br i1 %.not197, label %.critedge, label %.critedge3

72:                                               ; preds = %.lr.ph271
  %73 = add nsw i32 %.2268, 1
  br label %.critedge3

.critedge3:                                       ; preds = %69, %.lr.ph271, %72
  %.3 = phi i32 [ %73, %72 ], [ %.2268, %.lr.ph271 ], [ %.2268, %69 ]
  %74 = getelementptr inbounds i8, ptr %.2162267, i64 1
  %75 = load i8, ptr %74, align 1, !tbaa !16
  %.not195.not = icmp eq i8 %75, 0
  br i1 %.not195.not, label %.critedge, label %.lr.ph271, !llvm.loop !24

.critedge:                                        ; preds = %69, %.critedge3, %65
  %.2162.lcssa = phi ptr [ %66, %65 ], [ %74, %.critedge3 ], [ %.2162267, %69 ]
  %.2.lcssa = phi i32 [ %.1154, %65 ], [ %.3, %.critedge3 ], [ %.2268, %69 ]
  %.not195.lcssa = phi i64 [ 0, %65 ], [ 0, %.critedge3 ], [ 1, %69 ]
  %spec.select = getelementptr inbounds i8, ptr %.2162.lcssa, i64 %.not195.lcssa
  br label %thread-pre-split.backedge

.critedge199:                                     ; preds = %54
  store ptr %.0160, ptr %40, align 8, !tbaa !22
  store i32 %.1154, ptr %41, align 8, !tbaa !23
  switch i8 %42, label %137 [
    i8 34, label %.preheader207.outer
    i8 123, label %.preheader208
  ]

.preheader208:                                    ; preds = %.critedge199
  %.5165257 = getelementptr inbounds i8, ptr %.0160, i64 1
  %76 = load i8, ptr %.5165257, align 1, !tbaa !16
  %cond258 = icmp eq i8 %76, 0
  br i1 %cond258, label %._crit_edge, label %.lr.ph263

.preheader207:                                    ; preds = %.preheader207.outer, %.preheader207
  %.0160.pn194 = phi ptr [ %.4164, %.preheader207 ], [ %.0160.pn194.ph, %.preheader207.outer ]
  %.4164 = getelementptr inbounds i8, ptr %.0160.pn194, i64 1
  %77 = load i8, ptr %.4164, align 1, !tbaa !16
  switch i8 %77, label %.preheader207 [
    i8 10, label %78
    i8 0, label %80
    i8 34, label %84
  ], !llvm.loop !25

78:                                               ; preds = %.preheader207
  %79 = add nsw i32 %.4.ph, 1
  br label %.preheader207.outer, !llvm.loop !25

.preheader207.outer:                              ; preds = %.critedge199, %78
  %.0160.pn194.ph = phi ptr [ %.4164, %78 ], [ %.0160, %.critedge199 ]
  %.4.ph = phi i32 [ %79, %78 ], [ %.1154, %.critedge199 ]
  br label %.preheader207

80:                                               ; preds = %.preheader207
  %81 = load ptr, ptr %2, align 8, !tbaa !13
  call void (ptr, i32, ptr, ...) @ErrorMsg(ptr noundef %81, i32 noundef 0, ptr noundef nonnull @.str.82)
  %82 = load i32, ptr %7, align 4, !tbaa !26
  %83 = add nsw i32 %82, 1
  store i32 %83, ptr %7, align 4, !tbaa !26
  br label %.critedge13

84:                                               ; preds = %.preheader207
  %85 = getelementptr inbounds i8, ptr %.0160.pn194, i64 2
  br label %.critedge13

.lr.ph263:                                        ; preds = %.preheader208, %.critedge7
  %86 = phi i8 [ %132, %.critedge7 ], [ %76, %.preheader208 ]
  %.5165262 = phi ptr [ %.5165, %.critedge7 ], [ %.5165257, %.preheader208 ]
  %.6261 = phi i32 [ %.11, %.critedge7 ], [ %.1154, %.preheader208 ]
  %.0156260 = phi i32 [ %.1157, %.critedge7 ], [ 1, %.preheader208 ]
  %.0160.pn259 = phi ptr [ %.9169, %.critedge7 ], [ %.0160, %.preheader208 ]
  %87 = icmp sgt i32 %.0156260, 1
  %88 = icmp ne i8 %86, 125
  %89 = or i1 %87, %88
  br i1 %89, label %90, label %.critedge5

90:                                               ; preds = %.lr.ph263
  switch i8 %86, label %.critedge7 [
    i8 10, label %91
    i8 123, label %93
    i8 125, label %95
    i8 47, label %97
    i8 39, label %121
    i8 34, label %121
  ]

91:                                               ; preds = %90
  %92 = add nsw i32 %.6261, 1
  br label %.critedge7

93:                                               ; preds = %90
  %94 = add nsw i32 %.0156260, 1
  br label %.critedge7

95:                                               ; preds = %90
  %96 = add nsw i32 %.0156260, -1
  br label %.critedge7

97:                                               ; preds = %90
  %98 = getelementptr inbounds i8, ptr %.0160.pn259, i64 2
  %99 = load i8, ptr %98, align 1, !tbaa !16
  switch i8 %99, label %.critedge7 [
    i8 42, label %100
    i8 47, label %113
  ]

100:                                              ; preds = %97
  %101 = getelementptr inbounds i8, ptr %.0160.pn259, i64 3
  %102 = load i8, ptr %101, align 1, !tbaa !16
  %.not193247 = icmp eq i8 %102, 0
  br i1 %.not193247, label %.critedge7, label %.lr.ph251

.lr.ph251:                                        ; preds = %100, %107
  %103 = phi i8 [ %112, %107 ], [ %102, %100 ]
  %.7250 = phi i32 [ %spec.select200, %107 ], [ %.6261, %100 ]
  %.0155249 = phi i32 [ %108, %107 ], [ 0, %100 ]
  %.6166248 = phi ptr [ %111, %107 ], [ %101, %100 ]
  %104 = icmp ne i8 %103, 47
  %105 = icmp ne i32 %.0155249, 42
  %106 = or i1 %105, %104
  br i1 %106, label %107, label %.critedge7

107:                                              ; preds = %.lr.ph251
  %108 = sext i8 %103 to i32
  %109 = icmp eq i8 %103, 10
  %110 = zext i1 %109 to i32
  %spec.select200 = add nsw i32 %.7250, %110
  %111 = getelementptr inbounds i8, ptr %.6166248, i64 1
  %112 = load i8, ptr %111, align 1, !tbaa !16
  %.not193 = icmp eq i8 %112, 0
  br i1 %.not193, label %.critedge7, label %.lr.ph251, !llvm.loop !27

113:                                              ; preds = %97
  %114 = getelementptr inbounds i8, ptr %.0160.pn259, i64 3
  br label %115

115:                                              ; preds = %117, %113
  %.7167 = phi ptr [ %114, %113 ], [ %118, %117 ]
  %116 = load i8, ptr %.7167, align 1, !tbaa !16
  switch i8 %116, label %117 [
    i8 0, label %.critedge7
    i8 10, label %119
  ]

117:                                              ; preds = %115
  %118 = getelementptr inbounds i8, ptr %.7167, i64 1
  br label %115, !llvm.loop !28

119:                                              ; preds = %115
  %120 = add nsw i32 %.6261, 1
  br label %.critedge7

121:                                              ; preds = %90, %90
  %.8168238 = getelementptr inbounds i8, ptr %.5165262, i64 1
  %122 = load i8, ptr %.8168238, align 1, !tbaa !16
  %.not192239 = icmp eq i8 %122, 0
  br i1 %.not192239, label %.critedge7, label %.lr.ph

.lr.ph:                                           ; preds = %121, %127
  %123 = phi i8 [ %131, %127 ], [ %122, %121 ]
  %.8168242 = phi ptr [ %.8168, %127 ], [ %.8168238, %121 ]
  %.0241 = phi i32 [ %.1, %127 ], [ 0, %121 ]
  %.9240 = phi i32 [ %spec.select203, %127 ], [ %.6261, %121 ]
  %124 = icmp ne i8 %123, %86
  %125 = icmp eq i32 %.0241, 92
  %126 = or i1 %125, %124
  br i1 %126, label %127, label %.critedge7

127:                                              ; preds = %.lr.ph
  %128 = sext i8 %123 to i32
  %129 = icmp eq i8 %123, 10
  %130 = zext i1 %129 to i32
  %spec.select203 = add nsw i32 %.9240, %130
  %.1 = select i1 %125, i32 0, i32 %128
  %.8168 = getelementptr inbounds i8, ptr %.8168242, i64 1
  %131 = load i8, ptr %.8168, align 1, !tbaa !16
  %.not192 = icmp eq i8 %131, 0
  br i1 %.not192, label %.critedge7, label %.lr.ph, !llvm.loop !29

.critedge7:                                       ; preds = %127, %.lr.ph, %115, %107, %.lr.ph251, %121, %100, %90, %97, %91, %95, %119, %93
  %.9169 = phi ptr [ %.5165262, %91 ], [ %.5165262, %93 ], [ %.5165262, %95 ], [ %.7167, %119 ], [ %.5165262, %97 ], [ %.5165262, %90 ], [ %101, %100 ], [ %.8168238, %121 ], [ %111, %107 ], [ %.6166248, %.lr.ph251 ], [ %.7167, %115 ], [ %.8168, %127 ], [ %.8168242, %.lr.ph ]
  %.1157 = phi i32 [ %.0156260, %91 ], [ %94, %93 ], [ %96, %95 ], [ %.0156260, %119 ], [ %.0156260, %97 ], [ %.0156260, %90 ], [ %.0156260, %100 ], [ %.0156260, %121 ], [ %.0156260, %.lr.ph251 ], [ %.0156260, %107 ], [ %.0156260, %115 ], [ %.0156260, %.lr.ph ], [ %.0156260, %127 ]
  %.11 = phi i32 [ %92, %91 ], [ %.6261, %93 ], [ %.6261, %95 ], [ %120, %119 ], [ %.6261, %97 ], [ %.6261, %90 ], [ %.6261, %100 ], [ %.6261, %121 ], [ %spec.select200, %107 ], [ %.7250, %.lr.ph251 ], [ %.6261, %115 ], [ %spec.select203, %127 ], [ %.9240, %.lr.ph ]
  %.5165 = getelementptr inbounds i8, ptr %.9169, i64 1
  %132 = load i8, ptr %.5165, align 1, !tbaa !16
  %cond = icmp eq i8 %132, 0
  br i1 %cond, label %._crit_edge, label %.lr.ph263, !llvm.loop !30

._crit_edge:                                      ; preds = %.critedge7, %.preheader208
  %.6.lcssa = phi i32 [ %.1154, %.preheader208 ], [ %.11, %.critedge7 ]
  %.5165.lcssa = phi ptr [ %.5165257, %.preheader208 ], [ %.5165, %.critedge7 ]
  %133 = load ptr, ptr %2, align 8, !tbaa !13
  call void (ptr, i32, ptr, ...) @ErrorMsg(ptr noundef %133, i32 noundef %.1154, ptr noundef nonnull @.str.83)
  %134 = load i32, ptr %7, align 4, !tbaa !26
  %135 = add nsw i32 %134, 1
  store i32 %135, ptr %7, align 4, !tbaa !26
  br label %.critedge13

.critedge5:                                       ; preds = %.lr.ph263
  %136 = getelementptr inbounds i8, ptr %.0160.pn259, i64 2
  br label %.critedge13

137:                                              ; preds = %.critedge199.thread, %.critedge199
  %138 = load ptr, ptr %46, align 8, !tbaa !17
  %139 = getelementptr inbounds i16, ptr %138, i64 %48
  %140 = load i16, ptr %139, align 2, !tbaa !18
  %141 = and i16 %140, 8
  %.not187 = icmp eq i16 %141, 0
  br i1 %.not187, label %154, label %.preheader

.preheader:                                       ; preds = %137
  %142 = load i8, ptr %.0160, align 1, !tbaa !16
  %.not190279 = icmp eq i8 %142, 0
  br i1 %.not190279, label %.critedge13, label %.lr.ph281

.lr.ph281:                                        ; preds = %.preheader, %151
  %143 = phi i8 [ %153, %151 ], [ %142, %.preheader ]
  %.10170280 = phi ptr [ %152, %151 ], [ %.0160, %.preheader ]
  %144 = zext i8 %143 to i64
  %145 = getelementptr inbounds i16, ptr %138, i64 %144
  %146 = load i16, ptr %145, align 2, !tbaa !18
  %147 = and i16 %146, 8
  %148 = icmp ne i16 %147, 0
  %149 = icmp eq i8 %143, 95
  %150 = or i1 %149, %148
  br i1 %150, label %151, label %.critedge13

151:                                              ; preds = %.lr.ph281
  %152 = getelementptr inbounds i8, ptr %.10170280, i64 1
  %153 = load i8, ptr %152, align 1, !tbaa !16
  %.not190 = icmp eq i8 %153, 0
  br i1 %.not190, label %.critedge13, label %.lr.ph281, !llvm.loop !31

154:                                              ; preds = %137
  switch i8 %42, label %186 [
    i8 58, label %155
    i8 124, label %165
    i8 47, label %165
  ]

155:                                              ; preds = %154
  %156 = getelementptr inbounds i8, ptr %.0160, i64 1
  %157 = load i8, ptr %156, align 1, !tbaa !16
  %158 = icmp eq i8 %157, 58
  br i1 %158, label %159, label %186

159:                                              ; preds = %155
  %160 = getelementptr inbounds i8, ptr %.0160, i64 2
  %161 = load i8, ptr %160, align 1, !tbaa !16
  %162 = icmp eq i8 %161, 61
  br i1 %162, label %163, label %186

163:                                              ; preds = %159
  %164 = getelementptr inbounds i8, ptr %.0160, i64 3
  br label %.critedge13

165:                                              ; preds = %154, %154
  %166 = getelementptr inbounds i8, ptr %.0160, i64 1
  %167 = load i8, ptr %166, align 1, !tbaa !16
  %168 = zext i8 %167 to i64
  %169 = getelementptr inbounds i16, ptr %138, i64 %168
  %170 = load i16, ptr %169, align 2, !tbaa !18
  %171 = and i16 %170, 1024
  %.not188 = icmp eq i16 %171, 0
  br i1 %.not188, label %186, label %172

172:                                              ; preds = %165
  %173 = getelementptr inbounds i8, ptr %.0160, i64 2
  %174 = load i8, ptr %173, align 1, !tbaa !16
  %.not189285 = icmp eq i8 %174, 0
  br i1 %.not189285, label %.critedge13, label %.lr.ph288

.lr.ph288:                                        ; preds = %172, %183
  %175 = phi i8 [ %185, %183 ], [ %174, %172 ]
  %.11171286 = phi ptr [ %184, %183 ], [ %173, %172 ]
  %176 = zext i8 %175 to i64
  %177 = getelementptr inbounds i16, ptr %138, i64 %176
  %178 = load i16, ptr %177, align 2, !tbaa !18
  %179 = and i16 %178, 8
  %180 = icmp ne i16 %179, 0
  %181 = icmp eq i8 %175, 95
  %182 = or i1 %181, %180
  br i1 %182, label %183, label %.critedge13

183:                                              ; preds = %.lr.ph288
  %184 = getelementptr inbounds i8, ptr %.11171286, i64 1
  %185 = load i8, ptr %184, align 1, !tbaa !16
  %.not189 = icmp eq i8 %185, 0
  br i1 %.not189, label %.critedge13, label %.lr.ph288, !llvm.loop !32

186:                                              ; preds = %155, %159, %154, %165
  %187 = getelementptr inbounds i8, ptr %.0160, i64 1
  br label %.critedge13

.critedge13:                                      ; preds = %151, %.lr.ph281, %183, %.lr.ph288, %.preheader, %172, %._crit_edge, %.critedge5, %163, %186, %80, %84
  %.12172 = phi ptr [ %.4164, %80 ], [ %.4164, %84 ], [ %164, %163 ], [ %187, %186 ], [ %.5165262, %.critedge5 ], [ %.5165.lcssa, %._crit_edge ], [ %173, %172 ], [ %.0160, %.preheader ], [ %184, %183 ], [ %.11171286, %.lr.ph288 ], [ %152, %151 ], [ %.10170280, %.lr.ph281 ]
  %.1159 = phi ptr [ %.4164, %80 ], [ %85, %84 ], [ %164, %163 ], [ %187, %186 ], [ %136, %.critedge5 ], [ %.5165.lcssa, %._crit_edge ], [ %173, %172 ], [ %.0160, %.preheader ], [ %184, %183 ], [ %.11171286, %.lr.ph288 ], [ %152, %151 ], [ %.10170280, %.lr.ph281 ]
  %.12 = phi i32 [ %.4.ph, %80 ], [ %.4.ph, %84 ], [ %.1154, %163 ], [ %.1154, %186 ], [ %.6261, %.critedge5 ], [ %.6.lcssa, %._crit_edge ], [ %.1154, %172 ], [ %.1154, %.preheader ], [ %.1154, %.lr.ph288 ], [ %.1154, %183 ], [ %.1154, %.lr.ph281 ], [ %.1154, %151 ]
  %188 = load i8, ptr %.12172, align 1, !tbaa !16
  store i8 0, ptr %.12172, align 1, !tbaa !16
  call void @parseonetoken(ptr noundef nonnull %2)
  store i8 %188, ptr %.12172, align 1, !tbaa !16
  br label %thread-pre-split.backedge

thread-pre-split.backedge:                        ; preds = %.critedge13, %.critedge, %52
  %.0160.ph.be = phi ptr [ %.1159, %.critedge13 ], [ %spec.select, %.critedge ], [ %53, %52 ]
  %.0153.ph.be = phi i32 [ %.12, %.critedge13 ], [ %.2.lcssa, %.critedge ], [ %.1154, %52 ]
  br label %thread-pre-split, !llvm.loop !33

189:                                              ; preds = %.loopexit
  call void @free(ptr noundef %21) #7
  %190 = getelementptr inbounds i8, ptr %2, i64 16128
  %191 = load ptr, ptr %190, align 8, !tbaa !34
  %192 = getelementptr inbounds i8, ptr %0, i64 8
  store ptr %191, ptr %192, align 8, !tbaa !35
  %193 = load i32, ptr %7, align 4, !tbaa !26
  %194 = getelementptr inbounds i8, ptr %0, i64 80
  store i32 %193, ptr %194, align 8, !tbaa !15
  br label %195

195:                                              ; preds = %189, %32, %24, %11
  call void @llvm.lifetime.end.p0(i64 16144, ptr nonnull %2) #7
  ret void
}

; Function Attrs: mustprogress nofree nosync nounwind willreturn memory(none)
declare ptr @__ctype_b_loc() local_unnamed_addr #4

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

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

; Function Attrs: nofree nounwind
declare noundef i64 @ftell(ptr nocapture noundef) local_unnamed_addr #5

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

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

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

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

; Function Attrs: nounwind uwtable
declare hidden void @preprocess_input(ptr noundef) local_unnamed_addr #3

; Function Attrs: nounwind uwtable
declare hidden void @parseonetoken(ptr noundef) local_unnamed_addr #3

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #2 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #3 = { 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 #4 = { mustprogress nofree nosync nounwind willreturn memory(none) "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 = { 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 #6 = { 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 #7 = { nounwind }
attributes #8 = { nounwind allocsize(0) }
attributes #9 = { nounwind willreturn memory(none) }

!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, !7, i64 24}
!6 = !{!"pstate", !7, i64 0, !10, i64 8, !10, i64 12, !7, i64 16, !7, i64 24, !10, i64 32, !7, i64 40, !7, i64 48, !7, i64 56, !7, i64 64, !10, i64 72, !8, i64 80, !8, i64 8080, !7, i64 16080, !7, i64 16088, !7, i64 16096, !10, i64 16104, !7, i64 16112, !10, i64 16120, !10, i64 16124, !7, i64 16128, !7, i64 16136}
!7 = !{!"any pointer", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"int", !8, i64 0}
!11 = !{!12, !7, i64 224}
!12 = !{!"lemon", !7, i64 0, !7, i64 8, !7, i64 16, !10, i64 24, !10, i64 28, !10, i64 32, !10, i64 36, !10, i64 40, !10, i64 44, !10, i64 48, !10, i64 52, !10, i64 56, !10, i64 60, !10, i64 64, !10, i64 68, !7, i64 72, !10, i64 80, !7, i64 88, !7, i64 96, !7, i64 104, !7, i64 112, !7, i64 120, !7, i64 128, !7, i64 136, !7, i64 144, !7, i64 152, !7, i64 160, !7, i64 168, !7, i64 176, !7, i64 184, !7, i64 192, !7, i64 200, !7, i64 208, !7, i64 216, !7, i64 224, !7, i64 232, !7, i64 240, !10, i64 248, !10, i64 252, !10, i64 256, !10, i64 260, !10, i64 264, !10, i64 268, !10, i64 272, !7, i64 280}
!13 = !{!6, !7, i64 0}
!14 = !{!6, !10, i64 32}
!15 = !{!12, !10, i64 80}
!16 = !{!8, !8, i64 0}
!17 = !{!7, !7, i64 0}
!18 = !{!19, !19, i64 0}
!19 = !{!"short", !8, i64 0}
!20 = distinct !{!20, !21}
!21 = !{!"llvm.loop.mustprogress"}
!22 = !{!6, !7, i64 16}
!23 = !{!6, !10, i64 8}
!24 = distinct !{!24, !21}
!25 = distinct !{!25, !21}
!26 = !{!6, !10, i64 12}
!27 = distinct !{!27, !21}
!28 = distinct !{!28, !21}
!29 = distinct !{!29, !21}
!30 = distinct !{!30, !21}
!31 = distinct !{!31, !21}
!32 = distinct !{!32, !21}
!33 = distinct !{!33, !21}
!34 = !{!6, !7, i64 16128}
!35 = !{!12, !7, i64 8}


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