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

; 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._Facts = type { ptr, ptr }
%struct._FluentValue = type { %struct._Fluent, float }
%struct._Fluent = type { i32, [5 x i32] }
%struct._FluentValues = type { %struct._Fluent, float, ptr }

@gconstants = external global [2000 x ptr], align 16
@gnum_types = external global i32, align 4
@gtype_names = external global [50 x ptr], align 16
@gtype_size = external global [50 x i32], align 16
@gtype_consts = external global [50 x [2000 x i32]], align 16
@gnum_predicates = external global i32, align 4
@gpredicates = external global [50 x ptr], align 16
@garity = external global [50 x i32], align 16
@gpredicates_args_type = external global [50 x [5 x i32]], align 16
@gnum_functions = external global i32, align 4
@gf_arity = external global [50 x i32], align 16
@gnum_full_initial = external global i32, align 4
@gfull_initial = external global ptr, align 8
@gnum_full_fluents_initial = external global i32, align 4
@gfull_fluents_initial = external global ptr, align 8
@gis_member = external global [2000 x [50 x i8]], align 16
@.str.20 = external hidden unnamed_addr constant [64 x i8], align 1
@gis_added = external global [50 x i8], align 16
@gis_deleted = external global [50 x i8], align 16
@gis_changed = external global [50 x i8], align 16
@gnum_initial_predicate = external global ptr, align 8
@ginitial_predicate = external global ptr, align 8
@ginitial = external global ptr, align 8
@gpredicate_to_type = external global [50 x i32], align 16
@gnum_initial_function = external global ptr, align 8
@ginitial_function = external global ptr, align 8
@gf_initial = external global ptr, align 8
@gtype_to_predicate = external global [50 x i32], align 16
@.str.83 = external hidden unnamed_addr constant [64 x i8], align 1
@gnum_initial = external global i32, align 4
@.str.84 = external hidden unnamed_addr constant [53 x i8], align 1
@gnum_f_initial = external global i32, align 4

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

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

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

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

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

; Function Attrs: nounwind uwtable
define dso_local void @split_initial_state() #4 {
  %1 = alloca i32, align 4
  %2 = alloca i32, align 4
  %3 = alloca i32, align 4
  %4 = alloca i32, align 4
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr %1) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %2) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %3) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %4) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %5) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %6) #5
  store i32 0, ptr %1, align 4, !tbaa !5
  br label %7

7:                                                ; preds = %14, %0
  %8 = load i32, ptr %1, align 4, !tbaa !5
  %9 = icmp slt i32 %8, 50
  br i1 %9, label %10, label %17

10:                                               ; preds = %7
  %11 = load i32, ptr %1, align 4, !tbaa !5
  %12 = sext i32 %11 to i64
  %13 = getelementptr inbounds [50 x i32], ptr @gtype_to_predicate, i64 0, i64 %12
  store i32 -1, ptr %13, align 4, !tbaa !5
  br label %14

14:                                               ; preds = %10
  %15 = load i32, ptr %1, align 4, !tbaa !5
  %16 = add nsw i32 %15, 1
  store i32 %16, ptr %1, align 4, !tbaa !5
  br label %7, !llvm.loop !9

17:                                               ; preds = %7
  store i32 0, ptr %1, align 4, !tbaa !5
  br label %18

18:                                               ; preds = %25, %17
  %19 = load i32, ptr %1, align 4, !tbaa !5
  %20 = icmp slt i32 %19, 50
  br i1 %20, label %21, label %28

21:                                               ; preds = %18
  %22 = load i32, ptr %1, align 4, !tbaa !5
  %23 = sext i32 %22 to i64
  %24 = getelementptr inbounds [50 x i32], ptr @gpredicate_to_type, i64 0, i64 %23
  store i32 -1, ptr %24, align 4, !tbaa !5
  br label %25

25:                                               ; preds = %21
  %26 = load i32, ptr %1, align 4, !tbaa !5
  %27 = add nsw i32 %26, 1
  store i32 %27, ptr %1, align 4, !tbaa !5
  br label %18, !llvm.loop !11

28:                                               ; preds = %18
  store i32 0, ptr %1, align 4, !tbaa !5
  br label %29

29:                                               ; preds = %88, %28
  %30 = load i32, ptr %1, align 4, !tbaa !5
  %31 = load i32, ptr @gnum_predicates, align 4, !tbaa !5
  %32 = icmp slt i32 %30, %31
  br i1 %32, label %33, label %91

33:                                               ; preds = %29
  %34 = load i32, ptr %1, align 4, !tbaa !5
  %35 = sext i32 %34 to i64
  %36 = getelementptr inbounds [50 x i8], ptr @gis_added, i64 0, i64 %35
  %37 = load i8, ptr %36, align 1, !tbaa !12
  %38 = icmp ne i8 %37, 0
  br i1 %38, label %87, label %39

39:                                               ; preds = %33
  %40 = load i32, ptr %1, align 4, !tbaa !5
  %41 = sext i32 %40 to i64
  %42 = getelementptr inbounds [50 x i8], ptr @gis_deleted, i64 0, i64 %41
  %43 = load i8, ptr %42, align 1, !tbaa !12
  %44 = icmp ne i8 %43, 0
  br i1 %44, label %87, label %45

45:                                               ; preds = %39
  %46 = load i32, ptr %1, align 4, !tbaa !5
  %47 = sext i32 %46 to i64
  %48 = getelementptr inbounds [50 x i32], ptr @garity, i64 0, i64 %47
  %49 = load i32, ptr %48, align 4, !tbaa !5
  %50 = icmp eq i32 %49, 1
  br i1 %50, label %51, label %87

51:                                               ; preds = %45
  %52 = load i32, ptr @gnum_types, align 4, !tbaa !5
  %53 = icmp eq i32 %52, 50
  br i1 %53, label %54, label %56

54:                                               ; preds = %51
  %55 = call i32 (ptr, ...) @printf(ptr noundef @.str.83, i32 noundef 50)
  call void @exit(i32 noundef 1) #6
  unreachable

56:                                               ; preds = %51
  %57 = load i32, ptr @gnum_types, align 4, !tbaa !5
  %58 = load i32, ptr %1, align 4, !tbaa !5
  %59 = sext i32 %58 to i64
  %60 = getelementptr inbounds [50 x i32], ptr @gtype_to_predicate, i64 0, i64 %59
  store i32 %57, ptr %60, align 4, !tbaa !5
  %61 = load i32, ptr %1, align 4, !tbaa !5
  %62 = load i32, ptr @gnum_types, align 4, !tbaa !5
  %63 = sext i32 %62 to i64
  %64 = getelementptr inbounds [50 x i32], ptr @gpredicate_to_type, i64 0, i64 %63
  store i32 %61, ptr %64, align 4, !tbaa !5
  %65 = load i32, ptr @gnum_types, align 4, !tbaa !5
  %66 = sext i32 %65 to i64
  %67 = getelementptr inbounds [50 x ptr], ptr @gtype_names, i64 0, i64 %66
  store ptr null, ptr %67, align 8, !tbaa !13
  %68 = load i32, ptr @gnum_types, align 4, !tbaa !5
  %69 = sext i32 %68 to i64
  %70 = getelementptr inbounds [50 x i32], ptr @gtype_size, i64 0, i64 %69
  store i32 0, ptr %70, align 4, !tbaa !5
  store i32 0, ptr %2, align 4, !tbaa !5
  br label %71

71:                                               ; preds = %81, %56
  %72 = load i32, ptr %2, align 4, !tbaa !5
  %73 = icmp slt i32 %72, 2000
  br i1 %73, label %74, label %84

74:                                               ; preds = %71
  %75 = load i32, ptr %2, align 4, !tbaa !5
  %76 = sext i32 %75 to i64
  %77 = getelementptr inbounds [2000 x [50 x i8]], ptr @gis_member, i64 0, i64 %76
  %78 = load i32, ptr @gnum_types, align 4, !tbaa !5
  %79 = sext i32 %78 to i64
  %80 = getelementptr inbounds [50 x i8], ptr %77, i64 0, i64 %79
  store i8 0, ptr %80, align 1, !tbaa !12
  br label %81

81:                                               ; preds = %74
  %82 = load i32, ptr %2, align 4, !tbaa !5
  %83 = add nsw i32 %82, 1
  store i32 %83, ptr %2, align 4, !tbaa !5
  br label %71, !llvm.loop !15

84:                                               ; preds = %71
  %85 = load i32, ptr @gnum_types, align 4, !tbaa !5
  %86 = add nsw i32 %85, 1
  store i32 %86, ptr @gnum_types, align 4, !tbaa !5
  br label %87

87:                                               ; preds = %84, %45, %39, %33
  br label %88

88:                                               ; preds = %87
  %89 = load i32, ptr %1, align 4, !tbaa !5
  %90 = add nsw i32 %89, 1
  store i32 %90, ptr %1, align 4, !tbaa !5
  br label %29, !llvm.loop !16

91:                                               ; preds = %29
  %92 = load i32, ptr @gnum_predicates, align 4, !tbaa !5
  %93 = mul nsw i32 %92, 2
  %94 = sext i32 %93 to i64
  %95 = call noalias ptr @calloc(i64 noundef %94, i64 noundef 8) #7
  store ptr %95, ptr @ginitial_predicate, align 8, !tbaa !13
  %96 = load i32, ptr @gnum_predicates, align 4, !tbaa !5
  %97 = mul nsw i32 %96, 2
  %98 = sext i32 %97 to i64
  %99 = call noalias ptr @calloc(i64 noundef %98, i64 noundef 4) #7
  store ptr %99, ptr @gnum_initial_predicate, align 8, !tbaa !13
  store i32 0, ptr %1, align 4, !tbaa !5
  br label %100

100:                                              ; preds = %110, %91
  %101 = load i32, ptr %1, align 4, !tbaa !5
  %102 = load i32, ptr @gnum_predicates, align 4, !tbaa !5
  %103 = mul nsw i32 %102, 2
  %104 = icmp slt i32 %101, %103
  br i1 %104, label %105, label %113

105:                                              ; preds = %100
  %106 = load ptr, ptr @gnum_initial_predicate, align 8, !tbaa !13
  %107 = load i32, ptr %1, align 4, !tbaa !5
  %108 = sext i32 %107 to i64
  %109 = getelementptr inbounds i32, ptr %106, i64 %108
  store i32 0, ptr %109, align 4, !tbaa !5
  br label %110

110:                                              ; preds = %105
  %111 = load i32, ptr %1, align 4, !tbaa !5
  %112 = add nsw i32 %111, 1
  store i32 %112, ptr %1, align 4, !tbaa !5
  br label %100, !llvm.loop !17

113:                                              ; preds = %100
  store i32 0, ptr %1, align 4, !tbaa !5
  br label %114

114:                                              ; preds = %131, %113
  %115 = load i32, ptr %1, align 4, !tbaa !5
  %116 = load i32, ptr @gnum_full_initial, align 4, !tbaa !5
  %117 = icmp slt i32 %115, %116
  br i1 %117, label %118, label %134

