; LLVM IR from buzz-lang/Buzz :: src/buzz (buzzparser)

; 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.buzzparser_s = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i32 }
%struct.buzztok_s = type { i32, ptr, i64, i64, ptr }
%struct.buzzdarray_s = type { ptr, i64, i32, i32, ptr }
%struct.buzzlex_file_s = type { i64, i64, i64, i64, ptr, ptr }

@stderr = external global ptr, align 8
@buzztok_desc = external global [0 x ptr], align 8
@PARSE_ERROR = external hidden global i32, align 4
@PARSE_OK = external hidden global i32, align 4
@.str.44 = external hidden unnamed_addr constant [68 x i8], align 1
@.str.45 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.46 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.47 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.48 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.49 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.50 = external hidden unnamed_addr constant [69 x i8], align 1
@.str.51 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.52 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.53 = external hidden unnamed_addr constant [5 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: nounwind uwtable
declare dso_local i32 @string_add(ptr noundef, ptr noundef) #2

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

; Function Attrs: nounwind uwtable
declare dso_local void @chunk_addcode(ptr noundef, ptr noundef, ptr noundef) #2

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

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

declare ptr @buzzlex_nexttok(ptr noundef) #3

declare void @buzzlex_destroytok(ptr noundef) #3

; Function Attrs: nounwind uwtable
define dso_local i32 @parse_expression(ptr noundef %0) #2 {
  %2 = alloca i32, align 4
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca ptr, align 8
  %14 = alloca ptr, align 8
  %15 = alloca i8, align 1
  %16 = alloca i32, align 4
  %17 = alloca ptr, align 8
  %18 = alloca ptr, align 8
  store ptr %0, ptr %3, align 8, !tbaa !5
  %19 = load ptr, ptr %3, align 8, !tbaa !5
  %20 = getelementptr inbounds %struct.buzzparser_s, ptr %19, i32 0, i32 4
  %21 = load ptr, ptr %20, align 8, !tbaa !9
  %22 = getelementptr inbounds %struct.buzztok_s, ptr %21, i32 0, i32 0
  %23 = load i32, ptr %22, align 8, !tbaa !12
  %24 = icmp eq i32 %23, 20
  br i1 %24, label %25, label %630

25:                                               ; preds = %1
  br label %26

26:                                               ; preds = %49, %25
  %27 = load ptr, ptr %3, align 8, !tbaa !5
  %28 = getelementptr inbounds %struct.buzzparser_s, ptr %27, i32 0, i32 4
  call void @buzzlex_destroytok(ptr noundef %28)
  %29 = load ptr, ptr %3, align 8, !tbaa !5
  %30 = getelementptr inbounds %struct.buzzparser_s, ptr %29, i32 0, i32 3
  %31 = load ptr, ptr %30, align 8, !tbaa !15
  %32 = call ptr @buzzlex_nexttok(ptr noundef %31)
  %33 = load ptr, ptr %3, align 8, !tbaa !5
  %34 = getelementptr inbounds %struct.buzzparser_s, ptr %33, i32 0, i32 4
  store ptr %32, ptr %34, align 8, !tbaa !9
  br label %35

35:                                               ; preds = %26
  %36 = load ptr, ptr %3, align 8, !tbaa !5
  %37 = getelementptr inbounds %struct.buzzparser_s, ptr %36, i32 0, i32 4
  %38 = load ptr, ptr %37, align 8, !tbaa !9
  %39 = getelementptr inbounds %struct.buzztok_s, ptr %38, i32 0, i32 0
  %40 = load i32, ptr %39, align 8, !tbaa !12
  %41 = icmp ne i32 %40, 31
  br i1 %41, label %42, label %49

42:                                               ; preds = %35
  %43 = load ptr, ptr %3, align 8, !tbaa !5
  %44 = getelementptr inbounds %struct.buzzparser_s, ptr %43, i32 0, i32 4
  %45 = load ptr, ptr %44, align 8, !tbaa !9
  %46 = getelementptr inbounds %struct.buzztok_s, ptr %45, i32 0, i32 0
  %47 = load i32, ptr %46, align 8, !tbaa !12
  %48 = icmp eq i32 %47, 26
  br label %49

49:                                               ; preds = %42, %35
  %50 = phi i1 [ false, %35 ], [ %48, %42 ]
  br i1 %50, label %26, label %51, !llvm.loop !16

51:                                               ; preds = %49
  %52 = load ptr, ptr %3, align 8, !tbaa !5
  %53 = getelementptr inbounds %struct.buzzparser_s, ptr %52, i32 0, i32 4
  %54 = load ptr, ptr %53, align 8, !tbaa !9
  %55 = getelementptr inbounds %struct.buzztok_s, ptr %54, i32 0, i32 0
  %56 = load i32, ptr %55, align 8, !tbaa !12
  %57 = icmp ne i32 %56, 29
  br i1 %57, label %58, label %102

58:                                               ; preds = %51
  %59 = load ptr, ptr %3, align 8, !tbaa !5
  %60 = getelementptr inbounds %struct.buzzparser_s, ptr %59, i32 0, i32 4
  %61 = load ptr, ptr %60, align 8, !tbaa !9
  %62 = getelementptr inbounds %struct.buzztok_s, ptr %61, i32 0, i32 0
  %63 = load i32, ptr %62, align 8, !tbaa !12
  %64 = icmp ne i32 %63, 21
  br i1 %64, label %65, label %102

65:                                               ; preds = %58
  %66 = load ptr, ptr @stderr, align 8, !tbaa !5
  %67 = load ptr, ptr %3, align 8, !tbaa !5
  %68 = getelementptr inbounds %struct.buzzparser_s, ptr %67, i32 0, i32 3
  %69 = load ptr, ptr %68, align 8, !tbaa !15
  %70 = getelementptr inbounds %struct.buzzdarray_s, ptr %69, i32 0, i32 0
  %71 = load ptr, ptr %70, align 8, !tbaa !18
  %72 = load ptr, ptr %3, align 8, !tbaa !5
  %73 = getelementptr inbounds %struct.buzzparser_s, ptr %72, i32 0, i32 3
  %74 = load ptr, ptr %73, align 8, !tbaa !15
  %75 = getelementptr inbounds %struct.buzzdarray_s, ptr %74, i32 0, i32 1
  %76 = load i64, ptr %75, align 8, !tbaa !20
  %77 = sub nsw i64 %76, 1
  %78 = getelementptr inbounds ptr, ptr %71, i64 %77
  %79 = load ptr, ptr %78, align 8, !tbaa !5
  %80 = getelementptr inbounds %struct.buzzlex_file_s, ptr %79, i32 0, i32 5
  %81 = load ptr, ptr %80, align 8, !tbaa !21
  %82 = load ptr, ptr %3, align 8, !tbaa !5
  %83 = getelementptr inbounds %struct.buzzparser_s, ptr %82, i32 0, i32 4
  %84 = load ptr, ptr %83, align 8, !tbaa !9
  %85 = getelementptr inbounds %struct.buzztok_s, ptr %84, i32 0, i32 2
  %86 = load i64, ptr %85, align 8, !tbaa !23
  %87 = load ptr, ptr %3, align 8, !tbaa !5
  %88 = getelementptr inbounds %struct.buzzparser_s, ptr %87, i32 0, i32 4
  %89 = load ptr, ptr %88, align 8, !tbaa !9
  %90 = getelementptr inbounds %struct.buzztok_s, ptr %89, i32 0, i32 3
  %91 = load i64, ptr %90, align 8, !tbaa !24
  %92 = load ptr, ptr %3, align 8, !tbaa !5
  %93 = getelementptr inbounds %struct.buzzparser_s, ptr %92, i32 0, i32 4
  %94 = load ptr, ptr %93, align 8, !tbaa !9
  %95 = getelementptr inbounds %struct.buzztok_s, ptr %94, i32 0, i32 0
  %96 = load i32, ptr %95, align 8, !tbaa !12
  %97 = zext i32 %96 to i64
  %98 = getelementptr inbounds [0 x ptr], ptr @buzztok_desc, i64 0, i64 %97
  %99 = load ptr, ptr %98, align 8, !tbaa !5
  %100 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %66, ptr noundef @.str.44, ptr noundef %81, i64 noundef %86, i64 noundef %91, ptr noundef %99) #5
  %101 = load i32, ptr @PARSE_ERROR, align 4, !tbaa !25
  store i32 %101, ptr %2, align 4
  br label %718

102:                                              ; preds = %58, %51
  call void @llvm.lifetime.start.p0(i64 8, ptr %4) #5
  %103 = call i32 (ptr, ptr, ...) @asprintf(ptr noundef %4, ptr noundef @.str.45) #5
  %104 = load ptr, ptr %3, align 8, !tbaa !5
  %105 = getelementptr inbounds %struct.buzzparser_s, ptr %104, i32 0, i32 6
  %106 = load ptr, ptr %105, align 8, !tbaa !26
  %107 = load ptr, ptr %4, align 8, !tbaa !5
  %108 = load ptr, ptr %3, align 8, !tbaa !5
  %109 = getelementptr inbounds %struct.buzzparser_s, ptr %108, i32 0, i32 4
  %110 = load ptr, ptr %109, align 8, !tbaa !9
  call void @chunk_addcode(ptr noundef %106, ptr noundef %107, ptr noundef %110)
  %111 = load ptr, ptr %4, align 8, !tbaa !5
  call void @free(ptr noundef %111) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %4) #5
  %112 = load ptr, ptr %3, align 8, !tbaa !5
  %113 = getelementptr inbounds %struct.buzzparser_s, ptr %112, i32 0, i32 4
  %114 = load ptr, ptr %113, align 8, !tbaa !9
  %115 = getelementptr inbounds %struct.buzztok_s, ptr %114, i32 0, i32 0
  %116 = load i32, ptr %115, align 8, !tbaa !12
  %117 = icmp eq i32 %116, 29
  br i1 %117, label %118, label %596

118:                                              ; preds = %102
  call void @llvm.lifetime.start.p0(i64 8, ptr %5) #5
  %119 = call i32 (ptr, ptr, ...) @asprintf(ptr noundef %5, ptr noundef @.str.46) #5
  %120 = load ptr, ptr %3, align 8, !tbaa !5
  %121 = getelementptr inbounds %struct.buzzparser_s, ptr %120, i32 0, i32 6
  %122 = load ptr, ptr %121, align 8, !tbaa !26
  %123 = load ptr, ptr %5, align 8, !tbaa !5
  %124 = load ptr, ptr %3, align 8, !tbaa !5
  %125 = getelementptr inbounds %struct.buzzparser_s, ptr %124, i32 0, i32 4
  %126 = load ptr, ptr %125, align 8, !tbaa !9
  call void @chunk_addcode(ptr noundef %122, ptr noundef %123, ptr noundef %126)
  %127 = load ptr, ptr %5, align 8, !tbaa !5
  call void @free(ptr noundef %127) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #5
  br label %128

