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

; 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._Fact = type { i32, [5 x i32] }
%struct._command_line = type { [256 x i8], [256 x i8], [256 x i8], i32, i32, i32, i8, i32, float }
%struct._EasyTemplate = type { ptr, [15 x i32], ptr, ptr }
%struct._NormOperator = type { ptr, i32, [15 x i32], [15 x i32], [15 x i32], i32, [15 x i32], ptr, i32, ptr, ptr, ptr, i32, ptr, i8 }
%struct._NormEffect = type { i32, [15 x i32], [15 x i32], ptr, i32, ptr, i32, ptr, i32, ptr, ptr, ptr, i32, ptr, ptr, ptr, i32, ptr, ptr }
%struct._Action = type { ptr, ptr, i8, ptr, i32, [15 x i32], [15 x i32], ptr, i32, ptr, ptr, ptr, i32, ptr, ptr, ptr, i32, ptr, i32, ptr }
%struct._Operator = type { ptr, [15 x ptr], i32, i8, i32, [15 x i32], [15 x i8], ptr, ptr, i8 }
%struct._PseudoAction = type { ptr, [15 x i32], ptr, i32, ptr, ptr, ptr, i32, ptr, i32 }
%struct._PseudoActionEffect = type { ptr, i32, ptr, i32, ptr, i32, ptr, ptr, ptr, i32, ptr, ptr, ptr, i32, ptr }
%struct._Facts = type { ptr, ptr }

@gactions = external global ptr, align 8
@gnum_actions = external global i32, align 4
@gnum_predicates = external global i32, align 4
@garity = external global [50 x i32], align 16
@gpredicates_args_type = external global [50 x [5 x i32]], align 16
@gtype_size = external global [50 x i32], align 16
@lpos = external dso_local global [50 x ptr], align 16
@lneg = external dso_local global [50 x ptr], align 16
@luse = external dso_local global [50 x ptr], align 16
@lindex = external dso_local global [50 x ptr], align 16
@gnum_hard_templates = external global i32, align 4
@lp = external dso_local global i32, align 4
@gnum_initial_predicate = external global ptr, align 8
@ginitial_predicate = external global ptr, align 8
@largs = external dso_local global [15 x i32], align 16
@geasy_templates = external global ptr, align 8
@gnum_relevant_facts = external global i32, align 4
@.str = external hidden unnamed_addr constant [71 x i8], align 1
@grelevant_facts = external global [150000 x %struct._Fact], align 16
@ghard_templates = external global ptr, align 8
@gnum_initial = external global i32, align 4
@gnum_pp_facts = external global i32, align 4
@gcmd_line = external global %struct._command_line, align 4
@.str.1 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [27 x i8], align 1
@ginitial = external global ptr, align 8
@.str.3 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [41 x i8], align 1
@gnum_operators = external global i32, align 4
@.str.5 = external hidden unnamed_addr constant [15 x i8], align 1
@goperators = external global [50000 x ptr], align 16
@.str.6 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [3 x i8], align 1
@gconstants = external global [2000 x ptr], align 16
@.str.9 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [3 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local void @perform_reachability_analysis() #0 {
  %1 = alloca i32, align 4
  %2 = alloca i32, align 4
  %3 = alloca i32, align 4
  %4 = alloca i32, align 4
  %5 = alloca i32, align 4
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca i8, align 1
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca ptr, align 8
  %14 = alloca ptr, align 8
  %15 = alloca ptr, align 8
  %16 = alloca ptr, align 8
  %17 = alloca ptr, align 8
  %18 = alloca ptr, align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr %1) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %2) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %3) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %4) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %5) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr %8) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #6
  store ptr null, ptr @gactions, align 8, !tbaa !5
  store i32 0, ptr @gnum_actions, align 4, !tbaa !9
  store i32 0, ptr %2, align 4, !tbaa !9
  br label %19

19:                                               ; preds = %110, %0
  %20 = load i32, ptr %2, align 4, !tbaa !9
  %21 = load i32, ptr @gnum_predicates, align 4, !tbaa !9
  %22 = icmp slt i32 %20, %21
  br i1 %22, label %23, label %113

23:                                               ; preds = %19
  store i32 1, ptr %1, align 4, !tbaa !9
  store i32 0, ptr %3, align 4, !tbaa !9
  br label %24

24:                                               ; preds = %45, %23
  %25 = load i32, ptr %3, align 4, !tbaa !9
  %26 = load i32, ptr %2, align 4, !tbaa !9
  %27 = sext i32 %26 to i64
  %28 = getelementptr inbounds [50 x i32], ptr @garity, i64 0, i64 %27
  %29 = load i32, ptr %28, align 4, !tbaa !9
  %30 = icmp slt i32 %25, %29
  br i1 %30, label %31, label %48

31:                                               ; preds = %24
  %32 = load i32, ptr %2, align 4, !tbaa !9
  %33 = sext i32 %32 to i64
  %34 = getelementptr inbounds [50 x [5 x i32]], ptr @gpredicates_args_type, i64 0, i64 %33
  %35 = load i32, ptr %3, align 4, !tbaa !9
  %36 = sext i32 %35 to i64
  %37 = getelementptr inbounds [5 x i32], ptr %34, i64 0, i64 %36
  %38 = load i32, ptr %37, align 4, !tbaa !9
  store i32 %38, ptr %7, align 4, !tbaa !9
  %39 = load i32, ptr %7, align 4, !tbaa !9
  %40 = sext i32 %39 to i64
  %41 = getelementptr inbounds [50 x i32], ptr @gtype_size, i64 0, i64 %40
  %42 = load i32, ptr %41, align 4, !tbaa !9
  %43 = load i32, ptr %1, align 4, !tbaa !9
  %44 = mul nsw i32 %43, %42
  store i32 %44, ptr %1, align 4, !tbaa !9
  br label %45

45:                                               ; preds = %31
  %46 = load i32, ptr %3, align 4, !tbaa !9
  %47 = add nsw i32 %46, 1
  store i32 %47, ptr %3, align 4, !tbaa !9
  br label %24, !llvm.loop !11

48:                                               ; preds = %24
  %49 = load i32, ptr %1, align 4, !tbaa !9
  %50 = sext i32 %49 to i64
  %51 = call noalias ptr @calloc(i64 noundef %50, i64 noundef 4) #7
  %52 = load i32, ptr %2, align 4, !tbaa !9
  %53 = sext i32 %52 to i64
  %54 = getelementptr inbounds [50 x ptr], ptr @lpos, i64 0, i64 %53
  store ptr %51, ptr %54, align 8, !tbaa !5
  %55 = load i32, ptr %1, align 4, !tbaa !9
  %56 = sext i32 %55 to i64
  %57 = call noalias ptr @calloc(i64 noundef %56, i64 noundef 4) #7
  %58 = load i32, ptr %2, align 4, !tbaa !9
  %59 = sext i32 %58 to i64
  %60 = getelementptr inbounds [50 x ptr], ptr @lneg, i64 0, i64 %59
  store ptr %57, ptr %60, align 8, !tbaa !5
  %61 = load i32, ptr %1, align 4, !tbaa !9
  %62 = sext i32 %61 to i64
  %63 = call noalias ptr @calloc(i64 noundef %62, i64 noundef 4) #7
  %64 = load i32, ptr %2, align 4, !tbaa !9
  %65 = sext i32 %64 to i64
  %66 = getelementptr inbounds [50 x ptr], ptr @luse, i64 0, i64 %65
  store ptr %63, ptr %66, align 8, !tbaa !5
  %67 = load i32, ptr %1, align 4, !tbaa !9
  %68 = sext i32 %67 to i64
  %69 = call noalias ptr @calloc(i64 noundef %68, i64 noundef 4) #7
  %70 = load i32, ptr %2, align 4, !tbaa !9
  %71 = sext i32 %70 to i64
  %72 = getelementptr inbounds [50 x ptr], ptr @lindex, i64 0, i64 %71
  store ptr %69, ptr %72, align 8, !tbaa !5
  store i32 0, ptr %3, align 4, !tbaa !9
  br label %73

73:                                               ; preds = %106, %48
  %74 = load i32, ptr %3, align 4, !tbaa !9
  %75 = load i32, ptr %1, align 4, !tbaa !9
  %76 = icmp slt i32 %74, %75
  br i1 %76, label %77, label %109

77:                                               ; preds = %73
  %78 = load i32, ptr %2, align 4, !tbaa !9
  %79 = sext i32 %78 to i64
  %80 = getelementptr inbounds [50 x ptr], ptr @lpos, i64 0, i64 %79
  %81 = load ptr, ptr %80, align 8, !tbaa !5
  %82 = load i32, ptr %3, align 4, !tbaa !9
  %83 = sext i32 %82 to i64
  %84 = getelementptr inbounds i32, ptr %81, i64 %83
  store i32 0, ptr %84, align 4, !tbaa !9
  %85 = load i32, ptr %2, align 4, !tbaa !9
  %86 = sext i32 %85 to i64
  %87 = getelementptr inbounds [50 x ptr], ptr @lneg, i64 0, i64 %86
  %88 = load ptr, ptr %87, align 8, !tbaa !5
  %89 = load i32, ptr %3, align 4, !tbaa !9
  %90 = sext i32 %89 to i64
  %91 = getelementptr inbounds i32, ptr %88, i64 %90
  store i32 1, ptr %91, align 4, !tbaa !9
  %92 = load i32, ptr %2, align 4, !tbaa !9
  %93 = sext i32 %92 to i64
  %94 = getelementptr inbounds [50 x ptr], ptr @luse, i64 0, i64 %93
  %95 = load ptr, ptr %94, align 8, !tbaa !5
  %96 = load i32, ptr %3, align 4, !tbaa !9
  %97 = sext i32 %96 to i64
  %98 = getelementptr inbounds i32, ptr %95, i64 %97
  store i32 0, ptr %98, align 4, !tbaa !9
  %99 = load i32, ptr %2, align 4, !tbaa !9
  %100 = sext i32 %99 to i64
  %101 = getelementptr inbounds [50 x ptr], ptr @lindex, i64 0, i64 %100
  %102 = load ptr, ptr %101, align 8, !tbaa !5
  %103 = load i32, ptr %3, align 4, !tbaa !9
  %104 = sext i32 %103 to i64
  %105 = getelementptr inbounds i32, ptr %102, i64 %104
  store i32 -1, ptr %105, align 4, !tbaa !9
  br label %106

106:                                              ; preds = %77
  %107 = load i32, ptr %3, align 4, !tbaa !9
  %108 = add nsw i32 %107, 1
  store i32 %108, ptr %3, align 4, !tbaa !9
  br label %73, !llvm.loop !13

109:                                              ; preds = %73
  br label %110

110:                                              ; preds = %109
  %111 = load i32, ptr %2, align 4, !tbaa !9
  %112 = add nsw i32 %111, 1
  store i32 %112, ptr %2, align 4, !tbaa !9
  br label %19, !llvm.loop !14

113:                                              ; preds = %19
  %114 = load i32, ptr @gnum_hard_templates, align 4, !tbaa !9
  %115 = sext i32 %114 to i64
  %116 = call noalias ptr @calloc(i64 noundef %115, i64 noundef 1) #7
  store ptr %116, ptr %16, align 8, !tbaa !5
  store i32 0, ptr %2, align 4, !tbaa !9
  br label %117

117:                                              ; preds = %126, %113
  %118 = load i32, ptr %2, align 4, !tbaa !9
  %119 = load i32, ptr @gnum_hard_templates, align 4, !tbaa !9
  %120 = icmp slt i32 %118, %119
  br i1 %120, label %121, label %129

121:                                              ; preds = %117
  %122 = load ptr, ptr %16, align 8, !tbaa !5
  %123 = load i32, ptr %2, align 4, !tbaa !9
  %124 = sext i32 %123 to i64
  %125 = getelementptr inbounds i8, ptr %122, i64 %124
  store i8 0, ptr %125, align 1, !tbaa !15
  br label %126

126:                                              ; preds = %121
  %127 = load i32, ptr %2, align 4, !tbaa !9
  %128 = add nsw i32 %127, 1
  store i32 %128, ptr %2, align 4, !tbaa !9
  br label %117, !llvm.loop !16

129:                                              ; preds = %117
  store i32 0, ptr %2, align 4, !tbaa !9
  br label %130

130:                                              ; preds = %192, %129
  %131 = load i32, ptr %2, align 4, !tbaa !9
  %132 = load i32, ptr @gnum_predicates, align 4, !tbaa !9
  %133 = icmp slt i32 %131, %132
  br i1 %133, label %134, label %195

134:                                              ; preds = %130
  %135 = load i32, ptr %2, align 4, !tbaa !9
  store i32 %135, ptr @lp, align 4, !tbaa !9
  store i32 0, ptr %3, align 4, !tbaa !9
  br label %136

136:                                              ; preds = %188, %134
  %137 = load i32, ptr %3, align 4, !tbaa !9
  %138 = load ptr, ptr @gnum_initial_predicate, align 8, !tbaa !5
  %139 = load i32, ptr %2, align 4, !tbaa !9
  %140 = sext i32 %139 to i64
  %141 = getelementptr inbounds i32, ptr %138, i64 %140
  %142 = load i32, ptr %141, align 4, !tbaa !9
  %143 = icmp slt i32 %137, %142
  br i1 %143, label %144, label %191

144:                                              ; preds = %136
  store i32 0, ptr %4, align 4, !tbaa !9
  br label %145

145:                                              ; preds = %169, %144
  %146 = load i32, ptr %4, align 4, !tbaa !9
  %147 = load i32, ptr %2, align 4, !tbaa !9
  %148 = sext i32 %147 to i64
  %149 = getelementptr inbounds [50 x i32], ptr @garity, i64 0, i64 %148
  %150 = load i32, ptr %149, align 4, !tbaa !9
  %151 = icmp slt i32 %146, %150
  br i1 %151, label %152, label %172

152:                                              ; preds = %145
  %153 = load ptr, ptr @ginitial_predicate, align 8, !tbaa !5
  %154 = load i32, ptr %2, align 4, !tbaa !9
  %155 = sext i32 %154 to i64
  %156 = getelementptr inbounds ptr, ptr %153, i64 %155
  %157 = load ptr, ptr %156, align 8, !tbaa !5
  %158 = load i32, ptr %3, align 4, !tbaa !9
  %159 = sext i32 %158 to i64
  %160 = getelementptr inbounds %struct._Fact, ptr %157, i64 %159
  %161 = getelementptr inbounds %struct._Fact, ptr %160, i32 0, i32 1
  %162 = load i32, ptr %4, align 4, !tbaa !9
  %163 = sext i32 %162 to i64
  %164 = getelementptr inbounds [5 x i32], ptr %161, i64 0, i64 %163
  %165 = load i32, ptr %164, align 4, !tbaa !9
  %166 = load i32, ptr %4, align 4, !tbaa !9
  %167 = sext i32 %166 to i64
  %168 = getelementptr inbounds [15 x i32], ptr @largs, i64 0, i64 %167
  store i32 %165, ptr %168, align 4, !tbaa !9
  br label %169

169:                                              ; preds = %152
  %170 = load i32, ptr %4, align 4, !tbaa !9
  %171 = add nsw i32 %170, 1
  store i32 %171, ptr %4, align 4, !tbaa !9
  br label %145, !llvm.loop !17

172:                                              ; preds = %145
  %173 = call i32 @fact_adress()
  store i32 %173, ptr %5, align 4, !tbaa !9
  %174 = load i32, ptr @lp, align 4, !tbaa !9
  %175 = sext i32 %174 to i64
  %176 = getelementptr inbounds [50 x ptr], ptr @lpos, i64 0, i64 %175
  %177 = load ptr, ptr %176, align 8, !tbaa !5
  %178 = load i32, ptr %5, align 4, !tbaa !9
  %179 = sext i32 %178 to i64
  %180 = getelementptr inbounds i32, ptr %177, i64 %179
  store i32 1, ptr %180, align 4, !tbaa !9
  %181 = load i32, ptr @lp, align 4, !tbaa !9
  %182 = sext i32 %181 to i64
  %183 = getelementptr inbounds [50 x ptr], ptr @lneg, i64 0, i64 %182
  %184 = load ptr, ptr %183, align 8, !tbaa !5
  %185 = load i32, ptr %5, align 4, !tbaa !9
  %186 = sext i32 %185 to i64
  %187 = getelementptr inbounds i32, ptr %184, i64 %186
  store i32 0, ptr %187, align 4, !tbaa !9
  br label %188

188:                                              ; preds = %172
  %189 = load i32, ptr %3, align 4, !tbaa !9
  %190 = add nsw i32 %189, 1
  store i32 %190, ptr %3, align 4, !tbaa !9
  br label %136, !llvm.loop !18

191:                                              ; preds = %136
  br label %192

192:                                              ; preds = %191
  %193 = load i32, ptr %2, align 4, !tbaa !9
  %194 = add nsw i32 %193, 1
  store i32 %194, ptr %2, align 4, !tbaa !9
  br label %130, !llvm.loop !19

195:                                              ; preds = %130
  store i8 0, ptr %8, align 1, !tbaa !15
  br label %196

196:                                              ; preds = %856, %195
  %197 = load i8, ptr %8, align 1, !tbaa !15
  %198 = icmp ne i8 %197, 0
  %199 = xor i1 %198, true
  br i1 %199, label %200, label %857

200:                                              ; preds = %196
  store i8 1, ptr %8, align 1, !tbaa !15
  %201 = load ptr, ptr @geasy_templates, align 8, !tbaa !5
  store ptr %201, ptr %11, align 8, !tbaa !5
  br label %202

202:                                              ; preds = %569, %304, %200
  %203 = load ptr, ptr %11, align 8, !tbaa !5
  %204 = icmp ne ptr %203, null
  br i1 %204, label %205, label %572

205:                                              ; preds = %202
  %206 = load ptr, ptr %11, align 8, !tbaa !5
  %207 = getelementptr inbounds %struct._EasyTemplate, ptr %206, i32 0, i32 0
  %208 = load ptr, ptr %207, align 8, !tbaa !20
  store ptr %208, ptr %10, align 8, !tbaa !5
  store i32 0, ptr %2, align 4, !tbaa !9
  br label %209

209:                                              ; preds = %295, %205
  %210 = load i32, ptr %2, align 4, !tbaa !9
  %211 = load ptr, ptr %10, align 8, !tbaa !5
  %212 = getelementptr inbounds %struct._NormOperator, ptr %211, i32 0, i32 8
  %213 = load i32, ptr %212, align 8, !tbaa !22
  %214 = icmp slt i32 %210, %213
  br i1 %214, label %215, label %298

215:                                              ; preds = %209
  %216 = load ptr, ptr %10, align 8, !tbaa !5
  %217 = getelementptr inbounds %struct._NormOperator, ptr %216, i32 0, i32 7
  %218 = load ptr, ptr %217, align 8, !tbaa !24
  %219 = load i32, ptr %2, align 4, !tbaa !9
  %220 = sext i32 %219 to i64
  %221 = getelementptr inbounds %struct._Fact, ptr %218, i64 %220
  %222 = getelementptr inbounds %struct._Fact, ptr %221, i32 0, i32 0
  %223 = load i32, ptr %222, align 4, !tbaa !25
  store i32 %223, ptr @lp, align 4, !tbaa !9
  store i32 0, ptr %3, align 4, !tbaa !9
  br label %224

224:                                              ; preds = %280, %215
  %225 = load i32, ptr %3, align 4, !tbaa !9
  %226 = load i32, ptr @lp, align 4, !tbaa !9
  %227 = sext i32 %226 to i64
  %228 = getelementptr inbounds [50 x i32], ptr @garity, i64 0, i64 %227
  %229 = load i32, ptr %228, align 4, !tbaa !9
  %230 = icmp slt i32 %225, %229
  br i1 %230, label %231, label %283

231:                                              ; preds = %224
  %232 = load ptr, ptr %10, align 8, !tbaa !5
  %233 = getelementptr inbounds %struct._NormOperator, ptr %232, i32 0, i32 7
  %234 = load ptr, ptr %233, align 8, !tbaa !24
  %235 = load i32, ptr %2, align 4, !tbaa !9
  %236 = sext i32 %235 to i64
  %237 = getelementptr inbounds %struct._Fact, ptr %234, i64 %236
  %238 = getelementptr inbounds %struct._Fact, ptr %237, i32 0, i32 1
  %239 = load i32, ptr %3, align 4, !tbaa !9
  %240 = sext i32 %239 to i64
  %241 = getelementptr inbounds [5 x i32], ptr %238, i64 0, i64 %240
  %242 = load i32, ptr %241, align 4, !tbaa !9
  %243 = icmp sge i32 %242, 0
  br i1 %243, label %244, label %256

244:                                              ; preds = %231
  %245 = load ptr, ptr %10, align 8, !tbaa !5
  %246 = getelementptr inbounds %struct._NormOperator, ptr %245, i32 0, i32 7
  %247 = load ptr, ptr %246, align 8, !tbaa !24
  %248 = load i32, ptr %2, align 4, !tbaa !9
  %249 = sext i32 %248 to i64
  %250 = getelementptr inbounds %struct._Fact, ptr %247, i64 %249
  %251 = getelementptr inbounds %struct._Fact, ptr %250, i32 0, i32 1
  %252 = load i32, ptr %3, align 4, !tbaa !9
  %253 = sext i32 %252 to i64
  %254 = getelementptr inbounds [5 x i32], ptr %251, i64 0, i64 %253
  %255 = load i32, ptr %254, align 4, !tbaa !9
  br label %275

256:                                              ; preds = %231
  %257 = load ptr, ptr %11, align 8, !tbaa !5
  %258 = getelementptr inbounds %struct._EasyTemplate, ptr %257, i32 0, i32 1
  %259 = load ptr, ptr %10, align 8, !tbaa !5
  %260 = getelementptr inbounds %struct._NormOperator, ptr %259, i32 0, i32 7
  %261 = load ptr, ptr %260, align 8, !tbaa !24
  %262 = load i32, ptr %2, align 4, !tbaa !9
  %263 = sext i32 %262 to i64
  %264 = getelementptr inbounds %struct._Fact, ptr %261, i64 %263
  %265 = getelementptr inbounds %struct._Fact, ptr %264, i32 0, i32 1
  %266 = load i32, ptr %3, align 4, !tbaa !9
  %267 = sext i32 %266 to i64
  %268 = getelementptr inbounds [5 x i32], ptr %265, i64 0, i64 %267
  %269 = load i32, ptr %268, align 4, !tbaa !9
  %270 = add nsw i32 %269, 1
  %271 = mul nsw i32 %270, -1
  %272 = sext i32 %271 to i64
  %273 = getelementptr inbounds [15 x i32], ptr %258, i64 0, i64 %272
  %274 = load i32, ptr %273, align 4, !tbaa !9
  br label %275