118:                                              ; preds = %114
  %119 = load ptr, ptr @gfull_initial, align 8, !tbaa !13
  %120 = load i32, ptr %1, align 4, !tbaa !5
  %121 = sext i32 %120 to i64
  %122 = getelementptr inbounds %struct._Fact, ptr %119, i64 %121
  %123 = getelementptr inbounds %struct._Fact, ptr %122, i32 0, i32 0
  %124 = load i32, ptr %123, align 4, !tbaa !18
  store i32 %124, ptr %3, align 4, !tbaa !5
  %125 = load ptr, ptr @gnum_initial_predicate, align 8, !tbaa !13
  %126 = load i32, ptr %3, align 4, !tbaa !5
  %127 = sext i32 %126 to i64
  %128 = getelementptr inbounds i32, ptr %125, i64 %127
  %129 = load i32, ptr %128, align 4, !tbaa !5
  %130 = add nsw i32 %129, 1
  store i32 %130, ptr %128, align 4, !tbaa !5
  br label %131

131:                                              ; preds = %118
  %132 = load i32, ptr %1, align 4, !tbaa !5
  %133 = add nsw i32 %132, 1
  store i32 %133, ptr %1, align 4, !tbaa !5
  br label %114, !llvm.loop !20

134:                                              ; preds = %114
  store i32 0, ptr %1, align 4, !tbaa !5
  br label %135

135:                                              ; preds = %155, %134
  %136 = load i32, ptr %1, align 4, !tbaa !5
  %137 = load i32, ptr @gnum_predicates, align 4, !tbaa !5
  %138 = icmp slt i32 %136, %137
  br i1 %138, label %139, label %158

139:                                              ; preds = %135
  %140 = load ptr, ptr @gnum_initial_predicate, align 8, !tbaa !13
  %141 = load i32, ptr %1, align 4, !tbaa !5
  %142 = sext i32 %141 to i64
  %143 = getelementptr inbounds i32, ptr %140, i64 %142
  %144 = load i32, ptr %143, align 4, !tbaa !5
  %145 = sext i32 %144 to i64
  %146 = call noalias ptr @calloc(i64 noundef %145, i64 noundef 24) #7
  %147 = load ptr, ptr @ginitial_predicate, align 8, !tbaa !13
  %148 = load i32, ptr %1, align 4, !tbaa !5
  %149 = sext i32 %148 to i64
  %150 = getelementptr inbounds ptr, ptr %147, i64 %149
  store ptr %146, ptr %150, align 8, !tbaa !13
  %151 = load ptr, ptr @gnum_initial_predicate, align 8, !tbaa !13
  %152 = load i32, ptr %1, align 4, !tbaa !5
  %153 = sext i32 %152 to i64
  %154 = getelementptr inbounds i32, ptr %151, i64 %153
  store i32 0, ptr %154, align 4, !tbaa !5
  br label %155

155:                                              ; preds = %139
  %156 = load i32, ptr %1, align 4, !tbaa !5
  %157 = add nsw i32 %156, 1
  store i32 %157, ptr %1, align 4, !tbaa !5
  br label %135, !llvm.loop !21

158:                                              ; preds = %135
  store ptr null, ptr @ginitial, align 8, !tbaa !13
  store i32 0, ptr @gnum_initial, align 4, !tbaa !5
  store i32 0, ptr %1, align 4, !tbaa !5
  br label %159

159:                                              ; preds = %370, %158
  %160 = load i32, ptr %1, align 4, !tbaa !5
  %161 = load i32, ptr @gnum_full_initial, align 4, !tbaa !5
  %162 = icmp slt i32 %160, %161
  br i1 %162, label %163, label %373

163:                                              ; preds = %159
  %164 = load ptr, ptr @gfull_initial, align 8, !tbaa !13
  %165 = load i32, ptr %1, align 4, !tbaa !5
  %166 = sext i32 %165 to i64
  %167 = getelementptr inbounds %struct._Fact, ptr %164, i64 %166
  %168 = getelementptr inbounds %struct._Fact, ptr %167, i32 0, i32 0
  %169 = load i32, ptr %168, align 4, !tbaa !18
  store i32 %169, ptr %3, align 4, !tbaa !5
  %170 = load i32, ptr %3, align 4, !tbaa !5
  %171 = load ptr, ptr @ginitial_predicate, align 8, !tbaa !13
  %172 = load i32, ptr %3, align 4, !tbaa !5
  %173 = sext i32 %172 to i64
  %174 = getelementptr inbounds ptr, ptr %171, i64 %173
  %175 = load ptr, ptr %174, align 8, !tbaa !13
  %176 = load ptr, ptr @gnum_initial_predicate, align 8, !tbaa !13
  %177 = load i32, ptr %3, align 4, !tbaa !5
  %178 = sext i32 %177 to i64
  %179 = getelementptr inbounds i32, ptr %176, i64 %178
  %180 = load i32, ptr %179, align 4, !tbaa !5
  %181 = sext i32 %180 to i64
  %182 = getelementptr inbounds %struct._Fact, ptr %175, i64 %181
  %183 = getelementptr inbounds %struct._Fact, ptr %182, i32 0, i32 0
  store i32 %170, ptr %183, align 4, !tbaa !18
  store i32 0, ptr %2, align 4, !tbaa !5
  br label %184

184:                                              ; preds = %217, %163
  %185 = load i32, ptr %2, align 4, !tbaa !5
  %186 = load i32, ptr %3, align 4, !tbaa !5
  %187 = sext i32 %186 to i64
  %188 = getelementptr inbounds [50 x i32], ptr @garity, i64 0, i64 %187
  %189 = load i32, ptr %188, align 4, !tbaa !5
  %190 = icmp slt i32 %185, %189
  br i1 %190, label %191, label %220

191:                                              ; preds = %184
  %192 = load ptr, ptr @gfull_initial, align 8, !tbaa !13
  %193 = load i32, ptr %1, align 4, !tbaa !5
  %194 = sext i32 %193 to i64
  %195 = getelementptr inbounds %struct._Fact, ptr %192, i64 %194
  %196 = getelementptr inbounds %struct._Fact, ptr %195, i32 0, i32 1
  %197 = load i32, ptr %2, align 4, !tbaa !5
  %198 = sext i32 %197 to i64
  %199 = getelementptr inbounds [5 x i32], ptr %196, i64 0, i64 %198
  %200 = load i32, ptr %199, align 4, !tbaa !5
  %201 = load ptr, ptr @ginitial_predicate, align 8, !tbaa !13
  %202 = load i32, ptr %3, align 4, !tbaa !5
  %203 = sext i32 %202 to i64
  %204 = getelementptr inbounds ptr, ptr %201, i64 %203
  %205 = load ptr, ptr %204, align 8, !tbaa !13
  %206 = load ptr, ptr @gnum_initial_predicate, align 8, !tbaa !13
  %207 = load i32, ptr %3, align 4, !tbaa !5
  %208 = sext i32 %207 to i64
  %209 = getelementptr inbounds i32, ptr %206, i64 %208
  %210 = load i32, ptr %209, align 4, !tbaa !5
  %211 = sext i32 %210 to i64
  %212 = getelementptr inbounds %struct._Fact, ptr %205, i64 %211
  %213 = getelementptr inbounds %struct._Fact, ptr %212, i32 0, i32 1
  %214 = load i32, ptr %2, align 4, !tbaa !5
  %215 = sext i32 %214 to i64
  %216 = getelementptr inbounds [5 x i32], ptr %213, i64 0, i64 %215
  store i32 %200, ptr %216, align 4, !tbaa !5
  br label %217

217:                                              ; preds = %191
  %218 = load i32, ptr %2, align 4, !tbaa !5
  %219 = add nsw i32 %218, 1
  store i32 %219, ptr %2, align 4, !tbaa !5
  br label %184, !llvm.loop !22

220:                                              ; preds = %184
  %221 = load ptr, ptr @gnum_initial_predicate, align 8, !tbaa !13
  %222 = load i32, ptr %3, align 4, !tbaa !5
  %223 = sext i32 %222 to i64
  %224 = getelementptr inbounds i32, ptr %221, i64 %223
  %225 = load i32, ptr %224, align 4, !tbaa !5
  %226 = add nsw i32 %225, 1
  store i32 %226, ptr %224, align 4, !tbaa !5
  %227 = load i32, ptr %3, align 4, !tbaa !5
  %228 = sext i32 %227 to i64
  %229 = getelementptr inbounds [50 x i8], ptr @gis_added, i64 0, i64 %228
  %230 = load i8, ptr %229, align 1, !tbaa !12
  %231 = zext i8 %230 to i32
  %232 = icmp ne i32 %231, 0
  br i1 %232, label %240, label %233

233:                                              ; preds = %220
  %234 = load i32, ptr %3, align 4, !tbaa !5
  %235 = sext i32 %234 to i64
  %236 = getelementptr inbounds [50 x i8], ptr @gis_deleted, i64 0, i64 %235
  %237 = load i8, ptr %236, align 1, !tbaa !12
  %238 = zext i8 %237 to i32
  %239 = icmp ne i32 %238, 0
  br i1 %239, label %240, label %281

240:                                              ; preds = %233, %220
  %241 = call ptr @new_Facts()
  store ptr %241, ptr %5, align 8, !tbaa !13
  %242 = load i32, ptr %3, align 4, !tbaa !5
  %243 = load ptr, ptr %5, align 8, !tbaa !13
  %244 = getelementptr inbounds %struct._Facts, ptr %243, i32 0, i32 0
  %245 = load ptr, ptr %244, align 8, !tbaa !23
  %246 = getelementptr inbounds %struct._Fact, ptr %245, i32 0, i32 0
  store i32 %242, ptr %246, align 4, !tbaa !18
  store i32 0, ptr %2, align 4, !tbaa !5
  br label %247

247:                                              ; preds = %271, %240
  %248 = load i32, ptr %2, align 4, !tbaa !5
  %249 = load i32, ptr %3, align 4, !tbaa !5
  %250 = sext i32 %249 to i64
  %251 = getelementptr inbounds [50 x i32], ptr @garity, i64 0, i64 %250
  %252 = load i32, ptr %251, align 4, !tbaa !5
  %253 = icmp slt i32 %248, %252
  br i1 %253, label %254, label %274

254:                                              ; preds = %247
  %255 = load ptr, ptr @gfull_initial, align 8, !tbaa !13
  %256 = load i32, ptr %1, align 4, !tbaa !5
  %257 = sext i32 %256 to i64
  %258 = getelementptr inbounds %struct._Fact, ptr %255, i64 %257
  %259 = getelementptr inbounds %struct._Fact, ptr %258, i32 0, i32 1
  %260 = load i32, ptr %2, align 4, !tbaa !5
  %261 = sext i32 %260 to i64
  %262 = getelementptr inbounds [5 x i32], ptr %259, i64 0, i64 %261
  %263 = load i32, ptr %262, align 4, !tbaa !5
  %264 = load ptr, ptr %5, align 8, !tbaa !13
  %265 = getelementptr inbounds %struct._Facts, ptr %264, i32 0, i32 0
  %266 = load ptr, ptr %265, align 8, !tbaa !23
  %267 = getelementptr inbounds %struct._Fact, ptr %266, i32 0, i32 1
  %268 = load i32, ptr %2, align 4, !tbaa !5
  %269 = sext i32 %268 to i64
  %270 = getelementptr inbounds [5 x i32], ptr %267, i64 0, i64 %269
  store i32 %263, ptr %270, align 4, !tbaa !5
  br label %271

