; 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._command_line = type { [256 x i8], [256 x i8], [256 x i8], i32, i32, i32, i8, i32, float }
%struct._Operator = type { ptr, [15 x ptr], i32, i8, i32, [15 x i32], [15 x i8], ptr, ptr, i8 }
%struct._Effect = type { i32, [15 x i32], [15 x ptr], ptr, ptr, ptr, ptr, ptr }
%struct._WffNode = type { i32, i32, i32, ptr, ptr, ptr, ptr, ptr, i32, ptr, i32, ptr, ptr, i8 }
%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._Fact = type { i32, [5 x i32] }

@gcmd_line = external global %struct._command_line, align 4
@garity = external global [50 x i32], align 16
@gnum_operators = external global i32, align 4
@goperators = external global [50000 x ptr], align 16
@gnum_intersected_types = external global [50 x i32], align 16
@ghard_operators = external global ptr, align 8
@gnum_hard_operators = external global i32, align 4
@geasy_operators = external global ptr, align 8
@gnum_easy_operators = external global i32, align 4
@.str.121 = external hidden unnamed_addr constant [67 x i8], align 1
@.str.122 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.123 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.124 = external hidden unnamed_addr constant [10 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

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

declare void @print_Operator(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
declare dso_local ptr @copy_Exp(ptr noundef) #4

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

12:                                               ; preds = %19, %0
  %13 = load i32, ptr %1, align 4, !tbaa !5
  %14 = icmp slt i32 %13, 50
  br i1 %14, label %15, label %22

15:                                               ; preds = %12
  %16 = load i32, ptr %1, align 4, !tbaa !5
  %17 = sext i32 %16 to i64
  %18 = getelementptr inbounds [50 x i32], ptr @gnum_intersected_types, i64 0, i64 %17
  store i32 -1, ptr %18, align 4, !tbaa !5
  br label %19

19:                                               ; preds = %15
  %20 = load i32, ptr %1, align 4, !tbaa !5
  %21 = add nsw i32 %20, 1
  store i32 %21, ptr %1, align 4, !tbaa !5
  br label %12, !llvm.loop !9

22:                                               ; preds = %12
  store i32 0, ptr %1, align 4, !tbaa !5
  br label %23

23:                                               ; preds = %72, %22
  %24 = load i32, ptr %1, align 4, !tbaa !5
  %25 = load i32, ptr @gnum_operators, align 4, !tbaa !5
  %26 = icmp slt i32 %24, %25
  br i1 %26, label %27, label %75

27:                                               ; preds = %23
  %28 = load i32, ptr %1, align 4, !tbaa !5
  %29 = sext i32 %28 to i64
  %30 = getelementptr inbounds [50000 x ptr], ptr @goperators, i64 0, i64 %29
  %31 = load ptr, ptr %30, align 8, !tbaa !11
  %32 = getelementptr inbounds %struct._Operator, ptr %31, i32 0, i32 7
  %33 = load ptr, ptr %32, align 8, !tbaa !13
  %34 = call i32 @is_dnf(ptr noundef %33)
  store i32 %34, ptr %3, align 4, !tbaa !5
  %35 = icmp ne i32 %34, -1
  br i1 %35, label %36, label %71

36:                                               ; preds = %27
  %37 = load i32, ptr %1, align 4, !tbaa !5
  %38 = sext i32 %37 to i64
  %39 = getelementptr inbounds [50000 x ptr], ptr @goperators, i64 0, i64 %38
  %40 = load ptr, ptr %39, align 8, !tbaa !11
  %41 = getelementptr inbounds %struct._Operator, ptr %40, i32 0, i32 8
  %42 = load ptr, ptr %41, align 8, !tbaa !15
  store ptr %42, ptr %6, align 8, !tbaa !11
  br label %43

43:                                               ; preds = %54, %36
  %44 = load ptr, ptr %6, align 8, !tbaa !11
  %45 = icmp ne ptr %44, null
  br i1 %45, label %46, label %58

46:                                               ; preds = %43
  %47 = load ptr, ptr %6, align 8, !tbaa !11
  %48 = getelementptr inbounds %struct._Effect, ptr %47, i32 0, i32 3
  %49 = load ptr, ptr %48, align 8, !tbaa !16
  %50 = call i32 @is_dnf(ptr noundef %49)
  %51 = icmp eq i32 %50, -1
  br i1 %51, label %52, label %53

52:                                               ; preds = %46
  br label %58

53:                                               ; preds = %46
  br label %54

54:                                               ; preds = %53
  %55 = load ptr, ptr %6, align 8, !tbaa !11
  %56 = getelementptr inbounds %struct._Effect, ptr %55, i32 0, i32 6
  %57 = load ptr, ptr %56, align 8, !tbaa !18
  store ptr %57, ptr %6, align 8, !tbaa !11
  br label %43, !llvm.loop !19

58:                                               ; preds = %52, %43
  %59 = load ptr, ptr %6, align 8, !tbaa !11
  %60 = icmp ne ptr %59, null
  br i1 %60, label %70, label %61

61:                                               ; preds = %58
  %62 = load i32, ptr %1, align 4, !tbaa !5
  %63 = sext i32 %62 to i64
  %64 = getelementptr inbounds [50000 x ptr], ptr @goperators, i64 0, i64 %63
  %65 = load ptr, ptr %64, align 8, !tbaa !11
  %66 = getelementptr inbounds %struct._Operator, ptr %65, i32 0, i32 9
  store i8 0, ptr %66, align 8, !tbaa !20
  %67 = load i32, ptr %3, align 4, !tbaa !5
  %68 = load i32, ptr %4, align 4, !tbaa !5
  %69 = add nsw i32 %68, %67
  store i32 %69, ptr %4, align 4, !tbaa !5
  br label %70

70:                                               ; preds = %61, %58
  br label %71

71:                                               ; preds = %70, %27
  br label %72

72:                                               ; preds = %71
  %73 = load i32, ptr %1, align 4, !tbaa !5
  %74 = add nsw i32 %73, 1
  store i32 %74, ptr %1, align 4, !tbaa !5
  br label %23, !llvm.loop !21

75:                                               ; preds = %23
  %76 = call noalias ptr @calloc(i64 noundef 50000, i64 noundef 240) #6
  store ptr %76, ptr @ghard_operators, align 8, !tbaa !11
  store i32 0, ptr @gnum_hard_operators, align 4, !tbaa !5
  %77 = load i32, ptr %4, align 4, !tbaa !5
  %78 = sext i32 %77 to i64
  %79 = call noalias ptr @calloc(i64 noundef %78, i64 noundef 8) #6
  store ptr %79, ptr @geasy_operators, align 8, !tbaa !11
  store i32 0, ptr @gnum_easy_operators, align 4, !tbaa !5
  store i32 0, ptr %1, align 4, !tbaa !5
  br label %80

80:                                               ; preds = %694, %75
  %81 = load i32, ptr %1, align 4, !tbaa !5
  %82 = load i32, ptr @gnum_operators, align 4, !tbaa !5
  %83 = icmp slt i32 %81, %82
  br i1 %83, label %84, label %697

84:                                               ; preds = %80
  %85 = load i32, ptr %1, align 4, !tbaa !5
  %86 = sext i32 %85 to i64
  %87 = getelementptr inbounds [50000 x ptr], ptr @goperators, i64 0, i64 %86
  %88 = load ptr, ptr %87, align 8, !tbaa !11
  %89 = getelementptr inbounds %struct._Operator, ptr %88, i32 0, i32 9
  %90 = load i8, ptr %89, align 8, !tbaa !20
  %91 = icmp ne i8 %90, 0
  br i1 %91, label %92, label %102

92:                                               ; preds = %84
  %93 = load i32, ptr %1, align 4, !tbaa !5
  %94 = sext i32 %93 to i64
  %95 = getelementptr inbounds [50000 x ptr], ptr @goperators, i64 0, i64 %94
  %96 = load ptr, ptr %95, align 8, !tbaa !11
  %97 = load ptr, ptr @ghard_operators, align 8, !tbaa !11
  %98 = load i32, ptr @gnum_hard_operators, align 4, !tbaa !5
  %99 = add nsw i32 %98, 1
  store i32 %99, ptr @gnum_hard_operators, align 4, !tbaa !5
  %100 = sext i32 %98 to i64
  %101 = getelementptr inbounds ptr, ptr %97, i64 %100
  store ptr %96, ptr %101, align 8, !tbaa !11
  br label %694

102:                                              ; preds = %84
  %103 = load i32, ptr %1, align 4, !tbaa !5
  %104 = sext i32 %103 to i64
  %105 = getelementptr inbounds [50000 x ptr], ptr @goperators, i64 0, i64 %104
  %106 = load ptr, ptr %105, align 8, !tbaa !11
  %107 = getelementptr inbounds %struct._Operator, ptr %106, i32 0, i32 7
  %108 = load ptr, ptr %107, align 8, !tbaa !13
  store ptr %108, ptr %7, align 8, !tbaa !11
  %109 = load ptr, ptr %7, align 8, !tbaa !11
  %110 = getelementptr inbounds %struct._WffNode, ptr %109, i32 0, i32 0
  %111 = load i32, ptr %110, align 8, !tbaa !22
  switch i32 %111, label %691 [
    i32 2007, label %112
    i32 2006, label %393
    i32 2002, label %566
    i32 2003, label %625
    i32 2000, label %675
    i32 2001, label %693
  ]

112:                                              ; preds = %102
  %113 = load ptr, ptr %7, align 8, !tbaa !11
  %114 = getelementptr inbounds %struct._WffNode, ptr %113, i32 0, i32 4
  %115 = load ptr, ptr %114, align 8, !tbaa !24
  store ptr %115, ptr %8, align 8, !tbaa !11
  br label %116

116:                                              ; preds = %388, %112
  %117 = load ptr, ptr %8, align 8, !tbaa !11
  %118 = icmp ne ptr %117, null
  br i1 %118, label %119, label %392

119:                                              ; preds = %116
  %120 = load i32, ptr %1, align 4, !tbaa !5
  %121 = sext i32 %120 to i64
  %122 = getelementptr inbounds [50000 x ptr], ptr @goperators, i64 0, i64 %121
  %123 = load ptr, ptr %122, align 8, !tbaa !11
  %124 = call ptr @new_NormOperator(ptr noundef %123)
  store ptr %124, ptr %10, align 8, !tbaa !11
  %125 = load ptr, ptr %8, align 8, !tbaa !11
  %126 = getelementptr inbounds %struct._WffNode, ptr %125, i32 0, i32 0
  %127 = load i32, ptr %126, align 8, !tbaa !22
  %128 = icmp eq i32 %127, 2006
  br i1 %128, label %129, label %287

129:                                              ; preds = %119
  store i32 0, ptr %3, align 4, !tbaa !5
  store i32 0, ptr %5, align 4, !tbaa !5
  %130 = load ptr, ptr %8, align 8, !tbaa !11
  %131 = getelementptr inbounds %struct._WffNode, ptr %130, i32 0, i32 4
  %132 = load ptr, ptr %131, align 8, !tbaa !24
  store ptr %132, ptr %9, align 8, !tbaa !11
  br label %133

133:                                              ; preds = %153, %129
  %134 = load ptr, ptr %9, align 8, !tbaa !11
  %135 = icmp ne ptr %134, null
  br i1 %135, label %136, label %157

136:                                              ; preds = %133
  %137 = load ptr, ptr %9, align 8, !tbaa !11
  %138 = getelementptr inbounds %struct._WffNode, ptr %137, i32 0, i32 0
  %139 = load i32, ptr %138, align 8, !tbaa !22
  %140 = icmp eq i32 %139, 2002
  br i1 %140, label %141, label %144

141:                                              ; preds = %136
  %142 = load i32, ptr %3, align 4, !tbaa !5
  %143 = add nsw i32 %142, 1
  store i32 %143, ptr %3, align 4, !tbaa !5
  br label %144

144:                                              ; preds = %141, %136
  %145 = load ptr, ptr %9, align 8, !tbaa !11
  %146 = getelementptr inbounds %struct._WffNode, ptr %145, i32 0, i32 0
  %147 = load i32, ptr %146, align 8, !tbaa !22
  %148 = icmp eq i32 %147, 2003
  br i1 %148, label %149, label %152

149:                                              ; preds = %144
  %150 = load i32, ptr %5, align 4, !tbaa !5
  %151 = add nsw i32 %150, 1
  store i32 %151, ptr %5, align 4, !tbaa !5
  br label %152

152:                                              ; preds = %149, %144
  br label %153

153:                                              ; preds = %152
  %154 = load ptr, ptr %9, align 8, !tbaa !11
  %155 = getelementptr inbounds %struct._WffNode, ptr %154, i32 0, i32 5
  %156 = load ptr, ptr %155, align 8, !tbaa !25
  store ptr %156, ptr %9, align 8, !tbaa !11
  br label %133, !llvm.loop !26

157:                                              ; preds = %133
  %158 = load i32, ptr %3, align 4, !tbaa !5
  %159 = sext i32 %158 to i64
  %160 = call noalias ptr @calloc(i64 noundef %159, i64 noundef 24) #6
  %161 = load ptr, ptr %10, align 8, !tbaa !11
  %162 = getelementptr inbounds %struct._NormOperator, ptr %161, i32 0, i32 7
  store ptr %160, ptr %162, align 8, !tbaa !27
  %163 = load i32, ptr %5, align 4, !tbaa !5
  %164 = sext i32 %163 to i64
  %165 = call noalias ptr @calloc(i64 noundef %164, i64 noundef 4) #6
  %166 = load ptr, ptr %10, align 8, !tbaa !11
  %167 = getelementptr inbounds %struct._NormOperator, ptr %166, i32 0, i32 9
  store ptr %165, ptr %167, align 8, !tbaa !29
  %168 = load i32, ptr %5, align 4, !tbaa !5
  %169 = sext i32 %168 to i64
  %170 = call noalias ptr @calloc(i64 noundef %169, i64 noundef 8) #6
  %171 = load ptr, ptr %10, align 8, !tbaa !11
  %172 = getelementptr inbounds %struct._NormOperator, ptr %171, i32 0, i32 10
  store ptr %170, ptr %172, align 8, !tbaa !30
  %173 = load i32, ptr %5, align 4, !tbaa !5
  %174 = sext i32 %173 to i64
  %175 = call noalias ptr @calloc(i64 noundef %174, i64 noundef 8) #6
  %176 = load ptr, ptr %10, align 8, !tbaa !11
  %177 = getelementptr inbounds %struct._NormOperator, ptr %176, i32 0, i32 11
  store ptr %175, ptr %177, align 8, !tbaa !31
  %178 = load ptr, ptr %8, align 8, !tbaa !11
  %179 = getelementptr inbounds %struct._WffNode, ptr %178, i32 0, i32 4
  %180 = load ptr, ptr %179, align 8, !tbaa !24
  store ptr %180, ptr %9, align 8, !tbaa !11
  br label %181

181:                                              ; preds = %282, %157
  %182 = load ptr, ptr %9, align 8, !tbaa !11
  %183 = icmp ne ptr %182, null
  br i1 %183, label %184, label %286

184:                                              ; preds = %181
  %185 = load ptr, ptr %9, align 8, !tbaa !11
  %186 = getelementptr inbounds %struct._WffNode, ptr %185, i32 0, i32 0
  %187 = load i32, ptr %186, align 8, !tbaa !22
  %188 = icmp eq i32 %187, 2002
  br i1 %188, label %189, label %236

189:                                              ; preds = %184
  %190 = load ptr, ptr %10, align 8, !tbaa !11
  %191 = getelementptr inbounds %struct._NormOperator, ptr %190, i32 0, i32 7
  %192 = load ptr, ptr %191, align 8, !tbaa !27
  %193 = load ptr, ptr %10, align 8, !tbaa !11
  %194 = getelementptr inbounds %struct._NormOperator, ptr %193, i32 0, i32 8
  %195 = load i32, ptr %194, align 8, !tbaa !32
  %196 = sext i32 %195 to i64
  %197 = getelementptr inbounds %struct._Fact, ptr %192, i64 %196
  store ptr %197, ptr %11, align 8, !tbaa !11
  %198 = load ptr, ptr %9, align 8, !tbaa !11
  %199 = getelementptr inbounds %struct._WffNode, ptr %198, i32 0, i32 7
  %200 = load ptr, ptr %199, align 8, !tbaa !33
  %201 = getelementptr inbounds %struct._Fact, ptr %200, i32 0, i32 0
  %202 = load i32, ptr %201, align 4, !tbaa !34
  %203 = load ptr, ptr %11, align 8, !tbaa !11
  %204 = getelementptr inbounds %struct._Fact, ptr %203, i32 0, i32 0
  store i32 %202, ptr %204, align 4, !tbaa !34
  store i32 0, ptr %2, align 4, !tbaa !5
  br label %205

205:                                              ; preds = %228, %189
  %206 = load i32, ptr %2, align 4, !tbaa !5
  %207 = load ptr, ptr %11, align 8, !tbaa !11
  %208 = getelementptr inbounds %struct._Fact, ptr %207, i32 0, i32 0
  %209 = load i32, ptr %208, align 4, !tbaa !34
  %210 = sext i32 %209 to i64
  %211 = getelementptr inbounds [50 x i32], ptr @garity, i64 0, i64 %210
  %212 = load i32, ptr %211, align 4, !tbaa !5
  %213 = icmp slt i32 %206, %212
  br i1 %213, label %214, label %231

214:                                              ; preds = %205
  %215 = load ptr, ptr %9, align 8, !tbaa !11
  %216 = getelementptr inbounds %struct._WffNode, ptr %215, i32 0, i32 7
  %217 = load ptr, ptr %216, align 8, !tbaa !33
  %218 = getelementptr inbounds %struct._Fact, ptr %217, i32 0, i32 1
  %219 = load i32, ptr %2, align 4, !tbaa !5
  %220 = sext i32 %219 to i64
  %221 = getelementptr inbounds [5 x i32], ptr %218, i64 0, i64 %220
  %222 = load i32, ptr %221, align 4, !tbaa !5
  %223 = load ptr, ptr %11, align 8, !tbaa !11
  %224 = getelementptr inbounds %struct._Fact, ptr %223, i32 0, i32 1
  %225 = load i32, ptr %2, align 4, !tbaa !5
  %226 = sext i32 %225 to i64
  %227 = getelementptr inbounds [5 x i32], ptr %224, i64 0, i64 %226
  store i32 %222, ptr %227, align 4, !tbaa !5
  br label %228

228:                                              ; preds = %214
  %229 = load i32, ptr %2, align 4, !tbaa !5
  %230 = add nsw i32 %229, 1
  store i32 %230, ptr %2, align 4, !tbaa !5
  br label %205, !llvm.loop !36

231:                                              ; preds = %205
  %232 = load ptr, ptr %10, align 8, !tbaa !11
  %233 = getelementptr inbounds %struct._NormOperator, ptr %232, i32 0, i32 8
  %234 = load i32, ptr %233, align 8, !tbaa !32
  %235 = add nsw i32 %234, 1
  store i32 %235, ptr %233, align 8, !tbaa !32
  br label %236

236:                                              ; preds = %231, %184
  %237 = load ptr, ptr %9, align 8, !tbaa !11
  %238 = getelementptr inbounds %struct._WffNode, ptr %237, i32 0, i32 0
  %239 = load i32, ptr %238, align 8, !tbaa !22
  %240 = icmp eq i32 %239, 2003
  br i1 %240, label %241, label %281

241:                                              ; preds = %236
  %242 = load ptr, ptr %9, align 8, !tbaa !11
  %243 = getelementptr inbounds %struct._WffNode, ptr %242, i32 0, i32 10
  %244 = load i32, ptr %243, align 8, !tbaa !37
  %245 = load ptr, ptr %10, align 8, !tbaa !11
  %246 = getelementptr inbounds %struct._NormOperator, ptr %245, i32 0, i32 9
  %247 = load ptr, ptr %246, align 8, !tbaa !29
  %248 = load ptr, ptr %10, align 8, !tbaa !11
  %249 = getelementptr inbounds %struct._NormOperator, ptr %248, i32 0, i32 12
  %250 = load i32, ptr %249, align 8, !tbaa !38
  %251 = sext i32 %250 to i64
  %252 = getelementptr inbounds i32, ptr %247, i64 %251
  store i32 %244, ptr %252, align 4, !tbaa !5
  %253 = load ptr, ptr %9, align 8, !tbaa !11
  %254 = getelementptr inbounds %struct._WffNode, ptr %253, i32 0, i32 11
  %255 = load ptr, ptr %254, align 8, !tbaa !39
  %256 = call ptr @copy_Exp(ptr noundef %255)
  %257 = load ptr, ptr %10, align 8, !tbaa !11
  %258 = getelementptr inbounds %struct._NormOperator, ptr %257, i32 0, i32 10
  %259 = load ptr, ptr %258, align 8, !tbaa !30
  %260 = load ptr, ptr %10, align 8, !tbaa !11
  %261 = getelementptr inbounds %struct._NormOperator, ptr %260, i32 0, i32 12
  %262 = load i32, ptr %261, align 8, !tbaa !38
  %263 = sext i32 %262 to i64
  %264 = getelementptr inbounds ptr, ptr %259, i64 %263
  store ptr %256, ptr %264, align 8, !tbaa !11
  %265 = load ptr, ptr %9, align 8, !tbaa !11
  %266 = getelementptr inbounds %struct._WffNode, ptr %265, i32 0, i32 12
  %267 = load ptr, ptr %266, align 8, !tbaa !40
  %268 = call ptr @copy_Exp(ptr noundef %267)
  %269 = load ptr, ptr %10, align 8, !tbaa !11
  %270 = getelementptr inbounds %struct._NormOperator, ptr %269, i32 0, i32 11
  %271 = load ptr, ptr %270, align 8, !tbaa !31
  %272 = load ptr, ptr %10, align 8, !tbaa !11
  %273 = getelementptr inbounds %struct._NormOperator, ptr %272, i32 0, i32 12
  %274 = load i32, ptr %273, align 8, !tbaa !38
  %275 = sext i32 %274 to i64
  %276 = getelementptr inbounds ptr, ptr %271, i64 %275
  store ptr %268, ptr %276, align 8, !tbaa !11
  %277 = load ptr, ptr %10, align 8, !tbaa !11
  %278 = getelementptr inbounds %struct._NormOperator, ptr %277, i32 0, i32 12
  %279 = load i32, ptr %278, align 8, !tbaa !38
  %280 = add nsw i32 %279, 1
  store i32 %280, ptr %278, align 8, !tbaa !38
  br label %281

281:                                              ; preds = %241, %236
  br label %282

282:                                              ; preds = %281
  %283 = load ptr, ptr %9, align 8, !tbaa !11
  %284 = getelementptr inbounds %struct._WffNode, ptr %283, i32 0, i32 5
  %285 = load ptr, ptr %284, align 8, !tbaa !25
  store ptr %285, ptr %9, align 8, !tbaa !11
  br label %181, !llvm.loop !41

286:                                              ; preds = %181
  br label %377

287:                                              ; preds = %119
  %288 = load ptr, ptr %8, align 8, !tbaa !11
  %289 = getelementptr inbounds %struct._WffNode, ptr %288, i32 0, i32 0
  %290 = load i32, ptr %289, align 8, !tbaa !22
  %291 = icmp eq i32 %290, 2002
  br i1 %291, label %292, label %336

292:                                              ; preds = %287
  %293 = call noalias ptr @calloc(i64 noundef 1, i64 noundef 24) #6
  %294 = load ptr, ptr %10, align 8, !tbaa !11
  %295 = getelementptr inbounds %struct._NormOperator, ptr %294, i32 0, i32 7
  store ptr %293, ptr %295, align 8, !tbaa !27
  %296 = load ptr, ptr %10, align 8, !tbaa !11
  %297 = getelementptr inbounds %struct._NormOperator, ptr %296, i32 0, i32 7
  %298 = load ptr, ptr %297, align 8, !tbaa !27
  %299 = getelementptr inbounds %struct._Fact, ptr %298, i64 0
  store ptr %299, ptr %11, align 8, !tbaa !11
  %300 = load ptr, ptr %8, align 8, !tbaa !11
  %301 = getelementptr inbounds %struct._WffNode, ptr %300, i32 0, i32 7
  %302 = load ptr, ptr %301, align 8, !tbaa !33
  %303 = getelementptr inbounds %struct._Fact, ptr %302, i32 0, i32 0
  %304 = load i32, ptr %303, align 4, !tbaa !34
  %305 = load ptr, ptr %11, align 8, !tbaa !11
  %306 = getelementptr inbounds %struct._Fact, ptr %305, i32 0, i32 0
  store i32 %304, ptr %306, align 4, !tbaa !34
  store i32 0, ptr %2, align 4, !tbaa !5
  br label %307

307:                                              ; preds = %330, %292
  %308 = load i32, ptr %2, align 4, !tbaa !5
  %309 = load ptr, ptr %11, align 8, !tbaa !11
  %310 = getelementptr inbounds %struct._Fact, ptr %309, i32 0, i32 0
  %311 = load i32, ptr %310, align 4, !tbaa !34
  %312 = sext i32 %311 to i64
  %313 = getelementptr inbounds [50 x i32], ptr @garity, i64 0, i64 %312
  %314 = load i32, ptr %313, align 4, !tbaa !5
  %315 = icmp slt i32 %308, %314
  br i1 %315, label %316, label %333

316:                                              ; preds = %307
  %317 = load ptr, ptr %8, align 8, !tbaa !11
  %318 = getelementptr inbounds %struct._WffNode, ptr %317, i32 0, i32 7
  %319 = load ptr, ptr %318, align 8, !tbaa !33
  %320 = getelementptr inbounds %struct._Fact, ptr %319, i32 0, i32 1
  %321 = load i32, ptr %2, align 4, !tbaa !5
  %322 = sext i32 %321 to i64
  %323 = getelementptr inbounds [5 x i32], ptr %320, i64 0, i64 %322
  %324 = load i32, ptr %323, align 4, !tbaa !5
  %325 = load ptr, ptr %11, align 8, !tbaa !11
  %326 = getelementptr inbounds %struct._Fact, ptr %325, i32 0, i32 1
  %327 = load i32, ptr %2, align 4, !tbaa !5
  %328 = sext i32 %327 to i64
  %329 = getelementptr inbounds [5 x i32], ptr %326, i64 0, i64 %328
  store i32 %324, ptr %329, align 4, !tbaa !5
  br label %330

330:                                              ; preds = %316
  %331 = load i32, ptr %2, align 4, !tbaa !5
  %332 = add nsw i32 %331, 1
  store i32 %332, ptr %2, align 4, !tbaa !5
  br label %307, !llvm.loop !42

333:                                              ; preds = %307
  %334 = load ptr, ptr %10, align 8, !tbaa !11
  %335 = getelementptr inbounds %struct._NormOperator, ptr %334, i32 0, i32 8
  store i32 1, ptr %335, align 8, !tbaa !32
  br label %336

336:                                              ; preds = %333, %287
  %337 = load ptr, ptr %8, align 8, !tbaa !11
  %338 = getelementptr inbounds %struct._WffNode, ptr %337, i32 0, i32 0
  %339 = load i32, ptr %338, align 8, !tbaa !22
  %340 = icmp eq i32 %339, 2003
  br i1 %340, label %341, label %376

341:                                              ; preds = %336
  %342 = call noalias ptr @calloc(i64 noundef 1, i64 noundef 4) #6
  %343 = load ptr, ptr %10, align 8, !tbaa !11
  %344 = getelementptr inbounds %struct._NormOperator, ptr %343, i32 0, i32 9
  store ptr %342, ptr %344, align 8, !tbaa !29
  %345 = call noalias ptr @calloc(i64 noundef 1, i64 noundef 8) #6
  %346 = load ptr, ptr %10, align 8, !tbaa !11
  %347 = getelementptr inbounds %struct._NormOperator, ptr %346, i32 0, i32 10
  store ptr %345, ptr %347, align 8, !tbaa !30
  %348 = call noalias ptr @calloc(i64 noundef 1, i64 noundef 8) #6
  %349 = load ptr, ptr %10, align 8, !tbaa !11
  %350 = getelementptr inbounds %struct._NormOperator, ptr %349, i32 0, i32 11
  store ptr %348, ptr %350, align 8, !tbaa !31
  %351 = load ptr, ptr %8, align 8, !tbaa !11
  %352 = getelementptr inbounds %struct._WffNode, ptr %351, i32 0, i32 10
  %353 = load i32, ptr %352, align 8, !tbaa !37
  %354 = load ptr, ptr %10, align 8, !tbaa !11
  %355 = getelementptr inbounds %struct._NormOperator, ptr %354, i32 0, i32 9
  %356 = load ptr, ptr %355, align 8, !tbaa !29
  %357 = getelementptr inbounds i32, ptr %356, i64 0
  store i32 %353, ptr %357, align 4, !tbaa !5
  %358 = load ptr, ptr %8, align 8, !tbaa !11
  %359 = getelementptr inbounds %struct._WffNode, ptr %358, i32 0, i32 11
  %360 = load ptr, ptr %359, align 8, !tbaa !39
  %361 = call ptr @copy_Exp(ptr noundef %360)
  %362 = load ptr, ptr %10, align 8, !tbaa !11
  %363 = getelementptr inbounds %struct._NormOperator, ptr %362, i32 0, i32 10
  %364 = load ptr, ptr %363, align 8, !tbaa !30
  %365 = getelementptr inbounds ptr, ptr %364, i64 0
  store ptr %361, ptr %365, align 8, !tbaa !11
  %366 = load ptr, ptr %8, align 8, !tbaa !11
  %367 = getelementptr inbounds %struct._WffNode, ptr %366, i32 0, i32 12
  %368 = load ptr, ptr %367, align 8, !tbaa !40
  %369 = call ptr @copy_Exp(ptr noundef %368)
  %370 = load ptr, ptr %10, align 8, !tbaa !11
  %371 = getelementptr inbounds %struct._NormOperator, ptr %370, i32 0, i32 11
  %372 = load ptr, ptr %371, align 8, !tbaa !31
  %373 = getelementptr inbounds ptr, ptr %372, i64 0
  store ptr %369, ptr %373, align 8, !tbaa !11
  %374 = load ptr, ptr %10, align 8, !tbaa !11
  %375 = getelementptr inbounds %struct._NormOperator, ptr %374, i32 0, i32 12
  store i32 1, ptr %375, align 8, !tbaa !38
  br label %376

376:                                              ; preds = %341, %336
  br label %377

377:                                              ; preds = %376, %286
  %378 = load i32, ptr %1, align 4, !tbaa !5
  %379 = sext i32 %378 to i64
  %380 = getelementptr inbounds [50000 x ptr], ptr @goperators, i64 0, i64 %379
  %381 = load ptr, ptr %380, align 8, !tbaa !11
  call void @make_normal_effects(ptr noundef %10, ptr noundef %381)
  %382 = load ptr, ptr %10, align 8, !tbaa !11
  %383 = load ptr, ptr @geasy_operators, align 8, !tbaa !11
  %384 = load i32, ptr @gnum_easy_operators, align 4, !tbaa !5
  %385 = add nsw i32 %384, 1
  store i32 %385, ptr @gnum_easy_operators, align 4, !tbaa !5
  %386 = sext i32 %384 to i64
  %387 = getelementptr inbounds ptr, ptr %383, i64 %386
  store ptr %382, ptr %387, align 8, !tbaa !11
  br label %388

388:                                              ; preds = %377
  %389 = load ptr, ptr %8, align 8, !tbaa !11
  %390 = getelementptr inbounds %struct._WffNode, ptr %389, i32 0, i32 5
  %391 = load ptr, ptr %390, align 8, !tbaa !25
  store ptr %391, ptr %8, align 8, !tbaa !11
  br label %116, !llvm.loop !43

392:                                              ; preds = %116
  br label %693

393:                                              ; preds = %102
  %394 = load i32, ptr %1, align 4, !tbaa !5
  %395 = sext i32 %394 to i64
  %396 = getelementptr inbounds [50000 x ptr], ptr @goperators, i64 0, i64 %395
  %397 = load ptr, ptr %396, align 8, !tbaa !11
  %398 = call ptr @new_NormOperator(ptr noundef %397)
  store ptr %398, ptr %10, align 8, !tbaa !11
  store i32 0, ptr %3, align 4, !tbaa !5
  store i32 0, ptr %5, align 4, !tbaa !5
  %399 = load ptr, ptr %7, align 8, !tbaa !11
  %400 = getelementptr inbounds %struct._WffNode, ptr %399, i32 0, i32 4
  %401 = load ptr, ptr %400, align 8, !tbaa !24
  store ptr %401, ptr %8, align 8, !tbaa !11
  br label %402

402:                                              ; preds = %422, %393
  %403 = load ptr, ptr %8, align 8, !tbaa !11
  %404 = icmp ne ptr %403, null
  br i1 %404, label %405, label %426

405:                                              ; preds = %402
  %406 = load ptr, ptr %8, align 8, !tbaa !11
  %407 = getelementptr inbounds %struct._WffNode, ptr %406, i32 0, i32 0
  %408 = load i32, ptr %407, align 8, !tbaa !22
  %409 = icmp eq i32 %408, 2002
  br i1 %409, label %410, label %413

410:                                              ; preds = %405
  %411 = load i32, ptr %3, align 4, !tbaa !5
  %412 = add nsw i32 %411, 1
  store i32 %412, ptr %3, align 4, !tbaa !5
  br label %413

413:                                              ; preds = %410, %405
  %414 = load ptr, ptr %8, align 8, !tbaa !11
  %415 = getelementptr inbounds %struct._WffNode, ptr %414, i32 0, i32 0
  %416 = load i32, ptr %415, align 8, !tbaa !22
  %417 = icmp eq i32 %416, 2003
  br i1 %417, label %418, label %421

418:                                              ; preds = %413
  %419 = load i32, ptr %5, align 4, !tbaa !5
  %420 = add nsw i32 %419, 1
  store i32 %420, ptr %5, align 4, !tbaa !5
  br label %421

421:                                              ; preds = %418, %413
  br label %422

422:                                              ; preds = %421
  %423 = load ptr, ptr %8, align 8, !tbaa !11
  %424 = getelementptr inbounds %struct._WffNode, ptr %423, i32 0, i32 5
  %425 = load ptr, ptr %424, align 8, !tbaa !25
  store ptr %425, ptr %8, align 8, !tbaa !11
  br label %402, !llvm.loop !44

426:                                              ; preds = %402
  %427 = load i32, ptr %3, align 4, !tbaa !5
  %428 = sext i32 %427 to i64
  %429 = call noalias ptr @calloc(i64 noundef %428, i64 noundef 24) #6
  %430 = load ptr, ptr %10, align 8, !tbaa !11
  %431 = getelementptr inbounds %struct._NormOperator, ptr %430, i32 0, i32 7
  store ptr %429, ptr %431, align 8, !tbaa !27
  %432 = load i32, ptr %5, align 4, !tbaa !5
  %433 = sext i32 %432 to i64
  %434 = call noalias ptr @calloc(i64 noundef %433, i64 noundef 4) #6
  %435 = load ptr, ptr %10, align 8, !tbaa !11
  %436 = getelementptr inbounds %struct._NormOperator, ptr %435, i32 0, i32 9
  store ptr %434, ptr %436, align 8, !tbaa !29
  %437 = load i32, ptr %5, align 4, !tbaa !5
  %438 = sext i32 %437 to i64
  %439 = call noalias ptr @calloc(i64 noundef %438, i64 noundef 8) #6
  %440 = load ptr, ptr %10, align 8, !tbaa !11
  %441 = getelementptr inbounds %struct._NormOperator, ptr %440, i32 0, i32 10
  store ptr %439, ptr %441, align 8, !tbaa !30
  %442 = load i32, ptr %5, align 4, !tbaa !5
  %443 = sext i32 %442 to i64
  %444 = call noalias ptr @calloc(i64 noundef %443, i64 noundef 8) #6
  %445 = load ptr, ptr %10, align 8, !tbaa !11
  %446 = getelementptr inbounds %struct._NormOperator, ptr %445, i32 0, i32 11
  store ptr %444, ptr %446, align 8, !tbaa !31
  %447 = load ptr, ptr %7, align 8, !tbaa !11
  %448 = getelementptr inbounds %struct._WffNode, ptr %447, i32 0, i32 4
  %449 = load ptr, ptr %448, align 8, !tbaa !24
  store ptr %449, ptr %8, align 8, !tbaa !11
  br label %450

450:                                              ; preds = %551, %426
  %451 = load ptr, ptr %8, align 8, !tbaa !11
  %452 = icmp ne ptr %451, null
  br i1 %452, label %453, label %555

453:                                              ; preds = %450
  %454 = load ptr, ptr %8, align 8, !tbaa !11
  %455 = getelementptr inbounds %struct._WffNode, ptr %454, i32 0, i32 0
  %456 = load i32, ptr %455, align 8, !tbaa !22
  %457 = icmp eq i32 %456, 2002
  br i1 %457, label %458, label %505

458:                                              ; preds = %453
  %459 = load ptr, ptr %10, align 8, !tbaa !11
  %460 = getelementptr inbounds %struct._NormOperator, ptr %459, i32 0, i32 7
  %461 = load ptr, ptr %460, align 8, !tbaa !27
  %462 = load ptr, ptr %10, align 8, !tbaa !11
  %463 = getelementptr inbounds %struct._NormOperator, ptr %462, i32 0, i32 8
  %464 = load i32, ptr %463, align 8, !tbaa !32
  %465 = sext i32 %464 to i64
  %466 = getelementptr inbounds %struct._Fact, ptr %461, i64 %465
  store ptr %466, ptr %11, align 8, !tbaa !11
  %467 = load ptr, ptr %8, align 8, !tbaa !11
  %468 = getelementptr inbounds %struct._WffNode, ptr %467, i32 0, i32 7
  %469 = load ptr, ptr %468, align 8, !tbaa !33
  %470 = getelementptr inbounds %struct._Fact, ptr %469, i32 0, i32 0
  %471 = load i32, ptr %470, align 4, !tbaa !34
  %472 = load ptr, ptr %11, align 8, !tbaa !11
  %473 = getelementptr inbounds %struct._Fact, ptr %472, i32 0, i32 0
  store i32 %471, ptr %473, align 4, !tbaa !34
  store i32 0, ptr %2, align 4, !tbaa !5
  br label %474

474:                                              ; preds = %497, %458
  %475 = load i32, ptr %2, align 4, !tbaa !5
  %476 = load ptr, ptr %11, align 8, !tbaa !11
  %477 = getelementptr inbounds %struct._Fact, ptr %476, i32 0, i32 0
  %478 = load i32, ptr %477, align 4, !tbaa !34
  %479 = sext i32 %478 to i64
  %480 = getelementptr inbounds [50 x i32], ptr @garity, i64 0, i64 %479
  %481 = load i32, ptr %480, align 4, !tbaa !5
  %482 = icmp slt i32 %475, %481
  br i1 %482, label %483, label %500

483:                                              ; preds = %474
  %484 = load ptr, ptr %8, align 8, !tbaa !11
  %485 = getelementptr inbounds %struct._WffNode, ptr %484, i32 0, i32 7
  %486 = load ptr, ptr %485, align 8, !tbaa !33
  %487 = getelementptr inbounds %struct._Fact, ptr %486, i32 0, i32 1
  %488 = load i32, ptr %2, align 4, !tbaa !5
  %489 = sext i32 %488 to i64
  %490 = getelementptr inbounds [5 x i32], ptr %487, i64 0, i64 %489
  %491 = load i32, ptr %490, align 4, !tbaa !5
  %492 = load ptr, ptr %11, align 8, !tbaa !11
  %493 = getelementptr inbounds %struct._Fact, ptr %492, i32 0, i32 1
  %494 = load i32, ptr %2, align 4, !tbaa !5
  %495 = sext i32 %494 to i64
  %496 = getelementptr inbounds [5 x i32], ptr %493, i64 0, i64 %495
  store i32 %491, ptr %496, align 4, !tbaa !5
  br label %497

497:                                              ; preds = %483
  %498 = load i32, ptr %2, align 4, !tbaa !5
  %499 = add nsw i32 %498, 1
  store i32 %499, ptr %2, align 4, !tbaa !5
  br label %474, !llvm.loop !45

500:                                              ; preds = %474
  %501 = load ptr, ptr %10, align 8, !tbaa !11
  %502 = getelementptr inbounds %struct._NormOperator, ptr %501, i32 0, i32 8
  %503 = load i32, ptr %502, align 8, !tbaa !32
  %504 = add nsw i32 %503, 1
  store i32 %504, ptr %502, align 8, !tbaa !32
  br label %505

505:                                              ; preds = %500, %453
  %506 = load ptr, ptr %8, align 8, !tbaa !11
  %507 = getelementptr inbounds %struct._WffNode, ptr %506, i32 0, i32 0
  %508 = load i32, ptr %507, align 8, !tbaa !22
  %509 = icmp eq i32 %508, 2003
  br i1 %509, label %510, label %550

510:                                              ; preds = %505
  %511 = load ptr, ptr %8, align 8, !tbaa !11
  %512 = getelementptr inbounds %struct._WffNode, ptr %511, i32 0, i32 10
  %513 = load i32, ptr %512, align 8, !tbaa !37
  %514 = load ptr, ptr %10, align 8, !tbaa !11
  %515 = getelementptr inbounds %struct._NormOperator, ptr %514, i32 0, i32 9
  %516 = load ptr, ptr %515, align 8, !tbaa !29
  %517 = load ptr, ptr %10, align 8, !tbaa !11
  %518 = getelementptr inbounds %struct._NormOperator, ptr %517, i32 0, i32 12
  %519 = load i32, ptr %518, align 8, !tbaa !38
  %520 = sext i32 %519 to i64
  %521 = getelementptr inbounds i32, ptr %516, i64 %520
  store i32 %513, ptr %521, align 4, !tbaa !5
  %522 = load ptr, ptr %8, align 8, !tbaa !11
  %523 = getelementptr inbounds %struct._WffNode, ptr %522, i32 0, i32 11
  %524 = load ptr, ptr %523, align 8, !tbaa !39
  %525 = call ptr @copy_Exp(ptr noundef %524)
  %526 = load ptr, ptr %10, align 8, !tbaa !11
  %527 = getelementptr inbounds %struct._NormOperator, ptr %526, i32 0, i32 10
  %528 = load ptr, ptr %527, align 8, !tbaa !30
  %529 = load ptr, ptr %10, align 8, !tbaa !11
  %530 = getelementptr inbounds %struct._NormOperator, ptr %529, i32 0, i32 12
  %531 = load i32, ptr %530, align 8, !tbaa !38
  %532 = sext i32 %531 to i64
  %533 = getelementptr inbounds ptr, ptr %528, i64 %532
  store ptr %525, ptr %533, align 8, !tbaa !11
  %534 = load ptr, ptr %8, align 8, !tbaa !11
  %535 = getelementptr inbounds %struct._WffNode, ptr %534, i32 0, i32 12
  %536 = load ptr, ptr %535, align 8, !tbaa !40
  %537 = call ptr @copy_Exp(ptr noundef %536)
  %538 = load ptr, ptr %10, align 8, !tbaa !11
  %539 = getelementptr inbounds %struct._NormOperator, ptr %538, i32 0, i32 11
  %540 = load ptr, ptr %539, align 8, !tbaa !31
  %541 = load ptr, ptr %10, align 8, !tbaa !11
  %542 = getelementptr inbounds %struct._NormOperator, ptr %541, i32 0, i32 12
  %543 = load i32, ptr %542, align 8, !tbaa !38
  %544 = sext i32 %543 to i64
  %545 = getelementptr inbounds ptr, ptr %540, i64 %544
  store ptr %537, ptr %545, align 8, !tbaa !11
  %546 = load ptr, ptr %10, align 8, !tbaa !11
  %547 = getelementptr inbounds %struct._NormOperator, ptr %546, i32 0, i32 12
  %548 = load i32, ptr %547, align 8, !tbaa !38
  %549 = add nsw i32 %548, 1
  store i32 %549, ptr %547, align 8, !tbaa !38
  br label %550

550:                                              ; preds = %510, %505
  br label %551

551:                                              ; preds = %550
  %552 = load ptr, ptr %8, align 8, !tbaa !11
  %553 = getelementptr inbounds %struct._WffNode, ptr %552, i32 0, i32 5
  %554 = load ptr, ptr %553, align 8, !tbaa !25
  store ptr %554, ptr %8, align 8, !tbaa !11
  br label %450, !llvm.loop !46

555:                                              ; preds = %450
  %556 = load i32, ptr %1, align 4, !tbaa !5
  %557 = sext i32 %556 to i64
  %558 = getelementptr inbounds [50000 x ptr], ptr @goperators, i64 0, i64 %557
  %559 = load ptr, ptr %558, align 8, !tbaa !11
  call void @make_normal_effects(ptr noundef %10, ptr noundef %559)
  %560 = load ptr, ptr %10, align 8, !tbaa !11
  %561 = load ptr, ptr @geasy_operators, align 8, !tbaa !11
  %562 = load i32, ptr @gnum_easy_operators, align 4, !tbaa !5
  %563 = add nsw i32 %562, 1
  store i32 %563, ptr @gnum_easy_operators, align 4, !tbaa !5
  %564 = sext i32 %562 to i64
  %565 = getelementptr inbounds ptr, ptr %561, i64 %564
  store ptr %560, ptr %565, align 8, !tbaa !11
  br label %693

566:                                              ; preds = %102
  %567 = load i32, ptr %1, align 4, !tbaa !5
  %568 = sext i32 %567 to i64
  %569 = getelementptr inbounds [50000 x ptr], ptr @goperators, i64 0, i64 %568
  %570 = load ptr, ptr %569, align 8, !tbaa !11
  %571 = call ptr @new_NormOperator(ptr noundef %570)
  store ptr %571, ptr %10, align 8, !tbaa !11
  %572 = call noalias ptr @calloc(i64 noundef 1, i64 noundef 24) #6
  %573 = load ptr, ptr %10, align 8, !tbaa !11
  %574 = getelementptr inbounds %struct._NormOperator, ptr %573, i32 0, i32 7
  store ptr %572, ptr %574, align 8, !tbaa !27
  %575 = load ptr, ptr %10, align 8, !tbaa !11
  %576 = getelementptr inbounds %struct._NormOperator, ptr %575, i32 0, i32 7
  %577 = load ptr, ptr %576, align 8, !tbaa !27
  %578 = getelementptr inbounds %struct._Fact, ptr %577, i64 0
  store ptr %578, ptr %11, align 8, !tbaa !11
  %579 = load ptr, ptr %7, align 8, !tbaa !11
  %580 = getelementptr inbounds %struct._WffNode, ptr %579, i32 0, i32 7
  %581 = load ptr, ptr %580, align 8, !tbaa !33
  %582 = getelementptr inbounds %struct._Fact, ptr %581, i32 0, i32 0
  %583 = load i32, ptr %582, align 4, !tbaa !34
  %584 = load ptr, ptr %11, align 8, !tbaa !11
  %585 = getelementptr inbounds %struct._Fact, ptr %584, i32 0, i32 0
  store i32 %583, ptr %585, align 4, !tbaa !34
  store i32 0, ptr %2, align 4, !tbaa !5
  br label %586

586:                                              ; preds = %609, %566
  %587 = load i32, ptr %2, align 4, !tbaa !5
  %588 = load ptr, ptr %11, align 8, !tbaa !11
  %589 = getelementptr inbounds %struct._Fact, ptr %588, i32 0, i32 0
  %590 = load i32, ptr %589, align 4, !tbaa !34
  %591 = sext i32 %590 to i64
  %592 = getelementptr inbounds [50 x i32], ptr @garity, i64 0, i64 %591
  %593 = load i32, ptr %592, align 4, !tbaa !5
  %594 = icmp slt i32 %587, %593
  br i1 %594, label %595, label %612

595:                                              ; preds = %586
  %596 = load ptr, ptr %7, align 8, !tbaa !11
  %597 = getelementptr inbounds %struct._WffNode, ptr %596, i32 0, i32 7
  %598 = load ptr, ptr %597, align 8, !tbaa !33
  %599 = getelementptr inbounds %struct._Fact, ptr %598, i32 0, i32 1
  %600 = load i32, ptr %2, align 4, !tbaa !5
  %601 = sext i32 %600 to i64
  %602 = getelementptr inbounds [5 x i32], ptr %599, i64 0, i64 %601
  %603 = load i32, ptr %602, align 4, !tbaa !5
  %604 = load ptr, ptr %11, align 8, !tbaa !11
  %605 = getelementptr inbounds %struct._Fact, ptr %604, i32 0, i32 1
  %606 = load i32, ptr %2, align 4, !tbaa !5
  %607 = sext i32 %606 to i64
  %608 = getelementptr inbounds [5 x i32], ptr %605, i64 0, i64 %607
  store i32 %603, ptr %608, align 4, !tbaa !5
  br label %609

609:                                              ; preds = %595
  %610 = load i32, ptr %2, align 4, !tbaa !5
  %611 = add nsw i32 %610, 1
  store i32 %611, ptr %2, align 4, !tbaa !5
  br label %586, !llvm.loop !47

612:                                              ; preds = %586
  %613 = load ptr, ptr %10, align 8, !tbaa !11
  %614 = getelementptr inbounds %struct._NormOperator, ptr %613, i32 0, i32 8
  store i32 1, ptr %614, align 8, !tbaa !32
  %615 = load i32, ptr %1, align 4, !tbaa !5
  %616 = sext i32 %615 to i64
  %617 = getelementptr inbounds [50000 x ptr], ptr @goperators, i64 0, i64 %616
  %618 = load ptr, ptr %617, align 8, !tbaa !11
  call void @make_normal_effects(ptr noundef %10, ptr noundef %618)
  %619 = load ptr, ptr %10, align 8, !tbaa !11
  %620 = load ptr, ptr @geasy_operators, align 8, !tbaa !11
  %621 = load i32, ptr @gnum_easy_operators, align 4, !tbaa !5
  %622 = add nsw i32 %621, 1
  store i32 %622, ptr @gnum_easy_operators, align 4, !tbaa !5
  %623 = sext i32 %621 to i64
  %624 = getelementptr inbounds ptr, ptr %620, i64 %623
  store ptr %619, ptr %624, align 8, !tbaa !11
  br label %693

625:                                              ; preds = %102
  %626 = load i32, ptr %1, align 4, !tbaa !5
  %627 = sext i32 %626 to i64
  %628 = getelementptr inbounds [50000 x ptr], ptr @goperators, i64 0, i64 %627
  %629 = load ptr, ptr %628, align 8, !tbaa !11
  %630 = call ptr @new_NormOperator(ptr noundef %629)
  store ptr %630, ptr %10, align 8, !tbaa !11
  %631 = call noalias ptr @calloc(i64 noundef 1, i64 noundef 4) #6
  %632 = load ptr, ptr %10, align 8, !tbaa !11
  %633 = getelementptr inbounds %struct._NormOperator, ptr %632, i32 0, i32 9
  store ptr %631, ptr %633, align 8, !tbaa !29
  %634 = call noalias ptr @calloc(i64 noundef 1, i64 noundef 8) #6
  %635 = load ptr, ptr %10, align 8, !tbaa !11
  %636 = getelementptr inbounds %struct._NormOperator, ptr %635, i32 0, i32 10
  store ptr %634, ptr %636, align 8, !tbaa !30
  %637 = call noalias ptr @calloc(i64 noundef 1, i64 noundef 8) #6
  %638 = load ptr, ptr %10, align 8, !tbaa !11
  %639 = getelementptr inbounds %struct._NormOperator, ptr %638, i32 0, i32 11
  store ptr %637, ptr %639, align 8, !tbaa !31
  %640 = load ptr, ptr %7, align 8, !tbaa !11
  %641 = getelementptr inbounds %struct._WffNode, ptr %640, i32 0, i32 10
  %642 = load i32, ptr %641, align 8, !tbaa !37
  %643 = load ptr, ptr %10, align 8, !tbaa !11
  %644 = getelementptr inbounds %struct._NormOperator, ptr %643, i32 0, i32 9
  %645 = load ptr, ptr %644, align 8, !tbaa !29
  %646 = getelementptr inbounds i32, ptr %645, i64 0
  store i32 %642, ptr %646, align 4, !tbaa !5
  %647 = load ptr, ptr %7, align 8, !tbaa !11
  %648 = getelementptr inbounds %struct._WffNode, ptr %647, i32 0, i32 11
  %649 = load ptr, ptr %648, align 8, !tbaa !39
  %650 = call ptr @copy_Exp(ptr noundef %649)
  %651 = load ptr, ptr %10, align 8, !tbaa !11
  %652 = getelementptr inbounds %struct._NormOperator, ptr %651, i32 0, i32 10
  %653 = load ptr, ptr %652, align 8, !tbaa !30
  %654 = getelementptr inbounds ptr, ptr %653, i64 0
  store ptr %650, ptr %654, align 8, !tbaa !11
  %655 = load ptr, ptr %7, align 8, !tbaa !11
  %656 = getelementptr inbounds %struct._WffNode, ptr %655, i32 0, i32 12
  %657 = load ptr, ptr %656, align 8, !tbaa !40
  %658 = call ptr @copy_Exp(ptr noundef %657)
  %659 = load ptr, ptr %10, align 8, !tbaa !11
  %660 = getelementptr inbounds %struct._NormOperator, ptr %659, i32 0, i32 11
  %661 = load ptr, ptr %660, align 8, !tbaa !31
  %662 = getelementptr inbounds ptr, ptr %661, i64 0
  store ptr %658, ptr %662, align 8, !tbaa !11
  %663 = load ptr, ptr %10, align 8, !tbaa !11
  %664 = getelementptr inbounds %struct._NormOperator, ptr %663, i32 0, i32 12
  store i32 1, ptr %664, align 8, !tbaa !38
  %665 = load i32, ptr %1, align 4, !tbaa !5
  %666 = sext i32 %665 to i64
  %667 = getelementptr inbounds [50000 x ptr], ptr @goperators, i64 0, i64 %666
  %668 = load ptr, ptr %667, align 8, !tbaa !11
  call void @make_normal_effects(ptr noundef %10, ptr noundef %668)
  %669 = load ptr, ptr %10, align 8, !tbaa !11
  %670 = load ptr, ptr @geasy_operators, align 8, !tbaa !11
  %671 = load i32, ptr @gnum_easy_operators, align 4, !tbaa !5
  %672 = add nsw i32 %671, 1
  store i32 %672, ptr @gnum_easy_operators, align 4, !tbaa !5
  %673 = sext i32 %671 to i64
  %674 = getelementptr inbounds ptr, ptr %670, i64 %673
  store ptr %669, ptr %674, align 8, !tbaa !11
  br label %693

675:                                              ; preds = %102
  %676 = load i32, ptr %1, align 4, !tbaa !5
  %677 = sext i32 %676 to i64
  %678 = getelementptr inbounds [50000 x ptr], ptr @goperators, i64 0, i64 %677
  %679 = load ptr, ptr %678, align 8, !tbaa !11
  %680 = call ptr @new_NormOperator(ptr noundef %679)
  store ptr %680, ptr %10, align 8, !tbaa !11
  %681 = load i32, ptr %1, align 4, !tbaa !5
  %682 = sext i32 %681 to i64
  %683 = getelementptr inbounds [50000 x ptr], ptr @goperators, i64 0, i64 %682
  %684 = load ptr, ptr %683, align 8, !tbaa !11
  call void @make_normal_effects(ptr noundef %10, ptr noundef %684)
  %685 = load ptr, ptr %10, align 8, !tbaa !11
  %686 = load ptr, ptr @geasy_operators, align 8, !tbaa !11
  %687 = load i32, ptr @gnum_easy_operators, align 4, !tbaa !5
  %688 = add nsw i32 %687, 1
  store i32 %688, ptr @gnum_easy_operators, align 4, !tbaa !5
  %689 = sext i32 %687 to i64
  %690 = getelementptr inbounds ptr, ptr %686, i64 %689
  store ptr %685, ptr %690, align 8, !tbaa !11
  br label %693

691:                                              ; preds = %102
  %692 = call i32 (ptr, ...) @printf(ptr noundef @.str.121)
  call void @exit(i32 noundef 1) #7
  unreachable

693:                                              ; preds = %675, %625, %612, %555, %392, %102
  br label %694

694:                                              ; preds = %693, %92
  %695 = load i32, ptr %1, align 4, !tbaa !5
  %696 = add nsw i32 %695, 1
  store i32 %696, ptr %1, align 4, !tbaa !5
  br label %80, !llvm.loop !48

697:                                              ; preds = %80
  %698 = load i32, ptr getelementptr inbounds (%struct._command_line, ptr @gcmd_line, i32 0, i32 3), align 4, !tbaa !49
  %699 = icmp eq i32 %698, 109
  br i1 %699, label %700, label %732

700:                                              ; preds = %697
  %701 = call i32 (ptr, ...) @printf(ptr noundef @.str.122)
  %702 = call i32 (ptr, ...) @printf(ptr noundef @.str.123)
  store i32 0, ptr %1, align 4, !tbaa !5
  br label %703

703:                                              ; preds = %713, %700
  %704 = load i32, ptr %1, align 4, !tbaa !5
  %705 = load i32, ptr @gnum_easy_operators, align 4, !tbaa !5
  %706 = icmp slt i32 %704, %705
  br i1 %706, label %707, label %716

707:                                              ; preds = %703
  %708 = load ptr, ptr @geasy_operators, align 8, !tbaa !11
  %709 = load i32, ptr %1, align 4, !tbaa !5
  %710 = sext i32 %709 to i64
  %711 = getelementptr inbounds ptr, ptr %708, i64 %710
  %712 = load ptr, ptr %711, align 8, !tbaa !11
  call void @print_NormOperator(ptr noundef %712)
  br label %713

713:                                              ; preds = %707
  %714 = load i32, ptr %1, align 4, !tbaa !5
  %715 = add nsw i32 %714, 1
  store i32 %715, ptr %1, align 4, !tbaa !5
  br label %703, !llvm.loop !52

716:                                              ; preds = %703
  %717 = call i32 (ptr, ...) @printf(ptr noundef @.str.124)
  store i32 0, ptr %1, align 4, !tbaa !5
  br label %718

718:                                              ; preds = %728, %716
  %719 = load i32, ptr %1, align 4, !tbaa !5
  %720 = load i32, ptr @gnum_hard_operators, align 4, !tbaa !5
  %721 = icmp slt i32 %719, %720
  br i1 %721, label %722, label %731

722:                                              ; preds = %718
  %723 = load ptr, ptr @ghard_operators, align 8, !tbaa !11
  %724 = load i32, ptr %1, align 4, !tbaa !5
  %725 = sext i32 %724 to i64
  %726 = getelementptr inbounds ptr, ptr %723, i64 %725
  %727 = load ptr, ptr %726, align 8, !tbaa !11
  call void @print_Operator(ptr noundef %727)
  br label %728

728:                                              ; preds = %722
  %729 = load i32, ptr %1, align 4, !tbaa !5
  %730 = add nsw i32 %729, 1
  store i32 %730, ptr %1, align 4, !tbaa !5
  br label %718, !llvm.loop !53

731:                                              ; preds = %718
  br label %732

732:                                              ; preds = %731, %697
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #5
  call void @llvm.lifetime.end.p0(i64 4, 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
}

; Function Attrs: nounwind uwtable
declare dso_local i32 @is_dnf(ptr noundef) #4

declare ptr @new_NormOperator(ptr noundef) #1

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

declare void @print_NormOperator(ptr noundef) #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 = { nounwind allocsize(0,1) }
attributes #7 = { noreturn nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = distinct !{!9, !10}
!10 = !{!"llvm.loop.mustprogress"}
!11 = !{!12, !12, i64 0}
!12 = !{!"any pointer", !7, i64 0}
!13 = !{!14, !12, i64 216}
!14 = !{!"_Operator", !12, i64 0, !7, i64 8, !6, i64 128, !7, i64 132, !6, i64 136, !7, i64 140, !7, i64 200, !12, i64 216, !12, i64 224, !7, i64 232}
!15 = !{!14, !12, i64 224}
!16 = !{!17, !12, i64 184}
!17 = !{!"_Effect", !6, i64 0, !7, i64 4, !7, i64 64, !12, i64 184, !12, i64 192, !12, i64 200, !12, i64 208, !12, i64 216}
!18 = !{!17, !12, i64 208}
!19 = distinct !{!19, !10}
!20 = !{!14, !7, i64 232}
!21 = distinct !{!21, !10}
!22 = !{!23, !6, i64 0}
!23 = !{!"_WffNode", !6, i64 0, !6, i64 4, !6, i64 8, !12, i64 16, !12, i64 24, !12, i64 32, !12, i64 40, !12, i64 48, !6, i64 56, !12, i64 64, !6, i64 72, !12, i64 80, !12, i64 88, !7, i64 96}
!24 = !{!23, !12, i64 24}
!25 = !{!23, !12, i64 32}
!26 = distinct !{!26, !10}
!27 = !{!28, !12, i64 256}
!28 = !{!"_NormOperator", !12, i64 0, !6, i64 8, !7, i64 12, !7, i64 72, !7, i64 132, !6, i64 192, !7, i64 196, !12, i64 256, !6, i64 264, !12, i64 272, !12, i64 280, !12, i64 288, !6, i64 296, !12, i64 304, !7, i64 312}
!29 = !{!28, !12, i64 272}
!30 = !{!28, !12, i64 280}
!31 = !{!28, !12, i64 288}
!32 = !{!28, !6, i64 264}
!33 = !{!23, !12, i64 48}
!34 = !{!35, !6, i64 0}
!35 = !{!"_Fact", !6, i64 0, !7, i64 4}
!36 = distinct !{!36, !10}
!37 = !{!23, !6, i64 72}
!38 = !{!28, !6, i64 296}
!39 = !{!23, !12, i64 80}
!40 = !{!23, !12, i64 88}
!41 = distinct !{!41, !10}
!42 = distinct !{!42, !10}
!43 = distinct !{!43, !10}
!44 = distinct !{!44, !10}
!45 = distinct !{!45, !10}
!46 = distinct !{!46, !10}
!47 = distinct !{!47, !10}
!48 = distinct !{!48, !10}
!49 = !{!50, !6, i64 768}
!50 = !{!"_command_line", !7, i64 0, !7, i64 256, !7, i64 512, !6, i64 768, !6, i64 772, !6, i64 776, !7, i64 780, !6, i64 784, !51, i64 788}
!51 = !{!"float", !7, i64 0}
!52 = distinct !{!52, !10}
!53 = distinct !{!53, !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._command_line = type { [256 x i8], [256 x i8], [256 x i8], i32, i32, i32, i8, i32, float }
%struct._Fact = type { i32, [5 x i32] }

@gcmd_line = external local_unnamed_addr global %struct._command_line, align 4
@garity = external local_unnamed_addr global [50 x i32], align 16
@gnum_operators = external local_unnamed_addr global i32, align 4
@goperators = external local_unnamed_addr global [50000 x ptr], align 16
@gnum_intersected_types = external local_unnamed_addr global [50 x i32], align 16
@ghard_operators = external local_unnamed_addr global ptr, align 8
@gnum_hard_operators = external local_unnamed_addr global i32, align 4
@geasy_operators = external local_unnamed_addr global ptr, align 8
@gnum_easy_operators = external local_unnamed_addr global i32, align 4
@.str.121 = external hidden unnamed_addr constant [67 x i8], align 1
@.str.122 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.123 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.124 = external hidden unnamed_addr constant [10 x i8], align 1

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

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

declare void @print_Operator(ptr noundef) local_unnamed_addr #2

; Function Attrs: mustprogress 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) local_unnamed_addr #3

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

; Function Attrs: nounwind uwtable
declare dso_local ptr @copy_Exp(ptr noundef) local_unnamed_addr #5

; Function Attrs: nounwind uwtable
define dso_local void @split_domain() local_unnamed_addr #5 {
.preheader:
  %0 = alloca ptr, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %0) #7
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(200) @gnum_intersected_types, i8 -1, i64 200, i1 false), !tbaa !5
  %1 = load i32, ptr @gnum_operators, align 4, !tbaa !5
  %2 = icmp sgt i32 %1, 0
  br i1 %2, label %.lr.ph163, label %._crit_edge220.critedge