128:                                              ; preds = %151, %118
  %129 = load ptr, ptr %3, align 8, !tbaa !5
  %130 = getelementptr inbounds %struct.buzzparser_s, ptr %129, i32 0, i32 4
  call void @buzzlex_destroytok(ptr noundef %130)
  %131 = load ptr, ptr %3, align 8, !tbaa !5
  %132 = getelementptr inbounds %struct.buzzparser_s, ptr %131, i32 0, i32 3
  %133 = load ptr, ptr %132, align 8, !tbaa !15
  %134 = call ptr @buzzlex_nexttok(ptr noundef %133)
  %135 = load ptr, ptr %3, align 8, !tbaa !5
  %136 = getelementptr inbounds %struct.buzzparser_s, ptr %135, i32 0, i32 4
  store ptr %134, ptr %136, align 8, !tbaa !9
  br label %137

137:                                              ; preds = %128
  %138 = load ptr, ptr %3, align 8, !tbaa !5
  %139 = getelementptr inbounds %struct.buzzparser_s, ptr %138, i32 0, i32 4
  %140 = load ptr, ptr %139, align 8, !tbaa !9
  %141 = getelementptr inbounds %struct.buzztok_s, ptr %140, i32 0, i32 0
  %142 = load i32, ptr %141, align 8, !tbaa !12
  %143 = icmp ne i32 %142, 31
  br i1 %143, label %144, label %151

144:                                              ; preds = %137
  %145 = load ptr, ptr %3, align 8, !tbaa !5
  %146 = getelementptr inbounds %struct.buzzparser_s, ptr %145, i32 0, i32 4
  %147 = load ptr, ptr %146, align 8, !tbaa !9
  %148 = getelementptr inbounds %struct.buzztok_s, ptr %147, i32 0, i32 0
  %149 = load i32, ptr %148, align 8, !tbaa !12
  %150 = icmp eq i32 %149, 26
  br label %151

151:                                              ; preds = %144, %137
  %152 = phi i1 [ false, %137 ], [ %150, %144 ]
  br i1 %152, label %128, label %153, !llvm.loop !27

153:                                              ; preds = %151
  %154 = load ptr, ptr %3, align 8, !tbaa !5
  %155 = getelementptr inbounds %struct.buzzparser_s, ptr %154, i32 0, i32 4
  %156 = load ptr, ptr %155, align 8, !tbaa !9
  %157 = getelementptr inbounds %struct.buzztok_s, ptr %156, i32 0, i32 0
  %158 = load i32, ptr %157, align 8, !tbaa !12
  %159 = icmp eq i32 %158, 0
  br i1 %159, label %160, label %179

160:                                              ; preds = %153
  call void @llvm.lifetime.start.p0(i64 8, ptr %6) #5
  %161 = load ptr, ptr %3, align 8, !tbaa !5
  %162 = getelementptr inbounds %struct.buzzparser_s, ptr %161, i32 0, i32 9
  %163 = load ptr, ptr %162, align 8, !tbaa !28
  %164 = load ptr, ptr %3, align 8, !tbaa !5
  %165 = getelementptr inbounds %struct.buzzparser_s, ptr %164, i32 0, i32 4
  %166 = load ptr, ptr %165, align 8, !tbaa !9
  %167 = getelementptr inbounds %struct.buzztok_s, ptr %166, i32 0, i32 1
  %168 = load ptr, ptr %167, align 8, !tbaa !29
  %169 = call i32 @string_add(ptr noundef %163, ptr noundef %168)
  %170 = call i32 (ptr, ptr, ...) @asprintf(ptr noundef %6, ptr noundef @.str.47, i32 noundef %169) #5
  %171 = load ptr, ptr %3, align 8, !tbaa !5
  %172 = getelementptr inbounds %struct.buzzparser_s, ptr %171, i32 0, i32 6
  %173 = load ptr, ptr %172, align 8, !tbaa !26
  %174 = load ptr, ptr %6, align 8, !tbaa !5
  %175 = load ptr, ptr %3, align 8, !tbaa !5
  %176 = getelementptr inbounds %struct.buzzparser_s, ptr %175, i32 0, i32 4
  %177 = load ptr, ptr %176, align 8, !tbaa !9
  call void @chunk_addcode(ptr noundef %173, ptr noundef %174, ptr noundef %177)
  %178 = load ptr, ptr %6, align 8, !tbaa !5
  call void @free(ptr noundef %178) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #5
  br label %263

179:                                              ; preds = %153
  %180 = load ptr, ptr %3, align 8, !tbaa !5
  %181 = getelementptr inbounds %struct.buzzparser_s, ptr %180, i32 0, i32 4
  %182 = load ptr, ptr %181, align 8, !tbaa !9
  %183 = getelementptr inbounds %struct.buzztok_s, ptr %182, i32 0, i32 0
  %184 = load i32, ptr %183, align 8, !tbaa !12
  %185 = icmp eq i32 %184, 1
  br i1 %185, label %186, label %225

186:                                              ; preds = %179
  %187 = load ptr, ptr %3, align 8, !tbaa !5
  %188 = getelementptr inbounds %struct.buzzparser_s, ptr %187, i32 0, i32 4
  %189 = load ptr, ptr %188, align 8, !tbaa !9
  %190 = getelementptr inbounds %struct.buzztok_s, ptr %189, i32 0, i32 1
  %191 = load ptr, ptr %190, align 8, !tbaa !29
  %192 = call ptr @strchr(ptr noundef %191, i32 noundef 46) #6
  %193 = icmp ne ptr %192, null
  br i1 %193, label %194, label %209

194:                                              ; preds = %186
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #5
  %195 = load ptr, ptr %3, align 8, !tbaa !5
  %196 = getelementptr inbounds %struct.buzzparser_s, ptr %195, i32 0, i32 4
  %197 = load ptr, ptr %196, align 8, !tbaa !9
  %198 = getelementptr inbounds %struct.buzztok_s, ptr %197, i32 0, i32 1
  %199 = load ptr, ptr %198, align 8, !tbaa !29
  %200 = call i32 (ptr, ptr, ...) @asprintf(ptr noundef %7, ptr noundef @.str.48, ptr noundef %199) #5
  %201 = load ptr, ptr %3, align 8, !tbaa !5
  %202 = getelementptr inbounds %struct.buzzparser_s, ptr %201, i32 0, i32 6
  %203 = load ptr, ptr %202, align 8, !tbaa !26
  %204 = load ptr, ptr %7, align 8, !tbaa !5
  %205 = load ptr, ptr %3, align 8, !tbaa !5
  %206 = getelementptr inbounds %struct.buzzparser_s, ptr %205, i32 0, i32 4
  %207 = load ptr, ptr %206, align 8, !tbaa !9
  call void @chunk_addcode(ptr noundef %203, ptr noundef %204, ptr noundef %207)
  %208 = load ptr, ptr %7, align 8, !tbaa !5
  call void @free(ptr noundef %208) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #5
  br label %224

209:                                              ; preds = %186
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #5
  %210 = load ptr, ptr %3, align 8, !tbaa !5
  %211 = getelementptr inbounds %struct.buzzparser_s, ptr %210, i32 0, i32 4
  %212 = load ptr, ptr %211, align 8, !tbaa !9
  %213 = getelementptr inbounds %struct.buzztok_s, ptr %212, i32 0, i32 1
  %214 = load ptr, ptr %213, align 8, !tbaa !29
  %215 = call i32 (ptr, ptr, ...) @asprintf(ptr noundef %8, ptr noundef @.str.49, ptr noundef %214) #5
  %216 = load ptr, ptr %3, align 8, !tbaa !5
  %217 = getelementptr inbounds %struct.buzzparser_s, ptr %216, i32 0, i32 6
  %218 = load ptr, ptr %217, align 8, !tbaa !26
  %219 = load ptr, ptr %8, align 8, !tbaa !5
  %220 = load ptr, ptr %3, align 8, !tbaa !5
  %221 = getelementptr inbounds %struct.buzzparser_s, ptr %220, i32 0, i32 4
  %222 = load ptr, ptr %221, align 8, !tbaa !9
  call void @chunk_addcode(ptr noundef %218, ptr noundef %219, ptr noundef %222)
  %223 = load ptr, ptr %8, align 8, !tbaa !5
  call void @free(ptr noundef %223) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #5
  br label %224

224:                                              ; preds = %209, %194
  br label %262

225:                                              ; preds = %179
  %226 = load ptr, ptr @stderr, align 8, !tbaa !5
  %227 = load ptr, ptr %3, align 8, !tbaa !5
  %228 = getelementptr inbounds %struct.buzzparser_s, ptr %227, i32 0, i32 3
  %229 = load ptr, ptr %228, align 8, !tbaa !15
  %230 = getelementptr inbounds %struct.buzzdarray_s, ptr %229, i32 0, i32 0
  %231 = load ptr, ptr %230, align 8, !tbaa !18
  %232 = load ptr, ptr %3, align 8, !tbaa !5
  %233 = getelementptr inbounds %struct.buzzparser_s, ptr %232, i32 0, i32 3
  %234 = load ptr, ptr %233, align 8, !tbaa !15
  %235 = getelementptr inbounds %struct.buzzdarray_s, ptr %234, i32 0, i32 1
  %236 = load i64, ptr %235, align 8, !tbaa !20
  %237 = sub nsw i64 %236, 1
  %238 = getelementptr inbounds ptr, ptr %231, i64 %237
  %239 = load ptr, ptr %238, align 8, !tbaa !5
  %240 = getelementptr inbounds %struct.buzzlex_file_s, ptr %239, i32 0, i32 5
  %241 = load ptr, ptr %240, align 8, !tbaa !21
  %242 = load ptr, ptr %3, align 8, !tbaa !5
  %243 = getelementptr inbounds %struct.buzzparser_s, ptr %242, i32 0, i32 4
  %244 = load ptr, ptr %243, align 8, !tbaa !9
  %245 = getelementptr inbounds %struct.buzztok_s, ptr %244, i32 0, i32 2
  %246 = load i64, ptr %245, align 8, !tbaa !23
  %247 = load ptr, ptr %3, align 8, !tbaa !5
  %248 = getelementptr inbounds %struct.buzzparser_s, ptr %247, i32 0, i32 4
  %249 = load ptr, ptr %248, align 8, !tbaa !9
  %250 = getelementptr inbounds %struct.buzztok_s, ptr %249, i32 0, i32 3
  %251 = load i64, ptr %250, align 8, !tbaa !24
  %252 = load ptr, ptr %3, align 8, !tbaa !5
  %253 = getelementptr inbounds %struct.buzzparser_s, ptr %252, i32 0, i32 4
  %254 = load ptr, ptr %253, align 8, !tbaa !9
  %255 = getelementptr inbounds %struct.buzztok_s, ptr %254, i32 0, i32 0
  %256 = load i32, ptr %255, align 8, !tbaa !12
  %257 = zext i32 %256 to i64
  %258 = getelementptr inbounds [0 x ptr], ptr @buzztok_desc, i64 0, i64 %257
  %259 = load ptr, ptr %258, align 8, !tbaa !5
  %260 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %226, ptr noundef @.str.50, ptr noundef %241, i64 noundef %246, i64 noundef %251, ptr noundef %259) #5
  %261 = load i32, ptr @PARSE_ERROR, align 4, !tbaa !25
  store i32 %261, ptr %2, align 4
  br label %718

262:                                              ; preds = %224
  br label %263

263:                                              ; preds = %262, %160
  br label %264