271:                                              ; preds = %254
  %272 = load i32, ptr %2, align 4, !tbaa !5
  %273 = add nsw i32 %272, 1
  store i32 %273, ptr %2, align 4, !tbaa !5
  br label %247, !llvm.loop !25

274:                                              ; preds = %247
  %275 = load ptr, ptr @ginitial, align 8, !tbaa !13
  %276 = load ptr, ptr %5, align 8, !tbaa !13
  %277 = getelementptr inbounds %struct._Facts, ptr %276, i32 0, i32 1
  store ptr %275, ptr %277, align 8, !tbaa !26
  %278 = load ptr, ptr %5, align 8, !tbaa !13
  store ptr %278, ptr @ginitial, align 8, !tbaa !13
  %279 = load i32, ptr @gnum_initial, align 4, !tbaa !5
  %280 = add nsw i32 %279, 1
  store i32 %280, ptr @gnum_initial, align 4, !tbaa !5
  br label %369

281:                                              ; preds = %233
  %282 = load i32, ptr %3, align 4, !tbaa !5
  %283 = sext i32 %282 to i64
  %284 = getelementptr inbounds [50 x i32], ptr @garity, i64 0, i64 %283
  %285 = load i32, ptr %284, align 4, !tbaa !5
  %286 = icmp eq i32 %285, 1
  br i1 %286, label %287, label %368

287:                                              ; preds = %281
  %288 = load i32, ptr %3, align 4, !tbaa !5
  %289 = sext i32 %288 to i64
  %290 = getelementptr inbounds [50 x i32], ptr @gtype_to_predicate, i64 0, i64 %289
  %291 = load i32, ptr %290, align 4, !tbaa !5
  store i32 %291, ptr %4, align 4, !tbaa !5
  %292 = load i32, ptr %4, align 4, !tbaa !5
  %293 = sext i32 %292 to i64
  %294 = getelementptr inbounds [50 x i32], ptr @gtype_size, i64 0, i64 %293
  %295 = load i32, ptr %294, align 4, !tbaa !5
  %296 = icmp eq i32 %295, 2000
  br i1 %296, label %297, label %303

297:                                              ; preds = %287
  %298 = load i32, ptr %4, align 4, !tbaa !5
  %299 = sext i32 %298 to i64
  %300 = getelementptr inbounds [50 x ptr], ptr @gtype_names, i64 0, i64 %299
  %301 = load ptr, ptr %300, align 8, !tbaa !13
  %302 = call i32 (ptr, ...) @printf(ptr noundef @.str.20, ptr noundef %301, i32 noundef 2000)
  call void @exit(i32 noundef 1) #6
  unreachable

303:                                              ; preds = %287
  %304 = load ptr, ptr @gfull_initial, align 8, !tbaa !13
  %305 = load i32, ptr %1, align 4, !tbaa !5
  %306 = sext i32 %305 to i64
  %307 = getelementptr inbounds %struct._Fact, ptr %304, i64 %306
  %308 = getelementptr inbounds %struct._Fact, ptr %307, i32 0, i32 1
  %309 = getelementptr inbounds [5 x i32], ptr %308, i64 0, i64 0
  %310 = load i32, ptr %309, align 4, !tbaa !5
  %311 = sext i32 %310 to i64
  %312 = getelementptr inbounds [2000 x [50 x i8]], ptr @gis_member, i64 0, i64 %311
  %313 = load i32, ptr %3, align 4, !tbaa !5
  %314 = sext i32 %313 to i64
  %315 = getelementptr inbounds [50 x [5 x i32]], ptr @gpredicates_args_type, i64 0, i64 %314
  %316 = getelementptr inbounds [5 x i32], ptr %315, i64 0, i64 0
  %317 = load i32, ptr %316, align 4, !tbaa !5
  %318 = sext i32 %317 to i64
  %319 = getelementptr inbounds [50 x i8], ptr %312, i64 0, i64 %318
  %320 = load i8, ptr %319, align 1, !tbaa !12
  %321 = icmp ne i8 %320, 0
  br i1 %321, label %338, label %322

322:                                              ; preds = %303
  %323 = load ptr, ptr @gfull_initial, align 8, !tbaa !13
  %324 = load i32, ptr %1, align 4, !tbaa !5
  %325 = sext i32 %324 to i64
  %326 = getelementptr inbounds %struct._Fact, ptr %323, i64 %325
  %327 = getelementptr inbounds %struct._Fact, ptr %326, i32 0, i32 1
  %328 = getelementptr inbounds [5 x i32], ptr %327, i64 0, i64 0
  %329 = load i32, ptr %328, align 4, !tbaa !5
  %330 = sext i32 %329 to i64
  %331 = getelementptr inbounds [2000 x ptr], ptr @gconstants, i64 0, i64 %330
  %332 = load ptr, ptr %331, align 8, !tbaa !13
  %333 = load i32, ptr %3, align 4, !tbaa !5
  %334 = sext i32 %333 to i64
  %335 = getelementptr inbounds [50 x ptr], ptr @gpredicates, i64 0, i64 %334
  %336 = load ptr, ptr %335, align 8, !tbaa !13
  %337 = call i32 (ptr, ...) @printf(ptr noundef @.str.84, ptr noundef %332, ptr noundef %336)
  call void @exit(i32 noundef 1) #6
  unreachable

338:                                              ; preds = %303
  %339 = load ptr, ptr @gfull_initial, align 8, !tbaa !13
  %340 = load i32, ptr %1, align 4, !tbaa !5
  %341 = sext i32 %340 to i64
  %342 = getelementptr inbounds %struct._Fact, ptr %339, i64 %341
  %343 = getelementptr inbounds %struct._Fact, ptr %342, i32 0, i32 1
  %344 = getelementptr inbounds [5 x i32], ptr %343, i64 0, i64 0
  %345 = load i32, ptr %344, align 4, !tbaa !5
  %346 = load i32, ptr %4, align 4, !tbaa !5
  %347 = sext i32 %346 to i64
  %348 = getelementptr inbounds [50 x [2000 x i32]], ptr @gtype_consts, i64 0, i64 %347
  %349 = load i32, ptr %4, align 4, !tbaa !5
  %350 = sext i32 %349 to i64
  %351 = getelementptr inbounds [50 x i32], ptr @gtype_size, i64 0, i64 %350
  %352 = load i32, ptr %351, align 4, !tbaa !5
  %353 = add nsw i32 %352, 1
  store i32 %353, ptr %351, align 4, !tbaa !5
  %354 = sext i32 %352 to i64
  %355 = getelementptr inbounds [2000 x i32], ptr %348, i64 0, i64 %354
  store i32 %345, ptr %355, align 4, !tbaa !5
  %356 = load ptr, ptr @gfull_initial, align 8, !tbaa !13
  %357 = load i32, ptr %1, align 4, !tbaa !5
  %358 = sext i32 %357 to i64
  %359 = getelementptr inbounds %struct._Fact, ptr %356, i64 %358
  %360 = getelementptr inbounds %struct._Fact, ptr %359, i32 0, i32 1
  %361 = getelementptr inbounds [5 x i32], ptr %360, i64 0, i64 0
  %362 = load i32, ptr %361, align 4, !tbaa !5
  %363 = sext i32 %362 to i64
  %364 = getelementptr inbounds [2000 x [50 x i8]], ptr @gis_member, i64 0, i64 %363
  %365 = load i32, ptr %4, align 4, !tbaa !5
  %366 = sext i32 %365 to i64
  %367 = getelementptr inbounds [50 x i8], ptr %364, i64 0, i64 %366
  store i8 1, ptr %367, align 1, !tbaa !12
  br label %368

368:                                              ; preds = %338, %281
  br label %369

369:                                              ; preds = %368, %274
  br label %370

370:                                              ; preds = %369
  %371 = load i32, ptr %1, align 4, !tbaa !5
  %372 = add nsw i32 %371, 1
  store i32 %372, ptr %1, align 4, !tbaa !5
  br label %159, !llvm.loop !27

373:                                              ; preds = %159
  %374 = load i32, ptr @gnum_functions, align 4, !tbaa !5
  %375 = sext i32 %374 to i64
  %376 = call noalias ptr @calloc(i64 noundef %375, i64 noundef 8) #7
  store ptr %376, ptr @ginitial_function, align 8, !tbaa !13
  %377 = load i32, ptr @gnum_functions, align 4, !tbaa !5
  %378 = sext i32 %377 to i64
  %379 = call noalias ptr @calloc(i64 noundef %378, i64 noundef 4) #7
  store ptr %379, ptr @gnum_initial_function, align 8, !tbaa !13
  store i32 0, ptr %1, align 4, !tbaa !5
  br label %380

380:                                              ; preds = %389, %373
  %381 = load i32, ptr %1, align 4, !tbaa !5
  %382 = load i32, ptr @gnum_functions, align 4, !tbaa !5
  %383 = icmp slt i32 %381, %382
  br i1 %383, label %384, label %392

384:                                              ; preds = %380
  %385 = load ptr, ptr @gnum_initial_function, align 8, !tbaa !13
  %386 = load i32, ptr %1, align 4, !tbaa !5
  %387 = sext i32 %386 to i64
  %388 = getelementptr inbounds i32, ptr %385, i64 %387
  store i32 0, ptr %388, align 4, !tbaa !5
  br label %389

389:                                              ; preds = %384
  %390 = load i32, ptr %1, align 4, !tbaa !5
  %391 = add nsw i32 %390, 1
  store i32 %391, ptr %1, align 4, !tbaa !5
  br label %380, !llvm.loop !28

392:                                              ; preds = %380
  store i32 0, ptr %1, align 4, !tbaa !5
  br label %393

393:                                              ; preds = %411, %392
  %394 = load i32, ptr %1, align 4, !tbaa !5
  %395 = load i32, ptr @gnum_full_fluents_initial, align 4, !tbaa !5
  %396 = icmp slt i32 %394, %395
  br i1 %396, label %397, label %414

397:                                              ; preds = %393
  %398 = load ptr, ptr @gfull_fluents_initial, align 8, !tbaa !13
  %399 = load i32, ptr %1, align 4, !tbaa !5
  %400 = sext i32 %399 to i64
  %401 = getelementptr inbounds %struct._FluentValue, ptr %398, i64 %400
  %402 = getelementptr inbounds %struct._FluentValue, ptr %401, i32 0, i32 0
  %403 = getelementptr inbounds %struct._Fluent, ptr %402, i32 0, i32 0
  %404 = load i32, ptr %403, align 4, !tbaa !29
  store i32 %404, ptr %3, align 4, !tbaa !5
  %405 = load ptr, ptr @gnum_initial_function, align 8, !tbaa !13
  %406 = load i32, ptr %3, align 4, !tbaa !5
  %407 = sext i32 %406 to i64
  %408 = getelementptr inbounds i32, ptr %405, i64 %407
  %409 = load i32, ptr %408, align 4, !tbaa !5
  %410 = add nsw i32 %409, 1
  store i32 %410, ptr %408, align 4, !tbaa !5
  br label %411

