; 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._Fluent = type { i32, [5 x i32] }
%struct._State = type { 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._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._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._FluentValues = type { %struct._Fluent, float, ptr }
%struct._Operator = type { ptr, [15 x ptr], i32, i8, i32, [15 x i32], [15 x i8], ptr, ptr, i8 }

@gactions = external global ptr, align 8
@garity = 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
@lp = external dso_local global i32, align 4
@largs = external dso_local global [15 x i32], align 16
@gnum_relevant_facts = external global i32, align 4
@grelevant_facts = external global [150000 x %struct._Fact], align 16
@gcmd_line = external global %struct._command_line, align 4
@.str.3 = external hidden unnamed_addr constant [2 x i8], align 1
@gnum_operators = external global i32, align 4
@goperators = external global [50000 x ptr], align 16
@gconstants = external global [2000 x ptr], align 16
@.str.10 = external hidden unnamed_addr constant [3 x i8], align 1
@gf_arity = external global [50 x i32], align 16
@lf = external dso_local global i32, align 4
@lf_args = external dso_local global [15 x i32], align 16
@gnum_constants = external global i32, align 4
@.str.12 = external hidden unnamed_addr constant [52 x i8], align 1
@gnum_functions = external global i32, align 4
@lf_def = external dso_local global [50 x ptr], align 16
@lf_index = external dso_local global [50 x ptr], align 16
@gf_initial = external global ptr, align 8
@gnum_relevant_fluents = external global i32, align 4
@.str.13 = external hidden unnamed_addr constant [75 x i8], align 1
@grelevant_fluents = external global [1000 x %struct._Fluent], align 16
@grelevant_fluents_name = external global [1000 x ptr], align 16
@gfunctions = external global [50 x ptr], align 16
@.str.14 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [53 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [32 x i8], align 1
@lnum_effects = external dso_local global i32, align 4
@gmetric = external global ptr, align 8
@.str.20 = external hidden unnamed_addr constant [86 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [45 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [52 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [28 x i8], align 1
@ginitial_state = external global %struct._State, align 8
@.str.25 = external hidden unnamed_addr constant [19 x i8], align 1
@gnum_logic_goal = external global i32, align 4
@glogic_goal = external global ptr, align 8
@gnum_numeric_goal = external global i32, align 4
@gnumeric_goal_comp = external global ptr, align 8
@.str.26 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.29 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.31 = external hidden unnamed_addr constant [40 x i8], align 1
@gnumeric_goal_lh = external global ptr, align 8
@gnumeric_goal_rh = external global ptr, align 8
@.str.32 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.33 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.34 = external hidden unnamed_addr constant [34 x i8], align 1

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

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

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

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

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

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) #0

; Function Attrs: nounwind uwtable
declare dso_local i32 @fluent_adress() #2

; Function Attrs: nounwind uwtable
define dso_local void @collect_relevant_facts_and_fluents() #2 {
  %1 = alloca ptr, align 8
  %2 = alloca ptr, align 8
  %3 = alloca ptr, align 8
  %4 = alloca i32, align 4
  %5 = alloca i32, align 4
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %1) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %2) #6
  call void @llvm.lifetime.start.p0(i64 8, 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 8, 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
  %11 = load ptr, ptr @gactions, align 8, !tbaa !5
  store ptr %11, ptr %1, align 8, !tbaa !5
  br label %12

12:                                               ; preds = %351, %0
  %13 = load ptr, ptr %1, align 8, !tbaa !5
  %14 = icmp ne ptr %13, null
  br i1 %14, label %15, label %355

15:                                               ; preds = %12
  %16 = load ptr, ptr %1, align 8, !tbaa !5
  %17 = getelementptr inbounds %struct._Action, ptr %16, i32 0, i32 0
  %18 = load ptr, ptr %17, align 8, !tbaa !9
  %19 = icmp ne ptr %18, null
  br i1 %19, label %20, label %202

20:                                               ; preds = %15
  %21 = load ptr, ptr %1, align 8, !tbaa !5
  %22 = getelementptr inbounds %struct._Action, ptr %21, i32 0, i32 0
  %23 = load ptr, ptr %22, align 8, !tbaa !9
  store ptr %23, ptr %2, align 8, !tbaa !5
  %24 = load ptr, ptr %2, align 8, !tbaa !5
  %25 = getelementptr inbounds %struct._NormOperator, ptr %24, i32 0, i32 13
  %26 = load ptr, ptr %25, align 8, !tbaa !12
  store ptr %26, ptr %3, align 8, !tbaa !5
  br label %27

27:                                               ; preds = %197, %20
  %28 = load ptr, ptr %3, align 8, !tbaa !5
  %29 = icmp ne ptr %28, null
  br i1 %29, label %30, label %201

30:                                               ; preds = %27
  store i32 0, ptr %4, align 4, !tbaa !14
  br label %31

31:                                               ; preds = %193, %30
  %32 = load i32, ptr %4, align 4, !tbaa !14
  %33 = load ptr, ptr %3, align 8, !tbaa !5
  %34 = getelementptr inbounds %struct._NormEffect, ptr %33, i32 0, i32 8
  %35 = load i32, ptr %34, align 8, !tbaa !15
  %36 = icmp slt i32 %32, %35
  br i1 %36, label %37, label %196

37:                                               ; preds = %31
  %38 = load ptr, ptr %3, align 8, !tbaa !5
  %39 = getelementptr inbounds %struct._NormEffect, ptr %38, i32 0, i32 7
  %40 = load ptr, ptr %39, align 8, !tbaa !17
  %41 = load i32, ptr %4, align 4, !tbaa !14
  %42 = sext i32 %41 to i64
  %43 = getelementptr inbounds %struct._Fact, ptr %40, i64 %42
  %44 = getelementptr inbounds %struct._Fact, ptr %43, i32 0, i32 0
  %45 = load i32, ptr %44, align 4, !tbaa !18
  store i32 %45, ptr @lp, align 4, !tbaa !14
  store i32 0, ptr %5, align 4, !tbaa !14
  br label %46

46:                                               ; preds = %102, %37
  %47 = load i32, ptr %5, align 4, !tbaa !14
  %48 = load i32, ptr @lp, align 4, !tbaa !14
  %49 = sext i32 %48 to i64
  %50 = getelementptr inbounds [50 x i32], ptr @garity, i64 0, i64 %49
  %51 = load i32, ptr %50, align 4, !tbaa !14
  %52 = icmp slt i32 %47, %51
  br i1 %52, label %53, label %105

53:                                               ; preds = %46
  %54 = load ptr, ptr %3, align 8, !tbaa !5
  %55 = getelementptr inbounds %struct._NormEffect, ptr %54, i32 0, i32 7
  %56 = load ptr, ptr %55, align 8, !tbaa !17
  %57 = load i32, ptr %4, align 4, !tbaa !14
  %58 = sext i32 %57 to i64
  %59 = getelementptr inbounds %struct._Fact, ptr %56, i64 %58
  %60 = getelementptr inbounds %struct._Fact, ptr %59, i32 0, i32 1
  %61 = load i32, ptr %5, align 4, !tbaa !14
  %62 = sext i32 %61 to i64
  %63 = getelementptr inbounds [5 x i32], ptr %60, i64 0, i64 %62
  %64 = load i32, ptr %63, align 4, !tbaa !14
  %65 = icmp sge i32 %64, 0
  br i1 %65, label %66, label %78

66:                                               ; preds = %53
  %67 = load ptr, ptr %3, align 8, !tbaa !5
  %68 = getelementptr inbounds %struct._NormEffect, ptr %67, i32 0, i32 7
  %69 = load ptr, ptr %68, align 8, !tbaa !17
  %70 = load i32, ptr %4, align 4, !tbaa !14
  %71 = sext i32 %70 to i64
  %72 = getelementptr inbounds %struct._Fact, ptr %69, i64 %71
  %73 = getelementptr inbounds %struct._Fact, ptr %72, i32 0, i32 1
  %74 = load i32, ptr %5, align 4, !tbaa !14
  %75 = sext i32 %74 to i64
  %76 = getelementptr inbounds [5 x i32], ptr %73, i64 0, i64 %75
  %77 = load i32, ptr %76, align 4, !tbaa !14
  br label %97

78:                                               ; preds = %53
  %79 = load ptr, ptr %1, align 8, !tbaa !5
  %80 = getelementptr inbounds %struct._Action, ptr %79, i32 0, i32 6
  %81 = load ptr, ptr %3, align 8, !tbaa !5
  %82 = getelementptr inbounds %struct._NormEffect, ptr %81, i32 0, i32 7
  %83 = load ptr, ptr %82, align 8, !tbaa !17
  %84 = load i32, ptr %4, align 4, !tbaa !14
  %85 = sext i32 %84 to i64
  %86 = getelementptr inbounds %struct._Fact, ptr %83, i64 %85
  %87 = getelementptr inbounds %struct._Fact, ptr %86, i32 0, i32 1
  %88 = load i32, ptr %5, align 4, !tbaa !14
  %89 = sext i32 %88 to i64
  %90 = getelementptr inbounds [5 x i32], ptr %87, i64 0, i64 %89
  %91 = load i32, ptr %90, align 4, !tbaa !14
  %92 = add nsw i32 %91, 1
  %93 = mul nsw i32 %92, -1
  %94 = sext i32 %93 to i64
  %95 = getelementptr inbounds [15 x i32], ptr %80, i64 0, i64 %94
  %96 = load i32, ptr %95, align 4, !tbaa !14
  br label %97

97:                                               ; preds = %78, %66
  %98 = phi i32 [ %77, %66 ], [ %96, %78 ]
  %99 = load i32, ptr %5, align 4, !tbaa !14
  %100 = sext i32 %99 to i64
  %101 = getelementptr inbounds [15 x i32], ptr @largs, i64 0, i64 %100
  store i32 %98, ptr %101, align 4, !tbaa !14
  br label %102

102:                                              ; preds = %97
  %103 = load i32, ptr %5, align 4, !tbaa !14
  %104 = add nsw i32 %103, 1
  store i32 %104, ptr %5, align 4, !tbaa !14
  br label %46, !llvm.loop !20

105:                                              ; preds = %46
  %106 = call i32 @fact_adress()
  store i32 %106, ptr %6, align 4, !tbaa !14
  %107 = load i32, ptr @lp, align 4, !tbaa !14
  %108 = sext i32 %107 to i64
  %109 = getelementptr inbounds [50 x ptr], ptr @lneg, i64 0, i64 %108
  %110 = load ptr, ptr %109, align 8, !tbaa !5
  %111 = load i32, ptr %6, align 4, !tbaa !14
  %112 = sext i32 %111 to i64
  %113 = getelementptr inbounds i32, ptr %110, i64 %112
  store i32 1, ptr %113, align 4, !tbaa !14
  %114 = load i32, ptr @lp, align 4, !tbaa !14
  %115 = sext i32 %114 to i64
  %116 = getelementptr inbounds [50 x ptr], ptr @lpos, i64 0, i64 %115
  %117 = load ptr, ptr %116, align 8, !tbaa !5
  %118 = load i32, ptr %6, align 4, !tbaa !14
  %119 = sext i32 %118 to i64
  %120 = getelementptr inbounds i32, ptr %117, i64 %119
  %121 = load i32, ptr %120, align 4, !tbaa !14
  %122 = icmp ne i32 %121, 0
  br i1 %122, label %123, label %192

123:                                              ; preds = %105
  %124 = load i32, ptr @lp, align 4, !tbaa !14
  %125 = sext i32 %124 to i64
  %126 = getelementptr inbounds [50 x ptr], ptr @luse, i64 0, i64 %125
  %127 = load ptr, ptr %126, align 8, !tbaa !5
  %128 = load i32, ptr %6, align 4, !tbaa !14
  %129 = sext i32 %128 to i64
  %130 = getelementptr inbounds i32, ptr %127, i64 %129
  %131 = load i32, ptr %130, align 4, !tbaa !14
  %132 = icmp ne i32 %131, 0
  br i1 %132, label %192, label %133

133:                                              ; preds = %123
  %134 = load i32, ptr @lp, align 4, !tbaa !14
  %135 = sext i32 %134 to i64
  %136 = getelementptr inbounds [50 x ptr], ptr @luse, i64 0, i64 %135
  %137 = load ptr, ptr %136, align 8, !tbaa !5
  %138 = load i32, ptr %6, align 4, !tbaa !14
  %139 = sext i32 %138 to i64
  %140 = getelementptr inbounds i32, ptr %137, i64 %139
  store i32 1, ptr %140, align 4, !tbaa !14
  %141 = load i32, ptr @gnum_relevant_facts, align 4, !tbaa !14
  %142 = load i32, ptr @lp, align 4, !tbaa !14
  %143 = sext i32 %142 to i64
  %144 = getelementptr inbounds [50 x ptr], ptr @lindex, i64 0, i64 %143
  %145 = load ptr, ptr %144, align 8, !tbaa !5
  %146 = load i32, ptr %6, align 4, !tbaa !14
  %147 = sext i32 %146 to i64
  %148 = getelementptr inbounds i32, ptr %145, i64 %147
  store i32 %141, ptr %148, align 4, !tbaa !14
  %149 = load i32, ptr @gnum_relevant_facts, align 4, !tbaa !14
  %150 = icmp eq i32 %149, 150000
  br i1 %150, label %151, label %153

151:                                              ; preds = %133
  %152 = call i32 (ptr, ...) @printf(ptr noundef @.str.12, i32 noundef 150000)
  call void @exit(i32 noundef 1) #7
  unreachable

153:                                              ; preds = %133
  %154 = load i32, ptr @lp, align 4, !tbaa !14
  %155 = load i32, ptr @gnum_relevant_facts, align 4, !tbaa !14
  %156 = sext i32 %155 to i64
  %157 = getelementptr inbounds [150000 x %struct._Fact], ptr @grelevant_facts, i64 0, i64 %156
  %158 = getelementptr inbounds %struct._Fact, ptr %157, i32 0, i32 0
  store i32 %154, ptr %158, align 8, !tbaa !18
  store i32 0, ptr %5, align 4, !tbaa !14
  br label %159

159:                                              ; preds = %178, %153
  %160 = load i32, ptr %5, align 4, !tbaa !14
  %161 = load i32, ptr @lp, align 4, !tbaa !14
  %162 = sext i32 %161 to i64
  %163 = getelementptr inbounds [50 x i32], ptr @garity, i64 0, i64 %162
  %164 = load i32, ptr %163, align 4, !tbaa !14
  %165 = icmp slt i32 %160, %164
  br i1 %165, label %166, label %181

166:                                              ; preds = %159
  %167 = load i32, ptr %5, align 4, !tbaa !14
  %168 = sext i32 %167 to i64
  %169 = getelementptr inbounds [15 x i32], ptr @largs, i64 0, i64 %168
  %170 = load i32, ptr %169, align 4, !tbaa !14
  %171 = load i32, ptr @gnum_relevant_facts, align 4, !tbaa !14
  %172 = sext i32 %171 to i64
  %173 = getelementptr inbounds [150000 x %struct._Fact], ptr @grelevant_facts, i64 0, i64 %172
  %174 = getelementptr inbounds %struct._Fact, ptr %173, i32 0, i32 1
  %175 = load i32, ptr %5, align 4, !tbaa !14
  %176 = sext i32 %175 to i64
  %177 = getelementptr inbounds [5 x i32], ptr %174, i64 0, i64 %176
  store i32 %170, ptr %177, align 4, !tbaa !14
  br label %178

178:                                              ; preds = %166
  %179 = load i32, ptr %5, align 4, !tbaa !14
  %180 = add nsw i32 %179, 1
  store i32 %180, ptr %5, align 4, !tbaa !14
  br label %159, !llvm.loop !22

181:                                              ; preds = %159
  %182 = load i32, ptr @gnum_relevant_facts, align 4, !tbaa !14
  %183 = load i32, ptr @lp, align 4, !tbaa !14
  %184 = sext i32 %183 to i64
  %185 = getelementptr inbounds [50 x ptr], ptr @lindex, i64 0, i64 %184
  %186 = load ptr, ptr %185, align 8, !tbaa !5
  %187 = load i32, ptr %6, align 4, !tbaa !14
  %188 = sext i32 %187 to i64
  %189 = getelementptr inbounds i32, ptr %186, i64 %188
  store i32 %182, ptr %189, align 4, !tbaa !14
  %190 = load i32, ptr @gnum_relevant_facts, align 4, !tbaa !14
  %191 = add nsw i32 %190, 1
  store i32 %191, ptr @gnum_relevant_facts, align 4, !tbaa !14
  br label %192

192:                                              ; preds = %181, %123, %105
  br label %193

193:                                              ; preds = %192
  %194 = load i32, ptr %4, align 4, !tbaa !14
  %195 = add nsw i32 %194, 1
  store i32 %195, ptr %4, align 4, !tbaa !14
  br label %31, !llvm.loop !23

196:                                              ; preds = %31
  br label %197

197:                                              ; preds = %196
  %198 = load ptr, ptr %3, align 8, !tbaa !5
  %199 = getelementptr inbounds %struct._NormEffect, ptr %198, i32 0, i32 18
  %200 = load ptr, ptr %199, align 8, !tbaa !24
  store ptr %200, ptr %3, align 8, !tbaa !5
  br label %27, !llvm.loop !25

201:                                              ; preds = %27
  br label %350

202:                                              ; preds = %15
  %203 = load ptr, ptr %1, align 8, !tbaa !5
  %204 = getelementptr inbounds %struct._Action, ptr %203, i32 0, i32 1
  %205 = load ptr, ptr %204, align 8, !tbaa !26
  store ptr %205, ptr %8, align 8, !tbaa !5
  %206 = load ptr, ptr %8, align 8, !tbaa !5
  %207 = getelementptr inbounds %struct._PseudoAction, ptr %206, i32 0, i32 8
  %208 = load ptr, ptr %207, align 8, !tbaa !27
  store ptr %208, ptr %9, align 8, !tbaa !5
  br label %209

209:                                              ; preds = %345, %202
  %210 = load ptr, ptr %9, align 8, !tbaa !5
  %211 = icmp ne ptr %210, null
  br i1 %211, label %212, label %349

212:                                              ; preds = %209
  store i32 0, ptr %4, align 4, !tbaa !14
  br label %213

213:                                              ; preds = %341, %212
  %214 = load i32, ptr %4, align 4, !tbaa !14
  %215 = load ptr, ptr %9, align 8, !tbaa !5
  %216 = getelementptr inbounds %struct._PseudoActionEffect, ptr %215, i32 0, i32 5
  %217 = load i32, ptr %216, align 8, !tbaa !29
  %218 = icmp slt i32 %214, %217
  br i1 %218, label %219, label %344

219:                                              ; preds = %213
  %220 = load ptr, ptr %9, align 8, !tbaa !5
  %221 = getelementptr inbounds %struct._PseudoActionEffect, ptr %220, i32 0, i32 4
  %222 = load ptr, ptr %221, align 8, !tbaa !31
  %223 = load i32, ptr %4, align 4, !tbaa !14
  %224 = sext i32 %223 to i64
  %225 = getelementptr inbounds %struct._Fact, ptr %222, i64 %224
  %226 = getelementptr inbounds %struct._Fact, ptr %225, i32 0, i32 0
  %227 = load i32, ptr %226, align 4, !tbaa !18
  store i32 %227, ptr @lp, align 4, !tbaa !14
  store i32 0, ptr %5, align 4, !tbaa !14
  br label %228

228:                                              ; preds = %250, %219
  %229 = load i32, ptr %5, align 4, !tbaa !14
  %230 = load i32, ptr @lp, align 4, !tbaa !14
  %231 = sext i32 %230 to i64
  %232 = getelementptr inbounds [50 x i32], ptr @garity, i64 0, i64 %231
  %233 = load i32, ptr %232, align 4, !tbaa !14
  %234 = icmp slt i32 %229, %233
  br i1 %234, label %235, label %253

235:                                              ; preds = %228
  %236 = load ptr, ptr %9, align 8, !tbaa !5
  %237 = getelementptr inbounds %struct._PseudoActionEffect, ptr %236, i32 0, i32 4
  %238 = load ptr, ptr %237, align 8, !tbaa !31
  %239 = load i32, ptr %4, align 4, !tbaa !14
  %240 = sext i32 %239 to i64
  %241 = getelementptr inbounds %struct._Fact, ptr %238, i64 %240
  %242 = getelementptr inbounds %struct._Fact, ptr %241, i32 0, i32 1
  %243 = load i32, ptr %5, align 4, !tbaa !14
  %244 = sext i32 %243 to i64
  %245 = getelementptr inbounds [5 x i32], ptr %242, i64 0, i64 %244
  %246 = load i32, ptr %245, align 4, !tbaa !14
  %247 = load i32, ptr %5, align 4, !tbaa !14
  %248 = sext i32 %247 to i64
  %249 = getelementptr inbounds [15 x i32], ptr @largs, i64 0, i64 %248
  store i32 %246, ptr %249, align 4, !tbaa !14
  br label %250

250:                                              ; preds = %235
  %251 = load i32, ptr %5, align 4, !tbaa !14
  %252 = add nsw i32 %251, 1
  store i32 %252, ptr %5, align 4, !tbaa !14
  br label %228, !llvm.loop !32

253:                                              ; preds = %228
  %254 = call i32 @fact_adress()
  store i32 %254, ptr %6, align 4, !tbaa !14
  %255 = load i32, ptr @lp, align 4, !tbaa !14
  %256 = sext i32 %255 to i64
  %257 = getelementptr inbounds [50 x ptr], ptr @lneg, i64 0, i64 %256
  %258 = load ptr, ptr %257, align 8, !tbaa !5
  %259 = load i32, ptr %6, align 4, !tbaa !14
  %260 = sext i32 %259 to i64
  %261 = getelementptr inbounds i32, ptr %258, i64 %260
  store i32 1, ptr %261, align 4, !tbaa !14
  %262 = load i32, ptr @lp, align 4, !tbaa !14
  %263 = sext i32 %262 to i64
  %264 = getelementptr inbounds [50 x ptr], ptr @lpos, i64 0, i64 %263
  %265 = load ptr, ptr %264, align 8, !tbaa !5
  %266 = load i32, ptr %6, align 4, !tbaa !14
  %267 = sext i32 %266 to i64
  %268 = getelementptr inbounds i32, ptr %265, i64 %267
  %269 = load i32, ptr %268, align 4, !tbaa !14
  %270 = icmp ne i32 %269, 0
  br i1 %270, label %271, label %340

271:                                              ; preds = %253
  %272 = load i32, ptr @lp, align 4, !tbaa !14
  %273 = sext i32 %272 to i64
  %274 = getelementptr inbounds [50 x ptr], ptr @luse, i64 0, i64 %273
  %275 = load ptr, ptr %274, align 8, !tbaa !5
  %276 = load i32, ptr %6, align 4, !tbaa !14
  %277 = sext i32 %276 to i64
  %278 = getelementptr inbounds i32, ptr %275, i64 %277
  %279 = load i32, ptr %278, align 4, !tbaa !14
  %280 = icmp ne i32 %279, 0
  br i1 %280, label %340, label %281

281:                                              ; preds = %271
  %282 = load i32, ptr @lp, align 4, !tbaa !14
  %283 = sext i32 %282 to i64
  %284 = getelementptr inbounds [50 x ptr], ptr @luse, i64 0, i64 %283
  %285 = load ptr, ptr %284, align 8, !tbaa !5
  %286 = load i32, ptr %6, align 4, !tbaa !14
  %287 = sext i32 %286 to i64
  %288 = getelementptr inbounds i32, ptr %285, i64 %287
  store i32 1, ptr %288, align 4, !tbaa !14
  %289 = load i32, ptr @gnum_relevant_facts, align 4, !tbaa !14
  %290 = load i32, ptr @lp, align 4, !tbaa !14
  %291 = sext i32 %290 to i64
  %292 = getelementptr inbounds [50 x ptr], ptr @lindex, i64 0, i64 %291
  %293 = load ptr, ptr %292, align 8, !tbaa !5
  %294 = load i32, ptr %6, align 4, !tbaa !14
  %295 = sext i32 %294 to i64
  %296 = getelementptr inbounds i32, ptr %293, i64 %295
  store i32 %289, ptr %296, align 4, !tbaa !14
  %297 = load i32, ptr @gnum_relevant_facts, align 4, !tbaa !14
  %298 = icmp eq i32 %297, 150000
  br i1 %298, label %299, label %301

299:                                              ; preds = %281
  %300 = call i32 (ptr, ...) @printf(ptr noundef @.str.12, i32 noundef 150000)
  call void @exit(i32 noundef 1) #7
  unreachable

301:                                              ; preds = %281
  %302 = load i32, ptr @lp, align 4, !tbaa !14
  %303 = load i32, ptr @gnum_relevant_facts, align 4, !tbaa !14
  %304 = sext i32 %303 to i64
  %305 = getelementptr inbounds [150000 x %struct._Fact], ptr @grelevant_facts, i64 0, i64 %304
  %306 = getelementptr inbounds %struct._Fact, ptr %305, i32 0, i32 0
  store i32 %302, ptr %306, align 8, !tbaa !18
  store i32 0, ptr %5, align 4, !tbaa !14
  br label %307

307:                                              ; preds = %326, %301
  %308 = load i32, ptr %5, align 4, !tbaa !14
  %309 = load i32, ptr @lp, align 4, !tbaa !14
  %310 = sext i32 %309 to i64
  %311 = getelementptr inbounds [50 x i32], ptr @garity, i64 0, i64 %310
  %312 = load i32, ptr %311, align 4, !tbaa !14
  %313 = icmp slt i32 %308, %312
  br i1 %313, label %314, label %329

314:                                              ; preds = %307
  %315 = load i32, ptr %5, align 4, !tbaa !14
  %316 = sext i32 %315 to i64
  %317 = getelementptr inbounds [15 x i32], ptr @largs, i64 0, i64 %316
  %318 = load i32, ptr %317, align 4, !tbaa !14
  %319 = load i32, ptr @gnum_relevant_facts, align 4, !tbaa !14
  %320 = sext i32 %319 to i64
  %321 = getelementptr inbounds [150000 x %struct._Fact], ptr @grelevant_facts, i64 0, i64 %320
  %322 = getelementptr inbounds %struct._Fact, ptr %321, i32 0, i32 1
  %323 = load i32, ptr %5, align 4, !tbaa !14
  %324 = sext i32 %323 to i64
  %325 = getelementptr inbounds [5 x i32], ptr %322, i64 0, i64 %324
  store i32 %318, ptr %325, align 4, !tbaa !14
  br label %326

326:                                              ; preds = %314
  %327 = load i32, ptr %5, align 4, !tbaa !14
  %328 = add nsw i32 %327, 1
  store i32 %328, ptr %5, align 4, !tbaa !14
  br label %307, !llvm.loop !33

329:                                              ; preds = %307
  %330 = load i32, ptr @gnum_relevant_facts, align 4, !tbaa !14
  %331 = load i32, ptr @lp, align 4, !tbaa !14
  %332 = sext i32 %331 to i64
  %333 = getelementptr inbounds [50 x ptr], ptr @lindex, i64 0, i64 %332
  %334 = load ptr, ptr %333, align 8, !tbaa !5
  %335 = load i32, ptr %6, align 4, !tbaa !14
  %336 = sext i32 %335 to i64
  %337 = getelementptr inbounds i32, ptr %334, i64 %336
  store i32 %330, ptr %337, align 4, !tbaa !14
  %338 = load i32, ptr @gnum_relevant_facts, align 4, !tbaa !14
  %339 = add nsw i32 %338, 1
  store i32 %339, ptr @gnum_relevant_facts, align 4, !tbaa !14
  br label %340

340:                                              ; preds = %329, %271, %253
  br label %341

341:                                              ; preds = %340
  %342 = load i32, ptr %4, align 4, !tbaa !14
  %343 = add nsw i32 %342, 1
  store i32 %343, ptr %4, align 4, !tbaa !14
  br label %213, !llvm.loop !34

344:                                              ; preds = %213
  br label %345

345:                                              ; preds = %344
  %346 = load ptr, ptr %9, align 8, !tbaa !5
  %347 = getelementptr inbounds %struct._PseudoActionEffect, ptr %346, i32 0, i32 14
  %348 = load ptr, ptr %347, align 8, !tbaa !35
  store ptr %348, ptr %9, align 8, !tbaa !5
  br label %209, !llvm.loop !36

349:                                              ; preds = %209
  br label %350

350:                                              ; preds = %349, %201
  br label %351

351:                                              ; preds = %350
  %352 = load ptr, ptr %1, align 8, !tbaa !5
  %353 = getelementptr inbounds %struct._Action, ptr %352, i32 0, i32 19
  %354 = load ptr, ptr %353, align 8, !tbaa !37
  store ptr %354, ptr %1, align 8, !tbaa !5
  br label %12, !llvm.loop !38

355:                                              ; preds = %12
  store i32 0, ptr %4, align 4, !tbaa !14
  br label %356

356:                                              ; preds = %411, %355
  %357 = load i32, ptr %4, align 4, !tbaa !14
  %358 = load i32, ptr @gnum_functions, align 4, !tbaa !14
  %359 = icmp slt i32 %357, %358
  br i1 %359, label %360, label %414

360:                                              ; preds = %356
  store i32 1, ptr %7, align 4, !tbaa !14
  store i32 0, ptr %5, align 4, !tbaa !14
  br label %361

361:                                              ; preds = %372, %360
  %362 = load i32, ptr %5, align 4, !tbaa !14
  %363 = load i32, ptr %4, align 4, !tbaa !14
  %364 = sext i32 %363 to i64
  %365 = getelementptr inbounds [50 x i32], ptr @gf_arity, i64 0, i64 %364
  %366 = load i32, ptr %365, align 4, !tbaa !14
  %367 = icmp slt i32 %362, %366
  br i1 %367, label %368, label %375

368:                                              ; preds = %361
  %369 = load i32, ptr @gnum_constants, align 4, !tbaa !14
  %370 = load i32, ptr %7, align 4, !tbaa !14
  %371 = mul nsw i32 %370, %369
  store i32 %371, ptr %7, align 4, !tbaa !14
  br label %372

372:                                              ; preds = %368
  %373 = load i32, ptr %5, align 4, !tbaa !14
  %374 = add nsw i32 %373, 1
  store i32 %374, ptr %5, align 4, !tbaa !14
  br label %361, !llvm.loop !39

375:                                              ; preds = %361
  %376 = load i32, ptr %7, align 4, !tbaa !14
  %377 = sext i32 %376 to i64
  %378 = call noalias ptr @calloc(i64 noundef %377, i64 noundef 4) #8
  %379 = load i32, ptr %4, align 4, !tbaa !14
  %380 = sext i32 %379 to i64
  %381 = getelementptr inbounds [50 x ptr], ptr @lf_def, i64 0, i64 %380
  store ptr %378, ptr %381, align 8, !tbaa !5
  %382 = load i32, ptr %7, align 4, !tbaa !14
  %383 = sext i32 %382 to i64
  %384 = call noalias ptr @calloc(i64 noundef %383, i64 noundef 4) #8
  %385 = load i32, ptr %4, align 4, !tbaa !14
  %386 = sext i32 %385 to i64
  %387 = getelementptr inbounds [50 x ptr], ptr @lf_index, i64 0, i64 %386
  store ptr %384, ptr %387, align 8, !tbaa !5
  store i32 0, ptr %5, align 4, !tbaa !14
  br label %388

388:                                              ; preds = %407, %375
  %389 = load i32, ptr %5, align 4, !tbaa !14
  %390 = load i32, ptr %7, align 4, !tbaa !14
  %391 = icmp slt i32 %389, %390
  br i1 %391, label %392, label %410

392:                                              ; preds = %388
  %393 = load i32, ptr %4, align 4, !tbaa !14
  %394 = sext i32 %393 to i64
  %395 = getelementptr inbounds [50 x ptr], ptr @lf_def, i64 0, i64 %394
  %396 = load ptr, ptr %395, align 8, !tbaa !5
  %397 = load i32, ptr %5, align 4, !tbaa !14
  %398 = sext i32 %397 to i64
  %399 = getelementptr inbounds i32, ptr %396, i64 %398
  store i32 0, ptr %399, align 4, !tbaa !14
  %400 = load i32, ptr %4, align 4, !tbaa !14
  %401 = sext i32 %400 to i64
  %402 = getelementptr inbounds [50 x ptr], ptr @lf_index, i64 0, i64 %401
  %403 = load ptr, ptr %402, align 8, !tbaa !5
  %404 = load i32, ptr %5, align 4, !tbaa !14
  %405 = sext i32 %404 to i64
  %406 = getelementptr inbounds i32, ptr %403, i64 %405
  store i32 -1, ptr %406, align 4, !tbaa !14
  br label %407

407:                                              ; preds = %392
  %408 = load i32, ptr %5, align 4, !tbaa !14
  %409 = add nsw i32 %408, 1
  store i32 %409, ptr %5, align 4, !tbaa !14
  br label %388, !llvm.loop !40

410:                                              ; preds = %388
  br label %411

411:                                              ; preds = %410
  %412 = load i32, ptr %4, align 4, !tbaa !14
  %413 = add nsw i32 %412, 1
  store i32 %413, ptr %4, align 4, !tbaa !14
  br label %356, !llvm.loop !41

414:                                              ; preds = %356
  %415 = load ptr, ptr @gf_initial, align 8, !tbaa !5
  store ptr %415, ptr %10, align 8, !tbaa !5
  br label %416

416:                                              ; preds = %543, %414
  %417 = load ptr, ptr %10, align 8, !tbaa !5
  %418 = icmp ne ptr %417, null
  br i1 %418, label %419, label %547

419:                                              ; preds = %416
  %420 = load ptr, ptr %10, align 8, !tbaa !5
  %421 = getelementptr inbounds %struct._FluentValues, ptr %420, i32 0, i32 0
  %422 = getelementptr inbounds %struct._Fluent, ptr %421, i32 0, i32 0
  %423 = load i32, ptr %422, align 8, !tbaa !42
  store i32 %423, ptr @lf, align 4, !tbaa !14
  store i32 0, ptr %5, align 4, !tbaa !14
  br label %424

424:                                              ; preds = %442, %419
  %425 = load i32, ptr %5, align 4, !tbaa !14
  %426 = load i32, ptr @lf, align 4, !tbaa !14
  %427 = sext i32 %426 to i64
  %428 = getelementptr inbounds [50 x i32], ptr @gf_arity, i64 0, i64 %427
  %429 = load i32, ptr %428, align 4, !tbaa !14
  %430 = icmp slt i32 %425, %429
  br i1 %430, label %431, label %445

431:                                              ; preds = %424
  %432 = load ptr, ptr %10, align 8, !tbaa !5
  %433 = getelementptr inbounds %struct._FluentValues, ptr %432, i32 0, i32 0
  %434 = getelementptr inbounds %struct._Fluent, ptr %433, i32 0, i32 1
  %435 = load i32, ptr %5, align 4, !tbaa !14
  %436 = sext i32 %435 to i64
  %437 = getelementptr inbounds [5 x i32], ptr %434, i64 0, i64 %436
  %438 = load i32, ptr %437, align 4, !tbaa !14
  %439 = load i32, ptr %5, align 4, !tbaa !14
  %440 = sext i32 %439 to i64
  %441 = getelementptr inbounds [15 x i32], ptr @lf_args, i64 0, i64 %440
  store i32 %438, ptr %441, align 4, !tbaa !14
  br label %442

442:                                              ; preds = %431
  %443 = load i32, ptr %5, align 4, !tbaa !14
  %444 = add nsw i32 %443, 1
  store i32 %444, ptr %5, align 4, !tbaa !14
  br label %424, !llvm.loop !46

445:                                              ; preds = %424
  %446 = call i32 @fluent_adress()
  store i32 %446, ptr %6, align 4, !tbaa !14
  %447 = load i32, ptr @lf, align 4, !tbaa !14
  %448 = sext i32 %447 to i64
  %449 = getelementptr inbounds [50 x ptr], ptr @lf_def, i64 0, i64 %448
  %450 = load ptr, ptr %449, align 8, !tbaa !5
  %451 = load i32, ptr %6, align 4, !tbaa !14
  %452 = sext i32 %451 to i64
  %453 = getelementptr inbounds i32, ptr %450, i64 %452
  %454 = load i32, ptr %453, align 4, !tbaa !14
  %455 = icmp ne i32 %454, 0
  br i1 %455, label %537, label %456

456:                                              ; preds = %445
  %457 = load i32, ptr @lf, align 4, !tbaa !14
  %458 = sext i32 %457 to i64
  %459 = getelementptr inbounds [50 x ptr], ptr @lf_def, i64 0, i64 %458
  %460 = load ptr, ptr %459, align 8, !tbaa !5
  %461 = load i32, ptr %6, align 4, !tbaa !14
  %462 = sext i32 %461 to i64
  %463 = getelementptr inbounds i32, ptr %460, i64 %462
  store i32 1, ptr %463, align 4, !tbaa !14
  %464 = load i32, ptr @gnum_relevant_fluents, align 4, !tbaa !14
  %465 = icmp eq i32 %464, 1000
  br i1 %465, label %466, label %468

466:                                              ; preds = %456
  %467 = call i32 (ptr, ...) @printf(ptr noundef @.str.13, i32 noundef 1000)
  call void @exit(i32 noundef 1) #7
  unreachable

468:                                              ; preds = %456
  %469 = load i32, ptr @lf, align 4, !tbaa !14
  %470 = load i32, ptr @gnum_relevant_fluents, align 4, !tbaa !14
  %471 = sext i32 %470 to i64
  %472 = getelementptr inbounds [1000 x %struct._Fluent], ptr @grelevant_fluents, i64 0, i64 %471
  %473 = getelementptr inbounds %struct._Fluent, ptr %472, i32 0, i32 0
  store i32 %469, ptr %473, align 8, !tbaa !47
  %474 = call noalias ptr @calloc(i64 noundef 256, i64 noundef 1) #8
  %475 = load i32, ptr @gnum_relevant_fluents, align 4, !tbaa !14
  %476 = sext i32 %475 to i64
  %477 = getelementptr inbounds [1000 x ptr], ptr @grelevant_fluents_name, i64 0, i64 %476
  store ptr %474, ptr %477, align 8, !tbaa !5
  %478 = load i32, ptr @gnum_relevant_fluents, align 4, !tbaa !14
  %479 = sext i32 %478 to i64
  %480 = getelementptr inbounds [1000 x ptr], ptr @grelevant_fluents_name, i64 0, i64 %479
  %481 = load ptr, ptr %480, align 8, !tbaa !5
  %482 = load i32, ptr @lf, align 4, !tbaa !14
  %483 = sext i32 %482 to i64
  %484 = getelementptr inbounds [50 x ptr], ptr @gfunctions, i64 0, i64 %483
  %485 = load ptr, ptr %484, align 8, !tbaa !5
  %486 = call ptr @strcpy(ptr noundef %481, ptr noundef %485) #6
  store i32 0, ptr %5, align 4, !tbaa !14
  br label %487

487:                                              ; preds = %523, %468
  %488 = load i32, ptr %5, align 4, !tbaa !14
  %489 = load i32, ptr @lf, align 4, !tbaa !14
  %490 = sext i32 %489 to i64
  %491 = getelementptr inbounds [50 x i32], ptr @gf_arity, i64 0, i64 %490
  %492 = load i32, ptr %491, align 4, !tbaa !14
  %493 = icmp slt i32 %488, %492
  br i1 %493, label %494, label %526

494:                                              ; preds = %487
  %495 = load i32, ptr %5, align 4, !tbaa !14
  %496 = sext i32 %495 to i64
  %497 = getelementptr inbounds [15 x i32], ptr @lf_args, i64 0, i64 %496
  %498 = load i32, ptr %497, align 4, !tbaa !14
  %499 = load i32, ptr @gnum_relevant_fluents, align 4, !tbaa !14
  %500 = sext i32 %499 to i64
  %501 = getelementptr inbounds [1000 x %struct._Fluent], ptr @grelevant_fluents, i64 0, i64 %500
  %502 = getelementptr inbounds %struct._Fluent, ptr %501, i32 0, i32 1
  %503 = load i32, ptr %5, align 4, !tbaa !14
  %504 = sext i32 %503 to i64
  %505 = getelementptr inbounds [5 x i32], ptr %502, i64 0, i64 %504
  store i32 %498, ptr %505, align 4, !tbaa !14
  %506 = load i32, ptr @gnum_relevant_fluents, align 4, !tbaa !14
  %507 = sext i32 %506 to i64
  %508 = getelementptr inbounds [1000 x ptr], ptr @grelevant_fluents_name, i64 0, i64 %507
  %509 = load ptr, ptr %508, align 8, !tbaa !5
  %510 = call ptr @strcat(ptr noundef %509, ptr noundef @.str.14) #6
  %511 = load i32, ptr @gnum_relevant_fluents, align 4, !tbaa !14
  %512 = sext i32 %511 to i64
  %513 = getelementptr inbounds [1000 x ptr], ptr @grelevant_fluents_name, i64 0, i64 %512
  %514 = load ptr, ptr %513, align 8, !tbaa !5
  %515 = load i32, ptr %5, align 4, !tbaa !14
  %516 = sext i32 %515 to i64
  %517 = getelementptr inbounds [15 x i32], ptr @lf_args, i64 0, i64 %516
  %518 = load i32, ptr %517, align 4, !tbaa !14
  %519 = sext i32 %518 to i64
  %520 = getelementptr inbounds [2000 x ptr], ptr @gconstants, i64 0, i64 %519
  %521 = load ptr, ptr %520, align 8, !tbaa !5
  %522 = call ptr @strcat(ptr noundef %514, ptr noundef %521) #6
  br label %523

523:                                              ; preds = %494
  %524 = load i32, ptr %5, align 4, !tbaa !14
  %525 = add nsw i32 %524, 1
  store i32 %525, ptr %5, align 4, !tbaa !14
  br label %487, !llvm.loop !48

526:                                              ; preds = %487
  %527 = load i32, ptr @gnum_relevant_fluents, align 4, !tbaa !14
  %528 = load i32, ptr @lf, align 4, !tbaa !14
  %529 = sext i32 %528 to i64
  %530 = getelementptr inbounds [50 x ptr], ptr @lf_index, i64 0, i64 %529
  %531 = load ptr, ptr %530, align 8, !tbaa !5
  %532 = load i32, ptr %6, align 4, !tbaa !14
  %533 = sext i32 %532 to i64
  %534 = getelementptr inbounds i32, ptr %531, i64 %533
  store i32 %527, ptr %534, align 4, !tbaa !14
  %535 = load i32, ptr @gnum_relevant_fluents, align 4, !tbaa !14
  %536 = add nsw i32 %535, 1
  store i32 %536, ptr @gnum_relevant_fluents, align 4, !tbaa !14
  br label %542

537:                                              ; preds = %445
  %538 = call i32 (ptr, ...) @printf(ptr noundef @.str.15)
  %539 = load ptr, ptr %10, align 8, !tbaa !5
  %540 = getelementptr inbounds %struct._FluentValues, ptr %539, i32 0, i32 0
  call void @print_Fluent(ptr noundef %540)
  %541 = call i32 (ptr, ...) @printf(ptr noundef @.str.16)
  call void @exit(i32 noundef 1) #7
  unreachable

542:                                              ; preds = %526
  br label %543

543:                                              ; preds = %542
  %544 = load ptr, ptr %10, align 8, !tbaa !5
  %545 = getelementptr inbounds %struct._FluentValues, ptr %544, i32 0, i32 2
  %546 = load ptr, ptr %545, align 8, !tbaa !49
  store ptr %546, ptr %10, align 8, !tbaa !5
  br label %416, !llvm.loop !50

547:                                              ; preds = %416
  %548 = load ptr, ptr @gactions, align 8, !tbaa !5
  store ptr %548, ptr %1, align 8, !tbaa !5
  br label %549

549:                                              ; preds = %952, %547
  %550 = load ptr, ptr %1, align 8, !tbaa !5
  %551 = icmp ne ptr %550, null
  br i1 %551, label %552, label %956

552:                                              ; preds = %549
  %553 = load ptr, ptr %1, align 8, !tbaa !5
  %554 = getelementptr inbounds %struct._Action, ptr %553, i32 0, i32 0
  %555 = load ptr, ptr %554, align 8, !tbaa !9
  %556 = icmp ne ptr %555, null
  br i1 %556, label %557, label %754

557:                                              ; preds = %552
  %558 = load ptr, ptr %1, align 8, !tbaa !5
  %559 = getelementptr inbounds %struct._Action, ptr %558, i32 0, i32 0
  %560 = load ptr, ptr %559, align 8, !tbaa !9
  store ptr %560, ptr %2, align 8, !tbaa !5
  %561 = load ptr, ptr %2, align 8, !tbaa !5
  %562 = getelementptr inbounds %struct._NormOperator, ptr %561, i32 0, i32 13
  %563 = load ptr, ptr %562, align 8, !tbaa !12
  store ptr %563, ptr %3, align 8, !tbaa !5
  br label %564

564:                                              ; preds = %749, %557
  %565 = load ptr, ptr %3, align 8, !tbaa !5
  %566 = icmp ne ptr %565, null
  br i1 %566, label %567, label %753

567:                                              ; preds = %564
  store i32 0, ptr %4, align 4, !tbaa !14
  br label %568

568:                                              ; preds = %745, %567
  %569 = load i32, ptr %4, align 4, !tbaa !14
  %570 = load ptr, ptr %3, align 8, !tbaa !5
  %571 = getelementptr inbounds %struct._NormEffect, ptr %570, i32 0, i32 16
  %572 = load i32, ptr %571, align 8, !tbaa !51
  %573 = icmp slt i32 %569, %572
  br i1 %573, label %574, label %748

574:                                              ; preds = %568
  %575 = load ptr, ptr %3, align 8, !tbaa !5
  %576 = getelementptr inbounds %struct._NormEffect, ptr %575, i32 0, i32 13
  %577 = load ptr, ptr %576, align 8, !tbaa !52
  %578 = load i32, ptr %4, align 4, !tbaa !14
  %579 = sext i32 %578 to i64
  %580 = getelementptr inbounds i32, ptr %577, i64 %579
  %581 = load i32, ptr %580, align 4, !tbaa !14
  %582 = icmp ne i32 %581, 4000
  br i1 %582, label %583, label %584

583:                                              ; preds = %574
  br label %745

584:                                              ; preds = %574
  %585 = load ptr, ptr %3, align 8, !tbaa !5
  %586 = getelementptr inbounds %struct._NormEffect, ptr %585, i32 0, i32 14
  %587 = load ptr, ptr %586, align 8, !tbaa !53
  %588 = load i32, ptr %4, align 4, !tbaa !14
  %589 = sext i32 %588 to i64
  %590 = getelementptr inbounds %struct._Fluent, ptr %587, i64 %589
  %591 = getelementptr inbounds %struct._Fluent, ptr %590, i32 0, i32 0
  %592 = load i32, ptr %591, align 4, !tbaa !47
  store i32 %592, ptr @lf, align 4, !tbaa !14
  store i32 0, ptr %5, align 4, !tbaa !14
  br label %593

593:                                              ; preds = %649, %584
  %594 = load i32, ptr %5, align 4, !tbaa !14
  %595 = load i32, ptr @lf, align 4, !tbaa !14
  %596 = sext i32 %595 to i64
  %597 = getelementptr inbounds [50 x i32], ptr @gf_arity, i64 0, i64 %596
  %598 = load i32, ptr %597, align 4, !tbaa !14
  %599 = icmp slt i32 %594, %598
  br i1 %599, label %600, label %652

600:                                              ; preds = %593
  %601 = load ptr, ptr %3, align 8, !tbaa !5
  %602 = getelementptr inbounds %struct._NormEffect, ptr %601, i32 0, i32 14
  %603 = load ptr, ptr %602, align 8, !tbaa !53
  %604 = load i32, ptr %4, align 4, !tbaa !14
  %605 = sext i32 %604 to i64
  %606 = getelementptr inbounds %struct._Fluent, ptr %603, i64 %605
  %607 = getelementptr inbounds %struct._Fluent, ptr %606, i32 0, i32 1
  %608 = load i32, ptr %5, align 4, !tbaa !14
  %609 = sext i32 %608 to i64
  %610 = getelementptr inbounds [5 x i32], ptr %607, i64 0, i64 %609
  %611 = load i32, ptr %610, align 4, !tbaa !14
  %612 = icmp sge i32 %611, 0
  br i1 %612, label %613, label %625

613:                                              ; preds = %600
  %614 = load ptr, ptr %3, align 8, !tbaa !5
  %615 = getelementptr inbounds %struct._NormEffect, ptr %614, i32 0, i32 14
  %616 = load ptr, ptr %615, align 8, !tbaa !53
  %617 = load i32, ptr %4, align 4, !tbaa !14
  %618 = sext i32 %617 to i64
  %619 = getelementptr inbounds %struct._Fluent, ptr %616, i64 %618
  %620 = getelementptr inbounds %struct._Fluent, ptr %619, i32 0, i32 1
  %621 = load i32, ptr %5, align 4, !tbaa !14
  %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 !14
  br label %644

625:                                              ; preds = %600
  %626 = load ptr, ptr %1, align 8, !tbaa !5
  %627 = getelementptr inbounds %struct._Action, ptr %626, i32 0, i32 6
  %628 = load ptr, ptr %3, align 8, !tbaa !5
  %629 = getelementptr inbounds %struct._NormEffect, ptr %628, i32 0, i32 14
  %630 = load ptr, ptr %629, align 8, !tbaa !53
  %631 = load i32, ptr %4, align 4, !tbaa !14
  %632 = sext i32 %631 to i64
  %633 = getelementptr inbounds %struct._Fluent, ptr %630, i64 %632
  %634 = getelementptr inbounds %struct._Fluent, ptr %633, i32 0, i32 1
  %635 = load i32, ptr %5, align 4, !tbaa !14
  %636 = sext i32 %635 to i64
  %637 = getelementptr inbounds [5 x i32], ptr %634, i64 0, i64 %636
  %638 = load i32, ptr %637, align 4, !tbaa !14
  %639 = add nsw i32 %638, 1
  %640 = mul nsw i32 %639, -1
  %641 = sext i32 %640 to i64
  %642 = getelementptr inbounds [15 x i32], ptr %627, i64 0, i64 %641
  %643 = load i32, ptr %642, align 4, !tbaa !14
  br label %644

644:                                              ; preds = %625, %613
  %645 = phi i32 [ %624, %613 ], [ %643, %625 ]
  %646 = load i32, ptr %5, align 4, !tbaa !14
  %647 = sext i32 %646 to i64
  %648 = getelementptr inbounds [15 x i32], ptr @lf_args, i64 0, i64 %647
  store i32 %645, ptr %648, align 4, !tbaa !14
  br label %649

649:                                              ; preds = %644
  %650 = load i32, ptr %5, align 4, !tbaa !14
  %651 = add nsw i32 %650, 1
  store i32 %651, ptr %5, align 4, !tbaa !14
  br label %593, !llvm.loop !54

652:                                              ; preds = %593
  %653 = call i32 @fluent_adress()
  store i32 %653, ptr %6, align 4, !tbaa !14
  %654 = load i32, ptr @lf, align 4, !tbaa !14
  %655 = sext i32 %654 to i64
  %656 = getelementptr inbounds [50 x ptr], ptr @lf_def, i64 0, i64 %655
  %657 = load ptr, ptr %656, align 8, !tbaa !5
  %658 = load i32, ptr %6, align 4, !tbaa !14
  %659 = sext i32 %658 to i64
  %660 = getelementptr inbounds i32, ptr %657, i64 %659
  %661 = load i32, ptr %660, align 4, !tbaa !14
  %662 = icmp ne i32 %661, 0
  br i1 %662, label %744, label %663

663:                                              ; preds = %652
  %664 = load i32, ptr @lf, align 4, !tbaa !14
  %665 = sext i32 %664 to i64
  %666 = getelementptr inbounds [50 x ptr], ptr @lf_def, i64 0, i64 %665
  %667 = load ptr, ptr %666, align 8, !tbaa !5
  %668 = load i32, ptr %6, align 4, !tbaa !14
  %669 = sext i32 %668 to i64
  %670 = getelementptr inbounds i32, ptr %667, i64 %669
  store i32 1, ptr %670, align 4, !tbaa !14
  %671 = load i32, ptr @gnum_relevant_fluents, align 4, !tbaa !14
  %672 = icmp eq i32 %671, 1000
  br i1 %672, label %673, label %675

673:                                              ; preds = %663
  %674 = call i32 (ptr, ...) @printf(ptr noundef @.str.13, i32 noundef 1000)
  call void @exit(i32 noundef 1) #7
  unreachable

675:                                              ; preds = %663
  %676 = load i32, ptr @lf, align 4, !tbaa !14
  %677 = load i32, ptr @gnum_relevant_fluents, align 4, !tbaa !14
  %678 = sext i32 %677 to i64
  %679 = getelementptr inbounds [1000 x %struct._Fluent], ptr @grelevant_fluents, i64 0, i64 %678
  %680 = getelementptr inbounds %struct._Fluent, ptr %679, i32 0, i32 0
  store i32 %676, ptr %680, align 8, !tbaa !47
  %681 = call noalias ptr @calloc(i64 noundef 256, i64 noundef 1) #8
  %682 = load i32, ptr @gnum_relevant_fluents, align 4, !tbaa !14
  %683 = sext i32 %682 to i64
  %684 = getelementptr inbounds [1000 x ptr], ptr @grelevant_fluents_name, i64 0, i64 %683
  store ptr %681, ptr %684, align 8, !tbaa !5
  %685 = load i32, ptr @gnum_relevant_fluents, align 4, !tbaa !14
  %686 = sext i32 %685 to i64
  %687 = getelementptr inbounds [1000 x ptr], ptr @grelevant_fluents_name, i64 0, i64 %686
  %688 = load ptr, ptr %687, align 8, !tbaa !5
  %689 = load i32, ptr @lf, align 4, !tbaa !14
  %690 = sext i32 %689 to i64
  %691 = getelementptr inbounds [50 x ptr], ptr @gfunctions, i64 0, i64 %690
  %692 = load ptr, ptr %691, align 8, !tbaa !5
  %693 = call ptr @strcpy(ptr noundef %688, ptr noundef %692) #6
  store i32 0, ptr %5, align 4, !tbaa !14
  br label %694

694:                                              ; preds = %730, %675
  %695 = load i32, ptr %5, align 4, !tbaa !14
  %696 = load i32, ptr @lf, align 4, !tbaa !14
  %697 = sext i32 %696 to i64
  %698 = getelementptr inbounds [50 x i32], ptr @gf_arity, i64 0, i64 %697
  %699 = load i32, ptr %698, align 4, !tbaa !14
  %700 = icmp slt i32 %695, %699
  br i1 %700, label %701, label %733

701:                                              ; preds = %694
  %702 = load i32, ptr %5, align 4, !tbaa !14
  %703 = sext i32 %702 to i64
  %704 = getelementptr inbounds [15 x i32], ptr @lf_args, i64 0, i64 %703
  %705 = load i32, ptr %704, align 4, !tbaa !14
  %706 = load i32, ptr @gnum_relevant_fluents, align 4, !tbaa !14
  %707 = sext i32 %706 to i64
  %708 = getelementptr inbounds [1000 x %struct._Fluent], ptr @grelevant_fluents, i64 0, i64 %707
  %709 = getelementptr inbounds %struct._Fluent, ptr %708, i32 0, i32 1
  %710 = load i32, ptr %5, align 4, !tbaa !14
  %711 = sext i32 %710 to i64
  %712 = getelementptr inbounds [5 x i32], ptr %709, i64 0, i64 %711
  store i32 %705, ptr %712, align 4, !tbaa !14
  %713 = load i32, ptr @gnum_relevant_fluents, align 4, !tbaa !14
  %714 = sext i32 %713 to i64
  %715 = getelementptr inbounds [1000 x ptr], ptr @grelevant_fluents_name, i64 0, i64 %714
  %716 = load ptr, ptr %715, align 8, !tbaa !5
  %717 = call ptr @strcat(ptr noundef %716, ptr noundef @.str.14) #6
  %718 = load i32, ptr @gnum_relevant_fluents, align 4, !tbaa !14
  %719 = sext i32 %718 to i64
  %720 = getelementptr inbounds [1000 x ptr], ptr @grelevant_fluents_name, i64 0, i64 %719
  %721 = load ptr, ptr %720, align 8, !tbaa !5
  %722 = load i32, ptr %5, align 4, !tbaa !14
  %723 = sext i32 %722 to i64
  %724 = getelementptr inbounds [15 x i32], ptr @lf_args, i64 0, i64 %723
  %725 = load i32, ptr %724, align 4, !tbaa !14
  %726 = sext i32 %725 to i64
  %727 = getelementptr inbounds [2000 x ptr], ptr @gconstants, i64 0, i64 %726
  %728 = load ptr, ptr %727, align 8, !tbaa !5
  %729 = call ptr @strcat(ptr noundef %721, ptr noundef %728) #6
  br label %730

730:                                              ; preds = %701
  %731 = load i32, ptr %5, align 4, !tbaa !14
  %732 = add nsw i32 %731, 1
  store i32 %732, ptr %5, align 4, !tbaa !14
  br label %694, !llvm.loop !55

733:                                              ; preds = %694
  %734 = load i32, ptr @gnum_relevant_fluents, align 4, !tbaa !14
  %735 = load i32, ptr @lf, align 4, !tbaa !14
  %736 = sext i32 %735 to i64
  %737 = getelementptr inbounds [50 x ptr], ptr @lf_index, i64 0, i64 %736
  %738 = load ptr, ptr %737, align 8, !tbaa !5
  %739 = load i32, ptr %6, align 4, !tbaa !14
  %740 = sext i32 %739 to i64
  %741 = getelementptr inbounds i32, ptr %738, i64 %740
  store i32 %734, ptr %741, align 4, !tbaa !14
  %742 = load i32, ptr @gnum_relevant_fluents, align 4, !tbaa !14
  %743 = add nsw i32 %742, 1
  store i32 %743, ptr @gnum_relevant_fluents, align 4, !tbaa !14
  br label %744

744:                                              ; preds = %733, %652
  br label %745

745:                                              ; preds = %744, %583
  %746 = load i32, ptr %4, align 4, !tbaa !14
  %747 = add nsw i32 %746, 1
  store i32 %747, ptr %4, align 4, !tbaa !14
  br label %568, !llvm.loop !56

748:                                              ; preds = %568
  br label %749

749:                                              ; preds = %748
  %750 = load ptr, ptr %3, align 8, !tbaa !5
  %751 = getelementptr inbounds %struct._NormEffect, ptr %750, i32 0, i32 18
  %752 = load ptr, ptr %751, align 8, !tbaa !24
  store ptr %752, ptr %3, align 8, !tbaa !5
  br label %564, !llvm.loop !57

753:                                              ; preds = %564
  br label %951

754:                                              ; preds = %552
  %755 = load ptr, ptr %1, align 8, !tbaa !5
  %756 = getelementptr inbounds %struct._Action, ptr %755, i32 0, i32 1
  %757 = load ptr, ptr %756, align 8, !tbaa !26
  store ptr %757, ptr %8, align 8, !tbaa !5
  %758 = load ptr, ptr %8, align 8, !tbaa !5
  %759 = getelementptr inbounds %struct._PseudoAction, ptr %758, i32 0, i32 8
  %760 = load ptr, ptr %759, align 8, !tbaa !27
  store ptr %760, ptr %9, align 8, !tbaa !5
  br label %761

761:                                              ; preds = %946, %754
  %762 = load ptr, ptr %9, align 8, !tbaa !5
  %763 = icmp ne ptr %762, null
  br i1 %763, label %764, label %950

764:                                              ; preds = %761
  store i32 0, ptr %4, align 4, !tbaa !14
  br label %765

765:                                              ; preds = %942, %764
  %766 = load i32, ptr %4, align 4, !tbaa !14
  %767 = load ptr, ptr %9, align 8, !tbaa !5
  %768 = getelementptr inbounds %struct._PseudoActionEffect, ptr %767, i32 0, i32 13
  %769 = load i32, ptr %768, align 8, !tbaa !58
  %770 = icmp slt i32 %766, %769
  br i1 %770, label %771, label %945

771:                                              ; preds = %765
  %772 = load ptr, ptr %9, align 8, !tbaa !5
  %773 = getelementptr inbounds %struct._PseudoActionEffect, ptr %772, i32 0, i32 10
  %774 = load ptr, ptr %773, align 8, !tbaa !59
  %775 = load i32, ptr %4, align 4, !tbaa !14
  %776 = sext i32 %775 to i64
  %777 = getelementptr inbounds i32, ptr %774, i64 %776
  %778 = load i32, ptr %777, align 4, !tbaa !14
  %779 = icmp ne i32 %778, 4000
  br i1 %779, label %780, label %781

780:                                              ; preds = %771
  br label %942

781:                                              ; preds = %771
  %782 = load ptr, ptr %9, align 8, !tbaa !5
  %783 = getelementptr inbounds %struct._PseudoActionEffect, ptr %782, i32 0, i32 11
  %784 = load ptr, ptr %783, align 8, !tbaa !60
  %785 = load i32, ptr %4, align 4, !tbaa !14
  %786 = sext i32 %785 to i64
  %787 = getelementptr inbounds %struct._Fluent, ptr %784, i64 %786
  %788 = getelementptr inbounds %struct._Fluent, ptr %787, i32 0, i32 0
  %789 = load i32, ptr %788, align 4, !tbaa !47
  store i32 %789, ptr @lf, align 4, !tbaa !14
  store i32 0, ptr %5, align 4, !tbaa !14
  br label %790

790:                                              ; preds = %846, %781
  %791 = load i32, ptr %5, align 4, !tbaa !14
  %792 = load i32, ptr @lf, align 4, !tbaa !14
  %793 = sext i32 %792 to i64
  %794 = getelementptr inbounds [50 x i32], ptr @gf_arity, i64 0, i64 %793
  %795 = load i32, ptr %794, align 4, !tbaa !14
  %796 = icmp slt i32 %791, %795
  br i1 %796, label %797, label %849

797:                                              ; preds = %790
  %798 = load ptr, ptr %9, align 8, !tbaa !5
  %799 = getelementptr inbounds %struct._PseudoActionEffect, ptr %798, i32 0, i32 11
  %800 = load ptr, ptr %799, align 8, !tbaa !60
  %801 = load i32, ptr %4, align 4, !tbaa !14
  %802 = sext i32 %801 to i64
  %803 = getelementptr inbounds %struct._Fluent, ptr %800, i64 %802
  %804 = getelementptr inbounds %struct._Fluent, ptr %803, i32 0, i32 1
  %805 = load i32, ptr %5, align 4, !tbaa !14
  %806 = sext i32 %805 to i64
  %807 = getelementptr inbounds [5 x i32], ptr %804, i64 0, i64 %806
  %808 = load i32, ptr %807, align 4, !tbaa !14
  %809 = icmp sge i32 %808, 0
  br i1 %809, label %810, label %822

810:                                              ; preds = %797
  %811 = load ptr, ptr %9, align 8, !tbaa !5
  %812 = getelementptr inbounds %struct._PseudoActionEffect, ptr %811, i32 0, i32 11
  %813 = load ptr, ptr %812, align 8, !tbaa !60
  %814 = load i32, ptr %4, align 4, !tbaa !14
  %815 = sext i32 %814 to i64
  %816 = getelementptr inbounds %struct._Fluent, ptr %813, i64 %815
  %817 = getelementptr inbounds %struct._Fluent, ptr %816, i32 0, i32 1
  %818 = load i32, ptr %5, align 4, !tbaa !14
  %819 = sext i32 %818 to i64
  %820 = getelementptr inbounds [5 x i32], ptr %817, i64 0, i64 %819
  %821 = load i32, ptr %820, align 4, !tbaa !14
  br label %841

822:                                              ; preds = %797
  %823 = load ptr, ptr %1, align 8, !tbaa !5
  %824 = getelementptr inbounds %struct._Action, ptr %823, i32 0, i32 6
  %825 = load ptr, ptr %9, align 8, !tbaa !5
  %826 = getelementptr inbounds %struct._PseudoActionEffect, ptr %825, i32 0, i32 11
  %827 = load ptr, ptr %826, align 8, !tbaa !60
  %828 = load i32, ptr %4, align 4, !tbaa !14
  %829 = sext i32 %828 to i64
  %830 = getelementptr inbounds %struct._Fluent, ptr %827, i64 %829
  %831 = getelementptr inbounds %struct._Fluent, ptr %830, i32 0, i32 1
  %832 = load i32, ptr %5, align 4, !tbaa !14
  %833 = sext i32 %832 to i64
  %834 = getelementptr inbounds [5 x i32], ptr %831, i64 0, i64 %833
  %835 = load i32, ptr %834, align 4, !tbaa !14
  %836 = add nsw i32 %835, 1
  %837 = mul nsw i32 %836, -1
  %838 = sext i32 %837 to i64
  %839 = getelementptr inbounds [15 x i32], ptr %824, i64 0, i64 %838
  %840 = load i32, ptr %839, align 4, !tbaa !14
  br label %841

841:                                              ; preds = %822, %810
  %842 = phi i32 [ %821, %810 ], [ %840, %822 ]
  %843 = load i32, ptr %5, align 4, !tbaa !14
  %844 = sext i32 %843 to i64
  %845 = getelementptr inbounds [15 x i32], ptr @lf_args, i64 0, i64 %844
  store i32 %842, ptr %845, align 4, !tbaa !14
  br label %846

846:                                              ; preds = %841
  %847 = load i32, ptr %5, align 4, !tbaa !14
  %848 = add nsw i32 %847, 1
  store i32 %848, ptr %5, align 4, !tbaa !14
  br label %790, !llvm.loop !61

849:                                              ; preds = %790
  %850 = call i32 @fluent_adress()
  store i32 %850, ptr %6, align 4, !tbaa !14
  %851 = load i32, ptr @lf, align 4, !tbaa !14
  %852 = sext i32 %851 to i64
  %853 = getelementptr inbounds [50 x ptr], ptr @lf_def, i64 0, i64 %852
  %854 = load ptr, ptr %853, align 8, !tbaa !5
  %855 = load i32, ptr %6, align 4, !tbaa !14
  %856 = sext i32 %855 to i64
  %857 = getelementptr inbounds i32, ptr %854, i64 %856
  %858 = load i32, ptr %857, align 4, !tbaa !14
  %859 = icmp ne i32 %858, 0
  br i1 %859, label %941, label %860

860:                                              ; preds = %849
  %861 = load i32, ptr @lf, align 4, !tbaa !14
  %862 = sext i32 %861 to i64
  %863 = getelementptr inbounds [50 x ptr], ptr @lf_def, i64 0, i64 %862
  %864 = load ptr, ptr %863, align 8, !tbaa !5
  %865 = load i32, ptr %6, align 4, !tbaa !14
  %866 = sext i32 %865 to i64
  %867 = getelementptr inbounds i32, ptr %864, i64 %866
  store i32 1, ptr %867, align 4, !tbaa !14
  %868 = load i32, ptr @gnum_relevant_fluents, align 4, !tbaa !14
  %869 = icmp eq i32 %868, 1000
  br i1 %869, label %870, label %872

870:                                              ; preds = %860
  %871 = call i32 (ptr, ...) @printf(ptr noundef @.str.13, i32 noundef 1000)
  call void @exit(i32 noundef 1) #7
  unreachable

872:                                              ; preds = %860
  %873 = load i32, ptr @lf, align 4, !tbaa !14
  %874 = load i32, ptr @gnum_relevant_fluents, align 4, !tbaa !14
  %875 = sext i32 %874 to i64
  %876 = getelementptr inbounds [1000 x %struct._Fluent], ptr @grelevant_fluents, i64 0, i64 %875
  %877 = getelementptr inbounds %struct._Fluent, ptr %876, i32 0, i32 0
  store i32 %873, ptr %877, align 8, !tbaa !47
  %878 = call noalias ptr @calloc(i64 noundef 256, i64 noundef 1) #8
  %879 = load i32, ptr @gnum_relevant_fluents, align 4, !tbaa !14
  %880 = sext i32 %879 to i64
  %881 = getelementptr inbounds [1000 x ptr], ptr @grelevant_fluents_name, i64 0, i64 %880
  store ptr %878, ptr %881, align 8, !tbaa !5
  %882 = load i32, ptr @gnum_relevant_fluents, align 4, !tbaa !14
  %883 = sext i32 %882 to i64
  %884 = getelementptr inbounds [1000 x ptr], ptr @grelevant_fluents_name, i64 0, i64 %883
  %885 = load ptr, ptr %884, align 8, !tbaa !5
  %886 = load i32, ptr @lf, align 4, !tbaa !14
  %887 = sext i32 %886 to i64
  %888 = getelementptr inbounds [50 x ptr], ptr @gfunctions, i64 0, i64 %887
  %889 = load ptr, ptr %888, align 8, !tbaa !5
  %890 = call ptr @strcpy(ptr noundef %885, ptr noundef %889) #6
  store i32 0, ptr %5, align 4, !tbaa !14
  br label %891

891:                                              ; preds = %927, %872
  %892 = load i32, ptr %5, align 4, !tbaa !14
  %893 = load i32, ptr @lf, align 4, !tbaa !14
  %894 = sext i32 %893 to i64
  %895 = getelementptr inbounds [50 x i32], ptr @gf_arity, i64 0, i64 %894
  %896 = load i32, ptr %895, align 4, !tbaa !14
  %897 = icmp slt i32 %892, %896
  br i1 %897, label %898, label %930

898:                                              ; preds = %891
  %899 = load i32, ptr %5, align 4, !tbaa !14
  %900 = sext i32 %899 to i64
  %901 = getelementptr inbounds [15 x i32], ptr @lf_args, i64 0, i64 %900
  %902 = load i32, ptr %901, align 4, !tbaa !14
  %903 = load i32, ptr @gnum_relevant_fluents, align 4, !tbaa !14
  %904 = sext i32 %903 to i64
  %905 = getelementptr inbounds [1000 x %struct._Fluent], ptr @grelevant_fluents, i64 0, i64 %904
  %906 = getelementptr inbounds %struct._Fluent, ptr %905, i32 0, i32 1
  %907 = load i32, ptr %5, align 4, !tbaa !14
  %908 = sext i32 %907 to i64
  %909 = getelementptr inbounds [5 x i32], ptr %906, i64 0, i64 %908
  store i32 %902, ptr %909, align 4, !tbaa !14
  %910 = load i32, ptr @gnum_relevant_fluents, align 4, !tbaa !14
  %911 = sext i32 %910 to i64
  %912 = getelementptr inbounds [1000 x ptr], ptr @grelevant_fluents_name, i64 0, i64 %911
  %913 = load ptr, ptr %912, align 8, !tbaa !5
  %914 = call ptr @strcat(ptr noundef %913, ptr noundef @.str.14) #6
  %915 = load i32, ptr @gnum_relevant_fluents, align 4, !tbaa !14
  %916 = sext i32 %915 to i64
  %917 = getelementptr inbounds [1000 x ptr], ptr @grelevant_fluents_name, i64 0, i64 %916
  %918 = load ptr, ptr %917, align 8, !tbaa !5
  %919 = load i32, ptr %5, align 4, !tbaa !14
  %920 = sext i32 %919 to i64
  %921 = getelementptr inbounds [15 x i32], ptr @lf_args, i64 0, i64 %920
  %922 = load i32, ptr %921, align 4, !tbaa !14
  %923 = sext i32 %922 to i64
  %924 = getelementptr inbounds [2000 x ptr], ptr @gconstants, i64 0, i64 %923
  %925 = load ptr, ptr %924, align 8, !tbaa !5
  %926 = call ptr @strcat(ptr noundef %918, ptr noundef %925) #6
  br label %927

927:                                              ; preds = %898
  %928 = load i32, ptr %5, align 4, !tbaa !14
  %929 = add nsw i32 %928, 1
  store i32 %929, ptr %5, align 4, !tbaa !14
  br label %891, !llvm.loop !62

930:                                              ; preds = %891
  %931 = load i32, ptr @gnum_relevant_fluents, align 4, !tbaa !14
  %932 = load i32, ptr @lf, align 4, !tbaa !14
  %933 = sext i32 %932 to i64
  %934 = getelementptr inbounds [50 x ptr], ptr @lf_index, i64 0, i64 %933
  %935 = load ptr, ptr %934, align 8, !tbaa !5
  %936 = load i32, ptr %6, align 4, !tbaa !14
  %937 = sext i32 %936 to i64
  %938 = getelementptr inbounds i32, ptr %935, i64 %937
  store i32 %931, ptr %938, align 4, !tbaa !14
  %939 = load i32, ptr @gnum_relevant_fluents, align 4, !tbaa !14
  %940 = add nsw i32 %939, 1
  store i32 %940, ptr @gnum_relevant_fluents, align 4, !tbaa !14
  br label %941

941:                                              ; preds = %930, %849
  br label %942

942:                                              ; preds = %941, %780
  %943 = load i32, ptr %4, align 4, !tbaa !14
  %944 = add nsw i32 %943, 1
  store i32 %944, ptr %4, align 4, !tbaa !14
  br label %765, !llvm.loop !63

945:                                              ; preds = %765
  br label %946

946:                                              ; preds = %945
  %947 = load ptr, ptr %9, align 8, !tbaa !5
  %948 = getelementptr inbounds %struct._PseudoActionEffect, ptr %947, i32 0, i32 14
  %949 = load ptr, ptr %948, align 8, !tbaa !35
  store ptr %949, ptr %9, align 8, !tbaa !5
  br label %761, !llvm.loop !64

950:                                              ; preds = %761
  br label %951

951:                                              ; preds = %950, %753
  br label %952

952:                                              ; preds = %951
  %953 = load ptr, ptr %1, align 8, !tbaa !5
  %954 = getelementptr inbounds %struct._Action, ptr %953, i32 0, i32 19
  %955 = load ptr, ptr %954, align 8, !tbaa !37
  store ptr %955, ptr %1, align 8, !tbaa !5
  br label %549, !llvm.loop !65

956:                                              ; preds = %549
  %957 = load i32, ptr getelementptr inbounds (%struct._command_line, ptr @gcmd_line, i32 0, i32 3), align 4, !tbaa !66
  %958 = icmp eq i32 %957, 119
  br i1 %958, label %959, label %991

959:                                              ; preds = %956
  %960 = call i32 (ptr, ...) @printf(ptr noundef @.str.17)
  store i32 0, ptr %4, align 4, !tbaa !14
  br label %961

961:                                              ; preds = %971, %959
  %962 = load i32, ptr %4, align 4, !tbaa !14
  %963 = load i32, ptr @gnum_relevant_facts, align 4, !tbaa !14
  %964 = icmp slt i32 %962, %963
  br i1 %964, label %965, label %974

965:                                              ; preds = %961
  %966 = load i32, ptr %4, align 4, !tbaa !14
  %967 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, i32 noundef %966)
  %968 = load i32, ptr %4, align 4, !tbaa !14
  %969 = sext i32 %968 to i64
  %970 = getelementptr inbounds [150000 x %struct._Fact], ptr @grelevant_facts, i64 0, i64 %969
  call void @print_Fact(ptr noundef %970)
  br label %971

971:                                              ; preds = %965
  %972 = load i32, ptr %4, align 4, !tbaa !14
  %973 = add nsw i32 %972, 1
  store i32 %973, ptr %4, align 4, !tbaa !14
  br label %961, !llvm.loop !68

974:                                              ; preds = %961
  %975 = call i32 (ptr, ...) @printf(ptr noundef @.str.19)
  store i32 0, ptr %4, align 4, !tbaa !14
  br label %976

976:                                              ; preds = %986, %974
  %977 = load i32, ptr %4, align 4, !tbaa !14
  %978 = load i32, ptr @gnum_relevant_fluents, align 4, !tbaa !14
  %979 = icmp slt i32 %977, %978
  br i1 %979, label %980, label %989

980:                                              ; preds = %976
  %981 = load i32, ptr %4, align 4, !tbaa !14
  %982 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, i32 noundef %981)
  %983 = load i32, ptr %4, align 4, !tbaa !14
  %984 = sext i32 %983 to i64
  %985 = getelementptr inbounds [1000 x %struct._Fluent], ptr @grelevant_fluents, i64 0, i64 %984
  call void @print_Fluent(ptr noundef %985)
  br label %986

986:                                              ; preds = %980
  %987 = load i32, ptr %4, align 4, !tbaa !14
  %988 = add nsw i32 %987, 1
  store i32 %988, ptr %4, align 4, !tbaa !14
  br label %976, !llvm.loop !69

989:                                              ; preds = %976
  %990 = call i32 (ptr, ...) @printf(ptr noundef @.str.10)
  br label %991

991:                                              ; preds = %989, %956
  store i32 0, ptr @lnum_effects, align 4, !tbaa !14
  call void @create_final_goal_state()
  call void @create_final_initial_state()
  call void @create_final_actions()
  %992 = load ptr, ptr @gmetric, align 8, !tbaa !5
  %993 = icmp ne ptr %992, null
  br i1 %993, label %994, label %1005

994:                                              ; preds = %991
  %995 = call zeroext i8 @set_relevants_in_exp(ptr noundef @gmetric)
  %996 = icmp ne i8 %995, 0
  br i1 %996, label %1004, label %997

997:                                              ; preds = %994
  %998 = load i32, ptr getelementptr inbounds (%struct._command_line, ptr @gcmd_line, i32 0, i32 3), align 4, !tbaa !66
  %999 = icmp ne i32 %998, 0
  br i1 %999, label %1000, label %1002

1000:                                             ; preds = %997
  %1001 = call i32 (ptr, ...) @printf(ptr noundef @.str.20)
  br label %1002

1002:                                             ; preds = %1000, %997
  %1003 = load ptr, ptr @gmetric, align 8, !tbaa !5
  call void @free_ExpNode(ptr noundef %1003)
  store ptr null, ptr @gmetric, align 8, !tbaa !5
  br label %1004

1004:                                             ; preds = %1002, %994
  br label %1005

1005:                                             ; preds = %1004, %991
  %1006 = load i32, ptr getelementptr inbounds (%struct._command_line, ptr @gcmd_line, i32 0, i32 3), align 4, !tbaa !66
  %1007 = icmp eq i32 %1006, 120
  br i1 %1007, label %1008, label %1171

1008:                                             ; preds = %1005
  %1009 = call i32 (ptr, ...) @printf(ptr noundef @.str.21)
  store i32 0, ptr %4, align 4, !tbaa !14
  br label %1010

1010:                                             ; preds = %1076, %1008
  %1011 = load i32, ptr %4, align 4, !tbaa !14
  %1012 = load i32, ptr @gnum_operators, align 4, !tbaa !14
  %1013 = icmp slt i32 %1011, %1012
  br i1 %1013, label %1014, label %1079

1014:                                             ; preds = %1010
  %1015 = load i32, ptr %4, align 4, !tbaa !14
  %1016 = sext i32 %1015 to i64
  %1017 = getelementptr inbounds [50000 x ptr], ptr @goperators, i64 0, i64 %1016
  %1018 = load ptr, ptr %1017, align 8, !tbaa !5
  %1019 = getelementptr inbounds %struct._Operator, ptr %1018, i32 0, i32 0
  %1020 = load ptr, ptr %1019, align 8, !tbaa !70
  %1021 = call i32 (ptr, ...) @printf(ptr noundef @.str.22, ptr noundef %1020)
  %1022 = load ptr, ptr @gactions, align 8, !tbaa !5
  store ptr %1022, ptr %1, align 8, !tbaa !5
  br label %1023

1023:                                             ; preds = %1071, %1014
  %1024 = load ptr, ptr %1, align 8, !tbaa !5
  %1025 = icmp ne ptr %1024, null
  br i1 %1025, label %1026, label %1075

1026:                                             ; preds = %1023
  %1027 = load ptr, ptr %1, align 8, !tbaa !5
  %1028 = getelementptr inbounds %struct._Action, ptr %1027, i32 0, i32 0
  %1029 = load ptr, ptr %1028, align 8, !tbaa !9
  %1030 = icmp ne ptr %1029, null
  br i1 %1030, label %1036, label %1031

1031:                                             ; preds = %1026
  %1032 = load ptr, ptr %1, align 8, !tbaa !5
  %1033 = getelementptr inbounds %struct._Action, ptr %1032, i32 0, i32 1
  %1034 = load ptr, ptr %1033, align 8, !tbaa !26
  %1035 = icmp ne ptr %1034, null
  br i1 %1035, label %1036, label %1068

1036:                                             ; preds = %1031, %1026
  %1037 = load ptr, ptr %1, align 8, !tbaa !5
  %1038 = getelementptr inbounds %struct._Action, ptr %1037, i32 0, i32 0
  %1039 = load ptr, ptr %1038, align 8, !tbaa !9
  %1040 = icmp ne ptr %1039, null
  br i1 %1040, label %1041, label %1052

1041:                                             ; preds = %1036
  %1042 = load ptr, ptr %1, align 8, !tbaa !5
  %1043 = getelementptr inbounds %struct._Action, ptr %1042, i32 0, i32 0
  %1044 = load ptr, ptr %1043, align 8, !tbaa !9
  %1045 = getelementptr inbounds %struct._NormOperator, ptr %1044, i32 0, i32 0
  %1046 = load ptr, ptr %1045, align 8, !tbaa !72
  %1047 = load i32, ptr %4, align 4, !tbaa !14
  %1048 = sext i32 %1047 to i64
  %1049 = getelementptr inbounds [50000 x ptr], ptr @goperators, i64 0, i64 %1048
  %1050 = load ptr, ptr %1049, align 8, !tbaa !5
  %1051 = icmp ne ptr %1046, %1050
  br i1 %1051, label %1068, label %1052

1052:                                             ; preds = %1041, %1036
  %1053 = load ptr, ptr %1, align 8, !tbaa !5
  %1054 = getelementptr inbounds %struct._Action, ptr %1053, i32 0, i32 1
  %1055 = load ptr, ptr %1054, align 8, !tbaa !26
  %1056 = icmp ne ptr %1055, null
  br i1 %1056, label %1057, label %1069

1057:                                             ; preds = %1052
  %1058 = load ptr, ptr %1, align 8, !tbaa !5
  %1059 = getelementptr inbounds %struct._Action, ptr %1058, i32 0, i32 1
  %1060 = load ptr, ptr %1059, align 8, !tbaa !26
  %1061 = getelementptr inbounds %struct._PseudoAction, ptr %1060, i32 0, i32 0
  %1062 = load ptr, ptr %1061, align 8, !tbaa !73
  %1063 = load i32, ptr %4, align 4, !tbaa !14
  %1064 = sext i32 %1063 to i64
  %1065 = getelementptr inbounds [50000 x ptr], ptr @goperators, i64 0, i64 %1064
  %1066 = load ptr, ptr %1065, align 8, !tbaa !5
  %1067 = icmp ne ptr %1062, %1066
  br i1 %1067, label %1068, label %1069

1068:                                             ; preds = %1057, %1041, %1031
  br label %1071

1069:                                             ; preds = %1057, %1052
  %1070 = load ptr, ptr %1, align 8, !tbaa !5
  call void @print_Action(ptr noundef %1070)
  br label %1071

1071:                                             ; preds = %1069, %1068
  %1072 = load ptr, ptr %1, align 8, !tbaa !5
  %1073 = getelementptr inbounds %struct._Action, ptr %1072, i32 0, i32 19
  %1074 = load ptr, ptr %1073, align 8, !tbaa !37
  store ptr %1074, ptr %1, align 8, !tbaa !5
  br label %1023, !llvm.loop !74

1075:                                             ; preds = %1023
  br label %1076

1076:                                             ; preds = %1075
  %1077 = load i32, ptr %4, align 4, !tbaa !14
  %1078 = add nsw i32 %1077, 1
  store i32 %1078, ptr %4, align 4, !tbaa !14
  br label %1010, !llvm.loop !75

1079:                                             ; preds = %1010
  %1080 = call i32 (ptr, ...) @printf(ptr noundef @.str.23)
  %1081 = load ptr, ptr @gactions, align 8, !tbaa !5
  store ptr %1081, ptr %1, align 8, !tbaa !5
  br label %1082

1082:                                             ; preds = %1098, %1079
  %1083 = load ptr, ptr %1, align 8, !tbaa !5
  %1084 = icmp ne ptr %1083, null
  br i1 %1084, label %1085, label %1102

1085:                                             ; preds = %1082
  %1086 = load ptr, ptr %1, align 8, !tbaa !5
  %1087 = getelementptr inbounds %struct._Action, ptr %1086, i32 0, i32 0
  %1088 = load ptr, ptr %1087, align 8, !tbaa !9
  %1089 = icmp ne ptr %1088, null
  br i1 %1089, label %1097, label %1090

1090:                                             ; preds = %1085
  %1091 = load ptr, ptr %1, align 8, !tbaa !5
  %1092 = getelementptr inbounds %struct._Action, ptr %1091, i32 0, i32 1
  %1093 = load ptr, ptr %1092, align 8, !tbaa !26
  %1094 = icmp ne ptr %1093, null
  br i1 %1094, label %1097, label %1095

1095:                                             ; preds = %1090
  %1096 = load ptr, ptr %1, align 8, !tbaa !5
  call void @print_Action(ptr noundef %1096)
  br label %1097

1097:                                             ; preds = %1095, %1090, %1085
  br label %1098

1098:                                             ; preds = %1097
  %1099 = load ptr, ptr %1, align 8, !tbaa !5
  %1100 = getelementptr inbounds %struct._Action, ptr %1099, i32 0, i32 19
  %1101 = load ptr, ptr %1100, align 8, !tbaa !37
  store ptr %1101, ptr %1, align 8, !tbaa !5
  br label %1082, !llvm.loop !76

1102:                                             ; preds = %1082
  %1103 = call i32 (ptr, ...) @printf(ptr noundef @.str.24)
  call void @print_State(ptr noundef byval(%struct._State) align 8 @ginitial_state)
  %1104 = call i32 (ptr, ...) @printf(ptr noundef @.str.25)
  store i32 0, ptr %4, align 4, !tbaa !14
  br label %1105

1105:                                             ; preds = %1116, %1102
  %1106 = load i32, ptr %4, align 4, !tbaa !14
  %1107 = load i32, ptr @gnum_logic_goal, align 4, !tbaa !14
  %1108 = icmp slt i32 %1106, %1107
  br i1 %1108, label %1109, label %1119

1109:                                             ; preds = %1105
  %1110 = load ptr, ptr @glogic_goal, align 8, !tbaa !5
  %1111 = load i32, ptr %4, align 4, !tbaa !14
  %1112 = sext i32 %1111 to i64
  %1113 = getelementptr inbounds i32, ptr %1110, i64 %1112
  %1114 = load i32, ptr %1113, align 4, !tbaa !14
  call void @print_ft_name(i32 noundef %1114)
  %1115 = call i32 (ptr, ...) @printf(ptr noundef @.str.3)
  br label %1116

1116:                                             ; preds = %1109
  %1117 = load i32, ptr %4, align 4, !tbaa !14
  %1118 = add nsw i32 %1117, 1
  store i32 %1118, ptr %4, align 4, !tbaa !14
  br label %1105, !llvm.loop !77

1119:                                             ; preds = %1105
  store i32 0, ptr %4, align 4, !tbaa !14
  br label %1120

1120:                                             ; preds = %1159, %1119
  %1121 = load i32, ptr %4, align 4, !tbaa !14
  %1122 = load i32, ptr @gnum_numeric_goal, align 4, !tbaa !14
  %1123 = icmp slt i32 %1121, %1122
  br i1 %1123, label %1124, label %1162

1124:                                             ; preds = %1120
  %1125 = load ptr, ptr @gnumeric_goal_comp, align 8, !tbaa !5
  %1126 = load i32, ptr %4, align 4, !tbaa !14
  %1127 = sext i32 %1126 to i64
  %1128 = getelementptr inbounds i32, ptr %1125, i64 %1127
  %1129 = load i32, ptr %1128, align 4, !tbaa !14
  switch i32 %1129, label %1140 [
    i32 3001, label %1130
    i32 3002, label %1132
    i32 3003, label %1134
    i32 3004, label %1136
    i32 3005, label %1138
  ]

1130:                                             ; preds = %1124
  %1131 = call i32 (ptr, ...) @printf(ptr noundef @.str.26)
  br label %1147

1132:                                             ; preds = %1124
  %1133 = call i32 (ptr, ...) @printf(ptr noundef @.str.27)
  br label %1147

1134:                                             ; preds = %1124
  %1135 = call i32 (ptr, ...) @printf(ptr noundef @.str.28)
  br label %1147

1136:                                             ; preds = %1124
  %1137 = call i32 (ptr, ...) @printf(ptr noundef @.str.29)
  br label %1147

1138:                                             ; preds = %1124
  %1139 = call i32 (ptr, ...) @printf(ptr noundef @.str.30)
  br label %1147

1140:                                             ; preds = %1124
  %1141 = load ptr, ptr @gnumeric_goal_comp, align 8, !tbaa !5
  %1142 = load i32, ptr %4, align 4, !tbaa !14
  %1143 = sext i32 %1142 to i64
  %1144 = getelementptr inbounds i32, ptr %1141, i64 %1143
  %1145 = load i32, ptr %1144, align 4, !tbaa !14
  %1146 = call i32 (ptr, ...) @printf(ptr noundef @.str.31, i32 noundef %1145)
  call void @exit(i32 noundef 1) #7
  unreachable

1147:                                             ; preds = %1138, %1136, %1134, %1132, %1130
  %1148 = load ptr, ptr @gnumeric_goal_lh, align 8, !tbaa !5
  %1149 = load i32, ptr %4, align 4, !tbaa !14
  %1150 = sext i32 %1149 to i64
  %1151 = getelementptr inbounds ptr, ptr %1148, i64 %1150
  %1152 = load ptr, ptr %1151, align 8, !tbaa !5
  call void @print_ExpNode(ptr noundef %1152)
  %1153 = load ptr, ptr @gnumeric_goal_rh, align 8, !tbaa !5
  %1154 = load i32, ptr %4, align 4, !tbaa !14
  %1155 = sext i32 %1154 to i64
  %1156 = getelementptr inbounds ptr, ptr %1153, i64 %1155
  %1157 = load ptr, ptr %1156, align 8, !tbaa !5
  call void @print_ExpNode(ptr noundef %1157)
  %1158 = call i32 (ptr, ...) @printf(ptr noundef @.str.32)
  br label %1159

1159:                                             ; preds = %1147
  %1160 = load i32, ptr %4, align 4, !tbaa !14
  %1161 = add nsw i32 %1160, 1
  store i32 %1161, ptr %4, align 4, !tbaa !14
  br label %1120, !llvm.loop !78

1162:                                             ; preds = %1120
  %1163 = load ptr, ptr @gmetric, align 8, !tbaa !5
  %1164 = icmp ne ptr %1163, null
  br i1 %1164, label %1165, label %1168

1165:                                             ; preds = %1162
  %1166 = call i32 (ptr, ...) @printf(ptr noundef @.str.33)
  %1167 = load ptr, ptr @gmetric, align 8, !tbaa !5
  call void @print_ExpNode(ptr noundef %1167)
  br label %1170

1168:                                             ; preds = %1162
  %1169 = call i32 (ptr, ...) @printf(ptr noundef @.str.34)
  br label %1170

1170:                                             ; preds = %1168, %1165
  br label %1171

1171:                                             ; preds = %1170, %1005
  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 8, 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 8, ptr %3) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %2) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %1) #6
  ret void
}

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

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