.lr.ph163:                                        ; preds = %.preheader, %.loopexit156
  %indvars.iv = phi i64 [ %indvars.iv.next, %.loopexit156 ], [ 0, %.preheader ]
  %.0132161 = phi i32 [ %.1133, %.loopexit156 ], [ 0, %.preheader ]
  %3 = getelementptr inbounds [50000 x ptr], ptr @goperators, i64 0, i64 %indvars.iv
  %4 = load ptr, ptr %3, align 8, !tbaa !9
  %5 = getelementptr inbounds i8, ptr %4, i64 216
  %6 = load ptr, ptr %5, align 8, !tbaa !11
  %7 = tail call i32 @is_dnf(ptr noundef %6)
  %.not149 = icmp eq i32 %7, -1
  br i1 %.not149, label %.loopexit156, label %8

8:                                                ; preds = %.lr.ph163
  %9 = load ptr, ptr %3, align 8, !tbaa !9
  %10 = getelementptr inbounds i8, ptr %9, i64 224
  %.0127158 = load ptr, ptr %10, align 8, !tbaa !9
  %.not150159 = icmp eq ptr %.0127158, null
  br i1 %.not150159, label %.critedge, label %.lr.ph

11:                                               ; preds = %.lr.ph
  %12 = getelementptr inbounds i8, ptr %.0127160, i64 208
  %.0127 = load ptr, ptr %12, align 8, !tbaa !9
  %.not150 = icmp eq ptr %.0127, null
  br i1 %.not150, label %.critedge.loopexit, label %.lr.ph, !llvm.loop !13