411:                                              ; preds = %397
  %412 = load i32, ptr %1, align 4, !tbaa !5
  %413 = add nsw i32 %412, 1
  store i32 %413, ptr %1, align 4, !tbaa !5
  br label %393, !llvm.loop !33

414:                                              ; preds = %393
  store i32 0, ptr %1, align 4, !tbaa !5
  br label %415

415:                                              ; preds = %435, %414
  %416 = load i32, ptr %1, align 4, !tbaa !5
  %417 = load i32, ptr @gnum_functions, align 4, !tbaa !5
  %418 = icmp slt i32 %416, %417
  br i1 %418, label %419, label %438

419:                                              ; preds = %415
  %420 = load ptr, ptr @gnum_initial_function, align 8, !tbaa !13
  %421 = load i32, ptr %1, align 4, !tbaa !5
  %422 = sext i32 %421 to i64
  %423 = getelementptr inbounds i32, ptr %420, i64 %422
  %424 = load i32, ptr %423, align 4, !tbaa !5
  %425 = sext i32 %424 to i64
  %426 = call noalias ptr @calloc(i64 noundef %425, i64 noundef 28) #7
  %427 = load ptr, ptr @ginitial_function, align 8, !tbaa !13
  %428 = load i32, ptr %1, align 4, !tbaa !5
  %429 = sext i32 %428 to i64
  %430 = getelementptr inbounds ptr, ptr %427, i64 %429
  store ptr %426, ptr %430, align 8, !tbaa !13
  %431 = load ptr, ptr @gnum_initial_function, align 8, !tbaa !13
  %432 = load i32, ptr %1, align 4, !tbaa !5
  %433 = sext i32 %432 to i64
  %434 = getelementptr inbounds i32, ptr %431, i64 %433
  store i32 0, ptr %434, align 4, !tbaa !5
  br label %435

435:                                              ; preds = %419
  %436 = load i32, ptr %1, align 4, !tbaa !5
  %437 = add nsw i32 %436, 1
  store i32 %437, ptr %1, align 4, !tbaa !5
  br label %415, !llvm.loop !34

438:                                              ; preds = %415
  store ptr null, ptr @gf_initial, align 8, !tbaa !13
  store i32 0, ptr @gnum_f_initial, align 4, !tbaa !5
  store i32 0, ptr %1, align 4, !tbaa !5
  br label %439

439:                                              ; preds = %584, %438
  %440 = load i32, ptr %1, align 4, !tbaa !5
  %441 = load i32, ptr @gnum_full_fluents_initial, align 4, !tbaa !5
  %442 = icmp slt i32 %440, %441
  br i1 %442, label %443, label %587

443:                                              ; preds = %439
  %444 = load ptr, ptr @gfull_fluents_initial, align 8, !tbaa !13
  %445 = load i32, ptr %1, align 4, !tbaa !5
  %446 = sext i32 %445 to i64
  %447 = getelementptr inbounds %struct._FluentValue, ptr %444, i64 %446
  %448 = getelementptr inbounds %struct._FluentValue, ptr %447, i32 0, i32 0
  %449 = getelementptr inbounds %struct._Fluent, ptr %448, i32 0, i32 0
  %450 = load i32, ptr %449, align 4, !tbaa !29
  store i32 %450, ptr %3, align 4, !tbaa !5
  %451 = load i32, ptr %3, align 4, !tbaa !5
  %452 = load ptr, ptr @ginitial_function, align 8, !tbaa !13
  %453 = load i32, ptr %3, align 4, !tbaa !5
  %454 = sext i32 %453 to i64
  %455 = getelementptr inbounds ptr, ptr %452, i64 %454
  %456 = load ptr, ptr %455, align 8, !tbaa !13
  %457 = load ptr, ptr @gnum_initial_function, align 8, !tbaa !13
  %458 = load i32, ptr %3, align 4, !tbaa !5
  %459 = sext i32 %458 to i64
  %460 = getelementptr inbounds i32, ptr %457, i64 %459
  %461 = load i32, ptr %460, align 4, !tbaa !5
  %462 = sext i32 %461 to i64
  %463 = getelementptr inbounds %struct._FluentValue, ptr %456, i64 %462
  %464 = getelementptr inbounds %struct._FluentValue, ptr %463, i32 0, i32 0
  %465 = getelementptr inbounds %struct._Fluent, ptr %464, i32 0, i32 0
  store i32 %451, ptr %465, align 4, !tbaa !29
  store i32 0, ptr %2, align 4, !tbaa !5
  br label %466

466:                                              ; preds = %501, %443
  %467 = load i32, ptr %2, align 4, !tbaa !5
  %468 = load i32, ptr %3, align 4, !tbaa !5
  %469 = sext i32 %468 to i64
  %470 = getelementptr inbounds [50 x i32], ptr @gf_arity, i64 0, i64 %469
  %471 = load i32, ptr %470, align 4, !tbaa !5
  %472 = icmp slt i32 %467, %471
  br i1 %472, label %473, label %504

473:                                              ; preds = %466
  %474 = load ptr, ptr @gfull_fluents_initial, align 8, !tbaa !13
  %475 = load i32, ptr %1, align 4, !tbaa !5
  %476 = sext i32 %475 to i64
  %477 = getelementptr inbounds %struct._FluentValue, ptr %474, i64 %476
  %478 = getelementptr inbounds %struct._FluentValue, ptr %477, i32 0, i32 0
  %479 = getelementptr inbounds %struct._Fluent, ptr %478, i32 0, i32 1
  %480 = load i32, ptr %2, align 4, !tbaa !5
  %481 = sext i32 %480 to i64
  %482 = getelementptr inbounds [5 x i32], ptr %479, i64 0, i64 %481
  %483 = load i32, ptr %482, align 4, !tbaa !5
  %484 = load ptr, ptr @ginitial_function, align 8, !tbaa !13
  %485 = load i32, ptr %3, align 4, !tbaa !5
  %486 = sext i32 %485 to i64
  %487 = getelementptr inbounds ptr, ptr %484, i64 %486
  %488 = load ptr, ptr %487, align 8, !tbaa !13
  %489 = load ptr, ptr @gnum_initial_function, align 8, !tbaa !13
  %490 = load i32, ptr %3, align 4, !tbaa !5
  %491 = sext i32 %490 to i64
  %492 = getelementptr inbounds i32, ptr %489, i64 %491
  %493 = load i32, ptr %492, align 4, !tbaa !5
  %494 = sext i32 %493 to i64
  %495 = getelementptr inbounds %struct._FluentValue, ptr %488, i64 %494
  %496 = getelementptr inbounds %struct._FluentValue, ptr %495, i32 0, i32 0
  %497 = getelementptr inbounds %struct._Fluent, ptr %496, i32 0, i32 1
  %498 = load i32, ptr %2, align 4, !tbaa !5
  %499 = sext i32 %498 to i64
  %500 = getelementptr inbounds [5 x i32], ptr %497, i64 0, i64 %499
  store i32 %483, ptr %500, align 4, !tbaa !5
  br label %501

501:                                              ; preds = %473
  %502 = load i32, ptr %2, align 4, !tbaa !5
  %503 = add nsw i32 %502, 1
  store i32 %503, ptr %2, align 4, !tbaa !5
  br label %466, !llvm.loop !35

504:                                              ; preds = %466
  %505 = load ptr, ptr @gfull_fluents_initial, align 8, !tbaa !13
  %506 = load i32, ptr %1, align 4, !tbaa !5
  %507 = sext i32 %506 to i64
  %508 = getelementptr inbounds %struct._FluentValue, ptr %505, i64 %507
  %509 = getelementptr inbounds %struct._FluentValue, ptr %508, i32 0, i32 1
  %510 = load float, ptr %509, align 4, !tbaa !36
  %511 = load ptr, ptr @ginitial_function, align 8, !tbaa !13
  %512 = load i32, ptr %3, align 4, !tbaa !5
  %513 = sext i32 %512 to i64
  %514 = getelementptr inbounds ptr, ptr %511, i64 %513
  %515 = load ptr, ptr %514, align 8, !tbaa !13
  %516 = load ptr, ptr @gnum_initial_function, align 8, !tbaa !13
  %517 = load i32, ptr %3, align 4, !tbaa !5
  %518 = sext i32 %517 to i64
  %519 = getelementptr inbounds i32, ptr %516, i64 %518
  %520 = load i32, ptr %519, align 4, !tbaa !5
  %521 = sext i32 %520 to i64
  %522 = getelementptr inbounds %struct._FluentValue, ptr %515, i64 %521
  %523 = getelementptr inbounds %struct._FluentValue, ptr %522, i32 0, i32 1
  store float %510, ptr %523, align 4, !tbaa !36
  %524 = load ptr, ptr @gnum_initial_function, align 8, !tbaa !13
  %525 = load i32, ptr %3, align 4, !tbaa !5
  %526 = sext i32 %525 to i64
  %527 = getelementptr inbounds i32, ptr %524, i64 %526
  %528 = load i32, ptr %527, align 4, !tbaa !5
  %529 = add nsw i32 %528, 1
  store i32 %529, ptr %527, align 4, !tbaa !5
  %530 = load i32, ptr %3, align 4, !tbaa !5
  %531 = sext i32 %530 to i64
  %532 = getelementptr inbounds [50 x i8], ptr @gis_changed, i64 0, i64 %531
  %533 = load i8, ptr %532, align 1, !tbaa !12
  %534 = icmp ne i8 %533, 0
  br i1 %534, label %535, label %583

535:                                              ; preds = %504
  %536 = call ptr @new_FluentValues()
  store ptr %536, ptr %6, align 8, !tbaa !13
  %537 = load i32, ptr %3, align 4, !tbaa !5
  %538 = load ptr, ptr %6, align 8, !tbaa !13
  %539 = getelementptr inbounds %struct._FluentValues, ptr %538, i32 0, i32 0
  %540 = getelementptr inbounds %struct._Fluent, ptr %539, i32 0, i32 0
  store i32 %537, ptr %540, align 8, !tbaa !37
  store i32 0, ptr %2, align 4, !tbaa !5
  br label %541

541:                                              ; preds = %565, %535
  %542 = load i32, ptr %2, align 4, !tbaa !5
  %543 = load i32, ptr %3, align 4, !tbaa !5
  %544 = sext i32 %543 to i64
  %545 = getelementptr inbounds [50 x i32], ptr @gf_arity, i64 0, i64 %544
  %546 = load i32, ptr %545, align 4, !tbaa !5
  %547 = icmp slt i32 %542, %546
  br i1 %547, label %548, label %568