275:                                              ; preds = %256, %244
  %276 = phi i32 [ %255, %244 ], [ %274, %256 ]
  %277 = load i32, ptr %3, align 4, !tbaa !9
  %278 = sext i32 %277 to i64
  %279 = getelementptr inbounds [15 x i32], ptr @largs, i64 0, i64 %278
  store i32 %276, ptr %279, align 4, !tbaa !9
  br label %280

280:                                              ; preds = %275
  %281 = load i32, ptr %3, align 4, !tbaa !9
  %282 = add nsw i32 %281, 1
  store i32 %282, ptr %3, align 4, !tbaa !9
  br label %224, !llvm.loop !27

283:                                              ; preds = %224
  %284 = load i32, ptr @lp, align 4, !tbaa !9
  %285 = sext i32 %284 to i64
  %286 = getelementptr inbounds [50 x ptr], ptr @lpos, i64 0, i64 %285
  %287 = load ptr, ptr %286, align 8, !tbaa !5
  %288 = call i32 @fact_adress()
  %289 = sext i32 %288 to i64
  %290 = getelementptr inbounds i32, ptr %287, i64 %289
  %291 = load i32, ptr %290, align 4, !tbaa !9
  %292 = icmp ne i32 %291, 0
  br i1 %292, label %294, label %293

293:                                              ; preds = %283
  br label %298

294:                                              ; preds = %283
  br label %295

295:                                              ; preds = %294
  %296 = load i32, ptr %2, align 4, !tbaa !9
  %297 = add nsw i32 %296, 1
  store i32 %297, ptr %2, align 4, !tbaa !9
  br label %209, !llvm.loop !28

298:                                              ; preds = %293, %209
  %299 = load i32, ptr %2, align 4, !tbaa !9
  %300 = load ptr, ptr %10, align 8, !tbaa !5
  %301 = getelementptr inbounds %struct._NormOperator, ptr %300, i32 0, i32 8
  %302 = load i32, ptr %301, align 8, !tbaa !22
  %303 = icmp slt i32 %299, %302
  br i1 %303, label %304, label %308

304:                                              ; preds = %298
  %305 = load ptr, ptr %11, align 8, !tbaa !5
  %306 = getelementptr inbounds %struct._EasyTemplate, ptr %305, i32 0, i32 3
  %307 = load ptr, ptr %306, align 8, !tbaa !29
  store ptr %307, ptr %11, align 8, !tbaa !5
  br label %202, !llvm.loop !30

308:                                              ; preds = %298
  store i32 0, ptr %6, align 4, !tbaa !9
  %309 = load ptr, ptr %10, align 8, !tbaa !5
  %310 = getelementptr inbounds %struct._NormOperator, ptr %309, i32 0, i32 13
  %311 = load ptr, ptr %310, align 8, !tbaa !31
  store ptr %311, ptr %13, align 8, !tbaa !5
  br label %312

312:                                              ; preds = %473, %308
  %313 = load ptr, ptr %13, align 8, !tbaa !5
  %314 = icmp ne ptr %313, null
  br i1 %314, label %315, label %477

315:                                              ; preds = %312
  %316 = load i32, ptr %6, align 4, !tbaa !9
  %317 = add nsw i32 %316, 1
  store i32 %317, ptr %6, align 4, !tbaa !9
  store i32 0, ptr %2, align 4, !tbaa !9
  br label %318

318:                                              ; preds = %469, %315
  %319 = load i32, ptr %2, align 4, !tbaa !9
  %320 = load ptr, ptr %13, align 8, !tbaa !5
  %321 = getelementptr inbounds %struct._NormEffect, ptr %320, i32 0, i32 6
  %322 = load i32, ptr %321, align 8, !tbaa !32
  %323 = icmp slt i32 %319, %322
  br i1 %323, label %324, label %472

324:                                              ; preds = %318
  %325 = load ptr, ptr %13, align 8, !tbaa !5
  %326 = getelementptr inbounds %struct._NormEffect, ptr %325, i32 0, i32 5
  %327 = load ptr, ptr %326, align 8, !tbaa !34
  %328 = load i32, ptr %2, align 4, !tbaa !9
  %329 = sext i32 %328 to i64
  %330 = getelementptr inbounds %struct._Fact, ptr %327, i64 %329
  %331 = getelementptr inbounds %struct._Fact, ptr %330, i32 0, i32 0
  %332 = load i32, ptr %331, align 4, !tbaa !25
  store i32 %332, ptr @lp, align 4, !tbaa !9
  store i32 0, ptr %3, align 4, !tbaa !9
  br label %333

333:                                              ; preds = %389, %324
  %334 = load i32, ptr %3, align 4, !tbaa !9
  %335 = load i32, ptr @lp, align 4, !tbaa !9
  %336 = sext i32 %335 to i64
  %337 = getelementptr inbounds [50 x i32], ptr @garity, i64 0, i64 %336
  %338 = load i32, ptr %337, align 4, !tbaa !9
  %339 = icmp slt i32 %334, %338
  br i1 %339, label %340, label %392

340:                                              ; preds = %333
  %341 = load ptr, ptr %13, align 8, !tbaa !5
  %342 = getelementptr inbounds %struct._NormEffect, ptr %341, i32 0, i32 5
  %343 = load ptr, ptr %342, align 8, !tbaa !34
  %344 = load i32, ptr %2, align 4, !tbaa !9
  %345 = sext i32 %344 to i64
  %346 = getelementptr inbounds %struct._Fact, ptr %343, i64 %345
  %347 = getelementptr inbounds %struct._Fact, ptr %346, i32 0, i32 1
  %348 = load i32, ptr %3, align 4, !tbaa !9
  %349 = sext i32 %348 to i64
  %350 = getelementptr inbounds [5 x i32], ptr %347, i64 0, i64 %349
  %351 = load i32, ptr %350, align 4, !tbaa !9
  %352 = icmp sge i32 %351, 0
  br i1 %352, label %353, label %365

353:                                              ; preds = %340
  %354 = load ptr, ptr %13, align 8, !tbaa !5
  %355 = getelementptr inbounds %struct._NormEffect, ptr %354, i32 0, i32 5
  %356 = load ptr, ptr %355, align 8, !tbaa !34
  %357 = load i32, ptr %2, align 4, !tbaa !9
  %358 = sext i32 %357 to i64
  %359 = getelementptr inbounds %struct._Fact, ptr %356, i64 %358
  %360 = getelementptr inbounds %struct._Fact, ptr %359, i32 0, i32 1
  %361 = load i32, ptr %3, align 4, !tbaa !9
  %362 = sext i32 %361 to i64
  %363 = getelementptr inbounds [5 x i32], ptr %360, i64 0, i64 %362
  %364 = load i32, ptr %363, align 4, !tbaa !9
  br label %384

365:                                              ; preds = %340
  %366 = load ptr, ptr %11, align 8, !tbaa !5
  %367 = getelementptr inbounds %struct._EasyTemplate, ptr %366, i32 0, i32 1
  %368 = load ptr, ptr %13, align 8, !tbaa !5
  %369 = getelementptr inbounds %struct._NormEffect, ptr %368, i32 0, i32 5
  %370 = load ptr, ptr %369, align 8, !tbaa !34
  %371 = load i32, ptr %2, align 4, !tbaa !9
  %372 = sext i32 %371 to i64
  %373 = getelementptr inbounds %struct._Fact, ptr %370, i64 %372
  %374 = getelementptr inbounds %struct._Fact, ptr %373, i32 0, i32 1
  %375 = load i32, ptr %3, align 4, !tbaa !9
  %376 = sext i32 %375 to i64
  %377 = getelementptr inbounds [5 x i32], ptr %374, i64 0, i64 %376
  %378 = load i32, ptr %377, align 4, !tbaa !9
  %379 = add nsw i32 %378, 1
  %380 = mul nsw i32 %379, -1
  %381 = sext i32 %380 to i64
  %382 = getelementptr inbounds [15 x i32], ptr %367, i64 0, i64 %381
  %383 = load i32, ptr %382, align 4, !tbaa !9
  br label %384

384:                                              ; preds = %365, %353
  %385 = phi i32 [ %364, %353 ], [ %383, %365 ]
  %386 = load i32, ptr %3, align 4, !tbaa !9
  %387 = sext i32 %386 to i64
  %388 = getelementptr inbounds [15 x i32], ptr @largs, i64 0, i64 %387
  store i32 %385, ptr %388, align 4, !tbaa !9
  br label %389

389:                                              ; preds = %384
  %390 = load i32, ptr %3, align 4, !tbaa !9
  %391 = add nsw i32 %390, 1
  store i32 %391, ptr %3, align 4, !tbaa !9
  br label %333, !llvm.loop !35

392:                                              ; preds = %333
  %393 = call i32 @fact_adress()
  store i32 %393, ptr %5, align 4, !tbaa !9
  %394 = load i32, ptr @lp, align 4, !tbaa !9
  %395 = sext i32 %394 to i64
  %396 = getelementptr inbounds [50 x ptr], ptr @lpos, i64 0, i64 %395
  %397 = load ptr, ptr %396, align 8, !tbaa !5
  %398 = load i32, ptr %5, align 4, !tbaa !9
  %399 = sext i32 %398 to i64
  %400 = getelementptr inbounds i32, ptr %397, i64 %399
  %401 = load i32, ptr %400, align 4, !tbaa !9
  %402 = icmp ne i32 %401, 0
  br i1 %402, label %468, label %403

403:                                              ; preds = %392
  %404 = load i32, ptr @lp, align 4, !tbaa !9
  %405 = sext i32 %404 to i64
  %406 = getelementptr inbounds [50 x ptr], ptr @lpos, i64 0, i64 %405
  %407 = load ptr, ptr %406, align 8, !tbaa !5
  %408 = load i32, ptr %5, align 4, !tbaa !9
  %409 = sext i32 %408 to i64
  %410 = getelementptr inbounds i32, ptr %407, i64 %409
  store i32 1, ptr %410, align 4, !tbaa !9
  %411 = load i32, ptr @lp, align 4, !tbaa !9
  %412 = sext i32 %411 to i64
  %413 = getelementptr inbounds [50 x ptr], ptr @lneg, i64 0, i64 %412
  %414 = load ptr, ptr %413, align 8, !tbaa !5
  %415 = load i32, ptr %5, align 4, !tbaa !9
  %416 = sext i32 %415 to i64
  %417 = getelementptr inbounds i32, ptr %414, i64 %416
  store i32 1, ptr %417, align 4, !tbaa !9
  %418 = load i32, ptr @lp, align 4, !tbaa !9
  %419 = sext i32 %418 to i64
  %420 = getelementptr inbounds [50 x ptr], ptr @luse, i64 0, i64 %419
  %421 = load ptr, ptr %420, align 8, !tbaa !5
  %422 = load i32, ptr %5, align 4, !tbaa !9
  %423 = sext i32 %422 to i64
  %424 = getelementptr inbounds i32, ptr %421, i64 %423
  store i32 1, ptr %424, align 4, !tbaa !9
  %425 = load i32, ptr @gnum_relevant_facts, align 4, !tbaa !9
  %426 = icmp eq i32 %425, 150000
  br i1 %426, label %427, label %429

427:                                              ; preds = %403
  %428 = call i32 (ptr, ...) @printf(ptr noundef @.str, i32 noundef 150000)
  call void @exit(i32 noundef 1) #8
  unreachable

429:                                              ; preds = %403
  %430 = load i32, ptr @lp, align 4, !tbaa !9
  %431 = load i32, ptr @gnum_relevant_facts, align 4, !tbaa !9
  %432 = sext i32 %431 to i64
  %433 = getelementptr inbounds [150000 x %struct._Fact], ptr @grelevant_facts, i64 0, i64 %432
  %434 = getelementptr inbounds %struct._Fact, ptr %433, i32 0, i32 0
  store i32 %430, ptr %434, align 8, !tbaa !25
  store i32 0, ptr %3, align 4, !tbaa !9
  br label %435

435:                                              ; preds = %454, %429
  %436 = load i32, ptr %3, align 4, !tbaa !9
  %437 = load i32, ptr @lp, align 4, !tbaa !9
  %438 = sext i32 %437 to i64
  %439 = getelementptr inbounds [50 x i32], ptr @garity, i64 0, i64 %438
  %440 = load i32, ptr %439, align 4, !tbaa !9
  %441 = icmp slt i32 %436, %440
  br i1 %441, label %442, label %457

442:                                              ; preds = %435
  %443 = load i32, ptr %3, align 4, !tbaa !9
  %444 = sext i32 %443 to i64
  %445 = getelementptr inbounds [15 x i32], ptr @largs, i64 0, i64 %444
  %446 = load i32, ptr %445, align 4, !tbaa !9
  %447 = load i32, ptr @gnum_relevant_facts, align 4, !tbaa !9
  %448 = sext i32 %447 to i64
  %449 = getelementptr inbounds [150000 x %struct._Fact], ptr @grelevant_facts, i64 0, i64 %448
  %450 = getelementptr inbounds %struct._Fact, ptr %449, i32 0, i32 1
  %451 = load i32, ptr %3, align 4, !tbaa !9
  %452 = sext i32 %451 to i64
  %453 = getelementptr inbounds [5 x i32], ptr %450, i64 0, i64 %452
  store i32 %446, ptr %453, align 4, !tbaa !9
  br label %454

454:                                              ; preds = %442
  %455 = load i32, ptr %3, align 4, !tbaa !9
  %456 = add nsw i32 %455, 1
  store i32 %456, ptr %3, align 4, !tbaa !9
  br label %435, !llvm.loop !36

457:                                              ; preds = %435
  %458 = load i32, ptr @gnum_relevant_facts, align 4, !tbaa !9
  %459 = load i32, ptr @lp, align 4, !tbaa !9
  %460 = sext i32 %459 to i64
  %461 = getelementptr inbounds [50 x ptr], ptr @lindex, i64 0, i64 %460
  %462 = load ptr, ptr %461, align 8, !tbaa !5
  %463 = load i32, ptr %5, align 4, !tbaa !9
  %464 = sext i32 %463 to i64
  %465 = getelementptr inbounds i32, ptr %462, i64 %464
  store i32 %458, ptr %465, align 4, !tbaa !9
  %466 = load i32, ptr @gnum_relevant_facts, align 4, !tbaa !9
  %467 = add nsw i32 %466, 1
  store i32 %467, ptr @gnum_relevant_facts, align 4, !tbaa !9
  store i8 0, ptr %8, align 1, !tbaa !15
  br label %468

468:                                              ; preds = %457, %392
  br label %469

469:                                              ; preds = %468
  %470 = load i32, ptr %2, align 4, !tbaa !9
  %471 = add nsw i32 %470, 1
  store i32 %471, ptr %2, align 4, !tbaa !9
  br label %318, !llvm.loop !37

472:                                              ; preds = %318
  br label %473

473:                                              ; preds = %472
  %474 = load ptr, ptr %13, align 8, !tbaa !5
  %475 = getelementptr inbounds %struct._NormEffect, ptr %474, i32 0, i32 18
  %476 = load ptr, ptr %475, align 8, !tbaa !38
  store ptr %476, ptr %13, align 8, !tbaa !5
  br label %312, !llvm.loop !39

477:                                              ; preds = %312
  %478 = call ptr @new_Action()
  store ptr %478, ptr %14, align 8, !tbaa !5
  %479 = load ptr, ptr %10, align 8, !tbaa !5
  %480 = load ptr, ptr %14, align 8, !tbaa !5
  %481 = getelementptr inbounds %struct._Action, ptr %480, i32 0, i32 0
  store ptr %479, ptr %481, align 8, !tbaa !40
  %482 = load ptr, ptr %10, align 8, !tbaa !5
  %483 = getelementptr inbounds %struct._NormOperator, ptr %482, i32 0, i32 0
  %484 = load ptr, ptr %483, align 8, !tbaa !42
  %485 = getelementptr inbounds %struct._Operator, ptr %484, i32 0, i32 3
  %486 = load i8, ptr %485, align 4, !tbaa !43
  %487 = load ptr, ptr %14, align 8, !tbaa !5
  %488 = getelementptr inbounds %struct._Action, ptr %487, i32 0, i32 2
  store i8 %486, ptr %488, align 8, !tbaa !45
  store i32 0, ptr %2, align 4, !tbaa !9
  br label %489

489:                                              ; preds = %507, %477
  %490 = load i32, ptr %2, align 4, !tbaa !9
  %491 = load ptr, ptr %10, align 8, !tbaa !5
  %492 = getelementptr inbounds %struct._NormOperator, ptr %491, i32 0, i32 1
  %493 = load i32, ptr %492, align 8, !tbaa !46
  %494 = icmp slt i32 %490, %493
  br i1 %494, label %495, label %510

495:                                              ; preds = %489
  %496 = load ptr, ptr %11, align 8, !tbaa !5
  %497 = getelementptr inbounds %struct._EasyTemplate, ptr %496, i32 0, i32 1
  %498 = load i32, ptr %2, align 4, !tbaa !9
  %499 = sext i32 %498 to i64
  %500 = getelementptr inbounds [15 x i32], ptr %497, i64 0, i64 %499
  %501 = load i32, ptr %500, align 4, !tbaa !9
  %502 = load ptr, ptr %14, align 8, !tbaa !5
  %503 = getelementptr inbounds %struct._Action, ptr %502, i32 0, i32 6
  %504 = load i32, ptr %2, align 4, !tbaa !9
  %505 = sext i32 %504 to i64
  %506 = getelementptr inbounds [15 x i32], ptr %503, i64 0, i64 %505
  store i32 %501, ptr %506, align 4, !tbaa !9
  br label %507

507:                                              ; preds = %495
  %508 = load i32, ptr %2, align 4, !tbaa !9
  %509 = add nsw i32 %508, 1
  store i32 %509, ptr %2, align 4, !tbaa !9
  br label %489, !llvm.loop !47

510:                                              ; preds = %489
  %511 = load ptr, ptr %10, align 8, !tbaa !5
  %512 = getelementptr inbounds %struct._NormOperator, ptr %511, i32 0, i32 0
  %513 = load ptr, ptr %512, align 8, !tbaa !42
  %514 = getelementptr inbounds %struct._Operator, ptr %513, i32 0, i32 0
  %515 = load ptr, ptr %514, align 8, !tbaa !48
  %516 = load ptr, ptr %14, align 8, !tbaa !5
  %517 = getelementptr inbounds %struct._Action, ptr %516, i32 0, i32 3
  store ptr %515, ptr %517, align 8, !tbaa !49
  %518 = load ptr, ptr %10, align 8, !tbaa !5
  %519 = getelementptr inbounds %struct._NormOperator, ptr %518, i32 0, i32 0
  %520 = load ptr, ptr %519, align 8, !tbaa !42
  %521 = getelementptr inbounds %struct._Operator, ptr %520, i32 0, i32 2
  %522 = load i32, ptr %521, align 8, !tbaa !50
  %523 = load ptr, ptr %14, align 8, !tbaa !5
  %524 = getelementptr inbounds %struct._Action, ptr %523, i32 0, i32 4
  store i32 %522, ptr %524, align 8, !tbaa !51
  %525 = load ptr, ptr %14, align 8, !tbaa !5
  %526 = load ptr, ptr %10, align 8, !tbaa !5
  %527 = load ptr, ptr %11, align 8, !tbaa !5
  call void @make_name_inst_table_from_NormOperator(ptr noundef %525, ptr noundef %526, ptr noundef %527)
  %528 = load ptr, ptr @gactions, align 8, !tbaa !5
  %529 = load ptr, ptr %14, align 8, !tbaa !5
  %530 = getelementptr inbounds %struct._Action, ptr %529, i32 0, i32 19
  store ptr %528, ptr %530, align 8, !tbaa !52
  %531 = load i32, ptr %6, align 4, !tbaa !9
  %532 = load ptr, ptr %14, align 8, !tbaa !5
  %533 = getelementptr inbounds %struct._Action, ptr %532, i32 0, i32 18
  store i32 %531, ptr %533, align 8, !tbaa !53
  %534 = load ptr, ptr %14, align 8, !tbaa !5
  store ptr %534, ptr @gactions, align 8, !tbaa !5
  %535 = load i32, ptr @gnum_actions, align 4, !tbaa !9
  %536 = add nsw i32 %535, 1
  store i32 %536, ptr @gnum_actions, align 4, !tbaa !9
  %537 = load ptr, ptr %11, align 8, !tbaa !5
  %538 = getelementptr inbounds %struct._EasyTemplate, ptr %537, i32 0, i32 3
  %539 = load ptr, ptr %538, align 8, !tbaa !29
  store ptr %539, ptr %12, align 8, !tbaa !5
  %540 = load ptr, ptr %11, align 8, !tbaa !5
  %541 = getelementptr inbounds %struct._EasyTemplate, ptr %540, i32 0, i32 3
  %542 = load ptr, ptr %541, align 8, !tbaa !29
  %543 = icmp ne ptr %542, null
  br i1 %543, label %544, label %552

544:                                              ; preds = %510
  %545 = load ptr, ptr %11, align 8, !tbaa !5
  %546 = getelementptr inbounds %struct._EasyTemplate, ptr %545, i32 0, i32 2
  %547 = load ptr, ptr %546, align 8, !tbaa !54
  %548 = load ptr, ptr %11, align 8, !tbaa !5
  %549 = getelementptr inbounds %struct._EasyTemplate, ptr %548, i32 0, i32 3
  %550 = load ptr, ptr %549, align 8, !tbaa !29
  %551 = getelementptr inbounds %struct._EasyTemplate, ptr %550, i32 0, i32 2
  store ptr %547, ptr %551, align 8, !tbaa !54
  br label %552

552:                                              ; preds = %544, %510
  %553 = load ptr, ptr %11, align 8, !tbaa !5
  %554 = getelementptr inbounds %struct._EasyTemplate, ptr %553, i32 0, i32 2
  %555 = load ptr, ptr %554, align 8, !tbaa !54
  %556 = icmp ne ptr %555, null
  br i1 %556, label %557, label %565