.lr.ph:                                           ; preds = %8, %11
  %.0127160 = phi ptr [ %.0127, %11 ], [ %.0127158, %8 ]
  %13 = getelementptr inbounds i8, ptr %.0127160, i64 184
  %14 = load ptr, ptr %13, align 8, !tbaa !15
  %15 = tail call i32 @is_dnf(ptr noundef %14)
  %16 = icmp eq i32 %15, -1
  br i1 %16, label %.loopexit156, label %11

.critedge.loopexit:                               ; preds = %11
  %.pre = load ptr, ptr %3, align 8, !tbaa !9
  br label %.critedge

.critedge:                                        ; preds = %.critedge.loopexit, %8
  %17 = phi ptr [ %.pre, %.critedge.loopexit ], [ %9, %8 ]
  %18 = getelementptr inbounds i8, ptr %17, i64 232
  store i8 0, ptr %18, align 8, !tbaa !17
  %19 = add nsw i32 %7, %.0132161
  br label %.loopexit156

.loopexit156:                                     ; preds = %.lr.ph, %.lr.ph163, %.critedge
  %.1133 = phi i32 [ %19, %.critedge ], [ %.0132161, %.lr.ph163 ], [ %.0132161, %.lr.ph ]
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %20 = load i32, ptr @gnum_operators, align 4, !tbaa !5
  %21 = sext i32 %20 to i64
  %22 = icmp slt i64 %indvars.iv.next, %21
  br i1 %22, label %.lr.ph163, label %._crit_edge.loopexit, !llvm.loop !18