declare void @print_Fluent(ptr noundef) #3

; Function Attrs: nounwind uwtable
declare dso_local void @create_final_goal_state() #2

; Function Attrs: nounwind uwtable
declare dso_local void @create_final_initial_state() #2

; Function Attrs: nounwind uwtable
declare dso_local void @create_final_actions() #2

; Function Attrs: nounwind uwtable
declare dso_local zeroext i8 @set_relevants_in_exp(ptr noundef) #2

declare void @free_ExpNode(ptr noundef) #3

declare void @print_Action(ptr noundef) #3

declare void @print_State(ptr noundef byval(%struct._State) align 8) #3

declare void @print_ft_name(i32 noundef) #3

declare void @print_ExpNode(ptr noundef) #3

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

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

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


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

%struct._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._Fluent = type { i32, [5 x i32] }
%struct._State = type { ptr, i32, ptr, ptr }

@gactions = external local_unnamed_addr global ptr, align 8
@garity = 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
@lp = external dso_local local_unnamed_addr global i32, align 4
@largs = external dso_local local_unnamed_addr global [15 x i32], align 16
@gnum_relevant_facts = external local_unnamed_addr global i32, align 4
@grelevant_facts = external global [150000 x %struct._Fact], align 16
@gcmd_line = external local_unnamed_addr global %struct._command_line, align 4
@.str.3 = external hidden unnamed_addr constant [2 x i8], align 1
@gnum_operators = external local_unnamed_addr global i32, align 4
@goperators = external local_unnamed_addr global [50000 x ptr], align 16
@gconstants = external local_unnamed_addr global [2000 x ptr], align 16
@.str.10 = external hidden unnamed_addr constant [3 x i8], align 1
@gf_arity = external local_unnamed_addr global [50 x i32], align 16
@lf = external dso_local local_unnamed_addr global i32, align 4
@lf_args = external dso_local local_unnamed_addr global [15 x i32], align 16
@gnum_constants = external local_unnamed_addr global i32, align 4
@.str.12 = external hidden unnamed_addr constant [52 x i8], align 1
@gnum_functions = external local_unnamed_addr global i32, align 4
@lf_def = external dso_local local_unnamed_addr global [50 x ptr], align 16
@lf_index = external dso_local local_unnamed_addr global [50 x ptr], align 16
@gf_initial = external local_unnamed_addr global ptr, align 8
@gnum_relevant_fluents = external local_unnamed_addr global i32, align 4
@.str.13 = external hidden unnamed_addr constant [75 x i8], align 1
@grelevant_fluents = external global [1000 x %struct._Fluent], align 16
@grelevant_fluents_name = external local_unnamed_addr global [1000 x ptr], align 16
@gfunctions = external local_unnamed_addr global [50 x ptr], align 16
@.str.14 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [53 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [32 x i8], align 1
@lnum_effects = external dso_local local_unnamed_addr global i32, align 4
@gmetric = external global ptr, align 8
@.str.20 = external hidden unnamed_addr constant [86 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [45 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [52 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [28 x i8], align 1
@ginitial_state = external global %struct._State, align 8
@.str.25 = external hidden unnamed_addr constant [19 x i8], align 1
@gnum_logic_goal = external local_unnamed_addr global i32, align 4
@glogic_goal = external local_unnamed_addr global ptr, align 8
@gnum_numeric_goal = external local_unnamed_addr global i32, align 4
@gnumeric_goal_comp = external local_unnamed_addr global ptr, align 8
@.str.26 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.29 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.31 = external hidden unnamed_addr constant [40 x i8], align 1
@gnumeric_goal_lh = external local_unnamed_addr global ptr, align 8
@gnumeric_goal_rh = external local_unnamed_addr global ptr, align 8
@.str.32 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.33 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.34 = external hidden unnamed_addr constant [34 x i8], align 1
@switch.table.collect_relevant_facts_and_fluents = private unnamed_addr constant [5 x ptr] [ptr @.str.26, ptr @.str.27, ptr @.str.28, ptr @.str.29, ptr @.str.30], align 8

; 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 #0

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

; 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 void @print_Fact(ptr noundef) local_unnamed_addr #4

; Function Attrs: nounwind uwtable
declare dso_local i32 @fluent_adress() local_unnamed_addr #1

; Function Attrs: nounwind uwtable
define dso_local void @collect_relevant_facts_and_fluents() local_unnamed_addr #1 {
  %.0212306 = load ptr, ptr @gactions, align 8, !tbaa !5
  %.not307 = icmp eq ptr %.0212306, null
  br i1 %.not307, label %.preheader268, label %.lr.ph311

.preheader268:                                    ; preds = %.loopexit271, %0
  %1 = load i32, ptr @gnum_functions, align 4, !tbaa !9
  %2 = icmp sgt i32 %1, 0
  br i1 %2, label %.preheader267.lr.ph, label %.preheader266

.preheader267.lr.ph:                              ; preds = %.preheader268
  %3 = load i32, ptr @gnum_constants, align 4
  %wide.trip.count437 = zext nneg i32 %1 to i64
  %broadcast.splatinsert = insertelement <4 x i32> poison, i32 %3, i64 0
  %broadcast.splat = shufflevector <4 x i32> %broadcast.splatinsert, <4 x i32> poison, <4 x i32> zeroinitializer
  br label %.preheader267

.lr.ph311:                                        ; preds = %0, %.loopexit271
  %.0212308 = phi ptr [ %.0212, %.loopexit271 ], [ %.0212306, %0 ]
  %4 = load ptr, ptr %.0212308, align 8, !tbaa !11
  %.not255 = icmp eq ptr %4, null
  br i1 %.not255, label %101, label %5

5:                                                ; preds = %.lr.ph311
  %6 = getelementptr inbounds i8, ptr %4, i64 304
  %.0210289 = load ptr, ptr %6, align 8, !tbaa !5
  %.not259290 = icmp eq ptr %.0210289, null
  br i1 %.not259290, label %.loopexit271, label %.preheader270.lr.ph

.preheader270.lr.ph:                              ; preds = %5
  %7 = getelementptr inbounds i8, ptr %.0212308, i64 96
  br label %.preheader270

.preheader270:                                    ; preds = %.preheader270.lr.ph, %._crit_edge288
  %.0210291 = phi ptr [ %.0210289, %.preheader270.lr.ph ], [ %.0210, %._crit_edge288 ]
  %8 = getelementptr inbounds i8, ptr %.0210291, i64 168
  %9 = load i32, ptr %8, align 8, !tbaa !13
  %10 = icmp sgt i32 %9, 0
  br i1 %10, label %.lr.ph287, label %._crit_edge288

.lr.ph287:                                        ; preds = %.preheader270
  %11 = getelementptr inbounds i8, ptr %.0210291, i64 160
  br label %12

12:                                               ; preds = %.lr.ph287, %96
  %indvars.iv414 = phi i64 [ 0, %.lr.ph287 ], [ %indvars.iv.next415, %96 ]
  %13 = load ptr, ptr %11, align 8, !tbaa !15
  %14 = getelementptr inbounds %struct._Fact, ptr %13, i64 %indvars.iv414
  %15 = load i32, ptr %14, align 4, !tbaa !16
  store i32 %15, ptr @lp, align 4, !tbaa !9
  %16 = sext i32 %15 to i64
  %17 = getelementptr inbounds [50 x i32], ptr @garity, i64 0, i64 %16
  %18 = load i32, ptr %17, align 4, !tbaa !9
  %19 = icmp sgt i32 %18, 0
  br i1 %19, label %.lr.ph.preheader, label %._crit_edge

.lr.ph.preheader:                                 ; preds = %12
  %wide.trip.count = zext nneg i32 %18 to i64
  %xtraiter = and i64 %wide.trip.count, 1
  %20 = icmp eq i32 %18, 1
  br i1 %20, 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, 2147483646
  br label %.lr.ph

.lr.ph:                                           ; preds = %39, %.lr.ph.preheader.new
  %indvars.iv = phi i64 [ 0, %.lr.ph.preheader.new ], [ %indvars.iv.next.1, %39 ]
  %niter = phi i64 [ 0, %.lr.ph.preheader.new ], [ %niter.next.1, %39 ]
  %21 = getelementptr inbounds %struct._Fact, ptr %13, i64 %indvars.iv414, i32 1, i64 %indvars.iv
  %22 = load i32, ptr %21, align 4, !tbaa !9
  %23 = icmp sgt i32 %22, -1
  br i1 %23, label %.lr.ph.1, label %24

24:                                               ; preds = %.lr.ph
  %25 = xor i32 %22, -1
  %26 = zext nneg i32 %25 to i64
  %27 = getelementptr inbounds [15 x i32], ptr %7, i64 0, i64 %26
  %28 = load i32, ptr %27, align 4, !tbaa !9
  br label %.lr.ph.1

.lr.ph.1:                                         ; preds = %.lr.ph, %24
  %29 = phi i32 [ %28, %24 ], [ %22, %.lr.ph ]
  %30 = getelementptr inbounds [15 x i32], ptr @largs, i64 0, i64 %indvars.iv
  store i32 %29, ptr %30, align 8, !tbaa !9
  %indvars.iv.next = or disjoint i64 %indvars.iv, 1
  %31 = getelementptr inbounds %struct._Fact, ptr %13, i64 %indvars.iv414, i32 1, i64 %indvars.iv.next
  %32 = load i32, ptr %31, align 4, !tbaa !9
  %33 = icmp sgt i32 %32, -1
  br i1 %33, label %39, label %34

34:                                               ; preds = %.lr.ph.1
  %35 = xor i32 %32, -1
  %36 = zext nneg i32 %35 to i64
  %37 = getelementptr inbounds [15 x i32], ptr %7, i64 0, i64 %36
  %38 = load i32, ptr %37, align 4, !tbaa !9
  br label %39

39:                                               ; preds = %34, %.lr.ph.1
  %40 = phi i32 [ %38, %34 ], [ %32, %.lr.ph.1 ]
  %41 = getelementptr inbounds [15 x i32], ptr @largs, i64 0, i64 %indvars.iv.next
  store i32 %40, ptr %41, align 4, !tbaa !9
  %indvars.iv.next.1 = add nuw nsw i64 %indvars.iv, 2
  %niter.next.1 = add i64 %niter, 2
  %niter.ncmp.1 = icmp eq i64 %niter.next.1, %unroll_iter
  br i1 %niter.ncmp.1, label %._crit_edge.loopexit.unr-lcssa, label %.lr.ph, !llvm.loop !18

._crit_edge.loopexit.unr-lcssa:                   ; preds = %39, %.lr.ph.preheader
  %indvars.iv.unr = phi i64 [ 0, %.lr.ph.preheader ], [ %indvars.iv.next.1, %39 ]
  %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
  %42 = getelementptr inbounds %struct._Fact, ptr %13, i64 %indvars.iv414, i32 1, i64 %indvars.iv.unr
  %43 = load i32, ptr %42, align 4, !tbaa !9
  %44 = icmp sgt i32 %43, -1
  br i1 %44, label %._crit_edge.loopexit.epilog-lcssa, label %45

45:                                               ; preds = %.lr.ph.epil
  %46 = xor i32 %43, -1
  %47 = zext nneg i32 %46 to i64
  %48 = getelementptr inbounds [15 x i32], ptr %7, i64 0, i64 %47
  %49 = load i32, ptr %48, align 4, !tbaa !9
  br label %._crit_edge.loopexit.epilog-lcssa

._crit_edge.loopexit.epilog-lcssa:                ; preds = %45, %.lr.ph.epil
  %50 = phi i32 [ %49, %45 ], [ %43, %.lr.ph.epil ]
  %51 = getelementptr inbounds [15 x i32], ptr @largs, i64 0, i64 %indvars.iv.unr
  store i32 %50, ptr %51, align 4, !tbaa !9
  br label %._crit_edge

._crit_edge:                                      ; preds = %._crit_edge.loopexit.epilog-lcssa, %._crit_edge.loopexit.unr-lcssa, %12
  %52 = tail call i32 @fact_adress()
  %53 = load i32, ptr @lp, align 4, !tbaa !9
  %54 = sext i32 %53 to i64
  %55 = getelementptr inbounds [50 x ptr], ptr @lneg, i64 0, i64 %54
  %56 = load ptr, ptr %55, align 8, !tbaa !5
  %57 = sext i32 %52 to i64
  %58 = getelementptr inbounds i32, ptr %56, i64 %57
  store i32 1, ptr %58, align 4, !tbaa !9
  %59 = load i32, ptr @lp, align 4, !tbaa !9
  %60 = sext i32 %59 to i64
  %61 = getelementptr inbounds [50 x ptr], ptr @lpos, i64 0, i64 %60
  %62 = load ptr, ptr %61, align 8, !tbaa !5
  %63 = getelementptr inbounds i32, ptr %62, i64 %57
  %64 = load i32, ptr %63, align 4, !tbaa !9
  %.not260 = icmp eq i32 %64, 0
  br i1 %.not260, label %96, label %65

65:                                               ; preds = %._crit_edge
  %66 = getelementptr inbounds [50 x ptr], ptr @luse, i64 0, i64 %60
  %67 = load ptr, ptr %66, align 8, !tbaa !5
  %68 = getelementptr inbounds i32, ptr %67, i64 %57
  %69 = load i32, ptr %68, align 4, !tbaa !9
  %.not261 = icmp eq i32 %69, 0
  br i1 %.not261, label %70, label %96

70:                                               ; preds = %65
  store i32 1, ptr %68, align 4, !tbaa !9
  %71 = load i32, ptr @gnum_relevant_facts, align 4, !tbaa !9
  %72 = load i32, ptr @lp, align 4, !tbaa !9
  %73 = sext i32 %72 to i64
  %74 = getelementptr inbounds [50 x ptr], ptr @lindex, i64 0, i64 %73
  %75 = load ptr, ptr %74, align 8, !tbaa !5
  %76 = getelementptr inbounds i32, ptr %75, i64 %57
  store i32 %71, ptr %76, align 4, !tbaa !9
  %77 = icmp eq i32 %71, 150000
  br i1 %77, label %78, label %80

78:                                               ; preds = %70
  %79 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.12, i32 noundef 150000)
  tail call void @exit(i32 noundef 1) #9
  unreachable

80:                                               ; preds = %70
  %81 = load i32, ptr @lp, align 4, !tbaa !9
  %82 = sext i32 %71 to i64
  %83 = getelementptr inbounds [150000 x %struct._Fact], ptr @grelevant_facts, i64 0, i64 %82
  store i32 %81, ptr %83, align 8, !tbaa !16
  %84 = sext i32 %81 to i64
  %85 = getelementptr inbounds [50 x i32], ptr @garity, i64 0, i64 %84
  %86 = load i32, ptr %85, align 4, !tbaa !9
  %87 = icmp sgt i32 %86, 0
  br i1 %87, label %.lr.ph284.preheader, label %._crit_edge285

.lr.ph284.preheader:                              ; preds = %80
  %88 = mul nsw i64 %82, 24
  %scevgep = getelementptr i8, ptr getelementptr inbounds (i8, ptr @grelevant_facts, i64 4), i64 %88
  %89 = zext nneg i32 %86 to i64
  %90 = shl nuw nsw i64 %89, 2
  tail call void @llvm.memcpy.p0.p0.i64(ptr align 4 %scevgep, ptr nonnull align 16 @largs, i64 %90, i1 false), !tbaa !9
  br label %._crit_edge285

._crit_edge285:                                   ; preds = %.lr.ph284.preheader, %80
  %91 = getelementptr inbounds [50 x ptr], ptr @lindex, i64 0, i64 %84
  %92 = load ptr, ptr %91, align 8, !tbaa !5
  %93 = getelementptr inbounds i32, ptr %92, i64 %57
  store i32 %71, ptr %93, align 4, !tbaa !9
  %94 = load i32, ptr @gnum_relevant_facts, align 4, !tbaa !9
  %95 = add nsw i32 %94, 1
  store i32 %95, ptr @gnum_relevant_facts, align 4, !tbaa !9
  br label %96

96:                                               ; preds = %._crit_edge, %65, %._crit_edge285
  %indvars.iv.next415 = add nuw nsw i64 %indvars.iv414, 1
  %97 = load i32, ptr %8, align 8, !tbaa !13
  %98 = sext i32 %97 to i64
  %99 = icmp slt i64 %indvars.iv.next415, %98
  br i1 %99, label %12, label %._crit_edge288, !llvm.loop !20

._crit_edge288:                                   ; preds = %96, %.preheader270
  %100 = getelementptr inbounds i8, ptr %.0210291, i64 248
  %.0210 = load ptr, ptr %100, align 8, !tbaa !5
  %.not259 = icmp eq ptr %.0210, null
  br i1 %.not259, label %.loopexit271, label %.preheader270, !llvm.loop !21

101:                                              ; preds = %.lr.ph311
  %102 = getelementptr inbounds i8, ptr %.0212308, i64 8
  %103 = load ptr, ptr %102, align 8, !tbaa !22
  %104 = getelementptr inbounds i8, ptr %103, i64 120
  %.0196303 = load ptr, ptr %104, align 8, !tbaa !5
  %.not256304 = icmp eq ptr %.0196303, null
  br i1 %.not256304, label %.loopexit271, label %.preheader269

.preheader269:                                    ; preds = %101, %._crit_edge302
  %.0196305 = phi ptr [ %.0196, %._crit_edge302 ], [ %.0196303, %101 ]
  %105 = getelementptr inbounds i8, ptr %.0196305, i64 40
  %106 = load i32, ptr %105, align 8, !tbaa !23
  %107 = icmp sgt i32 %106, 0
  br i1 %107, label %.lr.ph301, label %._crit_edge302

.lr.ph301:                                        ; preds = %.preheader269
  %108 = getelementptr inbounds i8, ptr %.0196305, i64 32
  br label %109

109:                                              ; preds = %.lr.ph301, %187
  %indvars.iv427 = phi i64 [ 0, %.lr.ph301 ], [ %indvars.iv.next428, %187 ]
  %110 = load ptr, ptr %108, align 8, !tbaa !25
  %111 = getelementptr inbounds %struct._Fact, ptr %110, i64 %indvars.iv427
  %112 = load i32, ptr %111, align 4, !tbaa !16
  store i32 %112, ptr @lp, align 4, !tbaa !9
  %113 = sext i32 %112 to i64
  %114 = getelementptr inbounds [50 x i32], ptr @garity, i64 0, i64 %113
  %115 = load i32, ptr %114, align 4, !tbaa !9
  %116 = icmp sgt i32 %115, 0
  br i1 %116, label %.lr.ph294.preheader, label %._crit_edge295

.lr.ph294.preheader:                              ; preds = %109
  %117 = ptrtoint ptr %110 to i64
  %118 = mul nsw i64 %indvars.iv427, -24
  %119 = add i64 %118, add (i64 ptrtoint (ptr @largs to i64), i64 -4)
  %wide.trip.count421 = zext nneg i32 %115 to i64
  %min.iters.check = icmp ult i32 %115, 8
  %120 = sub i64 %119, %117
  %diff.check = icmp ult i64 %120, 32
  %or.cond = select i1 %min.iters.check, i1 true, i1 %diff.check
  br i1 %or.cond, label %.lr.ph294.preheader547, label %vector.ph

vector.ph:                                        ; preds = %.lr.ph294.preheader
  %n.vec = and i64 %wide.trip.count421, 2147483640
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %121 = getelementptr inbounds %struct._Fact, ptr %110, i64 %indvars.iv427, i32 1, i64 %index
  %122 = getelementptr inbounds i8, ptr %121, i64 16
  %wide.load = load <4 x i32>, ptr %121, align 4, !tbaa !9
  %wide.load506 = load <4 x i32>, ptr %122, align 4, !tbaa !9
  %123 = getelementptr inbounds [15 x i32], ptr @largs, i64 0, i64 %index
  %124 = getelementptr inbounds i8, ptr %123, i64 16
  store <4 x i32> %wide.load, ptr %123, align 16, !tbaa !9
  store <4 x i32> %wide.load506, ptr %124, align 16, !tbaa !9
  %index.next = add nuw i64 %index, 8
  %125 = icmp eq i64 %index.next, %n.vec
  br i1 %125, label %middle.block, label %vector.body, !llvm.loop !26

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %n.vec, %wide.trip.count421
  br i1 %cmp.n, label %._crit_edge295, label %.lr.ph294.preheader547

.lr.ph294.preheader547:                           ; preds = %middle.block, %.lr.ph294.preheader
  %indvars.iv418.ph = phi i64 [ 0, %.lr.ph294.preheader ], [ %n.vec, %middle.block ]
  %xtraiter549 = and i64 %wide.trip.count421, 3
  %lcmp.mod550.not = icmp eq i64 %xtraiter549, 0
  br i1 %lcmp.mod550.not, label %.lr.ph294.prol.loopexit, label %.lr.ph294.prol

.lr.ph294.prol:                                   ; preds = %.lr.ph294.preheader547, %.lr.ph294.prol
  %indvars.iv418.prol = phi i64 [ %indvars.iv.next419.prol, %.lr.ph294.prol ], [ %indvars.iv418.ph, %.lr.ph294.preheader547 ]
  %prol.iter = phi i64 [ %prol.iter.next, %.lr.ph294.prol ], [ 0, %.lr.ph294.preheader547 ]
  %126 = getelementptr inbounds %struct._Fact, ptr %110, i64 %indvars.iv427, i32 1, i64 %indvars.iv418.prol
  %127 = load i32, ptr %126, align 4, !tbaa !9
  %128 = getelementptr inbounds [15 x i32], ptr @largs, i64 0, i64 %indvars.iv418.prol
  store i32 %127, ptr %128, align 4, !tbaa !9
  %indvars.iv.next419.prol = add nuw nsw i64 %indvars.iv418.prol, 1
  %prol.iter.next = add i64 %prol.iter, 1
  %prol.iter.cmp.not = icmp eq i64 %prol.iter.next, %xtraiter549
  br i1 %prol.iter.cmp.not, label %.lr.ph294.prol.loopexit, label %.lr.ph294.prol, !llvm.loop !29

.lr.ph294.prol.loopexit:                          ; preds = %.lr.ph294.prol, %.lr.ph294.preheader547
  %indvars.iv418.unr = phi i64 [ %indvars.iv418.ph, %.lr.ph294.preheader547 ], [ %indvars.iv.next419.prol, %.lr.ph294.prol ]
  %129 = sub nsw i64 %indvars.iv418.ph, %wide.trip.count421
  %130 = icmp ugt i64 %129, -4
  br i1 %130, label %._crit_edge295, label %.lr.ph294

.lr.ph294:                                        ; preds = %.lr.ph294.prol.loopexit, %.lr.ph294
  %indvars.iv418 = phi i64 [ %indvars.iv.next419.3, %.lr.ph294 ], [ %indvars.iv418.unr, %.lr.ph294.prol.loopexit ]
  %131 = getelementptr inbounds %struct._Fact, ptr %110, i64 %indvars.iv427, i32 1, i64 %indvars.iv418
  %132 = load i32, ptr %131, align 4, !tbaa !9
  %133 = getelementptr inbounds [15 x i32], ptr @largs, i64 0, i64 %indvars.iv418
  store i32 %132, ptr %133, align 4, !tbaa !9
  %indvars.iv.next419 = add nuw nsw i64 %indvars.iv418, 1
  %134 = getelementptr inbounds %struct._Fact, ptr %110, i64 %indvars.iv427, i32 1, i64 %indvars.iv.next419
  %135 = load i32, ptr %134, align 4, !tbaa !9
  %136 = getelementptr inbounds [15 x i32], ptr @largs, i64 0, i64 %indvars.iv.next419
  store i32 %135, ptr %136, align 4, !tbaa !9
  %indvars.iv.next419.1 = add nuw nsw i64 %indvars.iv418, 2
  %137 = getelementptr inbounds %struct._Fact, ptr %110, i64 %indvars.iv427, i32 1, i64 %indvars.iv.next419.1
  %138 = load i32, ptr %137, align 4, !tbaa !9
  %139 = getelementptr inbounds [15 x i32], ptr @largs, i64 0, i64 %indvars.iv.next419.1
  store i32 %138, ptr %139, align 4, !tbaa !9
  %indvars.iv.next419.2 = add nuw nsw i64 %indvars.iv418, 3
  %140 = getelementptr inbounds %struct._Fact, ptr %110, i64 %indvars.iv427, i32 1, i64 %indvars.iv.next419.2
  %141 = load i32, ptr %140, align 4, !tbaa !9
  %142 = getelementptr inbounds [15 x i32], ptr @largs, i64 0, i64 %indvars.iv.next419.2
  store i32 %141, ptr %142, align 4, !tbaa !9
  %indvars.iv.next419.3 = add nuw nsw i64 %indvars.iv418, 4
  %exitcond422.not.3 = icmp eq i64 %indvars.iv.next419.3, %wide.trip.count421
  br i1 %exitcond422.not.3, label %._crit_edge295, label %.lr.ph294, !llvm.loop !31

._crit_edge295:                                   ; preds = %.lr.ph294.prol.loopexit, %.lr.ph294, %middle.block, %109
  %143 = tail call i32 @fact_adress()
  %144 = load i32, ptr @lp, align 4, !tbaa !9
  %145 = sext i32 %144 to i64
  %146 = getelementptr inbounds [50 x ptr], ptr @lneg, i64 0, i64 %145
  %147 = load ptr, ptr %146, align 8, !tbaa !5
  %148 = sext i32 %143 to i64
  %149 = getelementptr inbounds i32, ptr %147, i64 %148
  store i32 1, ptr %149, align 4, !tbaa !9
  %150 = load i32, ptr @lp, align 4, !tbaa !9
  %151 = sext i32 %150 to i64
  %152 = getelementptr inbounds [50 x ptr], ptr @lpos, i64 0, i64 %151
  %153 = load ptr, ptr %152, align 8, !tbaa !5
  %154 = getelementptr inbounds i32, ptr %153, i64 %148
  %155 = load i32, ptr %154, align 4, !tbaa !9
  %.not257 = icmp eq i32 %155, 0
  br i1 %.not257, label %187, label %156

156:                                              ; preds = %._crit_edge295
  %157 = getelementptr inbounds [50 x ptr], ptr @luse, i64 0, i64 %151
  %158 = load ptr, ptr %157, align 8, !tbaa !5
  %159 = getelementptr inbounds i32, ptr %158, i64 %148
  %160 = load i32, ptr %159, align 4, !tbaa !9
  %.not258 = icmp eq i32 %160, 0
  br i1 %.not258, label %161, label %187

161:                                              ; preds = %156
  store i32 1, ptr %159, align 4, !tbaa !9
  %162 = load i32, ptr @gnum_relevant_facts, align 4, !tbaa !9
  %163 = load i32, ptr @lp, align 4, !tbaa !9
  %164 = sext i32 %163 to i64
  %165 = getelementptr inbounds [50 x ptr], ptr @lindex, i64 0, i64 %164
  %166 = load ptr, ptr %165, align 8, !tbaa !5
  %167 = getelementptr inbounds i32, ptr %166, i64 %148
  store i32 %162, ptr %167, align 4, !tbaa !9
  %168 = icmp eq i32 %162, 150000
  br i1 %168, label %169, label %171

169:                                              ; preds = %161
  %170 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.12, i32 noundef 150000)
  tail call void @exit(i32 noundef 1) #9
  unreachable

171:                                              ; preds = %161
  %172 = load i32, ptr @lp, align 4, !tbaa !9
  %173 = sext i32 %162 to i64
  %174 = getelementptr inbounds [150000 x %struct._Fact], ptr @grelevant_facts, i64 0, i64 %173
  store i32 %172, ptr %174, align 8, !tbaa !16
  %175 = sext i32 %172 to i64
  %176 = getelementptr inbounds [50 x i32], ptr @garity, i64 0, i64 %175
  %177 = load i32, ptr %176, align 4, !tbaa !9
  %178 = icmp sgt i32 %177, 0
  br i1 %178, label %.lr.ph298.preheader, label %._crit_edge299

.lr.ph298.preheader:                              ; preds = %171
  %179 = mul nsw i64 %173, 24
  %scevgep423 = getelementptr i8, ptr getelementptr inbounds (i8, ptr @grelevant_facts, i64 4), i64 %179
  %180 = zext nneg i32 %177 to i64
  %181 = shl nuw nsw i64 %180, 2
  tail call void @llvm.memcpy.p0.p0.i64(ptr align 4 %scevgep423, ptr nonnull align 16 @largs, i64 %181, i1 false), !tbaa !9
  br label %._crit_edge299

._crit_edge299:                                   ; preds = %.lr.ph298.preheader, %171
  %182 = getelementptr inbounds [50 x ptr], ptr @lindex, i64 0, i64 %175
  %183 = load ptr, ptr %182, align 8, !tbaa !5
  %184 = getelementptr inbounds i32, ptr %183, i64 %148
  store i32 %162, ptr %184, align 4, !tbaa !9
  %185 = load i32, ptr @gnum_relevant_facts, align 4, !tbaa !9
  %186 = add nsw i32 %185, 1
  store i32 %186, ptr @gnum_relevant_facts, align 4, !tbaa !9
  br label %187

187:                                              ; preds = %._crit_edge295, %156, %._crit_edge299
  %indvars.iv.next428 = add nuw nsw i64 %indvars.iv427, 1
  %188 = load i32, ptr %105, align 8, !tbaa !23
  %189 = sext i32 %188 to i64
  %190 = icmp slt i64 %indvars.iv.next428, %189
  br i1 %190, label %109, label %._crit_edge302, !llvm.loop !32

._crit_edge302:                                   ; preds = %187, %.preheader269
  %191 = getelementptr inbounds i8, ptr %.0196305, i64 112
  %.0196 = load ptr, ptr %191, align 8, !tbaa !5
  %.not256 = icmp eq ptr %.0196, null
  br i1 %.not256, label %.loopexit271, label %.preheader269, !llvm.loop !33

.loopexit271:                                     ; preds = %._crit_edge288, %._crit_edge302, %5, %101
  %192 = getelementptr inbounds i8, ptr %.0212308, i64 256
  %.0212 = load ptr, ptr %192, align 8, !tbaa !5
  %.not = icmp eq ptr %.0212, null
  br i1 %.not, label %.preheader268, label %.lr.ph311, !llvm.loop !34

.preheader267:                                    ; preds = %.preheader267.lr.ph, %._crit_edge320
  %indvars.iv434 = phi i64 [ 0, %.preheader267.lr.ph ], [ %indvars.iv.next435, %._crit_edge320 ]
  %193 = getelementptr inbounds [50 x i32], ptr @gf_arity, i64 0, i64 %indvars.iv434
  %194 = load i32, ptr %193, align 4, !tbaa !9
  %195 = icmp sgt i32 %194, 0
  br i1 %195, label %.lr.ph314.preheader, label %._crit_edge315

.lr.ph314.preheader:                              ; preds = %.preheader267
  %min.iters.check509 = icmp ult i32 %194, 8
  br i1 %min.iters.check509, label %.lr.ph314.preheader543, label %vector.ph510

.lr.ph314.preheader543:                           ; preds = %middle.block507, %.lr.ph314.preheader
  %.0197313.ph = phi i32 [ 1, %.lr.ph314.preheader ], [ %199, %middle.block507 ]
  %.4312.ph = phi i32 [ 0, %.lr.ph314.preheader ], [ %n.vec512, %middle.block507 ]
  br label %.lr.ph314

vector.ph510:                                     ; preds = %.lr.ph314.preheader
  %n.vec512 = and i32 %194, 2147483640
  br label %vector.body514

vector.body514:                                   ; preds = %vector.body514, %vector.ph510
  %index515 = phi i32 [ 0, %vector.ph510 ], [ %index.next517, %vector.body514 ]
  %vec.phi = phi <4 x i32> [ <i32 1, i32 1, i32 1, i32 1>, %vector.ph510 ], [ %196, %vector.body514 ]
  %vec.phi516 = phi <4 x i32> [ <i32 1, i32 1, i32 1, i32 1>, %vector.ph510 ], [ %197, %vector.body514 ]
  %196 = mul <4 x i32> %broadcast.splat, %vec.phi
  %197 = mul <4 x i32> %broadcast.splat, %vec.phi516
  %index.next517 = add nuw i32 %index515, 8
  %198 = icmp eq i32 %index.next517, %n.vec512
  br i1 %198, label %middle.block507, label %vector.body514, !llvm.loop !35

middle.block507:                                  ; preds = %vector.body514
  %bin.rdx = mul <4 x i32> %197, %196
  %199 = tail call i32 @llvm.vector.reduce.mul.v4i32(<4 x i32> %bin.rdx)
  %cmp.n518 = icmp eq i32 %194, %n.vec512
  br i1 %cmp.n518, label %._crit_edge315, label %.lr.ph314.preheader543

.preheader266:                                    ; preds = %._crit_edge320, %.preheader268
  %.0331 = load ptr, ptr @gf_initial, align 8, !tbaa !5
  %.not231332 = icmp eq ptr %.0331, null
  br i1 %.not231332, label %.preheader265, label %.lr.ph334

.lr.ph314:                                        ; preds = %.lr.ph314.preheader543, %.lr.ph314
  %.0197313 = phi i32 [ %200, %.lr.ph314 ], [ %.0197313.ph, %.lr.ph314.preheader543 ]
  %.4312 = phi i32 [ %201, %.lr.ph314 ], [ %.4312.ph, %.lr.ph314.preheader543 ]
  %200 = mul nsw i32 %3, %.0197313
  %201 = add nuw nsw i32 %.4312, 1
  %exitcond430.not = icmp eq i32 %201, %194
  br i1 %exitcond430.not, label %._crit_edge315, label %.lr.ph314, !llvm.loop !36

._crit_edge315:                                   ; preds = %.lr.ph314, %middle.block507, %.preheader267
  %.0197.lcssa = phi i32 [ 1, %.preheader267 ], [ %199, %middle.block507 ], [ %200, %.lr.ph314 ]
  %202 = sext i32 %.0197.lcssa to i64
  %203 = tail call noalias ptr @calloc(i64 noundef %202, i64 noundef 4) #10
  %204 = getelementptr inbounds [50 x ptr], ptr @lf_def, i64 0, i64 %indvars.iv434
  store ptr %203, ptr %204, align 8, !tbaa !5
  %205 = tail call noalias ptr @calloc(i64 noundef %202, i64 noundef 4) #10
  %206 = getelementptr inbounds [50 x ptr], ptr @lf_index, i64 0, i64 %indvars.iv434
  store ptr %205, ptr %206, align 8, !tbaa !5
  %207 = icmp sgt i32 %.0197.lcssa, 0
  br i1 %207, label %.lr.ph319.preheader, label %._crit_edge320

.lr.ph319.preheader:                              ; preds = %._crit_edge315
  %208 = zext nneg i32 %.0197.lcssa to i64
  %209 = shl nuw nsw i64 %208, 2
  tail call void @llvm.memset.p0.i64(ptr align 4 %203, i8 0, i64 %209, i1 false), !tbaa !9
  tail call void @llvm.memset.p0.i64(ptr align 4 %205, i8 -1, i64 %209, i1 false), !tbaa !9
  br label %._crit_edge320

._crit_edge320:                                   ; preds = %.lr.ph319.preheader, %._crit_edge315
  %indvars.iv.next435 = add nuw nsw i64 %indvars.iv434, 1
  %exitcond438.not = icmp eq i64 %indvars.iv.next435, %wide.trip.count437
  br i1 %exitcond438.not, label %.preheader266, label %.preheader267, !llvm.loop !37

.preheader265:                                    ; preds = %._crit_edge329, %.preheader266
  %.1213365 = load ptr, ptr @gactions, align 8, !tbaa !5
  %.not232366 = icmp eq ptr %.1213365, null
  br i1 %.not232366, label %._crit_edge370, label %.lr.ph369

.lr.ph334:                                        ; preds = %.preheader266, %._crit_edge329
  %.0333 = phi ptr [ %.0, %._crit_edge329 ], [ %.0331, %.preheader266 ]
  %210 = load i32, ptr %.0333, align 8, !tbaa !38
  store i32 %210, ptr @lf, align 4, !tbaa !9
  %211 = sext i32 %210 to i64
  %212 = getelementptr inbounds [50 x i32], ptr @gf_arity, i64 0, i64 %211
  %213 = load i32, ptr %212, align 4, !tbaa !9
  %214 = icmp sgt i32 %213, 0
  br i1 %214, label %.lr.ph324, label %._crit_edge325

.lr.ph324:                                        ; preds = %.lr.ph334
  %.0333520 = ptrtoint ptr %.0333 to i64
  %215 = getelementptr inbounds i8, ptr %.0333, i64 4
  %wide.trip.count442 = zext nneg i32 %213 to i64
  %min.iters.check524 = icmp ult i32 %213, 8
  %216 = sub i64 add (i64 ptrtoint (ptr @lf_args to i64), i64 -4), %.0333520
  %diff.check521 = icmp ult i64 %216, 32
  %or.cond535 = or i1 %min.iters.check524, %diff.check521
  br i1 %or.cond535, label %scalar.ph523.preheader, label %vector.ph525

vector.ph525:                                     ; preds = %.lr.ph324
  %n.vec527 = and i64 %wide.trip.count442, 2147483640
  br label %vector.body529

vector.body529:                                   ; preds = %vector.body529, %vector.ph525
  %index530 = phi i64 [ 0, %vector.ph525 ], [ %index.next533, %vector.body529 ]
  %217 = getelementptr inbounds [5 x i32], ptr %215, i64 0, i64 %index530
  %218 = getelementptr inbounds i8, ptr %217, i64 16
  %wide.load531 = load <4 x i32>, ptr %217, align 4, !tbaa !9
  %wide.load532 = load <4 x i32>, ptr %218, align 4, !tbaa !9
  %219 = getelementptr inbounds [15 x i32], ptr @lf_args, i64 0, i64 %index530
  %220 = getelementptr inbounds i8, ptr %219, i64 16
  store <4 x i32> %wide.load531, ptr %219, align 16, !tbaa !9
  store <4 x i32> %wide.load532, ptr %220, align 16, !tbaa !9
  %index.next533 = add nuw i64 %index530, 8
  %221 = icmp eq i64 %index.next533, %n.vec527
  br i1 %221, label %middle.block522, label %vector.body529, !llvm.loop !42

middle.block522:                                  ; preds = %vector.body529
  %cmp.n534 = icmp eq i64 %n.vec527, %wide.trip.count442
  br i1 %cmp.n534, label %._crit_edge325, label %scalar.ph523.preheader

scalar.ph523.preheader:                           ; preds = %middle.block522, %.lr.ph324
  %indvars.iv439.ph = phi i64 [ 0, %.lr.ph324 ], [ %n.vec527, %middle.block522 ]
  %xtraiter551 = and i64 %wide.trip.count442, 3
  %lcmp.mod552.not = icmp eq i64 %xtraiter551, 0
  br i1 %lcmp.mod552.not, label %scalar.ph523.prol.loopexit, label %scalar.ph523.prol

scalar.ph523.prol:                                ; preds = %scalar.ph523.preheader, %scalar.ph523.prol
  %indvars.iv439.prol = phi i64 [ %indvars.iv.next440.prol, %scalar.ph523.prol ], [ %indvars.iv439.ph, %scalar.ph523.preheader ]
  %prol.iter553 = phi i64 [ %prol.iter553.next, %scalar.ph523.prol ], [ 0, %scalar.ph523.preheader ]
  %222 = getelementptr inbounds [5 x i32], ptr %215, i64 0, i64 %indvars.iv439.prol
  %223 = load i32, ptr %222, align 4, !tbaa !9
  %224 = getelementptr inbounds [15 x i32], ptr @lf_args, i64 0, i64 %indvars.iv439.prol
  store i32 %223, ptr %224, align 4, !tbaa !9
  %indvars.iv.next440.prol = add nuw nsw i64 %indvars.iv439.prol, 1
  %prol.iter553.next = add i64 %prol.iter553, 1
  %prol.iter553.cmp.not = icmp eq i64 %prol.iter553.next, %xtraiter551
  br i1 %prol.iter553.cmp.not, label %scalar.ph523.prol.loopexit, label %scalar.ph523.prol, !llvm.loop !43

scalar.ph523.prol.loopexit:                       ; preds = %scalar.ph523.prol, %scalar.ph523.preheader
  %indvars.iv439.unr = phi i64 [ %indvars.iv439.ph, %scalar.ph523.preheader ], [ %indvars.iv.next440.prol, %scalar.ph523.prol ]
  %225 = sub nsw i64 %indvars.iv439.ph, %wide.trip.count442
  %226 = icmp ugt i64 %225, -4
  br i1 %226, label %._crit_edge325, label %scalar.ph523

scalar.ph523:                                     ; preds = %scalar.ph523.prol.loopexit, %scalar.ph523
  %indvars.iv439 = phi i64 [ %indvars.iv.next440.3, %scalar.ph523 ], [ %indvars.iv439.unr, %scalar.ph523.prol.loopexit ]
  %227 = getelementptr inbounds [5 x i32], ptr %215, i64 0, i64 %indvars.iv439
  %228 = load i32, ptr %227, align 4, !tbaa !9
  %229 = getelementptr inbounds [15 x i32], ptr @lf_args, i64 0, i64 %indvars.iv439
  store i32 %228, ptr %229, align 4, !tbaa !9
  %indvars.iv.next440 = add nuw nsw i64 %indvars.iv439, 1
  %230 = getelementptr inbounds [5 x i32], ptr %215, i64 0, i64 %indvars.iv.next440
  %231 = load i32, ptr %230, align 4, !tbaa !9
  %232 = getelementptr inbounds [15 x i32], ptr @lf_args, i64 0, i64 %indvars.iv.next440
  store i32 %231, ptr %232, align 4, !tbaa !9
  %indvars.iv.next440.1 = add nuw nsw i64 %indvars.iv439, 2
  %233 = getelementptr inbounds [5 x i32], ptr %215, i64 0, i64 %indvars.iv.next440.1
  %234 = load i32, ptr %233, align 4, !tbaa !9
  %235 = getelementptr inbounds [15 x i32], ptr @lf_args, i64 0, i64 %indvars.iv.next440.1
  store i32 %234, ptr %235, align 4, !tbaa !9
  %indvars.iv.next440.2 = add nuw nsw i64 %indvars.iv439, 3
  %236 = getelementptr inbounds [5 x i32], ptr %215, i64 0, i64 %indvars.iv.next440.2
  %237 = load i32, ptr %236, align 4, !tbaa !9
  %238 = getelementptr inbounds [15 x i32], ptr @lf_args, i64 0, i64 %indvars.iv.next440.2
  store i32 %237, ptr %238, align 4, !tbaa !9
  %indvars.iv.next440.3 = add nuw nsw i64 %indvars.iv439, 4
  %exitcond443.not.3 = icmp eq i64 %indvars.iv.next440.3, %wide.trip.count442
  br i1 %exitcond443.not.3, label %._crit_edge325, label %scalar.ph523, !llvm.loop !44

._crit_edge325:                                   ; preds = %scalar.ph523.prol.loopexit, %scalar.ph523, %middle.block522, %.lr.ph334
  %239 = tail call i32 @fluent_adress()
  %240 = load i32, ptr @lf, align 4, !tbaa !9
  %241 = sext i32 %240 to i64
  %242 = getelementptr inbounds [50 x ptr], ptr @lf_def, i64 0, i64 %241
  %243 = load ptr, ptr %242, align 8, !tbaa !5
  %244 = sext i32 %239 to i64
  %245 = getelementptr inbounds i32, ptr %243, i64 %244
  %246 = load i32, ptr %245, align 4, !tbaa !9
  %.not254 = icmp eq i32 %246, 0
  br i1 %.not254, label %247, label %295

247:                                              ; preds = %._crit_edge325
  store i32 1, ptr %245, align 4, !tbaa !9
  %248 = load i32, ptr @gnum_relevant_fluents, align 4, !tbaa !9
  %249 = icmp eq i32 %248, 1000
  br i1 %249, label %250, label %252

250:                                              ; preds = %247
  %251 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.13, i32 noundef 1000)
  tail call void @exit(i32 noundef 1) #9
  unreachable

252:                                              ; preds = %247
  %253 = load i32, ptr @lf, align 4, !tbaa !9
  %254 = sext i32 %248 to i64
  %255 = getelementptr inbounds [1000 x %struct._Fluent], ptr @grelevant_fluents, i64 0, i64 %254
  store i32 %253, ptr %255, align 8, !tbaa !45
  %256 = tail call noalias dereferenceable_or_null(256) ptr @calloc(i64 noundef 256, i64 noundef 1) #10
  %257 = getelementptr inbounds [1000 x ptr], ptr @grelevant_fluents_name, i64 0, i64 %254
  store ptr %256, ptr %257, align 8, !tbaa !5
  %258 = sext i32 %253 to i64
  %259 = getelementptr inbounds [50 x ptr], ptr @gfunctions, i64 0, i64 %258
  %260 = load ptr, ptr %259, align 8, !tbaa !5
  %261 = tail call ptr @strcpy(ptr noundef nonnull dereferenceable(1) %256, ptr noundef nonnull dereferenceable(1) %260) #11
  %262 = getelementptr inbounds [50 x i32], ptr @gf_arity, i64 0, i64 %258
  %263 = load i32, ptr %262, align 4, !tbaa !9
  %264 = icmp sgt i32 %263, 0
  br i1 %264, label %.lr.ph328, label %._crit_edge329

.lr.ph328:                                        ; preds = %252, %.lr.ph328
  %indvars.iv444 = phi i64 [ %indvars.iv.next445, %.lr.ph328 ], [ 0, %252 ]
  %265 = getelementptr inbounds [15 x i32], ptr @lf_args, i64 0, i64 %indvars.iv444
  %266 = load i32, ptr %265, align 4, !tbaa !9
  %267 = load i32, ptr @gnum_relevant_fluents, align 4, !tbaa !9
  %268 = sext i32 %267 to i64
  %269 = getelementptr inbounds [1000 x %struct._Fluent], ptr @grelevant_fluents, i64 0, i64 %268, i32 1, i64 %indvars.iv444
  store i32 %266, ptr %269, align 4, !tbaa !9
  %270 = getelementptr inbounds [1000 x ptr], ptr @grelevant_fluents_name, i64 0, i64 %268
  %271 = load ptr, ptr %270, align 8, !tbaa !5
  %272 = tail call ptr @strcat(ptr noundef nonnull dereferenceable(1) %271, ptr noundef nonnull dereferenceable(1) @.str.14) #11
  %273 = load i32, ptr @gnum_relevant_fluents, align 4, !tbaa !9
  %274 = sext i32 %273 to i64
  %275 = getelementptr inbounds [1000 x ptr], ptr @grelevant_fluents_name, i64 0, i64 %274
  %276 = load ptr, ptr %275, align 8, !tbaa !5
  %277 = load i32, ptr %265, align 4, !tbaa !9
  %278 = sext i32 %277 to i64
  %279 = getelementptr inbounds [2000 x ptr], ptr @gconstants, i64 0, i64 %278
  %280 = load ptr, ptr %279, align 8, !tbaa !5
  %281 = tail call ptr @strcat(ptr noundef nonnull dereferenceable(1) %276, ptr noundef nonnull dereferenceable(1) %280) #11
  %indvars.iv.next445 = add nuw nsw i64 %indvars.iv444, 1
  %282 = load i32, ptr @lf, align 4, !tbaa !9
  %283 = sext i32 %282 to i64
  %284 = getelementptr inbounds [50 x i32], ptr @gf_arity, i64 0, i64 %283
  %285 = load i32, ptr %284, align 4, !tbaa !9
  %286 = sext i32 %285 to i64
  %287 = icmp slt i64 %indvars.iv.next445, %286
  br i1 %287, label %.lr.ph328, label %._crit_edge329.loopexit, !llvm.loop !46

._crit_edge329.loopexit:                          ; preds = %.lr.ph328
  %.pre = load i32, ptr @gnum_relevant_fluents, align 4, !tbaa !9
  br label %._crit_edge329

._crit_edge329:                                   ; preds = %._crit_edge329.loopexit, %252
  %288 = phi i32 [ %248, %252 ], [ %.pre, %._crit_edge329.loopexit ]
  %.lcssa275 = phi i64 [ %258, %252 ], [ %283, %._crit_edge329.loopexit ]
  %289 = getelementptr inbounds [50 x ptr], ptr @lf_index, i64 0, i64 %.lcssa275
  %290 = load ptr, ptr %289, align 8, !tbaa !5
  %291 = getelementptr inbounds i32, ptr %290, i64 %244
  store i32 %288, ptr %291, align 4, !tbaa !9
  %292 = load i32, ptr @gnum_relevant_fluents, align 4, !tbaa !9
  %293 = add nsw i32 %292, 1
  store i32 %293, ptr @gnum_relevant_fluents, align 4, !tbaa !9
  %294 = getelementptr inbounds i8, ptr %.0333, i64 32
  %.0 = load ptr, ptr %294, align 8, !tbaa !5
  %.not231 = icmp eq ptr %.0, null
  br i1 %.not231, label %.preheader265, label %.lr.ph334, !llvm.loop !47

295:                                              ; preds = %._crit_edge325
  %296 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.15)
  tail call void @print_Fluent(ptr noundef nonnull %.0333) #11
  %297 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.16)
  tail call void @exit(i32 noundef 1) #9
  unreachable