557:                                              ; preds = %552
  %558 = load ptr, ptr %11, align 8, !tbaa !5
  %559 = getelementptr inbounds %struct._EasyTemplate, ptr %558, i32 0, i32 3
  %560 = load ptr, ptr %559, align 8, !tbaa !29
  %561 = load ptr, ptr %11, align 8, !tbaa !5
  %562 = getelementptr inbounds %struct._EasyTemplate, ptr %561, i32 0, i32 2
  %563 = load ptr, ptr %562, align 8, !tbaa !54
  %564 = getelementptr inbounds %struct._EasyTemplate, ptr %563, i32 0, i32 3
  store ptr %560, ptr %564, align 8, !tbaa !29
  br label %569

565:                                              ; preds = %552
  %566 = load ptr, ptr %11, align 8, !tbaa !5
  %567 = getelementptr inbounds %struct._EasyTemplate, ptr %566, i32 0, i32 3
  %568 = load ptr, ptr %567, align 8, !tbaa !29
  store ptr %568, ptr @geasy_templates, align 8, !tbaa !5
  br label %569

569:                                              ; preds = %565, %557
  %570 = load ptr, ptr %11, align 8, !tbaa !5
  call void @free_single_EasyTemplate(ptr noundef %570)
  %571 = load ptr, ptr %12, align 8, !tbaa !5
  store ptr %571, ptr %11, align 8, !tbaa !5
  br label %202, !llvm.loop !30

572:                                              ; preds = %202
  store i32 0, ptr %2, align 4, !tbaa !9
  br label %573

573:                                              ; preds = %853, %572
  %574 = load i32, ptr %2, align 4, !tbaa !9
  %575 = load i32, ptr @gnum_hard_templates, align 4, !tbaa !9
  %576 = icmp slt i32 %574, %575
  br i1 %576, label %577, label %856

577:                                              ; preds = %573
  %578 = load ptr, ptr %16, align 8, !tbaa !5
  %579 = load i32, ptr %2, align 4, !tbaa !9
  %580 = sext i32 %579 to i64
  %581 = getelementptr inbounds i8, ptr %578, i64 %580
  %582 = load i8, ptr %581, align 1, !tbaa !15
  %583 = icmp ne i8 %582, 0
  br i1 %583, label %584, label %585

584:                                              ; preds = %577
  br label %853

585:                                              ; preds = %577
  %586 = load ptr, ptr @ghard_templates, align 8, !tbaa !5
  %587 = load i32, ptr %2, align 4, !tbaa !9
  %588 = sext i32 %587 to i64
  %589 = getelementptr inbounds ptr, ptr %586, i64 %588
  %590 = load ptr, ptr %589, align 8, !tbaa !5
  store ptr %590, ptr %17, align 8, !tbaa !5
  store i32 0, ptr %3, align 4, !tbaa !9
  br label %591

591:                                              ; preds = %643, %585
  %592 = load i32, ptr %3, align 4, !tbaa !9
  %593 = load ptr, ptr %17, align 8, !tbaa !5
  %594 = getelementptr inbounds %struct._PseudoAction, ptr %593, i32 0, i32 3
  %595 = load i32, ptr %594, align 8, !tbaa !55
  %596 = icmp slt i32 %592, %595
  br i1 %596, label %597, label %646

597:                                              ; preds = %591
  %598 = load ptr, ptr %17, align 8, !tbaa !5
  %599 = getelementptr inbounds %struct._PseudoAction, ptr %598, i32 0, i32 2
  %600 = load ptr, ptr %599, align 8, !tbaa !57
  %601 = load i32, ptr %3, align 4, !tbaa !9
  %602 = sext i32 %601 to i64
  %603 = getelementptr inbounds %struct._Fact, ptr %600, i64 %602
  %604 = getelementptr inbounds %struct._Fact, ptr %603, i32 0, i32 0
  %605 = load i32, ptr %604, align 4, !tbaa !25
  store i32 %605, ptr @lp, align 4, !tbaa !9
  store i32 0, ptr %4, align 4, !tbaa !9
  br label %606

606:                                              ; preds = %628, %597
  %607 = load i32, ptr %4, align 4, !tbaa !9
  %608 = load i32, ptr @lp, align 4, !tbaa !9
  %609 = sext i32 %608 to i64
  %610 = getelementptr inbounds [50 x i32], ptr @garity, i64 0, i64 %609
  %611 = load i32, ptr %610, align 4, !tbaa !9
  %612 = icmp slt i32 %607, %611
  br i1 %612, label %613, label %631

613:                                              ; preds = %606
  %614 = load ptr, ptr %17, align 8, !tbaa !5
  %615 = getelementptr inbounds %struct._PseudoAction, ptr %614, i32 0, i32 2
  %616 = load ptr, ptr %615, align 8, !tbaa !57
  %617 = load i32, ptr %3, align 4, !tbaa !9
  %618 = sext i32 %617 to i64
  %619 = getelementptr inbounds %struct._Fact, ptr %616, i64 %618
  %620 = getelementptr inbounds %struct._Fact, ptr %619, i32 0, i32 1
  %621 = load i32, ptr %4, align 4, !tbaa !9
  %622 = sext i32 %621 to i64
  %623 = getelementptr inbounds [5 x i32], ptr %620, i64 0, i64 %622
  %624 = load i32, ptr %623, align 4, !tbaa !9
  %625 = load i32, ptr %4, align 4, !tbaa !9
  %626 = sext i32 %625 to i64
  %627 = getelementptr inbounds [15 x i32], ptr @largs, i64 0, i64 %626
  store i32 %624, ptr %627, align 4, !tbaa !9
  br label %628

628:                                              ; preds = %613
  %629 = load i32, ptr %4, align 4, !tbaa !9
  %630 = add nsw i32 %629, 1
  store i32 %630, ptr %4, align 4, !tbaa !9
  br label %606, !llvm.loop !58

631:                                              ; preds = %606
  %632 = load i32, ptr @lp, align 4, !tbaa !9
  %633 = sext i32 %632 to i64
  %634 = getelementptr inbounds [50 x ptr], ptr @lpos, i64 0, i64 %633
  %635 = load ptr, ptr %634, align 8, !tbaa !5
  %636 = call i32 @fact_adress()
  %637 = sext i32 %636 to i64
  %638 = getelementptr inbounds i32, ptr %635, i64 %637
  %639 = load i32, ptr %638, align 4, !tbaa !9
  %640 = icmp ne i32 %639, 0
  br i1 %640, label %642, label %641

641:                                              ; preds = %631
  br label %646

642:                                              ; preds = %631
  br label %643

643:                                              ; preds = %642
  %644 = load i32, ptr %3, align 4, !tbaa !9
  %645 = add nsw i32 %644, 1
  store i32 %645, ptr %3, align 4, !tbaa !9
  br label %591, !llvm.loop !59

646:                                              ; preds = %641, %591
  %647 = load i32, ptr %3, align 4, !tbaa !9
  %648 = load ptr, ptr %17, align 8, !tbaa !5
  %649 = getelementptr inbounds %struct._PseudoAction, ptr %648, i32 0, i32 3
  %650 = load i32, ptr %649, align 8, !tbaa !55
  %651 = icmp slt i32 %647, %650
  br i1 %651, label %652, label %653

652:                                              ; preds = %646
  br label %853

653:                                              ; preds = %646
  %654 = load ptr, ptr %17, align 8, !tbaa !5
  %655 = getelementptr inbounds %struct._PseudoAction, ptr %654, i32 0, i32 8
  %656 = load ptr, ptr %655, align 8, !tbaa !60
  store ptr %656, ptr %18, align 8, !tbaa !5
  br label %657

657:                                              ; preds = %782, %653
  %658 = load ptr, ptr %18, align 8, !tbaa !5
  %659 = icmp ne ptr %658, null
  br i1 %659, label %660, label %786

660:                                              ; preds = %657
  store i32 0, ptr %3, align 4, !tbaa !9
  br label %661

661:                                              ; preds = %778, %660
  %662 = load i32, ptr %3, align 4, !tbaa !9
  %663 = load ptr, ptr %18, align 8, !tbaa !5
  %664 = getelementptr inbounds %struct._PseudoActionEffect, ptr %663, i32 0, i32 3
  %665 = load i32, ptr %664, align 8, !tbaa !61
  %666 = icmp slt i32 %662, %665
  br i1 %666, label %667, label %781

667:                                              ; preds = %661
  %668 = load ptr, ptr %18, align 8, !tbaa !5
  %669 = getelementptr inbounds %struct._PseudoActionEffect, ptr %668, i32 0, i32 2
  %670 = load ptr, ptr %669, align 8, !tbaa !63
  %671 = load i32, ptr %3, align 4, !tbaa !9
  %672 = sext i32 %671 to i64
  %673 = getelementptr inbounds %struct._Fact, ptr %670, i64 %672
  %674 = getelementptr inbounds %struct._Fact, ptr %673, i32 0, i32 0
  %675 = load i32, ptr %674, align 4, !tbaa !25
  store i32 %675, ptr @lp, align 4, !tbaa !9
  store i32 0, ptr %4, align 4, !tbaa !9
  br label %676

676:                                              ; preds = %698, %667
  %677 = load i32, ptr %4, align 4, !tbaa !9
  %678 = load i32, ptr @lp, align 4, !tbaa !9
  %679 = sext i32 %678 to i64
  %680 = getelementptr inbounds [50 x i32], ptr @garity, i64 0, i64 %679
  %681 = load i32, ptr %680, align 4, !tbaa !9
  %682 = icmp slt i32 %677, %681
  br i1 %682, label %683, label %701

683:                                              ; preds = %676
  %684 = load ptr, ptr %18, align 8, !tbaa !5
  %685 = getelementptr inbounds %struct._PseudoActionEffect, ptr %684, i32 0, i32 2
  %686 = load ptr, ptr %685, align 8, !tbaa !63
  %687 = load i32, ptr %3, align 4, !tbaa !9
  %688 = sext i32 %687 to i64
  %689 = getelementptr inbounds %struct._Fact, ptr %686, i64 %688
  %690 = getelementptr inbounds %struct._Fact, ptr %689, i32 0, i32 1
  %691 = load i32, ptr %4, align 4, !tbaa !9
  %692 = sext i32 %691 to i64
  %693 = getelementptr inbounds [5 x i32], ptr %690, i64 0, i64 %692
  %694 = load i32, ptr %693, align 4, !tbaa !9
  %695 = load i32, ptr %4, align 4, !tbaa !9
  %696 = sext i32 %695 to i64
  %697 = getelementptr inbounds [15 x i32], ptr @largs, i64 0, i64 %696
  store i32 %694, ptr %697, align 4, !tbaa !9
  br label %698

698:                                              ; preds = %683
  %699 = load i32, ptr %4, align 4, !tbaa !9
  %700 = add nsw i32 %699, 1
  store i32 %700, ptr %4, align 4, !tbaa !9
  br label %676, !llvm.loop !64

701:                                              ; preds = %676
  %702 = call i32 @fact_adress()
  store i32 %702, ptr %5, align 4, !tbaa !9
  %703 = load i32, ptr @lp, align 4, !tbaa !9
  %704 = sext i32 %703 to i64
  %705 = getelementptr inbounds [50 x ptr], ptr @lpos, i64 0, i64 %704
  %706 = load ptr, ptr %705, align 8, !tbaa !5
  %707 = load i32, ptr %5, align 4, !tbaa !9
  %708 = sext i32 %707 to i64
  %709 = getelementptr inbounds i32, ptr %706, i64 %708
  %710 = load i32, ptr %709, align 4, !tbaa !9
  %711 = icmp ne i32 %710, 0
  br i1 %711, label %777, label %712

712:                                              ; preds = %701
  %713 = load i32, ptr @lp, align 4, !tbaa !9
  %714 = sext i32 %713 to i64
  %715 = getelementptr inbounds [50 x ptr], ptr @lpos, i64 0, i64 %714
  %716 = load ptr, ptr %715, align 8, !tbaa !5
  %717 = load i32, ptr %5, align 4, !tbaa !9
  %718 = sext i32 %717 to i64
  %719 = getelementptr inbounds i32, ptr %716, i64 %718
  store i32 1, ptr %719, align 4, !tbaa !9
  %720 = load i32, ptr @lp, align 4, !tbaa !9
  %721 = sext i32 %720 to i64
  %722 = getelementptr inbounds [50 x ptr], ptr @lneg, i64 0, i64 %721
  %723 = load ptr, ptr %722, align 8, !tbaa !5
  %724 = load i32, ptr %5, align 4, !tbaa !9
  %725 = sext i32 %724 to i64
  %726 = getelementptr inbounds i32, ptr %723, i64 %725
  store i32 1, ptr %726, align 4, !tbaa !9
  %727 = load i32, ptr @lp, align 4, !tbaa !9
  %728 = sext i32 %727 to i64
  %729 = getelementptr inbounds [50 x ptr], ptr @luse, i64 0, i64 %728
  %730 = load ptr, ptr %729, align 8, !tbaa !5
  %731 = load i32, ptr %5, align 4, !tbaa !9
  %732 = sext i32 %731 to i64
  %733 = getelementptr inbounds i32, ptr %730, i64 %732
  store i32 1, ptr %733, align 4, !tbaa !9
  %734 = load i32, ptr @gnum_relevant_facts, align 4, !tbaa !9
  %735 = icmp eq i32 %734, 150000
  br i1 %735, label %736, label %738

736:                                              ; preds = %712
  %737 = call i32 (ptr, ...) @printf(ptr noundef @.str, i32 noundef 150000)
  call void @exit(i32 noundef 1) #8
  unreachable

738:                                              ; preds = %712
  %739 = load i32, ptr @lp, align 4, !tbaa !9
  %740 = load i32, ptr @gnum_relevant_facts, align 4, !tbaa !9
  %741 = sext i32 %740 to i64
  %742 = getelementptr inbounds [150000 x %struct._Fact], ptr @grelevant_facts, i64 0, i64 %741
  %743 = getelementptr inbounds %struct._Fact, ptr %742, i32 0, i32 0
  store i32 %739, ptr %743, align 8, !tbaa !25
  store i32 0, ptr %4, align 4, !tbaa !9
  br label %744

744:                                              ; preds = %763, %738
  %745 = load i32, ptr %4, align 4, !tbaa !9
  %746 = load i32, ptr @lp, align 4, !tbaa !9
  %747 = sext i32 %746 to i64
  %748 = getelementptr inbounds [50 x i32], ptr @garity, i64 0, i64 %747
  %749 = load i32, ptr %748, align 4, !tbaa !9
  %750 = icmp slt i32 %745, %749
  br i1 %750, label %751, label %766

751:                                              ; preds = %744
  %752 = load i32, ptr %4, align 4, !tbaa !9
  %753 = sext i32 %752 to i64
  %754 = getelementptr inbounds [15 x i32], ptr @largs, i64 0, i64 %753
  %755 = load i32, ptr %754, align 4, !tbaa !9
  %756 = load i32, ptr @gnum_relevant_facts, align 4, !tbaa !9
  %757 = sext i32 %756 to i64
  %758 = getelementptr inbounds [150000 x %struct._Fact], ptr @grelevant_facts, i64 0, i64 %757
  %759 = getelementptr inbounds %struct._Fact, ptr %758, i32 0, i32 1
  %760 = load i32, ptr %4, align 4, !tbaa !9
  %761 = sext i32 %760 to i64
  %762 = getelementptr inbounds [5 x i32], ptr %759, i64 0, i64 %761
  store i32 %755, ptr %762, align 4, !tbaa !9
  br label %763

763:                                              ; preds = %751
  %764 = load i32, ptr %4, align 4, !tbaa !9
  %765 = add nsw i32 %764, 1
  store i32 %765, ptr %4, align 4, !tbaa !9
  br label %744, !llvm.loop !65

766:                                              ; preds = %744
  %767 = load i32, ptr @gnum_relevant_facts, align 4, !tbaa !9
  %768 = load i32, ptr @lp, align 4, !tbaa !9
  %769 = sext i32 %768 to i64
  %770 = getelementptr inbounds [50 x ptr], ptr @lindex, i64 0, i64 %769
  %771 = load ptr, ptr %770, align 8, !tbaa !5
  %772 = load i32, ptr %5, align 4, !tbaa !9
  %773 = sext i32 %772 to i64
  %774 = getelementptr inbounds i32, ptr %771, i64 %773
  store i32 %767, ptr %774, align 4, !tbaa !9
  %775 = load i32, ptr @gnum_relevant_facts, align 4, !tbaa !9
  %776 = add nsw i32 %775, 1
  store i32 %776, ptr @gnum_relevant_facts, align 4, !tbaa !9
  store i8 0, ptr %8, align 1, !tbaa !15
  br label %777

777:                                              ; preds = %766, %701
  br label %778

778:                                              ; preds = %777
  %779 = load i32, ptr %3, align 4, !tbaa !9
  %780 = add nsw i32 %779, 1
  store i32 %780, ptr %3, align 4, !tbaa !9
  br label %661, !llvm.loop !66

781:                                              ; preds = %661
  br label %782

782:                                              ; preds = %781
  %783 = load ptr, ptr %18, align 8, !tbaa !5
  %784 = getelementptr inbounds %struct._PseudoActionEffect, ptr %783, i32 0, i32 14
  %785 = load ptr, ptr %784, align 8, !tbaa !67
  store ptr %785, ptr %18, align 8, !tbaa !5
  br label %657, !llvm.loop !68

786:                                              ; preds = %657
  %787 = call ptr @new_Action()
  store ptr %787, ptr %14, align 8, !tbaa !5
  %788 = load ptr, ptr %17, align 8, !tbaa !5
  %789 = load ptr, ptr %14, align 8, !tbaa !5
  %790 = getelementptr inbounds %struct._Action, ptr %789, i32 0, i32 1
  store ptr %788, ptr %790, align 8, !tbaa !69
  %791 = load ptr, ptr %17, align 8, !tbaa !5
  %792 = getelementptr inbounds %struct._PseudoAction, ptr %791, i32 0, i32 0
  %793 = load ptr, ptr %792, align 8, !tbaa !70
  %794 = getelementptr inbounds %struct._Operator, ptr %793, i32 0, i32 3
  %795 = load i8, ptr %794, align 4, !tbaa !43
  %796 = load ptr, ptr %14, align 8, !tbaa !5
  %797 = getelementptr inbounds %struct._Action, ptr %796, i32 0, i32 2
  store i8 %795, ptr %797, align 8, !tbaa !45
  store i32 0, ptr %3, align 4, !tbaa !9
  br label %798

798:                                              ; preds = %818, %786
  %799 = load i32, ptr %3, align 4, !tbaa !9
  %800 = load ptr, ptr %17, align 8, !tbaa !5
  %801 = getelementptr inbounds %struct._PseudoAction, ptr %800, i32 0, i32 0
  %802 = load ptr, ptr %801, align 8, !tbaa !70
  %803 = getelementptr inbounds %struct._Operator, ptr %802, i32 0, i32 4
  %804 = load i32, ptr %803, align 8, !tbaa !71
  %805 = icmp slt i32 %799, %804
  br i1 %805, label %806, label %821

806:                                              ; preds = %798
  %807 = load ptr, ptr %17, align 8, !tbaa !5
  %808 = getelementptr inbounds %struct._PseudoAction, ptr %807, i32 0, i32 1
  %809 = load i32, ptr %3, align 4, !tbaa !9
  %810 = sext i32 %809 to i64
  %811 = getelementptr inbounds [15 x i32], ptr %808, i64 0, i64 %810
  %812 = load i32, ptr %811, align 4, !tbaa !9
  %813 = load ptr, ptr %14, align 8, !tbaa !5
  %814 = getelementptr inbounds %struct._Action, ptr %813, i32 0, i32 6
  %815 = load i32, ptr %3, align 4, !tbaa !9
  %816 = sext i32 %815 to i64
  %817 = getelementptr inbounds [15 x i32], ptr %814, i64 0, i64 %816
  store i32 %812, ptr %817, align 4, !tbaa !9
  br label %818

818:                                              ; preds = %806
  %819 = load i32, ptr %3, align 4, !tbaa !9
  %820 = add nsw i32 %819, 1
  store i32 %820, ptr %3, align 4, !tbaa !9
  br label %798, !llvm.loop !72

821:                                              ; preds = %798
  %822 = load ptr, ptr %17, align 8, !tbaa !5
  %823 = getelementptr inbounds %struct._PseudoAction, ptr %822, i32 0, i32 0
  %824 = load ptr, ptr %823, align 8, !tbaa !70
  %825 = getelementptr inbounds %struct._Operator, ptr %824, i32 0, i32 0
  %826 = load ptr, ptr %825, align 8, !tbaa !48
  %827 = load ptr, ptr %14, align 8, !tbaa !5
  %828 = getelementptr inbounds %struct._Action, ptr %827, i32 0, i32 3
  store ptr %826, ptr %828, align 8, !tbaa !49
  %829 = load ptr, ptr %17, align 8, !tbaa !5
  %830 = getelementptr inbounds %struct._PseudoAction, ptr %829, i32 0, i32 0
  %831 = load ptr, ptr %830, align 8, !tbaa !70
  %832 = getelementptr inbounds %struct._Operator, ptr %831, i32 0, i32 2
  %833 = load i32, ptr %832, align 8, !tbaa !50
  %834 = load ptr, ptr %14, align 8, !tbaa !5
  %835 = getelementptr inbounds %struct._Action, ptr %834, i32 0, i32 4
  store i32 %833, ptr %835, align 8, !tbaa !51
  %836 = load ptr, ptr %14, align 8, !tbaa !5
  %837 = load ptr, ptr %17, align 8, !tbaa !5
  call void @make_name_inst_table_from_PseudoAction(ptr noundef %836, ptr noundef %837)
  %838 = load ptr, ptr @gactions, align 8, !tbaa !5
  %839 = load ptr, ptr %14, align 8, !tbaa !5
  %840 = getelementptr inbounds %struct._Action, ptr %839, i32 0, i32 19
  store ptr %838, ptr %840, align 8, !tbaa !52
  %841 = load ptr, ptr %17, align 8, !tbaa !5
  %842 = getelementptr inbounds %struct._PseudoAction, ptr %841, i32 0, i32 9
  %843 = load i32, ptr %842, align 8, !tbaa !73
  %844 = load ptr, ptr %14, align 8, !tbaa !5
  %845 = getelementptr inbounds %struct._Action, ptr %844, i32 0, i32 18
  store i32 %843, ptr %845, align 8, !tbaa !53
  %846 = load ptr, ptr %14, align 8, !tbaa !5
  store ptr %846, ptr @gactions, align 8, !tbaa !5
  %847 = load i32, ptr @gnum_actions, align 4, !tbaa !9
  %848 = add nsw i32 %847, 1
  store i32 %848, ptr @gnum_actions, align 4, !tbaa !9
  %849 = load ptr, ptr %16, align 8, !tbaa !5
  %850 = load i32, ptr %2, align 4, !tbaa !9
  %851 = sext i32 %850 to i64
  %852 = getelementptr inbounds i8, ptr %849, i64 %851
  store i8 1, ptr %852, align 1, !tbaa !15
  br label %853