._crit_edge.loopexit:                             ; preds = %.loopexit156
  %23 = sext i32 %.1133 to i64
  %24 = icmp sgt i32 %20, 0
  %25 = tail call noalias dereferenceable_or_null(12000000) ptr @calloc(i64 noundef 50000, i64 noundef 240) #8
  store ptr %25, ptr @ghard_operators, align 8, !tbaa !9
  store i32 0, ptr @gnum_hard_operators, align 4, !tbaa !5
  %26 = tail call noalias ptr @calloc(i64 noundef %23, i64 noundef 8) #8
  store ptr %26, ptr @geasy_operators, align 8, !tbaa !9
  store i32 0, ptr @gnum_easy_operators, align 4, !tbaa !5
  br i1 %24, label %.lr.ph219, label %._crit_edge220

.lr.ph219:                                        ; preds = %._crit_edge.loopexit, %.loopexit155
  %indvars.iv242 = phi i64 [ %indvars.iv.next243, %.loopexit155 ], [ 0, %._crit_edge.loopexit ]
  %27 = getelementptr inbounds [50000 x ptr], ptr @goperators, i64 0, i64 %indvars.iv242
  %28 = load ptr, ptr %27, align 8, !tbaa !9
  %29 = getelementptr inbounds i8, ptr %28, i64 232
  %30 = load i8, ptr %29, align 8, !tbaa !17
  %.not = icmp eq i8 %30, 0
  br i1 %.not, label %31, label %.loopexit155.sink.split