.lr.ph369:                                        ; preds = %.preheader265, %.loopexit
  %.1213367 = phi ptr [ %.1213, %.loopexit ], [ %.1213365, %.preheader265 ]
  %298 = load ptr, ptr %.1213367, align 8, !tbaa !11
  %.not247 = icmp eq ptr %298, null
  br i1 %.not247, label %411, label %299

299:                                              ; preds = %.lr.ph369
  %300 = getelementptr inbounds i8, ptr %298, i64 304
  %.1211347 = load ptr, ptr %300, align 8, !tbaa !5
  %.not251348 = icmp eq ptr %.1211347, null
  br i1 %.not251348, label %.loopexit, label %.preheader263.lr.ph

.preheader263.lr.ph:                              ; preds = %299
  %301 = getelementptr inbounds i8, ptr %.1213367, i64 96
  br label %.preheader263

.preheader263:                                    ; preds = %.preheader263.lr.ph, %._crit_edge346
  %.1211349 = phi ptr [ %.1211347, %.preheader263.lr.ph ], [ %.1211, %._crit_edge346 ]
  %302 = getelementptr inbounds i8, ptr %.1211349, i64 232
  %303 = load i32, ptr %302, align 8, !tbaa !48
  %304 = icmp sgt i32 %303, 0
  br i1 %304, label %.lr.ph345, label %._crit_edge346