264:                                              ; preds = %287, %263
  %265 = load ptr, ptr %3, align 8, !tbaa !5
  %266 = getelementptr inbounds %struct.buzzparser_s, ptr %265, i32 0, i32 4
  call void @buzzlex_destroytok(ptr noundef %266)
  %267 = load ptr, ptr %3, align 8, !tbaa !5
  %268 = getelementptr inbounds %struct.buzzparser_s, ptr %267, i32 0, i32 3
  %269 = load ptr, ptr %268, align 8, !tbaa !15
  %270 = call ptr @buzzlex_nexttok(ptr noundef %269)
  %271 = load ptr, ptr %3, align 8, !tbaa !5
  %272 = getelementptr inbounds %struct.buzzparser_s, ptr %271, i32 0, i32 4
  store ptr %270, ptr %272, align 8, !tbaa !9
  br label %273

273:                                              ; preds = %264
  %274 = load ptr, ptr %3, align 8, !tbaa !5
  %275 = getelementptr inbounds %struct.buzzparser_s, ptr %274, i32 0, i32 4
  %276 = load ptr, ptr %275, align 8, !tbaa !9
  %277 = getelementptr inbounds %struct.buzztok_s, ptr %276, i32 0, i32 0
  %278 = load i32, ptr %277, align 8, !tbaa !12
  %279 = icmp ne i32 %278, 31
  br i1 %279, label %280, label %287

280:                                              ; preds = %273
  %281 = load ptr, ptr %3, align 8, !tbaa !5
  %282 = getelementptr inbounds %struct.buzzparser_s, ptr %281, i32 0, i32 4
  %283 = load ptr, ptr %282, align 8, !tbaa !9
  %284 = getelementptr inbounds %struct.buzztok_s, ptr %283, i32 0, i32 0
  %285 = load i32, ptr %284, align 8, !tbaa !12
  %286 = icmp eq i32 %285, 26
  br label %287

287:                                              ; preds = %280, %273
  %288 = phi i1 [ false, %273 ], [ %286, %280 ]
  br i1 %288, label %264, label %289, !llvm.loop !30

289:                                              ; preds = %287
  %290 = load ptr, ptr %3, align 8, !tbaa !5
  %291 = call i32 @match(ptr noundef %290, i32 noundef 28)
  %292 = icmp ne i32 %291, 0
  br i1 %292, label %295, label %293

293:                                              ; preds = %289
  %294 = load i32, ptr @PARSE_ERROR, align 4, !tbaa !25
  store i32 %294, ptr %2, align 4
  br label %718

295:                                              ; preds = %289
  br label %296

296:                                              ; preds = %319, %295
  %297 = load ptr, ptr %3, align 8, !tbaa !5
  %298 = getelementptr inbounds %struct.buzzparser_s, ptr %297, i32 0, i32 4
  call void @buzzlex_destroytok(ptr noundef %298)
  %299 = load ptr, ptr %3, align 8, !tbaa !5
  %300 = getelementptr inbounds %struct.buzzparser_s, ptr %299, i32 0, i32 3
  %301 = load ptr, ptr %300, align 8, !tbaa !15
  %302 = call ptr @buzzlex_nexttok(ptr noundef %301)
  %303 = load ptr, ptr %3, align 8, !tbaa !5
  %304 = getelementptr inbounds %struct.buzzparser_s, ptr %303, i32 0, i32 4
  store ptr %302, ptr %304, align 8, !tbaa !9
  br label %305

305:                                              ; preds = %296
  %306 = load ptr, ptr %3, align 8, !tbaa !5
  %307 = getelementptr inbounds %struct.buzzparser_s, ptr %306, i32 0, i32 4
  %308 = load ptr, ptr %307, align 8, !tbaa !9
  %309 = getelementptr inbounds %struct.buzztok_s, ptr %308, i32 0, i32 0
  %310 = load i32, ptr %309, align 8, !tbaa !12
  %311 = icmp ne i32 %310, 31
  br i1 %311, label %312, label %319

312:                                              ; preds = %305
  %313 = load ptr, ptr %3, align 8, !tbaa !5
  %314 = getelementptr inbounds %struct.buzzparser_s, ptr %313, i32 0, i32 4
  %315 = load ptr, ptr %314, align 8, !tbaa !9
  %316 = getelementptr inbounds %struct.buzztok_s, ptr %315, i32 0, i32 0
  %317 = load i32, ptr %316, align 8, !tbaa !12
  %318 = icmp eq i32 %317, 26
  br label %319

319:                                              ; preds = %312, %305
  %320 = phi i1 [ false, %305 ], [ %318, %312 ]
  br i1 %320, label %296, label %321, !llvm.loop !31

321:                                              ; preds = %319
  %322 = load ptr, ptr %3, align 8, !tbaa !5
  %323 = call i32 @parse_expression(ptr noundef %322)
  %324 = icmp ne i32 %323, 0
  br i1 %324, label %327, label %325

325:                                              ; preds = %321
  %326 = load i32, ptr @PARSE_ERROR, align 4, !tbaa !25
  store i32 %326, ptr %2, align 4
  br label %718

327:                                              ; preds = %321
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #5
  %328 = call i32 (ptr, ptr, ...) @asprintf(ptr noundef %9, ptr noundef @.str.51) #5
  %329 = load ptr, ptr %3, align 8, !tbaa !5
  %330 = getelementptr inbounds %struct.buzzparser_s, ptr %329, i32 0, i32 6
  %331 = load ptr, ptr %330, align 8, !tbaa !26
  %332 = load ptr, ptr %9, align 8, !tbaa !5
  %333 = load ptr, ptr %3, align 8, !tbaa !5
  %334 = getelementptr inbounds %struct.buzzparser_s, ptr %333, i32 0, i32 4
  %335 = load ptr, ptr %334, align 8, !tbaa !9
  call void @chunk_addcode(ptr noundef %331, ptr noundef %332, ptr noundef %335)
  %336 = load ptr, ptr %9, align 8, !tbaa !5
  call void @free(ptr noundef %336) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #5
  br label %337

337:                                              ; preds = %585, %327
  %338 = load ptr, ptr %3, align 8, !tbaa !5
  %339 = getelementptr inbounds %struct.buzzparser_s, ptr %338, i32 0, i32 4
  %340 = load ptr, ptr %339, align 8, !tbaa !9
  %341 = getelementptr inbounds %struct.buzztok_s, ptr %340, i32 0, i32 0
  %342 = load i32, ptr %341, align 8, !tbaa !12
  %343 = icmp eq i32 %342, 27
  br i1 %343, label %344, label %595

344:                                              ; preds = %337
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #5
  %345 = call i32 (ptr, ptr, ...) @asprintf(ptr noundef %10, ptr noundef @.str.46) #5
  %346 = load ptr, ptr %3, align 8, !tbaa !5
  %347 = getelementptr inbounds %struct.buzzparser_s, ptr %346, i32 0, i32 6
  %348 = load ptr, ptr %347, align 8, !tbaa !26
  %349 = load ptr, ptr %10, align 8, !tbaa !5
  %350 = load ptr, ptr %3, align 8, !tbaa !5
  %351 = getelementptr inbounds %struct.buzzparser_s, ptr %350, i32 0, i32 4
  %352 = load ptr, ptr %351, align 8, !tbaa !9
  call void @chunk_addcode(ptr noundef %348, ptr noundef %349, ptr noundef %352)
  %353 = load ptr, ptr %10, align 8, !tbaa !5
  call void @free(ptr noundef %353) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #5
  br label %354

354:                                              ; preds = %377, %344
  %355 = load ptr, ptr %3, align 8, !tbaa !5
  %356 = getelementptr inbounds %struct.buzzparser_s, ptr %355, i32 0, i32 4
  call void @buzzlex_destroytok(ptr noundef %356)
  %357 = load ptr, ptr %3, align 8, !tbaa !5
  %358 = getelementptr inbounds %struct.buzzparser_s, ptr %357, i32 0, i32 3
  %359 = load ptr, ptr %358, align 8, !tbaa !15
  %360 = call ptr @buzzlex_nexttok(ptr noundef %359)
  %361 = load ptr, ptr %3, align 8, !tbaa !5
  %362 = getelementptr inbounds %struct.buzzparser_s, ptr %361, i32 0, i32 4
  store ptr %360, ptr %362, align 8, !tbaa !9
  br label %363

363:                                              ; preds = %354
  %364 = load ptr, ptr %3, align 8, !tbaa !5
  %365 = getelementptr inbounds %struct.buzzparser_s, ptr %364, i32 0, i32 4
  %366 = load ptr, ptr %365, align 8, !tbaa !9
  %367 = getelementptr inbounds %struct.buzztok_s, ptr %366, i32 0, i32 0
  %368 = load i32, ptr %367, align 8, !tbaa !12
  %369 = icmp ne i32 %368, 31
  br i1 %369, label %370, label %377

370:                                              ; preds = %363
  %371 = load ptr, ptr %3, align 8, !tbaa !5
  %372 = getelementptr inbounds %struct.buzzparser_s, ptr %371, i32 0, i32 4
  %373 = load ptr, ptr %372, align 8, !tbaa !9
  %374 = getelementptr inbounds %struct.buzztok_s, ptr %373, i32 0, i32 0
  %375 = load i32, ptr %374, align 8, !tbaa !12
  %376 = icmp eq i32 %375, 26
  br label %377

377:                                              ; preds = %370, %363
  %378 = phi i1 [ false, %363 ], [ %376, %370 ]
  br i1 %378, label %354, label %379, !llvm.loop !32

379:                                              ; preds = %377
  %380 = load ptr, ptr %3, align 8, !tbaa !5
  %381 = call i32 @match(ptr noundef %380, i32 noundef 29)
  %382 = icmp ne i32 %381, 0
  br i1 %382, label %385, label %383

383:                                              ; preds = %379
  %384 = load i32, ptr @PARSE_ERROR, align 4, !tbaa !25
  store i32 %384, ptr %2, align 4
  br label %718

385:                                              ; preds = %379
  br label %386

386:                                              ; preds = %409, %385
  %387 = load ptr, ptr %3, align 8, !tbaa !5
  %388 = getelementptr inbounds %struct.buzzparser_s, ptr %387, i32 0, i32 4
  call void @buzzlex_destroytok(ptr noundef %388)
  %389 = load ptr, ptr %3, align 8, !tbaa !5
  %390 = getelementptr inbounds %struct.buzzparser_s, ptr %389, i32 0, i32 3
  %391 = load ptr, ptr %390, align 8, !tbaa !15
  %392 = call ptr @buzzlex_nexttok(ptr noundef %391)
  %393 = load ptr, ptr %3, align 8, !tbaa !5
  %394 = getelementptr inbounds %struct.buzzparser_s, ptr %393, i32 0, i32 4
  store ptr %392, ptr %394, align 8, !tbaa !9
  br label %395

395:                                              ; preds = %386
  %396 = load ptr, ptr %3, align 8, !tbaa !5
  %397 = getelementptr inbounds %struct.buzzparser_s, ptr %396, i32 0, i32 4
  %398 = load ptr, ptr %397, align 8, !tbaa !9
  %399 = getelementptr inbounds %struct.buzztok_s, ptr %398, i32 0, i32 0
  %400 = load i32, ptr %399, align 8, !tbaa !12
  %401 = icmp ne i32 %400, 31
  br i1 %401, label %402, label %409