548:                                              ; preds = %541
  %549 = load ptr, ptr @gfull_fluents_initial, align 8, !tbaa !13
  %550 = load i32, ptr %1, align 4, !tbaa !5
  %551 = sext i32 %550 to i64
  %552 = getelementptr inbounds %struct._FluentValue, ptr %549, i64 %551
  %553 = getelementptr inbounds %struct._FluentValue, ptr %552, i32 0, i32 0
  %554 = getelementptr inbounds %struct._Fluent, ptr %553, i32 0, i32 1
  %555 = load i32, ptr %2, align 4, !tbaa !5
  %556 = sext i32 %555 to i64
  %557 = getelementptr inbounds [5 x i32], ptr %554, i64 0, i64 %556
  %558 = load i32, ptr %557, align 4, !tbaa !5
  %559 = load ptr, ptr %6, align 8, !tbaa !13
  %560 = getelementptr inbounds %struct._FluentValues, ptr %559, i32 0, i32 0
  %561 = getelementptr inbounds %struct._Fluent, ptr %560, i32 0, i32 1
  %562 = load i32, ptr %2, align 4, !tbaa !5
  %563 = sext i32 %562 to i64
  %564 = getelementptr inbounds [5 x i32], ptr %561, i64 0, i64 %563
  store i32 %558, ptr %564, align 4, !tbaa !5
  br label %565

565:                                              ; preds = %548
  %566 = load i32, ptr %2, align 4, !tbaa !5
  %567 = add nsw i32 %566, 1
  store i32 %567, ptr %2, align 4, !tbaa !5
  br label %541, !llvm.loop !39

568:                                              ; preds = %541
  %569 = load ptr, ptr @gfull_fluents_initial, align 8, !tbaa !13
  %570 = load i32, ptr %1, align 4, !tbaa !5
  %571 = sext i32 %570 to i64
  %572 = getelementptr inbounds %struct._FluentValue, ptr %569, i64 %571
  %573 = getelementptr inbounds %struct._FluentValue, ptr %572, i32 0, i32 1
  %574 = load float, ptr %573, align 4, !tbaa !36
  %575 = load ptr, ptr %6, align 8, !tbaa !13
  %576 = getelementptr inbounds %struct._FluentValues, ptr %575, i32 0, i32 1
  store float %574, ptr %576, align 8, !tbaa !40
  %577 = load ptr, ptr @gf_initial, align 8, !tbaa !13
  %578 = load ptr, ptr %6, align 8, !tbaa !13
  %579 = getelementptr inbounds %struct._FluentValues, ptr %578, i32 0, i32 2
  store ptr %577, ptr %579, align 8, !tbaa !41
  %580 = load ptr, ptr %6, align 8, !tbaa !13
  store ptr %580, ptr @gf_initial, align 8, !tbaa !13
  %581 = load i32, ptr @gnum_f_initial, align 4, !tbaa !5
  %582 = add nsw i32 %581, 1
  store i32 %582, ptr @gnum_f_initial, align 4, !tbaa !5
  br label %583

583:                                              ; preds = %568, %504
  br label %584

584:                                              ; preds = %583
  %585 = load i32, ptr %1, align 4, !tbaa !5
  %586 = add nsw i32 %585, 1
  store i32 %586, ptr %1, align 4, !tbaa !5
  br label %439, !llvm.loop !42

587:                                              ; preds = %439
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %4) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %3) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %2) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %1) #5
  ret void
}

declare ptr @new_Facts() #1

declare ptr @new_FluentValues() #1

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #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 = { 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 #3 = { 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 #4 = { 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 #5 = { nounwind }
attributes #6 = { noreturn nounwind }
attributes #7 = { 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 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = distinct !{!9, !10}
!10 = !{!"llvm.loop.mustprogress"}
!11 = distinct !{!11, !10}
!12 = !{!7, !7, i64 0}
!13 = !{!14, !14, i64 0}
!14 = !{!"any pointer", !7, i64 0}
!15 = distinct !{!15, !10}
!16 = distinct !{!16, !10}
!17 = distinct !{!17, !10}
!18 = !{!19, !6, i64 0}
!19 = !{!"_Fact", !6, i64 0, !7, i64 4}
!20 = distinct !{!20, !10}
!21 = distinct !{!21, !10}
!22 = distinct !{!22, !10}
!23 = !{!24, !14, i64 0}
!24 = !{!"_Facts", !14, i64 0, !14, i64 8}
!25 = distinct !{!25, !10}
!26 = !{!24, !14, i64 8}
!27 = distinct !{!27, !10}
!28 = distinct !{!28, !10}
!29 = !{!30, !6, i64 0}
!30 = !{!"_FluentValue", !31, i64 0, !32, i64 24}
!31 = !{!"_Fluent", !6, i64 0, !7, i64 4}
!32 = !{!"float", !7, i64 0}
!33 = distinct !{!33, !10}
!34 = distinct !{!34, !10}
!35 = distinct !{!35, !10}
!36 = !{!30, !32, i64 24}
!37 = !{!38, !6, i64 0}
!38 = !{!"_FluentValues", !31, i64 0, !32, i64 24, !14, i64 32}
!39 = distinct !{!39, !10}
!40 = !{!38, !32, i64 24}
!41 = !{!38, !14, i64 32}
!42 = distinct !{!42, !10}


; 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._FluentValue = type { %struct._Fluent, float }
%struct._Fluent = type { i32, [5 x i32] }

@gconstants = external local_unnamed_addr global [2000 x ptr], align 16
@gnum_types = external local_unnamed_addr global i32, align 4
@gtype_names = external local_unnamed_addr global [50 x ptr], align 16
@gtype_size = external local_unnamed_addr global [50 x i32], align 16
@gtype_consts = external local_unnamed_addr global [50 x [2000 x i32]], align 16
@gnum_predicates = external local_unnamed_addr global i32, align 4
@gpredicates = external local_unnamed_addr global [50 x ptr], align 16
@garity = external local_unnamed_addr global [50 x i32], align 16
@gpredicates_args_type = external local_unnamed_addr global [50 x [5 x i32]], align 16
@gnum_functions = external local_unnamed_addr global i32, align 4
@gf_arity = external local_unnamed_addr global [50 x i32], align 16
@gnum_full_initial = external local_unnamed_addr global i32, align 4
@gfull_initial = external local_unnamed_addr global ptr, align 8
@gnum_full_fluents_initial = external local_unnamed_addr global i32, align 4
@gfull_fluents_initial = external local_unnamed_addr global ptr, align 8
@gis_member = external local_unnamed_addr global [2000 x [50 x i8]], align 16
@.str.20 = external hidden unnamed_addr constant [64 x i8], align 1
@gis_added = external local_unnamed_addr global [50 x i8], align 16
@gis_deleted = external local_unnamed_addr global [50 x i8], align 16
@gis_changed = external local_unnamed_addr global [50 x i8], align 16
@gnum_initial_predicate = external local_unnamed_addr global ptr, align 8
@ginitial_predicate = external local_unnamed_addr global ptr, align 8
@ginitial = external local_unnamed_addr global ptr, align 8
@gpredicate_to_type = external local_unnamed_addr global [50 x i32], align 16
@gnum_initial_function = external local_unnamed_addr global ptr, align 8
@ginitial_function = external local_unnamed_addr global ptr, align 8
@gf_initial = external local_unnamed_addr global ptr, align 8
@gtype_to_predicate = external local_unnamed_addr global [50 x i32], align 16
@.str.83 = external hidden unnamed_addr constant [64 x i8], align 1
@gnum_initial = external local_unnamed_addr global i32, align 4
@.str.84 = external hidden unnamed_addr constant [53 x i8], align 1
@gnum_f_initial = external local_unnamed_addr global i32, align 4

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

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

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

; Function Attrs: nounwind uwtable
define dso_local void @split_initial_state() local_unnamed_addr #3 {
.preheader129.preheader:
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(200) @gtype_to_predicate, i8 -1, i64 200, i1 false), !tbaa !5
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(200) @gpredicate_to_type, i8 -1, i64 200, i1 false), !tbaa !5
  %0 = load i32, ptr @gnum_predicates, align 4, !tbaa !5
  %1 = icmp sgt i32 %0, 0
  br i1 %1, label %.lr.ph.preheader, label %._crit_edge

.lr.ph.preheader:                                 ; preds = %.preheader129.preheader
  %gnum_types.promoted = load i32, ptr @gnum_types, align 4, !tbaa !5
  %wide.trip.count = zext nneg i32 %0 to i64
  br label %.lr.ph

.lr.ph:                                           ; preds = %.lr.ph.preheader, %31
  %indvars.iv192 = phi i64 [ 0, %.lr.ph.preheader ], [ %indvars.iv.next193, %31 ]
  %2 = phi i32 [ %gnum_types.promoted, %.lr.ph.preheader ], [ %32, %31 ]
  %3 = getelementptr inbounds [50 x i8], ptr @gis_added, i64 0, i64 %indvars.iv192
  %4 = load i8, ptr %3, align 1, !tbaa !9
  %.not123 = icmp eq i8 %4, 0
  br i1 %.not123, label %5, label %31

5:                                                ; preds = %.lr.ph
  %6 = getelementptr inbounds [50 x i8], ptr @gis_deleted, i64 0, i64 %indvars.iv192
  %7 = load i8, ptr %6, align 1, !tbaa !9
  %.not124 = icmp eq i8 %7, 0
  br i1 %.not124, label %8, label %31

8:                                                ; preds = %5
  %9 = getelementptr inbounds [50 x i32], ptr @garity, i64 0, i64 %indvars.iv192
  %10 = load i32, ptr %9, align 4, !tbaa !5
  %11 = icmp eq i32 %10, 1
  br i1 %11, label %12, label %31

12:                                               ; preds = %8
  %13 = icmp eq i32 %2, 50
  br i1 %13, label %14, label %16

14:                                               ; preds = %12
  %15 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.83, i32 noundef 50)
  tail call void @exit(i32 noundef 1) #6
  unreachable

16:                                               ; preds = %12
  %17 = getelementptr inbounds [50 x i32], ptr @gtype_to_predicate, i64 0, i64 %indvars.iv192
  store i32 %2, ptr %17, align 4, !tbaa !5
  %18 = sext i32 %2 to i64
  %19 = getelementptr inbounds [50 x i32], ptr @gpredicate_to_type, i64 0, i64 %18
  %20 = trunc nuw nsw i64 %indvars.iv192 to i32
  store i32 %20, ptr %19, align 4, !tbaa !5
  %21 = getelementptr inbounds [50 x ptr], ptr @gtype_names, i64 0, i64 %18
  store ptr null, ptr %21, align 8, !tbaa !10
  %22 = getelementptr inbounds [50 x i32], ptr @gtype_size, i64 0, i64 %18
  store i32 0, ptr %22, align 4, !tbaa !5
  br label %23

23:                                               ; preds = %23, %16
  %indvars.iv = phi i64 [ 0, %16 ], [ %indvars.iv.next.4, %23 ]
  %24 = getelementptr inbounds [2000 x [50 x i8]], ptr @gis_member, i64 0, i64 %indvars.iv, i64 %18
  store i8 0, ptr %24, align 1, !tbaa !9
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %25 = getelementptr inbounds [2000 x [50 x i8]], ptr @gis_member, i64 0, i64 %indvars.iv.next, i64 %18
  store i8 0, ptr %25, align 1, !tbaa !9
  %indvars.iv.next.1 = add nuw nsw i64 %indvars.iv, 2
  %26 = getelementptr inbounds [2000 x [50 x i8]], ptr @gis_member, i64 0, i64 %indvars.iv.next.1, i64 %18
  store i8 0, ptr %26, align 1, !tbaa !9
  %indvars.iv.next.2 = add nuw nsw i64 %indvars.iv, 3
  %27 = getelementptr inbounds [2000 x [50 x i8]], ptr @gis_member, i64 0, i64 %indvars.iv.next.2, i64 %18
  store i8 0, ptr %27, align 1, !tbaa !9
  %indvars.iv.next.3 = add nuw nsw i64 %indvars.iv, 4
  %28 = getelementptr inbounds [2000 x [50 x i8]], ptr @gis_member, i64 0, i64 %indvars.iv.next.3, i64 %18
  store i8 0, ptr %28, align 1, !tbaa !9
  %indvars.iv.next.4 = add nuw nsw i64 %indvars.iv, 5
  %exitcond.not.4 = icmp eq i64 %indvars.iv.next.4, 2000
  br i1 %exitcond.not.4, label %29, label %23, !llvm.loop !12