.lr.ph345:                                        ; preds = %.preheader263
  %305 = getelementptr inbounds i8, ptr %.1211349, i64 208
  %306 = getelementptr inbounds i8, ptr %.1211349, i64 216
  br label %307

307:                                              ; preds = %.lr.ph345, %406
  %indvars.iv455 = phi i64 [ 0, %.lr.ph345 ], [ %indvars.iv.next456, %406 ]
  %308 = load ptr, ptr %305, align 8, !tbaa !49
  %309 = getelementptr inbounds i32, ptr %308, i64 %indvars.iv455
  %310 = load i32, ptr %309, align 4, !tbaa !9
  %.not252 = icmp eq i32 %310, 4000
  br i1 %.not252, label %311, label %406

311:                                              ; preds = %307
  %312 = load ptr, ptr %306, align 8, !tbaa !50
  %313 = getelementptr inbounds %struct._Fluent, ptr %312, i64 %indvars.iv455
  %314 = load i32, ptr %313, align 4, !tbaa !45
  store i32 %314, ptr @lf, align 4, !tbaa !9
  %315 = sext i32 %314 to i64
  %316 = getelementptr inbounds [50 x i32], ptr @gf_arity, i64 0, i64 %315
  %317 = load i32, ptr %316, align 4, !tbaa !9
  %318 = icmp sgt i32 %317, 0
  br i1 %318, label %.lr.ph337.preheader, label %._crit_edge338