402:                                              ; preds = %395
  %403 = load ptr, ptr %3, align 8, !tbaa !5
  %404 = getelementptr inbounds %struct.buzzparser_s, ptr %403, i32 0, i32 4
  %405 = load ptr, ptr %404, align 8, !tbaa !9
  %406 = getelementptr inbounds %struct.buzztok_s, ptr %405, i32 0, i32 0
  %407 = load i32, ptr %406, align 8, !tbaa !12
  %408 = icmp eq i32 %407, 26
  br label %409

409:                                              ; preds = %402, %395
  %410 = phi i1 [ false, %395 ], [ %408, %402 ]
  br i1 %410, label %386, label %411, !llvm.loop !33

411:                                              ; preds = %409
  %412 = load ptr, ptr %3, align 8, !tbaa !5
  %413 = getelementptr inbounds %struct.buzzparser_s, ptr %412, i32 0, i32 4
  %414 = load ptr, ptr %413, align 8, !tbaa !9
  %415 = getelementptr inbounds %struct.buzztok_s, ptr %414, i32 0, i32 0
  %416 = load i32, ptr %415, align 8, !tbaa !12
  %417 = icmp eq i32 %416, 0
  br i1 %417, label %418, label %437

418:                                              ; preds = %411
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #5
  %419 = load ptr, ptr %3, align 8, !tbaa !5
  %420 = getelementptr inbounds %struct.buzzparser_s, ptr %419, i32 0, i32 9
  %421 = load ptr, ptr %420, align 8, !tbaa !28
  %422 = load ptr, ptr %3, align 8, !tbaa !5
  %423 = getelementptr inbounds %struct.buzzparser_s, ptr %422, i32 0, i32 4
  %424 = load ptr, ptr %423, align 8, !tbaa !9
  %425 = getelementptr inbounds %struct.buzztok_s, ptr %424, i32 0, i32 1
  %426 = load ptr, ptr %425, align 8, !tbaa !29
  %427 = call i32 @string_add(ptr noundef %421, ptr noundef %426)
  %428 = call i32 (ptr, ptr, ...) @asprintf(ptr noundef %11, ptr noundef @.str.47, i32 noundef %427) #5
  %429 = load ptr, ptr %3, align 8, !tbaa !5
  %430 = getelementptr inbounds %struct.buzzparser_s, ptr %429, i32 0, i32 6
  %431 = load ptr, ptr %430, align 8, !tbaa !26
  %432 = load ptr, ptr %11, align 8, !tbaa !5
  %433 = load ptr, ptr %3, align 8, !tbaa !5
  %434 = getelementptr inbounds %struct.buzzparser_s, ptr %433, i32 0, i32 4
  %435 = load ptr, ptr %434, align 8, !tbaa !9
  call void @chunk_addcode(ptr noundef %431, ptr noundef %432, ptr noundef %435)
  %436 = load ptr, ptr %11, align 8, !tbaa !5
  call void @free(ptr noundef %436) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #5
  br label %521

437:                                              ; preds = %411
  %438 = load ptr, ptr %3, align 8, !tbaa !5
  %439 = getelementptr inbounds %struct.buzzparser_s, ptr %438, i32 0, i32 4
  %440 = load ptr, ptr %439, align 8, !tbaa !9
  %441 = getelementptr inbounds %struct.buzztok_s, ptr %440, i32 0, i32 0
  %442 = load i32, ptr %441, align 8, !tbaa !12
  %443 = icmp eq i32 %442, 1
  br i1 %443, label %444, label %483

444:                                              ; preds = %437
  %445 = load ptr, ptr %3, align 8, !tbaa !5
  %446 = getelementptr inbounds %struct.buzzparser_s, ptr %445, i32 0, i32 4
  %447 = load ptr, ptr %446, align 8, !tbaa !9
  %448 = getelementptr inbounds %struct.buzztok_s, ptr %447, i32 0, i32 1
  %449 = load ptr, ptr %448, align 8, !tbaa !29
  %450 = call ptr @strchr(ptr noundef %449, i32 noundef 46) #6
  %451 = icmp ne ptr %450, null
  br i1 %451, label %452, label %467

452:                                              ; preds = %444
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #5
  %453 = load ptr, ptr %3, align 8, !tbaa !5
  %454 = getelementptr inbounds %struct.buzzparser_s, ptr %453, i32 0, i32 4
  %455 = load ptr, ptr %454, align 8, !tbaa !9
  %456 = getelementptr inbounds %struct.buzztok_s, ptr %455, i32 0, i32 1
  %457 = load ptr, ptr %456, align 8, !tbaa !29
  %458 = call i32 (ptr, ptr, ...) @asprintf(ptr noundef %12, ptr noundef @.str.48, ptr noundef %457) #5
  %459 = load ptr, ptr %3, align 8, !tbaa !5
  %460 = getelementptr inbounds %struct.buzzparser_s, ptr %459, i32 0, i32 6
  %461 = load ptr, ptr %460, align 8, !tbaa !26
  %462 = load ptr, ptr %12, align 8, !tbaa !5
  %463 = load ptr, ptr %3, align 8, !tbaa !5
  %464 = getelementptr inbounds %struct.buzzparser_s, ptr %463, i32 0, i32 4
  %465 = load ptr, ptr %464, align 8, !tbaa !9
  call void @chunk_addcode(ptr noundef %461, ptr noundef %462, ptr noundef %465)
  %466 = load ptr, ptr %12, align 8, !tbaa !5
  call void @free(ptr noundef %466) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #5
  br label %482

467:                                              ; preds = %444
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #5
  %468 = load ptr, ptr %3, align 8, !tbaa !5
  %469 = getelementptr inbounds %struct.buzzparser_s, ptr %468, i32 0, i32 4
  %470 = load ptr, ptr %469, align 8, !tbaa !9
  %471 = getelementptr inbounds %struct.buzztok_s, ptr %470, i32 0, i32 1
  %472 = load ptr, ptr %471, align 8, !tbaa !29
  %473 = call i32 (ptr, ptr, ...) @asprintf(ptr noundef %13, ptr noundef @.str.49, ptr noundef %472) #5
  %474 = load ptr, ptr %3, align 8, !tbaa !5
  %475 = getelementptr inbounds %struct.buzzparser_s, ptr %474, i32 0, i32 6
  %476 = load ptr, ptr %475, align 8, !tbaa !26
  %477 = load ptr, ptr %13, align 8, !tbaa !5
  %478 = load ptr, ptr %3, align 8, !tbaa !5
  %479 = getelementptr inbounds %struct.buzzparser_s, ptr %478, i32 0, i32 4
  %480 = load ptr, ptr %479, align 8, !tbaa !9
  call void @chunk_addcode(ptr noundef %476, ptr noundef %477, ptr noundef %480)
  %481 = load ptr, ptr %13, align 8, !tbaa !5
  call void @free(ptr noundef %481) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #5
  br label %482

482:                                              ; preds = %467, %452
  br label %520

483:                                              ; preds = %437
  %484 = load ptr, ptr @stderr, align 8, !tbaa !5
  %485 = load ptr, ptr %3, align 8, !tbaa !5
  %486 = getelementptr inbounds %struct.buzzparser_s, ptr %485, i32 0, i32 3
  %487 = load ptr, ptr %486, align 8, !tbaa !15
  %488 = getelementptr inbounds %struct.buzzdarray_s, ptr %487, i32 0, i32 0
  %489 = load ptr, ptr %488, align 8, !tbaa !18
  %490 = load ptr, ptr %3, align 8, !tbaa !5
  %491 = getelementptr inbounds %struct.buzzparser_s, ptr %490, i32 0, i32 3
  %492 = load ptr, ptr %491, align 8, !tbaa !15
  %493 = getelementptr inbounds %struct.buzzdarray_s, ptr %492, i32 0, i32 1
  %494 = load i64, ptr %493, align 8, !tbaa !20
  %495 = sub nsw i64 %494, 1
  %496 = getelementptr inbounds ptr, ptr %489, i64 %495
  %497 = load ptr, ptr %496, align 8, !tbaa !5
  %498 = getelementptr inbounds %struct.buzzlex_file_s, ptr %497, i32 0, i32 5
  %499 = load ptr, ptr %498, align 8, !tbaa !21
  %500 = load ptr, ptr %3, align 8, !tbaa !5
  %501 = getelementptr inbounds %struct.buzzparser_s, ptr %500, i32 0, i32 4
  %502 = load ptr, ptr %501, align 8, !tbaa !9
  %503 = getelementptr inbounds %struct.buzztok_s, ptr %502, i32 0, i32 2
  %504 = load i64, ptr %503, align 8, !tbaa !23
  %505 = load ptr, ptr %3, align 8, !tbaa !5
  %506 = getelementptr inbounds %struct.buzzparser_s, ptr %505, i32 0, i32 4
  %507 = load ptr, ptr %506, align 8, !tbaa !9
  %508 = getelementptr inbounds %struct.buzztok_s, ptr %507, i32 0, i32 3
  %509 = load i64, ptr %508, align 8, !tbaa !24
  %510 = load ptr, ptr %3, align 8, !tbaa !5
  %511 = getelementptr inbounds %struct.buzzparser_s, ptr %510, i32 0, i32 4
  %512 = load ptr, ptr %511, align 8, !tbaa !9
  %513 = getelementptr inbounds %struct.buzztok_s, ptr %512, i32 0, i32 0
  %514 = load i32, ptr %513, align 8, !tbaa !12
  %515 = zext i32 %514 to i64
  %516 = getelementptr inbounds [0 x ptr], ptr @buzztok_desc, i64 0, i64 %515
  %517 = load ptr, ptr %516, align 8, !tbaa !5
  %518 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %484, ptr noundef @.str.50, ptr noundef %499, i64 noundef %504, i64 noundef %509, ptr noundef %517) #5
  %519 = load i32, ptr @PARSE_ERROR, align 4, !tbaa !25
  store i32 %519, ptr %2, align 4
  br label %718

520:                                              ; preds = %482
  br label %521

521:                                              ; preds = %520, %418
  br label %522

522:                                              ; preds = %545, %521
  %523 = load ptr, ptr %3, align 8, !tbaa !5
  %524 = getelementptr inbounds %struct.buzzparser_s, ptr %523, i32 0, i32 4
  call void @buzzlex_destroytok(ptr noundef %524)
  %525 = load ptr, ptr %3, align 8, !tbaa !5
  %526 = getelementptr inbounds %struct.buzzparser_s, ptr %525, i32 0, i32 3
  %527 = load ptr, ptr %526, align 8, !tbaa !15
  %528 = call ptr @buzzlex_nexttok(ptr noundef %527)
  %529 = load ptr, ptr %3, align 8, !tbaa !5
  %530 = getelementptr inbounds %struct.buzzparser_s, ptr %529, i32 0, i32 4
  store ptr %528, ptr %530, align 8, !tbaa !9
  br label %531

531:                                              ; preds = %522
  %532 = load ptr, ptr %3, align 8, !tbaa !5
  %533 = getelementptr inbounds %struct.buzzparser_s, ptr %532, i32 0, i32 4
  %534 = load ptr, ptr %533, align 8, !tbaa !9
  %535 = getelementptr inbounds %struct.buzztok_s, ptr %534, i32 0, i32 0
  %536 = load i32, ptr %535, align 8, !tbaa !12
  %537 = icmp ne i32 %536, 31
  br i1 %537, label %538, label %545