29:                                               ; preds = %23
  %30 = add nsw i32 %2, 1
  store i32 %30, ptr @gnum_types, align 4, !tbaa !5
  br label %31

31:                                               ; preds = %.lr.ph, %5, %8, %29
  %32 = phi i32 [ %2, %.lr.ph ], [ %2, %5 ], [ %2, %8 ], [ %30, %29 ]
  %indvars.iv.next193 = add nuw nsw i64 %indvars.iv192, 1
  %exitcond195.not = icmp eq i64 %indvars.iv.next193, %wide.trip.count
  br i1 %exitcond195.not, label %._crit_edge, label %.lr.ph, !llvm.loop !14

._crit_edge:                                      ; preds = %31, %.preheader129.preheader
  %33 = shl i32 %0, 1
  %34 = sext i32 %33 to i64
  %35 = tail call noalias ptr @calloc(i64 noundef %34, i64 noundef 8) #7
  store ptr %35, ptr @ginitial_predicate, align 8, !tbaa !10
  %36 = tail call noalias ptr @calloc(i64 noundef %34, i64 noundef 4) #7
  store ptr %36, ptr @gnum_initial_predicate, align 8, !tbaa !10
  %37 = load i32, ptr @gnum_full_initial, align 4, !tbaa !5
  %38 = icmp sgt i32 %37, 0
  br i1 %38, label %.lr.ph146, label %.preheader126

.lr.ph146:                                        ; preds = %._crit_edge
  %39 = load ptr, ptr @gfull_initial, align 8, !tbaa !10
  %wide.trip.count202 = zext nneg i32 %37 to i64
  %xtraiter = and i64 %wide.trip.count202, 1
  %40 = icmp eq i32 %37, 1
  br i1 %40, label %.preheader126.loopexit.unr-lcssa, label %.lr.ph146.new

.lr.ph146.new:                                    ; preds = %.lr.ph146
  %unroll_iter = and i64 %wide.trip.count202, 2147483646
  br label %47

.preheader126.loopexit.unr-lcssa:                 ; preds = %47, %.lr.ph146
  %indvars.iv199.unr = phi i64 [ 0, %.lr.ph146 ], [ %indvars.iv.next200.1, %47 ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.preheader126, label %.preheader126.loopexit.epilog-lcssa

.preheader126.loopexit.epilog-lcssa:              ; preds = %.preheader126.loopexit.unr-lcssa
  %41 = getelementptr inbounds %struct._Fact, ptr %39, i64 %indvars.iv199.unr
  %42 = load i32, ptr %41, align 4, !tbaa !15
  %43 = sext i32 %42 to i64
  %44 = getelementptr inbounds i32, ptr %36, i64 %43
  %45 = load i32, ptr %44, align 4, !tbaa !5
  %46 = add nsw i32 %45, 1
  store i32 %46, ptr %44, align 4, !tbaa !5
  br label %.preheader126

.preheader126:                                    ; preds = %.preheader126.loopexit.epilog-lcssa, %.preheader126.loopexit.unr-lcssa, %._crit_edge
  br i1 %1, label %.lr.ph148, label %._crit_edge149

47:                                               ; preds = %47, %.lr.ph146.new
  %indvars.iv199 = phi i64 [ 0, %.lr.ph146.new ], [ %indvars.iv.next200.1, %47 ]
  %niter = phi i64 [ 0, %.lr.ph146.new ], [ %niter.next.1, %47 ]
  %48 = getelementptr inbounds %struct._Fact, ptr %39, i64 %indvars.iv199
  %49 = load i32, ptr %48, align 4, !tbaa !15
  %50 = sext i32 %49 to i64
  %51 = getelementptr inbounds i32, ptr %36, i64 %50
  %52 = load i32, ptr %51, align 4, !tbaa !5
  %53 = add nsw i32 %52, 1
  store i32 %53, ptr %51, align 4, !tbaa !5
  %indvars.iv.next200 = or disjoint i64 %indvars.iv199, 1
  %54 = getelementptr inbounds %struct._Fact, ptr %39, i64 %indvars.iv.next200
  %55 = load i32, ptr %54, align 4, !tbaa !15
  %56 = sext i32 %55 to i64
  %57 = getelementptr inbounds i32, ptr %36, i64 %56
  %58 = load i32, ptr %57, align 4, !tbaa !5
  %59 = add nsw i32 %58, 1
  store i32 %59, ptr %57, align 4, !tbaa !5
  %indvars.iv.next200.1 = add nuw nsw i64 %indvars.iv199, 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 %.preheader126.loopexit.unr-lcssa, label %47, !llvm.loop !17

.lr.ph148:                                        ; preds = %.preheader126, %.lr.ph148
  %60 = phi ptr [ %67, %.lr.ph148 ], [ %36, %.preheader126 ]
  %indvars.iv204 = phi i64 [ %indvars.iv.next205, %.lr.ph148 ], [ 0, %.preheader126 ]
  %61 = getelementptr inbounds i32, ptr %60, i64 %indvars.iv204
  %62 = load i32, ptr %61, align 4, !tbaa !5
  %63 = sext i32 %62 to i64
  %64 = tail call noalias ptr @calloc(i64 noundef %63, i64 noundef 24) #7
  %65 = load ptr, ptr @ginitial_predicate, align 8, !tbaa !10
  %66 = getelementptr inbounds ptr, ptr %65, i64 %indvars.iv204
  store ptr %64, ptr %66, align 8, !tbaa !10
  %67 = load ptr, ptr @gnum_initial_predicate, align 8, !tbaa !10
  %68 = getelementptr inbounds i32, ptr %67, i64 %indvars.iv204
  store i32 0, ptr %68, align 4, !tbaa !5
  %indvars.iv.next205 = add nuw nsw i64 %indvars.iv204, 1
  %69 = load i32, ptr @gnum_predicates, align 4, !tbaa !5
  %70 = sext i32 %69 to i64
  %71 = icmp slt i64 %indvars.iv.next205, %70
  br i1 %71, label %.lr.ph148, label %._crit_edge149.loopexit, !llvm.loop !18

._crit_edge149.loopexit:                          ; preds = %.lr.ph148
  %.pre = load i32, ptr @gnum_full_initial, align 4, !tbaa !5
  br label %._crit_edge149

._crit_edge149:                                   ; preds = %._crit_edge149.loopexit, %.preheader126
  %.pre241 = phi ptr [ %67, %._crit_edge149.loopexit ], [ %36, %.preheader126 ]
  %72 = phi i32 [ %.pre, %._crit_edge149.loopexit ], [ %37, %.preheader126 ]
  store ptr null, ptr @ginitial, align 8, !tbaa !10
  store i32 0, ptr @gnum_initial, align 4, !tbaa !5
  %73 = icmp sgt i32 %72, 0
  br i1 %73, label %.lr.ph161.preheader, label %._crit_edge162

.lr.ph161.preheader:                              ; preds = %._crit_edge149
  %.pre237 = load ptr, ptr @gfull_initial, align 8, !tbaa !10
  %.pre239 = load ptr, ptr @ginitial_predicate, align 8, !tbaa !10
  br label %.lr.ph161

.lr.ph161:                                        ; preds = %.lr.ph161.preheader, %157
  %74 = phi ptr [ %.pre241, %.lr.ph161.preheader ], [ %158, %157 ]
  %75 = phi ptr [ %.pre239, %.lr.ph161.preheader ], [ %159, %157 ]
  %76 = phi ptr [ %.pre237, %.lr.ph161.preheader ], [ %160, %157 ]
  %indvars.iv213 = phi i64 [ 0, %.lr.ph161.preheader ], [ %indvars.iv.next214, %157 ]
  %77 = getelementptr inbounds %struct._Fact, ptr %76, i64 %indvars.iv213
  %78 = load i32, ptr %77, align 4, !tbaa !15
  %79 = sext i32 %78 to i64
  %80 = getelementptr inbounds ptr, ptr %75, i64 %79
  %81 = load ptr, ptr %80, align 8, !tbaa !10
  %82 = getelementptr inbounds i32, ptr %74, i64 %79
  %83 = load i32, ptr %82, align 4, !tbaa !5
  %84 = sext i32 %83 to i64
  %85 = getelementptr inbounds %struct._Fact, ptr %81, i64 %84
  store i32 %78, ptr %85, align 4, !tbaa !15
  %86 = getelementptr inbounds [50 x i32], ptr @garity, i64 0, i64 %79
  %87 = load i32, ptr %86, align 4, !tbaa !5
  %88 = icmp sgt i32 %87, 0
  br i1 %88, label %.lr.ph152, label %._crit_edge153

.lr.ph152:                                        ; preds = %.lr.ph161, %.lr.ph152
  %indvars.iv207 = phi i64 [ %indvars.iv.next208, %.lr.ph152 ], [ 0, %.lr.ph161 ]
  %89 = getelementptr inbounds %struct._Fact, ptr %76, i64 %indvars.iv213, i32 1, i64 %indvars.iv207
  %90 = load i32, ptr %89, align 4, !tbaa !5
  %91 = load i32, ptr %82, align 4, !tbaa !5
  %92 = sext i32 %91 to i64
  %93 = getelementptr inbounds %struct._Fact, ptr %81, i64 %92, i32 1, i64 %indvars.iv207
  store i32 %90, ptr %93, align 4, !tbaa !5
  %indvars.iv.next208 = add nuw nsw i64 %indvars.iv207, 1
  %94 = load i32, ptr %86, align 4, !tbaa !5
  %95 = sext i32 %94 to i64
  %96 = icmp slt i64 %indvars.iv.next208, %95
  br i1 %96, label %.lr.ph152, label %._crit_edge153, !llvm.loop !19

._crit_edge153:                                   ; preds = %.lr.ph152, %.lr.ph161
  %97 = load i32, ptr %82, align 4, !tbaa !5
  %98 = add nsw i32 %97, 1
  store i32 %98, ptr %82, align 4, !tbaa !5
  %99 = getelementptr inbounds [50 x i8], ptr @gis_added, i64 0, i64 %79
  %100 = load i8, ptr %99, align 1, !tbaa !9
  %.not120 = icmp eq i8 %100, 0
  br i1 %.not120, label %101, label %104

101:                                              ; preds = %._crit_edge153
  %102 = getelementptr inbounds [50 x i8], ptr @gis_deleted, i64 0, i64 %79
  %103 = load i8, ptr %102, align 1, !tbaa !9
  %.not121 = icmp eq i8 %103, 0
  br i1 %.not121, label %121, label %104

104:                                              ; preds = %101, %._crit_edge153
  %105 = tail call ptr @new_Facts() #8
  %106 = load ptr, ptr %105, align 8, !tbaa !20
  store i32 %78, ptr %106, align 4, !tbaa !15
  %107 = load i32, ptr %86, align 4, !tbaa !5
  %108 = icmp sgt i32 %107, 0
  %.pre236 = load ptr, ptr @gfull_initial, align 8, !tbaa !10
  %.pre238 = load ptr, ptr @ginitial_predicate, align 8, !tbaa !10
  %.pre240 = load ptr, ptr @gnum_initial_predicate, align 8, !tbaa !10
  br i1 %108, label %.lr.ph157, label %._crit_edge158

.lr.ph157:                                        ; preds = %104
  %109 = getelementptr inbounds i8, ptr %106, i64 4
  br label %110

110:                                              ; preds = %.lr.ph157, %110
  %indvars.iv210 = phi i64 [ 0, %.lr.ph157 ], [ %indvars.iv.next211, %110 ]
  %111 = getelementptr inbounds %struct._Fact, ptr %.pre236, i64 %indvars.iv213, i32 1, i64 %indvars.iv210
  %112 = load i32, ptr %111, align 4, !tbaa !5
  %113 = getelementptr inbounds [5 x i32], ptr %109, i64 0, i64 %indvars.iv210
  store i32 %112, ptr %113, align 4, !tbaa !5
  %indvars.iv.next211 = add nuw nsw i64 %indvars.iv210, 1
  %114 = load i32, ptr %86, align 4, !tbaa !5
  %115 = sext i32 %114 to i64
  %116 = icmp slt i64 %indvars.iv.next211, %115
  br i1 %116, label %110, label %._crit_edge158, !llvm.loop !22

._crit_edge158:                                   ; preds = %110, %104
  %117 = load ptr, ptr @ginitial, align 8, !tbaa !10
  %118 = getelementptr inbounds i8, ptr %105, i64 8
  store ptr %117, ptr %118, align 8, !tbaa !23
  store ptr %105, ptr @ginitial, align 8, !tbaa !10
  %119 = load i32, ptr @gnum_initial, align 4, !tbaa !5
  %120 = add nsw i32 %119, 1
  store i32 %120, ptr @gnum_initial, align 4, !tbaa !5
  br label %157

121:                                              ; preds = %101
  %122 = load i32, ptr %86, align 4, !tbaa !5
  %123 = icmp eq i32 %122, 1
  br i1 %123, label %124, label %157

124:                                              ; preds = %121
  %125 = getelementptr inbounds [50 x i32], ptr @gtype_to_predicate, i64 0, i64 %79
  %126 = load i32, ptr %125, align 4, !tbaa !5
  %127 = sext i32 %126 to i64
  %128 = getelementptr inbounds [50 x i32], ptr @gtype_size, i64 0, i64 %127
  %129 = load i32, ptr %128, align 4, !tbaa !5
  %130 = icmp eq i32 %129, 2000
  br i1 %130, label %131, label %135

131:                                              ; preds = %124
  %132 = getelementptr inbounds [50 x ptr], ptr @gtype_names, i64 0, i64 %127
  %133 = load ptr, ptr %132, align 8, !tbaa !10
  %134 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.20, ptr noundef %133, i32 noundef 2000)
  tail call void @exit(i32 noundef 1) #6
  unreachable