.lr.ph337.preheader:                              ; preds = %311
  %wide.trip.count450 = zext nneg i32 %317 to i64
  %xtraiter554 = and i64 %wide.trip.count450, 1
  %319 = icmp eq i32 %317, 1
  br i1 %319, label %._crit_edge338.loopexit.unr-lcssa, label %.lr.ph337.preheader.new

.lr.ph337.preheader.new:                          ; preds = %.lr.ph337.preheader
  %unroll_iter556 = and i64 %wide.trip.count450, 2147483646
  br label %.lr.ph337

.lr.ph337:                                        ; preds = %338, %.lr.ph337.preheader.new
  %indvars.iv447 = phi i64 [ 0, %.lr.ph337.preheader.new ], [ %indvars.iv.next448.1, %338 ]
  %niter557 = phi i64 [ 0, %.lr.ph337.preheader.new ], [ %niter557.next.1, %338 ]
  %320 = getelementptr inbounds %struct._Fluent, ptr %312, i64 %indvars.iv455, i32 1, i64 %indvars.iv447
  %321 = load i32, ptr %320, align 4, !tbaa !9
  %322 = icmp sgt i32 %321, -1
  br i1 %322, label %.lr.ph337.1, label %323

323:                                              ; preds = %.lr.ph337
  %324 = xor i32 %321, -1
  %325 = zext nneg i32 %324 to i64
  %326 = getelementptr inbounds [15 x i32], ptr %301, i64 0, i64 %325
  %327 = load i32, ptr %326, align 4, !tbaa !9
  br label %.lr.ph337.1