853:                                              ; preds = %821, %652, %584
  %854 = load i32, ptr %2, align 4, !tbaa !9
  %855 = add nsw i32 %854, 1
  store i32 %855, ptr %2, align 4, !tbaa !9
  br label %573, !llvm.loop !74

856:                                              ; preds = %573
  br label %196, !llvm.loop !75

857:                                              ; preds = %196
  %858 = load ptr, ptr %16, align 8, !tbaa !5
  call void @free(ptr noundef %858) #6
  %859 = load i32, ptr @gnum_initial, align 4, !tbaa !9
  %860 = load i32, ptr @gnum_relevant_facts, align 4, !tbaa !9
  %861 = add nsw i32 %859, %860
  store i32 %861, ptr @gnum_pp_facts, align 4, !tbaa !9
  %862 = load i32, ptr getelementptr inbounds (%struct._command_line, ptr @gcmd_line, i32 0, i32 3), align 4, !tbaa !76
  %863 = icmp eq i32 %862, 118
  br i1 %863, label %864, label %1000

864:                                              ; preds = %857
  %865 = call i32 (ptr, ...) @printf(ptr noundef @.str.1)
  %866 = call i32 (ptr, ...) @printf(ptr noundef @.str.2)
  %867 = load ptr, ptr @ginitial, align 8, !tbaa !5
  store ptr %867, ptr %9, align 8, !tbaa !5
  br label %868

868:                                              ; preds = %876, %864
  %869 = load ptr, ptr %9, align 8, !tbaa !5
  %870 = icmp ne ptr %869, null
  br i1 %870, label %871, label %880

871:                                              ; preds = %868
  %872 = call i32 (ptr, ...) @printf(ptr noundef @.str.3)
  %873 = load ptr, ptr %9, align 8, !tbaa !5
  %874 = getelementptr inbounds %struct._Facts, ptr %873, i32 0, i32 0
  %875 = load ptr, ptr %874, align 8, !tbaa !79
  call void @print_Fact(ptr noundef %875)
  br label %876

876:                                              ; preds = %871
  %877 = load ptr, ptr %9, align 8, !tbaa !5
  %878 = getelementptr inbounds %struct._Facts, ptr %877, i32 0, i32 1
  %879 = load ptr, ptr %878, align 8, !tbaa !81
  store ptr %879, ptr %9, align 8, !tbaa !5
  br label %868, !llvm.loop !82

880:                                              ; preds = %868
  store i32 0, ptr %2, align 4, !tbaa !9
  br label %881

881:                                              ; preds = %890, %880
  %882 = load i32, ptr %2, align 4, !tbaa !9
  %883 = load i32, ptr @gnum_relevant_facts, align 4, !tbaa !9
  %884 = icmp slt i32 %882, %883
  br i1 %884, label %885, label %893

885:                                              ; preds = %881
  %886 = call i32 (ptr, ...) @printf(ptr noundef @.str.3)
  %887 = load i32, ptr %2, align 4, !tbaa !9
  %888 = sext i32 %887 to i64
  %889 = getelementptr inbounds [150000 x %struct._Fact], ptr @grelevant_facts, i64 0, i64 %888
  call void @print_Fact(ptr noundef %889)
  br label %890

890:                                              ; preds = %885
  %891 = load i32, ptr %2, align 4, !tbaa !9
  %892 = add nsw i32 %891, 1
  store i32 %892, ptr %2, align 4, !tbaa !9
  br label %881, !llvm.loop !83

893:                                              ; preds = %881
  %894 = load i32, ptr @gnum_actions, align 4, !tbaa !9
  %895 = call i32 (ptr, ...) @printf(ptr noundef @.str.4, i32 noundef %894)
  store i32 0, ptr %2, align 4, !tbaa !9
  br label %896

896:                                              ; preds = %995, %893
  %897 = load i32, ptr %2, align 4, !tbaa !9
  %898 = load i32, ptr @gnum_operators, align 4, !tbaa !9
  %899 = icmp slt i32 %897, %898
  br i1 %899, label %900, label %998

900:                                              ; preds = %896
  %901 = load i32, ptr %2, align 4, !tbaa !9
  %902 = sext i32 %901 to i64
  %903 = getelementptr inbounds [50000 x ptr], ptr @goperators, i64 0, i64 %902
  %904 = load ptr, ptr %903, align 8, !tbaa !5
  %905 = getelementptr inbounds %struct._Operator, ptr %904, i32 0, i32 0
  %906 = load ptr, ptr %905, align 8, !tbaa !48
  %907 = call i32 (ptr, ...) @printf(ptr noundef @.str.5, ptr noundef %906)
  %908 = load ptr, ptr @gactions, align 8, !tbaa !5
  store ptr %908, ptr %15, align 8, !tbaa !5
  br label %909

909:                                              ; preds = %990, %900
  %910 = load ptr, ptr %15, align 8, !tbaa !5
  %911 = icmp ne ptr %910, null
  br i1 %911, label %912, label %994

912:                                              ; preds = %909
  %913 = load ptr, ptr %15, align 8, !tbaa !5
  %914 = getelementptr inbounds %struct._Action, ptr %913, i32 0, i32 0
  %915 = load ptr, ptr %914, align 8, !tbaa !40
  %916 = icmp ne ptr %915, null
  br i1 %916, label %917, label %928

917:                                              ; preds = %912
  %918 = load ptr, ptr %15, align 8, !tbaa !5
  %919 = getelementptr inbounds %struct._Action, ptr %918, i32 0, i32 0
  %920 = load ptr, ptr %919, align 8, !tbaa !40
  %921 = getelementptr inbounds %struct._NormOperator, ptr %920, i32 0, i32 0
  %922 = load ptr, ptr %921, align 8, !tbaa !42
  %923 = load i32, ptr %2, align 4, !tbaa !9
  %924 = sext i32 %923 to i64
  %925 = getelementptr inbounds [50000 x ptr], ptr @goperators, i64 0, i64 %924
  %926 = load ptr, ptr %925, align 8, !tbaa !5
  %927 = icmp ne ptr %922, %926
  br i1 %927, label %944, label %928

928:                                              ; preds = %917, %912
  %929 = load ptr, ptr %15, align 8, !tbaa !5
  %930 = getelementptr inbounds %struct._Action, ptr %929, i32 0, i32 1
  %931 = load ptr, ptr %930, align 8, !tbaa !69
  %932 = icmp ne ptr %931, null
  br i1 %932, label %933, label %945

933:                                              ; preds = %928
  %934 = load ptr, ptr %15, align 8, !tbaa !5
  %935 = getelementptr inbounds %struct._Action, ptr %934, i32 0, i32 1
  %936 = load ptr, ptr %935, align 8, !tbaa !69
  %937 = getelementptr inbounds %struct._PseudoAction, ptr %936, i32 0, i32 0
  %938 = load ptr, ptr %937, align 8, !tbaa !70
  %939 = load i32, ptr %2, align 4, !tbaa !9
  %940 = sext i32 %939 to i64
  %941 = getelementptr inbounds [50000 x ptr], ptr @goperators, i64 0, i64 %940
  %942 = load ptr, ptr %941, align 8, !tbaa !5
  %943 = icmp ne ptr %938, %942
  br i1 %943, label %944, label %945

944:                                              ; preds = %933, %917
  br label %990

945:                                              ; preds = %933, %928
  %946 = call i32 (ptr, ...) @printf(ptr noundef @.str.6)
  %947 = load ptr, ptr %15, align 8, !tbaa !5
  %948 = getelementptr inbounds %struct._Action, ptr %947, i32 0, i32 2
  %949 = load i8, ptr %948, align 8, !tbaa !45
  %950 = icmp ne i8 %949, 0
  br i1 %950, label %951, label %953

951:                                              ; preds = %945
  %952 = call i32 (ptr, ...) @printf(ptr noundef @.str.7)
  br label %953

953:                                              ; preds = %951, %945
  store i32 0, ptr %3, align 4, !tbaa !9
  br label %954

954:                                              ; preds = %986, %953
  %955 = load i32, ptr %3, align 4, !tbaa !9
  %956 = load i32, ptr %2, align 4, !tbaa !9
  %957 = sext i32 %956 to i64
  %958 = getelementptr inbounds [50000 x ptr], ptr @goperators, i64 0, i64 %957
  %959 = load ptr, ptr %958, align 8, !tbaa !5
  %960 = getelementptr inbounds %struct._Operator, ptr %959, i32 0, i32 2
  %961 = load i32, ptr %960, align 8, !tbaa !50
  %962 = icmp slt i32 %955, %961
  br i1 %962, label %963, label %989

963:                                              ; preds = %954
  %964 = load ptr, ptr %15, align 8, !tbaa !5
  %965 = getelementptr inbounds %struct._Action, ptr %964, i32 0, i32 5
  %966 = load i32, ptr %3, align 4, !tbaa !9
  %967 = sext i32 %966 to i64
  %968 = getelementptr inbounds [15 x i32], ptr %965, i64 0, i64 %967
  %969 = load i32, ptr %968, align 4, !tbaa !9
  %970 = sext i32 %969 to i64
  %971 = getelementptr inbounds [2000 x ptr], ptr @gconstants, i64 0, i64 %970
  %972 = load ptr, ptr %971, align 8, !tbaa !5
  %973 = call i32 (ptr, ...) @printf(ptr noundef @.str.8, ptr noundef %972)
  %974 = load i32, ptr %3, align 4, !tbaa !9
  %975 = load i32, ptr %2, align 4, !tbaa !9
  %976 = sext i32 %975 to i64
  %977 = getelementptr inbounds [50000 x ptr], ptr @goperators, i64 0, i64 %976
  %978 = load ptr, ptr %977, align 8, !tbaa !5
  %979 = getelementptr inbounds %struct._Operator, ptr %978, i32 0, i32 4
  %980 = load i32, ptr %979, align 8, !tbaa !71
  %981 = sub nsw i32 %980, 1
  %982 = icmp slt i32 %974, %981
  br i1 %982, label %983, label %985

983:                                              ; preds = %963
  %984 = call i32 (ptr, ...) @printf(ptr noundef @.str.9)
  br label %985

985:                                              ; preds = %983, %963
  br label %986

986:                                              ; preds = %985
  %987 = load i32, ptr %3, align 4, !tbaa !9
  %988 = add nsw i32 %987, 1
  store i32 %988, ptr %3, align 4, !tbaa !9
  br label %954, !llvm.loop !84

989:                                              ; preds = %954
  br label %990

990:                                              ; preds = %989, %944
  %991 = load ptr, ptr %15, align 8, !tbaa !5
  %992 = getelementptr inbounds %struct._Action, ptr %991, i32 0, i32 19
  %993 = load ptr, ptr %992, align 8, !tbaa !52
  store ptr %993, ptr %15, align 8, !tbaa !5
  br label %909, !llvm.loop !85

994:                                              ; preds = %909
  br label %995

995:                                              ; preds = %994
  %996 = load i32, ptr %2, align 4, !tbaa !9
  %997 = add nsw i32 %996, 1
  store i32 %997, ptr %2, align 4, !tbaa !9
  br label %896, !llvm.loop !86

998:                                              ; preds = %896
  %999 = call i32 (ptr, ...) @printf(ptr noundef @.str.10)
  br label %1000

1000:                                             ; preds = %998, %857
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %8) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %4) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %3) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %2) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %1) #6
  ret void
}

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

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

; Function Attrs: nounwind uwtable
declare dso_local i32 @fact_adress() #0

declare i32 @printf(ptr noundef, ...) #3

; Function Attrs: noreturn nounwind
declare void @exit(i32 noundef) #4

declare ptr @new_Action() #3

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

declare void @free_single_EasyTemplate(ptr noundef) #3

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

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