135:                                              ; preds = %124
  %136 = getelementptr inbounds %struct._Fact, ptr %76, i64 %indvars.iv213, i32 1
  %137 = load i32, ptr %136, align 4, !tbaa !5
  %138 = sext i32 %137 to i64
  %139 = getelementptr inbounds [50 x [5 x i32]], ptr @gpredicates_args_type, i64 0, i64 %79
  %140 = load i32, ptr %139, align 4, !tbaa !5
  %141 = sext i32 %140 to i64
  %142 = getelementptr inbounds [2000 x [50 x i8]], ptr @gis_member, i64 0, i64 %138, i64 %141
  %143 = load i8, ptr %142, align 1, !tbaa !9
  %.not122 = icmp eq i8 %143, 0
  br i1 %.not122, label %144, label %150

144:                                              ; preds = %135
  %145 = getelementptr inbounds [2000 x ptr], ptr @gconstants, i64 0, i64 %138
  %146 = load ptr, ptr %145, align 8, !tbaa !10
  %147 = getelementptr inbounds [50 x ptr], ptr @gpredicates, i64 0, i64 %79
  %148 = load ptr, ptr %147, align 8, !tbaa !10
  %149 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.84, ptr noundef %146, ptr noundef %148)
  tail call void @exit(i32 noundef 1) #6
  unreachable

150:                                              ; preds = %135
  %151 = add nsw i32 %129, 1
  store i32 %151, ptr %128, align 4, !tbaa !5
  %152 = sext i32 %129 to i64
  %153 = getelementptr inbounds [50 x [2000 x i32]], ptr @gtype_consts, i64 0, i64 %127, i64 %152
  store i32 %137, ptr %153, align 4, !tbaa !5
  %154 = load i32, ptr %136, align 4, !tbaa !5
  %155 = sext i32 %154 to i64
  %156 = getelementptr inbounds [2000 x [50 x i8]], ptr @gis_member, i64 0, i64 %155, i64 %127
  store i8 1, ptr %156, align 1, !tbaa !9
  br label %157

157:                                              ; preds = %._crit_edge158, %150, %121
  %158 = phi ptr [ %.pre240, %._crit_edge158 ], [ %74, %150 ], [ %74, %121 ]
  %159 = phi ptr [ %.pre238, %._crit_edge158 ], [ %75, %150 ], [ %75, %121 ]
  %160 = phi ptr [ %.pre236, %._crit_edge158 ], [ %76, %150 ], [ %76, %121 ]
  %indvars.iv.next214 = add nuw nsw i64 %indvars.iv213, 1
  %161 = load i32, ptr @gnum_full_initial, align 4, !tbaa !5
  %162 = sext i32 %161 to i64
  %163 = icmp slt i64 %indvars.iv.next214, %162
  br i1 %163, label %.lr.ph161, label %._crit_edge162, !llvm.loop !24

._crit_edge162:                                   ; preds = %157, %._crit_edge149
  %164 = load i32, ptr @gnum_functions, align 4, !tbaa !5
  %165 = sext i32 %164 to i64
  %166 = tail call noalias ptr @calloc(i64 noundef %165, i64 noundef 8) #7
  store ptr %166, ptr @ginitial_function, align 8, !tbaa !10
  %167 = tail call noalias ptr @calloc(i64 noundef %165, i64 noundef 4) #7
  store ptr %167, ptr @gnum_initial_function, align 8, !tbaa !10
  %168 = icmp sgt i32 %164, 0
  br i1 %168, label %.lr.ph165.preheader, label %.preheader125

.lr.ph165.preheader:                              ; preds = %._crit_edge162
  %169 = zext nneg i32 %164 to i64
  %170 = shl nuw nsw i64 %169, 2
  tail call void @llvm.memset.p0.i64(ptr align 4 %167, i8 0, i64 %170, i1 false), !tbaa !5
  br label %.preheader125

.preheader125:                                    ; preds = %.lr.ph165.preheader, %._crit_edge162
  %171 = load i32, ptr @gnum_full_fluents_initial, align 4, !tbaa !5
  %172 = icmp sgt i32 %171, 0
  br i1 %172, label %.lr.ph167, label %.preheader

.lr.ph167:                                        ; preds = %.preheader125
  %173 = load ptr, ptr @gfull_fluents_initial, align 8, !tbaa !10
  %wide.trip.count222 = zext nneg i32 %171 to i64
  %xtraiter273 = and i64 %wide.trip.count222, 1
  %174 = icmp eq i32 %171, 1
  br i1 %174, label %.preheader.loopexit.unr-lcssa, label %.lr.ph167.new

.lr.ph167.new:                                    ; preds = %.lr.ph167
  %unroll_iter275 = and i64 %wide.trip.count222, 2147483646
  br label %181

.preheader.loopexit.unr-lcssa:                    ; preds = %181, %.lr.ph167
  %indvars.iv219.unr = phi i64 [ 0, %.lr.ph167 ], [ %indvars.iv.next220.1, %181 ]
  %lcmp.mod274.not = icmp eq i64 %xtraiter273, 0
  br i1 %lcmp.mod274.not, label %.preheader, label %.preheader.loopexit.epilog-lcssa

.preheader.loopexit.epilog-lcssa:                 ; preds = %.preheader.loopexit.unr-lcssa
  %175 = getelementptr inbounds %struct._FluentValue, ptr %173, i64 %indvars.iv219.unr
  %176 = load i32, ptr %175, align 4, !tbaa !25
  %177 = sext i32 %176 to i64
  %178 = getelementptr inbounds i32, ptr %167, i64 %177
  %179 = load i32, ptr %178, align 4, !tbaa !5
  %180 = add nsw i32 %179, 1
  store i32 %180, ptr %178, align 4, !tbaa !5
  br label %.preheader

.preheader:                                       ; preds = %.preheader.loopexit.epilog-lcssa, %.preheader.loopexit.unr-lcssa, %.preheader125
  br i1 %168, label %.lr.ph169, label %._crit_edge170

181:                                              ; preds = %181, %.lr.ph167.new
  %indvars.iv219 = phi i64 [ 0, %.lr.ph167.new ], [ %indvars.iv.next220.1, %181 ]
  %niter276 = phi i64 [ 0, %.lr.ph167.new ], [ %niter276.next.1, %181 ]
  %182 = getelementptr inbounds %struct._FluentValue, ptr %173, i64 %indvars.iv219
  %183 = load i32, ptr %182, align 4, !tbaa !25
  %184 = sext i32 %183 to i64
  %185 = getelementptr inbounds i32, ptr %167, i64 %184
  %186 = load i32, ptr %185, align 4, !tbaa !5
  %187 = add nsw i32 %186, 1
  store i32 %187, ptr %185, align 4, !tbaa !5
  %indvars.iv.next220 = or disjoint i64 %indvars.iv219, 1
  %188 = getelementptr inbounds %struct._FluentValue, ptr %173, i64 %indvars.iv.next220
  %189 = load i32, ptr %188, align 4, !tbaa !25
  %190 = sext i32 %189 to i64
  %191 = getelementptr inbounds i32, ptr %167, i64 %190
  %192 = load i32, ptr %191, align 4, !tbaa !5
  %193 = add nsw i32 %192, 1
  store i32 %193, ptr %191, align 4, !tbaa !5
  %indvars.iv.next220.1 = add nuw nsw i64 %indvars.iv219, 2
  %niter276.next.1 = add i64 %niter276, 2
  %niter276.ncmp.1 = icmp eq i64 %niter276.next.1, %unroll_iter275
  br i1 %niter276.ncmp.1, label %.preheader.loopexit.unr-lcssa, label %181, !llvm.loop !29