31:                                               ; preds = %.lr.ph219
  %32 = getelementptr inbounds i8, ptr %28, i64 216
  %33 = load ptr, ptr %32, align 8, !tbaa !11
  %34 = load i32, ptr %33, align 8, !tbaa !19
  switch i32 %34, label %332 [
    i32 2007, label %35
    i32 2006, label %185
    i32 2002, label %273
    i32 2003, label %302
    i32 2000, label %328
    i32 2001, label %.loopexit155
  ]

35:                                               ; preds = %31
  %36 = getelementptr inbounds i8, ptr %33, i64 24
  %.0122211 = load ptr, ptr %36, align 8, !tbaa !9
  %.not146212 = icmp eq ptr %.0122211, null
  br i1 %.not146212, label %.loopexit155, label %.lr.ph216

.lr.ph216:                                        ; preds = %35, %.loopexit154
  %.0122213 = phi ptr [ %.0122, %.loopexit154 ], [ %.0122211, %35 ]
  %37 = load ptr, ptr %27, align 8, !tbaa !9
  %38 = call ptr @new_NormOperator(ptr noundef %37) #7
  store ptr %38, ptr %0, align 8, !tbaa !9
  %39 = load i32, ptr %.0122213, align 8, !tbaa !19
  switch i32 %39, label %151 [
    i32 2006, label %40
    i32 2002, label %125
  ]

40:                                               ; preds = %.lr.ph216
  %41 = getelementptr inbounds i8, ptr %.0122213, i64 24
  %.0192 = load ptr, ptr %41, align 8, !tbaa !9
  %.not147193 = icmp eq ptr %.0192, null
  br i1 %.not147193, label %._crit_edge199, label %.lr.ph198