declare void @print_Fact(ptr noundef) #3

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

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 = { nounwind allocsize(0,1) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { nounwind }
attributes #7 = { nounwind allocsize(0,1) }
attributes #8 = { noreturn nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !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 = distinct !{!11, !12}
!12 = !{!"llvm.loop.mustprogress"}
!13 = distinct !{!13, !12}
!14 = distinct !{!14, !12}
!15 = !{!7, !7, i64 0}
!16 = distinct !{!16, !12}
!17 = distinct !{!17, !12}
!18 = distinct !{!18, !12}
!19 = distinct !{!19, !12}
!20 = !{!21, !6, i64 0}
!21 = !{!"_EasyTemplate", !6, i64 0, !7, i64 8, !6, i64 72, !6, i64 80}
!22 = !{!23, !10, i64 264}
!23 = !{!"_NormOperator", !6, i64 0, !10, i64 8, !7, i64 12, !7, i64 72, !7, i64 132, !10, i64 192, !7, i64 196, !6, i64 256, !10, i64 264, !6, i64 272, !6, i64 280, !6, i64 288, !10, i64 296, !6, i64 304, !7, i64 312}
!24 = !{!23, !6, i64 256}
!25 = !{!26, !10, i64 0}
!26 = !{!"_Fact", !10, i64 0, !7, i64 4}
!27 = distinct !{!27, !12}
!28 = distinct !{!28, !12}
!29 = !{!21, !6, i64 80}
!30 = distinct !{!30, !12}
!31 = !{!23, !6, i64 304}
!32 = !{!33, !10, i64 152}
!33 = !{!"_NormEffect", !10, i64 0, !7, i64 4, !7, i64 64, !6, i64 128, !10, i64 136, !6, i64 144, !10, i64 152, !6, i64 160, !10, i64 168, !6, i64 176, !6, i64 184, !6, i64 192, !10, i64 200, !6, i64 208, !6, i64 216, !6, i64 224, !10, i64 232, !6, i64 240, !6, i64 248}
!34 = !{!33, !6, i64 144}
!35 = distinct !{!35, !12}
!36 = distinct !{!36, !12}
!37 = distinct !{!37, !12}
!38 = !{!33, !6, i64 248}
!39 = distinct !{!39, !12}
!40 = !{!41, !6, i64 0}
!41 = !{!"_Action", !6, i64 0, !6, i64 8, !7, i64 16, !6, i64 24, !10, i64 32, !7, i64 36, !7, i64 96, !6, i64 160, !10, i64 168, !6, i64 176, !6, i64 184, !6, i64 192, !10, i64 200, !6, i64 208, !6, i64 216, !6, i64 224, !10, i64 232, !6, i64 240, !10, i64 248, !6, i64 256}
!42 = !{!23, !6, i64 0}
!43 = !{!44, !7, i64 132}
!44 = !{!"_Operator", !6, i64 0, !7, i64 8, !10, i64 128, !7, i64 132, !10, i64 136, !7, i64 140, !7, i64 200, !6, i64 216, !6, i64 224, !7, i64 232}
!45 = !{!41, !7, i64 16}
!46 = !{!23, !10, i64 8}
!47 = distinct !{!47, !12}
!48 = !{!44, !6, i64 0}
!49 = !{!41, !6, i64 24}
!50 = !{!44, !10, i64 128}
!51 = !{!41, !10, i64 32}
!52 = !{!41, !6, i64 256}
!53 = !{!41, !10, i64 248}
!54 = !{!21, !6, i64 72}
!55 = !{!56, !10, i64 80}
!56 = !{!"_PseudoAction", !6, i64 0, !7, i64 8, !6, i64 72, !10, i64 80, !6, i64 88, !6, i64 96, !6, i64 104, !10, i64 112, !6, i64 120, !10, i64 128}
!57 = !{!56, !6, i64 72}
!58 = distinct !{!58, !12}
!59 = distinct !{!59, !12}
!60 = !{!56, !6, i64 120}
!61 = !{!62, !10, i64 24}
!62 = !{!"_PseudoActionEffect", !6, i64 0, !10, i64 8, !6, i64 16, !10, i64 24, !6, i64 32, !10, i64 40, !6, i64 48, !6, i64 56, !6, i64 64, !10, i64 72, !6, i64 80, !6, i64 88, !6, i64 96, !10, i64 104, !6, i64 112}
!63 = !{!62, !6, i64 16}
!64 = distinct !{!64, !12}
!65 = distinct !{!65, !12}
!66 = distinct !{!66, !12}
!67 = !{!62, !6, i64 112}
!68 = distinct !{!68, !12}
!69 = !{!41, !6, i64 8}
!70 = !{!56, !6, i64 0}
!71 = !{!44, !10, i64 136}
!72 = distinct !{!72, !12}
!73 = !{!56, !10, i64 128}
!74 = distinct !{!74, !12}
!75 = distinct !{!75, !12}
!76 = !{!77, !10, i64 768}
!77 = !{!"_command_line", !7, i64 0, !7, i64 256, !7, i64 512, !10, i64 768, !10, i64 772, !10, i64 776, !7, i64 780, !10, i64 784, !78, i64 788}
!78 = !{!"float", !7, i64 0}
!79 = !{!80, !6, i64 0}
!80 = !{!"_Facts", !6, i64 0, !6, i64 8}
!81 = !{!80, !6, i64 8}
!82 = distinct !{!82, !12}
!83 = distinct !{!83, !12}
!84 = distinct !{!84, !12}
!85 = distinct !{!85, !12}
!86 = distinct !{!86, !12}


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

%struct._Fact = type { i32, [5 x i32] }
%struct._command_line = type { [256 x i8], [256 x i8], [256 x i8], i32, i32, i32, i8, i32, float }

@gactions = external local_unnamed_addr global ptr, align 8
@gnum_actions = external local_unnamed_addr global i32, align 4
@gnum_predicates = external local_unnamed_addr global i32, align 4
@garity = external local_unnamed_addr global [50 x i32], align 16
@gpredicates_args_type = external local_unnamed_addr global [50 x [5 x i32]], align 16
@gtype_size = external local_unnamed_addr global [50 x i32], align 16
@lpos = external dso_local local_unnamed_addr global [50 x ptr], align 16
@lneg = external dso_local local_unnamed_addr global [50 x ptr], align 16
@luse = external dso_local local_unnamed_addr global [50 x ptr], align 16
@lindex = external dso_local local_unnamed_addr global [50 x ptr], align 16
@gnum_hard_templates = external local_unnamed_addr global i32, align 4
@lp = external dso_local local_unnamed_addr global i32, align 4
@gnum_initial_predicate = external local_unnamed_addr global ptr, align 8
@ginitial_predicate = external local_unnamed_addr global ptr, align 8
@largs = external dso_local local_unnamed_addr global [15 x i32], align 16
@geasy_templates = external local_unnamed_addr global ptr, align 8
@gnum_relevant_facts = external local_unnamed_addr global i32, align 4
@.str = external hidden unnamed_addr constant [71 x i8], align 1
@grelevant_facts = external global [150000 x %struct._Fact], align 16
@ghard_templates = external local_unnamed_addr global ptr, align 8
@gnum_initial = external local_unnamed_addr global i32, align 4
@gnum_pp_facts = external local_unnamed_addr global i32, align 4
@gcmd_line = external local_unnamed_addr global %struct._command_line, align 4
@.str.1 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [27 x i8], align 1
@ginitial = external local_unnamed_addr global ptr, align 8
@.str.3 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [41 x i8], align 1
@gnum_operators = external local_unnamed_addr global i32, align 4
@.str.5 = external hidden unnamed_addr constant [15 x i8], align 1
@goperators = external local_unnamed_addr global [50000 x ptr], align 16
@.str.6 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [3 x i8], align 1
@gconstants = external local_unnamed_addr global [2000 x ptr], align 16
@.str.9 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [3 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local void @perform_reachability_analysis() local_unnamed_addr #0 {
  store ptr null, ptr @gactions, align 8, !tbaa !5
  store i32 0, ptr @gnum_actions, align 4, !tbaa !9
  %1 = load i32, ptr @gnum_predicates, align 4, !tbaa !9
  %2 = icmp sgt i32 %1, 0
  br i1 %2, label %.preheader286.preheader, label %._crit_edge310

.preheader286.preheader:                          ; preds = %0
  %wide.trip.count449 = zext nneg i32 %1 to i64
  br label %.preheader286

.preheader286:                                    ; preds = %.preheader286.preheader, %._crit_edge308
  %indvars.iv446 = phi i64 [ 0, %.preheader286.preheader ], [ %indvars.iv.next447, %._crit_edge308 ]
  %3 = getelementptr inbounds [50 x i32], ptr @garity, i64 0, i64 %indvars.iv446
  %4 = load i32, ptr %3, align 4, !tbaa !9
  %5 = icmp sgt i32 %4, 0
  br i1 %5, label %.lr.ph.preheader, label %._crit_edge

.lr.ph.preheader:                                 ; preds = %.preheader286
  %wide.trip.count = zext nneg i32 %4 to i64
  %xtraiter = and i64 %wide.trip.count, 3
  %6 = icmp ult i32 %4, 4
  br i1 %6, label %._crit_edge.loopexit.unr-lcssa, label %.lr.ph.preheader.new

.lr.ph.preheader.new:                             ; preds = %.lr.ph.preheader
  %unroll_iter = and i64 %wide.trip.count, 2147483644
  br label %.lr.ph

.lr.ph:                                           ; preds = %.lr.ph, %.lr.ph.preheader.new
  %indvars.iv = phi i64 [ 0, %.lr.ph.preheader.new ], [ %indvars.iv.next.3, %.lr.ph ]
  %.0223303 = phi i32 [ 1, %.lr.ph.preheader.new ], [ %30, %.lr.ph ]
  %niter = phi i64 [ 0, %.lr.ph.preheader.new ], [ %niter.next.3, %.lr.ph ]
  %7 = getelementptr inbounds [50 x [5 x i32]], ptr @gpredicates_args_type, i64 0, i64 %indvars.iv446, i64 %indvars.iv
  %8 = load i32, ptr %7, align 4, !tbaa !9
  %9 = sext i32 %8 to i64
  %10 = getelementptr inbounds [50 x i32], ptr @gtype_size, i64 0, i64 %9
  %11 = load i32, ptr %10, align 4, !tbaa !9
  %12 = mul nsw i32 %11, %.0223303
  %indvars.iv.next = or disjoint i64 %indvars.iv, 1
  %13 = getelementptr inbounds [50 x [5 x i32]], ptr @gpredicates_args_type, i64 0, i64 %indvars.iv446, i64 %indvars.iv.next
  %14 = load i32, ptr %13, align 4, !tbaa !9
  %15 = sext i32 %14 to i64
  %16 = getelementptr inbounds [50 x i32], ptr @gtype_size, i64 0, i64 %15
  %17 = load i32, ptr %16, align 4, !tbaa !9
  %18 = mul nsw i32 %17, %12
  %indvars.iv.next.1 = or disjoint i64 %indvars.iv, 2
  %19 = getelementptr inbounds [50 x [5 x i32]], ptr @gpredicates_args_type, i64 0, i64 %indvars.iv446, i64 %indvars.iv.next.1
  %20 = load i32, ptr %19, align 4, !tbaa !9
  %21 = sext i32 %20 to i64
  %22 = getelementptr inbounds [50 x i32], ptr @gtype_size, i64 0, i64 %21
  %23 = load i32, ptr %22, align 4, !tbaa !9
  %24 = mul nsw i32 %23, %18
  %indvars.iv.next.2 = or disjoint i64 %indvars.iv, 3
  %25 = getelementptr inbounds [50 x [5 x i32]], ptr @gpredicates_args_type, i64 0, i64 %indvars.iv446, i64 %indvars.iv.next.2
  %26 = load i32, ptr %25, align 4, !tbaa !9
  %27 = sext i32 %26 to i64
  %28 = getelementptr inbounds [50 x i32], ptr @gtype_size, i64 0, i64 %27
  %29 = load i32, ptr %28, align 4, !tbaa !9
  %30 = mul nsw i32 %29, %24
  %indvars.iv.next.3 = add nuw nsw i64 %indvars.iv, 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 %._crit_edge.loopexit.unr-lcssa, label %.lr.ph, !llvm.loop !11

._crit_edge.loopexit.unr-lcssa:                   ; preds = %.lr.ph, %.lr.ph.preheader
  %.lcssa613.ph = phi i32 [ poison, %.lr.ph.preheader ], [ %30, %.lr.ph ]
  %indvars.iv.unr = phi i64 [ 0, %.lr.ph.preheader ], [ %indvars.iv.next.3, %.lr.ph ]
  %.0223303.unr = phi i32 [ 1, %.lr.ph.preheader ], [ %30, %.lr.ph ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %._crit_edge, label %.lr.ph.epil

.lr.ph.epil:                                      ; preds = %._crit_edge.loopexit.unr-lcssa, %.lr.ph.epil
  %indvars.iv.epil = phi i64 [ %indvars.iv.next.epil, %.lr.ph.epil ], [ %indvars.iv.unr, %._crit_edge.loopexit.unr-lcssa ]
  %.0223303.epil = phi i32 [ %36, %.lr.ph.epil ], [ %.0223303.unr, %._crit_edge.loopexit.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.lr.ph.epil ], [ 0, %._crit_edge.loopexit.unr-lcssa ]
  %31 = getelementptr inbounds [50 x [5 x i32]], ptr @gpredicates_args_type, i64 0, i64 %indvars.iv446, i64 %indvars.iv.epil
  %32 = load i32, ptr %31, align 4, !tbaa !9
  %33 = sext i32 %32 to i64
  %34 = getelementptr inbounds [50 x i32], ptr @gtype_size, i64 0, i64 %33
  %35 = load i32, ptr %34, align 4, !tbaa !9
  %36 = mul nsw i32 %35, %.0223303.epil
  %indvars.iv.next.epil = add nuw nsw i64 %indvars.iv.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 %._crit_edge, label %.lr.ph.epil, !llvm.loop !13

._crit_edge:                                      ; preds = %._crit_edge.loopexit.unr-lcssa, %.lr.ph.epil, %.preheader286
  %.0223.lcssa = phi i32 [ 1, %.preheader286 ], [ %.lcssa613.ph, %._crit_edge.loopexit.unr-lcssa ], [ %36, %.lr.ph.epil ]
  %37 = sext i32 %.0223.lcssa to i64
  %38 = tail call noalias ptr @calloc(i64 noundef %37, i64 noundef 4) #8
  %39 = getelementptr inbounds [50 x ptr], ptr @lpos, i64 0, i64 %indvars.iv446
  store ptr %38, ptr %39, align 8, !tbaa !5
  %40 = tail call noalias ptr @calloc(i64 noundef %37, i64 noundef 4) #8
  %41 = getelementptr inbounds [50 x ptr], ptr @lneg, i64 0, i64 %indvars.iv446
  store ptr %40, ptr %41, align 8, !tbaa !5
  %42 = tail call noalias ptr @calloc(i64 noundef %37, i64 noundef 4) #8
  %43 = getelementptr inbounds [50 x ptr], ptr @luse, i64 0, i64 %indvars.iv446
  store ptr %42, ptr %43, align 8, !tbaa !5
  %44 = tail call noalias ptr @calloc(i64 noundef %37, i64 noundef 4) #8
  %45 = getelementptr inbounds [50 x ptr], ptr @lindex, i64 0, i64 %indvars.iv446
  store ptr %44, ptr %45, align 8, !tbaa !5
  %46 = icmp sgt i32 %.0223.lcssa, 0
  br i1 %46, label %.lr.ph307.preheader, label %._crit_edge308

.lr.ph307.preheader:                              ; preds = %._crit_edge
  %47 = zext nneg i32 %.0223.lcssa to i64
  %48 = shl nuw nsw i64 %47, 2
  tail call void @llvm.memset.p0.i64(ptr align 4 %44, i8 -1, i64 %48, i1 false), !tbaa !9
  %min.iters.check = icmp ult i32 %.0223.lcssa, 8
  br i1 %min.iters.check, label %.lr.ph307.preheader612, label %vector.ph

vector.ph:                                        ; preds = %.lr.ph307.preheader
  %n.vec = and i64 %47, 2147483640
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %49 = getelementptr inbounds i32, ptr %40, i64 %index
  %50 = getelementptr inbounds i8, ptr %49, i64 16
  store <4 x i32> <i32 1, i32 1, i32 1, i32 1>, ptr %49, align 4, !tbaa !9
  store <4 x i32> <i32 1, i32 1, i32 1, i32 1>, ptr %50, align 4, !tbaa !9
  %index.next = add nuw i64 %index, 8
  %51 = icmp eq i64 %index.next, %n.vec
  br i1 %51, label %middle.block, label %vector.body, !llvm.loop !15

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %n.vec, %47
  br i1 %cmp.n, label %._crit_edge308, label %.lr.ph307.preheader612

.lr.ph307.preheader612:                           ; preds = %middle.block, %.lr.ph307.preheader
  %indvars.iv441.ph = phi i64 [ 0, %.lr.ph307.preheader ], [ %n.vec, %middle.block ]
  br label %.lr.ph307

.lr.ph307:                                        ; preds = %.lr.ph307.preheader612, %.lr.ph307
  %indvars.iv441 = phi i64 [ %indvars.iv.next442, %.lr.ph307 ], [ %indvars.iv441.ph, %.lr.ph307.preheader612 ]
  %52 = getelementptr inbounds i32, ptr %40, i64 %indvars.iv441
  store i32 1, ptr %52, align 4, !tbaa !9
  %indvars.iv.next442 = add nuw nsw i64 %indvars.iv441, 1
  %exitcond445.not = icmp eq i64 %indvars.iv.next442, %47
  br i1 %exitcond445.not, label %._crit_edge308, label %.lr.ph307, !llvm.loop !18

._crit_edge308:                                   ; preds = %.lr.ph307, %middle.block, %._crit_edge
  %indvars.iv.next447 = add nuw nsw i64 %indvars.iv446, 1
  %exitcond450.not = icmp eq i64 %indvars.iv.next447, %wide.trip.count449
  br i1 %exitcond450.not, label %._crit_edge310, label %.preheader286, !llvm.loop !19

._crit_edge310:                                   ; preds = %._crit_edge308, %0
  %53 = load i32, ptr @gnum_hard_templates, align 4, !tbaa !9
  %54 = sext i32 %53 to i64
  %55 = tail call noalias ptr @calloc(i64 noundef %54, i64 noundef 1) #8
  br i1 %2, label %.lr.ph320.preheader, label %.preheader283.preheader

.lr.ph320.preheader:                              ; preds = %._crit_edge310
  %.pre = load ptr, ptr @gnum_initial_predicate, align 8, !tbaa !5
  br label %.lr.ph320

.lr.ph320:                                        ; preds = %.lr.ph320.preheader, %._crit_edge318
  %56 = phi i32 [ %1, %.lr.ph320.preheader ], [ %111, %._crit_edge318 ]
  %57 = phi ptr [ %.pre, %.lr.ph320.preheader ], [ %112, %._crit_edge318 ]
  %indvars.iv462 = phi i64 [ 0, %.lr.ph320.preheader ], [ %indvars.iv.next463, %._crit_edge318 ]
  %58 = trunc nuw nsw i64 %indvars.iv462 to i32
  store i32 %58, ptr @lp, align 4, !tbaa !9
  %59 = getelementptr inbounds i32, ptr %57, i64 %indvars.iv462
  %60 = load i32, ptr %59, align 4, !tbaa !9
  %61 = icmp sgt i32 %60, 0
  br i1 %61, label %.preheader284.lr.ph, label %._crit_edge318

.preheader284.lr.ph:                              ; preds = %.lr.ph320
  %62 = getelementptr inbounds [50 x i32], ptr @garity, i64 0, i64 %indvars.iv462
  br label %.preheader284

.preheader284:                                    ; preds = %.preheader284.lr.ph, %._crit_edge316
  %indvars.iv459 = phi i64 [ 0, %.preheader284.lr.ph ], [ %indvars.iv.next460, %._crit_edge316 ]
  %63 = load i32, ptr %62, align 4, !tbaa !9
  %64 = icmp sgt i32 %63, 0
  br i1 %64, label %.lr.ph315, label %._crit_edge316

.lr.ph315:                                        ; preds = %.preheader284
  %65 = mul nsw i64 %indvars.iv459, -24
  %66 = add i64 %65, add (i64 ptrtoint (ptr @largs to i64), i64 -4)
  %67 = load ptr, ptr @ginitial_predicate, align 8, !tbaa !5
  %68 = getelementptr inbounds ptr, ptr %67, i64 %indvars.iv462
  %69 = load ptr, ptr %68, align 8, !tbaa !5
  %wide.trip.count457 = zext nneg i32 %63 to i64
  %min.iters.check558 = icmp ult i32 %63, 8
  %70 = ptrtoint ptr %69 to i64
  %71 = sub i64 %66, %70
  %diff.check = icmp ult i64 %71, 32
  %or.cond = select i1 %min.iters.check558, i1 true, i1 %diff.check
  br i1 %or.cond, label %scalar.ph557.preheader, label %vector.ph559

vector.ph559:                                     ; preds = %.lr.ph315
  %n.vec561 = and i64 %wide.trip.count457, 2147483640
  br label %vector.body563

vector.body563:                                   ; preds = %vector.body563, %vector.ph559
  %index564 = phi i64 [ 0, %vector.ph559 ], [ %index.next566, %vector.body563 ]
  %72 = getelementptr inbounds %struct._Fact, ptr %69, i64 %indvars.iv459, i32 1, i64 %index564
  %73 = getelementptr inbounds i8, ptr %72, i64 16
  %wide.load = load <4 x i32>, ptr %72, align 4, !tbaa !9
  %wide.load565 = load <4 x i32>, ptr %73, align 4, !tbaa !9
  %74 = getelementptr inbounds [15 x i32], ptr @largs, i64 0, i64 %index564
  %75 = getelementptr inbounds i8, ptr %74, i64 16
  store <4 x i32> %wide.load, ptr %74, align 16, !tbaa !9
  store <4 x i32> %wide.load565, ptr %75, align 16, !tbaa !9
  %index.next566 = add nuw i64 %index564, 8
  %76 = icmp eq i64 %index.next566, %n.vec561
  br i1 %76, label %middle.block556, label %vector.body563, !llvm.loop !20

middle.block556:                                  ; preds = %vector.body563
  %cmp.n567 = icmp eq i64 %n.vec561, %wide.trip.count457
  br i1 %cmp.n567, label %._crit_edge316, label %scalar.ph557.preheader

scalar.ph557.preheader:                           ; preds = %middle.block556, %.lr.ph315
  %indvars.iv454.ph = phi i64 [ 0, %.lr.ph315 ], [ %n.vec561, %middle.block556 ]
  %xtraiter615 = and i64 %wide.trip.count457, 3
  %lcmp.mod616.not = icmp eq i64 %xtraiter615, 0
  br i1 %lcmp.mod616.not, label %scalar.ph557.prol.loopexit, label %scalar.ph557.prol

scalar.ph557.prol:                                ; preds = %scalar.ph557.preheader, %scalar.ph557.prol
  %indvars.iv454.prol = phi i64 [ %indvars.iv.next455.prol, %scalar.ph557.prol ], [ %indvars.iv454.ph, %scalar.ph557.preheader ]
  %prol.iter = phi i64 [ %prol.iter.next, %scalar.ph557.prol ], [ 0, %scalar.ph557.preheader ]
  %77 = getelementptr inbounds %struct._Fact, ptr %69, i64 %indvars.iv459, i32 1, i64 %indvars.iv454.prol
  %78 = load i32, ptr %77, align 4, !tbaa !9
  %79 = getelementptr inbounds [15 x i32], ptr @largs, i64 0, i64 %indvars.iv454.prol
  store i32 %78, ptr %79, align 4, !tbaa !9
  %indvars.iv.next455.prol = add nuw nsw i64 %indvars.iv454.prol, 1
  %prol.iter.next = add i64 %prol.iter, 1
  %prol.iter.cmp.not = icmp eq i64 %prol.iter.next, %xtraiter615
  br i1 %prol.iter.cmp.not, label %scalar.ph557.prol.loopexit, label %scalar.ph557.prol, !llvm.loop !21

scalar.ph557.prol.loopexit:                       ; preds = %scalar.ph557.prol, %scalar.ph557.preheader
  %indvars.iv454.unr = phi i64 [ %indvars.iv454.ph, %scalar.ph557.preheader ], [ %indvars.iv.next455.prol, %scalar.ph557.prol ]
  %80 = sub nsw i64 %indvars.iv454.ph, %wide.trip.count457
  %81 = icmp ugt i64 %80, -4
  br i1 %81, label %._crit_edge316, label %scalar.ph557

scalar.ph557:                                     ; preds = %scalar.ph557.prol.loopexit, %scalar.ph557
  %indvars.iv454 = phi i64 [ %indvars.iv.next455.3, %scalar.ph557 ], [ %indvars.iv454.unr, %scalar.ph557.prol.loopexit ]
  %82 = getelementptr inbounds %struct._Fact, ptr %69, i64 %indvars.iv459, i32 1, i64 %indvars.iv454
  %83 = load i32, ptr %82, align 4, !tbaa !9
  %84 = getelementptr inbounds [15 x i32], ptr @largs, i64 0, i64 %indvars.iv454
  store i32 %83, ptr %84, align 4, !tbaa !9
  %indvars.iv.next455 = add nuw nsw i64 %indvars.iv454, 1
  %85 = getelementptr inbounds %struct._Fact, ptr %69, i64 %indvars.iv459, i32 1, i64 %indvars.iv.next455
  %86 = load i32, ptr %85, align 4, !tbaa !9
  %87 = getelementptr inbounds [15 x i32], ptr @largs, i64 0, i64 %indvars.iv.next455
  store i32 %86, ptr %87, align 4, !tbaa !9
  %indvars.iv.next455.1 = add nuw nsw i64 %indvars.iv454, 2
  %88 = getelementptr inbounds %struct._Fact, ptr %69, i64 %indvars.iv459, i32 1, i64 %indvars.iv.next455.1
  %89 = load i32, ptr %88, align 4, !tbaa !9
  %90 = getelementptr inbounds [15 x i32], ptr @largs, i64 0, i64 %indvars.iv.next455.1
  store i32 %89, ptr %90, align 4, !tbaa !9
  %indvars.iv.next455.2 = add nuw nsw i64 %indvars.iv454, 3
  %91 = getelementptr inbounds %struct._Fact, ptr %69, i64 %indvars.iv459, i32 1, i64 %indvars.iv.next455.2
  %92 = load i32, ptr %91, align 4, !tbaa !9
  %93 = getelementptr inbounds [15 x i32], ptr @largs, i64 0, i64 %indvars.iv.next455.2
  store i32 %92, ptr %93, align 4, !tbaa !9
  %indvars.iv.next455.3 = add nuw nsw i64 %indvars.iv454, 4
  %exitcond458.not.3 = icmp eq i64 %indvars.iv.next455.3, %wide.trip.count457
  br i1 %exitcond458.not.3, label %._crit_edge316, label %scalar.ph557, !llvm.loop !22

._crit_edge316:                                   ; preds = %scalar.ph557.prol.loopexit, %scalar.ph557, %middle.block556, %.preheader284
  %94 = tail call i32 @fact_adress()
  %95 = load i32, ptr @lp, align 4, !tbaa !9
  %96 = sext i32 %95 to i64
  %97 = getelementptr inbounds [50 x ptr], ptr @lpos, i64 0, i64 %96
  %98 = load ptr, ptr %97, align 8, !tbaa !5
  %99 = sext i32 %94 to i64
  %100 = getelementptr inbounds i32, ptr %98, i64 %99
  store i32 1, ptr %100, align 4, !tbaa !9
  %101 = load i32, ptr @lp, align 4, !tbaa !9
  %102 = sext i32 %101 to i64
  %103 = getelementptr inbounds [50 x ptr], ptr @lneg, i64 0, i64 %102
  %104 = load ptr, ptr %103, align 8, !tbaa !5
  %105 = getelementptr inbounds i32, ptr %104, i64 %99
  store i32 0, ptr %105, align 4, !tbaa !9
  %indvars.iv.next460 = add nuw nsw i64 %indvars.iv459, 1
  %106 = load ptr, ptr @gnum_initial_predicate, align 8, !tbaa !5
  %107 = getelementptr inbounds i32, ptr %106, i64 %indvars.iv462
  %108 = load i32, ptr %107, align 4, !tbaa !9
  %109 = sext i32 %108 to i64
  %110 = icmp slt i64 %indvars.iv.next460, %109
  br i1 %110, label %.preheader284, label %._crit_edge318.loopexit, !llvm.loop !23

._crit_edge318.loopexit:                          ; preds = %._crit_edge316
  %.pre532 = load i32, ptr @gnum_predicates, align 4, !tbaa !9
  br label %._crit_edge318

._crit_edge318:                                   ; preds = %._crit_edge318.loopexit, %.lr.ph320
  %111 = phi i32 [ %.pre532, %._crit_edge318.loopexit ], [ %56, %.lr.ph320 ]
  %112 = phi ptr [ %106, %._crit_edge318.loopexit ], [ %57, %.lr.ph320 ]
  %indvars.iv.next463 = add nuw nsw i64 %indvars.iv462, 1
  %113 = sext i32 %111 to i64
  %114 = icmp slt i64 %indvars.iv.next463, %113
  br i1 %114, label %.lr.ph320, label %.preheader283.preheader, !llvm.loop !24

.preheader283.preheader:                          ; preds = %._crit_edge318, %._crit_edge310
  br label %.preheader283

.loopexit282:                                     ; preds = %473, %.preheader281
  %.5247.lcssa = phi i8 [ %.1243.ph.lcssa294, %.preheader281 ], [ %.9251, %473 ]
  %.not = icmp eq i8 %.5247.lcssa, 0
  br i1 %.not, label %.preheader283, label %477, !llvm.loop !25

.preheader283:                                    ; preds = %.preheader283.preheader, %.loopexit282
  %115 = load ptr, ptr @geasy_templates, align 8, !tbaa !5
  %.not270333367 = icmp eq ptr %115, null
  br i1 %.not270333367, label %.preheader281, label %.lr.ph335

.lr.ph335:                                        ; preds = %.preheader283, %._crit_edge366._crit_edge
  %.0236.ph369 = phi ptr [ %301, %._crit_edge366._crit_edge ], [ %115, %.preheader283 ]
  %.1243.ph368 = phi i8 [ %.2244.lcssa, %._crit_edge366._crit_edge ], [ 1, %.preheader283 ]
  br label %119

.preheader281.critedge:                           ; preds = %._crit_edge366
  %.not278.c = icmp eq ptr %.pre534, null
  %116 = getelementptr inbounds i8, ptr %.pre534, i64 80
  %geasy_templates.sink.c = select i1 %.not278.c, ptr @geasy_templates, ptr %116
  store ptr %301, ptr %geasy_templates.sink.c, align 8, !tbaa !5
  tail call void @free_single_EasyTemplate(ptr noundef nonnull %.0236334) #9
  br label %.preheader281

.preheader281:                                    ; preds = %177, %.preheader281.critedge, %.preheader283
  %.1243.ph.lcssa294 = phi i8 [ 1, %.preheader283 ], [ %.2244.lcssa, %.preheader281.critedge ], [ %.1243.ph368, %177 ]
  %117 = load i32, ptr @gnum_hard_templates, align 4, !tbaa !9
  %118 = icmp sgt i32 %117, 0
  br i1 %118, label %.lr.ph409, label %.loopexit282

119:                                              ; preds = %.lr.ph335, %177
  %.0236334 = phi ptr [ %.0236.ph369, %.lr.ph335 ], [ %179, %177 ]
  %120 = load ptr, ptr %.0236334, align 8, !tbaa !26
  %121 = getelementptr inbounds i8, ptr %120, i64 264
  %122 = load i32, ptr %121, align 8, !tbaa !28
  %123 = icmp sgt i32 %122, 0
  br i1 %123, label %.lr.ph328, label %._crit_edge329

.lr.ph328:                                        ; preds = %119
  %124 = getelementptr inbounds i8, ptr %120, i64 256
  %125 = getelementptr inbounds i8, ptr %.0236334, i64 8
  br label %126

126:                                              ; preds = %.lr.ph328, %172
  %indvars.iv470 = phi i64 [ 0, %.lr.ph328 ], [ %indvars.iv.next471, %172 ]
  %127 = load ptr, ptr %124, align 8, !tbaa !30
  %128 = getelementptr inbounds %struct._Fact, ptr %127, i64 %indvars.iv470
  %129 = load i32, ptr %128, align 4, !tbaa !31
  store i32 %129, ptr @lp, align 4, !tbaa !9
  %130 = sext i32 %129 to i64
  %131 = getelementptr inbounds [50 x i32], ptr @garity, i64 0, i64 %130
  %132 = load i32, ptr %131, align 4, !tbaa !9
  %133 = icmp sgt i32 %132, 0
  br i1 %133, label %.lr.ph323.preheader, label %._crit_edge324

.lr.ph323.preheader:                              ; preds = %126
  %wide.trip.count468 = zext nneg i32 %132 to i64
  %xtraiter617 = and i64 %wide.trip.count468, 1
  %134 = icmp eq i32 %132, 1
  br i1 %134, label %._crit_edge324.loopexit.unr-lcssa, label %.lr.ph323.preheader.new

.lr.ph323.preheader.new:                          ; preds = %.lr.ph323.preheader
  %unroll_iter620 = and i64 %wide.trip.count468, 2147483646
  br label %.lr.ph323

.lr.ph323:                                        ; preds = %153, %.lr.ph323.preheader.new
  %indvars.iv465 = phi i64 [ 0, %.lr.ph323.preheader.new ], [ %indvars.iv.next466.1, %153 ]
  %niter621 = phi i64 [ 0, %.lr.ph323.preheader.new ], [ %niter621.next.1, %153 ]
  %135 = getelementptr inbounds %struct._Fact, ptr %127, i64 %indvars.iv470, i32 1, i64 %indvars.iv465
  %136 = load i32, ptr %135, align 4, !tbaa !9
  %137 = icmp sgt i32 %136, -1
  br i1 %137, label %.lr.ph323.1, label %138

138:                                              ; preds = %.lr.ph323
  %139 = xor i32 %136, -1
  %140 = zext nneg i32 %139 to i64
  %141 = getelementptr inbounds [15 x i32], ptr %125, i64 0, i64 %140
  %142 = load i32, ptr %141, align 4, !tbaa !9
  br label %.lr.ph323.1

.lr.ph323.1:                                      ; preds = %.lr.ph323, %138
  %143 = phi i32 [ %142, %138 ], [ %136, %.lr.ph323 ]
  %144 = getelementptr inbounds [15 x i32], ptr @largs, i64 0, i64 %indvars.iv465
  store i32 %143, ptr %144, align 8, !tbaa !9
  %indvars.iv.next466 = or disjoint i64 %indvars.iv465, 1
  %145 = getelementptr inbounds %struct._Fact, ptr %127, i64 %indvars.iv470, i32 1, i64 %indvars.iv.next466
  %146 = load i32, ptr %145, align 4, !tbaa !9
  %147 = icmp sgt i32 %146, -1
  br i1 %147, label %153, label %148

148:                                              ; preds = %.lr.ph323.1
  %149 = xor i32 %146, -1
  %150 = zext nneg i32 %149 to i64
  %151 = getelementptr inbounds [15 x i32], ptr %125, i64 0, i64 %150
  %152 = load i32, ptr %151, align 4, !tbaa !9
  br label %153

153:                                              ; preds = %148, %.lr.ph323.1
  %154 = phi i32 [ %152, %148 ], [ %146, %.lr.ph323.1 ]
  %155 = getelementptr inbounds [15 x i32], ptr @largs, i64 0, i64 %indvars.iv.next466
  store i32 %154, ptr %155, align 4, !tbaa !9
  %indvars.iv.next466.1 = add nuw nsw i64 %indvars.iv465, 2
  %niter621.next.1 = add i64 %niter621, 2
  %niter621.ncmp.1 = icmp eq i64 %niter621.next.1, %unroll_iter620
  br i1 %niter621.ncmp.1, label %._crit_edge324.loopexit.unr-lcssa, label %.lr.ph323, !llvm.loop !33

._crit_edge324.loopexit.unr-lcssa:                ; preds = %153, %.lr.ph323.preheader
  %indvars.iv465.unr = phi i64 [ 0, %.lr.ph323.preheader ], [ %indvars.iv.next466.1, %153 ]
  %lcmp.mod619.not = icmp eq i64 %xtraiter617, 0
  br i1 %lcmp.mod619.not, label %._crit_edge324, label %.lr.ph323.epil

.lr.ph323.epil:                                   ; preds = %._crit_edge324.loopexit.unr-lcssa
  %156 = getelementptr inbounds %struct._Fact, ptr %127, i64 %indvars.iv470, i32 1, i64 %indvars.iv465.unr
  %157 = load i32, ptr %156, align 4, !tbaa !9
  %158 = icmp sgt i32 %157, -1
  br i1 %158, label %._crit_edge324.loopexit.epilog-lcssa, label %159

159:                                              ; preds = %.lr.ph323.epil
  %160 = xor i32 %157, -1
  %161 = zext nneg i32 %160 to i64
  %162 = getelementptr inbounds [15 x i32], ptr %125, i64 0, i64 %161
  %163 = load i32, ptr %162, align 4, !tbaa !9
  br label %._crit_edge324.loopexit.epilog-lcssa

._crit_edge324.loopexit.epilog-lcssa:             ; preds = %159, %.lr.ph323.epil
  %164 = phi i32 [ %163, %159 ], [ %157, %.lr.ph323.epil ]
  %165 = getelementptr inbounds [15 x i32], ptr @largs, i64 0, i64 %indvars.iv465.unr
  store i32 %164, ptr %165, align 4, !tbaa !9
  br label %._crit_edge324

._crit_edge324:                                   ; preds = %._crit_edge324.loopexit.epilog-lcssa, %._crit_edge324.loopexit.unr-lcssa, %126
  %166 = getelementptr inbounds [50 x ptr], ptr @lpos, i64 0, i64 %130
  %167 = load ptr, ptr %166, align 8, !tbaa !5
  %168 = tail call i32 @fact_adress()
  %169 = sext i32 %168 to i64
  %170 = getelementptr inbounds i32, ptr %167, i64 %169
  %171 = load i32, ptr %170, align 4, !tbaa !9
  %.not275 = icmp eq i32 %171, 0
  %.pre533.pre = load i32, ptr %121, align 8, !tbaa !28
  br i1 %.not275, label %._crit_edge329.loopexit, label %172

172:                                              ; preds = %._crit_edge324
  %indvars.iv.next471 = add nuw nsw i64 %indvars.iv470, 1
  %173 = sext i32 %.pre533.pre to i64
  %174 = icmp slt i64 %indvars.iv.next471, %173
  br i1 %174, label %126, label %._crit_edge329.loopexit, !llvm.loop !34

._crit_edge329.loopexit:                          ; preds = %._crit_edge324, %172
  %.3.lcssa.ph.in = phi i64 [ %indvars.iv.next471, %172 ], [ %indvars.iv470, %._crit_edge324 ]
  %.3.lcssa.ph = trunc i64 %.3.lcssa.ph.in to i32
  br label %._crit_edge329

._crit_edge329:                                   ; preds = %._crit_edge329.loopexit, %119
  %175 = phi i32 [ %122, %119 ], [ %.pre533.pre, %._crit_edge329.loopexit ]
  %.3.lcssa = phi i32 [ 0, %119 ], [ %.3.lcssa.ph, %._crit_edge329.loopexit ]
  %176 = icmp slt i32 %.3.lcssa, %175
  br i1 %176, label %177, label %180

177:                                              ; preds = %._crit_edge329
  %178 = getelementptr inbounds i8, ptr %.0236334, i64 80
  %179 = load ptr, ptr %178, align 8, !tbaa !35
  %.not270 = icmp eq ptr %179, null
  br i1 %.not270, label %.preheader281, label %119, !llvm.loop !36

180:                                              ; preds = %._crit_edge329
  %181 = getelementptr inbounds i8, ptr %120, i64 304
  %.0226353 = load ptr, ptr %181, align 8, !tbaa !5
  %.not276354 = icmp eq ptr %.0226353, null
  br i1 %.not276354, label %._crit_edge360, label %.lr.ph359

.lr.ph359:                                        ; preds = %180
  %182 = getelementptr inbounds i8, ptr %.0236334, i64 8
  br label %183

183:                                              ; preds = %.lr.ph359, %._crit_edge351
  %.0226357 = phi ptr [ %.0226353, %.lr.ph359 ], [ %.0226, %._crit_edge351 ]
  %.2244356 = phi i8 [ %.1243.ph368, %.lr.ph359 ], [ %.3245.lcssa, %._crit_edge351 ]
  %.0252355 = phi i32 [ 0, %.lr.ph359 ], [ %184, %._crit_edge351 ]
  %184 = add nuw nsw i32 %.0252355, 1
  %185 = getelementptr inbounds i8, ptr %.0226357, i64 152
  %186 = load i32, ptr %185, align 8, !tbaa !37
  %187 = icmp sgt i32 %186, 0
  br i1 %187, label %.lr.ph350, label %._crit_edge351

.lr.ph350:                                        ; preds = %183
  %188 = getelementptr inbounds i8, ptr %.0226357, i64 144
  br label %189

189:                                              ; preds = %.lr.ph350, %268
  %indvars.iv483 = phi i64 [ 0, %.lr.ph350 ], [ %indvars.iv.next484, %268 ]
  %.3245347 = phi i8 [ %.2244356, %.lr.ph350 ], [ %.4246, %268 ]
  %190 = load ptr, ptr %188, align 8, !tbaa !39
  %191 = getelementptr inbounds %struct._Fact, ptr %190, i64 %indvars.iv483
  %192 = load i32, ptr %191, align 4, !tbaa !31
  store i32 %192, ptr @lp, align 4, !tbaa !9
  %193 = sext i32 %192 to i64
  %194 = getelementptr inbounds [50 x i32], ptr @garity, i64 0, i64 %193
  %195 = load i32, ptr %194, align 4, !tbaa !9
  %196 = icmp sgt i32 %195, 0
  br i1 %196, label %.lr.ph340.preheader, label %._crit_edge341

.lr.ph340.preheader:                              ; preds = %189
  %wide.trip.count477 = zext nneg i32 %195 to i64
  %xtraiter622 = and i64 %wide.trip.count477, 1
  %197 = icmp eq i32 %195, 1
  br i1 %197, label %._crit_edge341.loopexit.unr-lcssa, label %.lr.ph340.preheader.new

.lr.ph340.preheader.new:                          ; preds = %.lr.ph340.preheader
  %unroll_iter625 = and i64 %wide.trip.count477, 2147483646
  br label %.lr.ph340

.lr.ph340:                                        ; preds = %216, %.lr.ph340.preheader.new
  %indvars.iv473 = phi i64 [ 0, %.lr.ph340.preheader.new ], [ %indvars.iv.next474.1, %216 ]
  %niter626 = phi i64 [ 0, %.lr.ph340.preheader.new ], [ %niter626.next.1, %216 ]
  %198 = getelementptr inbounds %struct._Fact, ptr %190, i64 %indvars.iv483, i32 1, i64 %indvars.iv473
  %199 = load i32, ptr %198, align 4, !tbaa !9
  %200 = icmp sgt i32 %199, -1
  br i1 %200, label %.lr.ph340.1, label %201

201:                                              ; preds = %.lr.ph340
  %202 = xor i32 %199, -1
  %203 = zext nneg i32 %202 to i64
  %204 = getelementptr inbounds [15 x i32], ptr %182, i64 0, i64 %203
  %205 = load i32, ptr %204, align 4, !tbaa !9
  br label %.lr.ph340.1

.lr.ph340.1:                                      ; preds = %.lr.ph340, %201
  %206 = phi i32 [ %205, %201 ], [ %199, %.lr.ph340 ]
  %207 = getelementptr inbounds [15 x i32], ptr @largs, i64 0, i64 %indvars.iv473
  store i32 %206, ptr %207, align 8, !tbaa !9
  %indvars.iv.next474 = or disjoint i64 %indvars.iv473, 1
  %208 = getelementptr inbounds %struct._Fact, ptr %190, i64 %indvars.iv483, i32 1, i64 %indvars.iv.next474
  %209 = load i32, ptr %208, align 4, !tbaa !9
  %210 = icmp sgt i32 %209, -1
  br i1 %210, label %216, label %211

211:                                              ; preds = %.lr.ph340.1
  %212 = xor i32 %209, -1
  %213 = zext nneg i32 %212 to i64
  %214 = getelementptr inbounds [15 x i32], ptr %182, i64 0, i64 %213
  %215 = load i32, ptr %214, align 4, !tbaa !9
  br label %216

216:                                              ; preds = %211, %.lr.ph340.1
  %217 = phi i32 [ %215, %211 ], [ %209, %.lr.ph340.1 ]
  %218 = getelementptr inbounds [15 x i32], ptr @largs, i64 0, i64 %indvars.iv.next474
  store i32 %217, ptr %218, align 4, !tbaa !9
  %indvars.iv.next474.1 = add nuw nsw i64 %indvars.iv473, 2
  %niter626.next.1 = add i64 %niter626, 2
  %niter626.ncmp.1 = icmp eq i64 %niter626.next.1, %unroll_iter625
  br i1 %niter626.ncmp.1, label %._crit_edge341.loopexit.unr-lcssa, label %.lr.ph340, !llvm.loop !40

._crit_edge341.loopexit.unr-lcssa:                ; preds = %216, %.lr.ph340.preheader
  %indvars.iv473.unr = phi i64 [ 0, %.lr.ph340.preheader ], [ %indvars.iv.next474.1, %216 ]
  %lcmp.mod624.not = icmp eq i64 %xtraiter622, 0
  br i1 %lcmp.mod624.not, label %._crit_edge341, label %.lr.ph340.epil

.lr.ph340.epil:                                   ; preds = %._crit_edge341.loopexit.unr-lcssa
  %219 = getelementptr inbounds %struct._Fact, ptr %190, i64 %indvars.iv483, i32 1, i64 %indvars.iv473.unr
  %220 = load i32, ptr %219, align 4, !tbaa !9
  %221 = icmp sgt i32 %220, -1
  br i1 %221, label %._crit_edge341.loopexit.epilog-lcssa, label %222

222:                                              ; preds = %.lr.ph340.epil
  %223 = xor i32 %220, -1
  %224 = zext nneg i32 %223 to i64
  %225 = getelementptr inbounds [15 x i32], ptr %182, i64 0, i64 %224
  %226 = load i32, ptr %225, align 4, !tbaa !9
  br label %._crit_edge341.loopexit.epilog-lcssa

._crit_edge341.loopexit.epilog-lcssa:             ; preds = %222, %.lr.ph340.epil
  %227 = phi i32 [ %226, %222 ], [ %220, %.lr.ph340.epil ]
  %228 = getelementptr inbounds [15 x i32], ptr @largs, i64 0, i64 %indvars.iv473.unr
  store i32 %227, ptr %228, align 4, !tbaa !9
  br label %._crit_edge341

._crit_edge341:                                   ; preds = %._crit_edge341.loopexit.epilog-lcssa, %._crit_edge341.loopexit.unr-lcssa, %189
  %229 = tail call i32 @fact_adress()
  %230 = load i32, ptr @lp, align 4, !tbaa !9
  %231 = sext i32 %230 to i64
  %232 = getelementptr inbounds [50 x ptr], ptr @lpos, i64 0, i64 %231
  %233 = load ptr, ptr %232, align 8, !tbaa !5
  %234 = sext i32 %229 to i64
  %235 = getelementptr inbounds i32, ptr %233, i64 %234
  %236 = load i32, ptr %235, align 4, !tbaa !9
  %.not279 = icmp eq i32 %236, 0
  br i1 %.not279, label %237, label %268

237:                                              ; preds = %._crit_edge341
  store i32 1, ptr %235, align 4, !tbaa !9
  %238 = load i32, ptr @lp, align 4, !tbaa !9
  %239 = sext i32 %238 to i64
  %240 = getelementptr inbounds [50 x ptr], ptr @lneg, i64 0, i64 %239
  %241 = load ptr, ptr %240, align 8, !tbaa !5
  %242 = getelementptr inbounds i32, ptr %241, i64 %234
  store i32 1, ptr %242, align 4, !tbaa !9
  %243 = load i32, ptr @lp, align 4, !tbaa !9
  %244 = sext i32 %243 to i64
  %245 = getelementptr inbounds [50 x ptr], ptr @luse, i64 0, i64 %244
  %246 = load ptr, ptr %245, align 8, !tbaa !5
  %247 = getelementptr inbounds i32, ptr %246, i64 %234
  store i32 1, ptr %247, align 4, !tbaa !9
  %248 = load i32, ptr @gnum_relevant_facts, align 4, !tbaa !9
  %249 = icmp eq i32 %248, 150000
  br i1 %249, label %250, label %252

250:                                              ; preds = %237
  %251 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str, i32 noundef 150000)
  tail call void @exit(i32 noundef 1) #10
  unreachable

252:                                              ; preds = %237
  %253 = load i32, ptr @lp, align 4, !tbaa !9
  %254 = sext i32 %248 to i64
  %255 = getelementptr inbounds [150000 x %struct._Fact], ptr @grelevant_facts, i64 0, i64 %254
  store i32 %253, ptr %255, align 8, !tbaa !31
  %256 = sext i32 %253 to i64
  %257 = getelementptr inbounds [50 x i32], ptr @garity, i64 0, i64 %256
  %258 = load i32, ptr %257, align 4, !tbaa !9
  %259 = icmp sgt i32 %258, 0
  br i1 %259, label %.lr.ph344.preheader, label %._crit_edge345

.lr.ph344.preheader:                              ; preds = %252
  %260 = mul nsw i64 %254, 24
  %scevgep = getelementptr i8, ptr getelementptr inbounds (i8, ptr @grelevant_facts, i64 4), i64 %260
  %261 = zext nneg i32 %258 to i64
  %262 = shl nuw nsw i64 %261, 2
  tail call void @llvm.memcpy.p0.p0.i64(ptr align 4 %scevgep, ptr nonnull align 16 @largs, i64 %262, i1 false), !tbaa !9
  br label %._crit_edge345

._crit_edge345:                                   ; preds = %.lr.ph344.preheader, %252
  %263 = getelementptr inbounds [50 x ptr], ptr @lindex, i64 0, i64 %256
  %264 = load ptr, ptr %263, align 8, !tbaa !5
  %265 = getelementptr inbounds i32, ptr %264, i64 %234
  store i32 %248, ptr %265, align 4, !tbaa !9
  %266 = load i32, ptr @gnum_relevant_facts, align 4, !tbaa !9
  %267 = add nsw i32 %266, 1
  store i32 %267, ptr @gnum_relevant_facts, align 4, !tbaa !9
  br label %268

268:                                              ; preds = %._crit_edge341, %._crit_edge345
  %.4246 = phi i8 [ %.3245347, %._crit_edge341 ], [ 0, %._crit_edge345 ]
  %indvars.iv.next484 = add nuw nsw i64 %indvars.iv483, 1
  %269 = load i32, ptr %185, align 8, !tbaa !37
  %270 = sext i32 %269 to i64
  %271 = icmp slt i64 %indvars.iv.next484, %270
  br i1 %271, label %189, label %._crit_edge351, !llvm.loop !41

._crit_edge351:                                   ; preds = %268, %183
  %.3245.lcssa = phi i8 [ %.2244356, %183 ], [ %.4246, %268 ]
  %272 = getelementptr inbounds i8, ptr %.0226357, i64 248
  %.0226 = load ptr, ptr %272, align 8, !tbaa !5
  %.not276 = icmp eq ptr %.0226, null
  br i1 %.not276, label %._crit_edge360, label %183, !llvm.loop !42

._crit_edge360:                                   ; preds = %._crit_edge351, %180
  %.0252.lcssa = phi i32 [ 0, %180 ], [ %184, %._crit_edge351 ]
  %.2244.lcssa = phi i8 [ %.1243.ph368, %180 ], [ %.3245.lcssa, %._crit_edge351 ]
  %273 = tail call ptr @new_Action() #9
  store ptr %120, ptr %273, align 8, !tbaa !43
  %274 = load ptr, ptr %120, align 8, !tbaa !45
  %275 = getelementptr inbounds i8, ptr %274, i64 132
  %276 = load i8, ptr %275, align 4, !tbaa !46
  %277 = getelementptr inbounds i8, ptr %273, i64 16
  store i8 %276, ptr %277, align 8, !tbaa !48
  %278 = getelementptr inbounds i8, ptr %120, i64 8
  %279 = load i32, ptr %278, align 8, !tbaa !49
  %280 = icmp sgt i32 %279, 0
  br i1 %280, label %.lr.ph365, label %._crit_edge366

.lr.ph365:                                        ; preds = %._crit_edge360
  %281 = getelementptr inbounds i8, ptr %.0236334, i64 8
  %282 = getelementptr inbounds i8, ptr %273, i64 96
  br label %283

283:                                              ; preds = %.lr.ph365, %283
  %indvars.iv485 = phi i64 [ 0, %.lr.ph365 ], [ %indvars.iv.next486, %283 ]
  %284 = getelementptr inbounds [15 x i32], ptr %281, i64 0, i64 %indvars.iv485
  %285 = load i32, ptr %284, align 4, !tbaa !9
  %286 = getelementptr inbounds [15 x i32], ptr %282, i64 0, i64 %indvars.iv485
  store i32 %285, ptr %286, align 4, !tbaa !9
  %indvars.iv.next486 = add nuw nsw i64 %indvars.iv485, 1
  %287 = load i32, ptr %278, align 8, !tbaa !49
  %288 = sext i32 %287 to i64
  %289 = icmp slt i64 %indvars.iv.next486, %288
  br i1 %289, label %283, label %._crit_edge366, !llvm.loop !50

._crit_edge366:                                   ; preds = %283, %._crit_edge360
  %290 = load ptr, ptr %274, align 8, !tbaa !51
  %291 = getelementptr inbounds i8, ptr %273, i64 24
  store ptr %290, ptr %291, align 8, !tbaa !52
  %292 = getelementptr inbounds i8, ptr %274, i64 128
  %293 = load i32, ptr %292, align 8, !tbaa !53
  %294 = getelementptr inbounds i8, ptr %273, i64 32
  store i32 %293, ptr %294, align 8, !tbaa !54
  tail call void @make_name_inst_table_from_NormOperator(ptr noundef nonnull %273, ptr noundef nonnull %120, ptr noundef nonnull %.0236334)
  %295 = load ptr, ptr @gactions, align 8, !tbaa !5
  %296 = getelementptr inbounds i8, ptr %273, i64 256
  store ptr %295, ptr %296, align 8, !tbaa !55
  %297 = getelementptr inbounds i8, ptr %273, i64 248
  store i32 %.0252.lcssa, ptr %297, align 8, !tbaa !56
  store ptr %273, ptr @gactions, align 8, !tbaa !5
  %298 = load i32, ptr @gnum_actions, align 4, !tbaa !9
  %299 = add nsw i32 %298, 1
  store i32 %299, ptr @gnum_actions, align 4, !tbaa !9
  %300 = getelementptr inbounds i8, ptr %.0236334, i64 80
  %301 = load ptr, ptr %300, align 8, !tbaa !35
  %.not277 = icmp eq ptr %301, null
  %.phi.trans.insert = getelementptr inbounds i8, ptr %.0236334, i64 72
  %.pre534 = load ptr, ptr %.phi.trans.insert, align 8, !tbaa !57
  br i1 %.not277, label %.preheader281.critedge, label %._crit_edge366._crit_edge

._crit_edge366._crit_edge:                        ; preds = %._crit_edge366
  %302 = getelementptr inbounds i8, ptr %301, i64 72
  store ptr %.pre534, ptr %302, align 8, !tbaa !57
  %.not278 = icmp eq ptr %.pre534, null
  %303 = getelementptr inbounds i8, ptr %.pre534, i64 80
  %geasy_templates.sink = select i1 %.not278, ptr @geasy_templates, ptr %303
  store ptr %301, ptr %geasy_templates.sink, align 8, !tbaa !5
  tail call void @free_single_EasyTemplate(ptr noundef nonnull %.0236334) #9
  br label %.lr.ph335, !llvm.loop !36

.lr.ph409:                                        ; preds = %.preheader281, %473
  %indvars.iv518 = phi i64 [ %indvars.iv.next519, %473 ], [ 0, %.preheader281 ]
  %.5247407 = phi i8 [ %.9251, %473 ], [ %.1243.ph.lcssa294, %.preheader281 ]
  %304 = getelementptr inbounds i8, ptr %55, i64 %indvars.iv518
  %305 = load i8, ptr %304, align 1, !tbaa !58
  %.not271 = icmp eq i8 %305, 0
  br i1 %.not271, label %306, label %473

306:                                              ; preds = %.lr.ph409
  %307 = load ptr, ptr @ghard_templates, align 8, !tbaa !5
  %308 = getelementptr inbounds ptr, ptr %307, i64 %indvars.iv518
  %309 = load ptr, ptr %308, align 8, !tbaa !5
  %310 = getelementptr inbounds i8, ptr %309, i64 80
  %311 = load i32, ptr %310, align 8, !tbaa !59
  %312 = icmp sgt i32 %311, 0
  br i1 %312, label %.lr.ph378, label %._crit_edge379

.lr.ph378:                                        ; preds = %306
  %313 = getelementptr inbounds i8, ptr %309, i64 72
  br label %314

314:                                              ; preds = %.lr.ph378, %354
  %indvars.iv496 = phi i64 [ 0, %.lr.ph378 ], [ %indvars.iv.next497, %354 ]
  %315 = load ptr, ptr %313, align 8, !tbaa !61
  %316 = getelementptr inbounds %struct._Fact, ptr %315, i64 %indvars.iv496
  %317 = load i32, ptr %316, align 4, !tbaa !31
  store i32 %317, ptr @lp, align 4, !tbaa !9
  %318 = sext i32 %317 to i64
  %319 = getelementptr inbounds [50 x i32], ptr @garity, i64 0, i64 %318
  %320 = load i32, ptr %319, align 4, !tbaa !9
  %321 = icmp sgt i32 %320, 0
  br i1 %321, label %.lr.ph373.preheader, label %._crit_edge374

.lr.ph373.preheader:                              ; preds = %314
  %322 = ptrtoint ptr %315 to i64
  %323 = mul nsw i64 %indvars.iv496, -24
  %324 = add i64 %323, add (i64 ptrtoint (ptr @largs to i64), i64 -4)
  %wide.trip.count494 = zext nneg i32 %320 to i64
  %min.iters.check587 = icmp ult i32 %320, 8
  %325 = sub i64 %324, %322
  %diff.check584 = icmp ult i64 %325, 32
  %or.cond599 = select i1 %min.iters.check587, i1 true, i1 %diff.check584
  br i1 %or.cond599, label %.lr.ph373.preheader602, label %vector.ph588

vector.ph588:                                     ; preds = %.lr.ph373.preheader
  %n.vec590 = and i64 %wide.trip.count494, 2147483640
  br label %vector.body592

vector.body592:                                   ; preds = %vector.body592, %vector.ph588
  %index593 = phi i64 [ 0, %vector.ph588 ], [ %index.next596, %vector.body592 ]
  %326 = getelementptr inbounds %struct._Fact, ptr %315, i64 %indvars.iv496, i32 1, i64 %index593
  %327 = getelementptr inbounds i8, ptr %326, i64 16
  %wide.load594 = load <4 x i32>, ptr %326, align 4, !tbaa !9
  %wide.load595 = load <4 x i32>, ptr %327, align 4, !tbaa !9
  %328 = getelementptr inbounds [15 x i32], ptr @largs, i64 0, i64 %index593
  %329 = getelementptr inbounds i8, ptr %328, i64 16
  store <4 x i32> %wide.load594, ptr %328, align 16, !tbaa !9
  store <4 x i32> %wide.load595, ptr %329, align 16, !tbaa !9
  %index.next596 = add nuw i64 %index593, 8
  %330 = icmp eq i64 %index.next596, %n.vec590
  br i1 %330, label %middle.block585, label %vector.body592, !llvm.loop !62

middle.block585:                                  ; preds = %vector.body592
  %cmp.n597 = icmp eq i64 %n.vec590, %wide.trip.count494
  br i1 %cmp.n597, label %._crit_edge374, label %.lr.ph373.preheader602

.lr.ph373.preheader602:                           ; preds = %middle.block585, %.lr.ph373.preheader
  %indvars.iv490.ph = phi i64 [ 0, %.lr.ph373.preheader ], [ %n.vec590, %middle.block585 ]
  %xtraiter627 = and i64 %wide.trip.count494, 3
  %lcmp.mod628.not = icmp eq i64 %xtraiter627, 0
  br i1 %lcmp.mod628.not, label %.lr.ph373.prol.loopexit, label %.lr.ph373.prol

.lr.ph373.prol:                                   ; preds = %.lr.ph373.preheader602, %.lr.ph373.prol
  %indvars.iv490.prol = phi i64 [ %indvars.iv.next491.prol, %.lr.ph373.prol ], [ %indvars.iv490.ph, %.lr.ph373.preheader602 ]
  %prol.iter629 = phi i64 [ %prol.iter629.next, %.lr.ph373.prol ], [ 0, %.lr.ph373.preheader602 ]
  %331 = getelementptr inbounds %struct._Fact, ptr %315, i64 %indvars.iv496, i32 1, i64 %indvars.iv490.prol
  %332 = load i32, ptr %331, align 4, !tbaa !9
  %333 = getelementptr inbounds [15 x i32], ptr @largs, i64 0, i64 %indvars.iv490.prol
  store i32 %332, ptr %333, align 4, !tbaa !9
  %indvars.iv.next491.prol = add nuw nsw i64 %indvars.iv490.prol, 1
  %prol.iter629.next = add i64 %prol.iter629, 1
  %prol.iter629.cmp.not = icmp eq i64 %prol.iter629.next, %xtraiter627
  br i1 %prol.iter629.cmp.not, label %.lr.ph373.prol.loopexit, label %.lr.ph373.prol, !llvm.loop !63

.lr.ph373.prol.loopexit:                          ; preds = %.lr.ph373.prol, %.lr.ph373.preheader602
  %indvars.iv490.unr = phi i64 [ %indvars.iv490.ph, %.lr.ph373.preheader602 ], [ %indvars.iv.next491.prol, %.lr.ph373.prol ]
  %334 = sub nsw i64 %indvars.iv490.ph, %wide.trip.count494
  %335 = icmp ugt i64 %334, -4
  br i1 %335, label %._crit_edge374, label %.lr.ph373

.lr.ph373:                                        ; preds = %.lr.ph373.prol.loopexit, %.lr.ph373
  %indvars.iv490 = phi i64 [ %indvars.iv.next491.3, %.lr.ph373 ], [ %indvars.iv490.unr, %.lr.ph373.prol.loopexit ]
  %336 = getelementptr inbounds %struct._Fact, ptr %315, i64 %indvars.iv496, i32 1, i64 %indvars.iv490
  %337 = load i32, ptr %336, align 4, !tbaa !9
  %338 = getelementptr inbounds [15 x i32], ptr @largs, i64 0, i64 %indvars.iv490
  store i32 %337, ptr %338, align 4, !tbaa !9
  %indvars.iv.next491 = add nuw nsw i64 %indvars.iv490, 1
  %339 = getelementptr inbounds %struct._Fact, ptr %315, i64 %indvars.iv496, i32 1, i64 %indvars.iv.next491
  %340 = load i32, ptr %339, align 4, !tbaa !9
  %341 = getelementptr inbounds [15 x i32], ptr @largs, i64 0, i64 %indvars.iv.next491
  store i32 %340, ptr %341, align 4, !tbaa !9
  %indvars.iv.next491.1 = add nuw nsw i64 %indvars.iv490, 2
  %342 = getelementptr inbounds %struct._Fact, ptr %315, i64 %indvars.iv496, i32 1, i64 %indvars.iv.next491.1
  %343 = load i32, ptr %342, align 4, !tbaa !9
  %344 = getelementptr inbounds [15 x i32], ptr @largs, i64 0, i64 %indvars.iv.next491.1
  store i32 %343, ptr %344, align 4, !tbaa !9
  %indvars.iv.next491.2 = add nuw nsw i64 %indvars.iv490, 3
  %345 = getelementptr inbounds %struct._Fact, ptr %315, i64 %indvars.iv496, i32 1, i64 %indvars.iv.next491.2
  %346 = load i32, ptr %345, align 4, !tbaa !9
  %347 = getelementptr inbounds [15 x i32], ptr @largs, i64 0, i64 %indvars.iv.next491.2
  store i32 %346, ptr %347, align 4, !tbaa !9
  %indvars.iv.next491.3 = add nuw nsw i64 %indvars.iv490, 4
  %exitcond495.not.3 = icmp eq i64 %indvars.iv.next491.3, %wide.trip.count494
  br i1 %exitcond495.not.3, label %._crit_edge374, label %.lr.ph373, !llvm.loop !64

._crit_edge374:                                   ; preds = %.lr.ph373.prol.loopexit, %.lr.ph373, %middle.block585, %314
  %348 = getelementptr inbounds [50 x ptr], ptr @lpos, i64 0, i64 %318
  %349 = load ptr, ptr %348, align 8, !tbaa !5
  %350 = tail call i32 @fact_adress()
  %351 = sext i32 %350 to i64
  %352 = getelementptr inbounds i32, ptr %349, i64 %351
  %353 = load i32, ptr %352, align 4, !tbaa !9
  %.not272 = icmp eq i32 %353, 0
  %.pre535.pre = load i32, ptr %310, align 8, !tbaa !59
  br i1 %.not272, label %._crit_edge379.loopexit, label %354

354:                                              ; preds = %._crit_edge374
  %indvars.iv.next497 = add nuw nsw i64 %indvars.iv496, 1
  %355 = sext i32 %.pre535.pre to i64
  %356 = icmp slt i64 %indvars.iv.next497, %355
  br i1 %356, label %314, label %._crit_edge379.loopexit, !llvm.loop !65

._crit_edge379.loopexit:                          ; preds = %._crit_edge374, %354
  %.6233.lcssa.ph.in = phi i64 [ %indvars.iv.next497, %354 ], [ %indvars.iv496, %._crit_edge374 ]
  %.6233.lcssa.ph = trunc i64 %.6233.lcssa.ph.in to i32
  br label %._crit_edge379

._crit_edge379:                                   ; preds = %._crit_edge379.loopexit, %306
  %357 = phi i32 [ %311, %306 ], [ %.pre535.pre, %._crit_edge379.loopexit ]
  %.6233.lcssa = phi i32 [ 0, %306 ], [ %.6233.lcssa.ph, %._crit_edge379.loopexit ]
  %358 = icmp slt i32 %.6233.lcssa, %357
  br i1 %358, label %473, label %359

359:                                              ; preds = %._crit_edge379
  %360 = getelementptr inbounds i8, ptr %309, i64 120
  %.0397 = load ptr, ptr %360, align 8, !tbaa !5
  %.not273398 = icmp eq ptr %.0397, null
  br i1 %.not273398, label %._crit_edge401, label %.preheader280

.preheader280:                                    ; preds = %359, %._crit_edge395
  %.0400 = phi ptr [ %.0, %._crit_edge395 ], [ %.0397, %359 ]
  %.6248399 = phi i8 [ %.7249.lcssa, %._crit_edge395 ], [ %.5247407, %359 ]
  %361 = getelementptr inbounds i8, ptr %.0400, i64 24
  %362 = load i32, ptr %361, align 8, !tbaa !66
  %363 = icmp sgt i32 %362, 0
  br i1 %363, label %.lr.ph394, label %._crit_edge395

.lr.ph394:                                        ; preds = %.preheader280
  %364 = getelementptr inbounds i8, ptr %.0400, i64 16
  br label %365

365:                                              ; preds = %.lr.ph394, %438
  %indvars.iv512 = phi i64 [ 0, %.lr.ph394 ], [ %indvars.iv.next513, %438 ]
  %.7249392 = phi i8 [ %.6248399, %.lr.ph394 ], [ %.8250, %438 ]
  %366 = load ptr, ptr %364, align 8, !tbaa !68
  %367 = getelementptr inbounds %struct._Fact, ptr %366, i64 %indvars.iv512
  %368 = load i32, ptr %367, align 4, !tbaa !31
  store i32 %368, ptr @lp, align 4, !tbaa !9
  %369 = sext i32 %368 to i64
  %370 = getelementptr inbounds [50 x i32], ptr @garity, i64 0, i64 %369
  %371 = load i32, ptr %370, align 4, !tbaa !9
  %372 = icmp sgt i32 %371, 0
  br i1 %372, label %.lr.ph385.preheader, label %._crit_edge386

.lr.ph385.preheader:                              ; preds = %365
  %373 = ptrtoint ptr %366 to i64
  %374 = mul nsw i64 %indvars.iv512, -24
  %375 = add i64 %374, add (i64 ptrtoint (ptr @largs to i64), i64 -4)
  %wide.trip.count505 = zext nneg i32 %371 to i64
  %min.iters.check572 = icmp ult i32 %371, 8
  %376 = sub i64 %375, %373
  %diff.check569 = icmp ult i64 %376, 32
  %or.cond600 = select i1 %min.iters.check572, i1 true, i1 %diff.check569
  br i1 %or.cond600, label %.lr.ph385.preheader601, label %vector.ph573

vector.ph573:                                     ; preds = %.lr.ph385.preheader
  %n.vec575 = and i64 %wide.trip.count505, 2147483640
  br label %vector.body577

vector.body577:                                   ; preds = %vector.body577, %vector.ph573
  %index578 = phi i64 [ 0, %vector.ph573 ], [ %index.next581, %vector.body577 ]
  %377 = getelementptr inbounds %struct._Fact, ptr %366, i64 %indvars.iv512, i32 1, i64 %index578
  %378 = getelementptr inbounds i8, ptr %377, i64 16
  %wide.load579 = load <4 x i32>, ptr %377, align 4, !tbaa !9
  %wide.load580 = load <4 x i32>, ptr %378, align 4, !tbaa !9
  %379 = getelementptr inbounds [15 x i32], ptr @largs, i64 0, i64 %index578
  %380 = getelementptr inbounds i8, ptr %379, i64 16
  store <4 x i32> %wide.load579, ptr %379, align 16, !tbaa !9
  store <4 x i32> %wide.load580, ptr %380, align 16, !tbaa !9
  %index.next581 = add nuw i64 %index578, 8
  %381 = icmp eq i64 %index.next581, %n.vec575
  br i1 %381, label %middle.block570, label %vector.body577, !llvm.loop !69

middle.block570:                                  ; preds = %vector.body577
  %cmp.n582 = icmp eq i64 %n.vec575, %wide.trip.count505
  br i1 %cmp.n582, label %._crit_edge386, label %.lr.ph385.preheader601

.lr.ph385.preheader601:                           ; preds = %middle.block570, %.lr.ph385.preheader
  %indvars.iv501.ph = phi i64 [ 0, %.lr.ph385.preheader ], [ %n.vec575, %middle.block570 ]
  %xtraiter630 = and i64 %wide.trip.count505, 3
  %lcmp.mod631.not = icmp eq i64 %xtraiter630, 0
  br i1 %lcmp.mod631.not, label %.lr.ph385.prol.loopexit, label %.lr.ph385.prol

.lr.ph385.prol:                                   ; preds = %.lr.ph385.preheader601, %.lr.ph385.prol
  %indvars.iv501.prol = phi i64 [ %indvars.iv.next502.prol, %.lr.ph385.prol ], [ %indvars.iv501.ph, %.lr.ph385.preheader601 ]
  %prol.iter632 = phi i64 [ %prol.iter632.next, %.lr.ph385.prol ], [ 0, %.lr.ph385.preheader601 ]
  %382 = getelementptr inbounds %struct._Fact, ptr %366, i64 %indvars.iv512, i32 1, i64 %indvars.iv501.prol
  %383 = load i32, ptr %382, align 4, !tbaa !9
  %384 = getelementptr inbounds [15 x i32], ptr @largs, i64 0, i64 %indvars.iv501.prol
  store i32 %383, ptr %384, align 4, !tbaa !9
  %indvars.iv.next502.prol = add nuw nsw i64 %indvars.iv501.prol, 1
  %prol.iter632.next = add i64 %prol.iter632, 1
  %prol.iter632.cmp.not = icmp eq i64 %prol.iter632.next, %xtraiter630
  br i1 %prol.iter632.cmp.not, label %.lr.ph385.prol.loopexit, label %.lr.ph385.prol, !llvm.loop !70

.lr.ph385.prol.loopexit:                          ; preds = %.lr.ph385.prol, %.lr.ph385.preheader601
  %indvars.iv501.unr = phi i64 [ %indvars.iv501.ph, %.lr.ph385.preheader601 ], [ %indvars.iv.next502.prol, %.lr.ph385.prol ]
  %385 = sub nsw i64 %indvars.iv501.ph, %wide.trip.count505
  %386 = icmp ugt i64 %385, -4
  br i1 %386, label %._crit_edge386, label %.lr.ph385

.lr.ph385:                                        ; preds = %.lr.ph385.prol.loopexit, %.lr.ph385
  %indvars.iv501 = phi i64 [ %indvars.iv.next502.3, %.lr.ph385 ], [ %indvars.iv501.unr, %.lr.ph385.prol.loopexit ]
  %387 = getelementptr inbounds %struct._Fact, ptr %366, i64 %indvars.iv512, i32 1, i64 %indvars.iv501
  %388 = load i32, ptr %387, align 4, !tbaa !9
  %389 = getelementptr inbounds [15 x i32], ptr @largs, i64 0, i64 %indvars.iv501
  store i32 %388, ptr %389, align 4, !tbaa !9
  %indvars.iv.next502 = add nuw nsw i64 %indvars.iv501, 1
  %390 = getelementptr inbounds %struct._Fact, ptr %366, i64 %indvars.iv512, i32 1, i64 %indvars.iv.next502
  %391 = load i32, ptr %390, align 4, !tbaa !9
  %392 = getelementptr inbounds [15 x i32], ptr @largs, i64 0, i64 %indvars.iv.next502
  store i32 %391, ptr %392, align 4, !tbaa !9
  %indvars.iv.next502.1 = add nuw nsw i64 %indvars.iv501, 2
  %393 = getelementptr inbounds %struct._Fact, ptr %366, i64 %indvars.iv512, i32 1, i64 %indvars.iv.next502.1
  %394 = load i32, ptr %393, align 4, !tbaa !9
  %395 = getelementptr inbounds [15 x i32], ptr @largs, i64 0, i64 %indvars.iv.next502.1
  store i32 %394, ptr %395, align 4, !tbaa !9
  %indvars.iv.next502.2 = add nuw nsw i64 %indvars.iv501, 3
  %396 = getelementptr inbounds %struct._Fact, ptr %366, i64 %indvars.iv512, i32 1, i64 %indvars.iv.next502.2
  %397 = load i32, ptr %396, align 4, !tbaa !9
  %398 = getelementptr inbounds [15 x i32], ptr @largs, i64 0, i64 %indvars.iv.next502.2
  store i32 %397, ptr %398, align 4, !tbaa !9
  %indvars.iv.next502.3 = add nuw nsw i64 %indvars.iv501, 4
  %exitcond506.not.3 = icmp eq i64 %indvars.iv.next502.3, %wide.trip.count505
  br i1 %exitcond506.not.3, label %._crit_edge386, label %.lr.ph385, !llvm.loop !71

._crit_edge386:                                   ; preds = %.lr.ph385.prol.loopexit, %.lr.ph385, %middle.block570, %365
  %399 = tail call i32 @fact_adress()
  %400 = load i32, ptr @lp, align 4, !tbaa !9
  %401 = sext i32 %400 to i64
  %402 = getelementptr inbounds [50 x ptr], ptr @lpos, i64 0, i64 %401
  %403 = load ptr, ptr %402, align 8, !tbaa !5
  %404 = sext i32 %399 to i64
  %405 = getelementptr inbounds i32, ptr %403, i64 %404
  %406 = load i32, ptr %405, align 4, !tbaa !9
  %.not274 = icmp eq i32 %406, 0
  br i1 %.not274, label %407, label %438

407:                                              ; preds = %._crit_edge386
  store i32 1, ptr %405, align 4, !tbaa !9
  %408 = load i32, ptr @lp, align 4, !tbaa !9
  %409 = sext i32 %408 to i64
  %410 = getelementptr inbounds [50 x ptr], ptr @lneg, i64 0, i64 %409
  %411 = load ptr, ptr %410, align 8, !tbaa !5
  %412 = getelementptr inbounds i32, ptr %411, i64 %404
  store i32 1, ptr %412, align 4, !tbaa !9
  %413 = load i32, ptr @lp, align 4, !tbaa !9
  %414 = sext i32 %413 to i64
  %415 = getelementptr inbounds [50 x ptr], ptr @luse, i64 0, i64 %414
  %416 = load ptr, ptr %415, align 8, !tbaa !5
  %417 = getelementptr inbounds i32, ptr %416, i64 %404
  store i32 1, ptr %417, align 4, !tbaa !9
  %418 = load i32, ptr @gnum_relevant_facts, align 4, !tbaa !9
  %419 = icmp eq i32 %418, 150000
  br i1 %419, label %420, label %422

420:                                              ; preds = %407
  %421 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str, i32 noundef 150000)
  tail call void @exit(i32 noundef 1) #10
  unreachable

422:                                              ; preds = %407
  %423 = load i32, ptr @lp, align 4, !tbaa !9
  %424 = sext i32 %418 to i64
  %425 = getelementptr inbounds [150000 x %struct._Fact], ptr @grelevant_facts, i64 0, i64 %424
  store i32 %423, ptr %425, align 8, !tbaa !31
  %426 = sext i32 %423 to i64
  %427 = getelementptr inbounds [50 x i32], ptr @garity, i64 0, i64 %426
  %428 = load i32, ptr %427, align 4, !tbaa !9
  %429 = icmp sgt i32 %428, 0
  br i1 %429, label %.lr.ph389.preheader, label %._crit_edge390

.lr.ph389.preheader:                              ; preds = %422
  %430 = mul nsw i64 %424, 24
  %scevgep507 = getelementptr i8, ptr getelementptr inbounds (i8, ptr @grelevant_facts, i64 4), i64 %430
  %431 = zext nneg i32 %428 to i64
  %432 = shl nuw nsw i64 %431, 2
  tail call void @llvm.memcpy.p0.p0.i64(ptr align 4 %scevgep507, ptr nonnull align 16 @largs, i64 %432, i1 false), !tbaa !9
  br label %._crit_edge390

._crit_edge390:                                   ; preds = %.lr.ph389.preheader, %422
  %433 = getelementptr inbounds [50 x ptr], ptr @lindex, i64 0, i64 %426
  %434 = load ptr, ptr %433, align 8, !tbaa !5
  %435 = getelementptr inbounds i32, ptr %434, i64 %404
  store i32 %418, ptr %435, align 4, !tbaa !9
  %436 = load i32, ptr @gnum_relevant_facts, align 4, !tbaa !9
  %437 = add nsw i32 %436, 1
  store i32 %437, ptr @gnum_relevant_facts, align 4, !tbaa !9
  br label %438

438:                                              ; preds = %._crit_edge386, %._crit_edge390
  %.8250 = phi i8 [ %.7249392, %._crit_edge386 ], [ 0, %._crit_edge390 ]
  %indvars.iv.next513 = add nuw nsw i64 %indvars.iv512, 1
  %439 = load i32, ptr %361, align 8, !tbaa !66
  %440 = sext i32 %439 to i64
  %441 = icmp slt i64 %indvars.iv.next513, %440
  br i1 %441, label %365, label %._crit_edge395, !llvm.loop !72

._crit_edge395:                                   ; preds = %438, %.preheader280
  %.7249.lcssa = phi i8 [ %.6248399, %.preheader280 ], [ %.8250, %438 ]
  %442 = getelementptr inbounds i8, ptr %.0400, i64 112
  %.0 = load ptr, ptr %442, align 8, !tbaa !5
  %.not273 = icmp eq ptr %.0, null
  br i1 %.not273, label %._crit_edge401, label %.preheader280, !llvm.loop !73

._crit_edge401:                                   ; preds = %._crit_edge395, %359
  %.6248.lcssa = phi i8 [ %.5247407, %359 ], [ %.7249.lcssa, %._crit_edge395 ]
  %443 = tail call ptr @new_Action() #9
  %444 = getelementptr inbounds i8, ptr %443, i64 8
  store ptr %309, ptr %444, align 8, !tbaa !74
  %445 = load ptr, ptr %309, align 8, !tbaa !75
  %446 = getelementptr inbounds i8, ptr %445, i64 132
  %447 = load i8, ptr %446, align 4, !tbaa !46
  %448 = getelementptr inbounds i8, ptr %443, i64 16
  store i8 %447, ptr %448, align 8, !tbaa !48
  %449 = getelementptr inbounds i8, ptr %445, i64 136
  %450 = load i32, ptr %449, align 8, !tbaa !76
  %451 = icmp sgt i32 %450, 0
  br i1 %451, label %.lr.ph405, label %._crit_edge406

.lr.ph405:                                        ; preds = %._crit_edge401
  %452 = getelementptr inbounds i8, ptr %309, i64 8
  %453 = getelementptr inbounds i8, ptr %443, i64 96
  br label %454

454:                                              ; preds = %.lr.ph405, %454
  %indvars.iv514 = phi i64 [ 0, %.lr.ph405 ], [ %indvars.iv.next515, %454 ]
  %455 = getelementptr inbounds [15 x i32], ptr %452, i64 0, i64 %indvars.iv514
  %456 = load i32, ptr %455, align 4, !tbaa !9
  %457 = getelementptr inbounds [15 x i32], ptr %453, i64 0, i64 %indvars.iv514
  store i32 %456, ptr %457, align 4, !tbaa !9
  %indvars.iv.next515 = add nuw nsw i64 %indvars.iv514, 1
  %458 = load i32, ptr %449, align 8, !tbaa !76
  %459 = sext i32 %458 to i64
  %460 = icmp slt i64 %indvars.iv.next515, %459
  br i1 %460, label %454, label %._crit_edge406, !llvm.loop !77

._crit_edge406:                                   ; preds = %454, %._crit_edge401
  %461 = load ptr, ptr %445, align 8, !tbaa !51
  %462 = getelementptr inbounds i8, ptr %443, i64 24
  store ptr %461, ptr %462, align 8, !tbaa !52
  %463 = getelementptr inbounds i8, ptr %445, i64 128
  %464 = load i32, ptr %463, align 8, !tbaa !53
  %465 = getelementptr inbounds i8, ptr %443, i64 32
  store i32 %464, ptr %465, align 8, !tbaa !54
  tail call void @make_name_inst_table_from_PseudoAction(ptr noundef nonnull %443, ptr noundef nonnull %309)
  %466 = load ptr, ptr @gactions, align 8, !tbaa !5
  %467 = getelementptr inbounds i8, ptr %443, i64 256
  store ptr %466, ptr %467, align 8, !tbaa !55
  %468 = getelementptr inbounds i8, ptr %309, i64 128
  %469 = load i32, ptr %468, align 8, !tbaa !78
  %470 = getelementptr inbounds i8, ptr %443, i64 248
  store i32 %469, ptr %470, align 8, !tbaa !56
  store ptr %443, ptr @gactions, align 8, !tbaa !5
  %471 = load i32, ptr @gnum_actions, align 4, !tbaa !9
  %472 = add nsw i32 %471, 1
  store i32 %472, ptr @gnum_actions, align 4, !tbaa !9
  store i8 1, ptr %304, align 1, !tbaa !58
  br label %473

473:                                              ; preds = %._crit_edge379, %.lr.ph409, %._crit_edge406
  %.9251 = phi i8 [ %.5247407, %.lr.ph409 ], [ %.5247407, %._crit_edge379 ], [ %.6248.lcssa, %._crit_edge406 ]
  %indvars.iv.next519 = add nuw nsw i64 %indvars.iv518, 1
  %474 = load i32, ptr @gnum_hard_templates, align 4, !tbaa !9
  %475 = sext i32 %474 to i64
  %476 = icmp slt i64 %indvars.iv.next519, %475
  br i1 %476, label %.lr.ph409, label %.loopexit282, !llvm.loop !79

477:                                              ; preds = %.loopexit282
  tail call void @free(ptr noundef %55) #9
  %478 = load i32, ptr @gnum_initial, align 4, !tbaa !9
  %479 = load i32, ptr @gnum_relevant_facts, align 4, !tbaa !9
  %480 = add nsw i32 %479, %478
  store i32 %480, ptr @gnum_pp_facts, align 4, !tbaa !9
  %481 = load i32, ptr getelementptr inbounds (i8, ptr @gcmd_line, i64 768), align 4, !tbaa !80
  %482 = icmp eq i32 %481, 118
  br i1 %482, label %483, label %552

483:                                              ; preds = %477
  %484 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.1)
  %485 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.2)
  %.0241411 = load ptr, ptr @ginitial, align 8, !tbaa !5
  %.not263412 = icmp eq ptr %.0241411, null
  br i1 %.not263412, label %.preheader, label %.lr.ph415