.lr.ph169:                                        ; preds = %.preheader, %.lr.ph169
  %194 = phi ptr [ %201, %.lr.ph169 ], [ %167, %.preheader ]
  %indvars.iv224 = phi i64 [ %indvars.iv.next225, %.lr.ph169 ], [ 0, %.preheader ]
  %195 = getelementptr inbounds i32, ptr %194, i64 %indvars.iv224
  %196 = load i32, ptr %195, align 4, !tbaa !5
  %197 = sext i32 %196 to i64
  %198 = tail call noalias ptr @calloc(i64 noundef %197, i64 noundef 28) #7
  %199 = load ptr, ptr @ginitial_function, align 8, !tbaa !10
  %200 = getelementptr inbounds ptr, ptr %199, i64 %indvars.iv224
  store ptr %198, ptr %200, align 8, !tbaa !10
  %201 = load ptr, ptr @gnum_initial_function, align 8, !tbaa !10
  %202 = getelementptr inbounds i32, ptr %201, i64 %indvars.iv224
  store i32 0, ptr %202, align 4, !tbaa !5
  %indvars.iv.next225 = add nuw nsw i64 %indvars.iv224, 1
  %203 = load i32, ptr @gnum_functions, align 4, !tbaa !5
  %204 = sext i32 %203 to i64
  %205 = icmp slt i64 %indvars.iv.next225, %204
  br i1 %205, label %.lr.ph169, label %._crit_edge170.loopexit, !llvm.loop !30

._crit_edge170.loopexit:                          ; preds = %.lr.ph169
  %.pre242 = load i32, ptr @gnum_full_fluents_initial, align 4, !tbaa !5
  br label %._crit_edge170

._crit_edge170:                                   ; preds = %._crit_edge170.loopexit, %.preheader
  %.pre247 = phi ptr [ %201, %._crit_edge170.loopexit ], [ %167, %.preheader ]
  %206 = phi i32 [ %.pre242, %._crit_edge170.loopexit ], [ %171, %.preheader ]
  store ptr null, ptr @gf_initial, align 8, !tbaa !10
  store i32 0, ptr @gnum_f_initial, align 4, !tbaa !5
  %207 = icmp sgt i32 %206, 0
  br i1 %207, label %.lr.ph182.preheader, label %._crit_edge183

.lr.ph182.preheader:                              ; preds = %._crit_edge170
  %.pre243 = load ptr, ptr @gfull_fluents_initial, align 8, !tbaa !10
  %.pre245 = load ptr, ptr @ginitial_function, align 8, !tbaa !10
  br label %.lr.ph182

.lr.ph182:                                        ; preds = %.lr.ph182.preheader, %258
  %208 = phi ptr [ %.pre247, %.lr.ph182.preheader ], [ %259, %258 ]
  %209 = phi ptr [ %.pre245, %.lr.ph182.preheader ], [ %260, %258 ]
  %210 = phi ptr [ %.pre243, %.lr.ph182.preheader ], [ %261, %258 ]
  %indvars.iv233 = phi i64 [ 0, %.lr.ph182.preheader ], [ %indvars.iv.next234, %258 ]
  %211 = getelementptr inbounds %struct._FluentValue, ptr %210, i64 %indvars.iv233
  %212 = load i32, ptr %211, align 4, !tbaa !25
  %213 = sext i32 %212 to i64
  %214 = getelementptr inbounds ptr, ptr %209, i64 %213
  %215 = load ptr, ptr %214, align 8, !tbaa !10
  %216 = getelementptr inbounds i32, ptr %208, i64 %213
  %217 = load i32, ptr %216, align 4, !tbaa !5
  %218 = sext i32 %217 to i64
  %219 = getelementptr inbounds %struct._FluentValue, ptr %215, i64 %218
  store i32 %212, ptr %219, align 4, !tbaa !25
  %220 = getelementptr inbounds [50 x i32], ptr @gf_arity, i64 0, i64 %213
  %221 = load i32, ptr %220, align 4, !tbaa !5
  %222 = icmp sgt i32 %221, 0
  br i1 %222, label %.lr.ph173, label %._crit_edge174

.lr.ph173:                                        ; preds = %.lr.ph182, %.lr.ph173
  %indvars.iv227 = phi i64 [ %indvars.iv.next228, %.lr.ph173 ], [ 0, %.lr.ph182 ]
  %223 = getelementptr inbounds %struct._FluentValue, ptr %210, i64 %indvars.iv233, i32 0, i32 1, i64 %indvars.iv227
  %224 = load i32, ptr %223, align 4, !tbaa !5
  %225 = load i32, ptr %216, align 4, !tbaa !5
  %226 = sext i32 %225 to i64
  %227 = getelementptr inbounds %struct._FluentValue, ptr %215, i64 %226, i32 0, i32 1, i64 %indvars.iv227
  store i32 %224, ptr %227, align 4, !tbaa !5
  %indvars.iv.next228 = add nuw nsw i64 %indvars.iv227, 1
  %228 = load i32, ptr %220, align 4, !tbaa !5
  %229 = sext i32 %228 to i64
  %230 = icmp slt i64 %indvars.iv.next228, %229
  br i1 %230, label %.lr.ph173, label %._crit_edge174, !llvm.loop !31

._crit_edge174:                                   ; preds = %.lr.ph173, %.lr.ph182
  %231 = getelementptr inbounds %struct._FluentValue, ptr %210, i64 %indvars.iv233, i32 1
  %232 = load float, ptr %231, align 4, !tbaa !32
  %233 = load i32, ptr %216, align 4, !tbaa !5
  %234 = sext i32 %233 to i64
  %235 = getelementptr inbounds %struct._FluentValue, ptr %215, i64 %234, i32 1
  store float %232, ptr %235, align 4, !tbaa !32
  %236 = add nsw i32 %233, 1
  store i32 %236, ptr %216, align 4, !tbaa !5
  %237 = getelementptr inbounds [50 x i8], ptr @gis_changed, i64 0, i64 %213
  %238 = load i8, ptr %237, align 1, !tbaa !9
  %.not = icmp eq i8 %238, 0
  br i1 %.not, label %258, label %239

239:                                              ; preds = %._crit_edge174
  %240 = tail call ptr @new_FluentValues() #8
  store i32 %212, ptr %240, align 8, !tbaa !33
  %241 = load i32, ptr %220, align 4, !tbaa !5
  %242 = icmp sgt i32 %241, 0
  %.pre244 = load ptr, ptr @ginitial_function, align 8, !tbaa !10
  %.pre246 = load ptr, ptr @gnum_initial_function, align 8, !tbaa !10
  %.pre248 = load ptr, ptr @gfull_fluents_initial, align 8, !tbaa !10
  br i1 %242, label %.lr.ph178, label %._crit_edge179

.lr.ph178:                                        ; preds = %239
  %243 = getelementptr inbounds i8, ptr %240, i64 4
  br label %244

244:                                              ; preds = %.lr.ph178, %244
  %indvars.iv230 = phi i64 [ 0, %.lr.ph178 ], [ %indvars.iv.next231, %244 ]
  %245 = getelementptr inbounds %struct._FluentValue, ptr %.pre248, i64 %indvars.iv233, i32 0, i32 1, i64 %indvars.iv230
  %246 = load i32, ptr %245, align 4, !tbaa !5
  %247 = getelementptr inbounds [5 x i32], ptr %243, i64 0, i64 %indvars.iv230
  store i32 %246, ptr %247, align 4, !tbaa !5
  %indvars.iv.next231 = add nuw nsw i64 %indvars.iv230, 1
  %248 = load i32, ptr %220, align 4, !tbaa !5
  %249 = sext i32 %248 to i64
  %250 = icmp slt i64 %indvars.iv.next231, %249
  br i1 %250, label %244, label %._crit_edge179, !llvm.loop !35

._crit_edge179:                                   ; preds = %244, %239
  %251 = getelementptr inbounds %struct._FluentValue, ptr %.pre248, i64 %indvars.iv233, i32 1
  %252 = load float, ptr %251, align 4, !tbaa !32
  %253 = getelementptr inbounds i8, ptr %240, i64 24
  store float %252, ptr %253, align 8, !tbaa !36
  %254 = load ptr, ptr @gf_initial, align 8, !tbaa !10
  %255 = getelementptr inbounds i8, ptr %240, i64 32
  store ptr %254, ptr %255, align 8, !tbaa !37
  store ptr %240, ptr @gf_initial, align 8, !tbaa !10
  %256 = load i32, ptr @gnum_f_initial, align 4, !tbaa !5
  %257 = add nsw i32 %256, 1
  store i32 %257, ptr @gnum_f_initial, align 4, !tbaa !5
  br label %258

258:                                              ; preds = %._crit_edge174, %._crit_edge179
  %259 = phi ptr [ %208, %._crit_edge174 ], [ %.pre246, %._crit_edge179 ]
  %260 = phi ptr [ %209, %._crit_edge174 ], [ %.pre244, %._crit_edge179 ]
  %261 = phi ptr [ %210, %._crit_edge174 ], [ %.pre248, %._crit_edge179 ]
  %indvars.iv.next234 = add nuw nsw i64 %indvars.iv233, 1
  %262 = load i32, ptr @gnum_full_fluents_initial, align 4, !tbaa !5
  %263 = sext i32 %262 to i64
  %264 = icmp slt i64 %indvars.iv.next234, %263
  br i1 %264, label %.lr.ph182, label %._crit_edge183, !llvm.loop !38

._crit_edge183:                                   ; preds = %258, %._crit_edge170
  ret void
}

declare ptr @new_Facts() local_unnamed_addr #4

declare ptr @new_FluentValues() local_unnamed_addr #4

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

attributes #0 = { 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 #1 = { 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 #2 = { 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 #3 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { "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 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #6 = { noreturn nounwind }
attributes #7 = { nounwind allocsize(0,1) }
attributes #8 = { 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 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!7, !7, i64 0}
!10 = !{!11, !11, i64 0}
!11 = !{!"any pointer", !7, i64 0}
!12 = distinct !{!12, !13}
!13 = !{!"llvm.loop.mustprogress"}
!14 = distinct !{!14, !13}
!15 = !{!16, !6, i64 0}
!16 = !{!"_Fact", !6, i64 0, !7, i64 4}
!17 = distinct !{!17, !13}
!18 = distinct !{!18, !13}
!19 = distinct !{!19, !13}
!20 = !{!21, !11, i64 0}
!21 = !{!"_Facts", !11, i64 0, !11, i64 8}
!22 = distinct !{!22, !13}
!23 = !{!21, !11, i64 8}
!24 = distinct !{!24, !13}
!25 = !{!26, !6, i64 0}
!26 = !{!"_FluentValue", !27, i64 0, !28, i64 24}
!27 = !{!"_Fluent", !6, i64 0, !7, i64 4}
!28 = !{!"float", !7, i64 0}
!29 = distinct !{!29, !13}
!30 = distinct !{!30, !13}
!31 = distinct !{!31, !13}
!32 = !{!26, !28, i64 24}
!33 = !{!34, !6, i64 0}
!34 = !{!"_FluentValues", !27, i64 0, !28, i64 24, !11, i64 32}
!35 = distinct !{!35, !13}
!36 = !{!34, !28, i64 24}
!37 = !{!34, !11, i64 32}
!38 = distinct !{!38, !13}


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