.lr.ph198:                                        ; preds = %40, %.lr.ph198
  %.0196 = phi ptr [ %.0, %.lr.ph198 ], [ %.0192, %40 ]
  %.0128195 = phi i32 [ %.1129, %.lr.ph198 ], [ 0, %40 ]
  %.0134194 = phi i32 [ %spec.select, %.lr.ph198 ], [ 0, %40 ]
  %42 = load i32, ptr %.0196, align 8, !tbaa !19
  %43 = icmp eq i32 %42, 2002
  %44 = zext i1 %43 to i32
  %spec.select = add nuw nsw i32 %.0134194, %44
  %45 = icmp eq i32 %42, 2003
  %46 = zext i1 %45 to i32
  %.1129 = add nuw nsw i32 %.0128195, %46
  %47 = getelementptr inbounds i8, ptr %.0196, i64 32
  %.0 = load ptr, ptr %47, align 8, !tbaa !9
  %.not147 = icmp eq ptr %.0, null
  br i1 %.not147, label %._crit_edge199, label %.lr.ph198, !llvm.loop !21

._crit_edge199:                                   ; preds = %.lr.ph198, %40
  %.0134.lcssa = phi i32 [ 0, %40 ], [ %spec.select, %.lr.ph198 ]
  %.0128.lcssa = phi i32 [ 0, %40 ], [ %.1129, %.lr.ph198 ]
  %48 = zext nneg i32 %.0134.lcssa to i64
  %49 = call noalias ptr @calloc(i64 noundef %48, i64 noundef 24) #8
  %50 = getelementptr inbounds i8, ptr %38, i64 256
  store ptr %49, ptr %50, align 8, !tbaa !22
  %51 = zext nneg i32 %.0128.lcssa to i64
  %52 = call noalias ptr @calloc(i64 noundef %51, i64 noundef 4) #8
  %53 = getelementptr inbounds i8, ptr %38, i64 272
  store ptr %52, ptr %53, align 8, !tbaa !24
  %54 = call noalias ptr @calloc(i64 noundef %51, i64 noundef 8) #8
  %55 = getelementptr inbounds i8, ptr %38, i64 280
  store ptr %54, ptr %55, align 8, !tbaa !25
  %56 = call noalias ptr @calloc(i64 noundef %51, i64 noundef 8) #8
  %57 = getelementptr inbounds i8, ptr %38, i64 288
  store ptr %56, ptr %57, align 8, !tbaa !26
  %.1206 = load ptr, ptr %41, align 8, !tbaa !9
  %.not148207 = icmp eq ptr %.1206, null
  br i1 %.not148207, label %.loopexit154, label %.lr.ph210

.lr.ph210:                                        ; preds = %._crit_edge199, %122
  %58 = phi ptr [ %123, %122 ], [ %38, %._crit_edge199 ]
  %.1208 = phi ptr [ %.1, %122 ], [ %.1206, %._crit_edge199 ]
  %59 = load i32, ptr %.1208, align 8, !tbaa !19
  %60 = icmp eq i32 %59, 2002
  br i1 %60, label %61, label %86

61:                                               ; preds = %.lr.ph210
  %62 = getelementptr inbounds i8, ptr %58, i64 256
  %63 = load ptr, ptr %62, align 8, !tbaa !22
  %64 = getelementptr inbounds i8, ptr %58, i64 264
  %65 = load i32, ptr %64, align 8, !tbaa !27
  %66 = sext i32 %65 to i64
  %67 = getelementptr inbounds %struct._Fact, ptr %63, i64 %66
  %68 = getelementptr inbounds i8, ptr %.1208, i64 48
  %69 = load ptr, ptr %68, align 8, !tbaa !28
  %70 = load i32, ptr %69, align 4, !tbaa !29
  store i32 %70, ptr %67, align 4, !tbaa !29
  %71 = sext i32 %70 to i64
  %72 = getelementptr inbounds [50 x i32], ptr @garity, i64 0, i64 %71
  %73 = load i32, ptr %72, align 4, !tbaa !5
  %74 = icmp sgt i32 %73, 0
  br i1 %74, label %.lr.ph204, label %._crit_edge205

.lr.ph204:                                        ; preds = %61
  %75 = getelementptr inbounds i8, ptr %69, i64 4
  %76 = getelementptr inbounds i8, ptr %67, i64 4
  br label %77

77:                                               ; preds = %.lr.ph204, %77
  %indvars.iv239 = phi i64 [ 0, %.lr.ph204 ], [ %indvars.iv.next240, %77 ]
  %78 = getelementptr inbounds [5 x i32], ptr %75, i64 0, i64 %indvars.iv239
  %79 = load i32, ptr %78, align 4, !tbaa !5
  %80 = getelementptr inbounds [5 x i32], ptr %76, i64 0, i64 %indvars.iv239
  store i32 %79, ptr %80, align 4, !tbaa !5
  %indvars.iv.next240 = add nuw nsw i64 %indvars.iv239, 1
  %81 = load i32, ptr %72, align 4, !tbaa !5
  %82 = sext i32 %81 to i64
  %83 = icmp slt i64 %indvars.iv.next240, %82
  br i1 %83, label %77, label %._crit_edge205.loopexit, !llvm.loop !31

._crit_edge205.loopexit:                          ; preds = %77
  %.pre254 = load i32, ptr %64, align 8, !tbaa !27
  %.pr.pre = load i32, ptr %.1208, align 8, !tbaa !19
  br label %._crit_edge205

._crit_edge205:                                   ; preds = %._crit_edge205.loopexit, %61
  %.pr = phi i32 [ %.pr.pre, %._crit_edge205.loopexit ], [ 2002, %61 ]
  %84 = phi i32 [ %.pre254, %._crit_edge205.loopexit ], [ %65, %61 ]
  %85 = add nsw i32 %84, 1
  store i32 %85, ptr %64, align 8, !tbaa !27
  br label %86

86:                                               ; preds = %._crit_edge205, %.lr.ph210
  %87 = phi i32 [ %.pr, %._crit_edge205 ], [ %59, %.lr.ph210 ]
  %88 = icmp eq i32 %87, 2003
  br i1 %88, label %89, label %122

89:                                               ; preds = %86
  %90 = getelementptr inbounds i8, ptr %.1208, i64 72
  %91 = load i32, ptr %90, align 8, !tbaa !32
  %92 = getelementptr inbounds i8, ptr %58, i64 272
  %93 = load ptr, ptr %92, align 8, !tbaa !24
  %94 = getelementptr inbounds i8, ptr %58, i64 296
  %95 = load i32, ptr %94, align 8, !tbaa !33
  %96 = sext i32 %95 to i64
  %97 = getelementptr inbounds i32, ptr %93, i64 %96
  store i32 %91, ptr %97, align 4, !tbaa !5
  %98 = getelementptr inbounds i8, ptr %.1208, i64 80
  %99 = load ptr, ptr %98, align 8, !tbaa !34
  %100 = call ptr @copy_Exp(ptr noundef %99)
  %101 = load ptr, ptr %0, align 8, !tbaa !9
  %102 = getelementptr inbounds i8, ptr %101, i64 280
  %103 = load ptr, ptr %102, align 8, !tbaa !25
  %104 = getelementptr inbounds i8, ptr %101, i64 296
  %105 = load i32, ptr %104, align 8, !tbaa !33
  %106 = sext i32 %105 to i64
  %107 = getelementptr inbounds ptr, ptr %103, i64 %106
  store ptr %100, ptr %107, align 8, !tbaa !9
  %108 = getelementptr inbounds i8, ptr %.1208, i64 88
  %109 = load ptr, ptr %108, align 8, !tbaa !35
  %110 = call ptr @copy_Exp(ptr noundef %109)
  %111 = load ptr, ptr %0, align 8, !tbaa !9
  %112 = getelementptr inbounds i8, ptr %111, i64 288
  %113 = load ptr, ptr %112, align 8, !tbaa !26
  %114 = getelementptr inbounds i8, ptr %111, i64 296
  %115 = load i32, ptr %114, align 8, !tbaa !33
  %116 = sext i32 %115 to i64
  %117 = getelementptr inbounds ptr, ptr %113, i64 %116
  store ptr %110, ptr %117, align 8, !tbaa !9
  %118 = load ptr, ptr %0, align 8, !tbaa !9
  %119 = getelementptr inbounds i8, ptr %118, i64 296
  %120 = load i32, ptr %119, align 8, !tbaa !33
  %121 = add nsw i32 %120, 1
  store i32 %121, ptr %119, align 8, !tbaa !33
  br label %122

122:                                              ; preds = %86, %89
  %123 = phi ptr [ %58, %86 ], [ %118, %89 ]
  %124 = getelementptr inbounds i8, ptr %.1208, i64 32
  %.1 = load ptr, ptr %124, align 8, !tbaa !9
  %.not148 = icmp eq ptr %.1, null
  br i1 %.not148, label %.loopexit154, label %.lr.ph210, !llvm.loop !36

125:                                              ; preds = %.lr.ph216
  %126 = call noalias dereferenceable_or_null(24) ptr @calloc(i64 noundef 1, i64 noundef 24) #8
  %127 = getelementptr inbounds i8, ptr %38, i64 256
  store ptr %126, ptr %127, align 8, !tbaa !22
  %128 = getelementptr inbounds i8, ptr %.0122213, i64 48
  %129 = load ptr, ptr %128, align 8, !tbaa !28
  %130 = load i32, ptr %129, align 4, !tbaa !29
  store i32 %130, ptr %126, align 4, !tbaa !29
  %131 = sext i32 %130 to i64
  %132 = getelementptr inbounds [50 x i32], ptr @garity, i64 0, i64 %131
  %133 = load i32, ptr %132, align 4, !tbaa !5
  %134 = icmp sgt i32 %133, 0
  br i1 %134, label %.lr.ph190, label %._crit_edge191

.lr.ph190:                                        ; preds = %125
  %135 = ptrtoint ptr %129 to i64
  %136 = ptrtoint ptr %126 to i64
  %137 = getelementptr inbounds i8, ptr %129, i64 4
  %138 = getelementptr inbounds i8, ptr %126, i64 4
  %139 = zext nneg i32 %133 to i64
  %min.iters.check = icmp ult i32 %133, 8
  %140 = sub i64 %136, %135
  %diff.check = icmp ult i64 %140, 32
  %or.cond = or i1 %min.iters.check, %diff.check
  br i1 %or.cond, label %scalar.ph.preheader, label %vector.ph

vector.ph:                                        ; preds = %.lr.ph190
  %n.vec = and i64 %139, 2147483640
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %141 = getelementptr inbounds [5 x i32], ptr %137, i64 0, i64 %index
  %142 = getelementptr inbounds i8, ptr %141, i64 16
  %wide.load = load <4 x i32>, ptr %141, align 4, !tbaa !5
  %wide.load263 = load <4 x i32>, ptr %142, align 4, !tbaa !5
  %143 = getelementptr inbounds [5 x i32], ptr %138, i64 0, i64 %index
  %144 = getelementptr inbounds i8, ptr %143, i64 16
  store <4 x i32> %wide.load, ptr %143, align 4, !tbaa !5
  store <4 x i32> %wide.load263, ptr %144, align 4, !tbaa !5
  %index.next = add nuw i64 %index, 8
  %145 = icmp eq i64 %index.next, %n.vec
  br i1 %145, label %middle.block, label %vector.body, !llvm.loop !37

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %n.vec, %139
  br i1 %cmp.n, label %._crit_edge191.loopexit, label %scalar.ph.preheader

scalar.ph.preheader:                              ; preds = %middle.block, %.lr.ph190
  %indvars.iv236.ph = phi i64 [ 0, %.lr.ph190 ], [ %n.vec, %middle.block ]
  br label %scalar.ph

scalar.ph:                                        ; preds = %scalar.ph.preheader, %scalar.ph
  %indvars.iv236 = phi i64 [ %indvars.iv.next237, %scalar.ph ], [ %indvars.iv236.ph, %scalar.ph.preheader ]
  %146 = getelementptr inbounds [5 x i32], ptr %137, i64 0, i64 %indvars.iv236
  %147 = load i32, ptr %146, align 4, !tbaa !5
  %148 = getelementptr inbounds [5 x i32], ptr %138, i64 0, i64 %indvars.iv236
  store i32 %147, ptr %148, align 4, !tbaa !5
  %indvars.iv.next237 = add nuw nsw i64 %indvars.iv236, 1
  %149 = icmp ult i64 %indvars.iv.next237, %139
  br i1 %149, label %scalar.ph, label %._crit_edge191.loopexit, !llvm.loop !40

._crit_edge191.loopexit:                          ; preds = %scalar.ph, %middle.block
  %.pr152.pre = load i32, ptr %.0122213, align 8, !tbaa !19
  br label %._crit_edge191

._crit_edge191:                                   ; preds = %._crit_edge191.loopexit, %125
  %.pr152 = phi i32 [ %.pr152.pre, %._crit_edge191.loopexit ], [ 2002, %125 ]
  %150 = getelementptr inbounds i8, ptr %38, i64 264
  store i32 1, ptr %150, align 8, !tbaa !27
  br label %151

151:                                              ; preds = %.lr.ph216, %._crit_edge191
  %152 = phi i32 [ %39, %.lr.ph216 ], [ %.pr152, %._crit_edge191 ]
  %153 = icmp eq i32 %152, 2003
  br i1 %153, label %154, label %.loopexit154