.preheader:                                       ; preds = %.lr.ph415, %483
  %486 = load i32, ptr @gnum_relevant_facts, align 4, !tbaa !9
  %487 = icmp sgt i32 %486, 0
  br i1 %487, label %.lr.ph417, label %._crit_edge418

.lr.ph415:                                        ; preds = %483, %.lr.ph415
  %.0241413 = phi ptr [ %.0241, %.lr.ph415 ], [ %.0241411, %483 ]
  %488 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.3)
  %489 = load ptr, ptr %.0241413, align 8, !tbaa !83
  tail call void @print_Fact(ptr noundef %489) #9
  %490 = getelementptr inbounds i8, ptr %.0241413, i64 8
  %.0241 = load ptr, ptr %490, align 8, !tbaa !5
  %.not263 = icmp eq ptr %.0241, null
  br i1 %.not263, label %.preheader, label %.lr.ph415, !llvm.loop !85

.lr.ph417:                                        ; preds = %.preheader, %.lr.ph417
  %indvars.iv520 = phi i64 [ %indvars.iv.next521, %.lr.ph417 ], [ 0, %.preheader ]
  %491 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.3)
  %492 = getelementptr inbounds [150000 x %struct._Fact], ptr @grelevant_facts, i64 0, i64 %indvars.iv520
  tail call void @print_Fact(ptr noundef nonnull %492) #9
  %indvars.iv.next521 = add nuw nsw i64 %indvars.iv520, 1
  %493 = load i32, ptr @gnum_relevant_facts, align 4, !tbaa !9
  %494 = sext i32 %493 to i64
  %495 = icmp slt i64 %indvars.iv.next521, %494
  br i1 %495, label %.lr.ph417, label %._crit_edge418, !llvm.loop !86