.lr.ph337.1:                                      ; preds = %.lr.ph337, %323
  %328 = phi i32 [ %327, %323 ], [ %321, %.lr.ph337 ]
  %329 = getelementptr inbounds [15 x i32], ptr @lf_args, i64 0, i64 %indvars.iv447
  store i32 %328, ptr %329, align 8, !tbaa !9
  %indvars.iv.next448 = or disjoint i64 %indvars.iv447, 1
  %330 = getelementptr inbounds %struct._Fluent, ptr %312, i64 %indvars.iv455, i32 1, i64 %indvars.iv.next448
  %331 = load i32, ptr %330, align 4, !tbaa !9
  %332 = icmp sgt i32 %331, -1
  br i1 %332, label %338, label %333

333:                                              ; preds = %.lr.ph337.1
  %334 = xor i32 %331, -1
  %335 = zext nneg i32 %334 to i64
  %336 = getelementptr inbounds [15 x i32], ptr %301, i64 0, i64 %335
  %337 = load i32, ptr %336, align 4, !tbaa !9
  br label %338

338:                                              ; preds = %333, %.lr.ph337.1
  %339 = phi i32 [ %337, %333 ], [ %331, %.lr.ph337.1 ]
  %340 = getelementptr inbounds [15 x i32], ptr @lf_args, i64 0, i64 %indvars.iv.next448
  store i32 %339, ptr %340, align 4, !tbaa !9
  %indvars.iv.next448.1 = add nuw nsw i64 %indvars.iv447, 2
  %niter557.next.1 = add i64 %niter557, 2
  %niter557.ncmp.1 = icmp eq i64 %niter557.next.1, %unroll_iter556
  br i1 %niter557.ncmp.1, label %._crit_edge338.loopexit.unr-lcssa, label %.lr.ph337, !llvm.loop !51