154:                                              ; preds = %151
  %155 = call noalias dereferenceable_or_null(4) ptr @calloc(i64 noundef 1, i64 noundef 4) #8
  %156 = getelementptr inbounds i8, ptr %38, i64 272
  store ptr %155, ptr %156, align 8, !tbaa !24
  %157 = call noalias dereferenceable_or_null(8) ptr @calloc(i64 noundef 1, i64 noundef 8) #8
  %158 = getelementptr inbounds i8, ptr %38, i64 280
  store ptr %157, ptr %158, align 8, !tbaa !25
  %159 = call noalias dereferenceable_or_null(8) ptr @calloc(i64 noundef 1, i64 noundef 8) #8
  %160 = getelementptr inbounds i8, ptr %38, i64 288
  store ptr %159, ptr %160, align 8, !tbaa !26
  %161 = getelementptr inbounds i8, ptr %.0122213, i64 72
  %162 = load i32, ptr %161, align 8, !tbaa !32
  store i32 %162, ptr %155, align 4, !tbaa !5
  %163 = getelementptr inbounds i8, ptr %.0122213, i64 80
  %164 = load ptr, ptr %163, align 8, !tbaa !34
  %165 = call ptr @copy_Exp(ptr noundef %164)
  %166 = load ptr, ptr %0, align 8, !tbaa !9
  %167 = getelementptr inbounds i8, ptr %166, i64 280
  %168 = load ptr, ptr %167, align 8, !tbaa !25
  store ptr %165, ptr %168, align 8, !tbaa !9
  %169 = getelementptr inbounds i8, ptr %.0122213, i64 88
  %170 = load ptr, ptr %169, align 8, !tbaa !35
  %171 = call ptr @copy_Exp(ptr noundef %170)
  %172 = load ptr, ptr %0, align 8, !tbaa !9
  %173 = getelementptr inbounds i8, ptr %172, i64 288
  %174 = load ptr, ptr %173, align 8, !tbaa !26
  store ptr %171, ptr %174, align 8, !tbaa !9
  %175 = load ptr, ptr %0, align 8, !tbaa !9
  %176 = getelementptr inbounds i8, ptr %175, i64 296
  store i32 1, ptr %176, align 8, !tbaa !33
  br label %.loopexit154

.loopexit154:                                     ; preds = %122, %._crit_edge199, %151, %154
  %177 = load ptr, ptr %27, align 8, !tbaa !9
  call void @make_normal_effects(ptr noundef nonnull %0, ptr noundef %177)
  %178 = load ptr, ptr %0, align 8, !tbaa !9
  %179 = load ptr, ptr @geasy_operators, align 8, !tbaa !9
  %180 = load i32, ptr @gnum_easy_operators, align 4, !tbaa !5
  %181 = add nsw i32 %180, 1
  store i32 %181, ptr @gnum_easy_operators, align 4, !tbaa !5
  %182 = sext i32 %180 to i64
  %183 = getelementptr inbounds ptr, ptr %179, i64 %182
  store ptr %178, ptr %183, align 8, !tbaa !9
  %184 = getelementptr inbounds i8, ptr %.0122213, i64 32
  %.0122 = load ptr, ptr %184, align 8, !tbaa !9
  %.not146 = icmp eq ptr %.0122, null
  br i1 %.not146, label %.loopexit155, label %.lr.ph216, !llvm.loop !41

185:                                              ; preds = %31
  %186 = call ptr @new_NormOperator(ptr noundef nonnull %28) #7
  store ptr %186, ptr %0, align 8, !tbaa !9
  %187 = getelementptr inbounds i8, ptr %33, i64 24
  %.1123168 = load ptr, ptr %187, align 8, !tbaa !9
  %.not144169 = icmp eq ptr %.1123168, null
  br i1 %.not144169, label %._crit_edge175, label %.lr.ph174

.lr.ph174:                                        ; preds = %185, %.lr.ph174
  %.1123172 = phi ptr [ %.1123, %.lr.ph174 ], [ %.1123168, %185 ]
  %.2130171 = phi i32 [ %.3131, %.lr.ph174 ], [ 0, %185 ]
  %.2136170 = phi i32 [ %spec.select151, %.lr.ph174 ], [ 0, %185 ]
  %188 = load i32, ptr %.1123172, align 8, !tbaa !19
  %189 = icmp eq i32 %188, 2002
  %190 = zext i1 %189 to i32
  %spec.select151 = add nuw nsw i32 %.2136170, %190
  %191 = icmp eq i32 %188, 2003
  %192 = zext i1 %191 to i32
  %.3131 = add nuw nsw i32 %.2130171, %192
  %193 = getelementptr inbounds i8, ptr %.1123172, i64 32
  %.1123 = load ptr, ptr %193, align 8, !tbaa !9
  %.not144 = icmp eq ptr %.1123, null
  br i1 %.not144, label %._crit_edge175, label %.lr.ph174, !llvm.loop !42

._crit_edge175:                                   ; preds = %.lr.ph174, %185
  %.2136.lcssa = phi i32 [ 0, %185 ], [ %spec.select151, %.lr.ph174 ]
  %.2130.lcssa = phi i32 [ 0, %185 ], [ %.3131, %.lr.ph174 ]
  %194 = zext nneg i32 %.2136.lcssa to i64
  %195 = call noalias ptr @calloc(i64 noundef %194, i64 noundef 24) #8
  %196 = getelementptr inbounds i8, ptr %186, i64 256
  store ptr %195, ptr %196, align 8, !tbaa !22
  %197 = zext nneg i32 %.2130.lcssa to i64
  %198 = call noalias ptr @calloc(i64 noundef %197, i64 noundef 4) #8
  %199 = getelementptr inbounds i8, ptr %186, i64 272
  store ptr %198, ptr %199, align 8, !tbaa !24
  %200 = call noalias ptr @calloc(i64 noundef %197, i64 noundef 8) #8
  %201 = getelementptr inbounds i8, ptr %186, i64 280
  store ptr %200, ptr %201, align 8, !tbaa !25
  %202 = call noalias ptr @calloc(i64 noundef %197, i64 noundef 8) #8
  %203 = getelementptr inbounds i8, ptr %186, i64 288
  store ptr %202, ptr %203, align 8, !tbaa !26
  %.2182 = load ptr, ptr %187, align 8, !tbaa !9
  %.not145183 = icmp eq ptr %.2182, null
  br i1 %.not145183, label %._crit_edge187, label %.lr.ph186

.lr.ph186:                                        ; preds = %._crit_edge175, %268
  %204 = phi ptr [ %269, %268 ], [ %186, %._crit_edge175 ]
  %.2184 = phi ptr [ %.2, %268 ], [ %.2182, %._crit_edge175 ]
  %205 = load i32, ptr %.2184, align 8, !tbaa !19
  %206 = icmp eq i32 %205, 2002
  br i1 %206, label %207, label %232

207:                                              ; preds = %.lr.ph186
  %208 = getelementptr inbounds i8, ptr %204, i64 256
  %209 = load ptr, ptr %208, align 8, !tbaa !22
  %210 = getelementptr inbounds i8, ptr %204, i64 264
  %211 = load i32, ptr %210, align 8, !tbaa !27
  %212 = sext i32 %211 to i64
  %213 = getelementptr inbounds %struct._Fact, ptr %209, i64 %212
  %214 = getelementptr inbounds i8, ptr %.2184, i64 48
  %215 = load ptr, ptr %214, align 8, !tbaa !28
  %216 = load i32, ptr %215, align 4, !tbaa !29
  store i32 %216, ptr %213, align 4, !tbaa !29
  %217 = sext i32 %216 to i64
  %218 = getelementptr inbounds [50 x i32], ptr @garity, i64 0, i64 %217
  %219 = load i32, ptr %218, align 4, !tbaa !5
  %220 = icmp sgt i32 %219, 0
  br i1 %220, label %.lr.ph180, label %._crit_edge181

.lr.ph180:                                        ; preds = %207
  %221 = getelementptr inbounds i8, ptr %215, i64 4
  %222 = getelementptr inbounds i8, ptr %213, i64 4
  br label %223

223:                                              ; preds = %.lr.ph180, %223
  %indvars.iv233 = phi i64 [ 0, %.lr.ph180 ], [ %indvars.iv.next234, %223 ]
  %224 = getelementptr inbounds [5 x i32], ptr %221, i64 0, i64 %indvars.iv233
  %225 = load i32, ptr %224, align 4, !tbaa !5
  %226 = getelementptr inbounds [5 x i32], ptr %222, i64 0, i64 %indvars.iv233
  store i32 %225, ptr %226, align 4, !tbaa !5
  %indvars.iv.next234 = add nuw nsw i64 %indvars.iv233, 1
  %227 = load i32, ptr %218, align 4, !tbaa !5
  %228 = sext i32 %227 to i64
  %229 = icmp slt i64 %indvars.iv.next234, %228
  br i1 %229, label %223, label %._crit_edge181.loopexit, !llvm.loop !43

._crit_edge181.loopexit:                          ; preds = %223
  %.pre251 = load i32, ptr %210, align 8, !tbaa !27
  %.pr153.pre = load i32, ptr %.2184, align 8, !tbaa !19
  br label %._crit_edge181

._crit_edge181:                                   ; preds = %._crit_edge181.loopexit, %207
  %.pr153 = phi i32 [ %.pr153.pre, %._crit_edge181.loopexit ], [ 2002, %207 ]
  %230 = phi i32 [ %.pre251, %._crit_edge181.loopexit ], [ %211, %207 ]
  %231 = add nsw i32 %230, 1
  store i32 %231, ptr %210, align 8, !tbaa !27
  br label %232

232:                                              ; preds = %._crit_edge181, %.lr.ph186
  %233 = phi i32 [ %.pr153, %._crit_edge181 ], [ %205, %.lr.ph186 ]
  %234 = icmp eq i32 %233, 2003
  br i1 %234, label %235, label %268

235:                                              ; preds = %232
  %236 = getelementptr inbounds i8, ptr %.2184, i64 72
  %237 = load i32, ptr %236, align 8, !tbaa !32
  %238 = getelementptr inbounds i8, ptr %204, i64 272
  %239 = load ptr, ptr %238, align 8, !tbaa !24
  %240 = getelementptr inbounds i8, ptr %204, i64 296
  %241 = load i32, ptr %240, align 8, !tbaa !33
  %242 = sext i32 %241 to i64
  %243 = getelementptr inbounds i32, ptr %239, i64 %242
  store i32 %237, ptr %243, align 4, !tbaa !5
  %244 = getelementptr inbounds i8, ptr %.2184, i64 80
  %245 = load ptr, ptr %244, align 8, !tbaa !34
  %246 = call ptr @copy_Exp(ptr noundef %245)
  %247 = load ptr, ptr %0, align 8, !tbaa !9
  %248 = getelementptr inbounds i8, ptr %247, i64 280
  %249 = load ptr, ptr %248, align 8, !tbaa !25
  %250 = getelementptr inbounds i8, ptr %247, i64 296
  %251 = load i32, ptr %250, align 8, !tbaa !33
  %252 = sext i32 %251 to i64
  %253 = getelementptr inbounds ptr, ptr %249, i64 %252
  store ptr %246, ptr %253, align 8, !tbaa !9
  %254 = getelementptr inbounds i8, ptr %.2184, i64 88
  %255 = load ptr, ptr %254, align 8, !tbaa !35
  %256 = call ptr @copy_Exp(ptr noundef %255)
  %257 = load ptr, ptr %0, align 8, !tbaa !9
  %258 = getelementptr inbounds i8, ptr %257, i64 288
  %259 = load ptr, ptr %258, align 8, !tbaa !26
  %260 = getelementptr inbounds i8, ptr %257, i64 296
  %261 = load i32, ptr %260, align 8, !tbaa !33
  %262 = sext i32 %261 to i64
  %263 = getelementptr inbounds ptr, ptr %259, i64 %262
  store ptr %256, ptr %263, align 8, !tbaa !9
  %264 = load ptr, ptr %0, align 8, !tbaa !9
  %265 = getelementptr inbounds i8, ptr %264, i64 296
  %266 = load i32, ptr %265, align 8, !tbaa !33
  %267 = add nsw i32 %266, 1
  store i32 %267, ptr %265, align 8, !tbaa !33
  br label %268

268:                                              ; preds = %232, %235
  %269 = phi ptr [ %204, %232 ], [ %264, %235 ]
  %270 = getelementptr inbounds i8, ptr %.2184, i64 32
  %.2 = load ptr, ptr %270, align 8, !tbaa !9
  %.not145 = icmp eq ptr %.2, null
  br i1 %.not145, label %._crit_edge187, label %.lr.ph186, !llvm.loop !44

._crit_edge187:                                   ; preds = %268, %._crit_edge175
  %271 = load ptr, ptr %27, align 8, !tbaa !9
  call void @make_normal_effects(ptr noundef nonnull %0, ptr noundef %271)
  %272 = load ptr, ptr %0, align 8, !tbaa !9
  br label %.loopexit155.sink.split

273:                                              ; preds = %31
  %274 = call ptr @new_NormOperator(ptr noundef nonnull %28) #7
  store ptr %274, ptr %0, align 8, !tbaa !9
  %275 = call noalias dereferenceable_or_null(24) ptr @calloc(i64 noundef 1, i64 noundef 24) #8
  %276 = getelementptr inbounds i8, ptr %274, i64 256
  store ptr %275, ptr %276, align 8, !tbaa !22
  %277 = getelementptr inbounds i8, ptr %33, i64 48
  %278 = load ptr, ptr %277, align 8, !tbaa !28
  %279 = load i32, ptr %278, align 4, !tbaa !29
  store i32 %279, ptr %275, align 4, !tbaa !29
  %280 = sext i32 %279 to i64
  %281 = getelementptr inbounds [50 x i32], ptr @garity, i64 0, i64 %280
  %282 = load i32, ptr %281, align 4, !tbaa !5
  %283 = icmp sgt i32 %282, 0
  br i1 %283, label %.lr.ph166, label %._crit_edge167

.lr.ph166:                                        ; preds = %273
  %284 = ptrtoint ptr %278 to i64
  %285 = ptrtoint ptr %275 to i64
  %286 = getelementptr inbounds i8, ptr %278, i64 4
  %287 = getelementptr inbounds i8, ptr %275, i64 4
  %288 = zext nneg i32 %282 to i64
  %min.iters.check268 = icmp ult i32 %282, 8
  %289 = sub i64 %285, %284
  %diff.check265 = icmp ult i64 %289, 32
  %or.cond279 = or i1 %min.iters.check268, %diff.check265
  br i1 %or.cond279, label %scalar.ph267.preheader, label %vector.ph269

vector.ph269:                                     ; preds = %.lr.ph166
  %n.vec271 = and i64 %288, 2147483640
  br label %vector.body273