538:                                              ; preds = %531
  %539 = load ptr, ptr %3, align 8, !tbaa !5
  %540 = getelementptr inbounds %struct.buzzparser_s, ptr %539, i32 0, i32 4
  %541 = load ptr, ptr %540, align 8, !tbaa !9
  %542 = getelementptr inbounds %struct.buzztok_s, ptr %541, i32 0, i32 0
  %543 = load i32, ptr %542, align 8, !tbaa !12
  %544 = icmp eq i32 %543, 26
  br label %545

545:                                              ; preds = %538, %531
  %546 = phi i1 [ false, %531 ], [ %544, %538 ]
  br i1 %546, label %522, label %547, !llvm.loop !34

547:                                              ; preds = %545
  %548 = load ptr, ptr %3, align 8, !tbaa !5
  %549 = call i32 @match(ptr noundef %548, i32 noundef 28)
  %550 = icmp ne i32 %549, 0
  br i1 %550, label %553, label %551

551:                                              ; preds = %547
  %552 = load i32, ptr @PARSE_ERROR, align 4, !tbaa !25
  store i32 %552, ptr %2, align 4
  br label %718

553:                                              ; preds = %547
  br label %554

554:                                              ; preds = %577, %553
  %555 = load ptr, ptr %3, align 8, !tbaa !5
  %556 = getelementptr inbounds %struct.buzzparser_s, ptr %555, i32 0, i32 4
  call void @buzzlex_destroytok(ptr noundef %556)
  %557 = load ptr, ptr %3, align 8, !tbaa !5
  %558 = getelementptr inbounds %struct.buzzparser_s, ptr %557, i32 0, i32 3
  %559 = load ptr, ptr %558, align 8, !tbaa !15
  %560 = call ptr @buzzlex_nexttok(ptr noundef %559)
  %561 = load ptr, ptr %3, align 8, !tbaa !5
  %562 = getelementptr inbounds %struct.buzzparser_s, ptr %561, i32 0, i32 4
  store ptr %560, ptr %562, align 8, !tbaa !9
  br label %563

563:                                              ; preds = %554
  %564 = load ptr, ptr %3, align 8, !tbaa !5
  %565 = getelementptr inbounds %struct.buzzparser_s, ptr %564, i32 0, i32 4
  %566 = load ptr, ptr %565, align 8, !tbaa !9
  %567 = getelementptr inbounds %struct.buzztok_s, ptr %566, i32 0, i32 0
  %568 = load i32, ptr %567, align 8, !tbaa !12
  %569 = icmp ne i32 %568, 31
  br i1 %569, label %570, label %577

570:                                              ; preds = %563
  %571 = load ptr, ptr %3, align 8, !tbaa !5
  %572 = getelementptr inbounds %struct.buzzparser_s, ptr %571, i32 0, i32 4
  %573 = load ptr, ptr %572, align 8, !tbaa !9
  %574 = getelementptr inbounds %struct.buzztok_s, ptr %573, i32 0, i32 0
  %575 = load i32, ptr %574, align 8, !tbaa !12
  %576 = icmp eq i32 %575, 26
  br label %577

577:                                              ; preds = %570, %563
  %578 = phi i1 [ false, %563 ], [ %576, %570 ]
  br i1 %578, label %554, label %579, !llvm.loop !35

579:                                              ; preds = %577
  %580 = load ptr, ptr %3, align 8, !tbaa !5
  %581 = call i32 @parse_expression(ptr noundef %580)
  %582 = icmp ne i32 %581, 0
  br i1 %582, label %585, label %583

583:                                              ; preds = %579
  %584 = load i32, ptr @PARSE_ERROR, align 4, !tbaa !25
  store i32 %584, ptr %2, align 4
  br label %718

585:                                              ; preds = %579
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #5
  %586 = call i32 (ptr, ptr, ...) @asprintf(ptr noundef %14, ptr noundef @.str.51) #5
  %587 = load ptr, ptr %3, align 8, !tbaa !5
  %588 = getelementptr inbounds %struct.buzzparser_s, ptr %587, i32 0, i32 6
  %589 = load ptr, ptr %588, align 8, !tbaa !26
  %590 = load ptr, ptr %14, align 8, !tbaa !5
  %591 = load ptr, ptr %3, align 8, !tbaa !5
  %592 = getelementptr inbounds %struct.buzzparser_s, ptr %591, i32 0, i32 4
  %593 = load ptr, ptr %592, align 8, !tbaa !9
  call void @chunk_addcode(ptr noundef %589, ptr noundef %590, ptr noundef %593)
  %594 = load ptr, ptr %14, align 8, !tbaa !5
  call void @free(ptr noundef %594) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #5
  br label %337, !llvm.loop !36

595:                                              ; preds = %337
  br label %596

596:                                              ; preds = %595, %102
  %597 = load ptr, ptr %3, align 8, !tbaa !5
  %598 = call i32 @match(ptr noundef %597, i32 noundef 21)
  %599 = icmp ne i32 %598, 0
  br i1 %599, label %602, label %600

600:                                              ; preds = %596
  %601 = load i32, ptr @PARSE_ERROR, align 4, !tbaa !25
  store i32 %601, ptr %2, align 4
  br label %718

602:                                              ; preds = %596
  br label %603

603:                                              ; preds = %626, %602
  %604 = load ptr, ptr %3, align 8, !tbaa !5
  %605 = getelementptr inbounds %struct.buzzparser_s, ptr %604, i32 0, i32 4
  call void @buzzlex_destroytok(ptr noundef %605)
  %606 = load ptr, ptr %3, align 8, !tbaa !5
  %607 = getelementptr inbounds %struct.buzzparser_s, ptr %606, i32 0, i32 3
  %608 = load ptr, ptr %607, align 8, !tbaa !15
  %609 = call ptr @buzzlex_nexttok(ptr noundef %608)
  %610 = load ptr, ptr %3, align 8, !tbaa !5
  %611 = getelementptr inbounds %struct.buzzparser_s, ptr %610, i32 0, i32 4
  store ptr %609, ptr %611, align 8, !tbaa !9
  br label %612

612:                                              ; preds = %603
  %613 = load ptr, ptr %3, align 8, !tbaa !5
  %614 = getelementptr inbounds %struct.buzzparser_s, ptr %613, i32 0, i32 4
  %615 = load ptr, ptr %614, align 8, !tbaa !9
  %616 = getelementptr inbounds %struct.buzztok_s, ptr %615, i32 0, i32 0
  %617 = load i32, ptr %616, align 8, !tbaa !12
  %618 = icmp ne i32 %617, 31
  br i1 %618, label %619, label %626

619:                                              ; preds = %612
  %620 = load ptr, ptr %3, align 8, !tbaa !5
  %621 = getelementptr inbounds %struct.buzzparser_s, ptr %620, i32 0, i32 4
  %622 = load ptr, ptr %621, align 8, !tbaa !9
  %623 = getelementptr inbounds %struct.buzztok_s, ptr %622, i32 0, i32 0
  %624 = load i32, ptr %623, align 8, !tbaa !12
  %625 = icmp eq i32 %624, 26
  br label %626

626:                                              ; preds = %619, %612
  %627 = phi i1 [ false, %612 ], [ %625, %619 ]
  br i1 %627, label %603, label %628, !llvm.loop !37

628:                                              ; preds = %626
  %629 = load i32, ptr @PARSE_OK, align 4, !tbaa !25
  store i32 %629, ptr %2, align 4
  br label %718

630:                                              ; preds = %1
  %631 = load ptr, ptr %3, align 8, !tbaa !5
  %632 = call i32 @parse_product(ptr noundef %631)
  %633 = icmp ne i32 %632, 0
  br i1 %633, label %636, label %634

634:                                              ; preds = %630
  %635 = load i32, ptr @PARSE_ERROR, align 4, !tbaa !25
  store i32 %635, ptr %2, align 4
  br label %718

636:                                              ; preds = %630
  br label %637

637:                                              ; preds = %715, %636
  %638 = load ptr, ptr %3, align 8, !tbaa !5
  %639 = getelementptr inbounds %struct.buzzparser_s, ptr %638, i32 0, i32 4
  %640 = load ptr, ptr %639, align 8, !tbaa !9
  %641 = getelementptr inbounds %struct.buzztok_s, ptr %640, i32 0, i32 0
  %642 = load i32, ptr %641, align 8, !tbaa !12
  %643 = icmp eq i32 %642, 13
  br i1 %643, label %644, label %716

644:                                              ; preds = %637
  call void @llvm.lifetime.start.p0(i64 1, ptr %15) #5
  %645 = load ptr, ptr %3, align 8, !tbaa !5
  %646 = getelementptr inbounds %struct.buzzparser_s, ptr %645, i32 0, i32 4
  %647 = load ptr, ptr %646, align 8, !tbaa !9
  %648 = getelementptr inbounds %struct.buzztok_s, ptr %647, i32 0, i32 1
  %649 = load ptr, ptr %648, align 8, !tbaa !29
  %650 = getelementptr inbounds i8, ptr %649, i64 0
  %651 = load i8, ptr %650, align 1, !tbaa !38
  store i8 %651, ptr %15, align 1, !tbaa !38
  br label %652

652:                                              ; preds = %675, %644
  %653 = load ptr, ptr %3, align 8, !tbaa !5
  %654 = getelementptr inbounds %struct.buzzparser_s, ptr %653, i32 0, i32 4
  call void @buzzlex_destroytok(ptr noundef %654)
  %655 = load ptr, ptr %3, align 8, !tbaa !5
  %656 = getelementptr inbounds %struct.buzzparser_s, ptr %655, i32 0, i32 3
  %657 = load ptr, ptr %656, align 8, !tbaa !15
  %658 = call ptr @buzzlex_nexttok(ptr noundef %657)
  %659 = load ptr, ptr %3, align 8, !tbaa !5
  %660 = getelementptr inbounds %struct.buzzparser_s, ptr %659, i32 0, i32 4
  store ptr %658, ptr %660, align 8, !tbaa !9
  br label %661

661:                                              ; preds = %652
  %662 = load ptr, ptr %3, align 8, !tbaa !5
  %663 = getelementptr inbounds %struct.buzzparser_s, ptr %662, i32 0, i32 4
  %664 = load ptr, ptr %663, align 8, !tbaa !9
  %665 = getelementptr inbounds %struct.buzztok_s, ptr %664, i32 0, i32 0
  %666 = load i32, ptr %665, align 8, !tbaa !12
  %667 = icmp ne i32 %666, 31
  br i1 %667, label %668, label %675

668:                                              ; preds = %661
  %669 = load ptr, ptr %3, align 8, !tbaa !5
  %670 = getelementptr inbounds %struct.buzzparser_s, ptr %669, i32 0, i32 4
  %671 = load ptr, ptr %670, align 8, !tbaa !9
  %672 = getelementptr inbounds %struct.buzztok_s, ptr %671, i32 0, i32 0
  %673 = load i32, ptr %672, align 8, !tbaa !12
  %674 = icmp eq i32 %673, 26
  br label %675

675:                                              ; preds = %668, %661
  %676 = phi i1 [ false, %661 ], [ %674, %668 ]
  br i1 %676, label %652, label %677, !llvm.loop !39