._crit_edge338.loopexit.unr-lcssa:                ; preds = %338, %.lr.ph337.preheader
  %indvars.iv447.unr = phi i64 [ 0, %.lr.ph337.preheader ], [ %indvars.iv.next448.1, %338 ]
  %lcmp.mod555.not = icmp eq i64 %xtraiter554, 0
  br i1 %lcmp.mod555.not, label %._crit_edge338, label %.lr.ph337.epil

.lr.ph337.epil:                                   ; preds = %._crit_edge338.loopexit.unr-lcssa
  %341 = getelementptr inbounds %struct._Fluent, ptr %312, i64 %indvars.iv455, i32 1, i64 %indvars.iv447.unr
  %342 = load i32, ptr %341, align 4, !tbaa !9
  %343 = icmp sgt i32 %342, -1
  br i1 %343, label %._crit_edge338.loopexit.epilog-lcssa, label %344

344:                                              ; preds = %.lr.ph337.epil
  %345 = xor i32 %342, -1
  %346 = zext nneg i32 %345 to i64
  %347 = getelementptr inbounds [15 x i32], ptr %301, i64 0, i64 %346
  %348 = load i32, ptr %347, align 4, !tbaa !9
  br label %._crit_edge338.loopexit.epilog-lcssa

._crit_edge338.loopexit.epilog-lcssa:             ; preds = %344, %.lr.ph337.epil
  %349 = phi i32 [ %348, %344 ], [ %342, %.lr.ph337.epil ]
  %350 = getelementptr inbounds [15 x i32], ptr @lf_args, i64 0, i64 %indvars.iv447.unr
  store i32 %349, ptr %350, align 4, !tbaa !9
  br label %._crit_edge338

._crit_edge338:                                   ; preds = %._crit_edge338.loopexit.epilog-lcssa, %._crit_edge338.loopexit.unr-lcssa, %311
  %351 = tail call i32 @fluent_adress()
  %352 = load i32, ptr @lf, align 4, !tbaa !9
  %353 = sext i32 %352 to i64
  %354 = getelementptr inbounds [50 x ptr], ptr @lf_def, i64 0, i64 %353
  %355 = load ptr, ptr %354, align 8, !tbaa !5
  %356 = sext i32 %351 to i64
  %357 = getelementptr inbounds i32, ptr %355, i64 %356
  %358 = load i32, ptr %357, align 4, !tbaa !9
  %.not253 = icmp eq i32 %358, 0
  br i1 %.not253, label %359, label %406

359:                                              ; preds = %._crit_edge338
  store i32 1, ptr %357, align 4, !tbaa !9
  %360 = load i32, ptr @gnum_relevant_fluents, align 4, !tbaa !9
  %361 = icmp eq i32 %360, 1000
  br i1 %361, label %362, label %364

362:                                              ; preds = %359
  %363 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.13, i32 noundef 1000)
  tail call void @exit(i32 noundef 1) #9
  unreachable

364:                                              ; preds = %359
  %365 = load i32, ptr @lf, align 4, !tbaa !9
  %366 = sext i32 %360 to i64
  %367 = getelementptr inbounds [1000 x %struct._Fluent], ptr @grelevant_fluents, i64 0, i64 %366
  store i32 %365, ptr %367, align 8, !tbaa !45
  %368 = tail call noalias dereferenceable_or_null(256) ptr @calloc(i64 noundef 256, i64 noundef 1) #10
  %369 = getelementptr inbounds [1000 x ptr], ptr @grelevant_fluents_name, i64 0, i64 %366
  store ptr %368, ptr %369, align 8, !tbaa !5
  %370 = sext i32 %365 to i64
  %371 = getelementptr inbounds [50 x ptr], ptr @gfunctions, i64 0, i64 %370
  %372 = load ptr, ptr %371, align 8, !tbaa !5
  %373 = tail call ptr @strcpy(ptr noundef nonnull dereferenceable(1) %368, ptr noundef nonnull dereferenceable(1) %372) #11
  %374 = getelementptr inbounds [50 x i32], ptr @gf_arity, i64 0, i64 %370
  %375 = load i32, ptr %374, align 4, !tbaa !9
  %376 = icmp sgt i32 %375, 0
  br i1 %376, label %.lr.ph341, label %._crit_edge342

.lr.ph341:                                        ; preds = %364, %.lr.ph341
  %indvars.iv452 = phi i64 [ %indvars.iv.next453, %.lr.ph341 ], [ 0, %364 ]
  %377 = getelementptr inbounds [15 x i32], ptr @lf_args, i64 0, i64 %indvars.iv452
  %378 = load i32, ptr %377, align 4, !tbaa !9
  %379 = load i32, ptr @gnum_relevant_fluents, align 4, !tbaa !9
  %380 = sext i32 %379 to i64
  %381 = getelementptr inbounds [1000 x %struct._Fluent], ptr @grelevant_fluents, i64 0, i64 %380, i32 1, i64 %indvars.iv452
  store i32 %378, ptr %381, align 4, !tbaa !9
  %382 = getelementptr inbounds [1000 x ptr], ptr @grelevant_fluents_name, i64 0, i64 %380
  %383 = load ptr, ptr %382, align 8, !tbaa !5
  %384 = tail call ptr @strcat(ptr noundef nonnull dereferenceable(1) %383, ptr noundef nonnull dereferenceable(1) @.str.14) #11
  %385 = load i32, ptr @gnum_relevant_fluents, align 4, !tbaa !9
  %386 = sext i32 %385 to i64
  %387 = getelementptr inbounds [1000 x ptr], ptr @grelevant_fluents_name, i64 0, i64 %386
  %388 = load ptr, ptr %387, align 8, !tbaa !5
  %389 = load i32, ptr %377, align 4, !tbaa !9
  %390 = sext i32 %389 to i64
  %391 = getelementptr inbounds [2000 x ptr], ptr @gconstants, i64 0, i64 %390
  %392 = load ptr, ptr %391, align 8, !tbaa !5
  %393 = tail call ptr @strcat(ptr noundef nonnull dereferenceable(1) %388, ptr noundef nonnull dereferenceable(1) %392) #11
  %indvars.iv.next453 = add nuw nsw i64 %indvars.iv452, 1
  %394 = load i32, ptr @lf, align 4, !tbaa !9
  %395 = sext i32 %394 to i64
  %396 = getelementptr inbounds [50 x i32], ptr @gf_arity, i64 0, i64 %395
  %397 = load i32, ptr %396, align 4, !tbaa !9
  %398 = sext i32 %397 to i64
  %399 = icmp slt i64 %indvars.iv.next453, %398
  br i1 %399, label %.lr.ph341, label %._crit_edge342.loopexit, !llvm.loop !52

._crit_edge342.loopexit:                          ; preds = %.lr.ph341
  %.pre484 = load i32, ptr @gnum_relevant_fluents, align 4, !tbaa !9
  br label %._crit_edge342

._crit_edge342:                                   ; preds = %._crit_edge342.loopexit, %364
  %400 = phi i32 [ %360, %364 ], [ %.pre484, %._crit_edge342.loopexit ]
  %.lcssa273 = phi i64 [ %370, %364 ], [ %395, %._crit_edge342.loopexit ]
  %401 = getelementptr inbounds [50 x ptr], ptr @lf_index, i64 0, i64 %.lcssa273
  %402 = load ptr, ptr %401, align 8, !tbaa !5
  %403 = getelementptr inbounds i32, ptr %402, i64 %356
  store i32 %400, ptr %403, align 4, !tbaa !9
  %404 = load i32, ptr @gnum_relevant_fluents, align 4, !tbaa !9
  %405 = add nsw i32 %404, 1
  store i32 %405, ptr @gnum_relevant_fluents, align 4, !tbaa !9
  br label %406

406:                                              ; preds = %._crit_edge338, %._crit_edge342, %307
  %indvars.iv.next456 = add nuw nsw i64 %indvars.iv455, 1
  %407 = load i32, ptr %302, align 8, !tbaa !48
  %408 = sext i32 %407 to i64
  %409 = icmp slt i64 %indvars.iv.next456, %408
  br i1 %409, label %307, label %._crit_edge346, !llvm.loop !53

._crit_edge346:                                   ; preds = %406, %.preheader263
  %410 = getelementptr inbounds i8, ptr %.1211349, i64 248
  %.1211 = load ptr, ptr %410, align 8, !tbaa !5
  %.not251 = icmp eq ptr %.1211, null
  br i1 %.not251, label %.loopexit, label %.preheader263, !llvm.loop !54

411:                                              ; preds = %.lr.ph369
  %412 = getelementptr inbounds i8, ptr %.1213367, i64 8
  %413 = load ptr, ptr %412, align 8, !tbaa !22
  %414 = getelementptr inbounds i8, ptr %413, i64 120
  %.1362 = load ptr, ptr %414, align 8, !tbaa !5
  %.not248363 = icmp eq ptr %.1362, null
  br i1 %.not248363, label %.loopexit, label %.preheader262.lr.ph

.preheader262.lr.ph:                              ; preds = %411
  %415 = getelementptr inbounds i8, ptr %.1213367, i64 96
  br label %.preheader262

.preheader262:                                    ; preds = %.preheader262.lr.ph, %._crit_edge361
  %.1364 = phi ptr [ %.1362, %.preheader262.lr.ph ], [ %.1, %._crit_edge361 ]
  %416 = getelementptr inbounds i8, ptr %.1364, i64 104
  %417 = load i32, ptr %416, align 8, !tbaa !55
  %418 = icmp sgt i32 %417, 0
  br i1 %418, label %.lr.ph360, label %._crit_edge361

.lr.ph360:                                        ; preds = %.preheader262
  %419 = getelementptr inbounds i8, ptr %.1364, i64 80
  %420 = getelementptr inbounds i8, ptr %.1364, i64 88
  br label %421

421:                                              ; preds = %.lr.ph360, %520
  %indvars.iv466 = phi i64 [ 0, %.lr.ph360 ], [ %indvars.iv.next467, %520 ]
  %422 = load ptr, ptr %419, align 8, !tbaa !56
  %423 = getelementptr inbounds i32, ptr %422, i64 %indvars.iv466
  %424 = load i32, ptr %423, align 4, !tbaa !9
  %.not249 = icmp eq i32 %424, 4000
  br i1 %.not249, label %425, label %520

425:                                              ; preds = %421
  %426 = load ptr, ptr %420, align 8, !tbaa !57
  %427 = getelementptr inbounds %struct._Fluent, ptr %426, i64 %indvars.iv466
  %428 = load i32, ptr %427, align 4, !tbaa !45
  store i32 %428, ptr @lf, align 4, !tbaa !9
  %429 = sext i32 %428 to i64
  %430 = getelementptr inbounds [50 x i32], ptr @gf_arity, i64 0, i64 %429
  %431 = load i32, ptr %430, align 4, !tbaa !9
  %432 = icmp sgt i32 %431, 0
  br i1 %432, label %.lr.ph352.preheader, label %._crit_edge353

.lr.ph352.preheader:                              ; preds = %425
  %wide.trip.count461 = zext nneg i32 %431 to i64
  %xtraiter558 = and i64 %wide.trip.count461, 1
  %433 = icmp eq i32 %431, 1
  br i1 %433, label %._crit_edge353.loopexit.unr-lcssa, label %.lr.ph352.preheader.new

.lr.ph352.preheader.new:                          ; preds = %.lr.ph352.preheader
  %unroll_iter560 = and i64 %wide.trip.count461, 2147483646
  br label %.lr.ph352

.lr.ph352:                                        ; preds = %452, %.lr.ph352.preheader.new
  %indvars.iv458 = phi i64 [ 0, %.lr.ph352.preheader.new ], [ %indvars.iv.next459.1, %452 ]
  %niter561 = phi i64 [ 0, %.lr.ph352.preheader.new ], [ %niter561.next.1, %452 ]
  %434 = getelementptr inbounds %struct._Fluent, ptr %426, i64 %indvars.iv466, i32 1, i64 %indvars.iv458
  %435 = load i32, ptr %434, align 4, !tbaa !9
  %436 = icmp sgt i32 %435, -1
  br i1 %436, label %.lr.ph352.1, label %437

437:                                              ; preds = %.lr.ph352
  %438 = xor i32 %435, -1
  %439 = zext nneg i32 %438 to i64
  %440 = getelementptr inbounds [15 x i32], ptr %415, i64 0, i64 %439
  %441 = load i32, ptr %440, align 4, !tbaa !9
  br label %.lr.ph352.1

.lr.ph352.1:                                      ; preds = %.lr.ph352, %437
  %442 = phi i32 [ %441, %437 ], [ %435, %.lr.ph352 ]
  %443 = getelementptr inbounds [15 x i32], ptr @lf_args, i64 0, i64 %indvars.iv458
  store i32 %442, ptr %443, align 8, !tbaa !9
  %indvars.iv.next459 = or disjoint i64 %indvars.iv458, 1
  %444 = getelementptr inbounds %struct._Fluent, ptr %426, i64 %indvars.iv466, i32 1, i64 %indvars.iv.next459
  %445 = load i32, ptr %444, align 4, !tbaa !9
  %446 = icmp sgt i32 %445, -1
  br i1 %446, label %452, label %447

447:                                              ; preds = %.lr.ph352.1
  %448 = xor i32 %445, -1
  %449 = zext nneg i32 %448 to i64
  %450 = getelementptr inbounds [15 x i32], ptr %415, i64 0, i64 %449
  %451 = load i32, ptr %450, align 4, !tbaa !9
  br label %452

452:                                              ; preds = %447, %.lr.ph352.1
  %453 = phi i32 [ %451, %447 ], [ %445, %.lr.ph352.1 ]
  %454 = getelementptr inbounds [15 x i32], ptr @lf_args, i64 0, i64 %indvars.iv.next459
  store i32 %453, ptr %454, align 4, !tbaa !9
  %indvars.iv.next459.1 = add nuw nsw i64 %indvars.iv458, 2
  %niter561.next.1 = add i64 %niter561, 2
  %niter561.ncmp.1 = icmp eq i64 %niter561.next.1, %unroll_iter560
  br i1 %niter561.ncmp.1, label %._crit_edge353.loopexit.unr-lcssa, label %.lr.ph352, !llvm.loop !58

._crit_edge353.loopexit.unr-lcssa:                ; preds = %452, %.lr.ph352.preheader
  %indvars.iv458.unr = phi i64 [ 0, %.lr.ph352.preheader ], [ %indvars.iv.next459.1, %452 ]
  %lcmp.mod559.not = icmp eq i64 %xtraiter558, 0
  br i1 %lcmp.mod559.not, label %._crit_edge353, label %.lr.ph352.epil

.lr.ph352.epil:                                   ; preds = %._crit_edge353.loopexit.unr-lcssa
  %455 = getelementptr inbounds %struct._Fluent, ptr %426, i64 %indvars.iv466, i32 1, i64 %indvars.iv458.unr
  %456 = load i32, ptr %455, align 4, !tbaa !9
  %457 = icmp sgt i32 %456, -1
  br i1 %457, label %._crit_edge353.loopexit.epilog-lcssa, label %458

458:                                              ; preds = %.lr.ph352.epil
  %459 = xor i32 %456, -1
  %460 = zext nneg i32 %459 to i64
  %461 = getelementptr inbounds [15 x i32], ptr %415, i64 0, i64 %460
  %462 = load i32, ptr %461, align 4, !tbaa !9
  br label %._crit_edge353.loopexit.epilog-lcssa

._crit_edge353.loopexit.epilog-lcssa:             ; preds = %458, %.lr.ph352.epil
  %463 = phi i32 [ %462, %458 ], [ %456, %.lr.ph352.epil ]
  %464 = getelementptr inbounds [15 x i32], ptr @lf_args, i64 0, i64 %indvars.iv458.unr
  store i32 %463, ptr %464, align 4, !tbaa !9
  br label %._crit_edge353

._crit_edge353:                                   ; preds = %._crit_edge353.loopexit.epilog-lcssa, %._crit_edge353.loopexit.unr-lcssa, %425
  %465 = tail call i32 @fluent_adress()
  %466 = load i32, ptr @lf, align 4, !tbaa !9
  %467 = sext i32 %466 to i64
  %468 = getelementptr inbounds [50 x ptr], ptr @lf_def, i64 0, i64 %467
  %469 = load ptr, ptr %468, align 8, !tbaa !5
  %470 = sext i32 %465 to i64
  %471 = getelementptr inbounds i32, ptr %469, i64 %470
  %472 = load i32, ptr %471, align 4, !tbaa !9
  %.not250 = icmp eq i32 %472, 0
  br i1 %.not250, label %473, label %520

473:                                              ; preds = %._crit_edge353
  store i32 1, ptr %471, align 4, !tbaa !9
  %474 = load i32, ptr @gnum_relevant_fluents, align 4, !tbaa !9
  %475 = icmp eq i32 %474, 1000
  br i1 %475, label %476, label %478

476:                                              ; preds = %473
  %477 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.13, i32 noundef 1000)
  tail call void @exit(i32 noundef 1) #9
  unreachable