vector.body273:                                   ; preds = %vector.body273, %vector.ph269
  %index274 = phi i64 [ 0, %vector.ph269 ], [ %index.next277, %vector.body273 ]
  %290 = getelementptr inbounds [5 x i32], ptr %286, i64 0, i64 %index274
  %291 = getelementptr inbounds i8, ptr %290, i64 16
  %wide.load275 = load <4 x i32>, ptr %290, align 4, !tbaa !5
  %wide.load276 = load <4 x i32>, ptr %291, align 4, !tbaa !5
  %292 = getelementptr inbounds [5 x i32], ptr %287, i64 0, i64 %index274
  %293 = getelementptr inbounds i8, ptr %292, i64 16
  store <4 x i32> %wide.load275, ptr %292, align 4, !tbaa !5
  store <4 x i32> %wide.load276, ptr %293, align 4, !tbaa !5
  %index.next277 = add nuw i64 %index274, 8
  %294 = icmp eq i64 %index.next277, %n.vec271
  br i1 %294, label %middle.block266, label %vector.body273, !llvm.loop !45

middle.block266:                                  ; preds = %vector.body273
  %cmp.n278 = icmp eq i64 %n.vec271, %288
  br i1 %cmp.n278, label %._crit_edge167, label %scalar.ph267.preheader

scalar.ph267.preheader:                           ; preds = %middle.block266, %.lr.ph166
  %indvars.iv230.ph = phi i64 [ 0, %.lr.ph166 ], [ %n.vec271, %middle.block266 ]
  br label %scalar.ph267

scalar.ph267:                                     ; preds = %scalar.ph267.preheader, %scalar.ph267
  %indvars.iv230 = phi i64 [ %indvars.iv.next231, %scalar.ph267 ], [ %indvars.iv230.ph, %scalar.ph267.preheader ]
  %295 = getelementptr inbounds [5 x i32], ptr %286, i64 0, i64 %indvars.iv230
  %296 = load i32, ptr %295, align 4, !tbaa !5
  %297 = getelementptr inbounds [5 x i32], ptr %287, i64 0, i64 %indvars.iv230
  store i32 %296, ptr %297, align 4, !tbaa !5
  %indvars.iv.next231 = add nuw nsw i64 %indvars.iv230, 1
  %298 = icmp ult i64 %indvars.iv.next231, %288
  br i1 %298, label %scalar.ph267, label %._crit_edge167, !llvm.loop !46

._crit_edge167:                                   ; preds = %scalar.ph267, %middle.block266, %273
  %299 = getelementptr inbounds i8, ptr %274, i64 264
  store i32 1, ptr %299, align 8, !tbaa !27
  %300 = load ptr, ptr %27, align 8, !tbaa !9
  call void @make_normal_effects(ptr noundef nonnull %0, ptr noundef %300)
  %301 = load ptr, ptr %0, align 8, !tbaa !9
  br label %.loopexit155.sink.split

302:                                              ; preds = %31
  %303 = call ptr @new_NormOperator(ptr noundef nonnull %28) #7
  store ptr %303, ptr %0, align 8, !tbaa !9
  %304 = call noalias dereferenceable_or_null(4) ptr @calloc(i64 noundef 1, i64 noundef 4) #8
  %305 = getelementptr inbounds i8, ptr %303, i64 272
  store ptr %304, ptr %305, align 8, !tbaa !24
  %306 = call noalias dereferenceable_or_null(8) ptr @calloc(i64 noundef 1, i64 noundef 8) #8
  %307 = getelementptr inbounds i8, ptr %303, i64 280
  store ptr %306, ptr %307, align 8, !tbaa !25
  %308 = call noalias dereferenceable_or_null(8) ptr @calloc(i64 noundef 1, i64 noundef 8) #8
  %309 = getelementptr inbounds i8, ptr %303, i64 288
  store ptr %308, ptr %309, align 8, !tbaa !26
  %310 = getelementptr inbounds i8, ptr %33, i64 72
  %311 = load i32, ptr %310, align 8, !tbaa !32
  store i32 %311, ptr %304, align 4, !tbaa !5
  %312 = getelementptr inbounds i8, ptr %33, i64 80
  %313 = load ptr, ptr %312, align 8, !tbaa !34
  %314 = call ptr @copy_Exp(ptr noundef %313)
  %315 = load ptr, ptr %0, align 8, !tbaa !9
  %316 = getelementptr inbounds i8, ptr %315, i64 280
  %317 = load ptr, ptr %316, align 8, !tbaa !25
  store ptr %314, ptr %317, align 8, !tbaa !9
  %318 = getelementptr inbounds i8, ptr %33, i64 88
  %319 = load ptr, ptr %318, align 8, !tbaa !35
  %320 = call ptr @copy_Exp(ptr noundef %319)
  %321 = load ptr, ptr %0, align 8, !tbaa !9
  %322 = getelementptr inbounds i8, ptr %321, i64 288
  %323 = load ptr, ptr %322, align 8, !tbaa !26
  store ptr %320, ptr %323, align 8, !tbaa !9
  %324 = load ptr, ptr %0, align 8, !tbaa !9
  %325 = getelementptr inbounds i8, ptr %324, i64 296
  store i32 1, ptr %325, align 8, !tbaa !33
  %326 = load ptr, ptr %27, align 8, !tbaa !9
  call void @make_normal_effects(ptr noundef nonnull %0, ptr noundef %326)
  %327 = load ptr, ptr %0, align 8, !tbaa !9
  br label %.loopexit155.sink.split

328:                                              ; preds = %31
  %329 = call ptr @new_NormOperator(ptr noundef nonnull %28) #7
  store ptr %329, ptr %0, align 8, !tbaa !9
  %330 = load ptr, ptr %27, align 8, !tbaa !9
  call void @make_normal_effects(ptr noundef nonnull %0, ptr noundef %330)
  %331 = load ptr, ptr %0, align 8, !tbaa !9
  br label %.loopexit155.sink.split

332:                                              ; preds = %31
  %333 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.121)
  call void @exit(i32 noundef 1) #9
  unreachable

.loopexit155.sink.split:                          ; preds = %.lr.ph219, %328, %302, %._crit_edge167, %._crit_edge187
  %geasy_operators.sink = phi ptr [ @geasy_operators, %._crit_edge187 ], [ @geasy_operators, %._crit_edge167 ], [ @geasy_operators, %302 ], [ @geasy_operators, %328 ], [ @ghard_operators, %.lr.ph219 ]
  %gnum_easy_operators.sink262 = phi ptr [ @gnum_easy_operators, %._crit_edge187 ], [ @gnum_easy_operators, %._crit_edge167 ], [ @gnum_easy_operators, %302 ], [ @gnum_easy_operators, %328 ], [ @gnum_hard_operators, %.lr.ph219 ]
  %.sink = phi ptr [ %272, %._crit_edge187 ], [ %301, %._crit_edge167 ], [ %327, %302 ], [ %331, %328 ], [ %28, %.lr.ph219 ]
  %334 = load ptr, ptr %geasy_operators.sink, align 8, !tbaa !9
  %335 = load i32, ptr %gnum_easy_operators.sink262, align 4, !tbaa !5
  %336 = add nsw i32 %335, 1
  store i32 %336, ptr %gnum_easy_operators.sink262, align 4, !tbaa !5
  %337 = sext i32 %335 to i64
  %338 = getelementptr inbounds ptr, ptr %334, i64 %337
  store ptr %.sink, ptr %338, align 8, !tbaa !9
  br label %.loopexit155

.loopexit155:                                     ; preds = %.loopexit154, %.loopexit155.sink.split, %35, %31
  %indvars.iv.next243 = add nuw nsw i64 %indvars.iv242, 1
  %339 = load i32, ptr @gnum_operators, align 4, !tbaa !5
  %340 = sext i32 %339 to i64
  %341 = icmp slt i64 %indvars.iv.next243, %340
  br i1 %341, label %.lr.ph219, label %._crit_edge220, !llvm.loop !47

._crit_edge220.critedge:                          ; preds = %.preheader
  %342 = tail call noalias dereferenceable_or_null(12000000) ptr @calloc(i64 noundef 50000, i64 noundef 240) #8
  store ptr %342, ptr @ghard_operators, align 8, !tbaa !9
  store i32 0, ptr @gnum_hard_operators, align 4, !tbaa !5
  %343 = tail call noalias ptr @calloc(i64 noundef 0, i64 noundef 8) #8
  store ptr %343, ptr @geasy_operators, align 8, !tbaa !9
  store i32 0, ptr @gnum_easy_operators, align 4, !tbaa !5
  br label %._crit_edge220

._crit_edge220:                                   ; preds = %.loopexit155, %._crit_edge220.critedge, %._crit_edge.loopexit
  %344 = load i32, ptr getelementptr inbounds (i8, ptr @gcmd_line, i64 768), align 4, !tbaa !48
  %345 = icmp eq i32 %344, 109
  br i1 %345, label %346, label %.loopexit

346:                                              ; preds = %._crit_edge220
  %347 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.122)
  %348 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.123)
  %349 = load i32, ptr @gnum_easy_operators, align 4, !tbaa !5
  %350 = icmp sgt i32 %349, 0
  br i1 %350, label %.lr.ph223, label %._crit_edge224

.lr.ph223:                                        ; preds = %346, %.lr.ph223
  %indvars.iv245 = phi i64 [ %indvars.iv.next246, %.lr.ph223 ], [ 0, %346 ]
  %351 = load ptr, ptr @geasy_operators, align 8, !tbaa !9
  %352 = getelementptr inbounds ptr, ptr %351, i64 %indvars.iv245
  %353 = load ptr, ptr %352, align 8, !tbaa !9
  call void @print_NormOperator(ptr noundef %353) #7
  %indvars.iv.next246 = add nuw nsw i64 %indvars.iv245, 1
  %354 = load i32, ptr @gnum_easy_operators, align 4, !tbaa !5
  %355 = sext i32 %354 to i64
  %356 = icmp slt i64 %indvars.iv.next246, %355
  br i1 %356, label %.lr.ph223, label %._crit_edge224, !llvm.loop !51

._crit_edge224:                                   ; preds = %.lr.ph223, %346
  %357 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.124)
  %358 = load i32, ptr @gnum_hard_operators, align 4, !tbaa !5
  %359 = icmp sgt i32 %358, 0
  br i1 %359, label %.lr.ph227, label %.loopexit

.lr.ph227:                                        ; preds = %._crit_edge224, %.lr.ph227
  %indvars.iv248 = phi i64 [ %indvars.iv.next249, %.lr.ph227 ], [ 0, %._crit_edge224 ]
  %360 = load ptr, ptr @ghard_operators, align 8, !tbaa !9
  %361 = getelementptr inbounds ptr, ptr %360, i64 %indvars.iv248
  %362 = load ptr, ptr %361, align 8, !tbaa !9
  call void @print_Operator(ptr noundef %362) #7
  %indvars.iv.next249 = add nuw nsw i64 %indvars.iv248, 1
  %363 = load i32, ptr @gnum_hard_operators, align 4, !tbaa !5
  %364 = sext i32 %363 to i64
  %365 = icmp slt i64 %indvars.iv.next249, %364
  br i1 %365, label %.lr.ph227, label %.loopexit, !llvm.loop !52

.loopexit:                                        ; preds = %.lr.ph227, %._crit_edge224, %._crit_edge220
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %0) #7
  ret void
}

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

declare ptr @new_NormOperator(ptr noundef) local_unnamed_addr #2

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

declare void @print_NormOperator(ptr noundef) local_unnamed_addr #2

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"any pointer", !7, i64 0}
!11 = !{!12, !10, i64 216}
!12 = !{!"_Operator", !10, i64 0, !7, i64 8, !6, i64 128, !7, i64 132, !6, i64 136, !7, i64 140, !7, i64 200, !10, i64 216, !10, i64 224, !7, i64 232}
!13 = distinct !{!13, !14}
!14 = !{!"llvm.loop.mustprogress"}
!15 = !{!16, !10, i64 184}
!16 = !{!"_Effect", !6, i64 0, !7, i64 4, !7, i64 64, !10, i64 184, !10, i64 192, !10, i64 200, !10, i64 208, !10, i64 216}
!17 = !{!12, !7, i64 232}
!18 = distinct !{!18, !14}
!19 = !{!20, !6, i64 0}
!20 = !{!"_WffNode", !6, i64 0, !6, i64 4, !6, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !10, i64 40, !10, i64 48, !6, i64 56, !10, i64 64, !6, i64 72, !10, i64 80, !10, i64 88, !7, i64 96}
!21 = distinct !{!21, !14}
!22 = !{!23, !10, i64 256}
!23 = !{!"_NormOperator", !10, i64 0, !6, i64 8, !7, i64 12, !7, i64 72, !7, i64 132, !6, i64 192, !7, i64 196, !10, i64 256, !6, i64 264, !10, i64 272, !10, i64 280, !10, i64 288, !6, i64 296, !10, i64 304, !7, i64 312}
!24 = !{!23, !10, i64 272}
!25 = !{!23, !10, i64 280}
!26 = !{!23, !10, i64 288}
!27 = !{!23, !6, i64 264}
!28 = !{!20, !10, i64 48}
!29 = !{!30, !6, i64 0}
!30 = !{!"_Fact", !6, i64 0, !7, i64 4}
!31 = distinct !{!31, !14}
!32 = !{!20, !6, i64 72}
!33 = !{!23, !6, i64 296}
!34 = !{!20, !10, i64 80}
!35 = !{!20, !10, i64 88}
!36 = distinct !{!36, !14}
!37 = distinct !{!37, !14, !38, !39}
!38 = !{!"llvm.loop.isvectorized", i32 1}
!39 = !{!"llvm.loop.unroll.runtime.disable"}
!40 = distinct !{!40, !14, !38}
!41 = distinct !{!41, !14}
!42 = distinct !{!42, !14}
!43 = distinct !{!43, !14}
!44 = distinct !{!44, !14}
!45 = distinct !{!45, !14, !38, !39}
!46 = distinct !{!46, !14, !38}
!47 = distinct !{!47, !14}
!48 = !{!49, !6, i64 768}
!49 = !{!"_command_line", !7, i64 0, !7, i64 256, !7, i64 512, !6, i64 768, !6, i64 772, !6, i64 776, !7, i64 780, !6, i64 784, !50, i64 788}
!50 = !{!"float", !7, i64 0}
!51 = distinct !{!51, !14}
!52 = distinct !{!52, !14}


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