; LLVM IR from askforalfred/alfred :: gen/ff_planner (parse)

; 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._TypedList = type { ptr, ptr, i32, ptr }
%struct._TokenList = type { ptr, ptr }
%struct._TypedListList = type { ptr, ptr, ptr }
%struct._PlOperator = type { ptr, i8, i32, ptr, ptr, ptr, ptr, ptr }
%struct._FactList = type { ptr, ptr }

@lnum_types = external dso_local global i32, align 4
@gparse_types = external global ptr, align 8
@ltype_names = external dso_local global [50 x ptr], align 16
@.str = external hidden unnamed_addr constant [7 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [2 x i8], align 1
@gparse_constants = external global ptr, align 8
@gparse_objects = external global ptr, align 8
@gparse_predicates = external global ptr, align 8
@gparse_functions = external global ptr, align 8
@gorig_goal_facts = external global ptr, align 8
@gloaded_ops = external global ptr, align 8
@lnum_either_ty = external dso_local global [50 x i32], align 16
@.str.2 = external hidden unnamed_addr constant [8 x i8], align 1
@leither_ty = external dso_local global [50 x [50 x i32]], align 16
@gorig_constant_list = external global ptr, align 8
@gpredicates_and_types = external global ptr, align 8
@gfunctions_and_types = external global ptr, align 8

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

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

declare ptr @new_Token(i32 noundef) #2

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

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

declare ptr @new_TokenList() #2

; Function Attrs: nounwind uwtable
define dso_local void @build_orig_constant_list() #0 {
  %1 = alloca ptr, align 8
  %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 i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca [50 x [50 x i8]], align 16
  %14 = alloca ptr, align 8
  %15 = alloca ptr, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %1) #5
  store ptr null, ptr %1, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %2) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %3) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %4) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %5) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %6) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #5
  call void @llvm.lifetime.start.p0(i64 2500, ptr %13) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #5
  store i32 0, ptr @lnum_types, align 4, !tbaa !9
  %16 = load ptr, ptr @gparse_types, align 8, !tbaa !5
  store ptr %16, ptr %2, align 8, !tbaa !5
  br label %17

17:                                               ; preds = %92, %0
  %18 = load ptr, ptr %2, align 8, !tbaa !5
  %19 = icmp ne ptr %18, null
  br i1 %19, label %20, label %96

20:                                               ; preds = %17
  %21 = load ptr, ptr %2, align 8, !tbaa !5
  %22 = getelementptr inbounds %struct._TypedList, ptr %21, i32 0, i32 0
  %23 = load ptr, ptr %22, align 8, !tbaa !11
  %24 = call i32 @get_type(ptr noundef %23)
  %25 = icmp eq i32 %24, -1
  br i1 %25, label %26, label %35

26:                                               ; preds = %20
  %27 = load ptr, ptr %2, align 8, !tbaa !5
  %28 = getelementptr inbounds %struct._TypedList, ptr %27, i32 0, i32 0
  %29 = load ptr, ptr %28, align 8, !tbaa !11
  %30 = call ptr @copy_Token(ptr noundef %29)
  %31 = load i32, ptr @lnum_types, align 4, !tbaa !9
  %32 = add nsw i32 %31, 1
  store i32 %32, ptr @lnum_types, align 4, !tbaa !9
  %33 = sext i32 %31 to i64
  %34 = getelementptr inbounds [50 x ptr], ptr @ltype_names, i64 0, i64 %33
  store ptr %30, ptr %34, align 8, !tbaa !5
  br label %35

35:                                               ; preds = %26, %20
  %36 = load ptr, ptr %2, align 8, !tbaa !5
  %37 = getelementptr inbounds %struct._TypedList, ptr %36, i32 0, i32 1
  %38 = load ptr, ptr %37, align 8, !tbaa !13
  %39 = getelementptr inbounds %struct._TokenList, ptr %38, i32 0, i32 1
  %40 = load ptr, ptr %39, align 8, !tbaa !14
  %41 = icmp ne ptr %40, null
  br i1 %41, label %42, label %65

42:                                               ; preds = %35
  %43 = call ptr @new_Token(i32 noundef 256)
  store ptr %43, ptr %1, align 8, !tbaa !5
  %44 = load ptr, ptr %1, align 8, !tbaa !5
  %45 = call ptr @strcpy(ptr noundef %44, ptr noundef @.str) #5
  %46 = load ptr, ptr %2, align 8, !tbaa !5
  %47 = getelementptr inbounds %struct._TypedList, ptr %46, i32 0, i32 1
  %48 = load ptr, ptr %47, align 8, !tbaa !13
  store ptr %48, ptr %4, align 8, !tbaa !5
  br label %49

49:                                               ; preds = %60, %42
  %50 = load ptr, ptr %4, align 8, !tbaa !5
  %51 = icmp ne ptr %50, null
  br i1 %51, label %52, label %64

52:                                               ; preds = %49
  %53 = load ptr, ptr %1, align 8, !tbaa !5
  %54 = call ptr @strcat(ptr noundef %53, ptr noundef @.str.1) #5
  %55 = load ptr, ptr %1, align 8, !tbaa !5
  %56 = load ptr, ptr %4, align 8, !tbaa !5
  %57 = getelementptr inbounds %struct._TokenList, ptr %56, i32 0, i32 0
  %58 = load ptr, ptr %57, align 8, !tbaa !16
  %59 = call ptr @strcat(ptr noundef %55, ptr noundef %58) #5
  br label %60

60:                                               ; preds = %52
  %61 = load ptr, ptr %4, align 8, !tbaa !5
  %62 = getelementptr inbounds %struct._TokenList, ptr %61, i32 0, i32 1
  %63 = load ptr, ptr %62, align 8, !tbaa !14
  store ptr %63, ptr %4, align 8, !tbaa !5
  br label %49, !llvm.loop !17

64:                                               ; preds = %49
  br label %72

65:                                               ; preds = %35
  %66 = load ptr, ptr %2, align 8, !tbaa !5
  %67 = getelementptr inbounds %struct._TypedList, ptr %66, i32 0, i32 1
  %68 = load ptr, ptr %67, align 8, !tbaa !13
  %69 = getelementptr inbounds %struct._TokenList, ptr %68, i32 0, i32 0
  %70 = load ptr, ptr %69, align 8, !tbaa !16
  %71 = call ptr @copy_Token(ptr noundef %70)
  store ptr %71, ptr %1, align 8, !tbaa !5
  br label %72

72:                                               ; preds = %65, %64
  %73 = load ptr, ptr %1, align 8, !tbaa !5
  %74 = call i32 @get_type(ptr noundef %73)
  store i32 %74, ptr %11, align 4, !tbaa !9
  %75 = icmp eq i32 %74, -1
  br i1 %75, label %76, label %86

76:                                               ; preds = %72
  %77 = load i32, ptr @lnum_types, align 4, !tbaa !9
  %78 = load ptr, ptr %2, align 8, !tbaa !5
  %79 = getelementptr inbounds %struct._TypedList, ptr %78, i32 0, i32 2
  store i32 %77, ptr %79, align 8, !tbaa !19
  %80 = load ptr, ptr %1, align 8, !tbaa !5
  %81 = call ptr @copy_Token(ptr noundef %80)
  %82 = load i32, ptr @lnum_types, align 4, !tbaa !9
  %83 = add nsw i32 %82, 1
  store i32 %83, ptr @lnum_types, align 4, !tbaa !9
  %84 = sext i32 %82 to i64
  %85 = getelementptr inbounds [50 x ptr], ptr @ltype_names, i64 0, i64 %84
  store ptr %81, ptr %85, align 8, !tbaa !5
  br label %90

86:                                               ; preds = %72
  %87 = load i32, ptr %11, align 4, !tbaa !9
  %88 = load ptr, ptr %2, align 8, !tbaa !5
  %89 = getelementptr inbounds %struct._TypedList, ptr %88, i32 0, i32 2
  store i32 %87, ptr %89, align 8, !tbaa !19
  br label %90

90:                                               ; preds = %86, %76
  %91 = load ptr, ptr %1, align 8, !tbaa !5
  call void @free(ptr noundef %91) #5
  store ptr null, ptr %1, align 8, !tbaa !5
  br label %92

92:                                               ; preds = %90
  %93 = load ptr, ptr %2, align 8, !tbaa !5
  %94 = getelementptr inbounds %struct._TypedList, ptr %93, i32 0, i32 3
  %95 = load ptr, ptr %94, align 8, !tbaa !20
  store ptr %95, ptr %2, align 8, !tbaa !5
  br label %17, !llvm.loop !21

96:                                               ; preds = %17
  %97 = load ptr, ptr @gparse_constants, align 8, !tbaa !5
  store ptr %97, ptr %2, align 8, !tbaa !5
  br label %98

98:                                               ; preds = %158, %96
  %99 = load ptr, ptr %2, align 8, !tbaa !5
  %100 = icmp ne ptr %99, null
  br i1 %100, label %101, label %162

101:                                              ; preds = %98
  %102 = load ptr, ptr %2, align 8, !tbaa !5
  %103 = getelementptr inbounds %struct._TypedList, ptr %102, i32 0, i32 1
  %104 = load ptr, ptr %103, align 8, !tbaa !13
  %105 = getelementptr inbounds %struct._TokenList, ptr %104, i32 0, i32 1
  %106 = load ptr, ptr %105, align 8, !tbaa !14
  %107 = icmp ne ptr %106, null
  br i1 %107, label %108, label %131

108:                                              ; preds = %101
  %109 = call ptr @new_Token(i32 noundef 256)
  store ptr %109, ptr %1, align 8, !tbaa !5
  %110 = load ptr, ptr %1, align 8, !tbaa !5
  %111 = call ptr @strcpy(ptr noundef %110, ptr noundef @.str) #5
  %112 = load ptr, ptr %2, align 8, !tbaa !5
  %113 = getelementptr inbounds %struct._TypedList, ptr %112, i32 0, i32 1
  %114 = load ptr, ptr %113, align 8, !tbaa !13
  store ptr %114, ptr %4, align 8, !tbaa !5
  br label %115

115:                                              ; preds = %126, %108
  %116 = load ptr, ptr %4, align 8, !tbaa !5
  %117 = icmp ne ptr %116, null
  br i1 %117, label %118, label %130

118:                                              ; preds = %115
  %119 = load ptr, ptr %1, align 8, !tbaa !5
  %120 = call ptr @strcat(ptr noundef %119, ptr noundef @.str.1) #5
  %121 = load ptr, ptr %1, align 8, !tbaa !5
  %122 = load ptr, ptr %4, align 8, !tbaa !5
  %123 = getelementptr inbounds %struct._TokenList, ptr %122, i32 0, i32 0
  %124 = load ptr, ptr %123, align 8, !tbaa !16
  %125 = call ptr @strcat(ptr noundef %121, ptr noundef %124) #5
  br label %126

126:                                              ; preds = %118
  %127 = load ptr, ptr %4, align 8, !tbaa !5
  %128 = getelementptr inbounds %struct._TokenList, ptr %127, i32 0, i32 1
  %129 = load ptr, ptr %128, align 8, !tbaa !14
  store ptr %129, ptr %4, align 8, !tbaa !5
  br label %115, !llvm.loop !22

130:                                              ; preds = %115
  br label %138

131:                                              ; preds = %101
  %132 = load ptr, ptr %2, align 8, !tbaa !5
  %133 = getelementptr inbounds %struct._TypedList, ptr %132, i32 0, i32 1
  %134 = load ptr, ptr %133, align 8, !tbaa !13
  %135 = getelementptr inbounds %struct._TokenList, ptr %134, i32 0, i32 0
  %136 = load ptr, ptr %135, align 8, !tbaa !16
  %137 = call ptr @copy_Token(ptr noundef %136)
  store ptr %137, ptr %1, align 8, !tbaa !5
  br label %138

138:                                              ; preds = %131, %130
  %139 = load ptr, ptr %1, align 8, !tbaa !5
  %140 = call i32 @get_type(ptr noundef %139)
  store i32 %140, ptr %11, align 4, !tbaa !9
  %141 = icmp eq i32 %140, -1
  br i1 %141, label %142, label %152

142:                                              ; preds = %138
  %143 = load i32, ptr @lnum_types, align 4, !tbaa !9
  %144 = load ptr, ptr %2, align 8, !tbaa !5
  %145 = getelementptr inbounds %struct._TypedList, ptr %144, i32 0, i32 2
  store i32 %143, ptr %145, align 8, !tbaa !19
  %146 = load ptr, ptr %1, align 8, !tbaa !5
  %147 = call ptr @copy_Token(ptr noundef %146)
  %148 = load i32, ptr @lnum_types, align 4, !tbaa !9
  %149 = add nsw i32 %148, 1
  store i32 %149, ptr @lnum_types, align 4, !tbaa !9
  %150 = sext i32 %148 to i64
  %151 = getelementptr inbounds [50 x ptr], ptr @ltype_names, i64 0, i64 %150
  store ptr %147, ptr %151, align 8, !tbaa !5
  br label %156

152:                                              ; preds = %138
  %153 = load i32, ptr %11, align 4, !tbaa !9
  %154 = load ptr, ptr %2, align 8, !tbaa !5
  %155 = getelementptr inbounds %struct._TypedList, ptr %154, i32 0, i32 2
  store i32 %153, ptr %155, align 8, !tbaa !19
  br label %156

156:                                              ; preds = %152, %142
  %157 = load ptr, ptr %1, align 8, !tbaa !5
  call void @free(ptr noundef %157) #5
  store ptr null, ptr %1, align 8, !tbaa !5
  br label %158

158:                                              ; preds = %156
  %159 = load ptr, ptr %2, align 8, !tbaa !5
  %160 = getelementptr inbounds %struct._TypedList, ptr %159, i32 0, i32 3
  %161 = load ptr, ptr %160, align 8, !tbaa !20
  store ptr %161, ptr %2, align 8, !tbaa !5
  br label %98, !llvm.loop !23

162:                                              ; preds = %98
  %163 = load ptr, ptr @gparse_objects, align 8, !tbaa !5
  store ptr %163, ptr %2, align 8, !tbaa !5
  br label %164

164:                                              ; preds = %224, %162
  %165 = load ptr, ptr %2, align 8, !tbaa !5
  %166 = icmp ne ptr %165, null
  br i1 %166, label %167, label %228

167:                                              ; preds = %164
  %168 = load ptr, ptr %2, align 8, !tbaa !5
  %169 = getelementptr inbounds %struct._TypedList, ptr %168, i32 0, i32 1
  %170 = load ptr, ptr %169, align 8, !tbaa !13
  %171 = getelementptr inbounds %struct._TokenList, ptr %170, i32 0, i32 1
  %172 = load ptr, ptr %171, align 8, !tbaa !14
  %173 = icmp ne ptr %172, null
  br i1 %173, label %174, label %197

174:                                              ; preds = %167
  %175 = call ptr @new_Token(i32 noundef 256)
  store ptr %175, ptr %1, align 8, !tbaa !5
  %176 = load ptr, ptr %1, align 8, !tbaa !5
  %177 = call ptr @strcpy(ptr noundef %176, ptr noundef @.str) #5
  %178 = load ptr, ptr %2, align 8, !tbaa !5
  %179 = getelementptr inbounds %struct._TypedList, ptr %178, i32 0, i32 1
  %180 = load ptr, ptr %179, align 8, !tbaa !13
  store ptr %180, ptr %4, align 8, !tbaa !5
  br label %181

181:                                              ; preds = %192, %174
  %182 = load ptr, ptr %4, align 8, !tbaa !5
  %183 = icmp ne ptr %182, null
  br i1 %183, label %184, label %196

184:                                              ; preds = %181
  %185 = load ptr, ptr %1, align 8, !tbaa !5
  %186 = call ptr @strcat(ptr noundef %185, ptr noundef @.str.1) #5
  %187 = load ptr, ptr %1, align 8, !tbaa !5
  %188 = load ptr, ptr %4, align 8, !tbaa !5
  %189 = getelementptr inbounds %struct._TokenList, ptr %188, i32 0, i32 0
  %190 = load ptr, ptr %189, align 8, !tbaa !16
  %191 = call ptr @strcat(ptr noundef %187, ptr noundef %190) #5
  br label %192

192:                                              ; preds = %184
  %193 = load ptr, ptr %4, align 8, !tbaa !5
  %194 = getelementptr inbounds %struct._TokenList, ptr %193, i32 0, i32 1
  %195 = load ptr, ptr %194, align 8, !tbaa !14
  store ptr %195, ptr %4, align 8, !tbaa !5
  br label %181, !llvm.loop !24

196:                                              ; preds = %181
  br label %204

197:                                              ; preds = %167
  %198 = load ptr, ptr %2, align 8, !tbaa !5
  %199 = getelementptr inbounds %struct._TypedList, ptr %198, i32 0, i32 1
  %200 = load ptr, ptr %199, align 8, !tbaa !13
  %201 = getelementptr inbounds %struct._TokenList, ptr %200, i32 0, i32 0
  %202 = load ptr, ptr %201, align 8, !tbaa !16
  %203 = call ptr @copy_Token(ptr noundef %202)
  store ptr %203, ptr %1, align 8, !tbaa !5
  br label %204

204:                                              ; preds = %197, %196
  %205 = load ptr, ptr %1, align 8, !tbaa !5
  %206 = call i32 @get_type(ptr noundef %205)
  store i32 %206, ptr %11, align 4, !tbaa !9
  %207 = icmp eq i32 %206, -1
  br i1 %207, label %208, label %218

208:                                              ; preds = %204
  %209 = load i32, ptr @lnum_types, align 4, !tbaa !9
  %210 = load ptr, ptr %2, align 8, !tbaa !5
  %211 = getelementptr inbounds %struct._TypedList, ptr %210, i32 0, i32 2
  store i32 %209, ptr %211, align 8, !tbaa !19
  %212 = load ptr, ptr %1, align 8, !tbaa !5
  %213 = call ptr @copy_Token(ptr noundef %212)
  %214 = load i32, ptr @lnum_types, align 4, !tbaa !9
  %215 = add nsw i32 %214, 1
  store i32 %215, ptr @lnum_types, align 4, !tbaa !9
  %216 = sext i32 %214 to i64
  %217 = getelementptr inbounds [50 x ptr], ptr @ltype_names, i64 0, i64 %216
  store ptr %213, ptr %217, align 8, !tbaa !5
  br label %222

218:                                              ; preds = %204
  %219 = load i32, ptr %11, align 4, !tbaa !9
  %220 = load ptr, ptr %2, align 8, !tbaa !5
  %221 = getelementptr inbounds %struct._TypedList, ptr %220, i32 0, i32 2
  store i32 %219, ptr %221, align 8, !tbaa !19
  br label %222

222:                                              ; preds = %218, %208
  %223 = load ptr, ptr %1, align 8, !tbaa !5
  call void @free(ptr noundef %223) #5
  store ptr null, ptr %1, align 8, !tbaa !5
  br label %224

224:                                              ; preds = %222
  %225 = load ptr, ptr %2, align 8, !tbaa !5
  %226 = getelementptr inbounds %struct._TypedList, ptr %225, i32 0, i32 3
  %227 = load ptr, ptr %226, align 8, !tbaa !20
  store ptr %227, ptr %2, align 8, !tbaa !5
  br label %164, !llvm.loop !25

228:                                              ; preds = %164
  %229 = load ptr, ptr @gparse_predicates, align 8, !tbaa !5
  store ptr %229, ptr %3, align 8, !tbaa !5
  br label %230

230:                                              ; preds = %302, %228
  %231 = load ptr, ptr %3, align 8, !tbaa !5
  %232 = icmp ne ptr %231, null
  br i1 %232, label %233, label %306

233:                                              ; preds = %230
  %234 = load ptr, ptr %3, align 8, !tbaa !5
  %235 = getelementptr inbounds %struct._TypedListList, ptr %234, i32 0, i32 1
  %236 = load ptr, ptr %235, align 8, !tbaa !26
  store ptr %236, ptr %2, align 8, !tbaa !5
  br label %237

237:                                              ; preds = %297, %233
  %238 = load ptr, ptr %2, align 8, !tbaa !5
  %239 = icmp ne ptr %238, null
  br i1 %239, label %240, label %301

240:                                              ; preds = %237
  %241 = load ptr, ptr %2, align 8, !tbaa !5
  %242 = getelementptr inbounds %struct._TypedList, ptr %241, i32 0, i32 1
  %243 = load ptr, ptr %242, align 8, !tbaa !13
  %244 = getelementptr inbounds %struct._TokenList, ptr %243, i32 0, i32 1
  %245 = load ptr, ptr %244, align 8, !tbaa !14
  %246 = icmp ne ptr %245, null
  br i1 %246, label %247, label %270

247:                                              ; preds = %240
  %248 = call ptr @new_Token(i32 noundef 256)
  store ptr %248, ptr %1, align 8, !tbaa !5
  %249 = load ptr, ptr %1, align 8, !tbaa !5
  %250 = call ptr @strcpy(ptr noundef %249, ptr noundef @.str) #5
  %251 = load ptr, ptr %2, align 8, !tbaa !5
  %252 = getelementptr inbounds %struct._TypedList, ptr %251, i32 0, i32 1
  %253 = load ptr, ptr %252, align 8, !tbaa !13
  store ptr %253, ptr %4, align 8, !tbaa !5
  br label %254

254:                                              ; preds = %265, %247
  %255 = load ptr, ptr %4, align 8, !tbaa !5
  %256 = icmp ne ptr %255, null
  br i1 %256, label %257, label %269

257:                                              ; preds = %254
  %258 = load ptr, ptr %1, align 8, !tbaa !5
  %259 = call ptr @strcat(ptr noundef %258, ptr noundef @.str.1) #5
  %260 = load ptr, ptr %1, align 8, !tbaa !5
  %261 = load ptr, ptr %4, align 8, !tbaa !5
  %262 = getelementptr inbounds %struct._TokenList, ptr %261, i32 0, i32 0
  %263 = load ptr, ptr %262, align 8, !tbaa !16
  %264 = call ptr @strcat(ptr noundef %260, ptr noundef %263) #5
  br label %265

265:                                              ; preds = %257
  %266 = load ptr, ptr %4, align 8, !tbaa !5
  %267 = getelementptr inbounds %struct._TokenList, ptr %266, i32 0, i32 1
  %268 = load ptr, ptr %267, align 8, !tbaa !14
  store ptr %268, ptr %4, align 8, !tbaa !5
  br label %254, !llvm.loop !28

269:                                              ; preds = %254
  br label %277

270:                                              ; preds = %240
  %271 = load ptr, ptr %2, align 8, !tbaa !5
  %272 = getelementptr inbounds %struct._TypedList, ptr %271, i32 0, i32 1
  %273 = load ptr, ptr %272, align 8, !tbaa !13
  %274 = getelementptr inbounds %struct._TokenList, ptr %273, i32 0, i32 0
  %275 = load ptr, ptr %274, align 8, !tbaa !16
  %276 = call ptr @copy_Token(ptr noundef %275)
  store ptr %276, ptr %1, align 8, !tbaa !5
  br label %277

277:                                              ; preds = %270, %269
  %278 = load ptr, ptr %1, align 8, !tbaa !5
  %279 = call i32 @get_type(ptr noundef %278)
  store i32 %279, ptr %11, align 4, !tbaa !9
  %280 = icmp eq i32 %279, -1
  br i1 %280, label %281, label %291

281:                                              ; preds = %277
  %282 = load i32, ptr @lnum_types, align 4, !tbaa !9
  %283 = load ptr, ptr %2, align 8, !tbaa !5
  %284 = getelementptr inbounds %struct._TypedList, ptr %283, i32 0, i32 2
  store i32 %282, ptr %284, align 8, !tbaa !19
  %285 = load ptr, ptr %1, align 8, !tbaa !5
  %286 = call ptr @copy_Token(ptr noundef %285)
  %287 = load i32, ptr @lnum_types, align 4, !tbaa !9
  %288 = add nsw i32 %287, 1
  store i32 %288, ptr @lnum_types, align 4, !tbaa !9
  %289 = sext i32 %287 to i64
  %290 = getelementptr inbounds [50 x ptr], ptr @ltype_names, i64 0, i64 %289
  store ptr %286, ptr %290, align 8, !tbaa !5
  br label %295

291:                                              ; preds = %277
  %292 = load i32, ptr %11, align 4, !tbaa !9
  %293 = load ptr, ptr %2, align 8, !tbaa !5
  %294 = getelementptr inbounds %struct._TypedList, ptr %293, i32 0, i32 2
  store i32 %292, ptr %294, align 8, !tbaa !19
  br label %295

295:                                              ; preds = %291, %281
  %296 = load ptr, ptr %1, align 8, !tbaa !5
  call void @free(ptr noundef %296) #5
  store ptr null, ptr %1, align 8, !tbaa !5
  br label %297

297:                                              ; preds = %295
  %298 = load ptr, ptr %2, align 8, !tbaa !5
  %299 = getelementptr inbounds %struct._TypedList, ptr %298, i32 0, i32 3
  %300 = load ptr, ptr %299, align 8, !tbaa !20
  store ptr %300, ptr %2, align 8, !tbaa !5
  br label %237, !llvm.loop !29

301:                                              ; preds = %237
  br label %302

302:                                              ; preds = %301
  %303 = load ptr, ptr %3, align 8, !tbaa !5
  %304 = getelementptr inbounds %struct._TypedListList, ptr %303, i32 0, i32 2
  %305 = load ptr, ptr %304, align 8, !tbaa !30
  store ptr %305, ptr %3, align 8, !tbaa !5
  br label %230, !llvm.loop !31

306:                                              ; preds = %230
  %307 = load ptr, ptr @gparse_functions, align 8, !tbaa !5
  store ptr %307, ptr %3, align 8, !tbaa !5
  br label %308

308:                                              ; preds = %380, %306
  %309 = load ptr, ptr %3, align 8, !tbaa !5
  %310 = icmp ne ptr %309, null
  br i1 %310, label %311, label %384

311:                                              ; preds = %308
  %312 = load ptr, ptr %3, align 8, !tbaa !5
  %313 = getelementptr inbounds %struct._TypedListList, ptr %312, i32 0, i32 1
  %314 = load ptr, ptr %313, align 8, !tbaa !26
  store ptr %314, ptr %2, align 8, !tbaa !5
  br label %315

315:                                              ; preds = %375, %311
  %316 = load ptr, ptr %2, align 8, !tbaa !5
  %317 = icmp ne ptr %316, null
  br i1 %317, label %318, label %379

318:                                              ; preds = %315
  %319 = load ptr, ptr %2, align 8, !tbaa !5
  %320 = getelementptr inbounds %struct._TypedList, ptr %319, i32 0, i32 1
  %321 = load ptr, ptr %320, align 8, !tbaa !13
  %322 = getelementptr inbounds %struct._TokenList, ptr %321, i32 0, i32 1
  %323 = load ptr, ptr %322, align 8, !tbaa !14
  %324 = icmp ne ptr %323, null
  br i1 %324, label %325, label %348

325:                                              ; preds = %318
  %326 = call ptr @new_Token(i32 noundef 256)
  store ptr %326, ptr %1, align 8, !tbaa !5
  %327 = load ptr, ptr %1, align 8, !tbaa !5
  %328 = call ptr @strcpy(ptr noundef %327, ptr noundef @.str) #5
  %329 = load ptr, ptr %2, align 8, !tbaa !5
  %330 = getelementptr inbounds %struct._TypedList, ptr %329, i32 0, i32 1
  %331 = load ptr, ptr %330, align 8, !tbaa !13
  store ptr %331, ptr %4, align 8, !tbaa !5
  br label %332

332:                                              ; preds = %343, %325
  %333 = load ptr, ptr %4, align 8, !tbaa !5
  %334 = icmp ne ptr %333, null
  br i1 %334, label %335, label %347

335:                                              ; preds = %332
  %336 = load ptr, ptr %1, align 8, !tbaa !5
  %337 = call ptr @strcat(ptr noundef %336, ptr noundef @.str.1) #5
  %338 = load ptr, ptr %1, align 8, !tbaa !5
  %339 = load ptr, ptr %4, align 8, !tbaa !5
  %340 = getelementptr inbounds %struct._TokenList, ptr %339, i32 0, i32 0
  %341 = load ptr, ptr %340, align 8, !tbaa !16
  %342 = call ptr @strcat(ptr noundef %338, ptr noundef %341) #5
  br label %343

343:                                              ; preds = %335
  %344 = load ptr, ptr %4, align 8, !tbaa !5
  %345 = getelementptr inbounds %struct._TokenList, ptr %344, i32 0, i32 1
  %346 = load ptr, ptr %345, align 8, !tbaa !14
  store ptr %346, ptr %4, align 8, !tbaa !5
  br label %332, !llvm.loop !32

347:                                              ; preds = %332
  br label %355

348:                                              ; preds = %318
  %349 = load ptr, ptr %2, align 8, !tbaa !5
  %350 = getelementptr inbounds %struct._TypedList, ptr %349, i32 0, i32 1
  %351 = load ptr, ptr %350, align 8, !tbaa !13
  %352 = getelementptr inbounds %struct._TokenList, ptr %351, i32 0, i32 0
  %353 = load ptr, ptr %352, align 8, !tbaa !16
  %354 = call ptr @copy_Token(ptr noundef %353)
  store ptr %354, ptr %1, align 8, !tbaa !5
  br label %355

355:                                              ; preds = %348, %347
  %356 = load ptr, ptr %1, align 8, !tbaa !5
  %357 = call i32 @get_type(ptr noundef %356)
  store i32 %357, ptr %11, align 4, !tbaa !9
  %358 = icmp eq i32 %357, -1
  br i1 %358, label %359, label %369

359:                                              ; preds = %355
  %360 = load i32, ptr @lnum_types, align 4, !tbaa !9
  %361 = load ptr, ptr %2, align 8, !tbaa !5
  %362 = getelementptr inbounds %struct._TypedList, ptr %361, i32 0, i32 2
  store i32 %360, ptr %362, align 8, !tbaa !19
  %363 = load ptr, ptr %1, align 8, !tbaa !5
  %364 = call ptr @copy_Token(ptr noundef %363)
  %365 = load i32, ptr @lnum_types, align 4, !tbaa !9
  %366 = add nsw i32 %365, 1
  store i32 %366, ptr @lnum_types, align 4, !tbaa !9
  %367 = sext i32 %365 to i64
  %368 = getelementptr inbounds [50 x ptr], ptr @ltype_names, i64 0, i64 %367
  store ptr %364, ptr %368, align 8, !tbaa !5
  br label %373

369:                                              ; preds = %355
  %370 = load i32, ptr %11, align 4, !tbaa !9
  %371 = load ptr, ptr %2, align 8, !tbaa !5
  %372 = getelementptr inbounds %struct._TypedList, ptr %371, i32 0, i32 2
  store i32 %370, ptr %372, align 8, !tbaa !19
  br label %373

373:                                              ; preds = %369, %359
  %374 = load ptr, ptr %1, align 8, !tbaa !5
  call void @free(ptr noundef %374) #5
  store ptr null, ptr %1, align 8, !tbaa !5
  br label %375

375:                                              ; preds = %373
  %376 = load ptr, ptr %2, align 8, !tbaa !5
  %377 = getelementptr inbounds %struct._TypedList, ptr %376, i32 0, i32 3
  %378 = load ptr, ptr %377, align 8, !tbaa !20
  store ptr %378, ptr %2, align 8, !tbaa !5
  br label %315, !llvm.loop !33

379:                                              ; preds = %315
  br label %380

380:                                              ; preds = %379
  %381 = load ptr, ptr %3, align 8, !tbaa !5
  %382 = getelementptr inbounds %struct._TypedListList, ptr %381, i32 0, i32 2
  %383 = load ptr, ptr %382, align 8, !tbaa !30
  store ptr %383, ptr %3, align 8, !tbaa !5
  br label %308, !llvm.loop !34

384:                                              ; preds = %308
  %385 = load ptr, ptr @gorig_goal_facts, align 8, !tbaa !5
  call void @collect_type_names_in_pl(ptr noundef %385)
  %386 = load ptr, ptr @gloaded_ops, align 8, !tbaa !5
  store ptr %386, ptr %7, align 8, !tbaa !5
  br label %387

387:                                              ; preds = %465, %384
  %388 = load ptr, ptr %7, align 8, !tbaa !5
  %389 = icmp ne ptr %388, null
  br i1 %389, label %390, label %469

390:                                              ; preds = %387
  %391 = load ptr, ptr %7, align 8, !tbaa !5
  %392 = getelementptr inbounds %struct._PlOperator, ptr %391, i32 0, i32 5
  %393 = load ptr, ptr %392, align 8, !tbaa !35
  call void @collect_type_names_in_pl(ptr noundef %393)
  %394 = load ptr, ptr %7, align 8, !tbaa !5
  %395 = getelementptr inbounds %struct._PlOperator, ptr %394, i32 0, i32 6
  %396 = load ptr, ptr %395, align 8, !tbaa !37
  call void @collect_type_names_in_pl(ptr noundef %396)
  %397 = load ptr, ptr %7, align 8, !tbaa !5
  %398 = getelementptr inbounds %struct._PlOperator, ptr %397, i32 0, i32 3
  %399 = load ptr, ptr %398, align 8, !tbaa !38
  store ptr %399, ptr %2, align 8, !tbaa !5
  br label %400

400:                                              ; preds = %460, %390
  %401 = load ptr, ptr %2, align 8, !tbaa !5
  %402 = icmp ne ptr %401, null
  br i1 %402, label %403, label %464

403:                                              ; preds = %400
  %404 = load ptr, ptr %2, align 8, !tbaa !5
  %405 = getelementptr inbounds %struct._TypedList, ptr %404, i32 0, i32 1
  %406 = load ptr, ptr %405, align 8, !tbaa !13
  %407 = getelementptr inbounds %struct._TokenList, ptr %406, i32 0, i32 1
  %408 = load ptr, ptr %407, align 8, !tbaa !14
  %409 = icmp ne ptr %408, null
  br i1 %409, label %410, label %433

410:                                              ; preds = %403
  %411 = call ptr @new_Token(i32 noundef 256)
  store ptr %411, ptr %1, align 8, !tbaa !5
  %412 = load ptr, ptr %1, align 8, !tbaa !5
  %413 = call ptr @strcpy(ptr noundef %412, ptr noundef @.str) #5
  %414 = load ptr, ptr %2, align 8, !tbaa !5
  %415 = getelementptr inbounds %struct._TypedList, ptr %414, i32 0, i32 1
  %416 = load ptr, ptr %415, align 8, !tbaa !13
  store ptr %416, ptr %4, align 8, !tbaa !5
  br label %417

417:                                              ; preds = %428, %410
  %418 = load ptr, ptr %4, align 8, !tbaa !5
  %419 = icmp ne ptr %418, null
  br i1 %419, label %420, label %432

420:                                              ; preds = %417
  %421 = load ptr, ptr %1, align 8, !tbaa !5
  %422 = call ptr @strcat(ptr noundef %421, ptr noundef @.str.1) #5
  %423 = load ptr, ptr %1, align 8, !tbaa !5
  %424 = load ptr, ptr %4, align 8, !tbaa !5
  %425 = getelementptr inbounds %struct._TokenList, ptr %424, i32 0, i32 0
  %426 = load ptr, ptr %425, align 8, !tbaa !16
  %427 = call ptr @strcat(ptr noundef %423, ptr noundef %426) #5
  br label %428

428:                                              ; preds = %420
  %429 = load ptr, ptr %4, align 8, !tbaa !5
  %430 = getelementptr inbounds %struct._TokenList, ptr %429, i32 0, i32 1
  %431 = load ptr, ptr %430, align 8, !tbaa !14
  store ptr %431, ptr %4, align 8, !tbaa !5
  br label %417, !llvm.loop !39

432:                                              ; preds = %417
  br label %440

433:                                              ; preds = %403
  %434 = load ptr, ptr %2, align 8, !tbaa !5
  %435 = getelementptr inbounds %struct._TypedList, ptr %434, i32 0, i32 1
  %436 = load ptr, ptr %435, align 8, !tbaa !13
  %437 = getelementptr inbounds %struct._TokenList, ptr %436, i32 0, i32 0
  %438 = load ptr, ptr %437, align 8, !tbaa !16
  %439 = call ptr @copy_Token(ptr noundef %438)
  store ptr %439, ptr %1, align 8, !tbaa !5
  br label %440

440:                                              ; preds = %433, %432
  %441 = load ptr, ptr %1, align 8, !tbaa !5
  %442 = call i32 @get_type(ptr noundef %441)
  store i32 %442, ptr %11, align 4, !tbaa !9
  %443 = icmp eq i32 %442, -1
  br i1 %443, label %444, label %454

444:                                              ; preds = %440
  %445 = load i32, ptr @lnum_types, align 4, !tbaa !9
  %446 = load ptr, ptr %2, align 8, !tbaa !5
  %447 = getelementptr inbounds %struct._TypedList, ptr %446, i32 0, i32 2
  store i32 %445, ptr %447, align 8, !tbaa !19
  %448 = load ptr, ptr %1, align 8, !tbaa !5
  %449 = call ptr @copy_Token(ptr noundef %448)
  %450 = load i32, ptr @lnum_types, align 4, !tbaa !9
  %451 = add nsw i32 %450, 1
  store i32 %451, ptr @lnum_types, align 4, !tbaa !9
  %452 = sext i32 %450 to i64
  %453 = getelementptr inbounds [50 x ptr], ptr @ltype_names, i64 0, i64 %452
  store ptr %449, ptr %453, align 8, !tbaa !5
  br label %458

454:                                              ; preds = %440
  %455 = load i32, ptr %11, align 4, !tbaa !9
  %456 = load ptr, ptr %2, align 8, !tbaa !5
  %457 = getelementptr inbounds %struct._TypedList, ptr %456, i32 0, i32 2
  store i32 %455, ptr %457, align 8, !tbaa !19
  br label %458

458:                                              ; preds = %454, %444
  %459 = load ptr, ptr %1, align 8, !tbaa !5
  call void @free(ptr noundef %459) #5
  store ptr null, ptr %1, align 8, !tbaa !5
  br label %460

460:                                              ; preds = %458
  %461 = load ptr, ptr %2, align 8, !tbaa !5
  %462 = getelementptr inbounds %struct._TypedList, ptr %461, i32 0, i32 3
  %463 = load ptr, ptr %462, align 8, !tbaa !20
  store ptr %463, ptr %2, align 8, !tbaa !5
  br label %400, !llvm.loop !40

464:                                              ; preds = %400
  br label %465

465:                                              ; preds = %464
  %466 = load ptr, ptr %7, align 8, !tbaa !5
  %467 = getelementptr inbounds %struct._PlOperator, ptr %466, i32 0, i32 7
  %468 = load ptr, ptr %467, align 8, !tbaa !41
  store ptr %468, ptr %7, align 8, !tbaa !5
  br label %387, !llvm.loop !42

469:                                              ; preds = %387
  store i32 0, ptr %8, align 4, !tbaa !9
  br label %470

470:                                              ; preds = %478, %469
  %471 = load i32, ptr %8, align 4, !tbaa !9
  %472 = load i32, ptr @lnum_types, align 4, !tbaa !9
  %473 = icmp slt i32 %471, %472
  br i1 %473, label %474, label %481

474:                                              ; preds = %470
  %475 = load i32, ptr %8, align 4, !tbaa !9
  %476 = sext i32 %475 to i64
  %477 = getelementptr inbounds [50 x i32], ptr @lnum_either_ty, i64 0, i64 %476
  store i32 0, ptr %477, align 4, !tbaa !9
  br label %478

478:                                              ; preds = %474
  %479 = load i32, ptr %8, align 4, !tbaa !9
  %480 = add nsw i32 %479, 1
  store i32 %480, ptr %8, align 4, !tbaa !9
  br label %470, !llvm.loop !43

481:                                              ; preds = %470
  %482 = load ptr, ptr @gparse_types, align 8, !tbaa !5
  store ptr %482, ptr %2, align 8, !tbaa !5
  br label %483

483:                                              ; preds = %488, %481
  %484 = load ptr, ptr %2, align 8, !tbaa !5
  %485 = icmp ne ptr %484, null
  br i1 %485, label %486, label %492

486:                                              ; preds = %483
  %487 = load ptr, ptr %2, align 8, !tbaa !5
  call void @make_either_ty(ptr noundef %487)
  br label %488

488:                                              ; preds = %486
  %489 = load ptr, ptr %2, align 8, !tbaa !5
  %490 = getelementptr inbounds %struct._TypedList, ptr %489, i32 0, i32 3
  %491 = load ptr, ptr %490, align 8, !tbaa !20
  store ptr %491, ptr %2, align 8, !tbaa !5
  br label %483, !llvm.loop !44

492:                                              ; preds = %483
  %493 = load ptr, ptr @gparse_constants, align 8, !tbaa !5
  store ptr %493, ptr %2, align 8, !tbaa !5
  br label %494

494:                                              ; preds = %499, %492
  %495 = load ptr, ptr %2, align 8, !tbaa !5
  %496 = icmp ne ptr %495, null
  br i1 %496, label %497, label %503

497:                                              ; preds = %494
  %498 = load ptr, ptr %2, align 8, !tbaa !5
  call void @make_either_ty(ptr noundef %498)
  br label %499

499:                                              ; preds = %497
  %500 = load ptr, ptr %2, align 8, !tbaa !5
  %501 = getelementptr inbounds %struct._TypedList, ptr %500, i32 0, i32 3
  %502 = load ptr, ptr %501, align 8, !tbaa !20
  store ptr %502, ptr %2, align 8, !tbaa !5
  br label %494, !llvm.loop !45

503:                                              ; preds = %494
  %504 = load ptr, ptr @gparse_objects, align 8, !tbaa !5
  store ptr %504, ptr %2, align 8, !tbaa !5
  br label %505

505:                                              ; preds = %510, %503
  %506 = load ptr, ptr %2, align 8, !tbaa !5
  %507 = icmp ne ptr %506, null
  br i1 %507, label %508, label %514

508:                                              ; preds = %505
  %509 = load ptr, ptr %2, align 8, !tbaa !5
  call void @make_either_ty(ptr noundef %509)
  br label %510

510:                                              ; preds = %508
  %511 = load ptr, ptr %2, align 8, !tbaa !5
  %512 = getelementptr inbounds %struct._TypedList, ptr %511, i32 0, i32 3
  %513 = load ptr, ptr %512, align 8, !tbaa !20
  store ptr %513, ptr %2, align 8, !tbaa !5
  br label %505, !llvm.loop !46

514:                                              ; preds = %505
  %515 = load ptr, ptr @gparse_predicates, align 8, !tbaa !5
  store ptr %515, ptr %3, align 8, !tbaa !5
  br label %516

516:                                              ; preds = %533, %514
  %517 = load ptr, ptr %3, align 8, !tbaa !5
  %518 = icmp ne ptr %517, null
  br i1 %518, label %519, label %537

519:                                              ; preds = %516
  %520 = load ptr, ptr %3, align 8, !tbaa !5
  %521 = getelementptr inbounds %struct._TypedListList, ptr %520, i32 0, i32 1
  %522 = load ptr, ptr %521, align 8, !tbaa !26
  store ptr %522, ptr %2, align 8, !tbaa !5
  br label %523

523:                                              ; preds = %528, %519
  %524 = load ptr, ptr %2, align 8, !tbaa !5
  %525 = icmp ne ptr %524, null
  br i1 %525, label %526, label %532

526:                                              ; preds = %523
  %527 = load ptr, ptr %2, align 8, !tbaa !5
  call void @make_either_ty(ptr noundef %527)
  br label %528

528:                                              ; preds = %526
  %529 = load ptr, ptr %2, align 8, !tbaa !5
  %530 = getelementptr inbounds %struct._TypedList, ptr %529, i32 0, i32 3
  %531 = load ptr, ptr %530, align 8, !tbaa !20
  store ptr %531, ptr %2, align 8, !tbaa !5
  br label %523, !llvm.loop !47

532:                                              ; preds = %523
  br label %533

533:                                              ; preds = %532
  %534 = load ptr, ptr %3, align 8, !tbaa !5
  %535 = getelementptr inbounds %struct._TypedListList, ptr %534, i32 0, i32 2
  %536 = load ptr, ptr %535, align 8, !tbaa !30
  store ptr %536, ptr %3, align 8, !tbaa !5
  br label %516, !llvm.loop !48

537:                                              ; preds = %516
  %538 = load ptr, ptr @gparse_functions, align 8, !tbaa !5
  store ptr %538, ptr %3, align 8, !tbaa !5
  br label %539

539:                                              ; preds = %556, %537
  %540 = load ptr, ptr %3, align 8, !tbaa !5
  %541 = icmp ne ptr %540, null
  br i1 %541, label %542, label %560

542:                                              ; preds = %539
  %543 = load ptr, ptr %3, align 8, !tbaa !5
  %544 = getelementptr inbounds %struct._TypedListList, ptr %543, i32 0, i32 1
  %545 = load ptr, ptr %544, align 8, !tbaa !26
  store ptr %545, ptr %2, align 8, !tbaa !5
  br label %546

546:                                              ; preds = %551, %542
  %547 = load ptr, ptr %2, align 8, !tbaa !5
  %548 = icmp ne ptr %547, null
  br i1 %548, label %549, label %555

549:                                              ; preds = %546
  %550 = load ptr, ptr %2, align 8, !tbaa !5
  call void @make_either_ty(ptr noundef %550)
  br label %551

551:                                              ; preds = %549
  %552 = load ptr, ptr %2, align 8, !tbaa !5
  %553 = getelementptr inbounds %struct._TypedList, ptr %552, i32 0, i32 3
  %554 = load ptr, ptr %553, align 8, !tbaa !20
  store ptr %554, ptr %2, align 8, !tbaa !5
  br label %546, !llvm.loop !49

555:                                              ; preds = %546
  br label %556

556:                                              ; preds = %555
  %557 = load ptr, ptr %3, align 8, !tbaa !5
  %558 = getelementptr inbounds %struct._TypedListList, ptr %557, i32 0, i32 2
  %559 = load ptr, ptr %558, align 8, !tbaa !30
  store ptr %559, ptr %3, align 8, !tbaa !5
  br label %539, !llvm.loop !50

560:                                              ; preds = %539
  %561 = load ptr, ptr @gorig_goal_facts, align 8, !tbaa !5
  call void @make_either_ty_in_pl(ptr noundef %561)
  %562 = load ptr, ptr @gloaded_ops, align 8, !tbaa !5
  store ptr %562, ptr %7, align 8, !tbaa !5
  br label %563

563:                                              ; preds = %586, %560
  %564 = load ptr, ptr %7, align 8, !tbaa !5
  %565 = icmp ne ptr %564, null
  br i1 %565, label %566, label %590

566:                                              ; preds = %563
  %567 = load ptr, ptr %7, align 8, !tbaa !5
  %568 = getelementptr inbounds %struct._PlOperator, ptr %567, i32 0, i32 5
  %569 = load ptr, ptr %568, align 8, !tbaa !35
  call void @make_either_ty_in_pl(ptr noundef %569)
  %570 = load ptr, ptr %7, align 8, !tbaa !5
  %571 = getelementptr inbounds %struct._PlOperator, ptr %570, i32 0, i32 6
  %572 = load ptr, ptr %571, align 8, !tbaa !37
  call void @make_either_ty_in_pl(ptr noundef %572)
  %573 = load ptr, ptr %7, align 8, !tbaa !5
  %574 = getelementptr inbounds %struct._PlOperator, ptr %573, i32 0, i32 3
  %575 = load ptr, ptr %574, align 8, !tbaa !38
  store ptr %575, ptr %2, align 8, !tbaa !5
  br label %576

576:                                              ; preds = %581, %566
  %577 = load ptr, ptr %2, align 8, !tbaa !5
  %578 = icmp ne ptr %577, null
  br i1 %578, label %579, label %585

579:                                              ; preds = %576
  %580 = load ptr, ptr %2, align 8, !tbaa !5
  call void @make_either_ty(ptr noundef %580)
  br label %581

581:                                              ; preds = %579
  %582 = load ptr, ptr %2, align 8, !tbaa !5
  %583 = getelementptr inbounds %struct._TypedList, ptr %582, i32 0, i32 3
  %584 = load ptr, ptr %583, align 8, !tbaa !20
  store ptr %584, ptr %2, align 8, !tbaa !5
  br label %576, !llvm.loop !51

585:                                              ; preds = %576
  br label %586

586:                                              ; preds = %585
  %587 = load ptr, ptr %7, align 8, !tbaa !5
  %588 = getelementptr inbounds %struct._PlOperator, ptr %587, i32 0, i32 7
  %589 = load ptr, ptr %588, align 8, !tbaa !41
  store ptr %589, ptr %7, align 8, !tbaa !5
  br label %563, !llvm.loop !52

590:                                              ; preds = %563
  store i32 0, ptr %8, align 4, !tbaa !9
  br label %591

591:                                              ; preds = %617, %590
  %592 = load i32, ptr %8, align 4, !tbaa !9
  %593 = load i32, ptr @lnum_types, align 4, !tbaa !9
  %594 = icmp slt i32 %592, %593
  br i1 %594, label %595, label %620

595:                                              ; preds = %591
  store i32 0, ptr %9, align 4, !tbaa !9
  br label %596

596:                                              ; preds = %613, %595
  %597 = load i32, ptr %9, align 4, !tbaa !9
  %598 = load i32, ptr @lnum_types, align 4, !tbaa !9
  %599 = icmp slt i32 %597, %598
  br i1 %599, label %600, label %616

600:                                              ; preds = %596
  %601 = load i32, ptr %8, align 4, !tbaa !9
  %602 = load i32, ptr %9, align 4, !tbaa !9
  %603 = icmp eq i32 %601, %602
  %604 = zext i1 %603 to i64
  %605 = select i1 %603, i32 1, i32 0
  %606 = trunc i32 %605 to i8
  %607 = load i32, ptr %8, align 4, !tbaa !9
  %608 = sext i32 %607 to i64
  %609 = getelementptr inbounds [50 x [50 x i8]], ptr %13, i64 0, i64 %608
  %610 = load i32, ptr %9, align 4, !tbaa !9
  %611 = sext i32 %610 to i64
  %612 = getelementptr inbounds [50 x i8], ptr %609, i64 0, i64 %611
  store i8 %606, ptr %612, align 1, !tbaa !53
  br label %613

613:                                              ; preds = %600
  %614 = load i32, ptr %9, align 4, !tbaa !9
  %615 = add nsw i32 %614, 1
  store i32 %615, ptr %9, align 4, !tbaa !9
  br label %596, !llvm.loop !54

616:                                              ; preds = %596
  br label %617

617:                                              ; preds = %616
  %618 = load i32, ptr %8, align 4, !tbaa !9
  %619 = add nsw i32 %618, 1
  store i32 %619, ptr %8, align 4, !tbaa !9
  br label %591, !llvm.loop !55

620:                                              ; preds = %591
  store i32 -1, ptr %12, align 4, !tbaa !9
  store i32 0, ptr %8, align 4, !tbaa !9
  br label %621

621:                                              ; preds = %635, %620
  %622 = load i32, ptr %8, align 4, !tbaa !9
  %623 = load i32, ptr @lnum_types, align 4, !tbaa !9
  %624 = icmp slt i32 %622, %623
  br i1 %624, label %625, label %638

625:                                              ; preds = %621
  %626 = load i32, ptr %8, align 4, !tbaa !9
  %627 = sext i32 %626 to i64
  %628 = getelementptr inbounds [50 x ptr], ptr @ltype_names, i64 0, i64 %627
  %629 = load ptr, ptr %628, align 8, !tbaa !5
  %630 = call i32 @strcmp(ptr noundef %629, ptr noundef @.str.2) #6
  %631 = icmp eq i32 %630, 0
  br i1 %631, label %632, label %634

632:                                              ; preds = %625
  %633 = load i32, ptr %8, align 4, !tbaa !9
  store i32 %633, ptr %12, align 4, !tbaa !9
  br label %638

634:                                              ; preds = %625
  br label %635

635:                                              ; preds = %634
  %636 = load i32, ptr %8, align 4, !tbaa !9
  %637 = add nsw i32 %636, 1
  store i32 %637, ptr %8, align 4, !tbaa !9
  br label %621, !llvm.loop !56

638:                                              ; preds = %632, %621
  store i32 0, ptr %8, align 4, !tbaa !9
  br label %639

639:                                              ; preds = %650, %638
  %640 = load i32, ptr %8, align 4, !tbaa !9
  %641 = load i32, ptr @lnum_types, align 4, !tbaa !9
  %642 = icmp slt i32 %640, %641
  br i1 %642, label %643, label %653

643:                                              ; preds = %639
  %644 = load i32, ptr %8, align 4, !tbaa !9
  %645 = sext i32 %644 to i64
  %646 = getelementptr inbounds [50 x [50 x i8]], ptr %13, i64 0, i64 %645
  %647 = load i32, ptr %12, align 4, !tbaa !9
  %648 = sext i32 %647 to i64
  %649 = getelementptr inbounds [50 x i8], ptr %646, i64 0, i64 %648
  store i8 1, ptr %649, align 1, !tbaa !53
  br label %650

650:                                              ; preds = %643
  %651 = load i32, ptr %8, align 4, !tbaa !9
  %652 = add nsw i32 %651, 1
  store i32 %652, ptr %8, align 4, !tbaa !9
  br label %639, !llvm.loop !57

653:                                              ; preds = %639
  %654 = load ptr, ptr @gparse_types, align 8, !tbaa !5
  store ptr %654, ptr %2, align 8, !tbaa !5
  br label %655

655:                                              ; preds = %670, %653
  %656 = load ptr, ptr %2, align 8, !tbaa !5
  %657 = icmp ne ptr %656, null
  br i1 %657, label %658, label %674

658:                                              ; preds = %655
  %659 = load ptr, ptr %2, align 8, !tbaa !5
  %660 = getelementptr inbounds %struct._TypedList, ptr %659, i32 0, i32 0
  %661 = load ptr, ptr %660, align 8, !tbaa !11
  %662 = call i32 @get_type(ptr noundef %661)
  %663 = sext i32 %662 to i64
  %664 = getelementptr inbounds [50 x [50 x i8]], ptr %13, i64 0, i64 %663
  %665 = load ptr, ptr %2, align 8, !tbaa !5
  %666 = getelementptr inbounds %struct._TypedList, ptr %665, i32 0, i32 2
  %667 = load i32, ptr %666, align 8, !tbaa !19
  %668 = sext i32 %667 to i64
  %669 = getelementptr inbounds [50 x i8], ptr %664, i64 0, i64 %668
  store i8 1, ptr %669, align 1, !tbaa !53
  br label %670

670:                                              ; preds = %658
  %671 = load ptr, ptr %2, align 8, !tbaa !5
  %672 = getelementptr inbounds %struct._TypedList, ptr %671, i32 0, i32 3
  %673 = load ptr, ptr %672, align 8, !tbaa !20
  store ptr %673, ptr %2, align 8, !tbaa !5
  br label %655, !llvm.loop !58

674:                                              ; preds = %655
  store i32 0, ptr %9, align 4, !tbaa !9
  br label %675

675:                                              ; preds = %724, %674
  %676 = load i32, ptr %9, align 4, !tbaa !9
  %677 = load i32, ptr @lnum_types, align 4, !tbaa !9
  %678 = icmp slt i32 %676, %677
  br i1 %678, label %679, label %727

679:                                              ; preds = %675
  store i32 0, ptr %8, align 4, !tbaa !9
  br label %680

680:                                              ; preds = %720, %679
  %681 = load i32, ptr %8, align 4, !tbaa !9
  %682 = load i32, ptr @lnum_types, align 4, !tbaa !9
  %683 = icmp slt i32 %681, %682
  br i1 %683, label %684, label %723

684:                                              ; preds = %680
  %685 = load i32, ptr %8, align 4, !tbaa !9
  %686 = sext i32 %685 to i64
  %687 = getelementptr inbounds [50 x [50 x i8]], ptr %13, i64 0, i64 %686
  %688 = load i32, ptr %9, align 4, !tbaa !9
  %689 = sext i32 %688 to i64
  %690 = getelementptr inbounds [50 x i8], ptr %687, i64 0, i64 %689
  %691 = load i8, ptr %690, align 1, !tbaa !53
  %692 = icmp ne i8 %691, 0
  br i1 %692, label %693, label %719

693:                                              ; preds = %684
  store i32 0, ptr %10, align 4, !tbaa !9
  br label %694

694:                                              ; preds = %715, %693
  %695 = load i32, ptr %10, align 4, !tbaa !9
  %696 = load i32, ptr @lnum_types, align 4, !tbaa !9
  %697 = icmp slt i32 %695, %696
  br i1 %697, label %698, label %718

698:                                              ; preds = %694
  %699 = load i32, ptr %9, align 4, !tbaa !9
  %700 = sext i32 %699 to i64
  %701 = getelementptr inbounds [50 x [50 x i8]], ptr %13, i64 0, i64 %700
  %702 = load i32, ptr %10, align 4, !tbaa !9
  %703 = sext i32 %702 to i64
  %704 = getelementptr inbounds [50 x i8], ptr %701, i64 0, i64 %703
  %705 = load i8, ptr %704, align 1, !tbaa !53
  %706 = icmp ne i8 %705, 0
  br i1 %706, label %707, label %714

707:                                              ; preds = %698
  %708 = load i32, ptr %8, align 4, !tbaa !9
  %709 = sext i32 %708 to i64
  %710 = getelementptr inbounds [50 x [50 x i8]], ptr %13, i64 0, i64 %709
  %711 = load i32, ptr %10, align 4, !tbaa !9
  %712 = sext i32 %711 to i64
  %713 = getelementptr inbounds [50 x i8], ptr %710, i64 0, i64 %712
  store i8 1, ptr %713, align 1, !tbaa !53
  br label %714

714:                                              ; preds = %707, %698
  br label %715

715:                                              ; preds = %714
  %716 = load i32, ptr %10, align 4, !tbaa !9
  %717 = add nsw i32 %716, 1
  store i32 %717, ptr %10, align 4, !tbaa !9
  br label %694, !llvm.loop !59

718:                                              ; preds = %694
  br label %719

719:                                              ; preds = %718, %684
  br label %720

720:                                              ; preds = %719
  %721 = load i32, ptr %8, align 4, !tbaa !9
  %722 = add nsw i32 %721, 1
  store i32 %722, ptr %8, align 4, !tbaa !9
  br label %680, !llvm.loop !60

723:                                              ; preds = %680
  br label %724

724:                                              ; preds = %723
  %725 = load i32, ptr %9, align 4, !tbaa !9
  %726 = add nsw i32 %725, 1
  store i32 %726, ptr %9, align 4, !tbaa !9
  br label %675, !llvm.loop !61

727:                                              ; preds = %675
  store i32 0, ptr %8, align 4, !tbaa !9
  br label %728

728:                                              ; preds = %820, %727
  %729 = load i32, ptr %8, align 4, !tbaa !9
  %730 = load i32, ptr @lnum_types, align 4, !tbaa !9
  %731 = icmp slt i32 %729, %730
  br i1 %731, label %732, label %823

732:                                              ; preds = %728
  %733 = load i32, ptr %8, align 4, !tbaa !9
  %734 = sext i32 %733 to i64
  %735 = getelementptr inbounds [50 x i32], ptr @lnum_either_ty, i64 0, i64 %734
  %736 = load i32, ptr %735, align 4, !tbaa !9
  %737 = icmp slt i32 %736, 2
  br i1 %737, label %738, label %739

738:                                              ; preds = %732
  br label %820

739:                                              ; preds = %732
  store i32 0, ptr %9, align 4, !tbaa !9
  br label %740

740:                                              ; preds = %816, %739
  %741 = load i32, ptr %9, align 4, !tbaa !9
  %742 = load i32, ptr @lnum_types, align 4, !tbaa !9
  %743 = icmp slt i32 %741, %742
  br i1 %743, label %744, label %819

744:                                              ; preds = %740
  %745 = load i32, ptr %9, align 4, !tbaa !9
  %746 = load i32, ptr %8, align 4, !tbaa !9
  %747 = icmp eq i32 %745, %746
  br i1 %747, label %748, label %749

748:                                              ; preds = %744
  br label %816

749:                                              ; preds = %744
  store i32 0, ptr %10, align 4, !tbaa !9
  br label %750

750:                                              ; preds = %774, %749
  %751 = load i32, ptr %10, align 4, !tbaa !9
  %752 = load i32, ptr %8, align 4, !tbaa !9
  %753 = sext i32 %752 to i64
  %754 = getelementptr inbounds [50 x i32], ptr @lnum_either_ty, i64 0, i64 %753
  %755 = load i32, ptr %754, align 4, !tbaa !9
  %756 = icmp slt i32 %751, %755
  br i1 %756, label %757, label %777

757:                                              ; preds = %750
  %758 = load i32, ptr %8, align 4, !tbaa !9
  %759 = sext i32 %758 to i64
  %760 = getelementptr inbounds [50 x [50 x i32]], ptr @leither_ty, i64 0, i64 %759
  %761 = load i32, ptr %10, align 4, !tbaa !9
  %762 = sext i32 %761 to i64
  %763 = getelementptr inbounds [50 x i32], ptr %760, i64 0, i64 %762
  %764 = load i32, ptr %763, align 4, !tbaa !9
  %765 = sext i32 %764 to i64
  %766 = getelementptr inbounds [50 x [50 x i8]], ptr %13, i64 0, i64 %765
  %767 = load i32, ptr %9, align 4, !tbaa !9
  %768 = sext i32 %767 to i64
  %769 = getelementptr inbounds [50 x i8], ptr %766, i64 0, i64 %768
  %770 = load i8, ptr %769, align 1, !tbaa !53
  %771 = icmp ne i8 %770, 0
  br i1 %771, label %773, label %772

772:                                              ; preds = %757
  br label %777

773:                                              ; preds = %757
  br label %774

774:                                              ; preds = %773
  %775 = load i32, ptr %10, align 4, !tbaa !9
  %776 = add nsw i32 %775, 1
  store i32 %776, ptr %10, align 4, !tbaa !9
  br label %750, !llvm.loop !62

777:                                              ; preds = %772, %750
  %778 = load i32, ptr %10, align 4, !tbaa !9
  %779 = load i32, ptr %8, align 4, !tbaa !9
  %780 = sext i32 %779 to i64
  %781 = getelementptr inbounds [50 x i32], ptr @lnum_either_ty, i64 0, i64 %780
  %782 = load i32, ptr %781, align 4, !tbaa !9
  %783 = icmp slt i32 %778, %782
  br i1 %783, label %784, label %785

784:                                              ; preds = %777
  br label %816

785:                                              ; preds = %777
  %786 = load i32, ptr %8, align 4, !tbaa !9
  %787 = sext i32 %786 to i64
  %788 = getelementptr inbounds [50 x [50 x i8]], ptr %13, i64 0, i64 %787
  %789 = load i32, ptr %9, align 4, !tbaa !9
  %790 = sext i32 %789 to i64
  %791 = getelementptr inbounds [50 x i8], ptr %788, i64 0, i64 %790
  store i8 1, ptr %791, align 1, !tbaa !53
  store i32 0, ptr %10, align 4, !tbaa !9
  br label %792

792:                                              ; preds = %812, %785
  %793 = load i32, ptr %10, align 4, !tbaa !9
  %794 = load i32, ptr %8, align 4, !tbaa !9
  %795 = sext i32 %794 to i64
  %796 = getelementptr inbounds [50 x i32], ptr @lnum_either_ty, i64 0, i64 %795
  %797 = load i32, ptr %796, align 4, !tbaa !9
  %798 = icmp slt i32 %793, %797
  br i1 %798, label %799, label %815

799:                                              ; preds = %792
  %800 = load i32, ptr %8, align 4, !tbaa !9
  %801 = sext i32 %800 to i64
  %802 = getelementptr inbounds [50 x [50 x i32]], ptr @leither_ty, i64 0, i64 %801
  %803 = load i32, ptr %10, align 4, !tbaa !9
  %804 = sext i32 %803 to i64
  %805 = getelementptr inbounds [50 x i32], ptr %802, i64 0, i64 %804
  %806 = load i32, ptr %805, align 4, !tbaa !9
  %807 = sext i32 %806 to i64
  %808 = getelementptr inbounds [50 x [50 x i8]], ptr %13, i64 0, i64 %807
  %809 = load i32, ptr %8, align 4, !tbaa !9
  %810 = sext i32 %809 to i64
  %811 = getelementptr inbounds [50 x i8], ptr %808, i64 0, i64 %810
  store i8 1, ptr %811, align 1, !tbaa !53
  br label %812

812:                                              ; preds = %799
  %813 = load i32, ptr %10, align 4, !tbaa !9
  %814 = add nsw i32 %813, 1
  store i32 %814, ptr %10, align 4, !tbaa !9
  br label %792, !llvm.loop !63

815:                                              ; preds = %792
  br label %816

816:                                              ; preds = %815, %784, %748
  %817 = load i32, ptr %9, align 4, !tbaa !9
  %818 = add nsw i32 %817, 1
  store i32 %818, ptr %9, align 4, !tbaa !9
  br label %740, !llvm.loop !64

819:                                              ; preds = %740
  br label %820

820:                                              ; preds = %819, %738
  %821 = load i32, ptr %8, align 4, !tbaa !9
  %822 = add nsw i32 %821, 1
  store i32 %822, ptr %8, align 4, !tbaa !9
  br label %728, !llvm.loop !65

823:                                              ; preds = %728
  store i32 0, ptr %9, align 4, !tbaa !9
  br label %824

824:                                              ; preds = %873, %823
  %825 = load i32, ptr %9, align 4, !tbaa !9
  %826 = load i32, ptr @lnum_types, align 4, !tbaa !9
  %827 = icmp slt i32 %825, %826
  br i1 %827, label %828, label %876

828:                                              ; preds = %824
  store i32 0, ptr %8, align 4, !tbaa !9
  br label %829

829:                                              ; preds = %869, %828
  %830 = load i32, ptr %8, align 4, !tbaa !9
  %831 = load i32, ptr @lnum_types, align 4, !tbaa !9
  %832 = icmp slt i32 %830, %831
  br i1 %832, label %833, label %872

833:                                              ; preds = %829
  %834 = load i32, ptr %8, align 4, !tbaa !9
  %835 = sext i32 %834 to i64
  %836 = getelementptr inbounds [50 x [50 x i8]], ptr %13, i64 0, i64 %835
  %837 = load i32, ptr %9, align 4, !tbaa !9
  %838 = sext i32 %837 to i64
  %839 = getelementptr inbounds [50 x i8], ptr %836, i64 0, i64 %838
  %840 = load i8, ptr %839, align 1, !tbaa !53
  %841 = icmp ne i8 %840, 0
  br i1 %841, label %842, label %868

842:                                              ; preds = %833
  store i32 0, ptr %10, align 4, !tbaa !9
  br label %843

843:                                              ; preds = %864, %842
  %844 = load i32, ptr %10, align 4, !tbaa !9
  %845 = load i32, ptr @lnum_types, align 4, !tbaa !9
  %846 = icmp slt i32 %844, %845
  br i1 %846, label %847, label %867

847:                                              ; preds = %843
  %848 = load i32, ptr %9, align 4, !tbaa !9
  %849 = sext i32 %848 to i64
  %850 = getelementptr inbounds [50 x [50 x i8]], ptr %13, i64 0, i64 %849
  %851 = load i32, ptr %10, align 4, !tbaa !9
  %852 = sext i32 %851 to i64
  %853 = getelementptr inbounds [50 x i8], ptr %850, i64 0, i64 %852
  %854 = load i8, ptr %853, align 1, !tbaa !53
  %855 = icmp ne i8 %854, 0
  br i1 %855, label %856, label %863

856:                                              ; preds = %847
  %857 = load i32, ptr %8, align 4, !tbaa !9
  %858 = sext i32 %857 to i64
  %859 = getelementptr inbounds [50 x [50 x i8]], ptr %13, i64 0, i64 %858
  %860 = load i32, ptr %10, align 4, !tbaa !9
  %861 = sext i32 %860 to i64
  %862 = getelementptr inbounds [50 x i8], ptr %859, i64 0, i64 %861
  store i8 1, ptr %862, align 1, !tbaa !53
  br label %863

863:                                              ; preds = %856, %847
  br label %864

864:                                              ; preds = %863
  %865 = load i32, ptr %10, align 4, !tbaa !9
  %866 = add nsw i32 %865, 1
  store i32 %866, ptr %10, align 4, !tbaa !9
  br label %843, !llvm.loop !66

867:                                              ; preds = %843
  br label %868

868:                                              ; preds = %867, %833
  br label %869

869:                                              ; preds = %868
  %870 = load i32, ptr %8, align 4, !tbaa !9
  %871 = add nsw i32 %870, 1
  store i32 %871, ptr %8, align 4, !tbaa !9
  br label %829, !llvm.loop !67

872:                                              ; preds = %829
  br label %873

873:                                              ; preds = %872
  %874 = load i32, ptr %9, align 4, !tbaa !9
  %875 = add nsw i32 %874, 1
  store i32 %875, ptr %9, align 4, !tbaa !9
  br label %824, !llvm.loop !68

876:                                              ; preds = %824
  %877 = load ptr, ptr @gparse_constants, align 8, !tbaa !5
  store ptr %877, ptr %2, align 8, !tbaa !5
  br label %878

878:                                              ; preds = %1033, %876
  %879 = load ptr, ptr %2, align 8, !tbaa !5
  %880 = icmp ne ptr %879, null
  br i1 %880, label %881, label %1037

881:                                              ; preds = %878
  %882 = call ptr @new_FactList()
  store ptr %882, ptr %14, align 8, !tbaa !5
  %883 = call ptr @new_TokenList()
  %884 = load ptr, ptr %14, align 8, !tbaa !5
  %885 = getelementptr inbounds %struct._FactList, ptr %884, i32 0, i32 0
  store ptr %883, ptr %885, align 8, !tbaa !69
  %886 = call ptr @new_TokenList()
  %887 = load ptr, ptr %14, align 8, !tbaa !5
  %888 = getelementptr inbounds %struct._FactList, ptr %887, i32 0, i32 0
  %889 = load ptr, ptr %888, align 8, !tbaa !69
  %890 = getelementptr inbounds %struct._TokenList, ptr %889, i32 0, i32 1
  store ptr %886, ptr %890, align 8, !tbaa !14
  %891 = load ptr, ptr %2, align 8, !tbaa !5
  %892 = getelementptr inbounds %struct._TypedList, ptr %891, i32 0, i32 0
  %893 = load ptr, ptr %892, align 8, !tbaa !11
  %894 = call ptr @copy_Token(ptr noundef %893)
  %895 = load ptr, ptr %14, align 8, !tbaa !5
  %896 = getelementptr inbounds %struct._FactList, ptr %895, i32 0, i32 0
  %897 = load ptr, ptr %896, align 8, !tbaa !69
  %898 = getelementptr inbounds %struct._TokenList, ptr %897, i32 0, i32 0
  store ptr %894, ptr %898, align 8, !tbaa !16
  %899 = load ptr, ptr %2, align 8, !tbaa !5
  %900 = getelementptr inbounds %struct._TypedList, ptr %899, i32 0, i32 1
  %901 = load ptr, ptr %900, align 8, !tbaa !13
  %902 = getelementptr inbounds %struct._TokenList, ptr %901, i32 0, i32 1
  %903 = load ptr, ptr %902, align 8, !tbaa !14
  %904 = icmp ne ptr %903, null
  br i1 %904, label %905, label %952

905:                                              ; preds = %881
  %906 = call ptr @new_Token(i32 noundef 256)
  %907 = load ptr, ptr %14, align 8, !tbaa !5
  %908 = getelementptr inbounds %struct._FactList, ptr %907, i32 0, i32 0
  %909 = load ptr, ptr %908, align 8, !tbaa !69
  %910 = getelementptr inbounds %struct._TokenList, ptr %909, i32 0, i32 1
  %911 = load ptr, ptr %910, align 8, !tbaa !14
  %912 = getelementptr inbounds %struct._TokenList, ptr %911, i32 0, i32 0
  store ptr %906, ptr %912, align 8, !tbaa !16
  %913 = load ptr, ptr %14, align 8, !tbaa !5
  %914 = getelementptr inbounds %struct._FactList, ptr %913, i32 0, i32 0
  %915 = load ptr, ptr %914, align 8, !tbaa !69
  %916 = getelementptr inbounds %struct._TokenList, ptr %915, i32 0, i32 1
  %917 = load ptr, ptr %916, align 8, !tbaa !14
  %918 = getelementptr inbounds %struct._TokenList, ptr %917, i32 0, i32 0
  %919 = load ptr, ptr %918, align 8, !tbaa !16
  %920 = call ptr @strcpy(ptr noundef %919, ptr noundef @.str) #5
  %921 = load ptr, ptr %2, align 8, !tbaa !5
  %922 = getelementptr inbounds %struct._TypedList, ptr %921, i32 0, i32 1
  %923 = load ptr, ptr %922, align 8, !tbaa !13
  store ptr %923, ptr %4, align 8, !tbaa !5
  br label %924

924:                                              ; preds = %947, %905
  %925 = load ptr, ptr %4, align 8, !tbaa !5
  %926 = icmp ne ptr %925, null
  br i1 %926, label %927, label %951

927:                                              ; preds = %924
  %928 = load ptr, ptr %14, align 8, !tbaa !5
  %929 = getelementptr inbounds %struct._FactList, ptr %928, i32 0, i32 0
  %930 = load ptr, ptr %929, align 8, !tbaa !69
  %931 = getelementptr inbounds %struct._TokenList, ptr %930, i32 0, i32 1
  %932 = load ptr, ptr %931, align 8, !tbaa !14
  %933 = getelementptr inbounds %struct._TokenList, ptr %932, i32 0, i32 0
  %934 = load ptr, ptr %933, align 8, !tbaa !16
  %935 = call ptr @strcat(ptr noundef %934, ptr noundef @.str.1) #5
  %936 = load ptr, ptr %14, align 8, !tbaa !5
  %937 = getelementptr inbounds %struct._FactList, ptr %936, i32 0, i32 0
  %938 = load ptr, ptr %937, align 8, !tbaa !69
  %939 = getelementptr inbounds %struct._TokenList, ptr %938, i32 0, i32 1
  %940 = load ptr, ptr %939, align 8, !tbaa !14
  %941 = getelementptr inbounds %struct._TokenList, ptr %940, i32 0, i32 0
  %942 = load ptr, ptr %941, align 8, !tbaa !16
  %943 = load ptr, ptr %4, align 8, !tbaa !5
  %944 = getelementptr inbounds %struct._TokenList, ptr %943, i32 0, i32 0
  %945 = load ptr, ptr %944, align 8, !tbaa !16
  %946 = call ptr @strcat(ptr noundef %942, ptr noundef %945) #5
  br label %947

947:                                              ; preds = %927
  %948 = load ptr, ptr %4, align 8, !tbaa !5
  %949 = getelementptr inbounds %struct._TokenList, ptr %948, i32 0, i32 1
  %950 = load ptr, ptr %949, align 8, !tbaa !14
  store ptr %950, ptr %4, align 8, !tbaa !5
  br label %924, !llvm.loop !71

951:                                              ; preds = %924
  br label %965

952:                                              ; preds = %881
  %953 = load ptr, ptr %2, align 8, !tbaa !5
  %954 = getelementptr inbounds %struct._TypedList, ptr %953, i32 0, i32 1
  %955 = load ptr, ptr %954, align 8, !tbaa !13
  %956 = getelementptr inbounds %struct._TokenList, ptr %955, i32 0, i32 0
  %957 = load ptr, ptr %956, align 8, !tbaa !16
  %958 = call ptr @copy_Token(ptr noundef %957)
  %959 = load ptr, ptr %14, align 8, !tbaa !5
  %960 = getelementptr inbounds %struct._FactList, ptr %959, i32 0, i32 0
  %961 = load ptr, ptr %960, align 8, !tbaa !69
  %962 = getelementptr inbounds %struct._TokenList, ptr %961, i32 0, i32 1
  %963 = load ptr, ptr %962, align 8, !tbaa !14
  %964 = getelementptr inbounds %struct._TokenList, ptr %963, i32 0, i32 0
  store ptr %958, ptr %964, align 8, !tbaa !16
  br label %965

965:                                              ; preds = %952, %951
  %966 = load ptr, ptr @gorig_constant_list, align 8, !tbaa !5
  %967 = load ptr, ptr %14, align 8, !tbaa !5
  %968 = getelementptr inbounds %struct._FactList, ptr %967, i32 0, i32 1
  store ptr %966, ptr %968, align 8, !tbaa !72
  %969 = load ptr, ptr %14, align 8, !tbaa !5
  store ptr %969, ptr @gorig_constant_list, align 8, !tbaa !5
  %970 = load ptr, ptr %14, align 8, !tbaa !5
  %971 = getelementptr inbounds %struct._FactList, ptr %970, i32 0, i32 0
  %972 = load ptr, ptr %971, align 8, !tbaa !69
  %973 = getelementptr inbounds %struct._TokenList, ptr %972, i32 0, i32 1
  %974 = load ptr, ptr %973, align 8, !tbaa !14
  %975 = getelementptr inbounds %struct._TokenList, ptr %974, i32 0, i32 0
  %976 = load ptr, ptr %975, align 8, !tbaa !16
  %977 = call i32 @get_type(ptr noundef %976)
  store i32 %977, ptr %11, align 4, !tbaa !9
  store i32 0, ptr %8, align 4, !tbaa !9
  br label %978

978:                                              ; preds = %1029, %965
  %979 = load i32, ptr %8, align 4, !tbaa !9
  %980 = load i32, ptr @lnum_types, align 4, !tbaa !9
  %981 = icmp slt i32 %979, %980
  br i1 %981, label %982, label %1032

982:                                              ; preds = %978
  %983 = load i32, ptr %8, align 4, !tbaa !9
  %984 = load i32, ptr %11, align 4, !tbaa !9
  %985 = icmp eq i32 %983, %984
  br i1 %985, label %995, label %986

986:                                              ; preds = %982
  %987 = load i32, ptr %11, align 4, !tbaa !9
  %988 = sext i32 %987 to i64
  %989 = getelementptr inbounds [50 x [50 x i8]], ptr %13, i64 0, i64 %988
  %990 = load i32, ptr %8, align 4, !tbaa !9
  %991 = sext i32 %990 to i64
  %992 = getelementptr inbounds [50 x i8], ptr %989, i64 0, i64 %991
  %993 = load i8, ptr %992, align 1, !tbaa !53
  %994 = icmp ne i8 %993, 0
  br i1 %994, label %996, label %995

995:                                              ; preds = %986, %982
  br label %1029

996:                                              ; preds = %986
  %997 = call ptr @new_FactList()
  store ptr %997, ptr %14, align 8, !tbaa !5
  %998 = call ptr @new_TokenList()
  %999 = load ptr, ptr %14, align 8, !tbaa !5
  %1000 = getelementptr inbounds %struct._FactList, ptr %999, i32 0, i32 0
  store ptr %998, ptr %1000, align 8, !tbaa !69
  %1001 = call ptr @new_TokenList()
  %1002 = load ptr, ptr %14, align 8, !tbaa !5
  %1003 = getelementptr inbounds %struct._FactList, ptr %1002, i32 0, i32 0
  %1004 = load ptr, ptr %1003, align 8, !tbaa !69
  %1005 = getelementptr inbounds %struct._TokenList, ptr %1004, i32 0, i32 1
  store ptr %1001, ptr %1005, align 8, !tbaa !14
  %1006 = load ptr, ptr %2, align 8, !tbaa !5
  %1007 = getelementptr inbounds %struct._TypedList, ptr %1006, i32 0, i32 0
  %1008 = load ptr, ptr %1007, align 8, !tbaa !11
  %1009 = call ptr @copy_Token(ptr noundef %1008)
  %1010 = load ptr, ptr %14, align 8, !tbaa !5
  %1011 = getelementptr inbounds %struct._FactList, ptr %1010, i32 0, i32 0
  %1012 = load ptr, ptr %1011, align 8, !tbaa !69
  %1013 = getelementptr inbounds %struct._TokenList, ptr %1012, i32 0, i32 0
  store ptr %1009, ptr %1013, align 8, !tbaa !16
  %1014 = load i32, ptr %8, align 4, !tbaa !9
  %1015 = sext i32 %1014 to i64
  %1016 = getelementptr inbounds [50 x ptr], ptr @ltype_names, i64 0, i64 %1015
  %1017 = load ptr, ptr %1016, align 8, !tbaa !5
  %1018 = call ptr @copy_Token(ptr noundef %1017)
  %1019 = load ptr, ptr %14, align 8, !tbaa !5
  %1020 = getelementptr inbounds %struct._FactList, ptr %1019, i32 0, i32 0
  %1021 = load ptr, ptr %1020, align 8, !tbaa !69
  %1022 = getelementptr inbounds %struct._TokenList, ptr %1021, i32 0, i32 1
  %1023 = load ptr, ptr %1022, align 8, !tbaa !14
  %1024 = getelementptr inbounds %struct._TokenList, ptr %1023, i32 0, i32 0
  store ptr %1018, ptr %1024, align 8, !tbaa !16
  %1025 = load ptr, ptr @gorig_constant_list, align 8, !tbaa !5
  %1026 = load ptr, ptr %14, align 8, !tbaa !5
  %1027 = getelementptr inbounds %struct._FactList, ptr %1026, i32 0, i32 1
  store ptr %1025, ptr %1027, align 8, !tbaa !72
  %1028 = load ptr, ptr %14, align 8, !tbaa !5
  store ptr %1028, ptr @gorig_constant_list, align 8, !tbaa !5
  br label %1029

1029:                                             ; preds = %996, %995
  %1030 = load i32, ptr %8, align 4, !tbaa !9
  %1031 = add nsw i32 %1030, 1
  store i32 %1031, ptr %8, align 4, !tbaa !9
  br label %978, !llvm.loop !73

1032:                                             ; preds = %978
  br label %1033

1033:                                             ; preds = %1032
  %1034 = load ptr, ptr %2, align 8, !tbaa !5
  %1035 = getelementptr inbounds %struct._TypedList, ptr %1034, i32 0, i32 3
  %1036 = load ptr, ptr %1035, align 8, !tbaa !20
  store ptr %1036, ptr %2, align 8, !tbaa !5
  br label %878, !llvm.loop !74

1037:                                             ; preds = %878
  %1038 = load ptr, ptr @gparse_objects, align 8, !tbaa !5
  store ptr %1038, ptr %2, align 8, !tbaa !5
  br label %1039

1039:                                             ; preds = %1194, %1037
  %1040 = load ptr, ptr %2, align 8, !tbaa !5
  %1041 = icmp ne ptr %1040, null
  br i1 %1041, label %1042, label %1198

1042:                                             ; preds = %1039
  %1043 = call ptr @new_FactList()
  store ptr %1043, ptr %14, align 8, !tbaa !5
  %1044 = call ptr @new_TokenList()
  %1045 = load ptr, ptr %14, align 8, !tbaa !5
  %1046 = getelementptr inbounds %struct._FactList, ptr %1045, i32 0, i32 0
  store ptr %1044, ptr %1046, align 8, !tbaa !69
  %1047 = call ptr @new_TokenList()
  %1048 = load ptr, ptr %14, align 8, !tbaa !5
  %1049 = getelementptr inbounds %struct._FactList, ptr %1048, i32 0, i32 0
  %1050 = load ptr, ptr %1049, align 8, !tbaa !69
  %1051 = getelementptr inbounds %struct._TokenList, ptr %1050, i32 0, i32 1
  store ptr %1047, ptr %1051, align 8, !tbaa !14
  %1052 = load ptr, ptr %2, align 8, !tbaa !5
  %1053 = getelementptr inbounds %struct._TypedList, ptr %1052, i32 0, i32 0
  %1054 = load ptr, ptr %1053, align 8, !tbaa !11
  %1055 = call ptr @copy_Token(ptr noundef %1054)
  %1056 = load ptr, ptr %14, align 8, !tbaa !5
  %1057 = getelementptr inbounds %struct._FactList, ptr %1056, i32 0, i32 0
  %1058 = load ptr, ptr %1057, align 8, !tbaa !69
  %1059 = getelementptr inbounds %struct._TokenList, ptr %1058, i32 0, i32 0
  store ptr %1055, ptr %1059, align 8, !tbaa !16
  %1060 = load ptr, ptr %2, align 8, !tbaa !5
  %1061 = getelementptr inbounds %struct._TypedList, ptr %1060, i32 0, i32 1
  %1062 = load ptr, ptr %1061, align 8, !tbaa !13
  %1063 = getelementptr inbounds %struct._TokenList, ptr %1062, i32 0, i32 1
  %1064 = load ptr, ptr %1063, align 8, !tbaa !14
  %1065 = icmp ne ptr %1064, null
  br i1 %1065, label %1066, label %1113

1066:                                             ; preds = %1042
  %1067 = call ptr @new_Token(i32 noundef 256)
  %1068 = load ptr, ptr %14, align 8, !tbaa !5
  %1069 = getelementptr inbounds %struct._FactList, ptr %1068, i32 0, i32 0
  %1070 = load ptr, ptr %1069, align 8, !tbaa !69
  %1071 = getelementptr inbounds %struct._TokenList, ptr %1070, i32 0, i32 1
  %1072 = load ptr, ptr %1071, align 8, !tbaa !14
  %1073 = getelementptr inbounds %struct._TokenList, ptr %1072, i32 0, i32 0
  store ptr %1067, ptr %1073, align 8, !tbaa !16
  %1074 = load ptr, ptr %14, align 8, !tbaa !5
  %1075 = getelementptr inbounds %struct._FactList, ptr %1074, i32 0, i32 0
  %1076 = load ptr, ptr %1075, align 8, !tbaa !69
  %1077 = getelementptr inbounds %struct._TokenList, ptr %1076, i32 0, i32 1
  %1078 = load ptr, ptr %1077, align 8, !tbaa !14
  %1079 = getelementptr inbounds %struct._TokenList, ptr %1078, i32 0, i32 0
  %1080 = load ptr, ptr %1079, align 8, !tbaa !16
  %1081 = call ptr @strcpy(ptr noundef %1080, ptr noundef @.str) #5
  %1082 = load ptr, ptr %2, align 8, !tbaa !5
  %1083 = getelementptr inbounds %struct._TypedList, ptr %1082, i32 0, i32 1
  %1084 = load ptr, ptr %1083, align 8, !tbaa !13
  store ptr %1084, ptr %4, align 8, !tbaa !5
  br label %1085

1085:                                             ; preds = %1108, %1066
  %1086 = load ptr, ptr %4, align 8, !tbaa !5
  %1087 = icmp ne ptr %1086, null
  br i1 %1087, label %1088, label %1112

1088:                                             ; preds = %1085
  %1089 = load ptr, ptr %14, align 8, !tbaa !5
  %1090 = getelementptr inbounds %struct._FactList, ptr %1089, i32 0, i32 0
  %1091 = load ptr, ptr %1090, align 8, !tbaa !69
  %1092 = getelementptr inbounds %struct._TokenList, ptr %1091, i32 0, i32 1
  %1093 = load ptr, ptr %1092, align 8, !tbaa !14
  %1094 = getelementptr inbounds %struct._TokenList, ptr %1093, i32 0, i32 0
  %1095 = load ptr, ptr %1094, align 8, !tbaa !16
  %1096 = call ptr @strcat(ptr noundef %1095, ptr noundef @.str.1) #5
  %1097 = load ptr, ptr %14, align 8, !tbaa !5
  %1098 = getelementptr inbounds %struct._FactList, ptr %1097, i32 0, i32 0
  %1099 = load ptr, ptr %1098, align 8, !tbaa !69
  %1100 = getelementptr inbounds %struct._TokenList, ptr %1099, i32 0, i32 1
  %1101 = load ptr, ptr %1100, align 8, !tbaa !14
  %1102 = getelementptr inbounds %struct._TokenList, ptr %1101, i32 0, i32 0
  %1103 = load ptr, ptr %1102, align 8, !tbaa !16
  %1104 = load ptr, ptr %4, align 8, !tbaa !5
  %1105 = getelementptr inbounds %struct._TokenList, ptr %1104, i32 0, i32 0
  %1106 = load ptr, ptr %1105, align 8, !tbaa !16
  %1107 = call ptr @strcat(ptr noundef %1103, ptr noundef %1106) #5
  br label %1108

1108:                                             ; preds = %1088
  %1109 = load ptr, ptr %4, align 8, !tbaa !5
  %1110 = getelementptr inbounds %struct._TokenList, ptr %1109, i32 0, i32 1
  %1111 = load ptr, ptr %1110, align 8, !tbaa !14
  store ptr %1111, ptr %4, align 8, !tbaa !5
  br label %1085, !llvm.loop !75

1112:                                             ; preds = %1085
  br label %1126

1113:                                             ; preds = %1042
  %1114 = load ptr, ptr %2, align 8, !tbaa !5
  %1115 = getelementptr inbounds %struct._TypedList, ptr %1114, i32 0, i32 1
  %1116 = load ptr, ptr %1115, align 8, !tbaa !13
  %1117 = getelementptr inbounds %struct._TokenList, ptr %1116, i32 0, i32 0
  %1118 = load ptr, ptr %1117, align 8, !tbaa !16
  %1119 = call ptr @copy_Token(ptr noundef %1118)
  %1120 = load ptr, ptr %14, align 8, !tbaa !5
  %1121 = getelementptr inbounds %struct._FactList, ptr %1120, i32 0, i32 0
  %1122 = load ptr, ptr %1121, align 8, !tbaa !69
  %1123 = getelementptr inbounds %struct._TokenList, ptr %1122, i32 0, i32 1
  %1124 = load ptr, ptr %1123, align 8, !tbaa !14
  %1125 = getelementptr inbounds %struct._TokenList, ptr %1124, i32 0, i32 0
  store ptr %1119, ptr %1125, align 8, !tbaa !16
  br label %1126

1126:                                             ; preds = %1113, %1112
  %1127 = load ptr, ptr @gorig_constant_list, align 8, !tbaa !5
  %1128 = load ptr, ptr %14, align 8, !tbaa !5
  %1129 = getelementptr inbounds %struct._FactList, ptr %1128, i32 0, i32 1
  store ptr %1127, ptr %1129, align 8, !tbaa !72
  %1130 = load ptr, ptr %14, align 8, !tbaa !5
  store ptr %1130, ptr @gorig_constant_list, align 8, !tbaa !5
  %1131 = load ptr, ptr %14, align 8, !tbaa !5
  %1132 = getelementptr inbounds %struct._FactList, ptr %1131, i32 0, i32 0
  %1133 = load ptr, ptr %1132, align 8, !tbaa !69
  %1134 = getelementptr inbounds %struct._TokenList, ptr %1133, i32 0, i32 1
  %1135 = load ptr, ptr %1134, align 8, !tbaa !14
  %1136 = getelementptr inbounds %struct._TokenList, ptr %1135, i32 0, i32 0
  %1137 = load ptr, ptr %1136, align 8, !tbaa !16
  %1138 = call i32 @get_type(ptr noundef %1137)
  store i32 %1138, ptr %11, align 4, !tbaa !9
  store i32 0, ptr %8, align 4, !tbaa !9
  br label %1139

1139:                                             ; preds = %1190, %1126
  %1140 = load i32, ptr %8, align 4, !tbaa !9
  %1141 = load i32, ptr @lnum_types, align 4, !tbaa !9
  %1142 = icmp slt i32 %1140, %1141
  br i1 %1142, label %1143, label %1193

1143:                                             ; preds = %1139
  %1144 = load i32, ptr %8, align 4, !tbaa !9
  %1145 = load i32, ptr %11, align 4, !tbaa !9
  %1146 = icmp eq i32 %1144, %1145
  br i1 %1146, label %1156, label %1147

1147:                                             ; preds = %1143
  %1148 = load i32, ptr %11, align 4, !tbaa !9
  %1149 = sext i32 %1148 to i64
  %1150 = getelementptr inbounds [50 x [50 x i8]], ptr %13, i64 0, i64 %1149
  %1151 = load i32, ptr %8, align 4, !tbaa !9
  %1152 = sext i32 %1151 to i64
  %1153 = getelementptr inbounds [50 x i8], ptr %1150, i64 0, i64 %1152
  %1154 = load i8, ptr %1153, align 1, !tbaa !53
  %1155 = icmp ne i8 %1154, 0
  br i1 %1155, label %1157, label %1156

1156:                                             ; preds = %1147, %1143
  br label %1190

1157:                                             ; preds = %1147
  %1158 = call ptr @new_FactList()
  store ptr %1158, ptr %14, align 8, !tbaa !5
  %1159 = call ptr @new_TokenList()
  %1160 = load ptr, ptr %14, align 8, !tbaa !5
  %1161 = getelementptr inbounds %struct._FactList, ptr %1160, i32 0, i32 0
  store ptr %1159, ptr %1161, align 8, !tbaa !69
  %1162 = call ptr @new_TokenList()
  %1163 = load ptr, ptr %14, align 8, !tbaa !5
  %1164 = getelementptr inbounds %struct._FactList, ptr %1163, i32 0, i32 0
  %1165 = load ptr, ptr %1164, align 8, !tbaa !69
  %1166 = getelementptr inbounds %struct._TokenList, ptr %1165, i32 0, i32 1
  store ptr %1162, ptr %1166, align 8, !tbaa !14
  %1167 = load ptr, ptr %2, align 8, !tbaa !5
  %1168 = getelementptr inbounds %struct._TypedList, ptr %1167, i32 0, i32 0
  %1169 = load ptr, ptr %1168, align 8, !tbaa !11
  %1170 = call ptr @copy_Token(ptr noundef %1169)
  %1171 = load ptr, ptr %14, align 8, !tbaa !5
  %1172 = getelementptr inbounds %struct._FactList, ptr %1171, i32 0, i32 0
  %1173 = load ptr, ptr %1172, align 8, !tbaa !69
  %1174 = getelementptr inbounds %struct._TokenList, ptr %1173, i32 0, i32 0
  store ptr %1170, ptr %1174, align 8, !tbaa !16
  %1175 = load i32, ptr %8, align 4, !tbaa !9
  %1176 = sext i32 %1175 to i64
  %1177 = getelementptr inbounds [50 x ptr], ptr @ltype_names, i64 0, i64 %1176
  %1178 = load ptr, ptr %1177, align 8, !tbaa !5
  %1179 = call ptr @copy_Token(ptr noundef %1178)
  %1180 = load ptr, ptr %14, align 8, !tbaa !5
  %1181 = getelementptr inbounds %struct._FactList, ptr %1180, i32 0, i32 0
  %1182 = load ptr, ptr %1181, align 8, !tbaa !69
  %1183 = getelementptr inbounds %struct._TokenList, ptr %1182, i32 0, i32 1
  %1184 = load ptr, ptr %1183, align 8, !tbaa !14
  %1185 = getelementptr inbounds %struct._TokenList, ptr %1184, i32 0, i32 0
  store ptr %1179, ptr %1185, align 8, !tbaa !16
  %1186 = load ptr, ptr @gorig_constant_list, align 8, !tbaa !5
  %1187 = load ptr, ptr %14, align 8, !tbaa !5
  %1188 = getelementptr inbounds %struct._FactList, ptr %1187, i32 0, i32 1
  store ptr %1186, ptr %1188, align 8, !tbaa !72
  %1189 = load ptr, ptr %14, align 8, !tbaa !5
  store ptr %1189, ptr @gorig_constant_list, align 8, !tbaa !5
  br label %1190

1190:                                             ; preds = %1157, %1156
  %1191 = load i32, ptr %8, align 4, !tbaa !9
  %1192 = add nsw i32 %1191, 1
  store i32 %1192, ptr %8, align 4, !tbaa !9
  br label %1139, !llvm.loop !76

1193:                                             ; preds = %1139
  br label %1194

1194:                                             ; preds = %1193
  %1195 = load ptr, ptr %2, align 8, !tbaa !5
  %1196 = getelementptr inbounds %struct._TypedList, ptr %1195, i32 0, i32 3
  %1197 = load ptr, ptr %1196, align 8, !tbaa !20
  store ptr %1197, ptr %2, align 8, !tbaa !5
  br label %1039, !llvm.loop !77

1198:                                             ; preds = %1039
  call void @normalize_tyl_in_pl(ptr noundef @gorig_goal_facts)
  %1199 = load ptr, ptr @gloaded_ops, align 8, !tbaa !5
  store ptr %1199, ptr %7, align 8, !tbaa !5
  br label %1200

1200:                                             ; preds = %1417, %1198
  %1201 = load ptr, ptr %7, align 8, !tbaa !5
  %1202 = icmp ne ptr %1201, null
  br i1 %1202, label %1203, label %1421

1203:                                             ; preds = %1200
  %1204 = load ptr, ptr %7, align 8, !tbaa !5
  %1205 = getelementptr inbounds %struct._PlOperator, ptr %1204, i32 0, i32 5
  call void @normalize_tyl_in_pl(ptr noundef %1205)
  %1206 = load ptr, ptr %7, align 8, !tbaa !5
  %1207 = getelementptr inbounds %struct._PlOperator, ptr %1206, i32 0, i32 6
  call void @normalize_tyl_in_pl(ptr noundef %1207)
  %1208 = load ptr, ptr %7, align 8, !tbaa !5
  %1209 = getelementptr inbounds %struct._PlOperator, ptr %1208, i32 0, i32 3
  %1210 = load ptr, ptr %1209, align 8, !tbaa !38
  %1211 = icmp ne ptr %1210, null
  br i1 %1211, label %1213, label %1212

1212:                                             ; preds = %1203
  br label %1417

1213:                                             ; preds = %1203
  %1214 = call ptr @new_FactList()
  store ptr %1214, ptr %14, align 8, !tbaa !5
  %1215 = call ptr @new_TokenList()
  %1216 = load ptr, ptr %14, align 8, !tbaa !5
  %1217 = getelementptr inbounds %struct._FactList, ptr %1216, i32 0, i32 0
  store ptr %1215, ptr %1217, align 8, !tbaa !69
  %1218 = call ptr @new_TokenList()
  %1219 = load ptr, ptr %14, align 8, !tbaa !5
  %1220 = getelementptr inbounds %struct._FactList, ptr %1219, i32 0, i32 0
  %1221 = load ptr, ptr %1220, align 8, !tbaa !69
  %1222 = getelementptr inbounds %struct._TokenList, ptr %1221, i32 0, i32 1
  store ptr %1218, ptr %1222, align 8, !tbaa !14
  %1223 = load ptr, ptr %7, align 8, !tbaa !5
  %1224 = getelementptr inbounds %struct._PlOperator, ptr %1223, i32 0, i32 3
  %1225 = load ptr, ptr %1224, align 8, !tbaa !38
  %1226 = getelementptr inbounds %struct._TypedList, ptr %1225, i32 0, i32 0
  %1227 = load ptr, ptr %1226, align 8, !tbaa !11
  %1228 = call ptr @copy_Token(ptr noundef %1227)
  %1229 = load ptr, ptr %14, align 8, !tbaa !5
  %1230 = getelementptr inbounds %struct._FactList, ptr %1229, i32 0, i32 0
  %1231 = load ptr, ptr %1230, align 8, !tbaa !69
  %1232 = getelementptr inbounds %struct._TokenList, ptr %1231, i32 0, i32 0
  store ptr %1228, ptr %1232, align 8, !tbaa !16
  %1233 = load ptr, ptr %7, align 8, !tbaa !5
  %1234 = getelementptr inbounds %struct._PlOperator, ptr %1233, i32 0, i32 3
  %1235 = load ptr, ptr %1234, align 8, !tbaa !38
  %1236 = getelementptr inbounds %struct._TypedList, ptr %1235, i32 0, i32 1
  %1237 = load ptr, ptr %1236, align 8, !tbaa !13
  %1238 = getelementptr inbounds %struct._TokenList, ptr %1237, i32 0, i32 1
  %1239 = load ptr, ptr %1238, align 8, !tbaa !14
  %1240 = icmp ne ptr %1239, null
  br i1 %1240, label %1241, label %1290

1241:                                             ; preds = %1213
  %1242 = call ptr @new_Token(i32 noundef 256)
  %1243 = load ptr, ptr %14, align 8, !tbaa !5
  %1244 = getelementptr inbounds %struct._FactList, ptr %1243, i32 0, i32 0
  %1245 = load ptr, ptr %1244, align 8, !tbaa !69
  %1246 = getelementptr inbounds %struct._TokenList, ptr %1245, i32 0, i32 1
  %1247 = load ptr, ptr %1246, align 8, !tbaa !14
  %1248 = getelementptr inbounds %struct._TokenList, ptr %1247, i32 0, i32 0
  store ptr %1242, ptr %1248, align 8, !tbaa !16
  %1249 = load ptr, ptr %14, align 8, !tbaa !5
  %1250 = getelementptr inbounds %struct._FactList, ptr %1249, i32 0, i32 0
  %1251 = load ptr, ptr %1250, align 8, !tbaa !69
  %1252 = getelementptr inbounds %struct._TokenList, ptr %1251, i32 0, i32 1
  %1253 = load ptr, ptr %1252, align 8, !tbaa !14
  %1254 = getelementptr inbounds %struct._TokenList, ptr %1253, i32 0, i32 0
  %1255 = load ptr, ptr %1254, align 8, !tbaa !16
  %1256 = call ptr @strcpy(ptr noundef %1255, ptr noundef @.str) #5
  %1257 = load ptr, ptr %7, align 8, !tbaa !5
  %1258 = getelementptr inbounds %struct._PlOperator, ptr %1257, i32 0, i32 3
  %1259 = load ptr, ptr %1258, align 8, !tbaa !38
  %1260 = getelementptr inbounds %struct._TypedList, ptr %1259, i32 0, i32 1
  %1261 = load ptr, ptr %1260, align 8, !tbaa !13
  store ptr %1261, ptr %4, align 8, !tbaa !5
  br label %1262

1262:                                             ; preds = %1285, %1241
  %1263 = load ptr, ptr %4, align 8, !tbaa !5
  %1264 = icmp ne ptr %1263, null
  br i1 %1264, label %1265, label %1289

1265:                                             ; preds = %1262
  %1266 = load ptr, ptr %14, align 8, !tbaa !5
  %1267 = getelementptr inbounds %struct._FactList, ptr %1266, i32 0, i32 0
  %1268 = load ptr, ptr %1267, align 8, !tbaa !69
  %1269 = getelementptr inbounds %struct._TokenList, ptr %1268, i32 0, i32 1
  %1270 = load ptr, ptr %1269, align 8, !tbaa !14
  %1271 = getelementptr inbounds %struct._TokenList, ptr %1270, i32 0, i32 0
  %1272 = load ptr, ptr %1271, align 8, !tbaa !16
  %1273 = call ptr @strcat(ptr noundef %1272, ptr noundef @.str.1) #5
  %1274 = load ptr, ptr %14, align 8, !tbaa !5
  %1275 = getelementptr inbounds %struct._FactList, ptr %1274, i32 0, i32 0
  %1276 = load ptr, ptr %1275, align 8, !tbaa !69
  %1277 = getelementptr inbounds %struct._TokenList, ptr %1276, i32 0, i32 1
  %1278 = load ptr, ptr %1277, align 8, !tbaa !14
  %1279 = getelementptr inbounds %struct._TokenList, ptr %1278, i32 0, i32 0
  %1280 = load ptr, ptr %1279, align 8, !tbaa !16
  %1281 = load ptr, ptr %4, align 8, !tbaa !5
  %1282 = getelementptr inbounds %struct._TokenList, ptr %1281, i32 0, i32 0
  %1283 = load ptr, ptr %1282, align 8, !tbaa !16
  %1284 = call ptr @strcat(ptr noundef %1280, ptr noundef %1283) #5
  br label %1285

1285:                                             ; preds = %1265
  %1286 = load ptr, ptr %4, align 8, !tbaa !5
  %1287 = getelementptr inbounds %struct._TokenList, ptr %1286, i32 0, i32 1
  %1288 = load ptr, ptr %1287, align 8, !tbaa !14
  store ptr %1288, ptr %4, align 8, !tbaa !5
  br label %1262, !llvm.loop !78

1289:                                             ; preds = %1262
  br label %1305

1290:                                             ; preds = %1213
  %1291 = load ptr, ptr %7, align 8, !tbaa !5
  %1292 = getelementptr inbounds %struct._PlOperator, ptr %1291, i32 0, i32 3
  %1293 = load ptr, ptr %1292, align 8, !tbaa !38
  %1294 = getelementptr inbounds %struct._TypedList, ptr %1293, i32 0, i32 1
  %1295 = load ptr, ptr %1294, align 8, !tbaa !13
  %1296 = getelementptr inbounds %struct._TokenList, ptr %1295, i32 0, i32 0
  %1297 = load ptr, ptr %1296, align 8, !tbaa !16
  %1298 = call ptr @copy_Token(ptr noundef %1297)
  %1299 = load ptr, ptr %14, align 8, !tbaa !5
  %1300 = getelementptr inbounds %struct._FactList, ptr %1299, i32 0, i32 0
  %1301 = load ptr, ptr %1300, align 8, !tbaa !69
  %1302 = getelementptr inbounds %struct._TokenList, ptr %1301, i32 0, i32 1
  %1303 = load ptr, ptr %1302, align 8, !tbaa !14
  %1304 = getelementptr inbounds %struct._TokenList, ptr %1303, i32 0, i32 0
  store ptr %1298, ptr %1304, align 8, !tbaa !16
  br label %1305

1305:                                             ; preds = %1290, %1289
  %1306 = load ptr, ptr %14, align 8, !tbaa !5
  %1307 = load ptr, ptr %7, align 8, !tbaa !5
  %1308 = getelementptr inbounds %struct._PlOperator, ptr %1307, i32 0, i32 4
  store ptr %1306, ptr %1308, align 8, !tbaa !79
  %1309 = load ptr, ptr %14, align 8, !tbaa !5
  store ptr %1309, ptr %15, align 8, !tbaa !5
  %1310 = load ptr, ptr %7, align 8, !tbaa !5
  %1311 = getelementptr inbounds %struct._PlOperator, ptr %1310, i32 0, i32 3
  %1312 = load ptr, ptr %1311, align 8, !tbaa !38
  %1313 = getelementptr inbounds %struct._TypedList, ptr %1312, i32 0, i32 3
  %1314 = load ptr, ptr %1313, align 8, !tbaa !20
  store ptr %1314, ptr %2, align 8, !tbaa !5
  br label %1315

1315:                                             ; preds = %1407, %1305
  %1316 = load ptr, ptr %2, align 8, !tbaa !5
  %1317 = icmp ne ptr %1316, null
  br i1 %1317, label %1318, label %1411

1318:                                             ; preds = %1315
  %1319 = call ptr @new_FactList()
  store ptr %1319, ptr %14, align 8, !tbaa !5
  %1320 = call ptr @new_TokenList()
  %1321 = load ptr, ptr %14, align 8, !tbaa !5
  %1322 = getelementptr inbounds %struct._FactList, ptr %1321, i32 0, i32 0
  store ptr %1320, ptr %1322, align 8, !tbaa !69
  %1323 = call ptr @new_TokenList()
  %1324 = load ptr, ptr %14, align 8, !tbaa !5
  %1325 = getelementptr inbounds %struct._FactList, ptr %1324, i32 0, i32 0
  %1326 = load ptr, ptr %1325, align 8, !tbaa !69
  %1327 = getelementptr inbounds %struct._TokenList, ptr %1326, i32 0, i32 1
  store ptr %1323, ptr %1327, align 8, !tbaa !14
  %1328 = load ptr, ptr %2, align 8, !tbaa !5
  %1329 = getelementptr inbounds %struct._TypedList, ptr %1328, i32 0, i32 0
  %1330 = load ptr, ptr %1329, align 8, !tbaa !11
  %1331 = call ptr @copy_Token(ptr noundef %1330)
  %1332 = load ptr, ptr %14, align 8, !tbaa !5
  %1333 = getelementptr inbounds %struct._FactList, ptr %1332, i32 0, i32 0
  %1334 = load ptr, ptr %1333, align 8, !tbaa !69
  %1335 = getelementptr inbounds %struct._TokenList, ptr %1334, i32 0, i32 0
  store ptr %1331, ptr %1335, align 8, !tbaa !16
  %1336 = load ptr, ptr %2, align 8, !tbaa !5
  %1337 = getelementptr inbounds %struct._TypedList, ptr %1336, i32 0, i32 1
  %1338 = load ptr, ptr %1337, align 8, !tbaa !13
  %1339 = getelementptr inbounds %struct._TokenList, ptr %1338, i32 0, i32 1
  %1340 = load ptr, ptr %1339, align 8, !tbaa !14
  %1341 = icmp ne ptr %1340, null
  br i1 %1341, label %1342, label %1389

1342:                                             ; preds = %1318
  %1343 = call ptr @new_Token(i32 noundef 256)
  %1344 = load ptr, ptr %14, align 8, !tbaa !5
  %1345 = getelementptr inbounds %struct._FactList, ptr %1344, i32 0, i32 0
  %1346 = load ptr, ptr %1345, align 8, !tbaa !69
  %1347 = getelementptr inbounds %struct._TokenList, ptr %1346, i32 0, i32 1
  %1348 = load ptr, ptr %1347, align 8, !tbaa !14
  %1349 = getelementptr inbounds %struct._TokenList, ptr %1348, i32 0, i32 0
  store ptr %1343, ptr %1349, align 8, !tbaa !16
  %1350 = load ptr, ptr %14, align 8, !tbaa !5
  %1351 = getelementptr inbounds %struct._FactList, ptr %1350, i32 0, i32 0
  %1352 = load ptr, ptr %1351, align 8, !tbaa !69
  %1353 = getelementptr inbounds %struct._TokenList, ptr %1352, i32 0, i32 1
  %1354 = load ptr, ptr %1353, align 8, !tbaa !14
  %1355 = getelementptr inbounds %struct._TokenList, ptr %1354, i32 0, i32 0
  %1356 = load ptr, ptr %1355, align 8, !tbaa !16
  %1357 = call ptr @strcpy(ptr noundef %1356, ptr noundef @.str) #5
  %1358 = load ptr, ptr %2, align 8, !tbaa !5
  %1359 = getelementptr inbounds %struct._TypedList, ptr %1358, i32 0, i32 1
  %1360 = load ptr, ptr %1359, align 8, !tbaa !13
  store ptr %1360, ptr %4, align 8, !tbaa !5
  br label %1361

1361:                                             ; preds = %1384, %1342
  %1362 = load ptr, ptr %4, align 8, !tbaa !5
  %1363 = icmp ne ptr %1362, null
  br i1 %1363, label %1364, label %1388

1364:                                             ; preds = %1361
  %1365 = load ptr, ptr %14, align 8, !tbaa !5
  %1366 = getelementptr inbounds %struct._FactList, ptr %1365, i32 0, i32 0
  %1367 = load ptr, ptr %1366, align 8, !tbaa !69
  %1368 = getelementptr inbounds %struct._TokenList, ptr %1367, i32 0, i32 1
  %1369 = load ptr, ptr %1368, align 8, !tbaa !14
  %1370 = getelementptr inbounds %struct._TokenList, ptr %1369, i32 0, i32 0
  %1371 = load ptr, ptr %1370, align 8, !tbaa !16
  %1372 = call ptr @strcat(ptr noundef %1371, ptr noundef @.str.1) #5
  %1373 = load ptr, ptr %14, align 8, !tbaa !5
  %1374 = getelementptr inbounds %struct._FactList, ptr %1373, i32 0, i32 0
  %1375 = load ptr, ptr %1374, align 8, !tbaa !69
  %1376 = getelementptr inbounds %struct._TokenList, ptr %1375, i32 0, i32 1
  %1377 = load ptr, ptr %1376, align 8, !tbaa !14
  %1378 = getelementptr inbounds %struct._TokenList, ptr %1377, i32 0, i32 0
  %1379 = load ptr, ptr %1378, align 8, !tbaa !16
  %1380 = load ptr, ptr %4, align 8, !tbaa !5
  %1381 = getelementptr inbounds %struct._TokenList, ptr %1380, i32 0, i32 0
  %1382 = load ptr, ptr %1381, align 8, !tbaa !16
  %1383 = call ptr @strcat(ptr noundef %1379, ptr noundef %1382) #5
  br label %1384

1384:                                             ; preds = %1364
  %1385 = load ptr, ptr %4, align 8, !tbaa !5
  %1386 = getelementptr inbounds %struct._TokenList, ptr %1385, i32 0, i32 1
  %1387 = load ptr, ptr %1386, align 8, !tbaa !14
  store ptr %1387, ptr %4, align 8, !tbaa !5
  br label %1361, !llvm.loop !80

1388:                                             ; preds = %1361
  br label %1402

1389:                                             ; preds = %1318
  %1390 = load ptr, ptr %2, align 8, !tbaa !5
  %1391 = getelementptr inbounds %struct._TypedList, ptr %1390, i32 0, i32 1
  %1392 = load ptr, ptr %1391, align 8, !tbaa !13
  %1393 = getelementptr inbounds %struct._TokenList, ptr %1392, i32 0, i32 0
  %1394 = load ptr, ptr %1393, align 8, !tbaa !16
  %1395 = call ptr @copy_Token(ptr noundef %1394)
  %1396 = load ptr, ptr %14, align 8, !tbaa !5
  %1397 = getelementptr inbounds %struct._FactList, ptr %1396, i32 0, i32 0
  %1398 = load ptr, ptr %1397, align 8, !tbaa !69
  %1399 = getelementptr inbounds %struct._TokenList, ptr %1398, i32 0, i32 1
  %1400 = load ptr, ptr %1399, align 8, !tbaa !14
  %1401 = getelementptr inbounds %struct._TokenList, ptr %1400, i32 0, i32 0
  store ptr %1395, ptr %1401, align 8, !tbaa !16
  br label %1402

1402:                                             ; preds = %1389, %1388
  %1403 = load ptr, ptr %14, align 8, !tbaa !5
  %1404 = load ptr, ptr %15, align 8, !tbaa !5
  %1405 = getelementptr inbounds %struct._FactList, ptr %1404, i32 0, i32 1
  store ptr %1403, ptr %1405, align 8, !tbaa !72
  %1406 = load ptr, ptr %14, align 8, !tbaa !5
  store ptr %1406, ptr %15, align 8, !tbaa !5
  br label %1407

1407:                                             ; preds = %1402
  %1408 = load ptr, ptr %2, align 8, !tbaa !5
  %1409 = getelementptr inbounds %struct._TypedList, ptr %1408, i32 0, i32 3
  %1410 = load ptr, ptr %1409, align 8, !tbaa !20
  store ptr %1410, ptr %2, align 8, !tbaa !5
  br label %1315, !llvm.loop !81

1411:                                             ; preds = %1315
  %1412 = load ptr, ptr %7, align 8, !tbaa !5
  %1413 = getelementptr inbounds %struct._PlOperator, ptr %1412, i32 0, i32 3
  %1414 = load ptr, ptr %1413, align 8, !tbaa !38
  call void @free_TypedList(ptr noundef %1414)
  %1415 = load ptr, ptr %7, align 8, !tbaa !5
  %1416 = getelementptr inbounds %struct._PlOperator, ptr %1415, i32 0, i32 3
  store ptr null, ptr %1416, align 8, !tbaa !38
  br label %1417

1417:                                             ; preds = %1411, %1212
  %1418 = load ptr, ptr %7, align 8, !tbaa !5
  %1419 = getelementptr inbounds %struct._PlOperator, ptr %1418, i32 0, i32 7
  %1420 = load ptr, ptr %1419, align 8, !tbaa !41
  store ptr %1420, ptr %7, align 8, !tbaa !5
  br label %1200, !llvm.loop !82

1421:                                             ; preds = %1200
  %1422 = load ptr, ptr @gparse_predicates, align 8, !tbaa !5
  store ptr %1422, ptr %3, align 8, !tbaa !5
  br label %1423

1423:                                             ; preds = %1598, %1421
  %1424 = load ptr, ptr %3, align 8, !tbaa !5
  %1425 = icmp ne ptr %1424, null
  br i1 %1425, label %1426, label %1602

1426:                                             ; preds = %1423
  %1427 = call ptr @new_FactList()
  store ptr %1427, ptr %14, align 8, !tbaa !5
  %1428 = call ptr @new_TokenList()
  %1429 = load ptr, ptr %14, align 8, !tbaa !5
  %1430 = getelementptr inbounds %struct._FactList, ptr %1429, i32 0, i32 0
  store ptr %1428, ptr %1430, align 8, !tbaa !69
  %1431 = load ptr, ptr %3, align 8, !tbaa !5
  %1432 = getelementptr inbounds %struct._TypedListList, ptr %1431, i32 0, i32 0
  %1433 = load ptr, ptr %1432, align 8, !tbaa !83
  %1434 = call ptr @copy_Token(ptr noundef %1433)
  %1435 = load ptr, ptr %14, align 8, !tbaa !5
  %1436 = getelementptr inbounds %struct._FactList, ptr %1435, i32 0, i32 0
  %1437 = load ptr, ptr %1436, align 8, !tbaa !69
  %1438 = getelementptr inbounds %struct._TokenList, ptr %1437, i32 0, i32 0
  store ptr %1434, ptr %1438, align 8, !tbaa !16
  %1439 = load ptr, ptr @gpredicates_and_types, align 8, !tbaa !5
  %1440 = load ptr, ptr %14, align 8, !tbaa !5
  %1441 = getelementptr inbounds %struct._FactList, ptr %1440, i32 0, i32 1
  store ptr %1439, ptr %1441, align 8, !tbaa !72
  %1442 = load ptr, ptr %14, align 8, !tbaa !5
  store ptr %1442, ptr @gpredicates_and_types, align 8, !tbaa !5
  %1443 = load ptr, ptr %3, align 8, !tbaa !5
  %1444 = getelementptr inbounds %struct._TypedListList, ptr %1443, i32 0, i32 1
  %1445 = load ptr, ptr %1444, align 8, !tbaa !26
  %1446 = icmp ne ptr %1445, null
  br i1 %1446, label %1448, label %1447

1447:                                             ; preds = %1426
  br label %1598

1448:                                             ; preds = %1426
  %1449 = call ptr @new_TokenList()
  %1450 = load ptr, ptr %14, align 8, !tbaa !5
  %1451 = getelementptr inbounds %struct._FactList, ptr %1450, i32 0, i32 0
  %1452 = load ptr, ptr %1451, align 8, !tbaa !69
  %1453 = getelementptr inbounds %struct._TokenList, ptr %1452, i32 0, i32 1
  store ptr %1449, ptr %1453, align 8, !tbaa !14
  %1454 = load ptr, ptr %3, align 8, !tbaa !5
  %1455 = getelementptr inbounds %struct._TypedListList, ptr %1454, i32 0, i32 1
  %1456 = load ptr, ptr %1455, align 8, !tbaa !26
  %1457 = getelementptr inbounds %struct._TypedList, ptr %1456, i32 0, i32 1
  %1458 = load ptr, ptr %1457, align 8, !tbaa !13
  %1459 = getelementptr inbounds %struct._TokenList, ptr %1458, i32 0, i32 1
  %1460 = load ptr, ptr %1459, align 8, !tbaa !14
  %1461 = icmp ne ptr %1460, null
  br i1 %1461, label %1462, label %1511

1462:                                             ; preds = %1448
  %1463 = call ptr @new_Token(i32 noundef 256)
  %1464 = load ptr, ptr %14, align 8, !tbaa !5
  %1465 = getelementptr inbounds %struct._FactList, ptr %1464, i32 0, i32 0
  %1466 = load ptr, ptr %1465, align 8, !tbaa !69
  %1467 = getelementptr inbounds %struct._TokenList, ptr %1466, i32 0, i32 1
  %1468 = load ptr, ptr %1467, align 8, !tbaa !14
  %1469 = getelementptr inbounds %struct._TokenList, ptr %1468, i32 0, i32 0
  store ptr %1463, ptr %1469, align 8, !tbaa !16
  %1470 = load ptr, ptr %14, align 8, !tbaa !5
  %1471 = getelementptr inbounds %struct._FactList, ptr %1470, i32 0, i32 0
  %1472 = load ptr, ptr %1471, align 8, !tbaa !69
  %1473 = getelementptr inbounds %struct._TokenList, ptr %1472, i32 0, i32 1
  %1474 = load ptr, ptr %1473, align 8, !tbaa !14
  %1475 = getelementptr inbounds %struct._TokenList, ptr %1474, i32 0, i32 0
  %1476 = load ptr, ptr %1475, align 8, !tbaa !16
  %1477 = call ptr @strcpy(ptr noundef %1476, ptr noundef @.str) #5
  %1478 = load ptr, ptr %3, align 8, !tbaa !5
  %1479 = getelementptr inbounds %struct._TypedListList, ptr %1478, i32 0, i32 1
  %1480 = load ptr, ptr %1479, align 8, !tbaa !26
  %1481 = getelementptr inbounds %struct._TypedList, ptr %1480, i32 0, i32 1
  %1482 = load ptr, ptr %1481, align 8, !tbaa !13
  store ptr %1482, ptr %4, align 8, !tbaa !5
  br label %1483

1483:                                             ; preds = %1506, %1462
  %1484 = load ptr, ptr %4, align 8, !tbaa !5
  %1485 = icmp ne ptr %1484, null
  br i1 %1485, label %1486, label %1510

1486:                                             ; preds = %1483
  %1487 = load ptr, ptr %14, align 8, !tbaa !5
  %1488 = getelementptr inbounds %struct._FactList, ptr %1487, i32 0, i32 0
  %1489 = load ptr, ptr %1488, align 8, !tbaa !69
  %1490 = getelementptr inbounds %struct._TokenList, ptr %1489, i32 0, i32 1
  %1491 = load ptr, ptr %1490, align 8, !tbaa !14
  %1492 = getelementptr inbounds %struct._TokenList, ptr %1491, i32 0, i32 0
  %1493 = load ptr, ptr %1492, align 8, !tbaa !16
  %1494 = call ptr @strcat(ptr noundef %1493, ptr noundef @.str.1) #5
  %1495 = load ptr, ptr %14, align 8, !tbaa !5
  %1496 = getelementptr inbounds %struct._FactList, ptr %1495, i32 0, i32 0
  %1497 = load ptr, ptr %1496, align 8, !tbaa !69
  %1498 = getelementptr inbounds %struct._TokenList, ptr %1497, i32 0, i32 1
  %1499 = load ptr, ptr %1498, align 8, !tbaa !14
  %1500 = getelementptr inbounds %struct._TokenList, ptr %1499, i32 0, i32 0
  %1501 = load ptr, ptr %1500, align 8, !tbaa !16
  %1502 = load ptr, ptr %4, align 8, !tbaa !5
  %1503 = getelementptr inbounds %struct._TokenList, ptr %1502, i32 0, i32 0
  %1504 = load ptr, ptr %1503, align 8, !tbaa !16
  %1505 = call ptr @strcat(ptr noundef %1501, ptr noundef %1504) #5
  br label %1506

1506:                                             ; preds = %1486
  %1507 = load ptr, ptr %4, align 8, !tbaa !5
  %1508 = getelementptr inbounds %struct._TokenList, ptr %1507, i32 0, i32 1
  %1509 = load ptr, ptr %1508, align 8, !tbaa !14
  store ptr %1509, ptr %4, align 8, !tbaa !5
  br label %1483, !llvm.loop !84

1510:                                             ; preds = %1483
  br label %1526

1511:                                             ; preds = %1448
  %1512 = load ptr, ptr %3, align 8, !tbaa !5
  %1513 = getelementptr inbounds %struct._TypedListList, ptr %1512, i32 0, i32 1
  %1514 = load ptr, ptr %1513, align 8, !tbaa !26
  %1515 = getelementptr inbounds %struct._TypedList, ptr %1514, i32 0, i32 1
  %1516 = load ptr, ptr %1515, align 8, !tbaa !13
  %1517 = getelementptr inbounds %struct._TokenList, ptr %1516, i32 0, i32 0
  %1518 = load ptr, ptr %1517, align 8, !tbaa !16
  %1519 = call ptr @copy_Token(ptr noundef %1518)
  %1520 = load ptr, ptr %14, align 8, !tbaa !5
  %1521 = getelementptr inbounds %struct._FactList, ptr %1520, i32 0, i32 0
  %1522 = load ptr, ptr %1521, align 8, !tbaa !69
  %1523 = getelementptr inbounds %struct._TokenList, ptr %1522, i32 0, i32 1
  %1524 = load ptr, ptr %1523, align 8, !tbaa !14
  %1525 = getelementptr inbounds %struct._TokenList, ptr %1524, i32 0, i32 0
  store ptr %1519, ptr %1525, align 8, !tbaa !16
  br label %1526

1526:                                             ; preds = %1511, %1510
  %1527 = load ptr, ptr %14, align 8, !tbaa !5
  %1528 = getelementptr inbounds %struct._FactList, ptr %1527, i32 0, i32 0
  %1529 = load ptr, ptr %1528, align 8, !tbaa !69
  %1530 = getelementptr inbounds %struct._TokenList, ptr %1529, i32 0, i32 1
  %1531 = load ptr, ptr %1530, align 8, !tbaa !14
  store ptr %1531, ptr %5, align 8, !tbaa !5
  %1532 = load ptr, ptr %3, align 8, !tbaa !5
  %1533 = getelementptr inbounds %struct._TypedListList, ptr %1532, i32 0, i32 1
  %1534 = load ptr, ptr %1533, align 8, !tbaa !26
  %1535 = getelementptr inbounds %struct._TypedList, ptr %1534, i32 0, i32 3
  %1536 = load ptr, ptr %1535, align 8, !tbaa !20
  store ptr %1536, ptr %2, align 8, !tbaa !5
  br label %1537

1537:                                             ; preds = %1593, %1526
  %1538 = load ptr, ptr %2, align 8, !tbaa !5
  %1539 = icmp ne ptr %1538, null
  br i1 %1539, label %1540, label %1597

1540:                                             ; preds = %1537
  %1541 = call ptr @new_TokenList()
  store ptr %1541, ptr %6, align 8, !tbaa !5
  %1542 = load ptr, ptr %2, align 8, !tbaa !5
  %1543 = getelementptr inbounds %struct._TypedList, ptr %1542, i32 0, i32 1
  %1544 = load ptr, ptr %1543, align 8, !tbaa !13
  %1545 = getelementptr inbounds %struct._TokenList, ptr %1544, i32 0, i32 1
  %1546 = load ptr, ptr %1545, align 8, !tbaa !14
  %1547 = icmp ne ptr %1546, null
  br i1 %1547, label %1548, label %1579

1548:                                             ; preds = %1540
  %1549 = call ptr @new_Token(i32 noundef 256)
  %1550 = load ptr, ptr %6, align 8, !tbaa !5
  %1551 = getelementptr inbounds %struct._TokenList, ptr %1550, i32 0, i32 0
  store ptr %1549, ptr %1551, align 8, !tbaa !16
  %1552 = load ptr, ptr %6, align 8, !tbaa !5
  %1553 = getelementptr inbounds %struct._TokenList, ptr %1552, i32 0, i32 0
  %1554 = load ptr, ptr %1553, align 8, !tbaa !16
  %1555 = call ptr @strcpy(ptr noundef %1554, ptr noundef @.str) #5
  %1556 = load ptr, ptr %2, align 8, !tbaa !5
  %1557 = getelementptr inbounds %struct._TypedList, ptr %1556, i32 0, i32 1
  %1558 = load ptr, ptr %1557, align 8, !tbaa !13
  store ptr %1558, ptr %4, align 8, !tbaa !5
  br label %1559

1559:                                             ; preds = %1574, %1548
  %1560 = load ptr, ptr %4, align 8, !tbaa !5
  %1561 = icmp ne ptr %1560, null
  br i1 %1561, label %1562, label %1578

1562:                                             ; preds = %1559
  %1563 = load ptr, ptr %6, align 8, !tbaa !5
  %1564 = getelementptr inbounds %struct._TokenList, ptr %1563, i32 0, i32 0
  %1565 = load ptr, ptr %1564, align 8, !tbaa !16
  %1566 = call ptr @strcat(ptr noundef %1565, ptr noundef @.str.1) #5
  %1567 = load ptr, ptr %6, align 8, !tbaa !5
  %1568 = getelementptr inbounds %struct._TokenList, ptr %1567, i32 0, i32 0
  %1569 = load ptr, ptr %1568, align 8, !tbaa !16
  %1570 = load ptr, ptr %4, align 8, !tbaa !5
  %1571 = getelementptr inbounds %struct._TokenList, ptr %1570, i32 0, i32 0
  %1572 = load ptr, ptr %1571, align 8, !tbaa !16
  %1573 = call ptr @strcat(ptr noundef %1569, ptr noundef %1572) #5
  br label %1574

1574:                                             ; preds = %1562
  %1575 = load ptr, ptr %4, align 8, !tbaa !5
  %1576 = getelementptr inbounds %struct._TokenList, ptr %1575, i32 0, i32 1
  %1577 = load ptr, ptr %1576, align 8, !tbaa !14
  store ptr %1577, ptr %4, align 8, !tbaa !5
  br label %1559, !llvm.loop !85

1578:                                             ; preds = %1559
  br label %1588

1579:                                             ; preds = %1540
  %1580 = load ptr, ptr %2, align 8, !tbaa !5
  %1581 = getelementptr inbounds %struct._TypedList, ptr %1580, i32 0, i32 1
  %1582 = load ptr, ptr %1581, align 8, !tbaa !13
  %1583 = getelementptr inbounds %struct._TokenList, ptr %1582, i32 0, i32 0
  %1584 = load ptr, ptr %1583, align 8, !tbaa !16
  %1585 = call ptr @copy_Token(ptr noundef %1584)
  %1586 = load ptr, ptr %6, align 8, !tbaa !5
  %1587 = getelementptr inbounds %struct._TokenList, ptr %1586, i32 0, i32 0
  store ptr %1585, ptr %1587, align 8, !tbaa !16
  br label %1588

1588:                                             ; preds = %1579, %1578
  %1589 = load ptr, ptr %6, align 8, !tbaa !5
  %1590 = load ptr, ptr %5, align 8, !tbaa !5
  %1591 = getelementptr inbounds %struct._TokenList, ptr %1590, i32 0, i32 1
  store ptr %1589, ptr %1591, align 8, !tbaa !14
  %1592 = load ptr, ptr %6, align 8, !tbaa !5
  store ptr %1592, ptr %5, align 8, !tbaa !5
  br label %1593

1593:                                             ; preds = %1588
  %1594 = load ptr, ptr %2, align 8, !tbaa !5
  %1595 = getelementptr inbounds %struct._TypedList, ptr %1594, i32 0, i32 3
  %1596 = load ptr, ptr %1595, align 8, !tbaa !20
  store ptr %1596, ptr %2, align 8, !tbaa !5
  br label %1537, !llvm.loop !86

1597:                                             ; preds = %1537
  br label %1598

1598:                                             ; preds = %1597, %1447
  %1599 = load ptr, ptr %3, align 8, !tbaa !5
  %1600 = getelementptr inbounds %struct._TypedListList, ptr %1599, i32 0, i32 2
  %1601 = load ptr, ptr %1600, align 8, !tbaa !30
  store ptr %1601, ptr %3, align 8, !tbaa !5
  br label %1423, !llvm.loop !87

1602:                                             ; preds = %1423
  %1603 = load ptr, ptr @gparse_functions, align 8, !tbaa !5
  store ptr %1603, ptr %3, align 8, !tbaa !5
  br label %1604

1604:                                             ; preds = %1779, %1602
  %1605 = load ptr, ptr %3, align 8, !tbaa !5
  %1606 = icmp ne ptr %1605, null
  br i1 %1606, label %1607, label %1783

1607:                                             ; preds = %1604
  %1608 = call ptr @new_FactList()
  store ptr %1608, ptr %14, align 8, !tbaa !5
  %1609 = call ptr @new_TokenList()
  %1610 = load ptr, ptr %14, align 8, !tbaa !5
  %1611 = getelementptr inbounds %struct._FactList, ptr %1610, i32 0, i32 0
  store ptr %1609, ptr %1611, align 8, !tbaa !69
  %1612 = load ptr, ptr %3, align 8, !tbaa !5
  %1613 = getelementptr inbounds %struct._TypedListList, ptr %1612, i32 0, i32 0
  %1614 = load ptr, ptr %1613, align 8, !tbaa !83
  %1615 = call ptr @copy_Token(ptr noundef %1614)
  %1616 = load ptr, ptr %14, align 8, !tbaa !5
  %1617 = getelementptr inbounds %struct._FactList, ptr %1616, i32 0, i32 0
  %1618 = load ptr, ptr %1617, align 8, !tbaa !69
  %1619 = getelementptr inbounds %struct._TokenList, ptr %1618, i32 0, i32 0
  store ptr %1615, ptr %1619, align 8, !tbaa !16
  %1620 = load ptr, ptr @gfunctions_and_types, align 8, !tbaa !5
  %1621 = load ptr, ptr %14, align 8, !tbaa !5
  %1622 = getelementptr inbounds %struct._FactList, ptr %1621, i32 0, i32 1
  store ptr %1620, ptr %1622, align 8, !tbaa !72
  %1623 = load ptr, ptr %14, align 8, !tbaa !5
  store ptr %1623, ptr @gfunctions_and_types, align 8, !tbaa !5
  %1624 = load ptr, ptr %3, align 8, !tbaa !5
  %1625 = getelementptr inbounds %struct._TypedListList, ptr %1624, i32 0, i32 1
  %1626 = load ptr, ptr %1625, align 8, !tbaa !26
  %1627 = icmp ne ptr %1626, null
  br i1 %1627, label %1629, label %1628

1628:                                             ; preds = %1607
  br label %1779

1629:                                             ; preds = %1607
  %1630 = call ptr @new_TokenList()
  %1631 = load ptr, ptr %14, align 8, !tbaa !5
  %1632 = getelementptr inbounds %struct._FactList, ptr %1631, i32 0, i32 0
  %1633 = load ptr, ptr %1632, align 8, !tbaa !69
  %1634 = getelementptr inbounds %struct._TokenList, ptr %1633, i32 0, i32 1
  store ptr %1630, ptr %1634, align 8, !tbaa !14
  %1635 = load ptr, ptr %3, align 8, !tbaa !5
  %1636 = getelementptr inbounds %struct._TypedListList, ptr %1635, i32 0, i32 1
  %1637 = load ptr, ptr %1636, align 8, !tbaa !26
  %1638 = getelementptr inbounds %struct._TypedList, ptr %1637, i32 0, i32 1
  %1639 = load ptr, ptr %1638, align 8, !tbaa !13
  %1640 = getelementptr inbounds %struct._TokenList, ptr %1639, i32 0, i32 1
  %1641 = load ptr, ptr %1640, align 8, !tbaa !14
  %1642 = icmp ne ptr %1641, null
  br i1 %1642, label %1643, label %1692

1643:                                             ; preds = %1629
  %1644 = call ptr @new_Token(i32 noundef 256)
  %1645 = load ptr, ptr %14, align 8, !tbaa !5
  %1646 = getelementptr inbounds %struct._FactList, ptr %1645, i32 0, i32 0
  %1647 = load ptr, ptr %1646, align 8, !tbaa !69
  %1648 = getelementptr inbounds %struct._TokenList, ptr %1647, i32 0, i32 1
  %1649 = load ptr, ptr %1648, align 8, !tbaa !14
  %1650 = getelementptr inbounds %struct._TokenList, ptr %1649, i32 0, i32 0
  store ptr %1644, ptr %1650, align 8, !tbaa !16
  %1651 = load ptr, ptr %14, align 8, !tbaa !5
  %1652 = getelementptr inbounds %struct._FactList, ptr %1651, i32 0, i32 0
  %1653 = load ptr, ptr %1652, align 8, !tbaa !69
  %1654 = getelementptr inbounds %struct._TokenList, ptr %1653, i32 0, i32 1
  %1655 = load ptr, ptr %1654, align 8, !tbaa !14
  %1656 = getelementptr inbounds %struct._TokenList, ptr %1655, i32 0, i32 0
  %1657 = load ptr, ptr %1656, align 8, !tbaa !16
  %1658 = call ptr @strcpy(ptr noundef %1657, ptr noundef @.str) #5
  %1659 = load ptr, ptr %3, align 8, !tbaa !5
  %1660 = getelementptr inbounds %struct._TypedListList, ptr %1659, i32 0, i32 1
  %1661 = load ptr, ptr %1660, align 8, !tbaa !26
  %1662 = getelementptr inbounds %struct._TypedList, ptr %1661, i32 0, i32 1
  %1663 = load ptr, ptr %1662, align 8, !tbaa !13
  store ptr %1663, ptr %4, align 8, !tbaa !5
  br label %1664

1664:                                             ; preds = %1687, %1643
  %1665 = load ptr, ptr %4, align 8, !tbaa !5
  %1666 = icmp ne ptr %1665, null
  br i1 %1666, label %1667, label %1691

1667:                                             ; preds = %1664
  %1668 = load ptr, ptr %14, align 8, !tbaa !5
  %1669 = getelementptr inbounds %struct._FactList, ptr %1668, i32 0, i32 0
  %1670 = load ptr, ptr %1669, align 8, !tbaa !69
  %1671 = getelementptr inbounds %struct._TokenList, ptr %1670, i32 0, i32 1
  %1672 = load ptr, ptr %1671, align 8, !tbaa !14
  %1673 = getelementptr inbounds %struct._TokenList, ptr %1672, i32 0, i32 0
  %1674 = load ptr, ptr %1673, align 8, !tbaa !16
  %1675 = call ptr @strcat(ptr noundef %1674, ptr noundef @.str.1) #5
  %1676 = load ptr, ptr %14, align 8, !tbaa !5
  %1677 = getelementptr inbounds %struct._FactList, ptr %1676, i32 0, i32 0
  %1678 = load ptr, ptr %1677, align 8, !tbaa !69
  %1679 = getelementptr inbounds %struct._TokenList, ptr %1678, i32 0, i32 1
  %1680 = load ptr, ptr %1679, align 8, !tbaa !14
  %1681 = getelementptr inbounds %struct._TokenList, ptr %1680, i32 0, i32 0
  %1682 = load ptr, ptr %1681, align 8, !tbaa !16
  %1683 = load ptr, ptr %4, align 8, !tbaa !5
  %1684 = getelementptr inbounds %struct._TokenList, ptr %1683, i32 0, i32 0
  %1685 = load ptr, ptr %1684, align 8, !tbaa !16
  %1686 = call ptr @strcat(ptr noundef %1682, ptr noundef %1685) #5
  br label %1687

1687:                                             ; preds = %1667
  %1688 = load ptr, ptr %4, align 8, !tbaa !5
  %1689 = getelementptr inbounds %struct._TokenList, ptr %1688, i32 0, i32 1
  %1690 = load ptr, ptr %1689, align 8, !tbaa !14
  store ptr %1690, ptr %4, align 8, !tbaa !5
  br label %1664, !llvm.loop !88

1691:                                             ; preds = %1664
  br label %1707

1692:                                             ; preds = %1629
  %1693 = load ptr, ptr %3, align 8, !tbaa !5
  %1694 = getelementptr inbounds %struct._TypedListList, ptr %1693, i32 0, i32 1
  %1695 = load ptr, ptr %1694, align 8, !tbaa !26
  %1696 = getelementptr inbounds %struct._TypedList, ptr %1695, i32 0, i32 1
  %1697 = load ptr, ptr %1696, align 8, !tbaa !13
  %1698 = getelementptr inbounds %struct._TokenList, ptr %1697, i32 0, i32 0
  %1699 = load ptr, ptr %1698, align 8, !tbaa !16
  %1700 = call ptr @copy_Token(ptr noundef %1699)
  %1701 = load ptr, ptr %14, align 8, !tbaa !5
  %1702 = getelementptr inbounds %struct._FactList, ptr %1701, i32 0, i32 0
  %1703 = load ptr, ptr %1702, align 8, !tbaa !69
  %1704 = getelementptr inbounds %struct._TokenList, ptr %1703, i32 0, i32 1
  %1705 = load ptr, ptr %1704, align 8, !tbaa !14
  %1706 = getelementptr inbounds %struct._TokenList, ptr %1705, i32 0, i32 0
  store ptr %1700, ptr %1706, align 8, !tbaa !16
  br label %1707

1707:                                             ; preds = %1692, %1691
  %1708 = load ptr, ptr %14, align 8, !tbaa !5
  %1709 = getelementptr inbounds %struct._FactList, ptr %1708, i32 0, i32 0
  %1710 = load ptr, ptr %1709, align 8, !tbaa !69
  %1711 = getelementptr inbounds %struct._TokenList, ptr %1710, i32 0, i32 1
  %1712 = load ptr, ptr %1711, align 8, !tbaa !14
  store ptr %1712, ptr %5, align 8, !tbaa !5
  %1713 = load ptr, ptr %3, align 8, !tbaa !5
  %1714 = getelementptr inbounds %struct._TypedListList, ptr %1713, i32 0, i32 1
  %1715 = load ptr, ptr %1714, align 8, !tbaa !26
  %1716 = getelementptr inbounds %struct._TypedList, ptr %1715, i32 0, i32 3
  %1717 = load ptr, ptr %1716, align 8, !tbaa !20
  store ptr %1717, ptr %2, align 8, !tbaa !5
  br label %1718

1718:                                             ; preds = %1774, %1707
  %1719 = load ptr, ptr %2, align 8, !tbaa !5
  %1720 = icmp ne ptr %1719, null
  br i1 %1720, label %1721, label %1778

1721:                                             ; preds = %1718
  %1722 = call ptr @new_TokenList()
  store ptr %1722, ptr %6, align 8, !tbaa !5
  %1723 = load ptr, ptr %2, align 8, !tbaa !5
  %1724 = getelementptr inbounds %struct._TypedList, ptr %1723, i32 0, i32 1
  %1725 = load ptr, ptr %1724, align 8, !tbaa !13
  %1726 = getelementptr inbounds %struct._TokenList, ptr %1725, i32 0, i32 1
  %1727 = load ptr, ptr %1726, align 8, !tbaa !14
  %1728 = icmp ne ptr %1727, null
  br i1 %1728, label %1729, label %1760

1729:                                             ; preds = %1721
  %1730 = call ptr @new_Token(i32 noundef 256)
  %1731 = load ptr, ptr %6, align 8, !tbaa !5
  %1732 = getelementptr inbounds %struct._TokenList, ptr %1731, i32 0, i32 0
  store ptr %1730, ptr %1732, align 8, !tbaa !16
  %1733 = load ptr, ptr %6, align 8, !tbaa !5
  %1734 = getelementptr inbounds %struct._TokenList, ptr %1733, i32 0, i32 0
  %1735 = load ptr, ptr %1734, align 8, !tbaa !16
  %1736 = call ptr @strcpy(ptr noundef %1735, ptr noundef @.str) #5
  %1737 = load ptr, ptr %2, align 8, !tbaa !5
  %1738 = getelementptr inbounds %struct._TypedList, ptr %1737, i32 0, i32 1
  %1739 = load ptr, ptr %1738, align 8, !tbaa !13
  store ptr %1739, ptr %4, align 8, !tbaa !5
  br label %1740

1740:                                             ; preds = %1755, %1729
  %1741 = load ptr, ptr %4, align 8, !tbaa !5
  %1742 = icmp ne ptr %1741, null
  br i1 %1742, label %1743, label %1759

1743:                                             ; preds = %1740
  %1744 = load ptr, ptr %6, align 8, !tbaa !5
  %1745 = getelementptr inbounds %struct._TokenList, ptr %1744, i32 0, i32 0
  %1746 = load ptr, ptr %1745, align 8, !tbaa !16
  %1747 = call ptr @strcat(ptr noundef %1746, ptr noundef @.str.1) #5
  %1748 = load ptr, ptr %6, align 8, !tbaa !5
  %1749 = getelementptr inbounds %struct._TokenList, ptr %1748, i32 0, i32 0
  %1750 = load ptr, ptr %1749, align 8, !tbaa !16
  %1751 = load ptr, ptr %4, align 8, !tbaa !5
  %1752 = getelementptr inbounds %struct._TokenList, ptr %1751, i32 0, i32 0
  %1753 = load ptr, ptr %1752, align 8, !tbaa !16
  %1754 = call ptr @strcat(ptr noundef %1750, ptr noundef %1753) #5
  br label %1755

1755:                                             ; preds = %1743
  %1756 = load ptr, ptr %4, align 8, !tbaa !5
  %1757 = getelementptr inbounds %struct._TokenList, ptr %1756, i32 0, i32 1
  %1758 = load ptr, ptr %1757, align 8, !tbaa !14
  store ptr %1758, ptr %4, align 8, !tbaa !5
  br label %1740, !llvm.loop !89

1759:                                             ; preds = %1740
  br label %1769

1760:                                             ; preds = %1721
  %1761 = load ptr, ptr %2, align 8, !tbaa !5
  %1762 = getelementptr inbounds %struct._TypedList, ptr %1761, i32 0, i32 1
  %1763 = load ptr, ptr %1762, align 8, !tbaa !13
  %1764 = getelementptr inbounds %struct._TokenList, ptr %1763, i32 0, i32 0
  %1765 = load ptr, ptr %1764, align 8, !tbaa !16
  %1766 = call ptr @copy_Token(ptr noundef %1765)
  %1767 = load ptr, ptr %6, align 8, !tbaa !5
  %1768 = getelementptr inbounds %struct._TokenList, ptr %1767, i32 0, i32 0
  store ptr %1766, ptr %1768, align 8, !tbaa !16
  br label %1769

1769:                                             ; preds = %1760, %1759
  %1770 = load ptr, ptr %6, align 8, !tbaa !5
  %1771 = load ptr, ptr %5, align 8, !tbaa !5
  %1772 = getelementptr inbounds %struct._TokenList, ptr %1771, i32 0, i32 1
  store ptr %1770, ptr %1772, align 8, !tbaa !14
  %1773 = load ptr, ptr %6, align 8, !tbaa !5
  store ptr %1773, ptr %5, align 8, !tbaa !5
  br label %1774

1774:                                             ; preds = %1769
  %1775 = load ptr, ptr %2, align 8, !tbaa !5
  %1776 = getelementptr inbounds %struct._TypedList, ptr %1775, i32 0, i32 3
  %1777 = load ptr, ptr %1776, align 8, !tbaa !20
  store ptr %1777, ptr %2, align 8, !tbaa !5
  br label %1718, !llvm.loop !90

1778:                                             ; preds = %1718
  br label %1779

1779:                                             ; preds = %1778, %1628
  %1780 = load ptr, ptr %3, align 8, !tbaa !5
  %1781 = getelementptr inbounds %struct._TypedListList, ptr %1780, i32 0, i32 2
  %1782 = load ptr, ptr %1781, align 8, !tbaa !30
  store ptr %1782, ptr %3, align 8, !tbaa !5
  br label %1604, !llvm.loop !91

1783:                                             ; preds = %1604
  %1784 = load ptr, ptr @gparse_types, align 8, !tbaa !5
  call void @free_TypedList(ptr noundef %1784)
  store ptr null, ptr @gparse_types, align 8, !tbaa !5
  %1785 = load ptr, ptr @gparse_constants, align 8, !tbaa !5
  call void @free_TypedList(ptr noundef %1785)
  store ptr null, ptr @gparse_constants, align 8, !tbaa !5
  %1786 = load ptr, ptr @gparse_objects, align 8, !tbaa !5
  call void @free_TypedList(ptr noundef %1786)
  store ptr null, ptr @gparse_objects, align 8, !tbaa !5
  %1787 = load ptr, ptr @gparse_predicates, align 8, !tbaa !5
  call void @free_TypedListList(ptr noundef %1787)
  store ptr null, ptr @gparse_predicates, align 8, !tbaa !5
  %1788 = load ptr, ptr @gparse_functions, align 8, !tbaa !5
  call void @free_TypedListList(ptr noundef %1788)
  store ptr null, ptr @gparse_functions, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #5
  call void @llvm.lifetime.end.p0(i64 2500, ptr %13) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %4) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %3) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %2) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %1) #5
  ret void
}

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

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

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

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

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

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

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

declare ptr @new_FactList() #2

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

declare void @free_TypedList(ptr noundef) #2

declare void @free_TypedListList(ptr noundef) #2

attributes #0 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { nounwind 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, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !6, i64 0}
!12 = !{!"_TypedList", !6, i64 0, !6, i64 8, !10, i64 16, !6, i64 24}
!13 = !{!12, !6, i64 8}
!14 = !{!15, !6, i64 8}
!15 = !{!"_TokenList", !6, i64 0, !6, i64 8}
!16 = !{!15, !6, i64 0}
!17 = distinct !{!17, !18}
!18 = !{!"llvm.loop.mustprogress"}
!19 = !{!12, !10, i64 16}
!20 = !{!12, !6, i64 24}
!21 = distinct !{!21, !18}
!22 = distinct !{!22, !18}
!23 = distinct !{!23, !18}
!24 = distinct !{!24, !18}
!25 = distinct !{!25, !18}
!26 = !{!27, !6, i64 8}
!27 = !{!"_TypedListList", !6, i64 0, !6, i64 8, !6, i64 16}
!28 = distinct !{!28, !18}
!29 = distinct !{!29, !18}
!30 = !{!27, !6, i64 16}
!31 = distinct !{!31, !18}
!32 = distinct !{!32, !18}
!33 = distinct !{!33, !18}
!34 = distinct !{!34, !18}
!35 = !{!36, !6, i64 32}
!36 = !{!"_PlOperator", !6, i64 0, !7, i64 8, !10, i64 12, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48}
!37 = !{!36, !6, i64 40}
!38 = !{!36, !6, i64 16}
!39 = distinct !{!39, !18}
!40 = distinct !{!40, !18}
!41 = !{!36, !6, i64 48}
!42 = distinct !{!42, !18}
!43 = distinct !{!43, !18}
!44 = distinct !{!44, !18}
!45 = distinct !{!45, !18}
!46 = distinct !{!46, !18}
!47 = distinct !{!47, !18}
!48 = distinct !{!48, !18}
!49 = distinct !{!49, !18}
!50 = distinct !{!50, !18}
!51 = distinct !{!51, !18}
!52 = distinct !{!52, !18}
!53 = !{!7, !7, i64 0}
!54 = distinct !{!54, !18}
!55 = distinct !{!55, !18}
!56 = distinct !{!56, !18}
!57 = distinct !{!57, !18}
!58 = distinct !{!58, !18}
!59 = distinct !{!59, !18}
!60 = distinct !{!60, !18}
!61 = distinct !{!61, !18}
!62 = distinct !{!62, !18}
!63 = distinct !{!63, !18}
!64 = distinct !{!64, !18}
!65 = distinct !{!65, !18}
!66 = distinct !{!66, !18}
!67 = distinct !{!67, !18}
!68 = distinct !{!68, !18}
!69 = !{!70, !6, i64 0}
!70 = !{!"_FactList", !6, i64 0, !6, i64 8}
!71 = distinct !{!71, !18}
!72 = !{!70, !6, i64 8}
!73 = distinct !{!73, !18}
!74 = distinct !{!74, !18}
!75 = distinct !{!75, !18}
!76 = distinct !{!76, !18}
!77 = distinct !{!77, !18}
!78 = distinct !{!78, !18}
!79 = !{!36, !6, i64 24}
!80 = distinct !{!80, !18}
!81 = distinct !{!81, !18}
!82 = distinct !{!82, !18}
!83 = !{!27, !6, i64 0}
!84 = distinct !{!84, !18}
!85 = distinct !{!85, !18}
!86 = distinct !{!86, !18}
!87 = distinct !{!87, !18}
!88 = distinct !{!88, !18}
!89 = distinct !{!89, !18}
!90 = distinct !{!90, !18}
!91 = distinct !{!91, !18}


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

@lnum_types = external dso_local local_unnamed_addr global i32, align 4
@gparse_types = external local_unnamed_addr global ptr, align 8
@ltype_names = external dso_local local_unnamed_addr global [50 x ptr], align 16
@.str = external hidden unnamed_addr constant [7 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [2 x i8], align 1
@gparse_constants = external local_unnamed_addr global ptr, align 8
@gparse_objects = external local_unnamed_addr global ptr, align 8
@gparse_predicates = external local_unnamed_addr global ptr, align 8
@gparse_functions = external local_unnamed_addr global ptr, align 8
@gorig_goal_facts = external global ptr, align 8
@gloaded_ops = external local_unnamed_addr global ptr, align 8
@lnum_either_ty = external dso_local local_unnamed_addr global [50 x i32], align 16
@.str.2 = external hidden unnamed_addr constant [8 x i8], align 1
@leither_ty = external dso_local local_unnamed_addr global [50 x [50 x i32]], align 16
@gorig_constant_list = external local_unnamed_addr global ptr, align 8
@gpredicates_and_types = external local_unnamed_addr global ptr, align 8
@gfunctions_and_types = external local_unnamed_addr global ptr, align 8

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

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

declare ptr @new_Token(i32 noundef) local_unnamed_addr #2

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

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

declare ptr @new_TokenList() local_unnamed_addr #2

; Function Attrs: nounwind uwtable
define dso_local void @build_orig_constant_list() local_unnamed_addr #0 {
  %1 = alloca [50 x [50 x i8]], align 16
  call void @llvm.lifetime.start.p0(i64 2500, ptr nonnull %1) #7
  store i32 0, ptr @lnum_types, align 4, !tbaa !5
  %.0433579 = load ptr, ptr @gparse_types, align 8, !tbaa !9
  %.not580 = icmp eq ptr %.0433579, null
  br i1 %.not580, label %.preheader573, label %.lr.ph582

.preheader573:                                    ; preds = %39, %0
  %.1434587 = load ptr, ptr @gparse_constants, align 8, !tbaa !9
  %.not461588 = icmp eq ptr %.1434587, null
  br i1 %.not461588, label %.preheader571, label %.lr.ph590

.lr.ph582:                                        ; preds = %0, %39
  %.0433581 = phi ptr [ %.0433, %39 ], [ %.0433579, %0 ]
  %2 = load ptr, ptr %.0433581, align 8, !tbaa !11
  %3 = tail call i32 @get_type(ptr noundef %2)
  %4 = icmp eq i32 %3, -1
  br i1 %4, label %5, label %12

5:                                                ; preds = %.lr.ph582
  %6 = load ptr, ptr %.0433581, align 8, !tbaa !11
  %7 = tail call ptr @copy_Token(ptr noundef %6)
  %8 = load i32, ptr @lnum_types, align 4, !tbaa !5
  %9 = add nsw i32 %8, 1
  store i32 %9, ptr @lnum_types, align 4, !tbaa !5
  %10 = sext i32 %8 to i64
  %11 = getelementptr inbounds [50 x ptr], ptr @ltype_names, i64 0, i64 %10
  store ptr %7, ptr %11, align 8, !tbaa !9
  br label %12

12:                                               ; preds = %5, %.lr.ph582
  %13 = getelementptr inbounds i8, ptr %.0433581, i64 8
  %14 = load ptr, ptr %13, align 8, !tbaa !13
  %15 = getelementptr inbounds i8, ptr %14, i64 8
  %16 = load ptr, ptr %15, align 8, !tbaa !14
  %.not528 = icmp eq ptr %16, null
  br i1 %.not528, label %24, label %17

17:                                               ; preds = %12
  %18 = tail call ptr @new_Token(i32 noundef 256) #7
  %19 = tail call ptr @strcpy(ptr noundef nonnull dereferenceable(1) %18, ptr noundef nonnull dereferenceable(1) @.str) #7
  %.0418576 = load ptr, ptr %13, align 8, !tbaa !9
  %.not529577 = icmp eq ptr %.0418576, null
  br i1 %.not529577, label %.loopexit574, label %.lr.ph

.lr.ph:                                           ; preds = %17, %.lr.ph
  %.0418578 = phi ptr [ %.0418, %.lr.ph ], [ %.0418576, %17 ]
  %20 = tail call ptr @strcat(ptr noundef nonnull dereferenceable(1) %18, ptr noundef nonnull dereferenceable(1) @.str.1) #7
  %21 = load ptr, ptr %.0418578, align 8, !tbaa !16
  %22 = tail call ptr @strcat(ptr noundef nonnull dereferenceable(1) %18, ptr noundef nonnull dereferenceable(1) %21) #7
  %23 = getelementptr inbounds i8, ptr %.0418578, i64 8
  %.0418 = load ptr, ptr %23, align 8, !tbaa !9
  %.not529 = icmp eq ptr %.0418, null
  br i1 %.not529, label %.loopexit574, label %.lr.ph, !llvm.loop !17

24:                                               ; preds = %12
  %25 = load ptr, ptr %14, align 8, !tbaa !16
  %26 = tail call ptr @copy_Token(ptr noundef %25)
  br label %.loopexit574

.loopexit574:                                     ; preds = %.lr.ph, %17, %24
  %.0447 = phi ptr [ %26, %24 ], [ %18, %17 ], [ %18, %.lr.ph ]
  %27 = tail call i32 @get_type(ptr noundef %.0447)
  %28 = icmp eq i32 %27, -1
  br i1 %28, label %29, label %37

29:                                               ; preds = %.loopexit574
  %30 = load i32, ptr @lnum_types, align 4, !tbaa !5
  %31 = getelementptr inbounds i8, ptr %.0433581, i64 16
  store i32 %30, ptr %31, align 8, !tbaa !19
  %32 = tail call ptr @copy_Token(ptr noundef %.0447)
  %33 = load i32, ptr @lnum_types, align 4, !tbaa !5
  %34 = add nsw i32 %33, 1
  store i32 %34, ptr @lnum_types, align 4, !tbaa !5
  %35 = sext i32 %33 to i64
  %36 = getelementptr inbounds [50 x ptr], ptr @ltype_names, i64 0, i64 %35
  store ptr %32, ptr %36, align 8, !tbaa !9
  br label %39

37:                                               ; preds = %.loopexit574
  %38 = getelementptr inbounds i8, ptr %.0433581, i64 16
  store i32 %27, ptr %38, align 8, !tbaa !19
  br label %39

39:                                               ; preds = %37, %29
  tail call void @free(ptr noundef %.0447) #7
  %40 = getelementptr inbounds i8, ptr %.0433581, i64 24
  %.0433 = load ptr, ptr %40, align 8, !tbaa !9
  %.not = icmp eq ptr %.0433, null
  br i1 %.not, label %.preheader573, label %.lr.ph582, !llvm.loop !20

.preheader571:                                    ; preds = %67, %.preheader573
  %.2435595 = load ptr, ptr @gparse_objects, align 8, !tbaa !9
  %.not462596 = icmp eq ptr %.2435595, null
  br i1 %.not462596, label %.preheader569, label %.lr.ph598

.lr.ph590:                                        ; preds = %.preheader573, %67
  %.1434589 = phi ptr [ %.1434, %67 ], [ %.1434587, %.preheader573 ]
  %41 = getelementptr inbounds i8, ptr %.1434589, i64 8
  %42 = load ptr, ptr %41, align 8, !tbaa !13
  %43 = getelementptr inbounds i8, ptr %42, i64 8
  %44 = load ptr, ptr %43, align 8, !tbaa !14
  %.not526 = icmp eq ptr %44, null
  br i1 %.not526, label %52, label %45

45:                                               ; preds = %.lr.ph590
  %46 = tail call ptr @new_Token(i32 noundef 256) #7
  %47 = tail call ptr @strcpy(ptr noundef nonnull dereferenceable(1) %46, ptr noundef nonnull dereferenceable(1) @.str) #7
  %.1419583 = load ptr, ptr %41, align 8, !tbaa !9
  %.not527584 = icmp eq ptr %.1419583, null
  br i1 %.not527584, label %.loopexit572, label %.lr.ph586

.lr.ph586:                                        ; preds = %45, %.lr.ph586
  %.1419585 = phi ptr [ %.1419, %.lr.ph586 ], [ %.1419583, %45 ]
  %48 = tail call ptr @strcat(ptr noundef nonnull dereferenceable(1) %46, ptr noundef nonnull dereferenceable(1) @.str.1) #7
  %49 = load ptr, ptr %.1419585, align 8, !tbaa !16
  %50 = tail call ptr @strcat(ptr noundef nonnull dereferenceable(1) %46, ptr noundef nonnull dereferenceable(1) %49) #7
  %51 = getelementptr inbounds i8, ptr %.1419585, i64 8
  %.1419 = load ptr, ptr %51, align 8, !tbaa !9
  %.not527 = icmp eq ptr %.1419, null
  br i1 %.not527, label %.loopexit572, label %.lr.ph586, !llvm.loop !21

52:                                               ; preds = %.lr.ph590
  %53 = load ptr, ptr %42, align 8, !tbaa !16
  %54 = tail call ptr @copy_Token(ptr noundef %53)
  br label %.loopexit572

.loopexit572:                                     ; preds = %.lr.ph586, %45, %52
  %.1448 = phi ptr [ %54, %52 ], [ %46, %45 ], [ %46, %.lr.ph586 ]
  %55 = tail call i32 @get_type(ptr noundef %.1448)
  %56 = icmp eq i32 %55, -1
  br i1 %56, label %57, label %65

57:                                               ; preds = %.loopexit572
  %58 = load i32, ptr @lnum_types, align 4, !tbaa !5
  %59 = getelementptr inbounds i8, ptr %.1434589, i64 16
  store i32 %58, ptr %59, align 8, !tbaa !19
  %60 = tail call ptr @copy_Token(ptr noundef %.1448)
  %61 = load i32, ptr @lnum_types, align 4, !tbaa !5
  %62 = add nsw i32 %61, 1
  store i32 %62, ptr @lnum_types, align 4, !tbaa !5
  %63 = sext i32 %61 to i64
  %64 = getelementptr inbounds [50 x ptr], ptr @ltype_names, i64 0, i64 %63
  store ptr %60, ptr %64, align 8, !tbaa !9
  br label %67

65:                                               ; preds = %.loopexit572
  %66 = getelementptr inbounds i8, ptr %.1434589, i64 16
  store i32 %55, ptr %66, align 8, !tbaa !19
  br label %67

67:                                               ; preds = %65, %57
  tail call void @free(ptr noundef %.1448) #7
  %68 = getelementptr inbounds i8, ptr %.1434589, i64 24
  %.1434 = load ptr, ptr %68, align 8, !tbaa !9
  %.not461 = icmp eq ptr %.1434, null
  br i1 %.not461, label %.preheader571, label %.lr.ph590, !llvm.loop !22

.preheader569:                                    ; preds = %95, %.preheader571
  %.0427607 = load ptr, ptr @gparse_predicates, align 8, !tbaa !9
  %.not463608 = icmp eq ptr %.0427607, null
  br i1 %.not463608, label %.preheader567, label %.lr.ph610

.lr.ph598:                                        ; preds = %.preheader571, %95
  %.2435597 = phi ptr [ %.2435, %95 ], [ %.2435595, %.preheader571 ]
  %69 = getelementptr inbounds i8, ptr %.2435597, i64 8
  %70 = load ptr, ptr %69, align 8, !tbaa !13
  %71 = getelementptr inbounds i8, ptr %70, i64 8
  %72 = load ptr, ptr %71, align 8, !tbaa !14
  %.not524 = icmp eq ptr %72, null
  br i1 %.not524, label %80, label %73

73:                                               ; preds = %.lr.ph598
  %74 = tail call ptr @new_Token(i32 noundef 256) #7
  %75 = tail call ptr @strcpy(ptr noundef nonnull dereferenceable(1) %74, ptr noundef nonnull dereferenceable(1) @.str) #7
  %.2420591 = load ptr, ptr %69, align 8, !tbaa !9
  %.not525592 = icmp eq ptr %.2420591, null
  br i1 %.not525592, label %.loopexit570, label %.lr.ph594

.lr.ph594:                                        ; preds = %73, %.lr.ph594
  %.2420593 = phi ptr [ %.2420, %.lr.ph594 ], [ %.2420591, %73 ]
  %76 = tail call ptr @strcat(ptr noundef nonnull dereferenceable(1) %74, ptr noundef nonnull dereferenceable(1) @.str.1) #7
  %77 = load ptr, ptr %.2420593, align 8, !tbaa !16
  %78 = tail call ptr @strcat(ptr noundef nonnull dereferenceable(1) %74, ptr noundef nonnull dereferenceable(1) %77) #7
  %79 = getelementptr inbounds i8, ptr %.2420593, i64 8
  %.2420 = load ptr, ptr %79, align 8, !tbaa !9
  %.not525 = icmp eq ptr %.2420, null
  br i1 %.not525, label %.loopexit570, label %.lr.ph594, !llvm.loop !23

80:                                               ; preds = %.lr.ph598
  %81 = load ptr, ptr %70, align 8, !tbaa !16
  %82 = tail call ptr @copy_Token(ptr noundef %81)
  br label %.loopexit570

.loopexit570:                                     ; preds = %.lr.ph594, %73, %80
  %.2449 = phi ptr [ %82, %80 ], [ %74, %73 ], [ %74, %.lr.ph594 ]
  %83 = tail call i32 @get_type(ptr noundef %.2449)
  %84 = icmp eq i32 %83, -1
  br i1 %84, label %85, label %93

85:                                               ; preds = %.loopexit570
  %86 = load i32, ptr @lnum_types, align 4, !tbaa !5
  %87 = getelementptr inbounds i8, ptr %.2435597, i64 16
  store i32 %86, ptr %87, align 8, !tbaa !19
  %88 = tail call ptr @copy_Token(ptr noundef %.2449)
  %89 = load i32, ptr @lnum_types, align 4, !tbaa !5
  %90 = add nsw i32 %89, 1
  store i32 %90, ptr @lnum_types, align 4, !tbaa !5
  %91 = sext i32 %89 to i64
  %92 = getelementptr inbounds [50 x ptr], ptr @ltype_names, i64 0, i64 %91
  store ptr %88, ptr %92, align 8, !tbaa !9
  br label %95

93:                                               ; preds = %.loopexit570
  %94 = getelementptr inbounds i8, ptr %.2435597, i64 16
  store i32 %83, ptr %94, align 8, !tbaa !19
  br label %95

95:                                               ; preds = %93, %85
  tail call void @free(ptr noundef %.2449) #7
  %96 = getelementptr inbounds i8, ptr %.2435597, i64 24
  %.2435 = load ptr, ptr %96, align 8, !tbaa !9
  %.not462 = icmp eq ptr %.2435, null
  br i1 %.not462, label %.preheader569, label %.lr.ph598, !llvm.loop !24

.preheader567:                                    ; preds = %._crit_edge, %.preheader569
  %.1428622 = load ptr, ptr @gparse_functions, align 8, !tbaa !9
  %.not464623 = icmp eq ptr %.1428622, null
  br i1 %.not464623, label %._crit_edge626, label %.lr.ph625

.lr.ph610:                                        ; preds = %.preheader569, %._crit_edge
  %.0427609 = phi ptr [ %.0427, %._crit_edge ], [ %.0427607, %.preheader569 ]
  %97 = getelementptr inbounds i8, ptr %.0427609, i64 8
  %.3436603 = load ptr, ptr %97, align 8, !tbaa !9
  %.not521604 = icmp eq ptr %.3436603, null
  br i1 %.not521604, label %._crit_edge, label %.lr.ph606

.lr.ph606:                                        ; preds = %.lr.ph610, %124
  %.3436605 = phi ptr [ %.3436, %124 ], [ %.3436603, %.lr.ph610 ]
  %98 = getelementptr inbounds i8, ptr %.3436605, i64 8
  %99 = load ptr, ptr %98, align 8, !tbaa !13
  %100 = getelementptr inbounds i8, ptr %99, i64 8
  %101 = load ptr, ptr %100, align 8, !tbaa !14
  %.not522 = icmp eq ptr %101, null
  br i1 %.not522, label %109, label %102

102:                                              ; preds = %.lr.ph606
  %103 = tail call ptr @new_Token(i32 noundef 256) #7
  %104 = tail call ptr @strcpy(ptr noundef nonnull dereferenceable(1) %103, ptr noundef nonnull dereferenceable(1) @.str) #7
  %.3421599 = load ptr, ptr %98, align 8, !tbaa !9
  %.not523600 = icmp eq ptr %.3421599, null
  br i1 %.not523600, label %.loopexit568, label %.lr.ph602

.lr.ph602:                                        ; preds = %102, %.lr.ph602
  %.3421601 = phi ptr [ %.3421, %.lr.ph602 ], [ %.3421599, %102 ]
  %105 = tail call ptr @strcat(ptr noundef nonnull dereferenceable(1) %103, ptr noundef nonnull dereferenceable(1) @.str.1) #7
  %106 = load ptr, ptr %.3421601, align 8, !tbaa !16
  %107 = tail call ptr @strcat(ptr noundef nonnull dereferenceable(1) %103, ptr noundef nonnull dereferenceable(1) %106) #7
  %108 = getelementptr inbounds i8, ptr %.3421601, i64 8
  %.3421 = load ptr, ptr %108, align 8, !tbaa !9
  %.not523 = icmp eq ptr %.3421, null
  br i1 %.not523, label %.loopexit568, label %.lr.ph602, !llvm.loop !25

109:                                              ; preds = %.lr.ph606
  %110 = load ptr, ptr %99, align 8, !tbaa !16
  %111 = tail call ptr @copy_Token(ptr noundef %110)
  br label %.loopexit568

.loopexit568:                                     ; preds = %.lr.ph602, %102, %109
  %.3450 = phi ptr [ %111, %109 ], [ %103, %102 ], [ %103, %.lr.ph602 ]
  %112 = tail call i32 @get_type(ptr noundef %.3450)
  %113 = icmp eq i32 %112, -1
  br i1 %113, label %114, label %122

114:                                              ; preds = %.loopexit568
  %115 = load i32, ptr @lnum_types, align 4, !tbaa !5
  %116 = getelementptr inbounds i8, ptr %.3436605, i64 16
  store i32 %115, ptr %116, align 8, !tbaa !19
  %117 = tail call ptr @copy_Token(ptr noundef %.3450)
  %118 = load i32, ptr @lnum_types, align 4, !tbaa !5
  %119 = add nsw i32 %118, 1
  store i32 %119, ptr @lnum_types, align 4, !tbaa !5
  %120 = sext i32 %118 to i64
  %121 = getelementptr inbounds [50 x ptr], ptr @ltype_names, i64 0, i64 %120
  store ptr %117, ptr %121, align 8, !tbaa !9
  br label %124

122:                                              ; preds = %.loopexit568
  %123 = getelementptr inbounds i8, ptr %.3436605, i64 16
  store i32 %112, ptr %123, align 8, !tbaa !19
  br label %124

124:                                              ; preds = %122, %114
  tail call void @free(ptr noundef %.3450) #7
  %125 = getelementptr inbounds i8, ptr %.3436605, i64 24
  %.3436 = load ptr, ptr %125, align 8, !tbaa !9
  %.not521 = icmp eq ptr %.3436, null
  br i1 %.not521, label %._crit_edge, label %.lr.ph606, !llvm.loop !26

._crit_edge:                                      ; preds = %124, %.lr.ph610
  %126 = getelementptr inbounds i8, ptr %.0427609, i64 16
  %.0427 = load ptr, ptr %126, align 8, !tbaa !9
  %.not463 = icmp eq ptr %.0427, null
  br i1 %.not463, label %.preheader567, label %.lr.ph610, !llvm.loop !27

.lr.ph625:                                        ; preds = %.preheader567, %._crit_edge621
  %.1428624 = phi ptr [ %.1428, %._crit_edge621 ], [ %.1428622, %.preheader567 ]
  %127 = getelementptr inbounds i8, ptr %.1428624, i64 8
  %.4437616 = load ptr, ptr %127, align 8, !tbaa !9
  %.not518617 = icmp eq ptr %.4437616, null
  br i1 %.not518617, label %._crit_edge621, label %.lr.ph620

.lr.ph620:                                        ; preds = %.lr.ph625, %154
  %.4437618 = phi ptr [ %.4437, %154 ], [ %.4437616, %.lr.ph625 ]
  %128 = getelementptr inbounds i8, ptr %.4437618, i64 8
  %129 = load ptr, ptr %128, align 8, !tbaa !13
  %130 = getelementptr inbounds i8, ptr %129, i64 8
  %131 = load ptr, ptr %130, align 8, !tbaa !14
  %.not519 = icmp eq ptr %131, null
  br i1 %.not519, label %139, label %132

132:                                              ; preds = %.lr.ph620
  %133 = tail call ptr @new_Token(i32 noundef 256) #7
  %134 = tail call ptr @strcpy(ptr noundef nonnull dereferenceable(1) %133, ptr noundef nonnull dereferenceable(1) @.str) #7
  %.4422611 = load ptr, ptr %128, align 8, !tbaa !9
  %.not520612 = icmp eq ptr %.4422611, null
  br i1 %.not520612, label %.loopexit566, label %.lr.ph615

.lr.ph615:                                        ; preds = %132, %.lr.ph615
  %.4422613 = phi ptr [ %.4422, %.lr.ph615 ], [ %.4422611, %132 ]
  %135 = tail call ptr @strcat(ptr noundef nonnull dereferenceable(1) %133, ptr noundef nonnull dereferenceable(1) @.str.1) #7
  %136 = load ptr, ptr %.4422613, align 8, !tbaa !16
  %137 = tail call ptr @strcat(ptr noundef nonnull dereferenceable(1) %133, ptr noundef nonnull dereferenceable(1) %136) #7
  %138 = getelementptr inbounds i8, ptr %.4422613, i64 8
  %.4422 = load ptr, ptr %138, align 8, !tbaa !9
  %.not520 = icmp eq ptr %.4422, null
  br i1 %.not520, label %.loopexit566, label %.lr.ph615, !llvm.loop !28

139:                                              ; preds = %.lr.ph620
  %140 = load ptr, ptr %129, align 8, !tbaa !16
  %141 = tail call ptr @copy_Token(ptr noundef %140)
  br label %.loopexit566

.loopexit566:                                     ; preds = %.lr.ph615, %132, %139
  %.4451 = phi ptr [ %141, %139 ], [ %133, %132 ], [ %133, %.lr.ph615 ]
  %142 = tail call i32 @get_type(ptr noundef %.4451)
  %143 = icmp eq i32 %142, -1
  br i1 %143, label %144, label %152

144:                                              ; preds = %.loopexit566
  %145 = load i32, ptr @lnum_types, align 4, !tbaa !5
  %146 = getelementptr inbounds i8, ptr %.4437618, i64 16
  store i32 %145, ptr %146, align 8, !tbaa !19
  %147 = tail call ptr @copy_Token(ptr noundef %.4451)
  %148 = load i32, ptr @lnum_types, align 4, !tbaa !5
  %149 = add nsw i32 %148, 1
  store i32 %149, ptr @lnum_types, align 4, !tbaa !5
  %150 = sext i32 %148 to i64
  %151 = getelementptr inbounds [50 x ptr], ptr @ltype_names, i64 0, i64 %150
  store ptr %147, ptr %151, align 8, !tbaa !9
  br label %154

152:                                              ; preds = %.loopexit566
  %153 = getelementptr inbounds i8, ptr %.4437618, i64 16
  store i32 %142, ptr %153, align 8, !tbaa !19
  br label %154

154:                                              ; preds = %152, %144
  tail call void @free(ptr noundef %.4451) #7
  %155 = getelementptr inbounds i8, ptr %.4437618, i64 24
  %.4437 = load ptr, ptr %155, align 8, !tbaa !9
  %.not518 = icmp eq ptr %.4437, null
  br i1 %.not518, label %._crit_edge621, label %.lr.ph620, !llvm.loop !29

._crit_edge621:                                   ; preds = %154, %.lr.ph625
  %156 = getelementptr inbounds i8, ptr %.1428624, i64 16
  %.1428 = load ptr, ptr %156, align 8, !tbaa !9
  %.not464 = icmp eq ptr %.1428, null
  br i1 %.not464, label %._crit_edge626, label %.lr.ph625, !llvm.loop !30

._crit_edge626:                                   ; preds = %._crit_edge621, %.preheader567
  %157 = load ptr, ptr @gorig_goal_facts, align 8, !tbaa !9
  tail call void @collect_type_names_in_pl(ptr noundef %157)
  %.0413638 = load ptr, ptr @gloaded_ops, align 8, !tbaa !9
  %.not465639 = icmp eq ptr %.0413638, null
  br i1 %.not465639, label %.preheader564, label %.lr.ph642

.preheader564:                                    ; preds = %._crit_edge637, %._crit_edge626
  %158 = load i32, ptr @lnum_types, align 4, !tbaa !5
  %159 = icmp sgt i32 %158, 0
  br i1 %159, label %.lr.ph644.preheader, label %.preheader563

.lr.ph644.preheader:                              ; preds = %.preheader564
  %160 = zext nneg i32 %158 to i64
  %161 = shl nuw nsw i64 %160, 2
  tail call void @llvm.memset.p0.i64(ptr nonnull align 16 @lnum_either_ty, i8 0, i64 %161, i1 false), !tbaa !5
  br label %.preheader563

.lr.ph642:                                        ; preds = %._crit_edge626, %._crit_edge637
  %.0413640 = phi ptr [ %.0413, %._crit_edge637 ], [ %.0413638, %._crit_edge626 ]
  %162 = getelementptr inbounds i8, ptr %.0413640, i64 32
  %163 = load ptr, ptr %162, align 8, !tbaa !31
  tail call void @collect_type_names_in_pl(ptr noundef %163)
  %164 = getelementptr inbounds i8, ptr %.0413640, i64 40
  %165 = load ptr, ptr %164, align 8, !tbaa !33
  tail call void @collect_type_names_in_pl(ptr noundef %165)
  %166 = getelementptr inbounds i8, ptr %.0413640, i64 16
  %.5438632 = load ptr, ptr %166, align 8, !tbaa !9
  %.not515633 = icmp eq ptr %.5438632, null
  br i1 %.not515633, label %._crit_edge637, label %.lr.ph636

.lr.ph636:                                        ; preds = %.lr.ph642, %193
  %.5438634 = phi ptr [ %.5438, %193 ], [ %.5438632, %.lr.ph642 ]
  %167 = getelementptr inbounds i8, ptr %.5438634, i64 8
  %168 = load ptr, ptr %167, align 8, !tbaa !13
  %169 = getelementptr inbounds i8, ptr %168, i64 8
  %170 = load ptr, ptr %169, align 8, !tbaa !14
  %.not516 = icmp eq ptr %170, null
  br i1 %.not516, label %178, label %171

171:                                              ; preds = %.lr.ph636
  %172 = tail call ptr @new_Token(i32 noundef 256) #7
  %173 = tail call ptr @strcpy(ptr noundef nonnull dereferenceable(1) %172, ptr noundef nonnull dereferenceable(1) @.str) #7
  %.5423627 = load ptr, ptr %167, align 8, !tbaa !9
  %.not517628 = icmp eq ptr %.5423627, null
  br i1 %.not517628, label %.loopexit565, label %.lr.ph631

.lr.ph631:                                        ; preds = %171, %.lr.ph631
  %.5423629 = phi ptr [ %.5423, %.lr.ph631 ], [ %.5423627, %171 ]
  %174 = tail call ptr @strcat(ptr noundef nonnull dereferenceable(1) %172, ptr noundef nonnull dereferenceable(1) @.str.1) #7
  %175 = load ptr, ptr %.5423629, align 8, !tbaa !16
  %176 = tail call ptr @strcat(ptr noundef nonnull dereferenceable(1) %172, ptr noundef nonnull dereferenceable(1) %175) #7
  %177 = getelementptr inbounds i8, ptr %.5423629, i64 8
  %.5423 = load ptr, ptr %177, align 8, !tbaa !9
  %.not517 = icmp eq ptr %.5423, null
  br i1 %.not517, label %.loopexit565, label %.lr.ph631, !llvm.loop !34

178:                                              ; preds = %.lr.ph636
  %179 = load ptr, ptr %168, align 8, !tbaa !16
  %180 = tail call ptr @copy_Token(ptr noundef %179)
  br label %.loopexit565

.loopexit565:                                     ; preds = %.lr.ph631, %171, %178
  %.5452 = phi ptr [ %180, %178 ], [ %172, %171 ], [ %172, %.lr.ph631 ]
  %181 = tail call i32 @get_type(ptr noundef %.5452)
  %182 = icmp eq i32 %181, -1
  br i1 %182, label %183, label %191

183:                                              ; preds = %.loopexit565
  %184 = load i32, ptr @lnum_types, align 4, !tbaa !5
  %185 = getelementptr inbounds i8, ptr %.5438634, i64 16
  store i32 %184, ptr %185, align 8, !tbaa !19
  %186 = tail call ptr @copy_Token(ptr noundef %.5452)
  %187 = load i32, ptr @lnum_types, align 4, !tbaa !5
  %188 = add nsw i32 %187, 1
  store i32 %188, ptr @lnum_types, align 4, !tbaa !5
  %189 = sext i32 %187 to i64
  %190 = getelementptr inbounds [50 x ptr], ptr @ltype_names, i64 0, i64 %189
  store ptr %186, ptr %190, align 8, !tbaa !9
  br label %193

191:                                              ; preds = %.loopexit565
  %192 = getelementptr inbounds i8, ptr %.5438634, i64 16
  store i32 %181, ptr %192, align 8, !tbaa !19
  br label %193

193:                                              ; preds = %191, %183
  tail call void @free(ptr noundef %.5452) #7
  %194 = getelementptr inbounds i8, ptr %.5438634, i64 24
  %.5438 = load ptr, ptr %194, align 8, !tbaa !9
  %.not515 = icmp eq ptr %.5438, null
  br i1 %.not515, label %._crit_edge637, label %.lr.ph636, !llvm.loop !35

._crit_edge637:                                   ; preds = %193, %.lr.ph642
  %195 = getelementptr inbounds i8, ptr %.0413640, i64 48
  %.0413 = load ptr, ptr %195, align 8, !tbaa !9
  %.not465 = icmp eq ptr %.0413, null
  br i1 %.not465, label %.preheader564, label %.lr.ph642, !llvm.loop !36

.preheader563:                                    ; preds = %.lr.ph644.preheader, %.preheader564
  %.6439645 = load ptr, ptr @gparse_types, align 8, !tbaa !9
  %.not466646 = icmp eq ptr %.6439645, null
  br i1 %.not466646, label %.preheader562, label %.lr.ph648

.preheader562:                                    ; preds = %.lr.ph648, %.preheader563
  %.7440649 = load ptr, ptr @gparse_constants, align 8, !tbaa !9
  %.not467650 = icmp eq ptr %.7440649, null
  br i1 %.not467650, label %.preheader561, label %.lr.ph652

.lr.ph648:                                        ; preds = %.preheader563, %.lr.ph648
  %.6439647 = phi ptr [ %.6439, %.lr.ph648 ], [ %.6439645, %.preheader563 ]
  tail call void @make_either_ty(ptr noundef nonnull %.6439647)
  %196 = getelementptr inbounds i8, ptr %.6439647, i64 24
  %.6439 = load ptr, ptr %196, align 8, !tbaa !9
  %.not466 = icmp eq ptr %.6439, null
  br i1 %.not466, label %.preheader562, label %.lr.ph648, !llvm.loop !37

.preheader561:                                    ; preds = %.lr.ph652, %.preheader562
  %.8441653 = load ptr, ptr @gparse_objects, align 8, !tbaa !9
  %.not468654 = icmp eq ptr %.8441653, null
  br i1 %.not468654, label %.preheader560, label %.lr.ph656

.lr.ph652:                                        ; preds = %.preheader562, %.lr.ph652
  %.7440651 = phi ptr [ %.7440, %.lr.ph652 ], [ %.7440649, %.preheader562 ]
  tail call void @make_either_ty(ptr noundef nonnull %.7440651)
  %197 = getelementptr inbounds i8, ptr %.7440651, i64 24
  %.7440 = load ptr, ptr %197, align 8, !tbaa !9
  %.not467 = icmp eq ptr %.7440, null
  br i1 %.not467, label %.preheader561, label %.lr.ph652, !llvm.loop !38

.preheader560:                                    ; preds = %.lr.ph656, %.preheader561
  %.2429663 = load ptr, ptr @gparse_predicates, align 8, !tbaa !9
  %.not469664 = icmp eq ptr %.2429663, null
  br i1 %.not469664, label %.preheader559, label %.lr.ph666

.lr.ph656:                                        ; preds = %.preheader561, %.lr.ph656
  %.8441655 = phi ptr [ %.8441, %.lr.ph656 ], [ %.8441653, %.preheader561 ]
  tail call void @make_either_ty(ptr noundef nonnull %.8441655)
  %198 = getelementptr inbounds i8, ptr %.8441655, i64 24
  %.8441 = load ptr, ptr %198, align 8, !tbaa !9
  %.not468 = icmp eq ptr %.8441, null
  br i1 %.not468, label %.preheader560, label %.lr.ph656, !llvm.loop !39

.preheader559:                                    ; preds = %._crit_edge662, %.preheader560
  %.3430673 = load ptr, ptr @gparse_functions, align 8, !tbaa !9
  %.not470674 = icmp eq ptr %.3430673, null
  br i1 %.not470674, label %._crit_edge677, label %.lr.ph676

.lr.ph666:                                        ; preds = %.preheader560, %._crit_edge662
  %.2429665 = phi ptr [ %.2429, %._crit_edge662 ], [ %.2429663, %.preheader560 ]
  %199 = getelementptr inbounds i8, ptr %.2429665, i64 8
  %.9442657 = load ptr, ptr %199, align 8, !tbaa !9
  %.not514658 = icmp eq ptr %.9442657, null
  br i1 %.not514658, label %._crit_edge662, label %.lr.ph661

.lr.ph661:                                        ; preds = %.lr.ph666, %.lr.ph661
  %.9442659 = phi ptr [ %.9442, %.lr.ph661 ], [ %.9442657, %.lr.ph666 ]
  tail call void @make_either_ty(ptr noundef nonnull %.9442659)
  %200 = getelementptr inbounds i8, ptr %.9442659, i64 24
  %.9442 = load ptr, ptr %200, align 8, !tbaa !9
  %.not514 = icmp eq ptr %.9442, null
  br i1 %.not514, label %._crit_edge662, label %.lr.ph661, !llvm.loop !40

._crit_edge662:                                   ; preds = %.lr.ph661, %.lr.ph666
  %201 = getelementptr inbounds i8, ptr %.2429665, i64 16
  %.2429 = load ptr, ptr %201, align 8, !tbaa !9
  %.not469 = icmp eq ptr %.2429, null
  br i1 %.not469, label %.preheader559, label %.lr.ph666, !llvm.loop !41

.lr.ph676:                                        ; preds = %.preheader559, %._crit_edge672
  %.3430675 = phi ptr [ %.3430, %._crit_edge672 ], [ %.3430673, %.preheader559 ]
  %202 = getelementptr inbounds i8, ptr %.3430675, i64 8
  %.10443667 = load ptr, ptr %202, align 8, !tbaa !9
  %.not513668 = icmp eq ptr %.10443667, null
  br i1 %.not513668, label %._crit_edge672, label %.lr.ph671

.lr.ph671:                                        ; preds = %.lr.ph676, %.lr.ph671
  %.10443669 = phi ptr [ %.10443, %.lr.ph671 ], [ %.10443667, %.lr.ph676 ]
  tail call void @make_either_ty(ptr noundef nonnull %.10443669)
  %203 = getelementptr inbounds i8, ptr %.10443669, i64 24
  %.10443 = load ptr, ptr %203, align 8, !tbaa !9
  %.not513 = icmp eq ptr %.10443, null
  br i1 %.not513, label %._crit_edge672, label %.lr.ph671, !llvm.loop !42

._crit_edge672:                                   ; preds = %.lr.ph671, %.lr.ph676
  %204 = getelementptr inbounds i8, ptr %.3430675, i64 16
  %.3430 = load ptr, ptr %204, align 8, !tbaa !9
  %.not470 = icmp eq ptr %.3430, null
  br i1 %.not470, label %._crit_edge677, label %.lr.ph676, !llvm.loop !43

._crit_edge677:                                   ; preds = %._crit_edge672, %.preheader559
  %205 = load ptr, ptr @gorig_goal_facts, align 8, !tbaa !9
  tail call void @make_either_ty_in_pl(ptr noundef %205)
  %.1414684 = load ptr, ptr @gloaded_ops, align 8, !tbaa !9
  %.not471685 = icmp eq ptr %.1414684, null
  br i1 %.not471685, label %.preheader558, label %.lr.ph688

.preheader558:                                    ; preds = %._crit_edge683, %._crit_edge677
  %206 = load i32, ptr @lnum_types, align 4, !tbaa !5
  %207 = icmp sgt i32 %206, 0
  br i1 %207, label %.preheader557.us.preheader, label %.preheader555

.preheader557.us.preheader:                       ; preds = %.preheader558
  %wide.trip.count846 = zext nneg i32 %206 to i64
  %min.iters.check = icmp ult i32 %206, 8
  %min.iters.check920 = icmp ult i32 %206, 16
  %n.vec = and i64 %wide.trip.count846, 2147483632
  %cmp.n = icmp eq i64 %n.vec, %wide.trip.count846
  %n.vec.remaining = and i64 %wide.trip.count846, 8
  %min.epilog.iters.check.not.not = icmp eq i64 %n.vec.remaining, 0
  %n.vec922 = and i64 %wide.trip.count846, 2147483640
  %cmp.n930 = icmp eq i64 %n.vec922, %wide.trip.count846
  br label %iter.check

iter.check:                                       ; preds = %.preheader557.us.preheader, %._crit_edge691.us
  %indvars.iv843 = phi i64 [ 0, %.preheader557.us.preheader ], [ %indvars.iv.next844, %._crit_edge691.us ]
  br i1 %min.iters.check, label %vec.epilog.scalar.ph.preheader, label %vector.main.loop.iter.check

vector.main.loop.iter.check:                      ; preds = %iter.check
  br i1 %min.iters.check920, label %vec.epilog.ph, label %vector.ph

vector.ph:                                        ; preds = %vector.main.loop.iter.check
  %broadcast.splatinsert = insertelement <16 x i64> poison, i64 %indvars.iv843, i64 0
  %broadcast.splat = shufflevector <16 x i64> %broadcast.splatinsert, <16 x i64> poison, <16 x i32> zeroinitializer
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %vec.ind = phi <16 x i64> [ <i64 0, i64 1, i64 2, i64 3, i64 4, i64 5, i64 6, i64 7, i64 8, i64 9, i64 10, i64 11, i64 12, i64 13, i64 14, i64 15>, %vector.ph ], [ %vec.ind.next, %vector.body ]
  %208 = icmp eq <16 x i64> %broadcast.splat, %vec.ind
  %209 = zext <16 x i1> %208 to <16 x i8>
  %210 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv843, i64 %index
  store <16 x i8> %209, ptr %210, align 2, !tbaa !44
  %index.next = add nuw i64 %index, 16
  %vec.ind.next = add <16 x i64> %vec.ind, <i64 16, i64 16, i64 16, i64 16, i64 16, i64 16, i64 16, i64 16, i64 16, i64 16, i64 16, i64 16, i64 16, i64 16, i64 16, i64 16>
  %211 = icmp eq i64 %index.next, %n.vec
  br i1 %211, label %middle.block, label %vector.body, !llvm.loop !45

middle.block:                                     ; preds = %vector.body
  br i1 %cmp.n, label %._crit_edge691.us, label %vec.epilog.iter.check

vec.epilog.iter.check:                            ; preds = %middle.block
  br i1 %min.epilog.iters.check.not.not, label %vec.epilog.scalar.ph.preheader, label %vec.epilog.ph

vec.epilog.ph:                                    ; preds = %vector.main.loop.iter.check, %vec.epilog.iter.check
  %vec.epilog.resume.val = phi i64 [ %n.vec, %vec.epilog.iter.check ], [ 0, %vector.main.loop.iter.check ]
  %.splatinsert = insertelement <8 x i64> poison, i64 %vec.epilog.resume.val, i64 0
  %.splat = shufflevector <8 x i64> %.splatinsert, <8 x i64> poison, <8 x i32> zeroinitializer
  %induction = or disjoint <8 x i64> %.splat, <i64 0, i64 1, i64 2, i64 3, i64 4, i64 5, i64 6, i64 7>
  %broadcast.splatinsert927 = insertelement <8 x i64> poison, i64 %indvars.iv843, i64 0
  %broadcast.splat928 = shufflevector <8 x i64> %broadcast.splatinsert927, <8 x i64> poison, <8 x i32> zeroinitializer
  br label %vec.epilog.vector.body

vec.epilog.vector.body:                           ; preds = %vec.epilog.vector.body, %vec.epilog.ph
  %index924 = phi i64 [ %vec.epilog.resume.val, %vec.epilog.ph ], [ %index.next929, %vec.epilog.vector.body ]
  %vec.ind925 = phi <8 x i64> [ %induction, %vec.epilog.ph ], [ %vec.ind.next926, %vec.epilog.vector.body ]
  %212 = icmp eq <8 x i64> %broadcast.splat928, %vec.ind925
  %213 = zext <8 x i1> %212 to <8 x i8>
  %214 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv843, i64 %index924
  store <8 x i8> %213, ptr %214, align 2, !tbaa !44
  %index.next929 = add nuw i64 %index924, 8
  %vec.ind.next926 = add <8 x i64> %vec.ind925, <i64 8, i64 8, i64 8, i64 8, i64 8, i64 8, i64 8, i64 8>
  %215 = icmp eq i64 %index.next929, %n.vec922
  br i1 %215, label %vec.epilog.middle.block, label %vec.epilog.vector.body, !llvm.loop !48

vec.epilog.middle.block:                          ; preds = %vec.epilog.vector.body
  br i1 %cmp.n930, label %._crit_edge691.us, label %vec.epilog.scalar.ph.preheader

vec.epilog.scalar.ph.preheader:                   ; preds = %vec.epilog.middle.block, %iter.check, %vec.epilog.iter.check
  %indvars.iv.ph = phi i64 [ 0, %iter.check ], [ %n.vec, %vec.epilog.iter.check ], [ %n.vec922, %vec.epilog.middle.block ]
  br label %vec.epilog.scalar.ph

vec.epilog.scalar.ph:                             ; preds = %vec.epilog.scalar.ph.preheader, %vec.epilog.scalar.ph
  %indvars.iv = phi i64 [ %indvars.iv.next, %vec.epilog.scalar.ph ], [ %indvars.iv.ph, %vec.epilog.scalar.ph.preheader ]
  %216 = icmp eq i64 %indvars.iv843, %indvars.iv
  %217 = zext i1 %216 to i8
  %218 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv843, i64 %indvars.iv
  store i8 %217, ptr %218, align 1, !tbaa !44
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count846
  br i1 %exitcond.not, label %._crit_edge691.us, label %vec.epilog.scalar.ph, !llvm.loop !49

._crit_edge691.us:                                ; preds = %vec.epilog.scalar.ph, %vec.epilog.middle.block, %middle.block
  %indvars.iv.next844 = add nuw nsw i64 %indvars.iv843, 1
  %exitcond847.not = icmp eq i64 %indvars.iv.next844, %wide.trip.count846
  br i1 %exitcond847.not, label %.preheader556, label %iter.check, !llvm.loop !50

.lr.ph688:                                        ; preds = %._crit_edge677, %._crit_edge683
  %.1414686 = phi ptr [ %.1414, %._crit_edge683 ], [ %.1414684, %._crit_edge677 ]
  %219 = getelementptr inbounds i8, ptr %.1414686, i64 32
  %220 = load ptr, ptr %219, align 8, !tbaa !31
  tail call void @make_either_ty_in_pl(ptr noundef %220)
  %221 = getelementptr inbounds i8, ptr %.1414686, i64 40
  %222 = load ptr, ptr %221, align 8, !tbaa !33
  tail call void @make_either_ty_in_pl(ptr noundef %222)
  %223 = getelementptr inbounds i8, ptr %.1414686, i64 16
  %.11444678 = load ptr, ptr %223, align 8, !tbaa !9
  %.not512679 = icmp eq ptr %.11444678, null
  br i1 %.not512679, label %._crit_edge683, label %.lr.ph682

.lr.ph682:                                        ; preds = %.lr.ph688, %.lr.ph682
  %.11444680 = phi ptr [ %.11444, %.lr.ph682 ], [ %.11444678, %.lr.ph688 ]
  tail call void @make_either_ty(ptr noundef nonnull %.11444680)
  %224 = getelementptr inbounds i8, ptr %.11444680, i64 24
  %.11444 = load ptr, ptr %224, align 8, !tbaa !9
  %.not512 = icmp eq ptr %.11444, null
  br i1 %.not512, label %._crit_edge683, label %.lr.ph682, !llvm.loop !51

._crit_edge683:                                   ; preds = %.lr.ph682, %.lr.ph688
  %225 = getelementptr inbounds i8, ptr %.1414686, i64 48
  %.1414 = load ptr, ptr %225, align 8, !tbaa !9
  %.not471 = icmp eq ptr %.1414, null
  br i1 %.not471, label %.preheader558, label %.lr.ph688, !llvm.loop !52

.preheader556:                                    ; preds = %._crit_edge691.us
  br i1 %207, label %.lr.ph694.preheader, label %.preheader555

.lr.ph694.preheader:                              ; preds = %.preheader556
  %wide.trip.count851 = zext nneg i32 %206 to i64
  br label %.lr.ph694

.lr.ph694:                                        ; preds = %.lr.ph694.preheader, %230
  %indvars.iv848 = phi i64 [ 0, %.lr.ph694.preheader ], [ %indvars.iv.next849, %230 ]
  %226 = getelementptr inbounds [50 x ptr], ptr @ltype_names, i64 0, i64 %indvars.iv848
  %227 = load ptr, ptr %226, align 8, !tbaa !9
  %228 = tail call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %227, ptr noundef nonnull dereferenceable(1) @.str.2) #8
  %229 = icmp eq i32 %228, 0
  br i1 %229, label %._crit_edge695, label %230

230:                                              ; preds = %.lr.ph694
  %indvars.iv.next849 = add nuw nsw i64 %indvars.iv848, 1
  %exitcond852.not = icmp eq i64 %indvars.iv.next849, %wide.trip.count851
  br i1 %exitcond852.not, label %._crit_edge695, label %.lr.ph694, !llvm.loop !53

._crit_edge695:                                   ; preds = %230, %.lr.ph694
  %.0403 = phi i64 [ -1, %230 ], [ %indvars.iv848, %.lr.ph694 ]
  br i1 %207, label %.lr.ph701, label %.preheader555

.lr.ph701:                                        ; preds = %._crit_edge695
  %sext = shl i64 %.0403, 32
  %231 = ashr exact i64 %sext, 32
  %xtraiter = and i64 %wide.trip.count846, 3
  %232 = icmp ult i32 %206, 4
  br i1 %232, label %.preheader555.loopexit.unr-lcssa, label %.lr.ph701.new

.lr.ph701.new:                                    ; preds = %.lr.ph701
  %unroll_iter = and i64 %wide.trip.count846, 2147483644
  br label %234

.preheader555.loopexit.unr-lcssa:                 ; preds = %234, %.lr.ph701
  %indvars.iv853.unr = phi i64 [ 0, %.lr.ph701 ], [ %indvars.iv.next854.3, %234 ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.preheader555, label %.epil.preheader

.epil.preheader:                                  ; preds = %.preheader555.loopexit.unr-lcssa, %.epil.preheader
  %indvars.iv853.epil = phi i64 [ %indvars.iv.next854.epil, %.epil.preheader ], [ %indvars.iv853.unr, %.preheader555.loopexit.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.epil.preheader ], [ 0, %.preheader555.loopexit.unr-lcssa ]
  %233 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv853.epil, i64 %231
  store i8 1, ptr %233, align 1, !tbaa !44
  %indvars.iv.next854.epil = add nuw nsw i64 %indvars.iv853.epil, 1
  %epil.iter.next = add i64 %epil.iter, 1
  %epil.iter.cmp.not = icmp eq i64 %epil.iter.next, %xtraiter
  br i1 %epil.iter.cmp.not, label %.preheader555, label %.epil.preheader, !llvm.loop !54

.preheader555:                                    ; preds = %.preheader555.loopexit.unr-lcssa, %.epil.preheader, %.preheader558, %.preheader556, %._crit_edge695
  %.12445702 = load ptr, ptr @gparse_types, align 8, !tbaa !9
  %.not472703 = icmp eq ptr %.12445702, null
  br i1 %.not472703, label %.preheader554, label %.lr.ph705

234:                                              ; preds = %234, %.lr.ph701.new
  %indvars.iv853 = phi i64 [ 0, %.lr.ph701.new ], [ %indvars.iv.next854.3, %234 ]
  %niter = phi i64 [ 0, %.lr.ph701.new ], [ %niter.next.3, %234 ]
  %235 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv853, i64 %231
  store i8 1, ptr %235, align 1, !tbaa !44
  %indvars.iv.next854 = or disjoint i64 %indvars.iv853, 1
  %236 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv.next854, i64 %231
  store i8 1, ptr %236, align 1, !tbaa !44
  %indvars.iv.next854.1 = or disjoint i64 %indvars.iv853, 2
  %237 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv.next854.1, i64 %231
  store i8 1, ptr %237, align 1, !tbaa !44
  %indvars.iv.next854.2 = or disjoint i64 %indvars.iv853, 3
  %238 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv.next854.2, i64 %231
  store i8 1, ptr %238, align 1, !tbaa !44
  %indvars.iv.next854.3 = add nuw nsw i64 %indvars.iv853, 4
  %niter.next.3 = add i64 %niter, 4
  %niter.ncmp.3 = icmp eq i64 %niter.next.3, %unroll_iter
  br i1 %niter.ncmp.3, label %.preheader555.loopexit.unr-lcssa, label %234, !llvm.loop !56

.preheader554.loopexit:                           ; preds = %.lr.ph705
  %.pre = load i32, ptr @lnum_types, align 4, !tbaa !5
  br label %.preheader554

.preheader554:                                    ; preds = %.preheader554.loopexit, %.preheader555
  %239 = phi i32 [ %.pre, %.preheader554.loopexit ], [ %206, %.preheader555 ]
  %240 = icmp sgt i32 %239, 0
  br i1 %240, label %.preheader553.lr.ph, label %.preheader541

.preheader553.lr.ph:                              ; preds = %.preheader554
  %wide.trip.count871 = zext nneg i32 %239 to i64
  %min.iters.check932 = icmp ult i32 %239, 8
  %min.iters.check935 = icmp ult i32 %239, 32
  %n.vec939 = and i64 %wide.trip.count871, 2147483616
  %cmp.n1006 = icmp eq i64 %n.vec939, %wide.trip.count871
  %n.vec.remaining1011 = and i64 %wide.trip.count871, 24
  %min.epilog.iters.check1012 = icmp eq i64 %n.vec.remaining1011, 0
  %n.vec1015 = and i64 %wide.trip.count871, 2147483640
  %cmp.n1037 = icmp eq i64 %n.vec1015, %wide.trip.count871
  %xtraiter1152 = and i64 %wide.trip.count871, 1
  %lcmp.mod1153.not = icmp eq i64 %xtraiter1152, 0
  %241 = add nsw i64 %wide.trip.count871, -1
  br label %.lr.ph709

.lr.ph705:                                        ; preds = %.preheader555, %.lr.ph705
  %.12445704 = phi ptr [ %.12445, %.lr.ph705 ], [ %.12445702, %.preheader555 ]
  %242 = load ptr, ptr %.12445704, align 8, !tbaa !11
  %243 = tail call i32 @get_type(ptr noundef %242)
  %244 = sext i32 %243 to i64
  %245 = getelementptr inbounds i8, ptr %.12445704, i64 16
  %246 = load i32, ptr %245, align 8, !tbaa !19
  %247 = sext i32 %246 to i64
  %248 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %244, i64 %247
  store i8 1, ptr %248, align 1, !tbaa !44
  %249 = getelementptr inbounds i8, ptr %.12445704, i64 24
  %.12445 = load ptr, ptr %249, align 8, !tbaa !9
  %.not472 = icmp eq ptr %.12445, null
  br i1 %.not472, label %.preheader554.loopexit, label %.lr.ph705, !llvm.loop !57

.lr.ph709:                                        ; preds = %._crit_edge710.split.us, %.preheader553.lr.ph
  %indvars.iv868 = phi i64 [ 0, %.preheader553.lr.ph ], [ %indvars.iv.next869, %._crit_edge710.split.us ]
  %250 = mul nsw i64 %indvars.iv868, -50
  br label %251

251:                                              ; preds = %..loopexit552_crit_edge.us, %.lr.ph709
  %indvars.iv863 = phi i64 [ %indvars.iv.next864, %..loopexit552_crit_edge.us ], [ 0, %.lr.ph709 ]
  %252 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv863, i64 %indvars.iv868
  %253 = load i8, ptr %252, align 1, !tbaa !44
  %.not510.us = icmp eq i8 %253, 0
  br i1 %.not510.us, label %..loopexit552_crit_edge.us, label %iter.check934

iter.check934:                                    ; preds = %251
  %254 = mul nuw nsw i64 %indvars.iv863, 50
  %255 = add i64 %250, %254
  %diff.check = icmp ult i64 %255, 32
  %or.cond = select i1 %min.iters.check932, i1 true, i1 %diff.check
  br i1 %or.cond, label %.preheader551.us.preheader, label %vector.main.loop.iter.check936

vector.main.loop.iter.check936:                   ; preds = %iter.check934
  br i1 %min.iters.check935, label %vec.epilog.ph1009, label %vector.body940

vector.body940:                                   ; preds = %vector.main.loop.iter.check936, %pred.store.continue1004
  %index941 = phi i64 [ %index.next1005, %pred.store.continue1004 ], [ 0, %vector.main.loop.iter.check936 ]
  %256 = or disjoint i64 %index941, 16
  %257 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv868, i64 %index941
  %258 = getelementptr inbounds i8, ptr %257, i64 16
  %wide.load = load <16 x i8>, ptr %257, align 2, !tbaa !44
  %wide.load942 = load <16 x i8>, ptr %258, align 2, !tbaa !44
  %259 = icmp ne <16 x i8> %wide.load, zeroinitializer
  %260 = icmp ne <16 x i8> %wide.load942, zeroinitializer
  %261 = extractelement <16 x i1> %259, i64 0
  br i1 %261, label %pred.store.if, label %pred.store.continue

pred.store.if:                                    ; preds = %vector.body940
  %262 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv863, i64 %index941
  store i8 1, ptr %262, align 2, !tbaa !44
  br label %pred.store.continue

pred.store.continue:                              ; preds = %pred.store.if, %vector.body940
  %263 = extractelement <16 x i1> %259, i64 1
  br i1 %263, label %pred.store.if943, label %pred.store.continue944

pred.store.if943:                                 ; preds = %pred.store.continue
  %264 = or disjoint i64 %index941, 1
  %265 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv863, i64 %264
  store i8 1, ptr %265, align 1, !tbaa !44
  br label %pred.store.continue944

pred.store.continue944:                           ; preds = %pred.store.if943, %pred.store.continue
  %266 = extractelement <16 x i1> %259, i64 2
  br i1 %266, label %pred.store.if945, label %pred.store.continue946

pred.store.if945:                                 ; preds = %pred.store.continue944
  %267 = or disjoint i64 %index941, 2
  %268 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv863, i64 %267
  store i8 1, ptr %268, align 2, !tbaa !44
  br label %pred.store.continue946

pred.store.continue946:                           ; preds = %pred.store.if945, %pred.store.continue944
  %269 = extractelement <16 x i1> %259, i64 3
  br i1 %269, label %pred.store.if947, label %pred.store.continue948

pred.store.if947:                                 ; preds = %pred.store.continue946
  %270 = or disjoint i64 %index941, 3
  %271 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv863, i64 %270
  store i8 1, ptr %271, align 1, !tbaa !44
  br label %pred.store.continue948

pred.store.continue948:                           ; preds = %pred.store.if947, %pred.store.continue946
  %272 = extractelement <16 x i1> %259, i64 4
  br i1 %272, label %pred.store.if949, label %pred.store.continue950

pred.store.if949:                                 ; preds = %pred.store.continue948
  %273 = or disjoint i64 %index941, 4
  %274 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv863, i64 %273
  store i8 1, ptr %274, align 2, !tbaa !44
  br label %pred.store.continue950

pred.store.continue950:                           ; preds = %pred.store.if949, %pred.store.continue948
  %275 = extractelement <16 x i1> %259, i64 5
  br i1 %275, label %pred.store.if951, label %pred.store.continue952

pred.store.if951:                                 ; preds = %pred.store.continue950
  %276 = or disjoint i64 %index941, 5
  %277 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv863, i64 %276
  store i8 1, ptr %277, align 1, !tbaa !44
  br label %pred.store.continue952

pred.store.continue952:                           ; preds = %pred.store.if951, %pred.store.continue950
  %278 = extractelement <16 x i1> %259, i64 6
  br i1 %278, label %pred.store.if953, label %pred.store.continue954

pred.store.if953:                                 ; preds = %pred.store.continue952
  %279 = or disjoint i64 %index941, 6
  %280 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv863, i64 %279
  store i8 1, ptr %280, align 2, !tbaa !44
  br label %pred.store.continue954

pred.store.continue954:                           ; preds = %pred.store.if953, %pred.store.continue952
  %281 = extractelement <16 x i1> %259, i64 7
  br i1 %281, label %pred.store.if955, label %pred.store.continue956

pred.store.if955:                                 ; preds = %pred.store.continue954
  %282 = or disjoint i64 %index941, 7
  %283 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv863, i64 %282
  store i8 1, ptr %283, align 1, !tbaa !44
  br label %pred.store.continue956

pred.store.continue956:                           ; preds = %pred.store.if955, %pred.store.continue954
  %284 = extractelement <16 x i1> %259, i64 8
  br i1 %284, label %pred.store.if957, label %pred.store.continue958

pred.store.if957:                                 ; preds = %pred.store.continue956
  %285 = or disjoint i64 %index941, 8
  %286 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv863, i64 %285
  store i8 1, ptr %286, align 2, !tbaa !44
  br label %pred.store.continue958

pred.store.continue958:                           ; preds = %pred.store.if957, %pred.store.continue956
  %287 = extractelement <16 x i1> %259, i64 9
  br i1 %287, label %pred.store.if959, label %pred.store.continue960

pred.store.if959:                                 ; preds = %pred.store.continue958
  %288 = or disjoint i64 %index941, 9
  %289 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv863, i64 %288
  store i8 1, ptr %289, align 1, !tbaa !44
  br label %pred.store.continue960

pred.store.continue960:                           ; preds = %pred.store.if959, %pred.store.continue958
  %290 = extractelement <16 x i1> %259, i64 10
  br i1 %290, label %pred.store.if961, label %pred.store.continue962

pred.store.if961:                                 ; preds = %pred.store.continue960
  %291 = or disjoint i64 %index941, 10
  %292 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv863, i64 %291
  store i8 1, ptr %292, align 2, !tbaa !44
  br label %pred.store.continue962

pred.store.continue962:                           ; preds = %pred.store.if961, %pred.store.continue960
  %293 = extractelement <16 x i1> %259, i64 11
  br i1 %293, label %pred.store.if963, label %pred.store.continue964

pred.store.if963:                                 ; preds = %pred.store.continue962
  %294 = or disjoint i64 %index941, 11
  %295 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv863, i64 %294
  store i8 1, ptr %295, align 1, !tbaa !44
  br label %pred.store.continue964

pred.store.continue964:                           ; preds = %pred.store.if963, %pred.store.continue962
  %296 = extractelement <16 x i1> %259, i64 12
  br i1 %296, label %pred.store.if965, label %pred.store.continue966

pred.store.if965:                                 ; preds = %pred.store.continue964
  %297 = or disjoint i64 %index941, 12
  %298 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv863, i64 %297
  store i8 1, ptr %298, align 2, !tbaa !44
  br label %pred.store.continue966

pred.store.continue966:                           ; preds = %pred.store.if965, %pred.store.continue964
  %299 = extractelement <16 x i1> %259, i64 13
  br i1 %299, label %pred.store.if967, label %pred.store.continue968

pred.store.if967:                                 ; preds = %pred.store.continue966
  %300 = or disjoint i64 %index941, 13
  %301 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv863, i64 %300
  store i8 1, ptr %301, align 1, !tbaa !44
  br label %pred.store.continue968

pred.store.continue968:                           ; preds = %pred.store.if967, %pred.store.continue966
  %302 = extractelement <16 x i1> %259, i64 14
  br i1 %302, label %pred.store.if969, label %pred.store.continue970

pred.store.if969:                                 ; preds = %pred.store.continue968
  %303 = or disjoint i64 %index941, 14
  %304 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv863, i64 %303
  store i8 1, ptr %304, align 2, !tbaa !44
  br label %pred.store.continue970

pred.store.continue970:                           ; preds = %pred.store.if969, %pred.store.continue968
  %305 = extractelement <16 x i1> %259, i64 15
  br i1 %305, label %pred.store.if971, label %pred.store.continue972

pred.store.if971:                                 ; preds = %pred.store.continue970
  %306 = or disjoint i64 %index941, 15
  %307 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv863, i64 %306
  store i8 1, ptr %307, align 1, !tbaa !44
  br label %pred.store.continue972

pred.store.continue972:                           ; preds = %pred.store.if971, %pred.store.continue970
  %308 = extractelement <16 x i1> %260, i64 0
  br i1 %308, label %pred.store.if973, label %pred.store.continue974

pred.store.if973:                                 ; preds = %pred.store.continue972
  %309 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv863, i64 %256
  store i8 1, ptr %309, align 2, !tbaa !44
  br label %pred.store.continue974

pred.store.continue974:                           ; preds = %pred.store.if973, %pred.store.continue972
  %310 = extractelement <16 x i1> %260, i64 1
  br i1 %310, label %pred.store.if975, label %pred.store.continue976

pred.store.if975:                                 ; preds = %pred.store.continue974
  %311 = or disjoint i64 %index941, 17
  %312 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv863, i64 %311
  store i8 1, ptr %312, align 1, !tbaa !44
  br label %pred.store.continue976

pred.store.continue976:                           ; preds = %pred.store.if975, %pred.store.continue974
  %313 = extractelement <16 x i1> %260, i64 2
  br i1 %313, label %pred.store.if977, label %pred.store.continue978

pred.store.if977:                                 ; preds = %pred.store.continue976
  %314 = or disjoint i64 %index941, 18
  %315 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv863, i64 %314
  store i8 1, ptr %315, align 2, !tbaa !44
  br label %pred.store.continue978

pred.store.continue978:                           ; preds = %pred.store.if977, %pred.store.continue976
  %316 = extractelement <16 x i1> %260, i64 3
  br i1 %316, label %pred.store.if979, label %pred.store.continue980

pred.store.if979:                                 ; preds = %pred.store.continue978
  %317 = or disjoint i64 %index941, 19
  %318 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv863, i64 %317
  store i8 1, ptr %318, align 1, !tbaa !44
  br label %pred.store.continue980

pred.store.continue980:                           ; preds = %pred.store.if979, %pred.store.continue978
  %319 = extractelement <16 x i1> %260, i64 4
  br i1 %319, label %pred.store.if981, label %pred.store.continue982

pred.store.if981:                                 ; preds = %pred.store.continue980
  %320 = or disjoint i64 %index941, 20
  %321 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv863, i64 %320
  store i8 1, ptr %321, align 2, !tbaa !44
  br label %pred.store.continue982

pred.store.continue982:                           ; preds = %pred.store.if981, %pred.store.continue980
  %322 = extractelement <16 x i1> %260, i64 5
  br i1 %322, label %pred.store.if983, label %pred.store.continue984

pred.store.if983:                                 ; preds = %pred.store.continue982
  %323 = or disjoint i64 %index941, 21
  %324 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv863, i64 %323
  store i8 1, ptr %324, align 1, !tbaa !44
  br label %pred.store.continue984

pred.store.continue984:                           ; preds = %pred.store.if983, %pred.store.continue982
  %325 = extractelement <16 x i1> %260, i64 6
  br i1 %325, label %pred.store.if985, label %pred.store.continue986

pred.store.if985:                                 ; preds = %pred.store.continue984
  %326 = or disjoint i64 %index941, 22
  %327 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv863, i64 %326
  store i8 1, ptr %327, align 2, !tbaa !44
  br label %pred.store.continue986

pred.store.continue986:                           ; preds = %pred.store.if985, %pred.store.continue984
  %328 = extractelement <16 x i1> %260, i64 7
  br i1 %328, label %pred.store.if987, label %pred.store.continue988

pred.store.if987:                                 ; preds = %pred.store.continue986
  %329 = or disjoint i64 %index941, 23
  %330 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv863, i64 %329
  store i8 1, ptr %330, align 1, !tbaa !44
  br label %pred.store.continue988

pred.store.continue988:                           ; preds = %pred.store.if987, %pred.store.continue986
  %331 = extractelement <16 x i1> %260, i64 8
  br i1 %331, label %pred.store.if989, label %pred.store.continue990

pred.store.if989:                                 ; preds = %pred.store.continue988
  %332 = or disjoint i64 %index941, 24
  %333 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv863, i64 %332
  store i8 1, ptr %333, align 2, !tbaa !44
  br label %pred.store.continue990

pred.store.continue990:                           ; preds = %pred.store.if989, %pred.store.continue988
  %334 = extractelement <16 x i1> %260, i64 9
  br i1 %334, label %pred.store.if991, label %pred.store.continue992

pred.store.if991:                                 ; preds = %pred.store.continue990
  %335 = or disjoint i64 %index941, 25
  %336 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv863, i64 %335
  store i8 1, ptr %336, align 1, !tbaa !44
  br label %pred.store.continue992

pred.store.continue992:                           ; preds = %pred.store.if991, %pred.store.continue990
  %337 = extractelement <16 x i1> %260, i64 10
  br i1 %337, label %pred.store.if993, label %pred.store.continue994

pred.store.if993:                                 ; preds = %pred.store.continue992
  %338 = or disjoint i64 %index941, 26
  %339 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv863, i64 %338
  store i8 1, ptr %339, align 2, !tbaa !44
  br label %pred.store.continue994

pred.store.continue994:                           ; preds = %pred.store.if993, %pred.store.continue992
  %340 = extractelement <16 x i1> %260, i64 11
  br i1 %340, label %pred.store.if995, label %pred.store.continue996

pred.store.if995:                                 ; preds = %pred.store.continue994
  %341 = or disjoint i64 %index941, 27
  %342 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv863, i64 %341
  store i8 1, ptr %342, align 1, !tbaa !44
  br label %pred.store.continue996

pred.store.continue996:                           ; preds = %pred.store.if995, %pred.store.continue994
  %343 = extractelement <16 x i1> %260, i64 12
  br i1 %343, label %pred.store.if997, label %pred.store.continue998

pred.store.if997:                                 ; preds = %pred.store.continue996
  %344 = or disjoint i64 %index941, 28
  %345 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv863, i64 %344
  store i8 1, ptr %345, align 2, !tbaa !44
  br label %pred.store.continue998

pred.store.continue998:                           ; preds = %pred.store.if997, %pred.store.continue996
  %346 = extractelement <16 x i1> %260, i64 13
  br i1 %346, label %pred.store.if999, label %pred.store.continue1000

pred.store.if999:                                 ; preds = %pred.store.continue998
  %347 = or disjoint i64 %index941, 29
  %348 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv863, i64 %347
  store i8 1, ptr %348, align 1, !tbaa !44
  br label %pred.store.continue1000

pred.store.continue1000:                          ; preds = %pred.store.if999, %pred.store.continue998
  %349 = extractelement <16 x i1> %260, i64 14
  br i1 %349, label %pred.store.if1001, label %pred.store.continue1002

pred.store.if1001:                                ; preds = %pred.store.continue1000
  %350 = or disjoint i64 %index941, 30
  %351 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv863, i64 %350
  store i8 1, ptr %351, align 2, !tbaa !44
  br label %pred.store.continue1002

pred.store.continue1002:                          ; preds = %pred.store.if1001, %pred.store.continue1000
  %352 = extractelement <16 x i1> %260, i64 15
  br i1 %352, label %pred.store.if1003, label %pred.store.continue1004

pred.store.if1003:                                ; preds = %pred.store.continue1002
  %353 = or disjoint i64 %index941, 31
  %354 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv863, i64 %353
  store i8 1, ptr %354, align 1, !tbaa !44
  br label %pred.store.continue1004

pred.store.continue1004:                          ; preds = %pred.store.if1003, %pred.store.continue1002
  %index.next1005 = add nuw i64 %index941, 32
  %355 = icmp eq i64 %index.next1005, %n.vec939
  br i1 %355, label %middle.block931, label %vector.body940, !llvm.loop !58

middle.block931:                                  ; preds = %pred.store.continue1004
  br i1 %cmp.n1006, label %..loopexit552_crit_edge.us, label %vec.epilog.iter.check1010

vec.epilog.iter.check1010:                        ; preds = %middle.block931
  br i1 %min.epilog.iters.check1012, label %.preheader551.us.preheader, label %vec.epilog.ph1009

vec.epilog.ph1009:                                ; preds = %vector.main.loop.iter.check936, %vec.epilog.iter.check1010
  %vec.epilog.resume.val1013 = phi i64 [ %n.vec939, %vec.epilog.iter.check1010 ], [ 0, %vector.main.loop.iter.check936 ]
  br label %vec.epilog.vector.body1017

vec.epilog.vector.body1017:                       ; preds = %pred.store.continue1035, %vec.epilog.ph1009
  %index1018 = phi i64 [ %vec.epilog.resume.val1013, %vec.epilog.ph1009 ], [ %index.next1036, %pred.store.continue1035 ]
  %356 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv868, i64 %index1018
  %wide.load1019 = load <8 x i8>, ptr %356, align 2, !tbaa !44
  %357 = icmp ne <8 x i8> %wide.load1019, zeroinitializer
  %358 = extractelement <8 x i1> %357, i64 0
  br i1 %358, label %pred.store.if1020, label %pred.store.continue1021

pred.store.if1020:                                ; preds = %vec.epilog.vector.body1017
  %359 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv863, i64 %index1018
  store i8 1, ptr %359, align 2, !tbaa !44
  br label %pred.store.continue1021

pred.store.continue1021:                          ; preds = %pred.store.if1020, %vec.epilog.vector.body1017
  %360 = extractelement <8 x i1> %357, i64 1
  br i1 %360, label %pred.store.if1022, label %pred.store.continue1023

pred.store.if1022:                                ; preds = %pred.store.continue1021
  %361 = or disjoint i64 %index1018, 1
  %362 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv863, i64 %361
  store i8 1, ptr %362, align 1, !tbaa !44
  br label %pred.store.continue1023

pred.store.continue1023:                          ; preds = %pred.store.if1022, %pred.store.continue1021
  %363 = extractelement <8 x i1> %357, i64 2
  br i1 %363, label %pred.store.if1024, label %pred.store.continue1025

pred.store.if1024:                                ; preds = %pred.store.continue1023
  %364 = or disjoint i64 %index1018, 2
  %365 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv863, i64 %364
  store i8 1, ptr %365, align 2, !tbaa !44
  br label %pred.store.continue1025

pred.store.continue1025:                          ; preds = %pred.store.if1024, %pred.store.continue1023
  %366 = extractelement <8 x i1> %357, i64 3
  br i1 %366, label %pred.store.if1026, label %pred.store.continue1027

pred.store.if1026:                                ; preds = %pred.store.continue1025
  %367 = or disjoint i64 %index1018, 3
  %368 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv863, i64 %367
  store i8 1, ptr %368, align 1, !tbaa !44
  br label %pred.store.continue1027

pred.store.continue1027:                          ; preds = %pred.store.if1026, %pred.store.continue1025
  %369 = extractelement <8 x i1> %357, i64 4
  br i1 %369, label %pred.store.if1028, label %pred.store.continue1029

pred.store.if1028:                                ; preds = %pred.store.continue1027
  %370 = or disjoint i64 %index1018, 4
  %371 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv863, i64 %370
  store i8 1, ptr %371, align 2, !tbaa !44
  br label %pred.store.continue1029

pred.store.continue1029:                          ; preds = %pred.store.if1028, %pred.store.continue1027
  %372 = extractelement <8 x i1> %357, i64 5
  br i1 %372, label %pred.store.if1030, label %pred.store.continue1031

pred.store.if1030:                                ; preds = %pred.store.continue1029
  %373 = or disjoint i64 %index1018, 5
  %374 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv863, i64 %373
  store i8 1, ptr %374, align 1, !tbaa !44
  br label %pred.store.continue1031

pred.store.continue1031:                          ; preds = %pred.store.if1030, %pred.store.continue1029
  %375 = extractelement <8 x i1> %357, i64 6
  br i1 %375, label %pred.store.if1032, label %pred.store.continue1033

pred.store.if1032:                                ; preds = %pred.store.continue1031
  %376 = or disjoint i64 %index1018, 6
  %377 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv863, i64 %376
  store i8 1, ptr %377, align 2, !tbaa !44
  br label %pred.store.continue1033

pred.store.continue1033:                          ; preds = %pred.store.if1032, %pred.store.continue1031
  %378 = extractelement <8 x i1> %357, i64 7
  br i1 %378, label %pred.store.if1034, label %pred.store.continue1035

pred.store.if1034:                                ; preds = %pred.store.continue1033
  %379 = or disjoint i64 %index1018, 7
  %380 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv863, i64 %379
  store i8 1, ptr %380, align 1, !tbaa !44
  br label %pred.store.continue1035

pred.store.continue1035:                          ; preds = %pred.store.if1034, %pred.store.continue1033
  %index.next1036 = add nuw i64 %index1018, 8
  %381 = icmp eq i64 %index.next1036, %n.vec1015
  br i1 %381, label %vec.epilog.middle.block1007, label %vec.epilog.vector.body1017, !llvm.loop !59

vec.epilog.middle.block1007:                      ; preds = %pred.store.continue1035
  br i1 %cmp.n1037, label %..loopexit552_crit_edge.us, label %.preheader551.us.preheader

.preheader551.us.preheader:                       ; preds = %vec.epilog.middle.block1007, %iter.check934, %vec.epilog.iter.check1010
  %indvars.iv858.ph = phi i64 [ 0, %iter.check934 ], [ %n.vec939, %vec.epilog.iter.check1010 ], [ %n.vec1015, %vec.epilog.middle.block1007 ]
  br i1 %lcmp.mod1153.not, label %.preheader551.us.prol.loopexit, label %.preheader551.us.prol

.preheader551.us.prol:                            ; preds = %.preheader551.us.preheader
  %382 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv868, i64 %indvars.iv858.ph
  %383 = load i8, ptr %382, align 2, !tbaa !44
  %.not511.us.prol = icmp eq i8 %383, 0
  br i1 %.not511.us.prol, label %.preheader551.us.prol.loopexit.unr-lcssa, label %384

384:                                              ; preds = %.preheader551.us.prol
  %385 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv863, i64 %indvars.iv858.ph
  store i8 1, ptr %385, align 2, !tbaa !44
  br label %.preheader551.us.prol.loopexit.unr-lcssa

.preheader551.us.prol.loopexit.unr-lcssa:         ; preds = %384, %.preheader551.us.prol
  %indvars.iv.next859.prol = or disjoint i64 %indvars.iv858.ph, 1
  br label %.preheader551.us.prol.loopexit

.preheader551.us.prol.loopexit:                   ; preds = %.preheader551.us.prol.loopexit.unr-lcssa, %.preheader551.us.preheader
  %indvars.iv858.unr = phi i64 [ %indvars.iv858.ph, %.preheader551.us.preheader ], [ %indvars.iv.next859.prol, %.preheader551.us.prol.loopexit.unr-lcssa ]
  %386 = icmp eq i64 %indvars.iv858.ph, %241
  br i1 %386, label %..loopexit552_crit_edge.us, label %.preheader551.us

.preheader551.us:                                 ; preds = %.preheader551.us.prol.loopexit, %395
  %indvars.iv858 = phi i64 [ %indvars.iv.next859.1, %395 ], [ %indvars.iv858.unr, %.preheader551.us.prol.loopexit ]
  %387 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv868, i64 %indvars.iv858
  %388 = load i8, ptr %387, align 1, !tbaa !44
  %.not511.us = icmp eq i8 %388, 0
  br i1 %.not511.us, label %.preheader551.us.1, label %389

389:                                              ; preds = %.preheader551.us
  %390 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv863, i64 %indvars.iv858
  store i8 1, ptr %390, align 1, !tbaa !44
  br label %.preheader551.us.1

.preheader551.us.1:                               ; preds = %389, %.preheader551.us
  %indvars.iv.next859 = add nuw nsw i64 %indvars.iv858, 1
  %391 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv868, i64 %indvars.iv.next859
  %392 = load i8, ptr %391, align 1, !tbaa !44
  %.not511.us.1 = icmp eq i8 %392, 0
  br i1 %.not511.us.1, label %395, label %393

393:                                              ; preds = %.preheader551.us.1
  %394 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv863, i64 %indvars.iv.next859
  store i8 1, ptr %394, align 1, !tbaa !44
  br label %395

395:                                              ; preds = %393, %.preheader551.us.1
  %indvars.iv.next859.1 = add nuw nsw i64 %indvars.iv858, 2
  %exitcond862.not.1 = icmp eq i64 %indvars.iv.next859.1, %wide.trip.count871
  br i1 %exitcond862.not.1, label %..loopexit552_crit_edge.us, label %.preheader551.us, !llvm.loop !60

..loopexit552_crit_edge.us:                       ; preds = %.preheader551.us.prol.loopexit, %395, %middle.block931, %vec.epilog.middle.block1007, %251
  %indvars.iv.next864 = add nuw nsw i64 %indvars.iv863, 1
  %exitcond867.not = icmp eq i64 %indvars.iv.next864, %wide.trip.count871
  br i1 %exitcond867.not, label %._crit_edge710.split.us, label %251, !llvm.loop !61

.preheader550:                                    ; preds = %._crit_edge710.split.us
  br i1 %240, label %.lr.ph733, label %.preheader541

.lr.ph733:                                        ; preds = %.preheader550
  %wide.trip.count891 = zext nneg i32 %239 to i64
  br label %397

._crit_edge710.split.us:                          ; preds = %..loopexit552_crit_edge.us
  %indvars.iv.next869 = add nuw nsw i64 %indvars.iv868, 1
  %exitcond872.not = icmp eq i64 %indvars.iv.next869, %wide.trip.count871
  br i1 %exitcond872.not, label %.preheader550, label %.lr.ph709, !llvm.loop !62

.preheader545:                                    ; preds = %.loopexit549
  br i1 %240, label %.preheader544.lr.ph, label %.preheader541

.preheader544.lr.ph:                              ; preds = %.preheader545
  %wide.trip.count906 = zext nneg i32 %239 to i64
  %min.iters.check1041 = icmp ult i32 %239, 8
  %min.iters.check1044 = icmp ult i32 %239, 32
  %n.vec1048 = and i64 %wide.trip.count871, 2147483616
  %cmp.n1118 = icmp eq i64 %n.vec1048, %wide.trip.count871
  %n.vec.remaining1123 = and i64 %wide.trip.count871, 24
  %min.epilog.iters.check1124 = icmp eq i64 %n.vec.remaining1123, 0
  %n.vec1127 = and i64 %wide.trip.count871, 2147483640
  %cmp.n1149 = icmp eq i64 %n.vec1127, %wide.trip.count871
  %xtraiter1159 = and i64 %wide.trip.count871, 1
  %lcmp.mod1160.not = icmp eq i64 %xtraiter1159, 0
  %396 = add nsw i64 %wide.trip.count871, -1
  br label %.lr.ph737

397:                                              ; preds = %.lr.ph733, %.loopexit549
  %indvars.iv888 = phi i64 [ 0, %.lr.ph733 ], [ %indvars.iv.next889, %.loopexit549 ]
  %398 = getelementptr inbounds [50 x i32], ptr @lnum_either_ty, i64 0, i64 %indvars.iv888
  %399 = load i32, ptr %398, align 4, !tbaa !5
  %400 = icmp slt i32 %399, 2
  br i1 %400, label %.loopexit549, label %.lr.ph720.split.us.preheader

.lr.ph720.split.us.preheader:                     ; preds = %397
  %wide.trip.count876 = zext nneg i32 %399 to i64
  %xtraiter1154 = and i64 %wide.trip.count876, 3
  %401 = icmp ult i32 %399, 4
  %unroll_iter1157 = and i64 %wide.trip.count876, 2147483644
  %lcmp.mod1156.not = icmp eq i64 %xtraiter1154, 0
  br label %.lr.ph720.split.us

.lr.ph720.split.us:                               ; preds = %.lr.ph720.split.us.preheader, %.thread.us
  %indvars.iv883 = phi i64 [ 0, %.lr.ph720.split.us.preheader ], [ %indvars.iv.next884, %.thread.us ]
  %402 = icmp eq i64 %indvars.iv883, %indvars.iv888
  br i1 %402, label %.thread.us, label %.preheader546.us

403:                                              ; preds = %.preheader546.us
  %indvars.iv.next874 = add nuw nsw i64 %indvars.iv873, 1
  %exitcond877.not = icmp eq i64 %indvars.iv.next874, %wide.trip.count876
  br i1 %exitcond877.not, label %.lr.ph718.us.preheader, label %.preheader546.us, !llvm.loop !63

.lr.ph718.us:                                     ; preds = %.lr.ph718.us.preheader, %.lr.ph718.us
  %indvars.iv878 = phi i64 [ %indvars.iv.next879.3, %.lr.ph718.us ], [ 0, %.lr.ph718.us.preheader ]
  %niter1158 = phi i64 [ %niter1158.next.3, %.lr.ph718.us ], [ 0, %.lr.ph718.us.preheader ]
  %404 = getelementptr inbounds [50 x [50 x i32]], ptr @leither_ty, i64 0, i64 %indvars.iv888, i64 %indvars.iv878
  %405 = load i32, ptr %404, align 8, !tbaa !5
  %406 = sext i32 %405 to i64
  %407 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %406, i64 %indvars.iv888
  store i8 1, ptr %407, align 1, !tbaa !44
  %indvars.iv.next879 = or disjoint i64 %indvars.iv878, 1
  %408 = getelementptr inbounds [50 x [50 x i32]], ptr @leither_ty, i64 0, i64 %indvars.iv888, i64 %indvars.iv.next879
  %409 = load i32, ptr %408, align 4, !tbaa !5
  %410 = sext i32 %409 to i64
  %411 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %410, i64 %indvars.iv888
  store i8 1, ptr %411, align 1, !tbaa !44
  %indvars.iv.next879.1 = or disjoint i64 %indvars.iv878, 2
  %412 = getelementptr inbounds [50 x [50 x i32]], ptr @leither_ty, i64 0, i64 %indvars.iv888, i64 %indvars.iv.next879.1
  %413 = load i32, ptr %412, align 8, !tbaa !5
  %414 = sext i32 %413 to i64
  %415 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %414, i64 %indvars.iv888
  store i8 1, ptr %415, align 1, !tbaa !44
  %indvars.iv.next879.2 = or disjoint i64 %indvars.iv878, 3
  %416 = getelementptr inbounds [50 x [50 x i32]], ptr @leither_ty, i64 0, i64 %indvars.iv888, i64 %indvars.iv.next879.2
  %417 = load i32, ptr %416, align 4, !tbaa !5
  %418 = sext i32 %417 to i64
  %419 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %418, i64 %indvars.iv888
  store i8 1, ptr %419, align 1, !tbaa !44
  %indvars.iv.next879.3 = add nuw nsw i64 %indvars.iv878, 4
  %niter1158.next.3 = add i64 %niter1158, 4
  %niter1158.ncmp.3 = icmp eq i64 %niter1158.next.3, %unroll_iter1157
  br i1 %niter1158.ncmp.3, label %.thread.us.loopexit.unr-lcssa, label %.lr.ph718.us, !llvm.loop !64

.preheader546.us:                                 ; preds = %.lr.ph720.split.us, %403
  %indvars.iv873 = phi i64 [ %indvars.iv.next874, %403 ], [ 0, %.lr.ph720.split.us ]
  %420 = getelementptr inbounds [50 x [50 x i32]], ptr @leither_ty, i64 0, i64 %indvars.iv888, i64 %indvars.iv873
  %421 = load i32, ptr %420, align 4, !tbaa !5
  %422 = sext i32 %421 to i64
  %423 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %422, i64 %indvars.iv883
  %424 = load i8, ptr %423, align 1, !tbaa !44
  %.not509.us = icmp eq i8 %424, 0
  br i1 %.not509.us, label %.thread.us, label %403

.thread.us.loopexit.unr-lcssa:                    ; preds = %.lr.ph718.us, %.lr.ph718.us.preheader
  %indvars.iv878.unr = phi i64 [ 0, %.lr.ph718.us.preheader ], [ %indvars.iv.next879.3, %.lr.ph718.us ]
  br i1 %lcmp.mod1156.not, label %.thread.us, label %.lr.ph718.us.epil

.lr.ph718.us.epil:                                ; preds = %.thread.us.loopexit.unr-lcssa, %.lr.ph718.us.epil
  %indvars.iv878.epil = phi i64 [ %indvars.iv.next879.epil, %.lr.ph718.us.epil ], [ %indvars.iv878.unr, %.thread.us.loopexit.unr-lcssa ]
  %epil.iter1155 = phi i64 [ %epil.iter1155.next, %.lr.ph718.us.epil ], [ 0, %.thread.us.loopexit.unr-lcssa ]
  %425 = getelementptr inbounds [50 x [50 x i32]], ptr @leither_ty, i64 0, i64 %indvars.iv888, i64 %indvars.iv878.epil
  %426 = load i32, ptr %425, align 4, !tbaa !5
  %427 = sext i32 %426 to i64
  %428 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %427, i64 %indvars.iv888
  store i8 1, ptr %428, align 1, !tbaa !44
  %indvars.iv.next879.epil = add nuw nsw i64 %indvars.iv878.epil, 1
  %epil.iter1155.next = add i64 %epil.iter1155, 1
  %epil.iter1155.cmp.not = icmp eq i64 %epil.iter1155.next, %xtraiter1154
  br i1 %epil.iter1155.cmp.not, label %.thread.us, label %.lr.ph718.us.epil, !llvm.loop !65

.thread.us:                                       ; preds = %.preheader546.us, %.thread.us.loopexit.unr-lcssa, %.lr.ph718.us.epil, %.lr.ph720.split.us
  %indvars.iv.next884 = add nuw nsw i64 %indvars.iv883, 1
  %exitcond887.not = icmp eq i64 %indvars.iv.next884, %wide.trip.count891
  br i1 %exitcond887.not, label %.loopexit549, label %.lr.ph720.split.us, !llvm.loop !66

.lr.ph718.us.preheader:                           ; preds = %403
  %429 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv888, i64 %indvars.iv883
  store i8 1, ptr %429, align 1, !tbaa !44
  br i1 %401, label %.thread.us.loopexit.unr-lcssa, label %.lr.ph718.us

.loopexit549:                                     ; preds = %.thread.us, %397
  %indvars.iv.next889 = add nuw nsw i64 %indvars.iv888, 1
  %exitcond892.not = icmp eq i64 %indvars.iv.next889, %wide.trip.count891
  br i1 %exitcond892.not, label %.preheader545, label %397, !llvm.loop !67

.lr.ph737:                                        ; preds = %._crit_edge738.split.us, %.preheader544.lr.ph
  %indvars.iv903 = phi i64 [ 0, %.preheader544.lr.ph ], [ %indvars.iv.next904, %._crit_edge738.split.us ]
  %430 = mul nsw i64 %indvars.iv903, -50
  br label %431

431:                                              ; preds = %..loopexit543_crit_edge.us, %.lr.ph737
  %indvars.iv898 = phi i64 [ %indvars.iv.next899, %..loopexit543_crit_edge.us ], [ 0, %.lr.ph737 ]
  %432 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv898, i64 %indvars.iv903
  %433 = load i8, ptr %432, align 1, !tbaa !44
  %.not507.us = icmp eq i8 %433, 0
  br i1 %.not507.us, label %..loopexit543_crit_edge.us, label %iter.check1043

iter.check1043:                                   ; preds = %431
  %434 = mul nuw nsw i64 %indvars.iv898, 50
  %435 = add i64 %430, %434
  %diff.check1039 = icmp ult i64 %435, 32
  %or.cond1150 = select i1 %min.iters.check1041, i1 true, i1 %diff.check1039
  br i1 %or.cond1150, label %.preheader542.us.preheader, label %vector.main.loop.iter.check1045

vector.main.loop.iter.check1045:                  ; preds = %iter.check1043
  br i1 %min.iters.check1044, label %vec.epilog.ph1121, label %vector.body1049

vector.body1049:                                  ; preds = %vector.main.loop.iter.check1045, %pred.store.continue1116
  %index1050 = phi i64 [ %index.next1117, %pred.store.continue1116 ], [ 0, %vector.main.loop.iter.check1045 ]
  %436 = or disjoint i64 %index1050, 16
  %437 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv903, i64 %index1050
  %438 = getelementptr inbounds i8, ptr %437, i64 16
  %wide.load1051 = load <16 x i8>, ptr %437, align 2, !tbaa !44
  %wide.load1052 = load <16 x i8>, ptr %438, align 2, !tbaa !44
  %439 = icmp ne <16 x i8> %wide.load1051, zeroinitializer
  %440 = icmp ne <16 x i8> %wide.load1052, zeroinitializer
  %441 = extractelement <16 x i1> %439, i64 0
  br i1 %441, label %pred.store.if1053, label %pred.store.continue1054

pred.store.if1053:                                ; preds = %vector.body1049
  %442 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv898, i64 %index1050
  store i8 1, ptr %442, align 2, !tbaa !44
  br label %pred.store.continue1054

pred.store.continue1054:                          ; preds = %pred.store.if1053, %vector.body1049
  %443 = extractelement <16 x i1> %439, i64 1
  br i1 %443, label %pred.store.if1055, label %pred.store.continue1056

pred.store.if1055:                                ; preds = %pred.store.continue1054
  %444 = or disjoint i64 %index1050, 1
  %445 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv898, i64 %444
  store i8 1, ptr %445, align 1, !tbaa !44
  br label %pred.store.continue1056

pred.store.continue1056:                          ; preds = %pred.store.if1055, %pred.store.continue1054
  %446 = extractelement <16 x i1> %439, i64 2
  br i1 %446, label %pred.store.if1057, label %pred.store.continue1058

pred.store.if1057:                                ; preds = %pred.store.continue1056
  %447 = or disjoint i64 %index1050, 2
  %448 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv898, i64 %447
  store i8 1, ptr %448, align 2, !tbaa !44
  br label %pred.store.continue1058

pred.store.continue1058:                          ; preds = %pred.store.if1057, %pred.store.continue1056
  %449 = extractelement <16 x i1> %439, i64 3
  br i1 %449, label %pred.store.if1059, label %pred.store.continue1060

pred.store.if1059:                                ; preds = %pred.store.continue1058
  %450 = or disjoint i64 %index1050, 3
  %451 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv898, i64 %450
  store i8 1, ptr %451, align 1, !tbaa !44
  br label %pred.store.continue1060

pred.store.continue1060:                          ; preds = %pred.store.if1059, %pred.store.continue1058
  %452 = extractelement <16 x i1> %439, i64 4
  br i1 %452, label %pred.store.if1061, label %pred.store.continue1062

pred.store.if1061:                                ; preds = %pred.store.continue1060
  %453 = or disjoint i64 %index1050, 4
  %454 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv898, i64 %453
  store i8 1, ptr %454, align 2, !tbaa !44
  br label %pred.store.continue1062

pred.store.continue1062:                          ; preds = %pred.store.if1061, %pred.store.continue1060
  %455 = extractelement <16 x i1> %439, i64 5
  br i1 %455, label %pred.store.if1063, label %pred.store.continue1064

pred.store.if1063:                                ; preds = %pred.store.continue1062
  %456 = or disjoint i64 %index1050, 5
  %457 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv898, i64 %456
  store i8 1, ptr %457, align 1, !tbaa !44
  br label %pred.store.continue1064

pred.store.continue1064:                          ; preds = %pred.store.if1063, %pred.store.continue1062
  %458 = extractelement <16 x i1> %439, i64 6
  br i1 %458, label %pred.store.if1065, label %pred.store.continue1066

pred.store.if1065:                                ; preds = %pred.store.continue1064
  %459 = or disjoint i64 %index1050, 6
  %460 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv898, i64 %459
  store i8 1, ptr %460, align 2, !tbaa !44
  br label %pred.store.continue1066

pred.store.continue1066:                          ; preds = %pred.store.if1065, %pred.store.continue1064
  %461 = extractelement <16 x i1> %439, i64 7
  br i1 %461, label %pred.store.if1067, label %pred.store.continue1068

pred.store.if1067:                                ; preds = %pred.store.continue1066
  %462 = or disjoint i64 %index1050, 7
  %463 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv898, i64 %462
  store i8 1, ptr %463, align 1, !tbaa !44
  br label %pred.store.continue1068

pred.store.continue1068:                          ; preds = %pred.store.if1067, %pred.store.continue1066
  %464 = extractelement <16 x i1> %439, i64 8
  br i1 %464, label %pred.store.if1069, label %pred.store.continue1070

pred.store.if1069:                                ; preds = %pred.store.continue1068
  %465 = or disjoint i64 %index1050, 8
  %466 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv898, i64 %465
  store i8 1, ptr %466, align 2, !tbaa !44
  br label %pred.store.continue1070

pred.store.continue1070:                          ; preds = %pred.store.if1069, %pred.store.continue1068
  %467 = extractelement <16 x i1> %439, i64 9
  br i1 %467, label %pred.store.if1071, label %pred.store.continue1072

pred.store.if1071:                                ; preds = %pred.store.continue1070
  %468 = or disjoint i64 %index1050, 9
  %469 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv898, i64 %468
  store i8 1, ptr %469, align 1, !tbaa !44
  br label %pred.store.continue1072

pred.store.continue1072:                          ; preds = %pred.store.if1071, %pred.store.continue1070
  %470 = extractelement <16 x i1> %439, i64 10
  br i1 %470, label %pred.store.if1073, label %pred.store.continue1074

pred.store.if1073:                                ; preds = %pred.store.continue1072
  %471 = or disjoint i64 %index1050, 10
  %472 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv898, i64 %471
  store i8 1, ptr %472, align 2, !tbaa !44
  br label %pred.store.continue1074

pred.store.continue1074:                          ; preds = %pred.store.if1073, %pred.store.continue1072
  %473 = extractelement <16 x i1> %439, i64 11
  br i1 %473, label %pred.store.if1075, label %pred.store.continue1076

pred.store.if1075:                                ; preds = %pred.store.continue1074
  %474 = or disjoint i64 %index1050, 11
  %475 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv898, i64 %474
  store i8 1, ptr %475, align 1, !tbaa !44
  br label %pred.store.continue1076

pred.store.continue1076:                          ; preds = %pred.store.if1075, %pred.store.continue1074
  %476 = extractelement <16 x i1> %439, i64 12
  br i1 %476, label %pred.store.if1077, label %pred.store.continue1078

pred.store.if1077:                                ; preds = %pred.store.continue1076
  %477 = or disjoint i64 %index1050, 12
  %478 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv898, i64 %477
  store i8 1, ptr %478, align 2, !tbaa !44
  br label %pred.store.continue1078

pred.store.continue1078:                          ; preds = %pred.store.if1077, %pred.store.continue1076
  %479 = extractelement <16 x i1> %439, i64 13
  br i1 %479, label %pred.store.if1079, label %pred.store.continue1080

pred.store.if1079:                                ; preds = %pred.store.continue1078
  %480 = or disjoint i64 %index1050, 13
  %481 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv898, i64 %480
  store i8 1, ptr %481, align 1, !tbaa !44
  br label %pred.store.continue1080

pred.store.continue1080:                          ; preds = %pred.store.if1079, %pred.store.continue1078
  %482 = extractelement <16 x i1> %439, i64 14
  br i1 %482, label %pred.store.if1081, label %pred.store.continue1082

pred.store.if1081:                                ; preds = %pred.store.continue1080
  %483 = or disjoint i64 %index1050, 14
  %484 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv898, i64 %483
  store i8 1, ptr %484, align 2, !tbaa !44
  br label %pred.store.continue1082

pred.store.continue1082:                          ; preds = %pred.store.if1081, %pred.store.continue1080
  %485 = extractelement <16 x i1> %439, i64 15
  br i1 %485, label %pred.store.if1083, label %pred.store.continue1084

pred.store.if1083:                                ; preds = %pred.store.continue1082
  %486 = or disjoint i64 %index1050, 15
  %487 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv898, i64 %486
  store i8 1, ptr %487, align 1, !tbaa !44
  br label %pred.store.continue1084

pred.store.continue1084:                          ; preds = %pred.store.if1083, %pred.store.continue1082
  %488 = extractelement <16 x i1> %440, i64 0
  br i1 %488, label %pred.store.if1085, label %pred.store.continue1086

pred.store.if1085:                                ; preds = %pred.store.continue1084
  %489 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv898, i64 %436
  store i8 1, ptr %489, align 2, !tbaa !44
  br label %pred.store.continue1086

pred.store.continue1086:                          ; preds = %pred.store.if1085, %pred.store.continue1084
  %490 = extractelement <16 x i1> %440, i64 1
  br i1 %490, label %pred.store.if1087, label %pred.store.continue1088

pred.store.if1087:                                ; preds = %pred.store.continue1086
  %491 = or disjoint i64 %index1050, 17
  %492 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv898, i64 %491
  store i8 1, ptr %492, align 1, !tbaa !44
  br label %pred.store.continue1088

pred.store.continue1088:                          ; preds = %pred.store.if1087, %pred.store.continue1086
  %493 = extractelement <16 x i1> %440, i64 2
  br i1 %493, label %pred.store.if1089, label %pred.store.continue1090

pred.store.if1089:                                ; preds = %pred.store.continue1088
  %494 = or disjoint i64 %index1050, 18
  %495 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv898, i64 %494
  store i8 1, ptr %495, align 2, !tbaa !44
  br label %pred.store.continue1090

pred.store.continue1090:                          ; preds = %pred.store.if1089, %pred.store.continue1088
  %496 = extractelement <16 x i1> %440, i64 3
  br i1 %496, label %pred.store.if1091, label %pred.store.continue1092

pred.store.if1091:                                ; preds = %pred.store.continue1090
  %497 = or disjoint i64 %index1050, 19
  %498 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv898, i64 %497
  store i8 1, ptr %498, align 1, !tbaa !44
  br label %pred.store.continue1092

pred.store.continue1092:                          ; preds = %pred.store.if1091, %pred.store.continue1090
  %499 = extractelement <16 x i1> %440, i64 4
  br i1 %499, label %pred.store.if1093, label %pred.store.continue1094

pred.store.if1093:                                ; preds = %pred.store.continue1092
  %500 = or disjoint i64 %index1050, 20
  %501 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv898, i64 %500
  store i8 1, ptr %501, align 2, !tbaa !44
  br label %pred.store.continue1094

pred.store.continue1094:                          ; preds = %pred.store.if1093, %pred.store.continue1092
  %502 = extractelement <16 x i1> %440, i64 5
  br i1 %502, label %pred.store.if1095, label %pred.store.continue1096

pred.store.if1095:                                ; preds = %pred.store.continue1094
  %503 = or disjoint i64 %index1050, 21
  %504 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv898, i64 %503
  store i8 1, ptr %504, align 1, !tbaa !44
  br label %pred.store.continue1096

pred.store.continue1096:                          ; preds = %pred.store.if1095, %pred.store.continue1094
  %505 = extractelement <16 x i1> %440, i64 6
  br i1 %505, label %pred.store.if1097, label %pred.store.continue1098

pred.store.if1097:                                ; preds = %pred.store.continue1096
  %506 = or disjoint i64 %index1050, 22
  %507 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv898, i64 %506
  store i8 1, ptr %507, align 2, !tbaa !44
  br label %pred.store.continue1098

pred.store.continue1098:                          ; preds = %pred.store.if1097, %pred.store.continue1096
  %508 = extractelement <16 x i1> %440, i64 7
  br i1 %508, label %pred.store.if1099, label %pred.store.continue1100

pred.store.if1099:                                ; preds = %pred.store.continue1098
  %509 = or disjoint i64 %index1050, 23
  %510 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv898, i64 %509
  store i8 1, ptr %510, align 1, !tbaa !44
  br label %pred.store.continue1100

pred.store.continue1100:                          ; preds = %pred.store.if1099, %pred.store.continue1098
  %511 = extractelement <16 x i1> %440, i64 8
  br i1 %511, label %pred.store.if1101, label %pred.store.continue1102

pred.store.if1101:                                ; preds = %pred.store.continue1100
  %512 = or disjoint i64 %index1050, 24
  %513 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv898, i64 %512
  store i8 1, ptr %513, align 2, !tbaa !44
  br label %pred.store.continue1102

pred.store.continue1102:                          ; preds = %pred.store.if1101, %pred.store.continue1100
  %514 = extractelement <16 x i1> %440, i64 9
  br i1 %514, label %pred.store.if1103, label %pred.store.continue1104

pred.store.if1103:                                ; preds = %pred.store.continue1102
  %515 = or disjoint i64 %index1050, 25
  %516 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv898, i64 %515
  store i8 1, ptr %516, align 1, !tbaa !44
  br label %pred.store.continue1104

pred.store.continue1104:                          ; preds = %pred.store.if1103, %pred.store.continue1102
  %517 = extractelement <16 x i1> %440, i64 10
  br i1 %517, label %pred.store.if1105, label %pred.store.continue1106

pred.store.if1105:                                ; preds = %pred.store.continue1104
  %518 = or disjoint i64 %index1050, 26
  %519 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv898, i64 %518
  store i8 1, ptr %519, align 2, !tbaa !44
  br label %pred.store.continue1106

pred.store.continue1106:                          ; preds = %pred.store.if1105, %pred.store.continue1104
  %520 = extractelement <16 x i1> %440, i64 11
  br i1 %520, label %pred.store.if1107, label %pred.store.continue1108

pred.store.if1107:                                ; preds = %pred.store.continue1106
  %521 = or disjoint i64 %index1050, 27
  %522 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv898, i64 %521
  store i8 1, ptr %522, align 1, !tbaa !44
  br label %pred.store.continue1108

pred.store.continue1108:                          ; preds = %pred.store.if1107, %pred.store.continue1106
  %523 = extractelement <16 x i1> %440, i64 12
  br i1 %523, label %pred.store.if1109, label %pred.store.continue1110

pred.store.if1109:                                ; preds = %pred.store.continue1108
  %524 = or disjoint i64 %index1050, 28
  %525 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv898, i64 %524
  store i8 1, ptr %525, align 2, !tbaa !44
  br label %pred.store.continue1110

pred.store.continue1110:                          ; preds = %pred.store.if1109, %pred.store.continue1108
  %526 = extractelement <16 x i1> %440, i64 13
  br i1 %526, label %pred.store.if1111, label %pred.store.continue1112

pred.store.if1111:                                ; preds = %pred.store.continue1110
  %527 = or disjoint i64 %index1050, 29
  %528 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv898, i64 %527
  store i8 1, ptr %528, align 1, !tbaa !44
  br label %pred.store.continue1112

pred.store.continue1112:                          ; preds = %pred.store.if1111, %pred.store.continue1110
  %529 = extractelement <16 x i1> %440, i64 14
  br i1 %529, label %pred.store.if1113, label %pred.store.continue1114

pred.store.if1113:                                ; preds = %pred.store.continue1112
  %530 = or disjoint i64 %index1050, 30
  %531 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv898, i64 %530
  store i8 1, ptr %531, align 2, !tbaa !44
  br label %pred.store.continue1114

pred.store.continue1114:                          ; preds = %pred.store.if1113, %pred.store.continue1112
  %532 = extractelement <16 x i1> %440, i64 15
  br i1 %532, label %pred.store.if1115, label %pred.store.continue1116

pred.store.if1115:                                ; preds = %pred.store.continue1114
  %533 = or disjoint i64 %index1050, 31
  %534 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv898, i64 %533
  store i8 1, ptr %534, align 1, !tbaa !44
  br label %pred.store.continue1116

pred.store.continue1116:                          ; preds = %pred.store.if1115, %pred.store.continue1114
  %index.next1117 = add nuw i64 %index1050, 32
  %535 = icmp eq i64 %index.next1117, %n.vec1048
  br i1 %535, label %middle.block1040, label %vector.body1049, !llvm.loop !68

middle.block1040:                                 ; preds = %pred.store.continue1116
  br i1 %cmp.n1118, label %..loopexit543_crit_edge.us, label %vec.epilog.iter.check1122

vec.epilog.iter.check1122:                        ; preds = %middle.block1040
  br i1 %min.epilog.iters.check1124, label %.preheader542.us.preheader, label %vec.epilog.ph1121

vec.epilog.ph1121:                                ; preds = %vector.main.loop.iter.check1045, %vec.epilog.iter.check1122
  %vec.epilog.resume.val1125 = phi i64 [ %n.vec1048, %vec.epilog.iter.check1122 ], [ 0, %vector.main.loop.iter.check1045 ]
  br label %vec.epilog.vector.body1129

vec.epilog.vector.body1129:                       ; preds = %pred.store.continue1147, %vec.epilog.ph1121
  %index1130 = phi i64 [ %vec.epilog.resume.val1125, %vec.epilog.ph1121 ], [ %index.next1148, %pred.store.continue1147 ]
  %536 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv903, i64 %index1130
  %wide.load1131 = load <8 x i8>, ptr %536, align 2, !tbaa !44
  %537 = icmp ne <8 x i8> %wide.load1131, zeroinitializer
  %538 = extractelement <8 x i1> %537, i64 0
  br i1 %538, label %pred.store.if1132, label %pred.store.continue1133

pred.store.if1132:                                ; preds = %vec.epilog.vector.body1129
  %539 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv898, i64 %index1130
  store i8 1, ptr %539, align 2, !tbaa !44
  br label %pred.store.continue1133

pred.store.continue1133:                          ; preds = %pred.store.if1132, %vec.epilog.vector.body1129
  %540 = extractelement <8 x i1> %537, i64 1
  br i1 %540, label %pred.store.if1134, label %pred.store.continue1135

pred.store.if1134:                                ; preds = %pred.store.continue1133
  %541 = or disjoint i64 %index1130, 1
  %542 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv898, i64 %541
  store i8 1, ptr %542, align 1, !tbaa !44
  br label %pred.store.continue1135

pred.store.continue1135:                          ; preds = %pred.store.if1134, %pred.store.continue1133
  %543 = extractelement <8 x i1> %537, i64 2
  br i1 %543, label %pred.store.if1136, label %pred.store.continue1137

pred.store.if1136:                                ; preds = %pred.store.continue1135
  %544 = or disjoint i64 %index1130, 2
  %545 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv898, i64 %544
  store i8 1, ptr %545, align 2, !tbaa !44
  br label %pred.store.continue1137

pred.store.continue1137:                          ; preds = %pred.store.if1136, %pred.store.continue1135
  %546 = extractelement <8 x i1> %537, i64 3
  br i1 %546, label %pred.store.if1138, label %pred.store.continue1139

pred.store.if1138:                                ; preds = %pred.store.continue1137
  %547 = or disjoint i64 %index1130, 3
  %548 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv898, i64 %547
  store i8 1, ptr %548, align 1, !tbaa !44
  br label %pred.store.continue1139

pred.store.continue1139:                          ; preds = %pred.store.if1138, %pred.store.continue1137
  %549 = extractelement <8 x i1> %537, i64 4
  br i1 %549, label %pred.store.if1140, label %pred.store.continue1141

pred.store.if1140:                                ; preds = %pred.store.continue1139
  %550 = or disjoint i64 %index1130, 4
  %551 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv898, i64 %550
  store i8 1, ptr %551, align 2, !tbaa !44
  br label %pred.store.continue1141

pred.store.continue1141:                          ; preds = %pred.store.if1140, %pred.store.continue1139
  %552 = extractelement <8 x i1> %537, i64 5
  br i1 %552, label %pred.store.if1142, label %pred.store.continue1143

pred.store.if1142:                                ; preds = %pred.store.continue1141
  %553 = or disjoint i64 %index1130, 5
  %554 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv898, i64 %553
  store i8 1, ptr %554, align 1, !tbaa !44
  br label %pred.store.continue1143

pred.store.continue1143:                          ; preds = %pred.store.if1142, %pred.store.continue1141
  %555 = extractelement <8 x i1> %537, i64 6
  br i1 %555, label %pred.store.if1144, label %pred.store.continue1145

pred.store.if1144:                                ; preds = %pred.store.continue1143
  %556 = or disjoint i64 %index1130, 6
  %557 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv898, i64 %556
  store i8 1, ptr %557, align 2, !tbaa !44
  br label %pred.store.continue1145

pred.store.continue1145:                          ; preds = %pred.store.if1144, %pred.store.continue1143
  %558 = extractelement <8 x i1> %537, i64 7
  br i1 %558, label %pred.store.if1146, label %pred.store.continue1147

pred.store.if1146:                                ; preds = %pred.store.continue1145
  %559 = or disjoint i64 %index1130, 7
  %560 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv898, i64 %559
  store i8 1, ptr %560, align 1, !tbaa !44
  br label %pred.store.continue1147

pred.store.continue1147:                          ; preds = %pred.store.if1146, %pred.store.continue1145
  %index.next1148 = add nuw i64 %index1130, 8
  %561 = icmp eq i64 %index.next1148, %n.vec1127
  br i1 %561, label %vec.epilog.middle.block1119, label %vec.epilog.vector.body1129, !llvm.loop !69

vec.epilog.middle.block1119:                      ; preds = %pred.store.continue1147
  br i1 %cmp.n1149, label %..loopexit543_crit_edge.us, label %.preheader542.us.preheader

.preheader542.us.preheader:                       ; preds = %vec.epilog.middle.block1119, %iter.check1043, %vec.epilog.iter.check1122
  %indvars.iv893.ph = phi i64 [ 0, %iter.check1043 ], [ %n.vec1048, %vec.epilog.iter.check1122 ], [ %n.vec1127, %vec.epilog.middle.block1119 ]
  br i1 %lcmp.mod1160.not, label %.preheader542.us.prol.loopexit, label %.preheader542.us.prol

.preheader542.us.prol:                            ; preds = %.preheader542.us.preheader
  %562 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv903, i64 %indvars.iv893.ph
  %563 = load i8, ptr %562, align 2, !tbaa !44
  %.not508.us.prol = icmp eq i8 %563, 0
  br i1 %.not508.us.prol, label %.preheader542.us.prol.loopexit.unr-lcssa, label %564

564:                                              ; preds = %.preheader542.us.prol
  %565 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv898, i64 %indvars.iv893.ph
  store i8 1, ptr %565, align 2, !tbaa !44
  br label %.preheader542.us.prol.loopexit.unr-lcssa

.preheader542.us.prol.loopexit.unr-lcssa:         ; preds = %564, %.preheader542.us.prol
  %indvars.iv.next894.prol = or disjoint i64 %indvars.iv893.ph, 1
  br label %.preheader542.us.prol.loopexit

.preheader542.us.prol.loopexit:                   ; preds = %.preheader542.us.prol.loopexit.unr-lcssa, %.preheader542.us.preheader
  %indvars.iv893.unr = phi i64 [ %indvars.iv893.ph, %.preheader542.us.preheader ], [ %indvars.iv.next894.prol, %.preheader542.us.prol.loopexit.unr-lcssa ]
  %566 = icmp eq i64 %indvars.iv893.ph, %396
  br i1 %566, label %..loopexit543_crit_edge.us, label %.preheader542.us

.preheader542.us:                                 ; preds = %.preheader542.us.prol.loopexit, %575
  %indvars.iv893 = phi i64 [ %indvars.iv.next894.1, %575 ], [ %indvars.iv893.unr, %.preheader542.us.prol.loopexit ]
  %567 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv903, i64 %indvars.iv893
  %568 = load i8, ptr %567, align 1, !tbaa !44
  %.not508.us = icmp eq i8 %568, 0
  br i1 %.not508.us, label %.preheader542.us.1, label %569

569:                                              ; preds = %.preheader542.us
  %570 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv898, i64 %indvars.iv893
  store i8 1, ptr %570, align 1, !tbaa !44
  br label %.preheader542.us.1

.preheader542.us.1:                               ; preds = %569, %.preheader542.us
  %indvars.iv.next894 = add nuw nsw i64 %indvars.iv893, 1
  %571 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv903, i64 %indvars.iv.next894
  %572 = load i8, ptr %571, align 1, !tbaa !44
  %.not508.us.1 = icmp eq i8 %572, 0
  br i1 %.not508.us.1, label %575, label %573

573:                                              ; preds = %.preheader542.us.1
  %574 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %indvars.iv898, i64 %indvars.iv.next894
  store i8 1, ptr %574, align 1, !tbaa !44
  br label %575

575:                                              ; preds = %573, %.preheader542.us.1
  %indvars.iv.next894.1 = add nuw nsw i64 %indvars.iv893, 2
  %exitcond897.not.1 = icmp eq i64 %indvars.iv.next894.1, %wide.trip.count906
  br i1 %exitcond897.not.1, label %..loopexit543_crit_edge.us, label %.preheader542.us, !llvm.loop !70

..loopexit543_crit_edge.us:                       ; preds = %.preheader542.us.prol.loopexit, %575, %middle.block1040, %vec.epilog.middle.block1119, %431
  %indvars.iv.next899 = add nuw nsw i64 %indvars.iv898, 1
  %exitcond902.not = icmp eq i64 %indvars.iv.next899, %wide.trip.count906
  br i1 %exitcond902.not, label %._crit_edge738.split.us, label %431, !llvm.loop !71

.preheader541:                                    ; preds = %._crit_edge738.split.us, %.preheader554, %.preheader550, %.preheader545
  %.13446750 = load ptr, ptr @gparse_constants, align 8, !tbaa !9
  %.not473751 = icmp eq ptr %.13446750, null
  br i1 %.not473751, label %.preheader539, label %.lr.ph753

._crit_edge738.split.us:                          ; preds = %..loopexit543_crit_edge.us
  %indvars.iv.next904 = add nuw nsw i64 %indvars.iv903, 1
  %exitcond907.not = icmp eq i64 %indvars.iv.next904, %wide.trip.count906
  br i1 %exitcond907.not, label %.preheader541, label %.lr.ph737, !llvm.loop !72

.preheader539:                                    ; preds = %._crit_edge749, %.preheader541
  %.14763 = load ptr, ptr @gparse_objects, align 8, !tbaa !9
  %.not474764 = icmp eq ptr %.14763, null
  br i1 %.not474764, label %._crit_edge767, label %.lr.ph766

.lr.ph753:                                        ; preds = %.preheader541, %._crit_edge749
  %.13446752 = phi ptr [ %.13446, %._crit_edge749 ], [ %.13446750, %.preheader541 ]
  %576 = tail call ptr @new_FactList() #7
  %577 = tail call ptr @new_TokenList() #7
  store ptr %577, ptr %576, align 8, !tbaa !73
  %578 = tail call ptr @new_TokenList() #7
  %579 = load ptr, ptr %576, align 8, !tbaa !73
  %580 = getelementptr inbounds i8, ptr %579, i64 8
  store ptr %578, ptr %580, align 8, !tbaa !14
  %581 = load ptr, ptr %.13446752, align 8, !tbaa !11
  %582 = tail call ptr @copy_Token(ptr noundef %581)
  %583 = load ptr, ptr %576, align 8, !tbaa !73
  store ptr %582, ptr %583, align 8, !tbaa !16
  %584 = getelementptr inbounds i8, ptr %.13446752, i64 8
  %585 = load ptr, ptr %584, align 8, !tbaa !13
  %586 = getelementptr inbounds i8, ptr %585, i64 8
  %587 = load ptr, ptr %586, align 8, !tbaa !14
  %.not504 = icmp eq ptr %587, null
  br i1 %.not504, label %606, label %588

588:                                              ; preds = %.lr.ph753
  %589 = tail call ptr @new_Token(i32 noundef 256) #7
  %590 = load ptr, ptr %576, align 8, !tbaa !73
  %591 = getelementptr inbounds i8, ptr %590, i64 8
  %592 = load ptr, ptr %591, align 8, !tbaa !14
  store ptr %589, ptr %592, align 8, !tbaa !16
  %593 = tail call ptr @strcpy(ptr noundef nonnull dereferenceable(1) %589, ptr noundef nonnull dereferenceable(1) @.str) #7
  %.6424741 = load ptr, ptr %584, align 8, !tbaa !9
  %.not505742 = icmp eq ptr %.6424741, null
  br i1 %.not505742, label %.loopexit540, label %.lr.ph745

.lr.ph745:                                        ; preds = %588, %.lr.ph745
  %.6424743 = phi ptr [ %.6424, %.lr.ph745 ], [ %.6424741, %588 ]
  %594 = load ptr, ptr %576, align 8, !tbaa !73
  %595 = getelementptr inbounds i8, ptr %594, i64 8
  %596 = load ptr, ptr %595, align 8, !tbaa !14
  %597 = load ptr, ptr %596, align 8, !tbaa !16
  %598 = tail call ptr @strcat(ptr noundef nonnull dereferenceable(1) %597, ptr noundef nonnull dereferenceable(1) @.str.1) #7
  %599 = load ptr, ptr %576, align 8, !tbaa !73
  %600 = getelementptr inbounds i8, ptr %599, i64 8
  %601 = load ptr, ptr %600, align 8, !tbaa !14
  %602 = load ptr, ptr %601, align 8, !tbaa !16
  %603 = load ptr, ptr %.6424743, align 8, !tbaa !16
  %604 = tail call ptr @strcat(ptr noundef nonnull dereferenceable(1) %602, ptr noundef nonnull dereferenceable(1) %603) #7
  %605 = getelementptr inbounds i8, ptr %.6424743, i64 8
  %.6424 = load ptr, ptr %605, align 8, !tbaa !9
  %.not505 = icmp eq ptr %.6424, null
  br i1 %.not505, label %.loopexit540, label %.lr.ph745, !llvm.loop !75

606:                                              ; preds = %.lr.ph753
  %607 = load ptr, ptr %585, align 8, !tbaa !16
  %608 = tail call ptr @copy_Token(ptr noundef %607)
  %609 = load ptr, ptr %576, align 8, !tbaa !73
  %610 = getelementptr inbounds i8, ptr %609, i64 8
  %611 = load ptr, ptr %610, align 8, !tbaa !14
  store ptr %608, ptr %611, align 8, !tbaa !16
  br label %.loopexit540

.loopexit540:                                     ; preds = %.lr.ph745, %588, %606
  %612 = load ptr, ptr @gorig_constant_list, align 8, !tbaa !9
  %613 = getelementptr inbounds i8, ptr %576, i64 8
  store ptr %612, ptr %613, align 8, !tbaa !76
  store ptr %576, ptr @gorig_constant_list, align 8, !tbaa !9
  %614 = load ptr, ptr %576, align 8, !tbaa !73
  %615 = getelementptr inbounds i8, ptr %614, i64 8
  %616 = load ptr, ptr %615, align 8, !tbaa !14
  %617 = load ptr, ptr %616, align 8, !tbaa !16
  %618 = tail call i32 @get_type(ptr noundef %617)
  %619 = load i32, ptr @lnum_types, align 4, !tbaa !5
  %620 = icmp sgt i32 %619, 0
  br i1 %620, label %.lr.ph748, label %._crit_edge749

.lr.ph748:                                        ; preds = %.loopexit540
  %621 = sext i32 %618 to i64
  %622 = zext i32 %618 to i64
  br label %623

623:                                              ; preds = %.lr.ph748, %646
  %624 = phi i32 [ %619, %.lr.ph748 ], [ %647, %646 ]
  %indvars.iv908 = phi i64 [ 0, %.lr.ph748 ], [ %indvars.iv.next909, %646 ]
  %625 = icmp eq i64 %indvars.iv908, %622
  br i1 %625, label %646, label %626

626:                                              ; preds = %623
  %627 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %621, i64 %indvars.iv908
  %628 = load i8, ptr %627, align 1, !tbaa !44
  %.not506 = icmp eq i8 %628, 0
  br i1 %.not506, label %646, label %629

629:                                              ; preds = %626
  %630 = tail call ptr @new_FactList() #7
  %631 = tail call ptr @new_TokenList() #7
  store ptr %631, ptr %630, align 8, !tbaa !73
  %632 = tail call ptr @new_TokenList() #7
  %633 = load ptr, ptr %630, align 8, !tbaa !73
  %634 = getelementptr inbounds i8, ptr %633, i64 8
  store ptr %632, ptr %634, align 8, !tbaa !14
  %635 = load ptr, ptr %.13446752, align 8, !tbaa !11
  %636 = tail call ptr @copy_Token(ptr noundef %635)
  %637 = load ptr, ptr %630, align 8, !tbaa !73
  store ptr %636, ptr %637, align 8, !tbaa !16
  %638 = getelementptr inbounds [50 x ptr], ptr @ltype_names, i64 0, i64 %indvars.iv908
  %639 = load ptr, ptr %638, align 8, !tbaa !9
  %640 = tail call ptr @copy_Token(ptr noundef %639)
  %641 = load ptr, ptr %630, align 8, !tbaa !73
  %642 = getelementptr inbounds i8, ptr %641, i64 8
  %643 = load ptr, ptr %642, align 8, !tbaa !14
  store ptr %640, ptr %643, align 8, !tbaa !16
  %644 = load ptr, ptr @gorig_constant_list, align 8, !tbaa !9
  %645 = getelementptr inbounds i8, ptr %630, i64 8
  store ptr %644, ptr %645, align 8, !tbaa !76
  store ptr %630, ptr @gorig_constant_list, align 8, !tbaa !9
  %.pre914 = load i32, ptr @lnum_types, align 4, !tbaa !5
  br label %646

646:                                              ; preds = %623, %626, %629
  %647 = phi i32 [ %624, %623 ], [ %624, %626 ], [ %.pre914, %629 ]
  %indvars.iv.next909 = add nuw nsw i64 %indvars.iv908, 1
  %648 = sext i32 %647 to i64
  %649 = icmp slt i64 %indvars.iv.next909, %648
  br i1 %649, label %623, label %._crit_edge749, !llvm.loop !77

._crit_edge749:                                   ; preds = %646, %.loopexit540
  %650 = getelementptr inbounds i8, ptr %.13446752, i64 24
  %.13446 = load ptr, ptr %650, align 8, !tbaa !9
  %.not473 = icmp eq ptr %.13446, null
  br i1 %.not473, label %.preheader539, label %.lr.ph753, !llvm.loop !78

.lr.ph766:                                        ; preds = %.preheader539, %._crit_edge762
  %.14765 = phi ptr [ %.14, %._crit_edge762 ], [ %.14763, %.preheader539 ]
  %651 = tail call ptr @new_FactList() #7
  %652 = tail call ptr @new_TokenList() #7
  store ptr %652, ptr %651, align 8, !tbaa !73
  %653 = tail call ptr @new_TokenList() #7
  %654 = load ptr, ptr %651, align 8, !tbaa !73
  %655 = getelementptr inbounds i8, ptr %654, i64 8
  store ptr %653, ptr %655, align 8, !tbaa !14
  %656 = load ptr, ptr %.14765, align 8, !tbaa !11
  %657 = tail call ptr @copy_Token(ptr noundef %656)
  %658 = load ptr, ptr %651, align 8, !tbaa !73
  store ptr %657, ptr %658, align 8, !tbaa !16
  %659 = getelementptr inbounds i8, ptr %.14765, i64 8
  %660 = load ptr, ptr %659, align 8, !tbaa !13
  %661 = getelementptr inbounds i8, ptr %660, i64 8
  %662 = load ptr, ptr %661, align 8, !tbaa !14
  %.not501 = icmp eq ptr %662, null
  br i1 %.not501, label %681, label %663

663:                                              ; preds = %.lr.ph766
  %664 = tail call ptr @new_Token(i32 noundef 256) #7
  %665 = load ptr, ptr %651, align 8, !tbaa !73
  %666 = getelementptr inbounds i8, ptr %665, i64 8
  %667 = load ptr, ptr %666, align 8, !tbaa !14
  store ptr %664, ptr %667, align 8, !tbaa !16
  %668 = tail call ptr @strcpy(ptr noundef nonnull dereferenceable(1) %664, ptr noundef nonnull dereferenceable(1) @.str) #7
  %.7425754 = load ptr, ptr %659, align 8, !tbaa !9
  %.not502755 = icmp eq ptr %.7425754, null
  br i1 %.not502755, label %.loopexit538, label %.lr.ph758

.lr.ph758:                                        ; preds = %663, %.lr.ph758
  %.7425756 = phi ptr [ %.7425, %.lr.ph758 ], [ %.7425754, %663 ]
  %669 = load ptr, ptr %651, align 8, !tbaa !73
  %670 = getelementptr inbounds i8, ptr %669, i64 8
  %671 = load ptr, ptr %670, align 8, !tbaa !14
  %672 = load ptr, ptr %671, align 8, !tbaa !16
  %673 = tail call ptr @strcat(ptr noundef nonnull dereferenceable(1) %672, ptr noundef nonnull dereferenceable(1) @.str.1) #7
  %674 = load ptr, ptr %651, align 8, !tbaa !73
  %675 = getelementptr inbounds i8, ptr %674, i64 8
  %676 = load ptr, ptr %675, align 8, !tbaa !14
  %677 = load ptr, ptr %676, align 8, !tbaa !16
  %678 = load ptr, ptr %.7425756, align 8, !tbaa !16
  %679 = tail call ptr @strcat(ptr noundef nonnull dereferenceable(1) %677, ptr noundef nonnull dereferenceable(1) %678) #7
  %680 = getelementptr inbounds i8, ptr %.7425756, i64 8
  %.7425 = load ptr, ptr %680, align 8, !tbaa !9
  %.not502 = icmp eq ptr %.7425, null
  br i1 %.not502, label %.loopexit538, label %.lr.ph758, !llvm.loop !79

681:                                              ; preds = %.lr.ph766
  %682 = load ptr, ptr %660, align 8, !tbaa !16
  %683 = tail call ptr @copy_Token(ptr noundef %682)
  %684 = load ptr, ptr %651, align 8, !tbaa !73
  %685 = getelementptr inbounds i8, ptr %684, i64 8
  %686 = load ptr, ptr %685, align 8, !tbaa !14
  store ptr %683, ptr %686, align 8, !tbaa !16
  br label %.loopexit538

.loopexit538:                                     ; preds = %.lr.ph758, %663, %681
  %687 = load ptr, ptr @gorig_constant_list, align 8, !tbaa !9
  %688 = getelementptr inbounds i8, ptr %651, i64 8
  store ptr %687, ptr %688, align 8, !tbaa !76
  store ptr %651, ptr @gorig_constant_list, align 8, !tbaa !9
  %689 = load ptr, ptr %651, align 8, !tbaa !73
  %690 = getelementptr inbounds i8, ptr %689, i64 8
  %691 = load ptr, ptr %690, align 8, !tbaa !14
  %692 = load ptr, ptr %691, align 8, !tbaa !16
  %693 = tail call i32 @get_type(ptr noundef %692)
  %694 = load i32, ptr @lnum_types, align 4, !tbaa !5
  %695 = icmp sgt i32 %694, 0
  br i1 %695, label %.lr.ph761, label %._crit_edge762

.lr.ph761:                                        ; preds = %.loopexit538
  %696 = sext i32 %693 to i64
  %697 = zext i32 %693 to i64
  br label %698

698:                                              ; preds = %.lr.ph761, %721
  %699 = phi i32 [ %694, %.lr.ph761 ], [ %722, %721 ]
  %indvars.iv911 = phi i64 [ 0, %.lr.ph761 ], [ %indvars.iv.next912, %721 ]
  %700 = icmp eq i64 %indvars.iv911, %697
  br i1 %700, label %721, label %701

701:                                              ; preds = %698
  %702 = getelementptr inbounds [50 x [50 x i8]], ptr %1, i64 0, i64 %696, i64 %indvars.iv911
  %703 = load i8, ptr %702, align 1, !tbaa !44
  %.not503 = icmp eq i8 %703, 0
  br i1 %.not503, label %721, label %704

704:                                              ; preds = %701
  %705 = tail call ptr @new_FactList() #7
  %706 = tail call ptr @new_TokenList() #7
  store ptr %706, ptr %705, align 8, !tbaa !73
  %707 = tail call ptr @new_TokenList() #7
  %708 = load ptr, ptr %705, align 8, !tbaa !73
  %709 = getelementptr inbounds i8, ptr %708, i64 8
  store ptr %707, ptr %709, align 8, !tbaa !14
  %710 = load ptr, ptr %.14765, align 8, !tbaa !11
  %711 = tail call ptr @copy_Token(ptr noundef %710)
  %712 = load ptr, ptr %705, align 8, !tbaa !73
  store ptr %711, ptr %712, align 8, !tbaa !16
  %713 = getelementptr inbounds [50 x ptr], ptr @ltype_names, i64 0, i64 %indvars.iv911
  %714 = load ptr, ptr %713, align 8, !tbaa !9
  %715 = tail call ptr @copy_Token(ptr noundef %714)
  %716 = load ptr, ptr %705, align 8, !tbaa !73
  %717 = getelementptr inbounds i8, ptr %716, i64 8
  %718 = load ptr, ptr %717, align 8, !tbaa !14
  store ptr %715, ptr %718, align 8, !tbaa !16
  %719 = load ptr, ptr @gorig_constant_list, align 8, !tbaa !9
  %720 = getelementptr inbounds i8, ptr %705, i64 8
  store ptr %719, ptr %720, align 8, !tbaa !76
  store ptr %705, ptr @gorig_constant_list, align 8, !tbaa !9
  %.pre915 = load i32, ptr @lnum_types, align 4, !tbaa !5
  br label %721

721:                                              ; preds = %698, %701, %704
  %722 = phi i32 [ %699, %698 ], [ %699, %701 ], [ %.pre915, %704 ]
  %indvars.iv.next912 = add nuw nsw i64 %indvars.iv911, 1
  %723 = sext i32 %722 to i64
  %724 = icmp slt i64 %indvars.iv.next912, %723
  br i1 %724, label %698, label %._crit_edge762, !llvm.loop !80

._crit_edge762:                                   ; preds = %721, %.loopexit538
  %725 = getelementptr inbounds i8, ptr %.14765, i64 24
  %.14 = load ptr, ptr %725, align 8, !tbaa !9
  %.not474 = icmp eq ptr %.14, null
  br i1 %.not474, label %._crit_edge767, label %.lr.ph766, !llvm.loop !81

._crit_edge767:                                   ; preds = %._crit_edge762, %.preheader539
  tail call void @normalize_tyl_in_pl(ptr noundef nonnull @gorig_goal_facts)
  %.2415787 = load ptr, ptr @gloaded_ops, align 8, !tbaa !9
  %.not475788 = icmp eq ptr %.2415787, null
  br i1 %.not475788, label %.preheader535, label %.lr.ph791

.preheader535:                                    ; preds = %809, %._crit_edge767
  %.4431810 = load ptr, ptr @gparse_predicates, align 8, !tbaa !9
  %.not476811 = icmp eq ptr %.4431810, null
  br i1 %.not476811, label %.preheader, label %.lr.ph813

.lr.ph791:                                        ; preds = %._crit_edge767, %809
  %.2415789 = phi ptr [ %.2415, %809 ], [ %.2415787, %._crit_edge767 ]
  %726 = getelementptr inbounds i8, ptr %.2415789, i64 32
  tail call void @normalize_tyl_in_pl(ptr noundef nonnull %726)
  %727 = getelementptr inbounds i8, ptr %.2415789, i64 40
  tail call void @normalize_tyl_in_pl(ptr noundef nonnull %727)
  %728 = getelementptr inbounds i8, ptr %.2415789, i64 16
  %729 = load ptr, ptr %728, align 8, !tbaa !82
  %.not493 = icmp eq ptr %729, null
  br i1 %.not493, label %809, label %730

730:                                              ; preds = %.lr.ph791
  %731 = tail call ptr @new_FactList() #7
  %732 = tail call ptr @new_TokenList() #7
  store ptr %732, ptr %731, align 8, !tbaa !73
  %733 = tail call ptr @new_TokenList() #7
  %734 = load ptr, ptr %731, align 8, !tbaa !73
  %735 = getelementptr inbounds i8, ptr %734, i64 8
  store ptr %733, ptr %735, align 8, !tbaa !14
  %736 = load ptr, ptr %728, align 8, !tbaa !82
  %737 = load ptr, ptr %736, align 8, !tbaa !11
  %738 = tail call ptr @copy_Token(ptr noundef %737)
  %739 = load ptr, ptr %731, align 8, !tbaa !73
  store ptr %738, ptr %739, align 8, !tbaa !16
  %740 = load ptr, ptr %728, align 8, !tbaa !82
  %741 = getelementptr inbounds i8, ptr %740, i64 8
  %742 = load ptr, ptr %741, align 8, !tbaa !13
  %743 = getelementptr inbounds i8, ptr %742, i64 8
  %744 = load ptr, ptr %743, align 8, !tbaa !14
  %.not494 = icmp eq ptr %744, null
  br i1 %.not494, label %763, label %745

745:                                              ; preds = %730
  %746 = tail call ptr @new_Token(i32 noundef 256) #7
  %747 = load ptr, ptr %731, align 8, !tbaa !73
  %748 = getelementptr inbounds i8, ptr %747, i64 8
  %749 = load ptr, ptr %748, align 8, !tbaa !14
  store ptr %746, ptr %749, align 8, !tbaa !16
  %750 = tail call ptr @strcpy(ptr noundef nonnull dereferenceable(1) %746, ptr noundef nonnull dereferenceable(1) @.str) #7
  %751 = load ptr, ptr %728, align 8, !tbaa !82
  %.8426.in768 = getelementptr inbounds i8, ptr %751, i64 8
  %.8426769 = load ptr, ptr %.8426.in768, align 8, !tbaa !9
  %.not495770 = icmp eq ptr %.8426769, null
  br i1 %.not495770, label %.loopexit537, label %.lr.ph773

.lr.ph773:                                        ; preds = %745, %.lr.ph773
  %.8426771 = phi ptr [ %.8426, %.lr.ph773 ], [ %.8426769, %745 ]
  %752 = load ptr, ptr %731, align 8, !tbaa !73
  %753 = getelementptr inbounds i8, ptr %752, i64 8
  %754 = load ptr, ptr %753, align 8, !tbaa !14
  %755 = load ptr, ptr %754, align 8, !tbaa !16
  %756 = tail call ptr @strcat(ptr noundef nonnull dereferenceable(1) %755, ptr noundef nonnull dereferenceable(1) @.str.1) #7
  %757 = load ptr, ptr %731, align 8, !tbaa !73
  %758 = getelementptr inbounds i8, ptr %757, i64 8
  %759 = load ptr, ptr %758, align 8, !tbaa !14
  %760 = load ptr, ptr %759, align 8, !tbaa !16
  %761 = load ptr, ptr %.8426771, align 8, !tbaa !16
  %762 = tail call ptr @strcat(ptr noundef nonnull dereferenceable(1) %760, ptr noundef nonnull dereferenceable(1) %761) #7
  %.8426.in = getelementptr inbounds i8, ptr %.8426771, i64 8
  %.8426 = load ptr, ptr %.8426.in, align 8, !tbaa !9
  %.not495 = icmp eq ptr %.8426, null
  br i1 %.not495, label %.loopexit537, label %.lr.ph773, !llvm.loop !83

763:                                              ; preds = %730
  %764 = load ptr, ptr %742, align 8, !tbaa !16
  %765 = tail call ptr @copy_Token(ptr noundef %764)
  %766 = load ptr, ptr %731, align 8, !tbaa !73
  %767 = getelementptr inbounds i8, ptr %766, i64 8
  %768 = load ptr, ptr %767, align 8, !tbaa !14
  store ptr %765, ptr %768, align 8, !tbaa !16
  br label %.loopexit537

.loopexit537:                                     ; preds = %.lr.ph773, %745, %763
  %769 = getelementptr inbounds i8, ptr %.2415789, i64 24
  store ptr %731, ptr %769, align 8, !tbaa !84
  %770 = load ptr, ptr %728, align 8, !tbaa !82
  %.15.in779 = getelementptr inbounds i8, ptr %770, i64 24
  %.15780 = load ptr, ptr %.15.in779, align 8, !tbaa !85
  %.not496781 = icmp eq ptr %.15780, null
  br i1 %.not496781, label %._crit_edge786, label %.lr.ph785

.lr.ph785:                                        ; preds = %.loopexit537, %.loopexit536
  %.15783 = phi ptr [ %.15, %.loopexit536 ], [ %.15780, %.loopexit537 ]
  %.0782 = phi ptr [ %771, %.loopexit536 ], [ %731, %.loopexit537 ]
  %771 = tail call ptr @new_FactList() #7
  %772 = tail call ptr @new_TokenList() #7
  store ptr %772, ptr %771, align 8, !tbaa !73
  %773 = tail call ptr @new_TokenList() #7
  %774 = load ptr, ptr %771, align 8, !tbaa !73
  %775 = getelementptr inbounds i8, ptr %774, i64 8
  store ptr %773, ptr %775, align 8, !tbaa !14
  %776 = load ptr, ptr %.15783, align 8, !tbaa !11
  %777 = tail call ptr @copy_Token(ptr noundef %776)
  %778 = load ptr, ptr %771, align 8, !tbaa !73
  store ptr %777, ptr %778, align 8, !tbaa !16
  %779 = getelementptr inbounds i8, ptr %.15783, i64 8
  %780 = load ptr, ptr %779, align 8, !tbaa !13
  %781 = getelementptr inbounds i8, ptr %780, i64 8
  %782 = load ptr, ptr %781, align 8, !tbaa !14
  %.not497 = icmp eq ptr %782, null
  br i1 %.not497, label %801, label %783

783:                                              ; preds = %.lr.ph785
  %784 = tail call ptr @new_Token(i32 noundef 256) #7
  %785 = load ptr, ptr %771, align 8, !tbaa !73
  %786 = getelementptr inbounds i8, ptr %785, i64 8
  %787 = load ptr, ptr %786, align 8, !tbaa !14
  store ptr %784, ptr %787, align 8, !tbaa !16
  %788 = tail call ptr @strcpy(ptr noundef nonnull dereferenceable(1) %784, ptr noundef nonnull dereferenceable(1) @.str) #7
  %.9774 = load ptr, ptr %779, align 8, !tbaa !9
  %.not498775 = icmp eq ptr %.9774, null
  br i1 %.not498775, label %.loopexit536, label %.lr.ph778

.lr.ph778:                                        ; preds = %783, %.lr.ph778
  %.9776 = phi ptr [ %.9, %.lr.ph778 ], [ %.9774, %783 ]
  %789 = load ptr, ptr %771, align 8, !tbaa !73
  %790 = getelementptr inbounds i8, ptr %789, i64 8
  %791 = load ptr, ptr %790, align 8, !tbaa !14
  %792 = load ptr, ptr %791, align 8, !tbaa !16
  %793 = tail call ptr @strcat(ptr noundef nonnull dereferenceable(1) %792, ptr noundef nonnull dereferenceable(1) @.str.1) #7
  %794 = load ptr, ptr %771, align 8, !tbaa !73
  %795 = getelementptr inbounds i8, ptr %794, i64 8
  %796 = load ptr, ptr %795, align 8, !tbaa !14
  %797 = load ptr, ptr %796, align 8, !tbaa !16
  %798 = load ptr, ptr %.9776, align 8, !tbaa !16
  %799 = tail call ptr @strcat(ptr noundef nonnull dereferenceable(1) %797, ptr noundef nonnull dereferenceable(1) %798) #7
  %800 = getelementptr inbounds i8, ptr %.9776, i64 8
  %.9 = load ptr, ptr %800, align 8, !tbaa !9
  %.not498 = icmp eq ptr %.9, null
  br i1 %.not498, label %.loopexit536, label %.lr.ph778, !llvm.loop !86

801:                                              ; preds = %.lr.ph785
  %802 = load ptr, ptr %780, align 8, !tbaa !16
  %803 = tail call ptr @copy_Token(ptr noundef %802)
  %804 = load ptr, ptr %771, align 8, !tbaa !73
  %805 = getelementptr inbounds i8, ptr %804, i64 8
  %806 = load ptr, ptr %805, align 8, !tbaa !14
  store ptr %803, ptr %806, align 8, !tbaa !16
  br label %.loopexit536

.loopexit536:                                     ; preds = %.lr.ph778, %783, %801
  %807 = getelementptr inbounds i8, ptr %.0782, i64 8
  store ptr %771, ptr %807, align 8, !tbaa !76
  %.15.in = getelementptr inbounds i8, ptr %.15783, i64 24
  %.15 = load ptr, ptr %.15.in, align 8, !tbaa !85
  %.not496 = icmp eq ptr %.15, null
  br i1 %.not496, label %._crit_edge786.loopexit, label %.lr.ph785, !llvm.loop !87

._crit_edge786.loopexit:                          ; preds = %.loopexit536
  %.pre916 = load ptr, ptr %728, align 8, !tbaa !82
  br label %._crit_edge786

._crit_edge786:                                   ; preds = %._crit_edge786.loopexit, %.loopexit537
  %808 = phi ptr [ %.pre916, %._crit_edge786.loopexit ], [ %770, %.loopexit537 ]
  tail call void @free_TypedList(ptr noundef %808) #7
  store ptr null, ptr %728, align 8, !tbaa !82
  br label %809

809:                                              ; preds = %.lr.ph791, %._crit_edge786
  %810 = getelementptr inbounds i8, ptr %.2415789, i64 48
  %.2415 = load ptr, ptr %810, align 8, !tbaa !9
  %.not475 = icmp eq ptr %.2415, null
  br i1 %.not475, label %.preheader535, label %.lr.ph791, !llvm.loop !88

.preheader:                                       ; preds = %.loopexit533, %.preheader535
  %.5432832 = load ptr, ptr @gparse_functions, align 8, !tbaa !9
  %.not477833 = icmp eq ptr %.5432832, null
  br i1 %.not477833, label %._crit_edge836, label %.lr.ph835

.lr.ph813:                                        ; preds = %.preheader535, %.loopexit533
  %.4431812 = phi ptr [ %.4431, %.loopexit533 ], [ %.4431810, %.preheader535 ]
  %811 = tail call ptr @new_FactList() #7
  %812 = tail call ptr @new_TokenList() #7
  store ptr %812, ptr %811, align 8, !tbaa !73
  %813 = load ptr, ptr %.4431812, align 8, !tbaa !89
  %814 = tail call ptr @copy_Token(ptr noundef %813)
  %815 = load ptr, ptr %811, align 8, !tbaa !73
  store ptr %814, ptr %815, align 8, !tbaa !16
  %816 = load ptr, ptr @gpredicates_and_types, align 8, !tbaa !9
  %817 = getelementptr inbounds i8, ptr %811, i64 8
  store ptr %816, ptr %817, align 8, !tbaa !76
  store ptr %811, ptr @gpredicates_and_types, align 8, !tbaa !9
  %818 = getelementptr inbounds i8, ptr %.4431812, i64 8
  %819 = load ptr, ptr %818, align 8, !tbaa !91
  %.not485 = icmp eq ptr %819, null
  br i1 %.not485, label %.loopexit533, label %820

820:                                              ; preds = %.lr.ph813
  %821 = tail call ptr @new_TokenList() #7
  %822 = load ptr, ptr %811, align 8, !tbaa !73
  %823 = getelementptr inbounds i8, ptr %822, i64 8
  store ptr %821, ptr %823, align 8, !tbaa !14
  %824 = load ptr, ptr %818, align 8, !tbaa !91
  %825 = getelementptr inbounds i8, ptr %824, i64 8
  %826 = load ptr, ptr %825, align 8, !tbaa !13
  %827 = getelementptr inbounds i8, ptr %826, i64 8
  %828 = load ptr, ptr %827, align 8, !tbaa !14
  %.not486 = icmp eq ptr %828, null
  br i1 %.not486, label %847, label %829

829:                                              ; preds = %820
  %830 = tail call ptr @new_Token(i32 noundef 256) #7
  %831 = load ptr, ptr %811, align 8, !tbaa !73
  %832 = getelementptr inbounds i8, ptr %831, i64 8
  %833 = load ptr, ptr %832, align 8, !tbaa !14
  store ptr %830, ptr %833, align 8, !tbaa !16
  %834 = tail call ptr @strcpy(ptr noundef nonnull dereferenceable(1) %830, ptr noundef nonnull dereferenceable(1) @.str) #7
  %835 = load ptr, ptr %818, align 8, !tbaa !91
  %.10.in792 = getelementptr inbounds i8, ptr %835, i64 8
  %.10793 = load ptr, ptr %.10.in792, align 8, !tbaa !9
  %.not487794 = icmp eq ptr %.10793, null
  br i1 %.not487794, label %.loopexit534, label %.lr.ph797

.lr.ph797:                                        ; preds = %829, %.lr.ph797
  %.10795 = phi ptr [ %.10, %.lr.ph797 ], [ %.10793, %829 ]
  %836 = load ptr, ptr %811, align 8, !tbaa !73
  %837 = getelementptr inbounds i8, ptr %836, i64 8
  %838 = load ptr, ptr %837, align 8, !tbaa !14
  %839 = load ptr, ptr %838, align 8, !tbaa !16
  %840 = tail call ptr @strcat(ptr noundef nonnull dereferenceable(1) %839, ptr noundef nonnull dereferenceable(1) @.str.1) #7
  %841 = load ptr, ptr %811, align 8, !tbaa !73
  %842 = getelementptr inbounds i8, ptr %841, i64 8
  %843 = load ptr, ptr %842, align 8, !tbaa !14
  %844 = load ptr, ptr %843, align 8, !tbaa !16
  %845 = load ptr, ptr %.10795, align 8, !tbaa !16
  %846 = tail call ptr @strcat(ptr noundef nonnull dereferenceable(1) %844, ptr noundef nonnull dereferenceable(1) %845) #7
  %.10.in = getelementptr inbounds i8, ptr %.10795, i64 8
  %.10 = load ptr, ptr %.10.in, align 8, !tbaa !9
  %.not487 = icmp eq ptr %.10, null
  br i1 %.not487, label %.loopexit534, label %.lr.ph797, !llvm.loop !92

847:                                              ; preds = %820
  %848 = load ptr, ptr %826, align 8, !tbaa !16
  %849 = tail call ptr @copy_Token(ptr noundef %848)
  %850 = load ptr, ptr %811, align 8, !tbaa !73
  %851 = getelementptr inbounds i8, ptr %850, i64 8
  %852 = load ptr, ptr %851, align 8, !tbaa !14
  store ptr %849, ptr %852, align 8, !tbaa !16
  br label %.loopexit534

.loopexit534:                                     ; preds = %.lr.ph797, %829, %847
  %853 = load ptr, ptr %818, align 8, !tbaa !91
  %.16.in803 = getelementptr inbounds i8, ptr %853, i64 24
  %.16804 = load ptr, ptr %.16.in803, align 8, !tbaa !85
  %.not488805 = icmp eq ptr %.16804, null
  br i1 %.not488805, label %.loopexit533, label %.lr.ph809.preheader

.lr.ph809.preheader:                              ; preds = %.loopexit534
  %854 = load ptr, ptr %811, align 8, !tbaa !73
  %855 = getelementptr inbounds i8, ptr %854, i64 8
  %856 = load ptr, ptr %855, align 8, !tbaa !14
  br label %.lr.ph809

.lr.ph809:                                        ; preds = %.lr.ph809.preheader, %.loopexit532
  %.16807 = phi ptr [ %.16, %.loopexit532 ], [ %.16804, %.lr.ph809.preheader ]
  %.0416806 = phi ptr [ %857, %.loopexit532 ], [ %856, %.lr.ph809.preheader ]
  %857 = tail call ptr @new_TokenList() #7
  %858 = getelementptr inbounds i8, ptr %.16807, i64 8
  %859 = load ptr, ptr %858, align 8, !tbaa !13
  %860 = getelementptr inbounds i8, ptr %859, i64 8
  %861 = load ptr, ptr %860, align 8, !tbaa !14
  %.not489 = icmp eq ptr %861, null
  br i1 %.not489, label %871, label %862

862:                                              ; preds = %.lr.ph809
  %863 = tail call ptr @new_Token(i32 noundef 256) #7
  store ptr %863, ptr %857, align 8, !tbaa !16
  %864 = tail call ptr @strcpy(ptr noundef nonnull dereferenceable(1) %863, ptr noundef nonnull dereferenceable(1) @.str) #7
  %.11798 = load ptr, ptr %858, align 8, !tbaa !9
  %.not490799 = icmp eq ptr %.11798, null
  br i1 %.not490799, label %.loopexit532, label %.lr.ph802

.lr.ph802:                                        ; preds = %862, %.lr.ph802
  %.11800 = phi ptr [ %.11, %.lr.ph802 ], [ %.11798, %862 ]
  %865 = load ptr, ptr %857, align 8, !tbaa !16
  %866 = tail call ptr @strcat(ptr noundef nonnull dereferenceable(1) %865, ptr noundef nonnull dereferenceable(1) @.str.1) #7
  %867 = load ptr, ptr %857, align 8, !tbaa !16
  %868 = load ptr, ptr %.11800, align 8, !tbaa !16
  %869 = tail call ptr @strcat(ptr noundef nonnull dereferenceable(1) %867, ptr noundef nonnull dereferenceable(1) %868) #7
  %870 = getelementptr inbounds i8, ptr %.11800, i64 8
  %.11 = load ptr, ptr %870, align 8, !tbaa !9
  %.not490 = icmp eq ptr %.11, null
  br i1 %.not490, label %.loopexit532, label %.lr.ph802, !llvm.loop !93

871:                                              ; preds = %.lr.ph809
  %872 = load ptr, ptr %859, align 8, !tbaa !16
  %873 = tail call ptr @copy_Token(ptr noundef %872)
  store ptr %873, ptr %857, align 8, !tbaa !16
  br label %.loopexit532

.loopexit532:                                     ; preds = %.lr.ph802, %862, %871
  %874 = getelementptr inbounds i8, ptr %.0416806, i64 8
  store ptr %857, ptr %874, align 8, !tbaa !14
  %.16.in = getelementptr inbounds i8, ptr %.16807, i64 24
  %.16 = load ptr, ptr %.16.in, align 8, !tbaa !85
  %.not488 = icmp eq ptr %.16, null
  br i1 %.not488, label %.loopexit533, label %.lr.ph809, !llvm.loop !94

.loopexit533:                                     ; preds = %.loopexit532, %.loopexit534, %.lr.ph813
  %875 = getelementptr inbounds i8, ptr %.4431812, i64 16
  %.4431 = load ptr, ptr %875, align 8, !tbaa !9
  %.not476 = icmp eq ptr %.4431, null
  br i1 %.not476, label %.preheader, label %.lr.ph813, !llvm.loop !95

.lr.ph835:                                        ; preds = %.preheader, %.loopexit530
  %.5432834 = phi ptr [ %.5432, %.loopexit530 ], [ %.5432832, %.preheader ]
  %876 = tail call ptr @new_FactList() #7
  %877 = tail call ptr @new_TokenList() #7
  store ptr %877, ptr %876, align 8, !tbaa !73
  %878 = load ptr, ptr %.5432834, align 8, !tbaa !89
  %879 = tail call ptr @copy_Token(ptr noundef %878)
  %880 = load ptr, ptr %876, align 8, !tbaa !73
  store ptr %879, ptr %880, align 8, !tbaa !16
  %881 = load ptr, ptr @gfunctions_and_types, align 8, !tbaa !9
  %882 = getelementptr inbounds i8, ptr %876, i64 8
  store ptr %881, ptr %882, align 8, !tbaa !76
  store ptr %876, ptr @gfunctions_and_types, align 8, !tbaa !9
  %883 = getelementptr inbounds i8, ptr %.5432834, i64 8
  %884 = load ptr, ptr %883, align 8, !tbaa !91
  %.not478 = icmp eq ptr %884, null
  br i1 %.not478, label %.loopexit530, label %885

885:                                              ; preds = %.lr.ph835
  %886 = tail call ptr @new_TokenList() #7
  %887 = load ptr, ptr %876, align 8, !tbaa !73
  %888 = getelementptr inbounds i8, ptr %887, i64 8
  store ptr %886, ptr %888, align 8, !tbaa !14
  %889 = load ptr, ptr %883, align 8, !tbaa !91
  %890 = getelementptr inbounds i8, ptr %889, i64 8
  %891 = load ptr, ptr %890, align 8, !tbaa !13
  %892 = getelementptr inbounds i8, ptr %891, i64 8
  %893 = load ptr, ptr %892, align 8, !tbaa !14
  %.not479 = icmp eq ptr %893, null
  br i1 %.not479, label %912, label %894

894:                                              ; preds = %885
  %895 = tail call ptr @new_Token(i32 noundef 256) #7
  %896 = load ptr, ptr %876, align 8, !tbaa !73
  %897 = getelementptr inbounds i8, ptr %896, i64 8
  %898 = load ptr, ptr %897, align 8, !tbaa !14
  store ptr %895, ptr %898, align 8, !tbaa !16
  %899 = tail call ptr @strcpy(ptr noundef nonnull dereferenceable(1) %895, ptr noundef nonnull dereferenceable(1) @.str) #7
  %900 = load ptr, ptr %883, align 8, !tbaa !91
  %.12.in814 = getelementptr inbounds i8, ptr %900, i64 8
  %.12815 = load ptr, ptr %.12.in814, align 8, !tbaa !9
  %.not480816 = icmp eq ptr %.12815, null
  br i1 %.not480816, label %.loopexit531, label %.lr.ph819

.lr.ph819:                                        ; preds = %894, %.lr.ph819
  %.12817 = phi ptr [ %.12, %.lr.ph819 ], [ %.12815, %894 ]
  %901 = load ptr, ptr %876, align 8, !tbaa !73
  %902 = getelementptr inbounds i8, ptr %901, i64 8
  %903 = load ptr, ptr %902, align 8, !tbaa !14
  %904 = load ptr, ptr %903, align 8, !tbaa !16
  %905 = tail call ptr @strcat(ptr noundef nonnull dereferenceable(1) %904, ptr noundef nonnull dereferenceable(1) @.str.1) #7
  %906 = load ptr, ptr %876, align 8, !tbaa !73
  %907 = getelementptr inbounds i8, ptr %906, i64 8
  %908 = load ptr, ptr %907, align 8, !tbaa !14
  %909 = load ptr, ptr %908, align 8, !tbaa !16
  %910 = load ptr, ptr %.12817, align 8, !tbaa !16
  %911 = tail call ptr @strcat(ptr noundef nonnull dereferenceable(1) %909, ptr noundef nonnull dereferenceable(1) %910) #7
  %.12.in = getelementptr inbounds i8, ptr %.12817, i64 8
  %.12 = load ptr, ptr %.12.in, align 8, !tbaa !9
  %.not480 = icmp eq ptr %.12, null
  br i1 %.not480, label %.loopexit531, label %.lr.ph819, !llvm.loop !96

912:                                              ; preds = %885
  %913 = load ptr, ptr %891, align 8, !tbaa !16
  %914 = tail call ptr @copy_Token(ptr noundef %913)
  %915 = load ptr, ptr %876, align 8, !tbaa !73
  %916 = getelementptr inbounds i8, ptr %915, i64 8
  %917 = load ptr, ptr %916, align 8, !tbaa !14
  store ptr %914, ptr %917, align 8, !tbaa !16
  br label %.loopexit531

.loopexit531:                                     ; preds = %.lr.ph819, %894, %912
  %918 = load ptr, ptr %883, align 8, !tbaa !91
  %.17.in825 = getelementptr inbounds i8, ptr %918, i64 24
  %.17826 = load ptr, ptr %.17.in825, align 8, !tbaa !85
  %.not481827 = icmp eq ptr %.17826, null
  br i1 %.not481827, label %.loopexit530, label %.lr.ph831.preheader

.lr.ph831.preheader:                              ; preds = %.loopexit531
  %919 = load ptr, ptr %876, align 8, !tbaa !73
  %920 = getelementptr inbounds i8, ptr %919, i64 8
  %921 = load ptr, ptr %920, align 8, !tbaa !14
  br label %.lr.ph831

.lr.ph831:                                        ; preds = %.lr.ph831.preheader, %.loopexit
  %.17829 = phi ptr [ %.17, %.loopexit ], [ %.17826, %.lr.ph831.preheader ]
  %.1417828 = phi ptr [ %922, %.loopexit ], [ %921, %.lr.ph831.preheader ]
  %922 = tail call ptr @new_TokenList() #7
  %923 = getelementptr inbounds i8, ptr %.17829, i64 8
  %924 = load ptr, ptr %923, align 8, !tbaa !13
  %925 = getelementptr inbounds i8, ptr %924, i64 8
  %926 = load ptr, ptr %925, align 8, !tbaa !14
  %.not482 = icmp eq ptr %926, null
  br i1 %.not482, label %936, label %927

927:                                              ; preds = %.lr.ph831
  %928 = tail call ptr @new_Token(i32 noundef 256) #7
  store ptr %928, ptr %922, align 8, !tbaa !16
  %929 = tail call ptr @strcpy(ptr noundef nonnull dereferenceable(1) %928, ptr noundef nonnull dereferenceable(1) @.str) #7
  %.13820 = load ptr, ptr %923, align 8, !tbaa !9
  %.not483821 = icmp eq ptr %.13820, null
  br i1 %.not483821, label %.loopexit, label %.lr.ph824

.lr.ph824:                                        ; preds = %927, %.lr.ph824
  %.13822 = phi ptr [ %.13, %.lr.ph824 ], [ %.13820, %927 ]
  %930 = load ptr, ptr %922, align 8, !tbaa !16
  %931 = tail call ptr @strcat(ptr noundef nonnull dereferenceable(1) %930, ptr noundef nonnull dereferenceable(1) @.str.1) #7
  %932 = load ptr, ptr %922, align 8, !tbaa !16
  %933 = load ptr, ptr %.13822, align 8, !tbaa !16
  %934 = tail call ptr @strcat(ptr noundef nonnull dereferenceable(1) %932, ptr noundef nonnull dereferenceable(1) %933) #7
  %935 = getelementptr inbounds i8, ptr %.13822, i64 8
  %.13 = load ptr, ptr %935, align 8, !tbaa !9
  %.not483 = icmp eq ptr %.13, null
  br i1 %.not483, label %.loopexit, label %.lr.ph824, !llvm.loop !97

936:                                              ; preds = %.lr.ph831
  %937 = load ptr, ptr %924, align 8, !tbaa !16
  %938 = tail call ptr @copy_Token(ptr noundef %937)
  store ptr %938, ptr %922, align 8, !tbaa !16
  br label %.loopexit

.loopexit:                                        ; preds = %.lr.ph824, %927, %936
  %939 = getelementptr inbounds i8, ptr %.1417828, i64 8
  store ptr %922, ptr %939, align 8, !tbaa !14
  %.17.in = getelementptr inbounds i8, ptr %.17829, i64 24
  %.17 = load ptr, ptr %.17.in, align 8, !tbaa !85
  %.not481 = icmp eq ptr %.17, null
  br i1 %.not481, label %.loopexit530, label %.lr.ph831, !llvm.loop !98

.loopexit530:                                     ; preds = %.loopexit, %.loopexit531, %.lr.ph835
  %940 = getelementptr inbounds i8, ptr %.5432834, i64 16
  %.5432 = load ptr, ptr %940, align 8, !tbaa !9
  %.not477 = icmp eq ptr %.5432, null
  br i1 %.not477, label %._crit_edge836, label %.lr.ph835, !llvm.loop !99

._crit_edge836:                                   ; preds = %.loopexit530, %.preheader
  %941 = load ptr, ptr @gparse_types, align 8, !tbaa !9
  tail call void @free_TypedList(ptr noundef %941) #7
  store ptr null, ptr @gparse_types, align 8, !tbaa !9
  %942 = load ptr, ptr @gparse_constants, align 8, !tbaa !9
  tail call void @free_TypedList(ptr noundef %942) #7
  store ptr null, ptr @gparse_constants, align 8, !tbaa !9
  %943 = load ptr, ptr @gparse_objects, align 8, !tbaa !9
  tail call void @free_TypedList(ptr noundef %943) #7
  store ptr null, ptr @gparse_objects, align 8, !tbaa !9
  %944 = load ptr, ptr @gparse_predicates, align 8, !tbaa !9
  tail call void @free_TypedListList(ptr noundef %944) #7
  store ptr null, ptr @gparse_predicates, align 8, !tbaa !9
  %945 = load ptr, ptr @gparse_functions, align 8, !tbaa !9
  tail call void @free_TypedListList(ptr noundef %945) #7
  store ptr null, ptr @gparse_functions, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 2500, ptr nonnull %1) #7
  ret void
}

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

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

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

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

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

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

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

declare ptr @new_FactList() local_unnamed_addr #2

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

declare void @free_TypedList(ptr noundef) local_unnamed_addr #2

declare void @free_TypedListList(ptr noundef) local_unnamed_addr #2

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"any pointer", !7, i64 0}
!11 = !{!12, !10, i64 0}
!12 = !{!"_TypedList", !10, i64 0, !10, i64 8, !6, i64 16, !10, i64 24}
!13 = !{!12, !10, i64 8}
!14 = !{!15, !10, i64 8}
!15 = !{!"_TokenList", !10, i64 0, !10, i64 8}
!16 = !{!15, !10, i64 0}
!17 = distinct !{!17, !18}
!18 = !{!"llvm.loop.mustprogress"}
!19 = !{!12, !6, i64 16}
!20 = distinct !{!20, !18}
!21 = distinct !{!21, !18}
!22 = distinct !{!22, !18}
!23 = distinct !{!23, !18}
!24 = distinct !{!24, !18}
!25 = distinct !{!25, !18}
!26 = distinct !{!26, !18}
!27 = distinct !{!27, !18}
!28 = distinct !{!28, !18}
!29 = distinct !{!29, !18}
!30 = distinct !{!30, !18}
!31 = !{!32, !10, i64 32}
!32 = !{!"_PlOperator", !10, i64 0, !7, i64 8, !6, i64 12, !10, i64 16, !10, i64 24, !10, i64 32, !10, i64 40, !10, i64 48}
!33 = !{!32, !10, i64 40}
!34 = distinct !{!34, !18}
!35 = distinct !{!35, !18}
!36 = distinct !{!36, !18}
!37 = distinct !{!37, !18}
!38 = distinct !{!38, !18}
!39 = distinct !{!39, !18}
!40 = distinct !{!40, !18}
!41 = distinct !{!41, !18}
!42 = distinct !{!42, !18}
!43 = distinct !{!43, !18}
!44 = !{!7, !7, i64 0}
!45 = distinct !{!45, !18, !46, !47}
!46 = !{!"llvm.loop.isvectorized", i32 1}
!47 = !{!"llvm.loop.unroll.runtime.disable"}
!48 = distinct !{!48, !18, !46, !47}
!49 = distinct !{!49, !18, !47, !46}
!50 = distinct !{!50, !18}
!51 = distinct !{!51, !18}
!52 = distinct !{!52, !18}
!53 = distinct !{!53, !18}
!54 = distinct !{!54, !55}
!55 = !{!"llvm.loop.unroll.disable"}
!56 = distinct !{!56, !18}
!57 = distinct !{!57, !18}
!58 = distinct !{!58, !18, !46, !47}
!59 = distinct !{!59, !18, !46, !47}
!60 = distinct !{!60, !18, !46}
!61 = distinct !{!61, !18}
!62 = distinct !{!62, !18}
!63 = distinct !{!63, !18}
!64 = distinct !{!64, !18}
!65 = distinct !{!65, !55}
!66 = distinct !{!66, !18}
!67 = distinct !{!67, !18}
!68 = distinct !{!68, !18, !46, !47}
!69 = distinct !{!69, !18, !46, !47}
!70 = distinct !{!70, !18, !46}
!71 = distinct !{!71, !18}
!72 = distinct !{!72, !18}
!73 = !{!74, !10, i64 0}
!74 = !{!"_FactList", !10, i64 0, !10, i64 8}
!75 = distinct !{!75, !18}
!76 = !{!74, !10, i64 8}
!77 = distinct !{!77, !18}
!78 = distinct !{!78, !18}
!79 = distinct !{!79, !18}
!80 = distinct !{!80, !18}
!81 = distinct !{!81, !18}
!82 = !{!32, !10, i64 16}
!83 = distinct !{!83, !18}
!84 = !{!32, !10, i64 24}
!85 = !{!12, !10, i64 24}
!86 = distinct !{!86, !18}
!87 = distinct !{!87, !18}
!88 = distinct !{!88, !18}
!89 = !{!90, !10, i64 0}
!90 = !{!"_TypedListList", !10, i64 0, !10, i64 8, !10, i64 16}
!91 = !{!90, !10, i64 8}
!92 = distinct !{!92, !18}
!93 = distinct !{!93, !18}
!94 = distinct !{!94, !18}
!95 = distinct !{!95, !18}
!96 = distinct !{!96, !18}
!97 = distinct !{!97, !18}
!98 = distinct !{!98, !18}
!99 = distinct !{!99, !18}


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