478:                                              ; preds = %473
  %479 = load i32, ptr @lf, align 4, !tbaa !9
  %480 = sext i32 %474 to i64
  %481 = getelementptr inbounds [1000 x %struct._Fluent], ptr @grelevant_fluents, i64 0, i64 %480
  store i32 %479, ptr %481, align 8, !tbaa !45
  %482 = tail call noalias dereferenceable_or_null(256) ptr @calloc(i64 noundef 256, i64 noundef 1) #10
  %483 = getelementptr inbounds [1000 x ptr], ptr @grelevant_fluents_name, i64 0, i64 %480
  store ptr %482, ptr %483, align 8, !tbaa !5
  %484 = sext i32 %479 to i64
  %485 = getelementptr inbounds [50 x ptr], ptr @gfunctions, i64 0, i64 %484
  %486 = load ptr, ptr %485, align 8, !tbaa !5
  %487 = tail call ptr @strcpy(ptr noundef nonnull dereferenceable(1) %482, ptr noundef nonnull dereferenceable(1) %486) #11
  %488 = getelementptr inbounds [50 x i32], ptr @gf_arity, i64 0, i64 %484
  %489 = load i32, ptr %488, align 4, !tbaa !9
  %490 = icmp sgt i32 %489, 0
  br i1 %490, label %.lr.ph356, label %._crit_edge357

.lr.ph356:                                        ; preds = %478, %.lr.ph356
  %indvars.iv463 = phi i64 [ %indvars.iv.next464, %.lr.ph356 ], [ 0, %478 ]
  %491 = getelementptr inbounds [15 x i32], ptr @lf_args, i64 0, i64 %indvars.iv463
  %492 = load i32, ptr %491, align 4, !tbaa !9
  %493 = load i32, ptr @gnum_relevant_fluents, align 4, !tbaa !9
  %494 = sext i32 %493 to i64
  %495 = getelementptr inbounds [1000 x %struct._Fluent], ptr @grelevant_fluents, i64 0, i64 %494, i32 1, i64 %indvars.iv463
  store i32 %492, ptr %495, align 4, !tbaa !9
  %496 = getelementptr inbounds [1000 x ptr], ptr @grelevant_fluents_name, i64 0, i64 %494
  %497 = load ptr, ptr %496, align 8, !tbaa !5
  %498 = tail call ptr @strcat(ptr noundef nonnull dereferenceable(1) %497, ptr noundef nonnull dereferenceable(1) @.str.14) #11
  %499 = load i32, ptr @gnum_relevant_fluents, align 4, !tbaa !9
  %500 = sext i32 %499 to i64
  %501 = getelementptr inbounds [1000 x ptr], ptr @grelevant_fluents_name, i64 0, i64 %500
  %502 = load ptr, ptr %501, align 8, !tbaa !5
  %503 = load i32, ptr %491, align 4, !tbaa !9
  %504 = sext i32 %503 to i64
  %505 = getelementptr inbounds [2000 x ptr], ptr @gconstants, i64 0, i64 %504
  %506 = load ptr, ptr %505, align 8, !tbaa !5
  %507 = tail call ptr @strcat(ptr noundef nonnull dereferenceable(1) %502, ptr noundef nonnull dereferenceable(1) %506) #11
  %indvars.iv.next464 = add nuw nsw i64 %indvars.iv463, 1
  %508 = load i32, ptr @lf, align 4, !tbaa !9
  %509 = sext i32 %508 to i64
  %510 = getelementptr inbounds [50 x i32], ptr @gf_arity, i64 0, i64 %509
  %511 = load i32, ptr %510, align 4, !tbaa !9
  %512 = sext i32 %511 to i64
  %513 = icmp slt i64 %indvars.iv.next464, %512
  br i1 %513, label %.lr.ph356, label %._crit_edge357.loopexit, !llvm.loop !59

._crit_edge357.loopexit:                          ; preds = %.lr.ph356
  %.pre485 = load i32, ptr @gnum_relevant_fluents, align 4, !tbaa !9
  br label %._crit_edge357

._crit_edge357:                                   ; preds = %._crit_edge357.loopexit, %478
  %514 = phi i32 [ %474, %478 ], [ %.pre485, %._crit_edge357.loopexit ]
  %.lcssa274 = phi i64 [ %484, %478 ], [ %509, %._crit_edge357.loopexit ]
  %515 = getelementptr inbounds [50 x ptr], ptr @lf_index, i64 0, i64 %.lcssa274
  %516 = load ptr, ptr %515, align 8, !tbaa !5
  %517 = getelementptr inbounds i32, ptr %516, i64 %470
  store i32 %514, ptr %517, align 4, !tbaa !9
  %518 = load i32, ptr @gnum_relevant_fluents, align 4, !tbaa !9
  %519 = add nsw i32 %518, 1
  store i32 %519, ptr @gnum_relevant_fluents, align 4, !tbaa !9
  br label %520

520:                                              ; preds = %._crit_edge353, %._crit_edge357, %421
  %indvars.iv.next467 = add nuw nsw i64 %indvars.iv466, 1
  %521 = load i32, ptr %416, align 8, !tbaa !55
  %522 = sext i32 %521 to i64
  %523 = icmp slt i64 %indvars.iv.next467, %522
  br i1 %523, label %421, label %._crit_edge361, !llvm.loop !60

._crit_edge361:                                   ; preds = %520, %.preheader262
  %524 = getelementptr inbounds i8, ptr %.1364, i64 112
  %.1 = load ptr, ptr %524, align 8, !tbaa !5
  %.not248 = icmp eq ptr %.1, null
  br i1 %.not248, label %.loopexit, label %.preheader262, !llvm.loop !61

.loopexit:                                        ; preds = %._crit_edge346, %._crit_edge361, %299, %411
  %525 = getelementptr inbounds i8, ptr %.1213367, i64 256
  %.1213 = load ptr, ptr %525, align 8, !tbaa !5
  %.not232 = icmp eq ptr %.1213, null
  br i1 %.not232, label %._crit_edge370, label %.lr.ph369, !llvm.loop !62

._crit_edge370:                                   ; preds = %.loopexit, %.preheader265
  %526 = load i32, ptr getelementptr inbounds (i8, ptr @gcmd_line, i64 768), align 4, !tbaa !63
  %527 = icmp eq i32 %526, 119
  br i1 %527, label %528, label %548

528:                                              ; preds = %._crit_edge370
  %529 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.17)
  %530 = load i32, ptr @gnum_relevant_facts, align 4, !tbaa !9
  %531 = icmp sgt i32 %530, 0
  br i1 %531, label %.lr.ph373, label %._crit_edge374

.lr.ph373:                                        ; preds = %528, %.lr.ph373
  %indvars.iv469 = phi i64 [ %indvars.iv.next470, %.lr.ph373 ], [ 0, %528 ]
  %532 = trunc nuw nsw i64 %indvars.iv469 to i32
  %533 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.18, i32 noundef %532)
  %534 = getelementptr inbounds [150000 x %struct._Fact], ptr @grelevant_facts, i64 0, i64 %indvars.iv469
  tail call void @print_Fact(ptr noundef nonnull %534) #11
  %indvars.iv.next470 = add nuw nsw i64 %indvars.iv469, 1
  %535 = load i32, ptr @gnum_relevant_facts, align 4, !tbaa !9
  %536 = sext i32 %535 to i64
  %537 = icmp slt i64 %indvars.iv.next470, %536
  br i1 %537, label %.lr.ph373, label %._crit_edge374, !llvm.loop !65

._crit_edge374:                                   ; preds = %.lr.ph373, %528
  %538 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.19)
  %539 = load i32, ptr @gnum_relevant_fluents, align 4, !tbaa !9
  %540 = icmp sgt i32 %539, 0
  br i1 %540, label %.lr.ph377, label %._crit_edge378

.lr.ph377:                                        ; preds = %._crit_edge374, %.lr.ph377
  %indvars.iv472 = phi i64 [ %indvars.iv.next473, %.lr.ph377 ], [ 0, %._crit_edge374 ]
  %541 = trunc nuw nsw i64 %indvars.iv472 to i32
  %542 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.18, i32 noundef %541)
  %543 = getelementptr inbounds [1000 x %struct._Fluent], ptr @grelevant_fluents, i64 0, i64 %indvars.iv472
  tail call void @print_Fluent(ptr noundef nonnull %543) #11
  %indvars.iv.next473 = add nuw nsw i64 %indvars.iv472, 1
  %544 = load i32, ptr @gnum_relevant_fluents, align 4, !tbaa !9
  %545 = sext i32 %544 to i64
  %546 = icmp slt i64 %indvars.iv.next473, %545
  br i1 %546, label %.lr.ph377, label %._crit_edge378, !llvm.loop !66

._crit_edge378:                                   ; preds = %.lr.ph377, %._crit_edge374
  %547 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.10)
  br label %548

548:                                              ; preds = %._crit_edge378, %._crit_edge370
  store i32 0, ptr @lnum_effects, align 4, !tbaa !9
  tail call void @create_final_goal_state()
  tail call void @create_final_initial_state()
  tail call void @create_final_actions()
  %549 = load ptr, ptr @gmetric, align 8, !tbaa !5
  %.not233 = icmp eq ptr %549, null
  br i1 %.not233, label %558, label %550

550:                                              ; preds = %548
  %551 = tail call zeroext i8 @set_relevants_in_exp(ptr noundef nonnull @gmetric)
  %.not234 = icmp eq i8 %551, 0
  br i1 %.not234, label %552, label %558

552:                                              ; preds = %550
  %553 = load i32, ptr getelementptr inbounds (i8, ptr @gcmd_line, i64 768), align 4, !tbaa !63
  %.not235 = icmp eq i32 %553, 0
  br i1 %.not235, label %556, label %554

554:                                              ; preds = %552
  %555 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.20)
  br label %556

556:                                              ; preds = %554, %552
  %557 = load ptr, ptr @gmetric, align 8, !tbaa !5
  tail call void @free_ExpNode(ptr noundef %557) #11
  store ptr null, ptr @gmetric, align 8, !tbaa !5
  br label %558

558:                                              ; preds = %550, %556, %548
  %559 = load i32, ptr getelementptr inbounds (i8, ptr @gcmd_line, i64 768), align 4, !tbaa !63
  %560 = icmp eq i32 %559, 120
  br i1 %560, label %561, label %630

561:                                              ; preds = %558
  %562 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.21)
  %563 = load i32, ptr @gnum_operators, align 4, !tbaa !9
  %564 = icmp sgt i32 %563, 0
  br i1 %564, label %.lr.ph387, label %._crit_edge388

.lr.ph387:                                        ; preds = %561, %._crit_edge384
  %indvars.iv475 = phi i64 [ %indvars.iv.next476, %._crit_edge384 ], [ 0, %561 ]
  %565 = getelementptr inbounds [50000 x ptr], ptr @goperators, i64 0, i64 %indvars.iv475
  %566 = load ptr, ptr %565, align 8, !tbaa !5
  %567 = load ptr, ptr %566, align 8, !tbaa !67
  %568 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.22, ptr noundef %567)
  %.2214379 = load ptr, ptr @gactions, align 8, !tbaa !5
  %.not240380 = icmp eq ptr %.2214379, null
  br i1 %.not240380, label %._crit_edge384, label %.lr.ph383

.lr.ph383:                                        ; preds = %.lr.ph387, %580
  %.2214381 = phi ptr [ %.2214, %580 ], [ %.2214379, %.lr.ph387 ]
  %569 = load ptr, ptr %.2214381, align 8, !tbaa !11
  %.not241 = icmp eq ptr %569, null
  br i1 %.not241, label %570, label %573

570:                                              ; preds = %.lr.ph383
  %571 = getelementptr inbounds i8, ptr %.2214381, i64 8
  %572 = load ptr, ptr %571, align 8, !tbaa !22
  %.not242 = icmp eq ptr %572, null
  br i1 %.not242, label %580, label %.thread.thread

573:                                              ; preds = %.lr.ph383
  %574 = load ptr, ptr %569, align 8, !tbaa !69
  %575 = load ptr, ptr %565, align 8, !tbaa !5
  %.not244 = icmp eq ptr %574, %575
  br i1 %.not244, label %.thread, label %580

.thread:                                          ; preds = %573
  %.phi.trans.insert = getelementptr inbounds i8, ptr %.2214381, i64 8
  %.pre486 = load ptr, ptr %.phi.trans.insert, align 8, !tbaa !22
  %.not245 = icmp eq ptr %.pre486, null
  br i1 %.not245, label %579, label %.thread.thread

.thread.thread:                                   ; preds = %570, %.thread
  %576 = phi ptr [ %.pre486, %.thread ], [ %572, %570 ]
  %577 = load ptr, ptr %576, align 8, !tbaa !71
  %578 = load ptr, ptr %565, align 8, !tbaa !5
  %.not246 = icmp eq ptr %577, %578
  br i1 %.not246, label %579, label %580

579:                                              ; preds = %.thread.thread, %.thread
  tail call void @print_Action(ptr noundef nonnull %.2214381) #11
  br label %580

580:                                              ; preds = %570, %573, %.thread.thread, %579
  %581 = getelementptr inbounds i8, ptr %.2214381, i64 256
  %.2214 = load ptr, ptr %581, align 8, !tbaa !5
  %.not240 = icmp eq ptr %.2214, null
  br i1 %.not240, label %._crit_edge384, label %.lr.ph383, !llvm.loop !73

._crit_edge384:                                   ; preds = %580, %.lr.ph387
  %indvars.iv.next476 = add nuw nsw i64 %indvars.iv475, 1
  %582 = load i32, ptr @gnum_operators, align 4, !tbaa !9
  %583 = sext i32 %582 to i64
  %584 = icmp slt i64 %indvars.iv.next476, %583
  br i1 %584, label %.lr.ph387, label %._crit_edge388, !llvm.loop !74

._crit_edge388:                                   ; preds = %._crit_edge384, %561
  %585 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.23)
  %.3215389 = load ptr, ptr @gactions, align 8, !tbaa !5
  %.not236390 = icmp eq ptr %.3215389, null
  br i1 %.not236390, label %._crit_edge394, label %.lr.ph393

.lr.ph393:                                        ; preds = %._crit_edge388, %591
  %.3215391 = phi ptr [ %.3215, %591 ], [ %.3215389, %._crit_edge388 ]
  %586 = load ptr, ptr %.3215391, align 8, !tbaa !11
  %.not238 = icmp eq ptr %586, null
  br i1 %.not238, label %587, label %591

587:                                              ; preds = %.lr.ph393
  %588 = getelementptr inbounds i8, ptr %.3215391, i64 8
  %589 = load ptr, ptr %588, align 8, !tbaa !22
  %.not239 = icmp eq ptr %589, null
  br i1 %.not239, label %590, label %591

590:                                              ; preds = %587
  tail call void @print_Action(ptr noundef nonnull %.3215391) #11
  br label %591

591:                                              ; preds = %.lr.ph393, %587, %590
  %592 = getelementptr inbounds i8, ptr %.3215391, i64 256
  %.3215 = load ptr, ptr %592, align 8, !tbaa !5
  %.not236 = icmp eq ptr %.3215, null
  br i1 %.not236, label %._crit_edge394, label %.lr.ph393, !llvm.loop !75

._crit_edge394:                                   ; preds = %591, %._crit_edge388
  %593 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.24)
  tail call void @print_State(ptr noundef nonnull byval(%struct._State) align 8 @ginitial_state) #11
  %594 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.25)
  %595 = load i32, ptr @gnum_logic_goal, align 4, !tbaa !9
  %596 = icmp sgt i32 %595, 0
  br i1 %596, label %.lr.ph397, label %.preheader

.preheader:                                       ; preds = %.lr.ph397, %._crit_edge394
  %597 = load i32, ptr @gnum_numeric_goal, align 4, !tbaa !9
  %598 = icmp sgt i32 %597, 0
  br i1 %598, label %.lr.ph399, label %._crit_edge400

.lr.ph397:                                        ; preds = %._crit_edge394, %.lr.ph397
  %indvars.iv478 = phi i64 [ %indvars.iv.next479, %.lr.ph397 ], [ 0, %._crit_edge394 ]
  %599 = load ptr, ptr @glogic_goal, align 8, !tbaa !5
  %600 = getelementptr inbounds i32, ptr %599, i64 %indvars.iv478
  %601 = load i32, ptr %600, align 4, !tbaa !9
  tail call void @print_ft_name(i32 noundef %601) #11
  %602 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.3)
  %indvars.iv.next479 = add nuw nsw i64 %indvars.iv478, 1
  %603 = load i32, ptr @gnum_logic_goal, align 4, !tbaa !9
  %604 = sext i32 %603 to i64
  %605 = icmp slt i64 %indvars.iv.next479, %604
  br i1 %605, label %.lr.ph397, label %.preheader, !llvm.loop !76

.lr.ph399:                                        ; preds = %.preheader, %switch.lookup
  %indvars.iv481 = phi i64 [ %indvars.iv.next482, %switch.lookup ], [ 0, %.preheader ]
  %606 = load ptr, ptr @gnumeric_goal_comp, align 8, !tbaa !5
  %607 = getelementptr inbounds i32, ptr %606, i64 %indvars.iv481
  %608 = load i32, ptr %607, align 4, !tbaa !9
  %switch.tableidx = add i32 %608, -3001
  %609 = icmp ult i32 %switch.tableidx, 5
  br i1 %609, label %switch.lookup, label %610

610:                                              ; preds = %.lr.ph399
  %611 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.31, i32 noundef %608)
  tail call void @exit(i32 noundef 1) #9
  unreachable

switch.lookup:                                    ; preds = %.lr.ph399
  %612 = zext nneg i32 %switch.tableidx to i64
  %switch.gep = getelementptr inbounds [5 x ptr], ptr @switch.table.collect_relevant_facts_and_fluents, i64 0, i64 %612
  %switch.load = load ptr, ptr %switch.gep, align 8
  %613 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) %switch.load)
  %614 = load ptr, ptr @gnumeric_goal_lh, align 8, !tbaa !5
  %615 = getelementptr inbounds ptr, ptr %614, i64 %indvars.iv481
  %616 = load ptr, ptr %615, align 8, !tbaa !5
  tail call void @print_ExpNode(ptr noundef %616) #11
  %617 = load ptr, ptr @gnumeric_goal_rh, align 8, !tbaa !5
  %618 = getelementptr inbounds ptr, ptr %617, i64 %indvars.iv481
  %619 = load ptr, ptr %618, align 8, !tbaa !5
  tail call void @print_ExpNode(ptr noundef %619) #11
  %620 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.32)
  %indvars.iv.next482 = add nuw nsw i64 %indvars.iv481, 1
  %621 = load i32, ptr @gnum_numeric_goal, align 4, !tbaa !9
  %622 = sext i32 %621 to i64
  %623 = icmp slt i64 %indvars.iv.next482, %622
  br i1 %623, label %.lr.ph399, label %._crit_edge400, !llvm.loop !77

._crit_edge400:                                   ; preds = %switch.lookup, %.preheader
  %624 = load ptr, ptr @gmetric, align 8, !tbaa !5
  %.not237 = icmp eq ptr %624, null
  br i1 %.not237, label %628, label %625

625:                                              ; preds = %._crit_edge400
  %626 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.33)
  %627 = load ptr, ptr @gmetric, align 8, !tbaa !5
  tail call void @print_ExpNode(ptr noundef %627) #11
  br label %630

628:                                              ; preds = %._crit_edge400
  %629 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.34)
  br label %630

630:                                              ; preds = %625, %628, %558
  ret void
}

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

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

declare void @print_Fluent(ptr noundef) local_unnamed_addr #4

; Function Attrs: nounwind uwtable
declare dso_local void @create_final_goal_state() local_unnamed_addr #1

; Function Attrs: nounwind uwtable
declare dso_local void @create_final_initial_state() local_unnamed_addr #1

; Function Attrs: nounwind uwtable
declare dso_local void @create_final_actions() local_unnamed_addr #1

; Function Attrs: nounwind uwtable
declare dso_local zeroext i8 @set_relevants_in_exp(ptr noundef) local_unnamed_addr #1

declare void @free_ExpNode(ptr noundef) local_unnamed_addr #4

declare void @print_Action(ptr noundef) local_unnamed_addr #4

declare void @print_State(ptr noundef byval(%struct._State) align 8) local_unnamed_addr #4

declare void @print_ft_name(i32 noundef) local_unnamed_addr #4

declare void @print_ExpNode(ptr noundef) local_unnamed_addr #4

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

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.vector.reduce.mul.v4i32(<4 x i32>) #8

attributes #0 = { 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 #1 = { 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 #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 nofree nounwind willreturn memory(argmem: readwrite) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #7 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #8 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #9 = { noreturn nounwind }
attributes #10 = { nounwind allocsize(0,1) }
attributes #11 = { 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 = !{!12, !6, i64 0}
!12 = !{!"_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}
!13 = !{!14, !10, i64 168}
!14 = !{!"_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}
!15 = !{!14, !6, i64 160}
!16 = !{!17, !10, i64 0}
!17 = !{!"_Fact", !10, i64 0, !7, i64 4}
!18 = distinct !{!18, !19}
!19 = !{!"llvm.loop.mustprogress"}
!20 = distinct !{!20, !19}
!21 = distinct !{!21, !19}
!22 = !{!12, !6, i64 8}
!23 = !{!24, !10, i64 40}
!24 = !{!"_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}
!25 = !{!24, !6, i64 32}
!26 = distinct !{!26, !19, !27, !28}
!27 = !{!"llvm.loop.isvectorized", i32 1}
!28 = !{!"llvm.loop.unroll.runtime.disable"}
!29 = distinct !{!29, !30}
!30 = !{!"llvm.loop.unroll.disable"}
!31 = distinct !{!31, !19, !27}
!32 = distinct !{!32, !19}
!33 = distinct !{!33, !19}
!34 = distinct !{!34, !19}
!35 = distinct !{!35, !19, !27, !28}
!36 = distinct !{!36, !19, !28, !27}
!37 = distinct !{!37, !19}
!38 = !{!39, !10, i64 0}
!39 = !{!"_FluentValues", !40, i64 0, !41, i64 24, !6, i64 32}
!40 = !{!"_Fluent", !10, i64 0, !7, i64 4}
!41 = !{!"float", !7, i64 0}
!42 = distinct !{!42, !19, !27, !28}
!43 = distinct !{!43, !30}
!44 = distinct !{!44, !19, !27}
!45 = !{!40, !10, i64 0}
!46 = distinct !{!46, !19}
!47 = distinct !{!47, !19}
!48 = !{!14, !10, i64 232}
!49 = !{!14, !6, i64 208}
!50 = !{!14, !6, i64 216}
!51 = distinct !{!51, !19}
!52 = distinct !{!52, !19}
!53 = distinct !{!53, !19}
!54 = distinct !{!54, !19}
!55 = !{!24, !10, i64 104}
!56 = !{!24, !6, i64 80}
!57 = !{!24, !6, i64 88}
!58 = distinct !{!58, !19}
!59 = distinct !{!59, !19}
!60 = distinct !{!60, !19}
!61 = distinct !{!61, !19}
!62 = distinct !{!62, !19}
!63 = !{!64, !10, i64 768}
!64 = !{!"_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, !41, i64 788}
!65 = distinct !{!65, !19}
!66 = distinct !{!66, !19}
!67 = !{!68, !6, i64 0}
!68 = !{!"_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}
!69 = !{!70, !6, i64 0}
!70 = !{!"_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}
!71 = !{!72, !6, i64 0}
!72 = !{!"_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}
!73 = distinct !{!73, !19}
!74 = distinct !{!74, !19}
!75 = distinct !{!75, !19}
!76 = distinct !{!76, !19}
!77 = distinct !{!77, !19}


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