677:                                              ; preds = %675
  %678 = load ptr, ptr %3, align 8, !tbaa !5
  %679 = call i32 @parse_product(ptr noundef %678)
  %680 = icmp ne i32 %679, 0
  br i1 %680, label %683, label %681

681:                                              ; preds = %677
  %682 = load i32, ptr @PARSE_ERROR, align 4, !tbaa !25
  store i32 %682, ptr %2, align 4
  store i32 1, ptr %16, align 4
  br label %713

683:                                              ; preds = %677
  %684 = load i8, ptr %15, align 1, !tbaa !38
  %685 = sext i8 %684 to i32
  %686 = icmp eq i32 %685, 43
  br i1 %686, label %687, label %697

687:                                              ; preds = %683
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #5
  %688 = call i32 (ptr, ptr, ...) @asprintf(ptr noundef %17, ptr noundef @.str.52) #5
  %689 = load ptr, ptr %3, align 8, !tbaa !5
  %690 = getelementptr inbounds %struct.buzzparser_s, ptr %689, i32 0, i32 6
  %691 = load ptr, ptr %690, align 8, !tbaa !26
  %692 = load ptr, ptr %17, align 8, !tbaa !5
  %693 = load ptr, ptr %3, align 8, !tbaa !5
  %694 = getelementptr inbounds %struct.buzzparser_s, ptr %693, i32 0, i32 4
  %695 = load ptr, ptr %694, align 8, !tbaa !9
  call void @chunk_addcode(ptr noundef %691, ptr noundef %692, ptr noundef %695)
  %696 = load ptr, ptr %17, align 8, !tbaa !5
  call void @free(ptr noundef %696) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #5
  br label %712

697:                                              ; preds = %683
  %698 = load i8, ptr %15, align 1, !tbaa !38
  %699 = sext i8 %698 to i32
  %700 = icmp eq i32 %699, 45
  br i1 %700, label %701, label %711

701:                                              ; preds = %697
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #5
  %702 = call i32 (ptr, ptr, ...) @asprintf(ptr noundef %18, ptr noundef @.str.53) #5
  %703 = load ptr, ptr %3, align 8, !tbaa !5
  %704 = getelementptr inbounds %struct.buzzparser_s, ptr %703, i32 0, i32 6
  %705 = load ptr, ptr %704, align 8, !tbaa !26
  %706 = load ptr, ptr %18, align 8, !tbaa !5
  %707 = load ptr, ptr %3, align 8, !tbaa !5
  %708 = getelementptr inbounds %struct.buzzparser_s, ptr %707, i32 0, i32 4
  %709 = load ptr, ptr %708, align 8, !tbaa !9
  call void @chunk_addcode(ptr noundef %705, ptr noundef %706, ptr noundef %709)
  %710 = load ptr, ptr %18, align 8, !tbaa !5
  call void @free(ptr noundef %710) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #5
  br label %711

711:                                              ; preds = %701, %697
  br label %712

712:                                              ; preds = %711, %687
  store i32 0, ptr %16, align 4
  br label %713

713:                                              ; preds = %712, %681
  call void @llvm.lifetime.end.p0(i64 1, ptr %15) #5
  %714 = load i32, ptr %16, align 4
  switch i32 %714, label %720 [
    i32 0, label %715
    i32 1, label %718
  ]

715:                                              ; preds = %713
  br label %637, !llvm.loop !40

716:                                              ; preds = %637
  %717 = load i32, ptr @PARSE_OK, align 4, !tbaa !25
  store i32 %717, ptr %2, align 4
  br label %718

718:                                              ; preds = %716, %713, %634, %628, %600, %583, %551, %483, %383, %325, %293, %225, %65
  %719 = load i32, ptr %2, align 4
  ret i32 %719

720:                                              ; preds = %713
  unreachable
}

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

; Function Attrs: nounwind uwtable
declare dso_local i32 @parse_product(ptr noundef) #2

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 = { 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 #3 = { "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(read) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { nounwind }
attributes #6 = { 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, !6, i64 32}
!10 = !{!"buzzparser_s", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !6, i64 56, !6, i64 64, !6, i64 72, !11, i64 80}
!11 = !{!"int", !7, i64 0}
!12 = !{!13, !11, i64 0}
!13 = !{!"buzztok_s", !11, i64 0, !6, i64 8, !14, i64 16, !14, i64 24, !6, i64 32}
!14 = !{!"long", !7, i64 0}
!15 = !{!10, !6, i64 24}
!16 = distinct !{!16, !17}
!17 = !{!"llvm.loop.mustprogress"}
!18 = !{!19, !6, i64 0}
!19 = !{!"buzzdarray_s", !6, i64 0, !14, i64 8, !11, i64 16, !11, i64 20, !6, i64 24}
!20 = !{!19, !14, i64 8}
!21 = !{!22, !6, i64 40}
!22 = !{!"buzzlex_file_s", !14, i64 0, !14, i64 8, !14, i64 16, !14, i64 24, !6, i64 32, !6, i64 40}
!23 = !{!13, !14, i64 16}
!24 = !{!13, !14, i64 24}
!25 = !{!11, !11, i64 0}
!26 = !{!10, !6, i64 48}
!27 = distinct !{!27, !17}
!28 = !{!10, !6, i64 72}
!29 = !{!13, !6, i64 8}
!30 = distinct !{!30, !17}
!31 = distinct !{!31, !17}
!32 = distinct !{!32, !17}
!33 = distinct !{!33, !17}
!34 = distinct !{!34, !17}
!35 = distinct !{!35, !17}
!36 = distinct !{!36, !17}
!37 = distinct !{!37, !17}
!38 = !{!7, !7, i64 0}
!39 = distinct !{!39, !17}
!40 = distinct !{!40, !17}


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

@stderr = external local_unnamed_addr global ptr, align 8
@buzztok_desc = external local_unnamed_addr global [0 x ptr], align 8
@PARSE_ERROR = external hidden local_unnamed_addr global i32, align 4
@PARSE_OK = external hidden local_unnamed_addr global i32, align 4
@.str.44 = external hidden unnamed_addr constant [68 x i8], align 1
@.str.45 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.46 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.47 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.48 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.49 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.50 = external hidden unnamed_addr constant [69 x i8], align 1
@.str.51 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.52 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.53 = external hidden unnamed_addr constant [5 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: nounwind uwtable
declare dso_local i32 @string_add(ptr noundef, ptr noundef) local_unnamed_addr #2

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

; Function Attrs: nounwind uwtable
declare dso_local void @chunk_addcode(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

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

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

declare ptr @buzzlex_nexttok(ptr noundef) local_unnamed_addr #5

declare void @buzzlex_destroytok(ptr noundef) local_unnamed_addr #5

; Function Attrs: nounwind uwtable
define dso_local i32 @parse_expression(ptr noundef %0) local_unnamed_addr #2 {
  %2 = alloca ptr, align 8
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca ptr, align 8
  %14 = alloca ptr, align 8
  %15 = getelementptr inbounds i8, ptr %0, i64 32
  %16 = load ptr, ptr %15, align 8, !tbaa !5
  %17 = load i32, ptr %16, align 8, !tbaa !11
  %18 = icmp eq i32 %17, 20
  br i1 %18, label %.preheader192, label %209

.preheader192:                                    ; preds = %1
  %19 = getelementptr inbounds i8, ptr %0, i64 24
  br label %20

20:                                               ; preds = %.preheader192, %20
  tail call void @buzzlex_destroytok(ptr noundef nonnull %15) #7
  %21 = load ptr, ptr %19, align 8, !tbaa !14
  %22 = tail call ptr @buzzlex_nexttok(ptr noundef %21) #7
  store ptr %22, ptr %15, align 8, !tbaa !5
  %23 = load i32, ptr %22, align 8, !tbaa !11
  switch i32 %23, label %24 [
    i32 26, label %20
    i32 29, label %43
    i32 21, label %43
  ]

24:                                               ; preds = %20
  %25 = load ptr, ptr @stderr, align 8, !tbaa !15
  %26 = load ptr, ptr %19, align 8, !tbaa !14
  %27 = load ptr, ptr %26, align 8, !tbaa !16
  %28 = getelementptr inbounds i8, ptr %26, i64 8
  %29 = load i64, ptr %28, align 8, !tbaa !18
  %30 = getelementptr ptr, ptr %27, i64 %29
  %31 = getelementptr i8, ptr %30, i64 -8
  %32 = load ptr, ptr %31, align 8, !tbaa !15
  %33 = getelementptr inbounds i8, ptr %32, i64 40
  %34 = load ptr, ptr %33, align 8, !tbaa !19
  %35 = getelementptr inbounds i8, ptr %22, i64 16
  %36 = load i64, ptr %35, align 8, !tbaa !21
  %37 = getelementptr inbounds i8, ptr %22, i64 24
  %38 = load i64, ptr %37, align 8, !tbaa !22
  %39 = zext i32 %23 to i64
  %40 = getelementptr inbounds [0 x ptr], ptr @buzztok_desc, i64 0, i64 %39
  %41 = load ptr, ptr %40, align 8, !tbaa !15
  %42 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %25, ptr noundef nonnull @.str.44, ptr noundef %34, i64 noundef %36, i64 noundef %38, ptr noundef %41) #8
  br label %.critedge16

43:                                               ; preds = %20, %20
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %2) #7
  %44 = call i32 (ptr, ptr, ...) @asprintf(ptr noundef nonnull %2, ptr noundef nonnull @.str.45) #7
  %45 = getelementptr inbounds i8, ptr %0, i64 48
  %46 = load ptr, ptr %45, align 8, !tbaa !23
  %47 = load ptr, ptr %2, align 8, !tbaa !15
  %48 = load ptr, ptr %15, align 8, !tbaa !5
  call void @chunk_addcode(ptr noundef %46, ptr noundef %47, ptr noundef %48)
  %49 = load ptr, ptr %2, align 8, !tbaa !15
  call void @free(ptr noundef %49) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %2) #7
  %50 = load ptr, ptr %15, align 8, !tbaa !5
  %51 = load i32, ptr %50, align 8, !tbaa !11
  %52 = icmp eq i32 %51, 29
  br i1 %52, label %53, label %.loopexit

53:                                               ; preds = %43
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %3) #7
  %54 = call i32 (ptr, ptr, ...) @asprintf(ptr noundef nonnull %3, ptr noundef nonnull @.str.46) #7
  %55 = load ptr, ptr %45, align 8, !tbaa !23
  %56 = load ptr, ptr %3, align 8, !tbaa !15
  %57 = load ptr, ptr %15, align 8, !tbaa !5
  call void @chunk_addcode(ptr noundef %55, ptr noundef %56, ptr noundef %57)
  %58 = load ptr, ptr %3, align 8, !tbaa !15
  call void @free(ptr noundef %58) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %3) #7
  br label %59

59:                                               ; preds = %59, %53
  call void @buzzlex_destroytok(ptr noundef nonnull %15) #7
  %60 = load ptr, ptr %19, align 8, !tbaa !14
  %61 = call ptr @buzzlex_nexttok(ptr noundef %60) #7
  store ptr %61, ptr %15, align 8, !tbaa !5
  %62 = load i32, ptr %61, align 8, !tbaa !11
  switch i32 %62, label %90 [
    i32 26, label %59
    i32 0, label %63
    i32 1, label %74
  ]