._crit_edge418:                                   ; preds = %.lr.ph417, %.preheader
  %496 = load i32, ptr @gnum_actions, align 4, !tbaa !9
  %497 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.4, i32 noundef %496)
  %498 = load i32, ptr @gnum_operators, align 4, !tbaa !9
  %499 = icmp sgt i32 %498, 0
  br i1 %499, label %.lr.ph430, label %._crit_edge431

.lr.ph430:                                        ; preds = %._crit_edge418, %._crit_edge427
  %indvars.iv528 = phi i64 [ %indvars.iv.next529, %._crit_edge427 ], [ 0, %._crit_edge418 ]
  %500 = getelementptr inbounds [50000 x ptr], ptr @goperators, i64 0, i64 %indvars.iv528
  %501 = load ptr, ptr %500, align 8, !tbaa !5
  %502 = load ptr, ptr %501, align 8, !tbaa !51
  %503 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.5, ptr noundef %502)
  %.0225422 = load ptr, ptr @gactions, align 8, !tbaa !5
  %.not264423 = icmp eq ptr %.0225422, null
  br i1 %.not264423, label %._crit_edge427, label %.lr.ph426

.lr.ph426:                                        ; preds = %.lr.ph430, %.loopexit
  %.0225424 = phi ptr [ %.0225, %.loopexit ], [ %.0225422, %.lr.ph430 ]
  %504 = load ptr, ptr %.0225424, align 8, !tbaa !43
  %.not265 = icmp eq ptr %504, null
  br i1 %.not265, label %508, label %505