63:                                               ; preds = %59
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %4) #7
  %64 = getelementptr inbounds i8, ptr %0, i64 72
  %65 = load ptr, ptr %64, align 8, !tbaa !24
  %66 = getelementptr inbounds i8, ptr %61, i64 8
  %67 = load ptr, ptr %66, align 8, !tbaa !25
  %68 = call i32 @string_add(ptr noundef %65, ptr noundef %67)
  %69 = call i32 (ptr, ptr, ...) @asprintf(ptr noundef nonnull %4, ptr noundef nonnull @.str.47, i32 noundef %68) #7
  %70 = load ptr, ptr %45, align 8, !tbaa !23
  %71 = load ptr, ptr %4, align 8, !tbaa !15
  %72 = load ptr, ptr %15, align 8, !tbaa !5
  call void @chunk_addcode(ptr noundef %70, ptr noundef %71, ptr noundef %72)
  %73 = load ptr, ptr %4, align 8, !tbaa !15
  call void @free(ptr noundef %73) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %4) #7
  br label %.preheader272

.preheader272:                                    ; preds = %84, %78, %63
  br label %109

74:                                               ; preds = %59
  %75 = getelementptr inbounds i8, ptr %61, i64 8
  %76 = load ptr, ptr %75, align 8, !tbaa !25
  %77 = call ptr @strchr(ptr noundef nonnull dereferenceable(1) %76, i32 noundef 46) #9
  %.not162 = icmp eq ptr %77, null
  br i1 %.not162, label %84, label %78

78:                                               ; preds = %74
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %5) #7
  %79 = call i32 (ptr, ptr, ...) @asprintf(ptr noundef nonnull %5, ptr noundef nonnull @.str.48, ptr noundef %76) #7
  %80 = load ptr, ptr %45, align 8, !tbaa !23
  %81 = load ptr, ptr %5, align 8, !tbaa !15
  %82 = load ptr, ptr %15, align 8, !tbaa !5
  call void @chunk_addcode(ptr noundef %80, ptr noundef %81, ptr noundef %82)
  %83 = load ptr, ptr %5, align 8, !tbaa !15
  call void @free(ptr noundef %83) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %5) #7
  br label %.preheader272

84:                                               ; preds = %74
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %6) #7
  %85 = call i32 (ptr, ptr, ...) @asprintf(ptr noundef nonnull %6, ptr noundef nonnull @.str.49, ptr noundef %76) #7
  %86 = load ptr, ptr %45, align 8, !tbaa !23
  %87 = load ptr, ptr %6, align 8, !tbaa !15
  %88 = load ptr, ptr %15, align 8, !tbaa !5
  call void @chunk_addcode(ptr noundef %86, ptr noundef %87, ptr noundef %88)
  %89 = load ptr, ptr %6, align 8, !tbaa !15
  call void @free(ptr noundef %89) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #7
  br label %.preheader272

90:                                               ; preds = %59
  %91 = load ptr, ptr @stderr, align 8, !tbaa !15
  %92 = load ptr, ptr %19, align 8, !tbaa !14
  %93 = load ptr, ptr %92, align 8, !tbaa !16
  %94 = getelementptr inbounds i8, ptr %92, i64 8
  %95 = load i64, ptr %94, align 8, !tbaa !18
  %96 = getelementptr ptr, ptr %93, i64 %95
  %97 = getelementptr i8, ptr %96, i64 -8
  %98 = load ptr, ptr %97, align 8, !tbaa !15
  %99 = getelementptr inbounds i8, ptr %98, i64 40
  %100 = load ptr, ptr %99, align 8, !tbaa !19
  %101 = getelementptr inbounds i8, ptr %61, i64 16
  %102 = load i64, ptr %101, align 8, !tbaa !21
  %103 = getelementptr inbounds i8, ptr %61, i64 24
  %104 = load i64, ptr %103, align 8, !tbaa !22
  %105 = zext i32 %62 to i64
  %106 = getelementptr inbounds [0 x ptr], ptr @buzztok_desc, i64 0, i64 %105
  %107 = load ptr, ptr %106, align 8, !tbaa !15
  %108 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %91, ptr noundef nonnull @.str.50, ptr noundef %100, i64 noundef %102, i64 noundef %104, ptr noundef %107) #8
  br label %.critedge16

109:                                              ; preds = %.preheader272, %109
  call void @buzzlex_destroytok(ptr noundef nonnull %15) #7
  %110 = load ptr, ptr %19, align 8, !tbaa !14
  %111 = call ptr @buzzlex_nexttok(ptr noundef %110) #7
  store ptr %111, ptr %15, align 8, !tbaa !5
  %112 = load i32, ptr %111, align 8, !tbaa !11
  %cond178 = icmp eq i32 %112, 26
  br i1 %cond178, label %109, label %.critedge4

.critedge4:                                       ; preds = %109
  %113 = call i32 @match(ptr noundef nonnull %0, i32 noundef 28)
  %.not164 = icmp eq i32 %113, 0
  br i1 %.not164, label %.critedge16, label %.preheader191

.preheader191:                                    ; preds = %.critedge4, %.preheader191
  call void @buzzlex_destroytok(ptr noundef nonnull %15) #7
  %114 = load ptr, ptr %19, align 8, !tbaa !14
  %115 = call ptr @buzzlex_nexttok(ptr noundef %114) #7
  store ptr %115, ptr %15, align 8, !tbaa !5
  %116 = load i32, ptr %115, align 8, !tbaa !11
  %cond179 = icmp eq i32 %116, 26
  br i1 %cond179, label %.preheader191, label %.critedge6

.critedge6:                                       ; preds = %.preheader191
  %117 = call i32 @parse_expression(ptr noundef nonnull %0)
  %.not166 = icmp eq i32 %117, 0
  br i1 %.not166, label %.critedge16, label %118

118:                                              ; preds = %.critedge6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %7) #7
  %119 = call i32 (ptr, ptr, ...) @asprintf(ptr noundef nonnull %7, ptr noundef nonnull @.str.51) #7
  %120 = load ptr, ptr %45, align 8, !tbaa !23
  %121 = load ptr, ptr %7, align 8, !tbaa !15
  %122 = load ptr, ptr %15, align 8, !tbaa !5
  call void @chunk_addcode(ptr noundef %120, ptr noundef %121, ptr noundef %122)
  %123 = load ptr, ptr %7, align 8, !tbaa !15
  call void @free(ptr noundef %123) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #7
  %124 = load ptr, ptr %15, align 8, !tbaa !5
  %125 = load i32, ptr %124, align 8, !tbaa !11
  %126 = icmp eq i32 %125, 27
  br i1 %126, label %.lr.ph213, label %.loopexit

.lr.ph213:                                        ; preds = %118
  %127 = getelementptr inbounds i8, ptr %0, i64 72
  br label %128

128:                                              ; preds = %.lr.ph213, %196
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %8) #7
  %129 = call i32 (ptr, ptr, ...) @asprintf(ptr noundef nonnull %8, ptr noundef nonnull @.str.46) #7
  %130 = load ptr, ptr %45, align 8, !tbaa !23
  %131 = load ptr, ptr %8, align 8, !tbaa !15
  %132 = load ptr, ptr %15, align 8, !tbaa !5
  call void @chunk_addcode(ptr noundef %130, ptr noundef %131, ptr noundef %132)
  %133 = load ptr, ptr %8, align 8, !tbaa !15
  call void @free(ptr noundef %133) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #7
  br label %134

134:                                              ; preds = %134, %128
  call void @buzzlex_destroytok(ptr noundef nonnull %15) #7
  %135 = load ptr, ptr %19, align 8, !tbaa !14
  %136 = call ptr @buzzlex_nexttok(ptr noundef %135) #7
  store ptr %136, ptr %15, align 8, !tbaa !5
  %137 = load i32, ptr %136, align 8, !tbaa !11
  %cond180 = icmp eq i32 %137, 26
  br i1 %cond180, label %134, label %.critedge8

.critedge8:                                       ; preds = %134
  %138 = call i32 @match(ptr noundef nonnull %0, i32 noundef 29)
  %.not170 = icmp eq i32 %138, 0
  br i1 %.not170, label %.critedge16, label %.preheader189

.preheader189:                                    ; preds = %.critedge8, %.preheader189
  call void @buzzlex_destroytok(ptr noundef nonnull %15) #7
  %139 = load ptr, ptr %19, align 8, !tbaa !14
  %140 = call ptr @buzzlex_nexttok(ptr noundef %139) #7
  store ptr %140, ptr %15, align 8, !tbaa !5
  %141 = load i32, ptr %140, align 8, !tbaa !11
  switch i32 %141, label %168 [
    i32 26, label %.preheader189
    i32 0, label %142
    i32 1, label %152
  ]

142:                                              ; preds = %.preheader189
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %9) #7
  %143 = load ptr, ptr %127, align 8, !tbaa !24
  %144 = getelementptr inbounds i8, ptr %140, i64 8
  %145 = load ptr, ptr %144, align 8, !tbaa !25
  %146 = call i32 @string_add(ptr noundef %143, ptr noundef %145)
  %147 = call i32 (ptr, ptr, ...) @asprintf(ptr noundef nonnull %9, ptr noundef nonnull @.str.47, i32 noundef %146) #7
  %148 = load ptr, ptr %45, align 8, !tbaa !23
  %149 = load ptr, ptr %9, align 8, !tbaa !15
  %150 = load ptr, ptr %15, align 8, !tbaa !5
  call void @chunk_addcode(ptr noundef %148, ptr noundef %149, ptr noundef %150)
  %151 = load ptr, ptr %9, align 8, !tbaa !15
  call void @free(ptr noundef %151) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #7
  br label %.preheader265

.preheader265:                                    ; preds = %162, %156, %142
  br label %187

152:                                              ; preds = %.preheader189
  %153 = getelementptr inbounds i8, ptr %140, i64 8
  %154 = load ptr, ptr %153, align 8, !tbaa !25
  %155 = call ptr @strchr(ptr noundef nonnull dereferenceable(1) %154, i32 noundef 46) #9
  %.not172 = icmp eq ptr %155, null
  br i1 %.not172, label %162, label %156

156:                                              ; preds = %152
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %10) #7
  %157 = call i32 (ptr, ptr, ...) @asprintf(ptr noundef nonnull %10, ptr noundef nonnull @.str.48, ptr noundef %154) #7
  %158 = load ptr, ptr %45, align 8, !tbaa !23
  %159 = load ptr, ptr %10, align 8, !tbaa !15
  %160 = load ptr, ptr %15, align 8, !tbaa !5
  call void @chunk_addcode(ptr noundef %158, ptr noundef %159, ptr noundef %160)
  %161 = load ptr, ptr %10, align 8, !tbaa !15
  call void @free(ptr noundef %161) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #7
  br label %.preheader265

162:                                              ; preds = %152
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %11) #7
  %163 = call i32 (ptr, ptr, ...) @asprintf(ptr noundef nonnull %11, ptr noundef nonnull @.str.49, ptr noundef %154) #7
  %164 = load ptr, ptr %45, align 8, !tbaa !23
  %165 = load ptr, ptr %11, align 8, !tbaa !15
  %166 = load ptr, ptr %15, align 8, !tbaa !5
  call void @chunk_addcode(ptr noundef %164, ptr noundef %165, ptr noundef %166)
  %167 = load ptr, ptr %11, align 8, !tbaa !15
  call void @free(ptr noundef %167) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #7
  br label %.preheader265