505:                                              ; preds = %.lr.ph426
  %506 = load ptr, ptr %504, align 8, !tbaa !45
  %507 = load ptr, ptr %500, align 8, !tbaa !5
  %.not266 = icmp eq ptr %506, %507
  br i1 %.not266, label %508, label %.loopexit

508:                                              ; preds = %505, %.lr.ph426
  %509 = getelementptr inbounds i8, ptr %.0225424, i64 8
  %510 = load ptr, ptr %509, align 8, !tbaa !74
  %.not267 = icmp eq ptr %510, null
  br i1 %.not267, label %514, label %511

511:                                              ; preds = %508
  %512 = load ptr, ptr %510, align 8, !tbaa !75
  %513 = load ptr, ptr %500, align 8, !tbaa !5
  %.not268 = icmp eq ptr %512, %513
  br i1 %.not268, label %514, label %.loopexit

514:                                              ; preds = %511, %508
  %515 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.6)
  %516 = getelementptr inbounds i8, ptr %.0225424, i64 16
  %517 = load i8, ptr %516, align 8, !tbaa !48
  %.not269 = icmp eq i8 %517, 0
  br i1 %.not269, label %520, label %518

518:                                              ; preds = %514
  %519 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.7)
  br label %520

520:                                              ; preds = %518, %514
  %521 = load ptr, ptr %500, align 8, !tbaa !5
  %522 = getelementptr inbounds i8, ptr %521, i64 128
  %523 = load i32, ptr %522, align 8, !tbaa !53
  %524 = icmp sgt i32 %523, 0
  br i1 %524, label %.lr.ph421, label %.loopexit

.lr.ph421:                                        ; preds = %520
  %525 = getelementptr inbounds i8, ptr %.0225424, i64 36
  br label %526

526:                                              ; preds = %.lr.ph421, %541
  %indvars.iv524 = phi i64 [ 0, %.lr.ph421 ], [ %indvars.iv.next525, %541 ]
  %527 = getelementptr inbounds [15 x i32], ptr %525, i64 0, i64 %indvars.iv524
  %528 = load i32, ptr %527, align 4, !tbaa !9
  %529 = sext i32 %528 to i64
  %530 = getelementptr inbounds [2000 x ptr], ptr @gconstants, i64 0, i64 %529
  %531 = load ptr, ptr %530, align 8, !tbaa !5
  %532 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.8, ptr noundef %531)
  %533 = load ptr, ptr %500, align 8, !tbaa !5
  %534 = getelementptr inbounds i8, ptr %533, i64 136
  %535 = load i32, ptr %534, align 8, !tbaa !76
  %536 = add nsw i32 %535, -1
  %537 = sext i32 %536 to i64
  %538 = icmp slt i64 %indvars.iv524, %537
  br i1 %538, label %539, label %541

539:                                              ; preds = %526
  %540 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.9)
  %.pre536 = load ptr, ptr %500, align 8, !tbaa !5
  br label %541

541:                                              ; preds = %526, %539
  %542 = phi ptr [ %533, %526 ], [ %.pre536, %539 ]
  %indvars.iv.next525 = add nuw nsw i64 %indvars.iv524, 1
  %543 = getelementptr inbounds i8, ptr %542, i64 128
  %544 = load i32, ptr %543, align 8, !tbaa !53
  %545 = sext i32 %544 to i64
  %546 = icmp slt i64 %indvars.iv.next525, %545
  br i1 %546, label %526, label %.loopexit, !llvm.loop !87

.loopexit:                                        ; preds = %541, %520, %505, %511
  %547 = getelementptr inbounds i8, ptr %.0225424, i64 256
  %.0225 = load ptr, ptr %547, align 8, !tbaa !5
  %.not264 = icmp eq ptr %.0225, null
  br i1 %.not264, label %._crit_edge427, label %.lr.ph426, !llvm.loop !88

._crit_edge427:                                   ; preds = %.loopexit, %.lr.ph430
  %indvars.iv.next529 = add nuw nsw i64 %indvars.iv528, 1
  %548 = load i32, ptr @gnum_operators, align 4, !tbaa !9
  %549 = sext i32 %548 to i64
  %550 = icmp slt i64 %indvars.iv.next529, %549
  br i1 %550, label %.lr.ph430, label %._crit_edge431, !llvm.loop !89

._crit_edge431:                                   ; preds = %._crit_edge427, %._crit_edge418
  %551 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.10)
  br label %552

552:                                              ; preds = %._crit_edge431, %477
  ret void
}

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

; Function Attrs: nounwind uwtable
declare dso_local i32 @fact_adress() local_unnamed_addr #0

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

; Function Attrs: noreturn nounwind
declare void @exit(i32 noundef) local_unnamed_addr #3

declare ptr @new_Action() local_unnamed_addr #4

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

declare void @free_single_EasyTemplate(ptr noundef) local_unnamed_addr #4

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

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

declare void @print_Fact(ptr noundef) local_unnamed_addr #4

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

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #7

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !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 = distinct !{!11, !12}
!12 = !{!"llvm.loop.mustprogress"}
!13 = distinct !{!13, !14}
!14 = !{!"llvm.loop.unroll.disable"}
!15 = distinct !{!15, !12, !16, !17}
!16 = !{!"llvm.loop.isvectorized", i32 1}
!17 = !{!"llvm.loop.unroll.runtime.disable"}
!18 = distinct !{!18, !12, !17, !16}
!19 = distinct !{!19, !12}
!20 = distinct !{!20, !12, !16, !17}
!21 = distinct !{!21, !14}
!22 = distinct !{!22, !12, !16}
!23 = distinct !{!23, !12}
!24 = distinct !{!24, !12}
!25 = distinct !{!25, !12}
!26 = !{!27, !6, i64 0}
!27 = !{!"_EasyTemplate", !6, i64 0, !7, i64 8, !6, i64 72, !6, i64 80}
!28 = !{!29, !10, i64 264}
!29 = !{!"_NormOperator", !6, i64 0, !10, i64 8, !7, i64 12, !7, i64 72, !7, i64 132, !10, i64 192, !7, i64 196, !6, i64 256, !10, i64 264, !6, i64 272, !6, i64 280, !6, i64 288, !10, i64 296, !6, i64 304, !7, i64 312}
!30 = !{!29, !6, i64 256}
!31 = !{!32, !10, i64 0}
!32 = !{!"_Fact", !10, i64 0, !7, i64 4}
!33 = distinct !{!33, !12}
!34 = distinct !{!34, !12}
!35 = !{!27, !6, i64 80}
!36 = distinct !{!36, !12}
!37 = !{!38, !10, i64 152}
!38 = !{!"_NormEffect", !10, i64 0, !7, i64 4, !7, i64 64, !6, i64 128, !10, i64 136, !6, i64 144, !10, i64 152, !6, i64 160, !10, i64 168, !6, i64 176, !6, i64 184, !6, i64 192, !10, i64 200, !6, i64 208, !6, i64 216, !6, i64 224, !10, i64 232, !6, i64 240, !6, i64 248}
!39 = !{!38, !6, i64 144}
!40 = distinct !{!40, !12}
!41 = distinct !{!41, !12}
!42 = distinct !{!42, !12}
!43 = !{!44, !6, i64 0}
!44 = !{!"_Action", !6, i64 0, !6, i64 8, !7, i64 16, !6, i64 24, !10, i64 32, !7, i64 36, !7, i64 96, !6, i64 160, !10, i64 168, !6, i64 176, !6, i64 184, !6, i64 192, !10, i64 200, !6, i64 208, !6, i64 216, !6, i64 224, !10, i64 232, !6, i64 240, !10, i64 248, !6, i64 256}
!45 = !{!29, !6, i64 0}
!46 = !{!47, !7, i64 132}
!47 = !{!"_Operator", !6, i64 0, !7, i64 8, !10, i64 128, !7, i64 132, !10, i64 136, !7, i64 140, !7, i64 200, !6, i64 216, !6, i64 224, !7, i64 232}
!48 = !{!44, !7, i64 16}
!49 = !{!29, !10, i64 8}
!50 = distinct !{!50, !12}
!51 = !{!47, !6, i64 0}
!52 = !{!44, !6, i64 24}
!53 = !{!47, !10, i64 128}
!54 = !{!44, !10, i64 32}
!55 = !{!44, !6, i64 256}
!56 = !{!44, !10, i64 248}
!57 = !{!27, !6, i64 72}
!58 = !{!7, !7, i64 0}
!59 = !{!60, !10, i64 80}
!60 = !{!"_PseudoAction", !6, i64 0, !7, i64 8, !6, i64 72, !10, i64 80, !6, i64 88, !6, i64 96, !6, i64 104, !10, i64 112, !6, i64 120, !10, i64 128}
!61 = !{!60, !6, i64 72}
!62 = distinct !{!62, !12, !16, !17}
!63 = distinct !{!63, !14}
!64 = distinct !{!64, !12, !16}
!65 = distinct !{!65, !12}
!66 = !{!67, !10, i64 24}
!67 = !{!"_PseudoActionEffect", !6, i64 0, !10, i64 8, !6, i64 16, !10, i64 24, !6, i64 32, !10, i64 40, !6, i64 48, !6, i64 56, !6, i64 64, !10, i64 72, !6, i64 80, !6, i64 88, !6, i64 96, !10, i64 104, !6, i64 112}
!68 = !{!67, !6, i64 16}
!69 = distinct !{!69, !12, !16, !17}
!70 = distinct !{!70, !14}
!71 = distinct !{!71, !12, !16}
!72 = distinct !{!72, !12}
!73 = distinct !{!73, !12}
!74 = !{!44, !6, i64 8}
!75 = !{!60, !6, i64 0}
!76 = !{!47, !10, i64 136}
!77 = distinct !{!77, !12}
!78 = !{!60, !10, i64 128}
!79 = distinct !{!79, !12}
!80 = !{!81, !10, i64 768}
!81 = !{!"_command_line", !7, i64 0, !7, i64 256, !7, i64 512, !10, i64 768, !10, i64 772, !10, i64 776, !7, i64 780, !10, i64 784, !82, i64 788}
!82 = !{!"float", !7, i64 0}
!83 = !{!84, !6, i64 0}
!84 = !{!"_Facts", !6, i64 0, !6, i64 8}
!85 = distinct !{!85, !12}
!86 = distinct !{!86, !12}
!87 = distinct !{!87, !12}
!88 = distinct !{!88, !12}
!89 = distinct !{!89, !12}


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