168:                                              ; preds = %.preheader189
  %169 = load ptr, ptr @stderr, align 8, !tbaa !15
  %170 = load ptr, ptr %19, align 8, !tbaa !14
  %171 = load ptr, ptr %170, align 8, !tbaa !16
  %172 = getelementptr inbounds i8, ptr %170, i64 8
  %173 = load i64, ptr %172, align 8, !tbaa !18
  %174 = getelementptr ptr, ptr %171, i64 %173
  %175 = getelementptr i8, ptr %174, i64 -8
  %176 = load ptr, ptr %175, align 8, !tbaa !15
  %177 = getelementptr inbounds i8, ptr %176, i64 40
  %178 = load ptr, ptr %177, align 8, !tbaa !19
  %179 = getelementptr inbounds i8, ptr %140, i64 16
  %180 = load i64, ptr %179, align 8, !tbaa !21
  %181 = getelementptr inbounds i8, ptr %140, i64 24
  %182 = load i64, ptr %181, align 8, !tbaa !22
  %183 = zext i32 %141 to i64
  %184 = getelementptr inbounds [0 x ptr], ptr @buzztok_desc, i64 0, i64 %183
  %185 = load ptr, ptr %184, align 8, !tbaa !15
  %186 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %169, ptr noundef nonnull @.str.50, ptr noundef %178, i64 noundef %180, i64 noundef %182, ptr noundef %185) #8
  br label %.critedge16

187:                                              ; preds = %.preheader265, %187
  call void @buzzlex_destroytok(ptr noundef nonnull %15) #7
  %188 = load ptr, ptr %19, align 8, !tbaa !14
  %189 = call ptr @buzzlex_nexttok(ptr noundef %188) #7
  store ptr %189, ptr %15, align 8, !tbaa !5
  %190 = load i32, ptr %189, align 8, !tbaa !11
  %cond182 = icmp eq i32 %190, 26
  br i1 %cond182, label %187, label %.critedge12

.critedge12:                                      ; preds = %187
  %191 = call i32 @match(ptr noundef nonnull %0, i32 noundef 28)
  %.not174 = icmp eq i32 %191, 0
  br i1 %.not174, label %.critedge16, label %.preheader188

.preheader188:                                    ; preds = %.critedge12, %.preheader188
  call void @buzzlex_destroytok(ptr noundef nonnull %15) #7
  %192 = load ptr, ptr %19, align 8, !tbaa !14
  %193 = call ptr @buzzlex_nexttok(ptr noundef %192) #7
  store ptr %193, ptr %15, align 8, !tbaa !5
  %194 = load i32, ptr %193, align 8, !tbaa !11
  %cond183 = icmp eq i32 %194, 26
  br i1 %cond183, label %.preheader188, label %.critedge14

.critedge14:                                      ; preds = %.preheader188
  %195 = call i32 @parse_expression(ptr noundef nonnull %0)
  %.not176 = icmp eq i32 %195, 0
  br i1 %.not176, label %.critedge16, label %196

196:                                              ; preds = %.critedge14
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %12) #7
  %197 = call i32 (ptr, ptr, ...) @asprintf(ptr noundef nonnull %12, ptr noundef nonnull @.str.51) #7
  %198 = load ptr, ptr %45, align 8, !tbaa !23
  %199 = load ptr, ptr %12, align 8, !tbaa !15
  %200 = load ptr, ptr %15, align 8, !tbaa !5
  call void @chunk_addcode(ptr noundef %198, ptr noundef %199, ptr noundef %200)
  %201 = load ptr, ptr %12, align 8, !tbaa !15
  call void @free(ptr noundef %201) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #7
  %202 = load ptr, ptr %15, align 8, !tbaa !5
  %203 = load i32, ptr %202, align 8, !tbaa !11
  %204 = icmp eq i32 %203, 27
  br i1 %204, label %128, label %.loopexit, !llvm.loop !26

.loopexit:                                        ; preds = %196, %118, %43
  %205 = call i32 @match(ptr noundef nonnull %0, i32 noundef 21)
  %.not167 = icmp eq i32 %205, 0
  br i1 %.not167, label %.critedge16, label %.preheader

.preheader:                                       ; preds = %.loopexit, %.preheader
  call void @buzzlex_destroytok(ptr noundef nonnull %15) #7
  %206 = load ptr, ptr %19, align 8, !tbaa !14
  %207 = call ptr @buzzlex_nexttok(ptr noundef %206) #7
  store ptr %207, ptr %15, align 8, !tbaa !5
  %208 = load i32, ptr %207, align 8, !tbaa !11
  %cond184 = icmp eq i32 %208, 26
  br i1 %cond184, label %.preheader, label %.critedge16

209:                                              ; preds = %1
  %210 = tail call i32 @parse_product(ptr noundef nonnull %0)
  %.not = icmp eq i32 %210, 0
  br i1 %.not, label %.critedge16, label %.preheader193

.preheader193:                                    ; preds = %209
  %211 = load ptr, ptr %15, align 8, !tbaa !5
  %212 = load i32, ptr %211, align 8, !tbaa !11
  %213 = icmp eq i32 %212, 13
  br i1 %213, label %.lr.ph, label %.critedge16

.lr.ph:                                           ; preds = %.preheader193
  %214 = getelementptr inbounds i8, ptr %0, i64 24
  %215 = getelementptr inbounds i8, ptr %0, i64 48
  br label %216

216:                                              ; preds = %.lr.ph, %239
  %217 = phi ptr [ %211, %.lr.ph ], [ %240, %239 ]
  %218 = getelementptr inbounds i8, ptr %217, i64 8
  %219 = load ptr, ptr %218, align 8, !tbaa !25
  %220 = load i8, ptr %219, align 1, !tbaa !28
  br label %221

221:                                              ; preds = %221, %216
  call void @buzzlex_destroytok(ptr noundef nonnull %15) #7
  %222 = load ptr, ptr %214, align 8, !tbaa !14
  %223 = call ptr @buzzlex_nexttok(ptr noundef %222) #7
  store ptr %223, ptr %15, align 8, !tbaa !5
  %224 = load i32, ptr %223, align 8, !tbaa !11
  %cond185 = icmp eq i32 %224, 26
  br i1 %cond185, label %221, label %.critedge18

.critedge18:                                      ; preds = %221
  %225 = call i32 @parse_product(ptr noundef nonnull %0)
  %.not157 = icmp eq i32 %225, 0
  br i1 %.not157, label %.critedge16, label %226

226:                                              ; preds = %.critedge18
  switch i8 %220, label %239 [
    i8 43, label %227
    i8 45, label %233
  ]

227:                                              ; preds = %226
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %13) #7
  %228 = call i32 (ptr, ptr, ...) @asprintf(ptr noundef nonnull %13, ptr noundef nonnull @.str.52) #7
  %229 = load ptr, ptr %215, align 8, !tbaa !23
  %230 = load ptr, ptr %13, align 8, !tbaa !15
  %231 = load ptr, ptr %15, align 8, !tbaa !5
  call void @chunk_addcode(ptr noundef %229, ptr noundef %230, ptr noundef %231)
  %232 = load ptr, ptr %13, align 8, !tbaa !15
  call void @free(ptr noundef %232) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #7
  br label %239

233:                                              ; preds = %226
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %14) #7
  %234 = call i32 (ptr, ptr, ...) @asprintf(ptr noundef nonnull %14, ptr noundef nonnull @.str.53) #7
  %235 = load ptr, ptr %215, align 8, !tbaa !23
  %236 = load ptr, ptr %14, align 8, !tbaa !15
  %237 = load ptr, ptr %15, align 8, !tbaa !5
  call void @chunk_addcode(ptr noundef %235, ptr noundef %236, ptr noundef %237)
  %238 = load ptr, ptr %14, align 8, !tbaa !15
  call void @free(ptr noundef %238) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #7
  br label %239

239:                                              ; preds = %227, %233, %226
  %240 = load ptr, ptr %15, align 8, !tbaa !5
  %241 = load i32, ptr %240, align 8, !tbaa !11
  %242 = icmp eq i32 %241, 13
  br i1 %242, label %216, label %.critedge16

.critedge16:                                      ; preds = %.critedge18, %239, %.critedge14, %.critedge12, %.critedge8, %.preheader, %.preheader193, %209, %.loopexit, %.critedge6, %.critedge4, %168, %90, %24
  %.2.in = phi ptr [ @PARSE_ERROR, %24 ], [ @PARSE_ERROR, %168 ], [ @PARSE_ERROR, %90 ], [ @PARSE_ERROR, %.critedge4 ], [ @PARSE_ERROR, %.critedge6 ], [ @PARSE_ERROR, %.loopexit ], [ @PARSE_ERROR, %209 ], [ @PARSE_OK, %.preheader193 ], [ @PARSE_OK, %.preheader ], [ @PARSE_ERROR, %.critedge8 ], [ @PARSE_ERROR, %.critedge12 ], [ @PARSE_ERROR, %.critedge14 ], [ @PARSE_ERROR, %.critedge18 ], [ @PARSE_OK, %239 ]
  %.2 = load i32, ptr %.2.in, align 4, !tbaa !29
  ret i32 %.2
}

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

; Function Attrs: nounwind uwtable
declare dso_local i32 @parse_product(ptr noundef) local_unnamed_addr #2

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 = { 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 #3 = { 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 #4 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { "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 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 #7 = { nounwind }
attributes #8 = { cold nounwind }
attributes #9 = { 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, !7, i64 32}
!6 = !{!"buzzparser_s", !7, i64 0, !7, i64 8, !7, i64 16, !7, i64 24, !7, i64 32, !7, i64 40, !7, i64 48, !7, i64 56, !7, i64 64, !7, i64 72, !10, i64 80}
!7 = !{!"any pointer", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"int", !8, i64 0}
!11 = !{!12, !10, i64 0}
!12 = !{!"buzztok_s", !10, i64 0, !7, i64 8, !13, i64 16, !13, i64 24, !7, i64 32}
!13 = !{!"long", !8, i64 0}
!14 = !{!6, !7, i64 24}
!15 = !{!7, !7, i64 0}
!16 = !{!17, !7, i64 0}
!17 = !{!"buzzdarray_s", !7, i64 0, !13, i64 8, !10, i64 16, !10, i64 20, !7, i64 24}
!18 = !{!17, !13, i64 8}
!19 = !{!20, !7, i64 40}
!20 = !{!"buzzlex_file_s", !13, i64 0, !13, i64 8, !13, i64 16, !13, i64 24, !7, i64 32, !7, i64 40}
!21 = !{!12, !13, i64 16}
!22 = !{!12, !13, i64 24}
!23 = !{!6, !7, i64 48}
!24 = !{!6, !7, i64 72}
!25 = !{!12, !7, i64 8}
!26 = distinct !{!26, !27}
!27 = !{!"llvm.loop.mustprogress"}
!28 = !{!8, !8, i64 0}
!29 = !{!10, !10, i64 0}


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