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

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

@garity = external global [50 x i32], align 16
@ghard_mixed_operators = external global ptr, align 8
@linst_table = external dso_local global [15 x i32], align 16
@gtype_consts = external global [50 x [2000 x i32]], align 16
@gtype_size = external global [50 x i32], align 16
@.str.3 = external hidden unnamed_addr constant [39 x i8], align 1
@gnum_hard_mixed_operators = external global i32, align 4
@.str.4 = external hidden unnamed_addr constant [50 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

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

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

; Function Attrs: nounwind uwtable
define dso_local void @create_hard_mixed_operators(ptr noundef %0, i32 noundef %1) #3 {
  %3 = alloca ptr, align 8
  %4 = alloca i32, align 4
  %5 = alloca i32, align 4
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca i32, align 4
  store ptr %0, ptr %3, align 8, !tbaa !5
  store i32 %1, ptr %4, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %5) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #5
  call void @llvm.lifetime.start.p0(i64 4, 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
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #5
  %14 = load i32, ptr %4, align 4, !tbaa !9
  %15 = load ptr, ptr %3, align 8, !tbaa !5
  %16 = getelementptr inbounds %struct._Operator, ptr %15, i32 0, i32 4
  %17 = load i32, ptr %16, align 8, !tbaa !11
  %18 = icmp slt i32 %14, %17
  br i1 %18, label %19, label %82

19:                                               ; preds = %2
  %20 = load ptr, ptr %3, align 8, !tbaa !5
  %21 = getelementptr inbounds %struct._Operator, ptr %20, i32 0, i32 6
  %22 = load i32, ptr %4, align 4, !tbaa !9
  %23 = sext i32 %22 to i64
  %24 = getelementptr inbounds [15 x i8], ptr %21, i64 0, i64 %23
  %25 = load i8, ptr %24, align 1, !tbaa !13
  %26 = icmp ne i8 %25, 0
  br i1 %26, label %27, label %47

27:                                               ; preds = %19
  %28 = load ptr, ptr %3, align 8, !tbaa !5
  %29 = getelementptr inbounds %struct._Operator, ptr %28, i32 0, i32 5
  %30 = load i32, ptr %4, align 4, !tbaa !9
  %31 = sext i32 %30 to i64
  %32 = getelementptr inbounds [15 x i32], ptr %29, i64 0, i64 %31
  %33 = load i32, ptr %32, align 4, !tbaa !9
  %34 = sext i32 %33 to i64
  %35 = getelementptr inbounds [50 x [2000 x i32]], ptr @gtype_consts, i64 0, i64 %34
  %36 = getelementptr inbounds [2000 x i32], ptr %35, i64 0, i64 0
  %37 = load i32, ptr %36, align 16, !tbaa !9
  %38 = load i32, ptr %4, align 4, !tbaa !9
  %39 = sext i32 %38 to i64
  %40 = getelementptr inbounds [15 x i32], ptr @linst_table, i64 0, i64 %39
  store i32 %37, ptr %40, align 4, !tbaa !9
  %41 = load ptr, ptr %3, align 8, !tbaa !5
  %42 = load i32, ptr %4, align 4, !tbaa !9
  %43 = add nsw i32 %42, 1
  call void @create_hard_mixed_operators(ptr noundef %41, i32 noundef %43)
  %44 = load i32, ptr %4, align 4, !tbaa !9
  %45 = sext i32 %44 to i64
  %46 = getelementptr inbounds [15 x i32], ptr @linst_table, i64 0, i64 %45
  store i32 -1, ptr %46, align 4, !tbaa !9
  store i32 1, ptr %13, align 4
  br label %803

47:                                               ; preds = %19
  %48 = load ptr, ptr %3, align 8, !tbaa !5
  %49 = getelementptr inbounds %struct._Operator, ptr %48, i32 0, i32 5
  %50 = load i32, ptr %4, align 4, !tbaa !9
  %51 = sext i32 %50 to i64
  %52 = getelementptr inbounds [15 x i32], ptr %49, i64 0, i64 %51
  %53 = load i32, ptr %52, align 4, !tbaa !9
  store i32 %53, ptr %5, align 4, !tbaa !9
  store i32 0, ptr %6, align 4, !tbaa !9
  br label %54

54:                                               ; preds = %78, %47
  %55 = load i32, ptr %6, align 4, !tbaa !9
  %56 = load i32, ptr %5, align 4, !tbaa !9
  %57 = sext i32 %56 to i64
  %58 = getelementptr inbounds [50 x i32], ptr @gtype_size, i64 0, i64 %57
  %59 = load i32, ptr %58, align 4, !tbaa !9
  %60 = icmp slt i32 %55, %59
  br i1 %60, label %61, label %81

61:                                               ; preds = %54
  %62 = load i32, ptr %5, align 4, !tbaa !9
  %63 = sext i32 %62 to i64
  %64 = getelementptr inbounds [50 x [2000 x i32]], ptr @gtype_consts, i64 0, i64 %63
  %65 = load i32, ptr %6, align 4, !tbaa !9
  %66 = sext i32 %65 to i64
  %67 = getelementptr inbounds [2000 x i32], ptr %64, i64 0, i64 %66
  %68 = load i32, ptr %67, align 4, !tbaa !9
  %69 = load i32, ptr %4, align 4, !tbaa !9
  %70 = sext i32 %69 to i64
  %71 = getelementptr inbounds [15 x i32], ptr @linst_table, i64 0, i64 %70
  store i32 %68, ptr %71, align 4, !tbaa !9
  %72 = load ptr, ptr %3, align 8, !tbaa !5
  %73 = load i32, ptr %4, align 4, !tbaa !9
  %74 = add nsw i32 %73, 1
  call void @create_hard_mixed_operators(ptr noundef %72, i32 noundef %74)
  %75 = load i32, ptr %4, align 4, !tbaa !9
  %76 = sext i32 %75 to i64
  %77 = getelementptr inbounds [15 x i32], ptr @linst_table, i64 0, i64 %76
  store i32 -1, ptr %77, align 4, !tbaa !9
  br label %78

78:                                               ; preds = %61
  %79 = load i32, ptr %6, align 4, !tbaa !9
  %80 = add nsw i32 %79, 1
  store i32 %80, ptr %6, align 4, !tbaa !9
  br label %54, !llvm.loop !14

81:                                               ; preds = %54
  store i32 1, ptr %13, align 4
  br label %803

82:                                               ; preds = %2
  %83 = load ptr, ptr %3, align 8, !tbaa !5
  %84 = getelementptr inbounds %struct._Operator, ptr %83, i32 0, i32 7
  %85 = load ptr, ptr %84, align 8, !tbaa !16
  %86 = call ptr @instantiate_wff(ptr noundef %85)
  store ptr %86, ptr %9, align 8, !tbaa !5
  %87 = load ptr, ptr %9, align 8, !tbaa !5
  %88 = getelementptr inbounds %struct._WffNode, ptr %87, i32 0, i32 0
  %89 = load i32, ptr %88, align 8, !tbaa !17
  %90 = icmp eq i32 %89, 2001
  br i1 %90, label %91, label %93

91:                                               ; preds = %82
  %92 = load ptr, ptr %9, align 8, !tbaa !5
  call void @free_WffNode(ptr noundef %92)
  store i32 1, ptr %13, align 4
  br label %803

93:                                               ; preds = %82
  call void @dnf(ptr noundef %9)
  call void @cleanup_wff(ptr noundef %9)
  %94 = load ptr, ptr %9, align 8, !tbaa !5
  %95 = getelementptr inbounds %struct._WffNode, ptr %94, i32 0, i32 0
  %96 = load i32, ptr %95, align 8, !tbaa !17
  %97 = icmp eq i32 %96, 2001
  br i1 %97, label %98, label %100

98:                                               ; preds = %93
  %99 = load ptr, ptr %9, align 8, !tbaa !5
  call void @free_WffNode(ptr noundef %99)
  store i32 1, ptr %13, align 4
  br label %803

100:                                              ; preds = %93
  %101 = load ptr, ptr %9, align 8, !tbaa !5
  %102 = call i32 @is_dnf(ptr noundef %101)
  %103 = icmp eq i32 %102, -1
  br i1 %103, label %104, label %110

104:                                              ; preds = %100
  %105 = load ptr, ptr %3, align 8, !tbaa !5
  %106 = getelementptr inbounds %struct._Operator, ptr %105, i32 0, i32 0
  %107 = load ptr, ptr %106, align 8, !tbaa !19
  %108 = call i32 (ptr, ...) @printf(ptr noundef @.str.3, ptr noundef %107)
  %109 = load ptr, ptr %9, align 8, !tbaa !5
  call void @print_Wff(ptr noundef %109, i32 noundef 0)
  call void @exit(i32 noundef 1) #6
  unreachable

110:                                              ; preds = %100
  %111 = load ptr, ptr %9, align 8, !tbaa !5
  %112 = getelementptr inbounds %struct._WffNode, ptr %111, i32 0, i32 0
  %113 = load i32, ptr %112, align 8, !tbaa !17
  switch i32 %113, label %796 [
    i32 2007, label %114
    i32 2006, label %418
    i32 2002, label %610
    i32 2003, label %692
    i32 2000, label %761
  ]

114:                                              ; preds = %110
  %115 = load ptr, ptr %9, align 8, !tbaa !5
  %116 = getelementptr inbounds %struct._WffNode, ptr %115, i32 0, i32 4
  %117 = load ptr, ptr %116, align 8, !tbaa !20
  store ptr %117, ptr %10, align 8, !tbaa !5
  br label %118

118:                                              ; preds = %413, %114
  %119 = load ptr, ptr %10, align 8, !tbaa !5
  %120 = icmp ne ptr %119, null
  br i1 %120, label %121, label %417

121:                                              ; preds = %118
  %122 = load ptr, ptr %3, align 8, !tbaa !5
  %123 = call ptr @new_MixedOperator(ptr noundef %122)
  store ptr %123, ptr %12, align 8, !tbaa !5
  store i32 0, ptr %6, align 4, !tbaa !9
  br label %124

124:                                              ; preds = %140, %121
  %125 = load i32, ptr %6, align 4, !tbaa !9
  %126 = load ptr, ptr %3, align 8, !tbaa !5
  %127 = getelementptr inbounds %struct._Operator, ptr %126, i32 0, i32 4
  %128 = load i32, ptr %127, align 8, !tbaa !11
  %129 = icmp slt i32 %125, %128
  br i1 %129, label %130, label %143

130:                                              ; preds = %124
  %131 = load i32, ptr %6, align 4, !tbaa !9
  %132 = sext i32 %131 to i64
  %133 = getelementptr inbounds [15 x i32], ptr @linst_table, i64 0, i64 %132
  %134 = load i32, ptr %133, align 4, !tbaa !9
  %135 = load ptr, ptr %12, align 8, !tbaa !5
  %136 = getelementptr inbounds %struct._MixedOperator, ptr %135, i32 0, i32 1
  %137 = load i32, ptr %6, align 4, !tbaa !9
  %138 = sext i32 %137 to i64
  %139 = getelementptr inbounds [15 x i32], ptr %136, i64 0, i64 %138
  store i32 %134, ptr %139, align 4, !tbaa !9
  br label %140

140:                                              ; preds = %130
  %141 = load i32, ptr %6, align 4, !tbaa !9
  %142 = add nsw i32 %141, 1
  store i32 %142, ptr %6, align 4, !tbaa !9
  br label %124, !llvm.loop !21

143:                                              ; preds = %124
  %144 = load ptr, ptr %10, align 8, !tbaa !5
  %145 = getelementptr inbounds %struct._WffNode, ptr %144, i32 0, i32 0
  %146 = load i32, ptr %145, align 8, !tbaa !17
  %147 = icmp eq i32 %146, 2006
  br i1 %147, label %148, label %306

148:                                              ; preds = %143
  store i32 0, ptr %7, align 4, !tbaa !9
  store i32 0, ptr %8, align 4, !tbaa !9
  %149 = load ptr, ptr %10, align 8, !tbaa !5
  %150 = getelementptr inbounds %struct._WffNode, ptr %149, i32 0, i32 4
  %151 = load ptr, ptr %150, align 8, !tbaa !20
  store ptr %151, ptr %11, align 8, !tbaa !5
  br label %152

152:                                              ; preds = %172, %148
  %153 = load ptr, ptr %11, align 8, !tbaa !5
  %154 = icmp ne ptr %153, null
  br i1 %154, label %155, label %176

155:                                              ; preds = %152
  %156 = load ptr, ptr %11, align 8, !tbaa !5
  %157 = getelementptr inbounds %struct._WffNode, ptr %156, i32 0, i32 0
  %158 = load i32, ptr %157, align 8, !tbaa !17
  %159 = icmp eq i32 %158, 2002
  br i1 %159, label %160, label %163

160:                                              ; preds = %155
  %161 = load i32, ptr %7, align 4, !tbaa !9
  %162 = add nsw i32 %161, 1
  store i32 %162, ptr %7, align 4, !tbaa !9
  br label %163

163:                                              ; preds = %160, %155
  %164 = load ptr, ptr %11, align 8, !tbaa !5
  %165 = getelementptr inbounds %struct._WffNode, ptr %164, i32 0, i32 0
  %166 = load i32, ptr %165, align 8, !tbaa !17
  %167 = icmp eq i32 %166, 2003
  br i1 %167, label %168, label %171

168:                                              ; preds = %163
  %169 = load i32, ptr %8, align 4, !tbaa !9
  %170 = add nsw i32 %169, 1
  store i32 %170, ptr %8, align 4, !tbaa !9
  br label %171

171:                                              ; preds = %168, %163
  br label %172

172:                                              ; preds = %171
  %173 = load ptr, ptr %11, align 8, !tbaa !5
  %174 = getelementptr inbounds %struct._WffNode, ptr %173, i32 0, i32 5
  %175 = load ptr, ptr %174, align 8, !tbaa !22
  store ptr %175, ptr %11, align 8, !tbaa !5
  br label %152, !llvm.loop !23

176:                                              ; preds = %152
  %177 = load i32, ptr %7, align 4, !tbaa !9
  %178 = sext i32 %177 to i64
  %179 = call noalias ptr @calloc(i64 noundef %178, i64 noundef 24) #7
  %180 = load ptr, ptr %12, align 8, !tbaa !5
  %181 = getelementptr inbounds %struct._MixedOperator, ptr %180, i32 0, i32 2
  store ptr %179, ptr %181, align 8, !tbaa !24
  %182 = load i32, ptr %8, align 4, !tbaa !9
  %183 = sext i32 %182 to i64
  %184 = call noalias ptr @calloc(i64 noundef %183, i64 noundef 4) #7
  %185 = load ptr, ptr %12, align 8, !tbaa !5
  %186 = getelementptr inbounds %struct._MixedOperator, ptr %185, i32 0, i32 4
  store ptr %184, ptr %186, align 8, !tbaa !26
  %187 = load i32, ptr %8, align 4, !tbaa !9
  %188 = sext i32 %187 to i64
  %189 = call noalias ptr @calloc(i64 noundef %188, i64 noundef 8) #7
  %190 = load ptr, ptr %12, align 8, !tbaa !5
  %191 = getelementptr inbounds %struct._MixedOperator, ptr %190, i32 0, i32 5
  store ptr %189, ptr %191, align 8, !tbaa !27
  %192 = load i32, ptr %8, align 4, !tbaa !9
  %193 = sext i32 %192 to i64
  %194 = call noalias ptr @calloc(i64 noundef %193, i64 noundef 8) #7
  %195 = load ptr, ptr %12, align 8, !tbaa !5
  %196 = getelementptr inbounds %struct._MixedOperator, ptr %195, i32 0, i32 6
  store ptr %194, ptr %196, align 8, !tbaa !28
  %197 = load i32, ptr %7, align 4, !tbaa !9
  %198 = load ptr, ptr %12, align 8, !tbaa !5
  %199 = getelementptr inbounds %struct._MixedOperator, ptr %198, i32 0, i32 3
  store i32 %197, ptr %199, align 8, !tbaa !29
  %200 = load i32, ptr %8, align 4, !tbaa !9
  %201 = load ptr, ptr %12, align 8, !tbaa !5
  %202 = getelementptr inbounds %struct._MixedOperator, ptr %201, i32 0, i32 7
  store i32 %200, ptr %202, align 8, !tbaa !30
  store i32 0, ptr %7, align 4, !tbaa !9
  store i32 0, ptr %8, align 4, !tbaa !9
  %203 = load ptr, ptr %10, align 8, !tbaa !5
  %204 = getelementptr inbounds %struct._WffNode, ptr %203, i32 0, i32 4
  %205 = load ptr, ptr %204, align 8, !tbaa !20
  store ptr %205, ptr %11, align 8, !tbaa !5
  br label %206

206:                                              ; preds = %301, %176
  %207 = load ptr, ptr %11, align 8, !tbaa !5
  %208 = icmp ne ptr %207, null
  br i1 %208, label %209, label %305

209:                                              ; preds = %206
  %210 = load ptr, ptr %11, align 8, !tbaa !5
  %211 = getelementptr inbounds %struct._WffNode, ptr %210, i32 0, i32 0
  %212 = load i32, ptr %211, align 8, !tbaa !17
  %213 = icmp eq i32 %212, 2002
  br i1 %213, label %214, label %263

214:                                              ; preds = %209
  %215 = load ptr, ptr %11, align 8, !tbaa !5
  %216 = getelementptr inbounds %struct._WffNode, ptr %215, i32 0, i32 7
  %217 = load ptr, ptr %216, align 8, !tbaa !31
  %218 = getelementptr inbounds %struct._Fact, ptr %217, i32 0, i32 0
  %219 = load i32, ptr %218, align 4, !tbaa !32
  %220 = load ptr, ptr %12, align 8, !tbaa !5
  %221 = getelementptr inbounds %struct._MixedOperator, ptr %220, i32 0, i32 2
  %222 = load ptr, ptr %221, align 8, !tbaa !24
  %223 = load i32, ptr %7, align 4, !tbaa !9
  %224 = sext i32 %223 to i64
  %225 = getelementptr inbounds %struct._Fact, ptr %222, i64 %224
  %226 = getelementptr inbounds %struct._Fact, ptr %225, i32 0, i32 0
  store i32 %219, ptr %226, align 4, !tbaa !32
  store i32 0, ptr %6, align 4, !tbaa !9
  br label %227

227:                                              ; preds = %257, %214
  %228 = load i32, ptr %6, align 4, !tbaa !9
  %229 = load ptr, ptr %11, align 8, !tbaa !5
  %230 = getelementptr inbounds %struct._WffNode, ptr %229, i32 0, i32 7
  %231 = load ptr, ptr %230, align 8, !tbaa !31
  %232 = getelementptr inbounds %struct._Fact, ptr %231, i32 0, i32 0
  %233 = load i32, ptr %232, align 4, !tbaa !32
  %234 = sext i32 %233 to i64
  %235 = getelementptr inbounds [50 x i32], ptr @garity, i64 0, i64 %234
  %236 = load i32, ptr %235, align 4, !tbaa !9
  %237 = icmp slt i32 %228, %236
  br i1 %237, label %238, label %260

238:                                              ; preds = %227
  %239 = load ptr, ptr %11, align 8, !tbaa !5
  %240 = getelementptr inbounds %struct._WffNode, ptr %239, i32 0, i32 7
  %241 = load ptr, ptr %240, align 8, !tbaa !31
  %242 = getelementptr inbounds %struct._Fact, ptr %241, i32 0, i32 1
  %243 = load i32, ptr %6, align 4, !tbaa !9
  %244 = sext i32 %243 to i64
  %245 = getelementptr inbounds [5 x i32], ptr %242, i64 0, i64 %244
  %246 = load i32, ptr %245, align 4, !tbaa !9
  %247 = load ptr, ptr %12, align 8, !tbaa !5
  %248 = getelementptr inbounds %struct._MixedOperator, ptr %247, i32 0, i32 2
  %249 = load ptr, ptr %248, align 8, !tbaa !24
  %250 = load i32, ptr %7, align 4, !tbaa !9
  %251 = sext i32 %250 to i64
  %252 = getelementptr inbounds %struct._Fact, ptr %249, i64 %251
  %253 = getelementptr inbounds %struct._Fact, ptr %252, i32 0, i32 1
  %254 = load i32, ptr %6, align 4, !tbaa !9
  %255 = sext i32 %254 to i64
  %256 = getelementptr inbounds [5 x i32], ptr %253, i64 0, i64 %255
  store i32 %246, ptr %256, align 4, !tbaa !9
  br label %257

257:                                              ; preds = %238
  %258 = load i32, ptr %6, align 4, !tbaa !9
  %259 = add nsw i32 %258, 1
  store i32 %259, ptr %6, align 4, !tbaa !9
  br label %227, !llvm.loop !34

260:                                              ; preds = %227
  %261 = load i32, ptr %7, align 4, !tbaa !9
  %262 = add nsw i32 %261, 1
  store i32 %262, ptr %7, align 4, !tbaa !9
  br label %263

263:                                              ; preds = %260, %209
  %264 = load ptr, ptr %11, align 8, !tbaa !5
  %265 = getelementptr inbounds %struct._WffNode, ptr %264, i32 0, i32 0
  %266 = load i32, ptr %265, align 8, !tbaa !17
  %267 = icmp eq i32 %266, 2003
  br i1 %267, label %268, label %300

268:                                              ; preds = %263
  %269 = load ptr, ptr %11, align 8, !tbaa !5
  %270 = getelementptr inbounds %struct._WffNode, ptr %269, i32 0, i32 10
  %271 = load i32, ptr %270, align 8, !tbaa !35
  %272 = load ptr, ptr %12, align 8, !tbaa !5
  %273 = getelementptr inbounds %struct._MixedOperator, ptr %272, i32 0, i32 4
  %274 = load ptr, ptr %273, align 8, !tbaa !26
  %275 = load i32, ptr %8, align 4, !tbaa !9
  %276 = sext i32 %275 to i64
  %277 = getelementptr inbounds i32, ptr %274, i64 %276
  store i32 %271, ptr %277, align 4, !tbaa !9
  %278 = load ptr, ptr %11, align 8, !tbaa !5
  %279 = getelementptr inbounds %struct._WffNode, ptr %278, i32 0, i32 11
  %280 = load ptr, ptr %279, align 8, !tbaa !36
  %281 = call ptr @copy_Exp(ptr noundef %280)
  %282 = load ptr, ptr %12, align 8, !tbaa !5
  %283 = getelementptr inbounds %struct._MixedOperator, ptr %282, i32 0, i32 5
  %284 = load ptr, ptr %283, align 8, !tbaa !27
  %285 = load i32, ptr %8, align 4, !tbaa !9
  %286 = sext i32 %285 to i64
  %287 = getelementptr inbounds ptr, ptr %284, i64 %286
  store ptr %281, ptr %287, align 8, !tbaa !5
  %288 = load ptr, ptr %11, align 8, !tbaa !5
  %289 = getelementptr inbounds %struct._WffNode, ptr %288, i32 0, i32 12
  %290 = load ptr, ptr %289, align 8, !tbaa !37
  %291 = call ptr @copy_Exp(ptr noundef %290)
  %292 = load ptr, ptr %12, align 8, !tbaa !5
  %293 = getelementptr inbounds %struct._MixedOperator, ptr %292, i32 0, i32 6
  %294 = load ptr, ptr %293, align 8, !tbaa !28
  %295 = load i32, ptr %8, align 4, !tbaa !9
  %296 = sext i32 %295 to i64
  %297 = getelementptr inbounds ptr, ptr %294, i64 %296
  store ptr %291, ptr %297, align 8, !tbaa !5
  %298 = load i32, ptr %8, align 4, !tbaa !9
  %299 = add nsw i32 %298, 1
  store i32 %299, ptr %8, align 4, !tbaa !9
  br label %300

300:                                              ; preds = %268, %263
  br label %301

301:                                              ; preds = %300
  %302 = load ptr, ptr %11, align 8, !tbaa !5
  %303 = getelementptr inbounds %struct._WffNode, ptr %302, i32 0, i32 5
  %304 = load ptr, ptr %303, align 8, !tbaa !22
  store ptr %304, ptr %11, align 8, !tbaa !5
  br label %206, !llvm.loop !38

305:                                              ; preds = %206
  br label %400

306:                                              ; preds = %143
  %307 = load ptr, ptr %10, align 8, !tbaa !5
  %308 = getelementptr inbounds %struct._WffNode, ptr %307, i32 0, i32 0
  %309 = load i32, ptr %308, align 8, !tbaa !17
  %310 = icmp eq i32 %309, 2002
  br i1 %310, label %311, label %359

311:                                              ; preds = %306
  %312 = call noalias ptr @calloc(i64 noundef 1, i64 noundef 24) #7
  %313 = load ptr, ptr %12, align 8, !tbaa !5
  %314 = getelementptr inbounds %struct._MixedOperator, ptr %313, i32 0, i32 2
  store ptr %312, ptr %314, align 8, !tbaa !24
  %315 = load ptr, ptr %12, align 8, !tbaa !5
  %316 = getelementptr inbounds %struct._MixedOperator, ptr %315, i32 0, i32 3
  store i32 1, ptr %316, align 8, !tbaa !29
  %317 = load ptr, ptr %10, align 8, !tbaa !5
  %318 = getelementptr inbounds %struct._WffNode, ptr %317, i32 0, i32 7
  %319 = load ptr, ptr %318, align 8, !tbaa !31
  %320 = getelementptr inbounds %struct._Fact, ptr %319, i32 0, i32 0
  %321 = load i32, ptr %320, align 4, !tbaa !32
  %322 = load ptr, ptr %12, align 8, !tbaa !5
  %323 = getelementptr inbounds %struct._MixedOperator, ptr %322, i32 0, i32 2
  %324 = load ptr, ptr %323, align 8, !tbaa !24
  %325 = getelementptr inbounds %struct._Fact, ptr %324, i64 0
  %326 = getelementptr inbounds %struct._Fact, ptr %325, i32 0, i32 0
  store i32 %321, ptr %326, align 4, !tbaa !32
  store i32 0, ptr %6, align 4, !tbaa !9
  br label %327

327:                                              ; preds = %355, %311
  %328 = load i32, ptr %6, align 4, !tbaa !9
  %329 = load ptr, ptr %10, align 8, !tbaa !5
  %330 = getelementptr inbounds %struct._WffNode, ptr %329, i32 0, i32 7
  %331 = load ptr, ptr %330, align 8, !tbaa !31
  %332 = getelementptr inbounds %struct._Fact, ptr %331, i32 0, i32 0
  %333 = load i32, ptr %332, align 4, !tbaa !32
  %334 = sext i32 %333 to i64
  %335 = getelementptr inbounds [50 x i32], ptr @garity, i64 0, i64 %334
  %336 = load i32, ptr %335, align 4, !tbaa !9
  %337 = icmp slt i32 %328, %336
  br i1 %337, label %338, label %358

338:                                              ; preds = %327
  %339 = load ptr, ptr %10, align 8, !tbaa !5
  %340 = getelementptr inbounds %struct._WffNode, ptr %339, i32 0, i32 7
  %341 = load ptr, ptr %340, align 8, !tbaa !31
  %342 = getelementptr inbounds %struct._Fact, ptr %341, i32 0, i32 1
  %343 = load i32, ptr %6, align 4, !tbaa !9
  %344 = sext i32 %343 to i64
  %345 = getelementptr inbounds [5 x i32], ptr %342, i64 0, i64 %344
  %346 = load i32, ptr %345, align 4, !tbaa !9
  %347 = load ptr, ptr %12, align 8, !tbaa !5
  %348 = getelementptr inbounds %struct._MixedOperator, ptr %347, i32 0, i32 2
  %349 = load ptr, ptr %348, align 8, !tbaa !24
  %350 = getelementptr inbounds %struct._Fact, ptr %349, i64 0
  %351 = getelementptr inbounds %struct._Fact, ptr %350, i32 0, i32 1
  %352 = load i32, ptr %6, align 4, !tbaa !9
  %353 = sext i32 %352 to i64
  %354 = getelementptr inbounds [5 x i32], ptr %351, i64 0, i64 %353
  store i32 %346, ptr %354, align 4, !tbaa !9
  br label %355

355:                                              ; preds = %338
  %356 = load i32, ptr %6, align 4, !tbaa !9
  %357 = add nsw i32 %356, 1
  store i32 %357, ptr %6, align 4, !tbaa !9
  br label %327, !llvm.loop !39

358:                                              ; preds = %327
  br label %359

359:                                              ; preds = %358, %306
  %360 = load ptr, ptr %10, align 8, !tbaa !5
  %361 = getelementptr inbounds %struct._WffNode, ptr %360, i32 0, i32 0
  %362 = load i32, ptr %361, align 8, !tbaa !17
  %363 = icmp eq i32 %362, 2003
  br i1 %363, label %364, label %399

364:                                              ; preds = %359
  %365 = call noalias ptr @calloc(i64 noundef 1, i64 noundef 4) #7
  %366 = load ptr, ptr %12, align 8, !tbaa !5
  %367 = getelementptr inbounds %struct._MixedOperator, ptr %366, i32 0, i32 4
  store ptr %365, ptr %367, align 8, !tbaa !26
  %368 = call noalias ptr @calloc(i64 noundef 1, i64 noundef 8) #7
  %369 = load ptr, ptr %12, align 8, !tbaa !5
  %370 = getelementptr inbounds %struct._MixedOperator, ptr %369, i32 0, i32 5
  store ptr %368, ptr %370, align 8, !tbaa !27
  %371 = call noalias ptr @calloc(i64 noundef 1, i64 noundef 8) #7
  %372 = load ptr, ptr %12, align 8, !tbaa !5
  %373 = getelementptr inbounds %struct._MixedOperator, ptr %372, i32 0, i32 6
  store ptr %371, ptr %373, align 8, !tbaa !28
  %374 = load ptr, ptr %10, align 8, !tbaa !5
  %375 = getelementptr inbounds %struct._WffNode, ptr %374, i32 0, i32 10
  %376 = load i32, ptr %375, align 8, !tbaa !35
  %377 = load ptr, ptr %12, align 8, !tbaa !5
  %378 = getelementptr inbounds %struct._MixedOperator, ptr %377, i32 0, i32 4
  %379 = load ptr, ptr %378, align 8, !tbaa !26
  %380 = getelementptr inbounds i32, ptr %379, i64 0
  store i32 %376, ptr %380, align 4, !tbaa !9
  %381 = load ptr, ptr %10, align 8, !tbaa !5
  %382 = getelementptr inbounds %struct._WffNode, ptr %381, i32 0, i32 11
  %383 = load ptr, ptr %382, align 8, !tbaa !36
  %384 = call ptr @copy_Exp(ptr noundef %383)
  %385 = load ptr, ptr %12, align 8, !tbaa !5
  %386 = getelementptr inbounds %struct._MixedOperator, ptr %385, i32 0, i32 5
  %387 = load ptr, ptr %386, align 8, !tbaa !27
  %388 = getelementptr inbounds ptr, ptr %387, i64 0
  store ptr %384, ptr %388, align 8, !tbaa !5
  %389 = load ptr, ptr %10, align 8, !tbaa !5
  %390 = getelementptr inbounds %struct._WffNode, ptr %389, i32 0, i32 12
  %391 = load ptr, ptr %390, align 8, !tbaa !37
  %392 = call ptr @copy_Exp(ptr noundef %391)
  %393 = load ptr, ptr %12, align 8, !tbaa !5
  %394 = getelementptr inbounds %struct._MixedOperator, ptr %393, i32 0, i32 6
  %395 = load ptr, ptr %394, align 8, !tbaa !28
  %396 = getelementptr inbounds ptr, ptr %395, i64 0
  store ptr %392, ptr %396, align 8, !tbaa !5
  %397 = load ptr, ptr %12, align 8, !tbaa !5
  %398 = getelementptr inbounds %struct._MixedOperator, ptr %397, i32 0, i32 7
  store i32 1, ptr %398, align 8, !tbaa !30
  br label %399

399:                                              ; preds = %364, %359
  br label %400

400:                                              ; preds = %399, %305
  %401 = load ptr, ptr %3, align 8, !tbaa !5
  %402 = getelementptr inbounds %struct._Operator, ptr %401, i32 0, i32 8
  %403 = load ptr, ptr %402, align 8, !tbaa !40
  %404 = call ptr @instantiate_Effect(ptr noundef %403)
  %405 = load ptr, ptr %12, align 8, !tbaa !5
  %406 = getelementptr inbounds %struct._MixedOperator, ptr %405, i32 0, i32 8
  store ptr %404, ptr %406, align 8, !tbaa !41
  %407 = load ptr, ptr @ghard_mixed_operators, align 8, !tbaa !5
  %408 = load ptr, ptr %12, align 8, !tbaa !5
  %409 = getelementptr inbounds %struct._MixedOperator, ptr %408, i32 0, i32 9
  store ptr %407, ptr %409, align 8, !tbaa !42
  %410 = load ptr, ptr %12, align 8, !tbaa !5
  store ptr %410, ptr @ghard_mixed_operators, align 8, !tbaa !5
  %411 = load i32, ptr @gnum_hard_mixed_operators, align 4, !tbaa !9
  %412 = add nsw i32 %411, 1
  store i32 %412, ptr @gnum_hard_mixed_operators, align 4, !tbaa !9
  br label %413

413:                                              ; preds = %400
  %414 = load ptr, ptr %10, align 8, !tbaa !5
  %415 = getelementptr inbounds %struct._WffNode, ptr %414, i32 0, i32 5
  %416 = load ptr, ptr %415, align 8, !tbaa !22
  store ptr %416, ptr %10, align 8, !tbaa !5
  br label %118, !llvm.loop !43

417:                                              ; preds = %118
  br label %801

418:                                              ; preds = %110
  %419 = load ptr, ptr %3, align 8, !tbaa !5
  %420 = call ptr @new_MixedOperator(ptr noundef %419)
  store ptr %420, ptr %12, align 8, !tbaa !5
  store i32 0, ptr %6, align 4, !tbaa !9
  br label %421

421:                                              ; preds = %437, %418
  %422 = load i32, ptr %6, align 4, !tbaa !9
  %423 = load ptr, ptr %3, align 8, !tbaa !5
  %424 = getelementptr inbounds %struct._Operator, ptr %423, i32 0, i32 4
  %425 = load i32, ptr %424, align 8, !tbaa !11
  %426 = icmp slt i32 %422, %425
  br i1 %426, label %427, label %440

427:                                              ; preds = %421
  %428 = load i32, ptr %6, align 4, !tbaa !9
  %429 = sext i32 %428 to i64
  %430 = getelementptr inbounds [15 x i32], ptr @linst_table, i64 0, i64 %429
  %431 = load i32, ptr %430, align 4, !tbaa !9
  %432 = load ptr, ptr %12, align 8, !tbaa !5
  %433 = getelementptr inbounds %struct._MixedOperator, ptr %432, i32 0, i32 1
  %434 = load i32, ptr %6, align 4, !tbaa !9
  %435 = sext i32 %434 to i64
  %436 = getelementptr inbounds [15 x i32], ptr %433, i64 0, i64 %435
  store i32 %431, ptr %436, align 4, !tbaa !9
  br label %437

437:                                              ; preds = %427
  %438 = load i32, ptr %6, align 4, !tbaa !9
  %439 = add nsw i32 %438, 1
  store i32 %439, ptr %6, align 4, !tbaa !9
  br label %421, !llvm.loop !44

440:                                              ; preds = %421
  store i32 0, ptr %7, align 4, !tbaa !9
  store i32 0, ptr %8, align 4, !tbaa !9
  %441 = load ptr, ptr %9, align 8, !tbaa !5
  %442 = getelementptr inbounds %struct._WffNode, ptr %441, i32 0, i32 4
  %443 = load ptr, ptr %442, align 8, !tbaa !20
  store ptr %443, ptr %10, align 8, !tbaa !5
  br label %444

444:                                              ; preds = %464, %440
  %445 = load ptr, ptr %10, align 8, !tbaa !5
  %446 = icmp ne ptr %445, null
  br i1 %446, label %447, label %468

447:                                              ; preds = %444
  %448 = load ptr, ptr %10, align 8, !tbaa !5
  %449 = getelementptr inbounds %struct._WffNode, ptr %448, i32 0, i32 0
  %450 = load i32, ptr %449, align 8, !tbaa !17
  %451 = icmp eq i32 %450, 2002
  br i1 %451, label %452, label %455

452:                                              ; preds = %447
  %453 = load i32, ptr %7, align 4, !tbaa !9
  %454 = add nsw i32 %453, 1
  store i32 %454, ptr %7, align 4, !tbaa !9
  br label %455

455:                                              ; preds = %452, %447
  %456 = load ptr, ptr %10, align 8, !tbaa !5
  %457 = getelementptr inbounds %struct._WffNode, ptr %456, i32 0, i32 0
  %458 = load i32, ptr %457, align 8, !tbaa !17
  %459 = icmp eq i32 %458, 2003
  br i1 %459, label %460, label %463

460:                                              ; preds = %455
  %461 = load i32, ptr %8, align 4, !tbaa !9
  %462 = add nsw i32 %461, 1
  store i32 %462, ptr %8, align 4, !tbaa !9
  br label %463

463:                                              ; preds = %460, %455
  br label %464

464:                                              ; preds = %463
  %465 = load ptr, ptr %10, align 8, !tbaa !5
  %466 = getelementptr inbounds %struct._WffNode, ptr %465, i32 0, i32 5
  %467 = load ptr, ptr %466, align 8, !tbaa !22
  store ptr %467, ptr %10, align 8, !tbaa !5
  br label %444, !llvm.loop !45

468:                                              ; preds = %444
  %469 = load i32, ptr %7, align 4, !tbaa !9
  %470 = sext i32 %469 to i64
  %471 = call noalias ptr @calloc(i64 noundef %470, i64 noundef 24) #7
  %472 = load ptr, ptr %12, align 8, !tbaa !5
  %473 = getelementptr inbounds %struct._MixedOperator, ptr %472, i32 0, i32 2
  store ptr %471, ptr %473, align 8, !tbaa !24
  %474 = load i32, ptr %8, align 4, !tbaa !9
  %475 = sext i32 %474 to i64
  %476 = call noalias ptr @calloc(i64 noundef %475, i64 noundef 4) #7
  %477 = load ptr, ptr %12, align 8, !tbaa !5
  %478 = getelementptr inbounds %struct._MixedOperator, ptr %477, i32 0, i32 4
  store ptr %476, ptr %478, align 8, !tbaa !26
  %479 = load i32, ptr %8, align 4, !tbaa !9
  %480 = sext i32 %479 to i64
  %481 = call noalias ptr @calloc(i64 noundef %480, i64 noundef 8) #7
  %482 = load ptr, ptr %12, align 8, !tbaa !5
  %483 = getelementptr inbounds %struct._MixedOperator, ptr %482, i32 0, i32 5
  store ptr %481, ptr %483, align 8, !tbaa !27
  %484 = load i32, ptr %8, align 4, !tbaa !9
  %485 = sext i32 %484 to i64
  %486 = call noalias ptr @calloc(i64 noundef %485, i64 noundef 8) #7
  %487 = load ptr, ptr %12, align 8, !tbaa !5
  %488 = getelementptr inbounds %struct._MixedOperator, ptr %487, i32 0, i32 6
  store ptr %486, ptr %488, align 8, !tbaa !28
  %489 = load i32, ptr %7, align 4, !tbaa !9
  %490 = load ptr, ptr %12, align 8, !tbaa !5
  %491 = getelementptr inbounds %struct._MixedOperator, ptr %490, i32 0, i32 3
  store i32 %489, ptr %491, align 8, !tbaa !29
  %492 = load i32, ptr %8, align 4, !tbaa !9
  %493 = load ptr, ptr %12, align 8, !tbaa !5
  %494 = getelementptr inbounds %struct._MixedOperator, ptr %493, i32 0, i32 7
  store i32 %492, ptr %494, align 8, !tbaa !30
  store i32 0, ptr %7, align 4, !tbaa !9
  store i32 0, ptr %8, align 4, !tbaa !9
  %495 = load ptr, ptr %9, align 8, !tbaa !5
  %496 = getelementptr inbounds %struct._WffNode, ptr %495, i32 0, i32 4
  %497 = load ptr, ptr %496, align 8, !tbaa !20
  store ptr %497, ptr %10, align 8, !tbaa !5
  br label %498

498:                                              ; preds = %593, %468
  %499 = load ptr, ptr %10, align 8, !tbaa !5
  %500 = icmp ne ptr %499, null
  br i1 %500, label %501, label %597

501:                                              ; preds = %498
  %502 = load ptr, ptr %10, align 8, !tbaa !5
  %503 = getelementptr inbounds %struct._WffNode, ptr %502, i32 0, i32 0
  %504 = load i32, ptr %503, align 8, !tbaa !17
  %505 = icmp eq i32 %504, 2002
  br i1 %505, label %506, label %555

506:                                              ; preds = %501
  %507 = load ptr, ptr %10, align 8, !tbaa !5
  %508 = getelementptr inbounds %struct._WffNode, ptr %507, i32 0, i32 7
  %509 = load ptr, ptr %508, align 8, !tbaa !31
  %510 = getelementptr inbounds %struct._Fact, ptr %509, i32 0, i32 0
  %511 = load i32, ptr %510, align 4, !tbaa !32
  %512 = load ptr, ptr %12, align 8, !tbaa !5
  %513 = getelementptr inbounds %struct._MixedOperator, ptr %512, i32 0, i32 2
  %514 = load ptr, ptr %513, align 8, !tbaa !24
  %515 = load i32, ptr %7, align 4, !tbaa !9
  %516 = sext i32 %515 to i64
  %517 = getelementptr inbounds %struct._Fact, ptr %514, i64 %516
  %518 = getelementptr inbounds %struct._Fact, ptr %517, i32 0, i32 0
  store i32 %511, ptr %518, align 4, !tbaa !32
  store i32 0, ptr %6, align 4, !tbaa !9
  br label %519

519:                                              ; preds = %549, %506
  %520 = load i32, ptr %6, align 4, !tbaa !9
  %521 = load ptr, ptr %10, align 8, !tbaa !5
  %522 = getelementptr inbounds %struct._WffNode, ptr %521, i32 0, i32 7
  %523 = load ptr, ptr %522, align 8, !tbaa !31
  %524 = getelementptr inbounds %struct._Fact, ptr %523, i32 0, i32 0
  %525 = load i32, ptr %524, align 4, !tbaa !32
  %526 = sext i32 %525 to i64
  %527 = getelementptr inbounds [50 x i32], ptr @garity, i64 0, i64 %526
  %528 = load i32, ptr %527, align 4, !tbaa !9
  %529 = icmp slt i32 %520, %528
  br i1 %529, label %530, label %552

530:                                              ; preds = %519
  %531 = load ptr, ptr %10, align 8, !tbaa !5
  %532 = getelementptr inbounds %struct._WffNode, ptr %531, i32 0, i32 7
  %533 = load ptr, ptr %532, align 8, !tbaa !31
  %534 = getelementptr inbounds %struct._Fact, ptr %533, i32 0, i32 1
  %535 = load i32, ptr %6, align 4, !tbaa !9
  %536 = sext i32 %535 to i64
  %537 = getelementptr inbounds [5 x i32], ptr %534, i64 0, i64 %536
  %538 = load i32, ptr %537, align 4, !tbaa !9
  %539 = load ptr, ptr %12, align 8, !tbaa !5
  %540 = getelementptr inbounds %struct._MixedOperator, ptr %539, i32 0, i32 2
  %541 = load ptr, ptr %540, align 8, !tbaa !24
  %542 = load i32, ptr %7, align 4, !tbaa !9
  %543 = sext i32 %542 to i64
  %544 = getelementptr inbounds %struct._Fact, ptr %541, i64 %543
  %545 = getelementptr inbounds %struct._Fact, ptr %544, i32 0, i32 1
  %546 = load i32, ptr %6, align 4, !tbaa !9
  %547 = sext i32 %546 to i64
  %548 = getelementptr inbounds [5 x i32], ptr %545, i64 0, i64 %547
  store i32 %538, ptr %548, align 4, !tbaa !9
  br label %549

549:                                              ; preds = %530
  %550 = load i32, ptr %6, align 4, !tbaa !9
  %551 = add nsw i32 %550, 1
  store i32 %551, ptr %6, align 4, !tbaa !9
  br label %519, !llvm.loop !46

552:                                              ; preds = %519
  %553 = load i32, ptr %7, align 4, !tbaa !9
  %554 = add nsw i32 %553, 1
  store i32 %554, ptr %7, align 4, !tbaa !9
  br label %555

555:                                              ; preds = %552, %501
  %556 = load ptr, ptr %10, align 8, !tbaa !5
  %557 = getelementptr inbounds %struct._WffNode, ptr %556, i32 0, i32 0
  %558 = load i32, ptr %557, align 8, !tbaa !17
  %559 = icmp eq i32 %558, 2003
  br i1 %559, label %560, label %592

560:                                              ; preds = %555
  %561 = load ptr, ptr %10, align 8, !tbaa !5
  %562 = getelementptr inbounds %struct._WffNode, ptr %561, i32 0, i32 10
  %563 = load i32, ptr %562, align 8, !tbaa !35
  %564 = load ptr, ptr %12, align 8, !tbaa !5
  %565 = getelementptr inbounds %struct._MixedOperator, ptr %564, i32 0, i32 4
  %566 = load ptr, ptr %565, align 8, !tbaa !26
  %567 = load i32, ptr %8, align 4, !tbaa !9
  %568 = sext i32 %567 to i64
  %569 = getelementptr inbounds i32, ptr %566, i64 %568
  store i32 %563, ptr %569, align 4, !tbaa !9
  %570 = load ptr, ptr %10, align 8, !tbaa !5
  %571 = getelementptr inbounds %struct._WffNode, ptr %570, i32 0, i32 11
  %572 = load ptr, ptr %571, align 8, !tbaa !36
  %573 = call ptr @copy_Exp(ptr noundef %572)
  %574 = load ptr, ptr %12, align 8, !tbaa !5
  %575 = getelementptr inbounds %struct._MixedOperator, ptr %574, i32 0, i32 5
  %576 = load ptr, ptr %575, align 8, !tbaa !27
  %577 = load i32, ptr %8, align 4, !tbaa !9
  %578 = sext i32 %577 to i64
  %579 = getelementptr inbounds ptr, ptr %576, i64 %578
  store ptr %573, ptr %579, align 8, !tbaa !5
  %580 = load ptr, ptr %10, align 8, !tbaa !5
  %581 = getelementptr inbounds %struct._WffNode, ptr %580, i32 0, i32 12
  %582 = load ptr, ptr %581, align 8, !tbaa !37
  %583 = call ptr @copy_Exp(ptr noundef %582)
  %584 = load ptr, ptr %12, align 8, !tbaa !5
  %585 = getelementptr inbounds %struct._MixedOperator, ptr %584, i32 0, i32 6
  %586 = load ptr, ptr %585, align 8, !tbaa !28
  %587 = load i32, ptr %8, align 4, !tbaa !9
  %588 = sext i32 %587 to i64
  %589 = getelementptr inbounds ptr, ptr %586, i64 %588
  store ptr %583, ptr %589, align 8, !tbaa !5
  %590 = load i32, ptr %8, align 4, !tbaa !9
  %591 = add nsw i32 %590, 1
  store i32 %591, ptr %8, align 4, !tbaa !9
  br label %592

592:                                              ; preds = %560, %555
  br label %593

593:                                              ; preds = %592
  %594 = load ptr, ptr %10, align 8, !tbaa !5
  %595 = getelementptr inbounds %struct._WffNode, ptr %594, i32 0, i32 5
  %596 = load ptr, ptr %595, align 8, !tbaa !22
  store ptr %596, ptr %10, align 8, !tbaa !5
  br label %498, !llvm.loop !47

597:                                              ; preds = %498
  %598 = load ptr, ptr %3, align 8, !tbaa !5
  %599 = getelementptr inbounds %struct._Operator, ptr %598, i32 0, i32 8
  %600 = load ptr, ptr %599, align 8, !tbaa !40
  %601 = call ptr @instantiate_Effect(ptr noundef %600)
  %602 = load ptr, ptr %12, align 8, !tbaa !5
  %603 = getelementptr inbounds %struct._MixedOperator, ptr %602, i32 0, i32 8
  store ptr %601, ptr %603, align 8, !tbaa !41
  %604 = load ptr, ptr @ghard_mixed_operators, align 8, !tbaa !5
  %605 = load ptr, ptr %12, align 8, !tbaa !5
  %606 = getelementptr inbounds %struct._MixedOperator, ptr %605, i32 0, i32 9
  store ptr %604, ptr %606, align 8, !tbaa !42
  %607 = load ptr, ptr %12, align 8, !tbaa !5
  store ptr %607, ptr @ghard_mixed_operators, align 8, !tbaa !5
  %608 = load i32, ptr @gnum_hard_mixed_operators, align 4, !tbaa !9
  %609 = add nsw i32 %608, 1
  store i32 %609, ptr @gnum_hard_mixed_operators, align 4, !tbaa !9
  br label %801

610:                                              ; preds = %110
  %611 = load ptr, ptr %3, align 8, !tbaa !5
  %612 = call ptr @new_MixedOperator(ptr noundef %611)
  store ptr %612, ptr %12, align 8, !tbaa !5
  store i32 0, ptr %6, align 4, !tbaa !9
  br label %613

613:                                              ; preds = %629, %610
  %614 = load i32, ptr %6, align 4, !tbaa !9
  %615 = load ptr, ptr %3, align 8, !tbaa !5
  %616 = getelementptr inbounds %struct._Operator, ptr %615, i32 0, i32 4
  %617 = load i32, ptr %616, align 8, !tbaa !11
  %618 = icmp slt i32 %614, %617
  br i1 %618, label %619, label %632

619:                                              ; preds = %613
  %620 = load i32, ptr %6, align 4, !tbaa !9
  %621 = sext i32 %620 to i64
  %622 = getelementptr inbounds [15 x i32], ptr @linst_table, i64 0, i64 %621
  %623 = load i32, ptr %622, align 4, !tbaa !9
  %624 = load ptr, ptr %12, align 8, !tbaa !5
  %625 = getelementptr inbounds %struct._MixedOperator, ptr %624, i32 0, i32 1
  %626 = load i32, ptr %6, align 4, !tbaa !9
  %627 = sext i32 %626 to i64
  %628 = getelementptr inbounds [15 x i32], ptr %625, i64 0, i64 %627
  store i32 %623, ptr %628, align 4, !tbaa !9
  br label %629

629:                                              ; preds = %619
  %630 = load i32, ptr %6, align 4, !tbaa !9
  %631 = add nsw i32 %630, 1
  store i32 %631, ptr %6, align 4, !tbaa !9
  br label %613, !llvm.loop !48

632:                                              ; preds = %613
  %633 = call noalias ptr @calloc(i64 noundef 1, i64 noundef 24) #7
  %634 = load ptr, ptr %12, align 8, !tbaa !5
  %635 = getelementptr inbounds %struct._MixedOperator, ptr %634, i32 0, i32 2
  store ptr %633, ptr %635, align 8, !tbaa !24
  %636 = load ptr, ptr %12, align 8, !tbaa !5
  %637 = getelementptr inbounds %struct._MixedOperator, ptr %636, i32 0, i32 3
  store i32 1, ptr %637, align 8, !tbaa !29
  %638 = load ptr, ptr %9, align 8, !tbaa !5
  %639 = getelementptr inbounds %struct._WffNode, ptr %638, i32 0, i32 7
  %640 = load ptr, ptr %639, align 8, !tbaa !31
  %641 = getelementptr inbounds %struct._Fact, ptr %640, i32 0, i32 0
  %642 = load i32, ptr %641, align 4, !tbaa !32
  %643 = load ptr, ptr %12, align 8, !tbaa !5
  %644 = getelementptr inbounds %struct._MixedOperator, ptr %643, i32 0, i32 2
  %645 = load ptr, ptr %644, align 8, !tbaa !24
  %646 = getelementptr inbounds %struct._Fact, ptr %645, i64 0
  %647 = getelementptr inbounds %struct._Fact, ptr %646, i32 0, i32 0
  store i32 %642, ptr %647, align 4, !tbaa !32
  store i32 0, ptr %6, align 4, !tbaa !9
  br label %648

648:                                              ; preds = %676, %632
  %649 = load i32, ptr %6, align 4, !tbaa !9
  %650 = load ptr, ptr %9, align 8, !tbaa !5
  %651 = getelementptr inbounds %struct._WffNode, ptr %650, i32 0, i32 7
  %652 = load ptr, ptr %651, align 8, !tbaa !31
  %653 = getelementptr inbounds %struct._Fact, ptr %652, i32 0, i32 0
  %654 = load i32, ptr %653, align 4, !tbaa !32
  %655 = sext i32 %654 to i64
  %656 = getelementptr inbounds [50 x i32], ptr @garity, i64 0, i64 %655
  %657 = load i32, ptr %656, align 4, !tbaa !9
  %658 = icmp slt i32 %649, %657
  br i1 %658, label %659, label %679

659:                                              ; preds = %648
  %660 = load ptr, ptr %9, align 8, !tbaa !5
  %661 = getelementptr inbounds %struct._WffNode, ptr %660, i32 0, i32 7
  %662 = load ptr, ptr %661, align 8, !tbaa !31
  %663 = getelementptr inbounds %struct._Fact, ptr %662, i32 0, i32 1
  %664 = load i32, ptr %6, align 4, !tbaa !9
  %665 = sext i32 %664 to i64
  %666 = getelementptr inbounds [5 x i32], ptr %663, i64 0, i64 %665
  %667 = load i32, ptr %666, align 4, !tbaa !9
  %668 = load ptr, ptr %12, align 8, !tbaa !5
  %669 = getelementptr inbounds %struct._MixedOperator, ptr %668, i32 0, i32 2
  %670 = load ptr, ptr %669, align 8, !tbaa !24
  %671 = getelementptr inbounds %struct._Fact, ptr %670, i64 0
  %672 = getelementptr inbounds %struct._Fact, ptr %671, i32 0, i32 1
  %673 = load i32, ptr %6, align 4, !tbaa !9
  %674 = sext i32 %673 to i64
  %675 = getelementptr inbounds [5 x i32], ptr %672, i64 0, i64 %674
  store i32 %667, ptr %675, align 4, !tbaa !9
  br label %676

676:                                              ; preds = %659
  %677 = load i32, ptr %6, align 4, !tbaa !9
  %678 = add nsw i32 %677, 1
  store i32 %678, ptr %6, align 4, !tbaa !9
  br label %648, !llvm.loop !49

679:                                              ; preds = %648
  %680 = load ptr, ptr %3, align 8, !tbaa !5
  %681 = getelementptr inbounds %struct._Operator, ptr %680, i32 0, i32 8
  %682 = load ptr, ptr %681, align 8, !tbaa !40
  %683 = call ptr @instantiate_Effect(ptr noundef %682)
  %684 = load ptr, ptr %12, align 8, !tbaa !5
  %685 = getelementptr inbounds %struct._MixedOperator, ptr %684, i32 0, i32 8
  store ptr %683, ptr %685, align 8, !tbaa !41
  %686 = load ptr, ptr @ghard_mixed_operators, align 8, !tbaa !5
  %687 = load ptr, ptr %12, align 8, !tbaa !5
  %688 = getelementptr inbounds %struct._MixedOperator, ptr %687, i32 0, i32 9
  store ptr %686, ptr %688, align 8, !tbaa !42
  %689 = load ptr, ptr %12, align 8, !tbaa !5
  store ptr %689, ptr @ghard_mixed_operators, align 8, !tbaa !5
  %690 = load i32, ptr @gnum_hard_mixed_operators, align 4, !tbaa !9
  %691 = add nsw i32 %690, 1
  store i32 %691, ptr @gnum_hard_mixed_operators, align 4, !tbaa !9
  br label %801

692:                                              ; preds = %110
  %693 = load ptr, ptr %3, align 8, !tbaa !5
  %694 = call ptr @new_MixedOperator(ptr noundef %693)
  store ptr %694, ptr %12, align 8, !tbaa !5
  store i32 0, ptr %6, align 4, !tbaa !9
  br label %695

695:                                              ; preds = %711, %692
  %696 = load i32, ptr %6, align 4, !tbaa !9
  %697 = load ptr, ptr %3, align 8, !tbaa !5
  %698 = getelementptr inbounds %struct._Operator, ptr %697, i32 0, i32 4
  %699 = load i32, ptr %698, align 8, !tbaa !11
  %700 = icmp slt i32 %696, %699
  br i1 %700, label %701, label %714

701:                                              ; preds = %695
  %702 = load i32, ptr %6, align 4, !tbaa !9
  %703 = sext i32 %702 to i64
  %704 = getelementptr inbounds [15 x i32], ptr @linst_table, i64 0, i64 %703
  %705 = load i32, ptr %704, align 4, !tbaa !9
  %706 = load ptr, ptr %12, align 8, !tbaa !5
  %707 = getelementptr inbounds %struct._MixedOperator, ptr %706, i32 0, i32 1
  %708 = load i32, ptr %6, align 4, !tbaa !9
  %709 = sext i32 %708 to i64
  %710 = getelementptr inbounds [15 x i32], ptr %707, i64 0, i64 %709
  store i32 %705, ptr %710, align 4, !tbaa !9
  br label %711

711:                                              ; preds = %701
  %712 = load i32, ptr %6, align 4, !tbaa !9
  %713 = add nsw i32 %712, 1
  store i32 %713, ptr %6, align 4, !tbaa !9
  br label %695, !llvm.loop !50

714:                                              ; preds = %695
  %715 = call noalias ptr @calloc(i64 noundef 1, i64 noundef 4) #7
  %716 = load ptr, ptr %12, align 8, !tbaa !5
  %717 = getelementptr inbounds %struct._MixedOperator, ptr %716, i32 0, i32 4
  store ptr %715, ptr %717, align 8, !tbaa !26
  %718 = call noalias ptr @calloc(i64 noundef 1, i64 noundef 8) #7
  %719 = load ptr, ptr %12, align 8, !tbaa !5
  %720 = getelementptr inbounds %struct._MixedOperator, ptr %719, i32 0, i32 5
  store ptr %718, ptr %720, align 8, !tbaa !27
  %721 = call noalias ptr @calloc(i64 noundef 1, i64 noundef 8) #7
  %722 = load ptr, ptr %12, align 8, !tbaa !5
  %723 = getelementptr inbounds %struct._MixedOperator, ptr %722, i32 0, i32 6
  store ptr %721, ptr %723, align 8, !tbaa !28
  %724 = load ptr, ptr %9, align 8, !tbaa !5
  %725 = getelementptr inbounds %struct._WffNode, ptr %724, i32 0, i32 10
  %726 = load i32, ptr %725, align 8, !tbaa !35
  %727 = load ptr, ptr %12, align 8, !tbaa !5
  %728 = getelementptr inbounds %struct._MixedOperator, ptr %727, i32 0, i32 4
  %729 = load ptr, ptr %728, align 8, !tbaa !26
  %730 = getelementptr inbounds i32, ptr %729, i64 0
  store i32 %726, ptr %730, align 4, !tbaa !9
  %731 = load ptr, ptr %9, align 8, !tbaa !5
  %732 = getelementptr inbounds %struct._WffNode, ptr %731, i32 0, i32 11
  %733 = load ptr, ptr %732, align 8, !tbaa !36
  %734 = call ptr @copy_Exp(ptr noundef %733)
  %735 = load ptr, ptr %12, align 8, !tbaa !5
  %736 = getelementptr inbounds %struct._MixedOperator, ptr %735, i32 0, i32 5
  %737 = load ptr, ptr %736, align 8, !tbaa !27
  %738 = getelementptr inbounds ptr, ptr %737, i64 0
  store ptr %734, ptr %738, align 8, !tbaa !5
  %739 = load ptr, ptr %9, align 8, !tbaa !5
  %740 = getelementptr inbounds %struct._WffNode, ptr %739, i32 0, i32 12
  %741 = load ptr, ptr %740, align 8, !tbaa !37
  %742 = call ptr @copy_Exp(ptr noundef %741)
  %743 = load ptr, ptr %12, align 8, !tbaa !5
  %744 = getelementptr inbounds %struct._MixedOperator, ptr %743, i32 0, i32 6
  %745 = load ptr, ptr %744, align 8, !tbaa !28
  %746 = getelementptr inbounds ptr, ptr %745, i64 0
  store ptr %742, ptr %746, align 8, !tbaa !5
  %747 = load ptr, ptr %12, align 8, !tbaa !5
  %748 = getelementptr inbounds %struct._MixedOperator, ptr %747, i32 0, i32 7
  store i32 1, ptr %748, align 8, !tbaa !30
  %749 = load ptr, ptr %3, align 8, !tbaa !5
  %750 = getelementptr inbounds %struct._Operator, ptr %749, i32 0, i32 8
  %751 = load ptr, ptr %750, align 8, !tbaa !40
  %752 = call ptr @instantiate_Effect(ptr noundef %751)
  %753 = load ptr, ptr %12, align 8, !tbaa !5
  %754 = getelementptr inbounds %struct._MixedOperator, ptr %753, i32 0, i32 8
  store ptr %752, ptr %754, align 8, !tbaa !41
  %755 = load ptr, ptr @ghard_mixed_operators, align 8, !tbaa !5
  %756 = load ptr, ptr %12, align 8, !tbaa !5
  %757 = getelementptr inbounds %struct._MixedOperator, ptr %756, i32 0, i32 9
  store ptr %755, ptr %757, align 8, !tbaa !42
  %758 = load ptr, ptr %12, align 8, !tbaa !5
  store ptr %758, ptr @ghard_mixed_operators, align 8, !tbaa !5
  %759 = load i32, ptr @gnum_hard_mixed_operators, align 4, !tbaa !9
  %760 = add nsw i32 %759, 1
  store i32 %760, ptr @gnum_hard_mixed_operators, align 4, !tbaa !9
  br label %801

761:                                              ; preds = %110
  %762 = load ptr, ptr %3, align 8, !tbaa !5
  %763 = call ptr @new_MixedOperator(ptr noundef %762)
  store ptr %763, ptr %12, align 8, !tbaa !5
  store i32 0, ptr %6, align 4, !tbaa !9
  br label %764

764:                                              ; preds = %780, %761
  %765 = load i32, ptr %6, align 4, !tbaa !9
  %766 = load ptr, ptr %3, align 8, !tbaa !5
  %767 = getelementptr inbounds %struct._Operator, ptr %766, i32 0, i32 4
  %768 = load i32, ptr %767, align 8, !tbaa !11
  %769 = icmp slt i32 %765, %768
  br i1 %769, label %770, label %783

770:                                              ; preds = %764
  %771 = load i32, ptr %6, align 4, !tbaa !9
  %772 = sext i32 %771 to i64
  %773 = getelementptr inbounds [15 x i32], ptr @linst_table, i64 0, i64 %772
  %774 = load i32, ptr %773, align 4, !tbaa !9
  %775 = load ptr, ptr %12, align 8, !tbaa !5
  %776 = getelementptr inbounds %struct._MixedOperator, ptr %775, i32 0, i32 1
  %777 = load i32, ptr %6, align 4, !tbaa !9
  %778 = sext i32 %777 to i64
  %779 = getelementptr inbounds [15 x i32], ptr %776, i64 0, i64 %778
  store i32 %774, ptr %779, align 4, !tbaa !9
  br label %780

780:                                              ; preds = %770
  %781 = load i32, ptr %6, align 4, !tbaa !9
  %782 = add nsw i32 %781, 1
  store i32 %782, ptr %6, align 4, !tbaa !9
  br label %764, !llvm.loop !51

783:                                              ; preds = %764
  %784 = load ptr, ptr %3, align 8, !tbaa !5
  %785 = getelementptr inbounds %struct._Operator, ptr %784, i32 0, i32 8
  %786 = load ptr, ptr %785, align 8, !tbaa !40
  %787 = call ptr @instantiate_Effect(ptr noundef %786)
  %788 = load ptr, ptr %12, align 8, !tbaa !5
  %789 = getelementptr inbounds %struct._MixedOperator, ptr %788, i32 0, i32 8
  store ptr %787, ptr %789, align 8, !tbaa !41
  %790 = load ptr, ptr @ghard_mixed_operators, align 8, !tbaa !5
  %791 = load ptr, ptr %12, align 8, !tbaa !5
  %792 = getelementptr inbounds %struct._MixedOperator, ptr %791, i32 0, i32 9
  store ptr %790, ptr %792, align 8, !tbaa !42
  %793 = load ptr, ptr %12, align 8, !tbaa !5
  store ptr %793, ptr @ghard_mixed_operators, align 8, !tbaa !5
  %794 = load i32, ptr @gnum_hard_mixed_operators, align 4, !tbaa !9
  %795 = add nsw i32 %794, 1
  store i32 %795, ptr @gnum_hard_mixed_operators, align 4, !tbaa !9
  br label %801

796:                                              ; preds = %110
  %797 = load ptr, ptr %9, align 8, !tbaa !5
  %798 = getelementptr inbounds %struct._WffNode, ptr %797, i32 0, i32 0
  %799 = load i32, ptr %798, align 8, !tbaa !17
  %800 = call i32 (ptr, ...) @printf(ptr noundef @.str.4, i32 noundef %799)
  call void @exit(i32 noundef 1) #6
  unreachable

801:                                              ; preds = %783, %714, %679, %597, %417
  %802 = load ptr, ptr %9, align 8, !tbaa !5
  call void @free_WffNode(ptr noundef %802)
  store i32 0, ptr %13, align 4
  br label %803

803:                                              ; preds = %801, %98, %91, %81, %27
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #5
  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 4, ptr %8) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #5
  %804 = load i32, ptr %13, align 4
  switch i32 %804, label %806 [
    i32 0, label %805
    i32 1, label %805
  ]

805:                                              ; preds = %803, %803
  ret void

806:                                              ; preds = %803
  unreachable
}

; Function Attrs: nounwind uwtable
declare dso_local ptr @instantiate_wff(ptr noundef) #3

declare void @free_WffNode(ptr noundef) #1

declare void @dnf(ptr noundef) #1

declare void @cleanup_wff(ptr noundef) #1

declare i32 @is_dnf(ptr noundef) #1

declare void @print_Wff(ptr noundef, i32 noundef) #1

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

declare ptr @new_MixedOperator(ptr noundef) #1

declare ptr @copy_Exp(ptr noundef) #1

; Function Attrs: nounwind uwtable
declare dso_local ptr @instantiate_Effect(ptr noundef) #3

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !10, i64 136}
!12 = !{!"_Operator", !6, i64 0, !7, i64 8, !10, i64 128, !7, i64 132, !10, i64 136, !7, i64 140, !7, i64 200, !6, i64 216, !6, i64 224, !7, i64 232}
!13 = !{!7, !7, i64 0}
!14 = distinct !{!14, !15}
!15 = !{!"llvm.loop.mustprogress"}
!16 = !{!12, !6, i64 216}
!17 = !{!18, !10, i64 0}
!18 = !{!"_WffNode", !10, i64 0, !10, i64 4, !10, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !10, i64 56, !6, i64 64, !10, i64 72, !6, i64 80, !6, i64 88, !7, i64 96}
!19 = !{!12, !6, i64 0}
!20 = !{!18, !6, i64 24}
!21 = distinct !{!21, !15}
!22 = !{!18, !6, i64 32}
!23 = distinct !{!23, !15}
!24 = !{!25, !6, i64 72}
!25 = !{!"_MixedOperator", !6, i64 0, !7, i64 8, !6, i64 72, !10, i64 80, !6, i64 88, !6, i64 96, !6, i64 104, !10, i64 112, !6, i64 120, !6, i64 128}
!26 = !{!25, !6, i64 88}
!27 = !{!25, !6, i64 96}
!28 = !{!25, !6, i64 104}
!29 = !{!25, !10, i64 80}
!30 = !{!25, !10, i64 112}
!31 = !{!18, !6, i64 48}
!32 = !{!33, !10, i64 0}
!33 = !{!"_Fact", !10, i64 0, !7, i64 4}
!34 = distinct !{!34, !15}
!35 = !{!18, !10, i64 72}
!36 = !{!18, !6, i64 80}
!37 = !{!18, !6, i64 88}
!38 = distinct !{!38, !15}
!39 = distinct !{!39, !15}
!40 = !{!12, !6, i64 224}
!41 = !{!25, !6, i64 120}
!42 = !{!25, !6, i64 128}
!43 = distinct !{!43, !15}
!44 = distinct !{!44, !15}
!45 = distinct !{!45, !15}
!46 = distinct !{!46, !15}
!47 = distinct !{!47, !15}
!48 = distinct !{!48, !15}
!49 = distinct !{!49, !15}
!50 = distinct !{!50, !15}
!51 = distinct !{!51, !15}


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

%struct._Fact = type { i32, [5 x i32] }

@garity = external local_unnamed_addr global [50 x i32], align 16
@ghard_mixed_operators = external local_unnamed_addr global ptr, align 8
@linst_table = external dso_local local_unnamed_addr global [15 x i32], align 16
@gtype_consts = external local_unnamed_addr global [50 x [2000 x i32]], align 16
@gtype_size = external local_unnamed_addr global [50 x i32], align 16
@.str.3 = external hidden unnamed_addr constant [39 x i8], align 1
@gnum_hard_mixed_operators = external local_unnamed_addr global i32, align 4
@.str.4 = external hidden unnamed_addr constant [50 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

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

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

; Function Attrs: nounwind uwtable
define dso_local void @create_hard_mixed_operators(ptr noundef %0, i32 noundef %1) local_unnamed_addr #3 {
  %3 = alloca ptr, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %3) #6
  %4 = getelementptr inbounds i8, ptr %0, i64 136
  %5 = load i32, ptr %4, align 8, !tbaa !5
  %6 = icmp sgt i32 %5, %1
  br i1 %6, label %7, label %33

7:                                                ; preds = %2
  %8 = getelementptr inbounds i8, ptr %0, i64 200
  %9 = sext i32 %1 to i64
  %10 = getelementptr inbounds [15 x i8], ptr %8, i64 0, i64 %9
  %11 = load i8, ptr %10, align 1, !tbaa !11
  %.not235 = icmp eq i8 %11, 0
  %12 = getelementptr inbounds i8, ptr %0, i64 140
  %13 = getelementptr inbounds [15 x i32], ptr %12, i64 0, i64 %9
  %14 = load i32, ptr %13, align 4, !tbaa !12
  %15 = sext i32 %14 to i64
  br i1 %.not235, label %21, label %16

16:                                               ; preds = %7
  %17 = getelementptr inbounds [50 x [2000 x i32]], ptr @gtype_consts, i64 0, i64 %15
  %18 = load i32, ptr %17, align 16, !tbaa !12
  %19 = getelementptr inbounds [15 x i32], ptr @linst_table, i64 0, i64 %9
  store i32 %18, ptr %19, align 4, !tbaa !12
  %20 = add nsw i32 %1, 1
  tail call void @create_hard_mixed_operators(ptr noundef nonnull %0, i32 noundef %20)
  store i32 -1, ptr %19, align 4, !tbaa !12
  br label %.loopexit

21:                                               ; preds = %7
  %22 = getelementptr inbounds [50 x i32], ptr @gtype_size, i64 0, i64 %15
  %23 = load i32, ptr %22, align 4, !tbaa !12
  %24 = icmp sgt i32 %23, 0
  br i1 %24, label %.lr.ph315, label %.loopexit

.lr.ph315:                                        ; preds = %21
  %25 = getelementptr inbounds [15 x i32], ptr @linst_table, i64 0, i64 %9
  %26 = add nsw i32 %1, 1
  br label %27

27:                                               ; preds = %.lr.ph315, %27
  %indvars.iv341 = phi i64 [ 0, %.lr.ph315 ], [ %indvars.iv.next342, %27 ]
  %28 = getelementptr inbounds [50 x [2000 x i32]], ptr @gtype_consts, i64 0, i64 %15, i64 %indvars.iv341
  %29 = load i32, ptr %28, align 4, !tbaa !12
  store i32 %29, ptr %25, align 4, !tbaa !12
  tail call void @create_hard_mixed_operators(ptr noundef %0, i32 noundef %26)
  store i32 -1, ptr %25, align 4, !tbaa !12
  %indvars.iv.next342 = add nuw nsw i64 %indvars.iv341, 1
  %30 = load i32, ptr %22, align 4, !tbaa !12
  %31 = sext i32 %30 to i64
  %32 = icmp slt i64 %indvars.iv.next342, %31
  br i1 %32, label %27, label %.loopexit, !llvm.loop !13

33:                                               ; preds = %2
  %34 = getelementptr inbounds i8, ptr %0, i64 216
  %35 = load ptr, ptr %34, align 8, !tbaa !15
  %36 = tail call ptr @instantiate_wff(ptr noundef %35)
  store ptr %36, ptr %3, align 8, !tbaa !16
  %37 = load i32, ptr %36, align 8, !tbaa !17
  %38 = icmp eq i32 %37, 2001
  br i1 %38, label %39, label %40

39:                                               ; preds = %33
  tail call void @free_WffNode(ptr noundef nonnull %36) #6
  br label %.loopexit

40:                                               ; preds = %33
  call void @dnf(ptr noundef nonnull %3) #6
  call void @cleanup_wff(ptr noundef nonnull %3) #6
  %41 = load ptr, ptr %3, align 8, !tbaa !16
  %42 = load i32, ptr %41, align 8, !tbaa !17
  %43 = icmp eq i32 %42, 2001
  br i1 %43, label %44, label %45

44:                                               ; preds = %40
  call void @free_WffNode(ptr noundef nonnull %41) #6
  br label %.loopexit

45:                                               ; preds = %40
  %46 = call i32 @is_dnf(ptr noundef nonnull %41) #6
  %47 = icmp eq i32 %46, -1
  br i1 %47, label %48, label %52

48:                                               ; preds = %45
  %49 = load ptr, ptr %0, align 8, !tbaa !19
  %50 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.3, ptr noundef %49)
  %51 = load ptr, ptr %3, align 8, !tbaa !16
  call void @print_Wff(ptr noundef %51, i32 noundef 0) #6
  call void @exit(i32 noundef 1) #7
  unreachable

52:                                               ; preds = %45
  %53 = load ptr, ptr %3, align 8, !tbaa !16
  %54 = load i32, ptr %53, align 8, !tbaa !17
  switch i32 %54, label %346 [
    i32 2007, label %55
    i32 2006, label %189
    i32 2002, label %268
    i32 2003, label %303
    i32 2000, label %334
  ]

55:                                               ; preds = %52
  %56 = getelementptr inbounds i8, ptr %53, i64 24
  %.0208307 = load ptr, ptr %56, align 8, !tbaa !16
  %.not232308 = icmp eq ptr %.0208307, null
  br i1 %.not232308, label %.loopexit240, label %.lr.ph312

.lr.ph312:                                        ; preds = %55
  %57 = getelementptr inbounds i8, ptr %0, i64 224
  br label %58

58:                                               ; preds = %.lr.ph312, %.loopexit239
  %.0208309 = phi ptr [ %.0208307, %.lr.ph312 ], [ %.0208, %.loopexit239 ]
  %59 = call ptr @new_MixedOperator(ptr noundef nonnull %0) #6
  %60 = load i32, ptr %4, align 8, !tbaa !5
  %61 = icmp sgt i32 %60, 0
  br i1 %61, label %.lr.ph281, label %._crit_edge282

.lr.ph281:                                        ; preds = %58
  %62 = getelementptr inbounds i8, ptr %59, i64 8
  br label %63

63:                                               ; preds = %.lr.ph281, %63
  %indvars.iv332 = phi i64 [ 0, %.lr.ph281 ], [ %indvars.iv.next333, %63 ]
  %64 = getelementptr inbounds [15 x i32], ptr @linst_table, i64 0, i64 %indvars.iv332
  %65 = load i32, ptr %64, align 4, !tbaa !12
  %66 = getelementptr inbounds [15 x i32], ptr %62, i64 0, i64 %indvars.iv332
  store i32 %65, ptr %66, align 4, !tbaa !12
  %indvars.iv.next333 = add nuw nsw i64 %indvars.iv332, 1
  %67 = load i32, ptr %4, align 8, !tbaa !5
  %68 = sext i32 %67 to i64
  %69 = icmp slt i64 %indvars.iv.next333, %68
  br i1 %69, label %63, label %._crit_edge282, !llvm.loop !20

._crit_edge282:                                   ; preds = %63, %58
  %70 = load i32, ptr %.0208309, align 8, !tbaa !17
  switch i32 %70, label %thread-pre-split [
    i32 2006, label %71
    i32 2002, label %138
  ]

71:                                               ; preds = %._crit_edge282
  %72 = getelementptr inbounds i8, ptr %.0208309, i64 24
  %.0286 = load ptr, ptr %72, align 8, !tbaa !16
  %.not233287 = icmp eq ptr %.0286, null
  br i1 %.not233287, label %._crit_edge293, label %.lr.ph292

.lr.ph292:                                        ; preds = %71, %.lr.ph292
  %.0290 = phi ptr [ %.0, %.lr.ph292 ], [ %.0286, %71 ]
  %.0210289 = phi i32 [ %.1211, %.lr.ph292 ], [ 0, %71 ]
  %.0213288 = phi i32 [ %spec.select, %.lr.ph292 ], [ 0, %71 ]
  %73 = load i32, ptr %.0290, align 8, !tbaa !17
  %74 = icmp eq i32 %73, 2002
  %75 = zext i1 %74 to i32
  %spec.select = add nuw nsw i32 %.0213288, %75
  %76 = icmp eq i32 %73, 2003
  %77 = zext i1 %76 to i32
  %.1211 = add nuw nsw i32 %.0210289, %77
  %78 = getelementptr inbounds i8, ptr %.0290, i64 32
  %.0 = load ptr, ptr %78, align 8, !tbaa !16
  %.not233 = icmp eq ptr %.0, null
  br i1 %.not233, label %._crit_edge293, label %.lr.ph292, !llvm.loop !21

._crit_edge293:                                   ; preds = %.lr.ph292, %71
  %.0213.lcssa = phi i32 [ 0, %71 ], [ %spec.select, %.lr.ph292 ]
  %.0210.lcssa = phi i32 [ 0, %71 ], [ %.1211, %.lr.ph292 ]
  %79 = zext nneg i32 %.0213.lcssa to i64
  %80 = call noalias ptr @calloc(i64 noundef %79, i64 noundef 24) #8
  %81 = getelementptr inbounds i8, ptr %59, i64 72
  store ptr %80, ptr %81, align 8, !tbaa !22
  %82 = zext nneg i32 %.0210.lcssa to i64
  %83 = call noalias ptr @calloc(i64 noundef %82, i64 noundef 4) #8
  %84 = getelementptr inbounds i8, ptr %59, i64 88
  store ptr %83, ptr %84, align 8, !tbaa !24
  %85 = call noalias ptr @calloc(i64 noundef %82, i64 noundef 8) #8
  %86 = getelementptr inbounds i8, ptr %59, i64 96
  store ptr %85, ptr %86, align 8, !tbaa !25
  %87 = call noalias ptr @calloc(i64 noundef %82, i64 noundef 8) #8
  %88 = getelementptr inbounds i8, ptr %59, i64 104
  store ptr %87, ptr %88, align 8, !tbaa !26
  %89 = getelementptr inbounds i8, ptr %59, i64 80
  store i32 %.0213.lcssa, ptr %89, align 8, !tbaa !27
  %90 = getelementptr inbounds i8, ptr %59, i64 112
  store i32 %.0210.lcssa, ptr %90, align 8, !tbaa !28
  %.1300 = load ptr, ptr %72, align 8, !tbaa !16
  %.not234301 = icmp eq ptr %.1300, null
  br i1 %.not234301, label %.loopexit239, label %.lr.ph306

.lr.ph306:                                        ; preds = %._crit_edge293, %136
  %.1304 = phi ptr [ %.1, %136 ], [ %.1300, %._crit_edge293 ]
  %.2212303 = phi i32 [ %.3, %136 ], [ 0, %._crit_edge293 ]
  %.2215302 = phi i32 [ %.3216, %136 ], [ 0, %._crit_edge293 ]
  %91 = load i32, ptr %.1304, align 8, !tbaa !17
  %92 = icmp eq i32 %91, 2002
  br i1 %92, label %93, label %116

93:                                               ; preds = %.lr.ph306
  %94 = getelementptr inbounds i8, ptr %.1304, i64 48
  %95 = load ptr, ptr %94, align 8, !tbaa !29
  %96 = load i32, ptr %95, align 4, !tbaa !30
  %97 = load ptr, ptr %81, align 8, !tbaa !22
  %98 = sext i32 %.2215302 to i64
  %99 = getelementptr inbounds %struct._Fact, ptr %97, i64 %98
  store i32 %96, ptr %99, align 4, !tbaa !30
  %100 = sext i32 %96 to i64
  %101 = getelementptr inbounds [50 x i32], ptr @garity, i64 0, i64 %100
  %102 = load i32, ptr %101, align 4, !tbaa !12
  %103 = icmp sgt i32 %102, 0
  br i1 %103, label %.lr.ph298, label %._crit_edge299

.lr.ph298:                                        ; preds = %93
  %104 = getelementptr inbounds i8, ptr %95, i64 4
  br label %105

105:                                              ; preds = %.lr.ph298, %105
  %indvars.iv338 = phi i64 [ 0, %.lr.ph298 ], [ %indvars.iv.next339, %105 ]
  %106 = getelementptr inbounds [5 x i32], ptr %104, i64 0, i64 %indvars.iv338
  %107 = load i32, ptr %106, align 4, !tbaa !12
  %108 = getelementptr inbounds %struct._Fact, ptr %97, i64 %98, i32 1, i64 %indvars.iv338
  store i32 %107, ptr %108, align 4, !tbaa !12
  %indvars.iv.next339 = add nuw nsw i64 %indvars.iv338, 1
  %109 = load i32, ptr %95, align 4, !tbaa !30
  %110 = sext i32 %109 to i64
  %111 = getelementptr inbounds [50 x i32], ptr @garity, i64 0, i64 %110
  %112 = load i32, ptr %111, align 4, !tbaa !12
  %113 = sext i32 %112 to i64
  %114 = icmp slt i64 %indvars.iv.next339, %113
  br i1 %114, label %105, label %._crit_edge299.loopexit, !llvm.loop !32

._crit_edge299.loopexit:                          ; preds = %105
  %.pr.pre = load i32, ptr %.1304, align 8, !tbaa !17
  br label %._crit_edge299

._crit_edge299:                                   ; preds = %._crit_edge299.loopexit, %93
  %.pr = phi i32 [ %.pr.pre, %._crit_edge299.loopexit ], [ 2002, %93 ]
  %115 = add nsw i32 %.2215302, 1
  br label %116

116:                                              ; preds = %._crit_edge299, %.lr.ph306
  %117 = phi i32 [ %.pr, %._crit_edge299 ], [ %91, %.lr.ph306 ]
  %.3216 = phi i32 [ %115, %._crit_edge299 ], [ %.2215302, %.lr.ph306 ]
  %118 = icmp eq i32 %117, 2003
  br i1 %118, label %119, label %136

119:                                              ; preds = %116
  %120 = getelementptr inbounds i8, ptr %.1304, i64 72
  %121 = load i32, ptr %120, align 8, !tbaa !33
  %122 = load ptr, ptr %84, align 8, !tbaa !24
  %123 = sext i32 %.2212303 to i64
  %124 = getelementptr inbounds i32, ptr %122, i64 %123
  store i32 %121, ptr %124, align 4, !tbaa !12
  %125 = getelementptr inbounds i8, ptr %.1304, i64 80
  %126 = load ptr, ptr %125, align 8, !tbaa !34
  %127 = call ptr @copy_Exp(ptr noundef %126) #6
  %128 = load ptr, ptr %86, align 8, !tbaa !25
  %129 = getelementptr inbounds ptr, ptr %128, i64 %123
  store ptr %127, ptr %129, align 8, !tbaa !16
  %130 = getelementptr inbounds i8, ptr %.1304, i64 88
  %131 = load ptr, ptr %130, align 8, !tbaa !35
  %132 = call ptr @copy_Exp(ptr noundef %131) #6
  %133 = load ptr, ptr %88, align 8, !tbaa !26
  %134 = getelementptr inbounds ptr, ptr %133, i64 %123
  store ptr %132, ptr %134, align 8, !tbaa !16
  %135 = add nsw i32 %.2212303, 1
  br label %136

136:                                              ; preds = %116, %119
  %.3 = phi i32 [ %135, %119 ], [ %.2212303, %116 ]
  %137 = getelementptr inbounds i8, ptr %.1304, i64 32
  %.1 = load ptr, ptr %137, align 8, !tbaa !16
  %.not234 = icmp eq ptr %.1, null
  br i1 %.not234, label %.loopexit239, label %.lr.ph306, !llvm.loop !36

138:                                              ; preds = %._crit_edge282
  %139 = call noalias dereferenceable_or_null(24) ptr @calloc(i64 noundef 1, i64 noundef 24) #8
  %140 = getelementptr inbounds i8, ptr %59, i64 72
  store ptr %139, ptr %140, align 8, !tbaa !22
  %141 = getelementptr inbounds i8, ptr %59, i64 80
  store i32 1, ptr %141, align 8, !tbaa !27
  %142 = getelementptr inbounds i8, ptr %.0208309, i64 48
  %143 = load ptr, ptr %142, align 8, !tbaa !29
  %144 = load i32, ptr %143, align 4, !tbaa !30
  store i32 %144, ptr %139, align 4, !tbaa !30
  %145 = sext i32 %144 to i64
  %146 = getelementptr inbounds [50 x i32], ptr @garity, i64 0, i64 %145
  %147 = load i32, ptr %146, align 4, !tbaa !12
  %148 = icmp sgt i32 %147, 0
  br i1 %148, label %.lr.ph285, label %.loopexit239

.lr.ph285:                                        ; preds = %138
  %149 = getelementptr inbounds i8, ptr %143, i64 4
  %150 = getelementptr inbounds i8, ptr %139, i64 4
  br label %151

151:                                              ; preds = %.lr.ph285, %151
  %indvars.iv335 = phi i64 [ 0, %.lr.ph285 ], [ %indvars.iv.next336, %151 ]
  %152 = getelementptr inbounds [5 x i32], ptr %149, i64 0, i64 %indvars.iv335
  %153 = load i32, ptr %152, align 4, !tbaa !12
  %154 = getelementptr inbounds [5 x i32], ptr %150, i64 0, i64 %indvars.iv335
  store i32 %153, ptr %154, align 4, !tbaa !12
  %indvars.iv.next336 = add nuw nsw i64 %indvars.iv335, 1
  %155 = load i32, ptr %143, align 4, !tbaa !30
  %156 = sext i32 %155 to i64
  %157 = getelementptr inbounds [50 x i32], ptr @garity, i64 0, i64 %156
  %158 = load i32, ptr %157, align 4, !tbaa !12
  %159 = sext i32 %158 to i64
  %160 = icmp slt i64 %indvars.iv.next336, %159
  br i1 %160, label %151, label %thread-pre-split.loopexit, !llvm.loop !37

thread-pre-split.loopexit:                        ; preds = %151
  %.pr237.pre = load i32, ptr %.0208309, align 8, !tbaa !17
  br label %thread-pre-split

thread-pre-split:                                 ; preds = %thread-pre-split.loopexit, %._crit_edge282
  %161 = phi i32 [ %70, %._crit_edge282 ], [ %.pr237.pre, %thread-pre-split.loopexit ]
  %162 = icmp eq i32 %161, 2003
  br i1 %162, label %163, label %.loopexit239

163:                                              ; preds = %thread-pre-split
  %164 = call noalias dereferenceable_or_null(4) ptr @calloc(i64 noundef 1, i64 noundef 4) #8
  %165 = getelementptr inbounds i8, ptr %59, i64 88
  store ptr %164, ptr %165, align 8, !tbaa !24
  %166 = call noalias dereferenceable_or_null(8) ptr @calloc(i64 noundef 1, i64 noundef 8) #8
  %167 = getelementptr inbounds i8, ptr %59, i64 96
  store ptr %166, ptr %167, align 8, !tbaa !25
  %168 = call noalias dereferenceable_or_null(8) ptr @calloc(i64 noundef 1, i64 noundef 8) #8
  %169 = getelementptr inbounds i8, ptr %59, i64 104
  store ptr %168, ptr %169, align 8, !tbaa !26
  %170 = getelementptr inbounds i8, ptr %.0208309, i64 72
  %171 = load i32, ptr %170, align 8, !tbaa !33
  store i32 %171, ptr %164, align 4, !tbaa !12
  %172 = getelementptr inbounds i8, ptr %.0208309, i64 80
  %173 = load ptr, ptr %172, align 8, !tbaa !34
  %174 = call ptr @copy_Exp(ptr noundef %173) #6
  %175 = load ptr, ptr %167, align 8, !tbaa !25
  store ptr %174, ptr %175, align 8, !tbaa !16
  %176 = getelementptr inbounds i8, ptr %.0208309, i64 88
  %177 = load ptr, ptr %176, align 8, !tbaa !35
  %178 = call ptr @copy_Exp(ptr noundef %177) #6
  %179 = load ptr, ptr %169, align 8, !tbaa !26
  store ptr %178, ptr %179, align 8, !tbaa !16
  %180 = getelementptr inbounds i8, ptr %59, i64 112
  store i32 1, ptr %180, align 8, !tbaa !28
  br label %.loopexit239

.loopexit239:                                     ; preds = %136, %138, %._crit_edge293, %thread-pre-split, %163
  %181 = load ptr, ptr %57, align 8, !tbaa !38
  %182 = call ptr @instantiate_Effect(ptr noundef %181)
  %183 = getelementptr inbounds i8, ptr %59, i64 120
  store ptr %182, ptr %183, align 8, !tbaa !39
  %184 = load ptr, ptr @ghard_mixed_operators, align 8, !tbaa !16
  %185 = getelementptr inbounds i8, ptr %59, i64 128
  store ptr %184, ptr %185, align 8, !tbaa !40
  store ptr %59, ptr @ghard_mixed_operators, align 8, !tbaa !16
  %186 = load i32, ptr @gnum_hard_mixed_operators, align 4, !tbaa !12
  %187 = add nsw i32 %186, 1
  store i32 %187, ptr @gnum_hard_mixed_operators, align 4, !tbaa !12
  %188 = getelementptr inbounds i8, ptr %.0208309, i64 32
  %.0208 = load ptr, ptr %188, align 8, !tbaa !16
  %.not232 = icmp eq ptr %.0208, null
  br i1 %.not232, label %.loopexit240, label %58, !llvm.loop !41

189:                                              ; preds = %52
  %190 = call ptr @new_MixedOperator(ptr noundef nonnull %0) #6
  %191 = load i32, ptr %4, align 8, !tbaa !5
  %192 = icmp sgt i32 %191, 0
  br i1 %192, label %.lr.ph256, label %._crit_edge257

.lr.ph256:                                        ; preds = %189
  %193 = getelementptr inbounds i8, ptr %190, i64 8
  br label %194

194:                                              ; preds = %.lr.ph256, %194
  %indvars.iv326 = phi i64 [ 0, %.lr.ph256 ], [ %indvars.iv.next327, %194 ]
  %195 = getelementptr inbounds [15 x i32], ptr @linst_table, i64 0, i64 %indvars.iv326
  %196 = load i32, ptr %195, align 4, !tbaa !12
  %197 = getelementptr inbounds [15 x i32], ptr %193, i64 0, i64 %indvars.iv326
  store i32 %196, ptr %197, align 4, !tbaa !12
  %indvars.iv.next327 = add nuw nsw i64 %indvars.iv326, 1
  %198 = load i32, ptr %4, align 8, !tbaa !5
  %199 = sext i32 %198 to i64
  %200 = icmp slt i64 %indvars.iv.next327, %199
  br i1 %200, label %194, label %._crit_edge257, !llvm.loop !42

._crit_edge257:                                   ; preds = %194, %189
  %201 = load ptr, ptr %3, align 8, !tbaa !16
  %202 = getelementptr inbounds i8, ptr %201, i64 24
  %.1209258 = load ptr, ptr %202, align 8, !tbaa !16
  %.not259 = icmp eq ptr %.1209258, null
  br i1 %.not259, label %._crit_edge265, label %.lr.ph264

.lr.ph264:                                        ; preds = %._crit_edge257, %.lr.ph264
  %.1209262 = phi ptr [ %.1209, %.lr.ph264 ], [ %.1209258, %._crit_edge257 ]
  %.4261 = phi i32 [ %.5, %.lr.ph264 ], [ 0, %._crit_edge257 ]
  %.4217260 = phi i32 [ %spec.select236, %.lr.ph264 ], [ 0, %._crit_edge257 ]
  %203 = load i32, ptr %.1209262, align 8, !tbaa !17
  %204 = icmp eq i32 %203, 2002
  %205 = zext i1 %204 to i32
  %spec.select236 = add nuw nsw i32 %.4217260, %205
  %206 = icmp eq i32 %203, 2003
  %207 = zext i1 %206 to i32
  %.5 = add nuw nsw i32 %.4261, %207
  %208 = getelementptr inbounds i8, ptr %.1209262, i64 32
  %.1209 = load ptr, ptr %208, align 8, !tbaa !16
  %.not = icmp eq ptr %.1209, null
  br i1 %.not, label %._crit_edge265, label %.lr.ph264, !llvm.loop !43

._crit_edge265:                                   ; preds = %.lr.ph264, %._crit_edge257
  %.4217.lcssa = phi i32 [ 0, %._crit_edge257 ], [ %spec.select236, %.lr.ph264 ]
  %.4.lcssa = phi i32 [ 0, %._crit_edge257 ], [ %.5, %.lr.ph264 ]
  %209 = zext nneg i32 %.4217.lcssa to i64
  %210 = call noalias ptr @calloc(i64 noundef %209, i64 noundef 24) #8
  %211 = getelementptr inbounds i8, ptr %190, i64 72
  store ptr %210, ptr %211, align 8, !tbaa !22
  %212 = zext nneg i32 %.4.lcssa to i64
  %213 = call noalias ptr @calloc(i64 noundef %212, i64 noundef 4) #8
  %214 = getelementptr inbounds i8, ptr %190, i64 88
  store ptr %213, ptr %214, align 8, !tbaa !24
  %215 = call noalias ptr @calloc(i64 noundef %212, i64 noundef 8) #8
  %216 = getelementptr inbounds i8, ptr %190, i64 96
  store ptr %215, ptr %216, align 8, !tbaa !25
  %217 = call noalias ptr @calloc(i64 noundef %212, i64 noundef 8) #8
  %218 = getelementptr inbounds i8, ptr %190, i64 104
  store ptr %217, ptr %218, align 8, !tbaa !26
  %219 = getelementptr inbounds i8, ptr %190, i64 80
  store i32 %.4217.lcssa, ptr %219, align 8, !tbaa !27
  %220 = getelementptr inbounds i8, ptr %190, i64 112
  store i32 %.4.lcssa, ptr %220, align 8, !tbaa !28
  %.2271 = load ptr, ptr %202, align 8, !tbaa !16
  %.not231272 = icmp eq ptr %.2271, null
  br i1 %.not231272, label %.loopexit240.sink.split, label %.lr.ph277

.lr.ph277:                                        ; preds = %._crit_edge265, %266
  %.2275 = phi ptr [ %.2, %266 ], [ %.2271, %._crit_edge265 ]
  %.6274 = phi i32 [ %.7, %266 ], [ 0, %._crit_edge265 ]
  %.6219273 = phi i32 [ %.7220, %266 ], [ 0, %._crit_edge265 ]
  %221 = load i32, ptr %.2275, align 8, !tbaa !17
  %222 = icmp eq i32 %221, 2002
  br i1 %222, label %223, label %246

223:                                              ; preds = %.lr.ph277
  %224 = getelementptr inbounds i8, ptr %.2275, i64 48
  %225 = load ptr, ptr %224, align 8, !tbaa !29
  %226 = load i32, ptr %225, align 4, !tbaa !30
  %227 = load ptr, ptr %211, align 8, !tbaa !22
  %228 = sext i32 %.6219273 to i64
  %229 = getelementptr inbounds %struct._Fact, ptr %227, i64 %228
  store i32 %226, ptr %229, align 4, !tbaa !30
  %230 = sext i32 %226 to i64
  %231 = getelementptr inbounds [50 x i32], ptr @garity, i64 0, i64 %230
  %232 = load i32, ptr %231, align 4, !tbaa !12
  %233 = icmp sgt i32 %232, 0
  br i1 %233, label %.lr.ph269, label %._crit_edge270

.lr.ph269:                                        ; preds = %223
  %234 = getelementptr inbounds i8, ptr %225, i64 4
  br label %235

235:                                              ; preds = %.lr.ph269, %235
  %indvars.iv329 = phi i64 [ 0, %.lr.ph269 ], [ %indvars.iv.next330, %235 ]
  %236 = getelementptr inbounds [5 x i32], ptr %234, i64 0, i64 %indvars.iv329
  %237 = load i32, ptr %236, align 4, !tbaa !12
  %238 = getelementptr inbounds %struct._Fact, ptr %227, i64 %228, i32 1, i64 %indvars.iv329
  store i32 %237, ptr %238, align 4, !tbaa !12
  %indvars.iv.next330 = add nuw nsw i64 %indvars.iv329, 1
  %239 = load i32, ptr %225, align 4, !tbaa !30
  %240 = sext i32 %239 to i64
  %241 = getelementptr inbounds [50 x i32], ptr @garity, i64 0, i64 %240
  %242 = load i32, ptr %241, align 4, !tbaa !12
  %243 = sext i32 %242 to i64
  %244 = icmp slt i64 %indvars.iv.next330, %243
  br i1 %244, label %235, label %._crit_edge270.loopexit, !llvm.loop !44

._crit_edge270.loopexit:                          ; preds = %235
  %.pr238.pre = load i32, ptr %.2275, align 8, !tbaa !17
  br label %._crit_edge270

._crit_edge270:                                   ; preds = %._crit_edge270.loopexit, %223
  %.pr238 = phi i32 [ %.pr238.pre, %._crit_edge270.loopexit ], [ 2002, %223 ]
  %245 = add nsw i32 %.6219273, 1
  br label %246

246:                                              ; preds = %._crit_edge270, %.lr.ph277
  %247 = phi i32 [ %.pr238, %._crit_edge270 ], [ %221, %.lr.ph277 ]
  %.7220 = phi i32 [ %245, %._crit_edge270 ], [ %.6219273, %.lr.ph277 ]
  %248 = icmp eq i32 %247, 2003
  br i1 %248, label %249, label %266

249:                                              ; preds = %246
  %250 = getelementptr inbounds i8, ptr %.2275, i64 72
  %251 = load i32, ptr %250, align 8, !tbaa !33
  %252 = load ptr, ptr %214, align 8, !tbaa !24
  %253 = sext i32 %.6274 to i64
  %254 = getelementptr inbounds i32, ptr %252, i64 %253
  store i32 %251, ptr %254, align 4, !tbaa !12
  %255 = getelementptr inbounds i8, ptr %.2275, i64 80
  %256 = load ptr, ptr %255, align 8, !tbaa !34
  %257 = call ptr @copy_Exp(ptr noundef %256) #6
  %258 = load ptr, ptr %216, align 8, !tbaa !25
  %259 = getelementptr inbounds ptr, ptr %258, i64 %253
  store ptr %257, ptr %259, align 8, !tbaa !16
  %260 = getelementptr inbounds i8, ptr %.2275, i64 88
  %261 = load ptr, ptr %260, align 8, !tbaa !35
  %262 = call ptr @copy_Exp(ptr noundef %261) #6
  %263 = load ptr, ptr %218, align 8, !tbaa !26
  %264 = getelementptr inbounds ptr, ptr %263, i64 %253
  store ptr %262, ptr %264, align 8, !tbaa !16
  %265 = add nsw i32 %.6274, 1
  br label %266

266:                                              ; preds = %246, %249
  %.7 = phi i32 [ %265, %249 ], [ %.6274, %246 ]
  %267 = getelementptr inbounds i8, ptr %.2275, i64 32
  %.2 = load ptr, ptr %267, align 8, !tbaa !16
  %.not231 = icmp eq ptr %.2, null
  br i1 %.not231, label %.loopexit240.sink.split, label %.lr.ph277, !llvm.loop !45

268:                                              ; preds = %52
  %269 = call ptr @new_MixedOperator(ptr noundef nonnull %0) #6
  %270 = load i32, ptr %4, align 8, !tbaa !5
  %271 = icmp sgt i32 %270, 0
  br i1 %271, label %.lr.ph248, label %._crit_edge249

.lr.ph248:                                        ; preds = %268
  %272 = getelementptr inbounds i8, ptr %269, i64 8
  br label %273

273:                                              ; preds = %.lr.ph248, %273
  %indvars.iv320 = phi i64 [ 0, %.lr.ph248 ], [ %indvars.iv.next321, %273 ]
  %274 = getelementptr inbounds [15 x i32], ptr @linst_table, i64 0, i64 %indvars.iv320
  %275 = load i32, ptr %274, align 4, !tbaa !12
  %276 = getelementptr inbounds [15 x i32], ptr %272, i64 0, i64 %indvars.iv320
  store i32 %275, ptr %276, align 4, !tbaa !12
  %indvars.iv.next321 = add nuw nsw i64 %indvars.iv320, 1
  %277 = load i32, ptr %4, align 8, !tbaa !5
  %278 = sext i32 %277 to i64
  %279 = icmp slt i64 %indvars.iv.next321, %278
  br i1 %279, label %273, label %._crit_edge249, !llvm.loop !46

._crit_edge249:                                   ; preds = %273, %268
  %280 = call noalias dereferenceable_or_null(24) ptr @calloc(i64 noundef 1, i64 noundef 24) #8
  %281 = getelementptr inbounds i8, ptr %269, i64 72
  store ptr %280, ptr %281, align 8, !tbaa !22
  %282 = getelementptr inbounds i8, ptr %269, i64 80
  store i32 1, ptr %282, align 8, !tbaa !27
  %283 = load ptr, ptr %3, align 8, !tbaa !16
  %284 = getelementptr inbounds i8, ptr %283, i64 48
  %285 = load ptr, ptr %284, align 8, !tbaa !29
  %286 = load i32, ptr %285, align 4, !tbaa !30
  store i32 %286, ptr %280, align 4, !tbaa !30
  %287 = sext i32 %286 to i64
  %288 = getelementptr inbounds [50 x i32], ptr @garity, i64 0, i64 %287
  %289 = load i32, ptr %288, align 4, !tbaa !12
  %290 = icmp sgt i32 %289, 0
  br i1 %290, label %.lr.ph252, label %.loopexit240.sink.split

.lr.ph252:                                        ; preds = %._crit_edge249
  %291 = getelementptr inbounds i8, ptr %285, i64 4
  %292 = getelementptr inbounds i8, ptr %280, i64 4
  br label %293

293:                                              ; preds = %.lr.ph252, %293
  %indvars.iv323 = phi i64 [ 0, %.lr.ph252 ], [ %indvars.iv.next324, %293 ]
  %294 = getelementptr inbounds [5 x i32], ptr %291, i64 0, i64 %indvars.iv323
  %295 = load i32, ptr %294, align 4, !tbaa !12
  %296 = getelementptr inbounds [5 x i32], ptr %292, i64 0, i64 %indvars.iv323
  store i32 %295, ptr %296, align 4, !tbaa !12
  %indvars.iv.next324 = add nuw nsw i64 %indvars.iv323, 1
  %297 = load i32, ptr %285, align 4, !tbaa !30
  %298 = sext i32 %297 to i64
  %299 = getelementptr inbounds [50 x i32], ptr @garity, i64 0, i64 %298
  %300 = load i32, ptr %299, align 4, !tbaa !12
  %301 = sext i32 %300 to i64
  %302 = icmp slt i64 %indvars.iv.next324, %301
  br i1 %302, label %293, label %.loopexit240.sink.split, !llvm.loop !47

303:                                              ; preds = %52
  %304 = call ptr @new_MixedOperator(ptr noundef nonnull %0) #6
  %305 = load i32, ptr %4, align 8, !tbaa !5
  %306 = icmp sgt i32 %305, 0
  br i1 %306, label %.lr.ph244, label %._crit_edge245

.lr.ph244:                                        ; preds = %303
  %307 = getelementptr inbounds i8, ptr %304, i64 8
  br label %308

308:                                              ; preds = %.lr.ph244, %308
  %indvars.iv317 = phi i64 [ 0, %.lr.ph244 ], [ %indvars.iv.next318, %308 ]
  %309 = getelementptr inbounds [15 x i32], ptr @linst_table, i64 0, i64 %indvars.iv317
  %310 = load i32, ptr %309, align 4, !tbaa !12
  %311 = getelementptr inbounds [15 x i32], ptr %307, i64 0, i64 %indvars.iv317
  store i32 %310, ptr %311, align 4, !tbaa !12
  %indvars.iv.next318 = add nuw nsw i64 %indvars.iv317, 1
  %312 = load i32, ptr %4, align 8, !tbaa !5
  %313 = sext i32 %312 to i64
  %314 = icmp slt i64 %indvars.iv.next318, %313
  br i1 %314, label %308, label %._crit_edge245, !llvm.loop !48

._crit_edge245:                                   ; preds = %308, %303
  %315 = call noalias dereferenceable_or_null(4) ptr @calloc(i64 noundef 1, i64 noundef 4) #8
  %316 = getelementptr inbounds i8, ptr %304, i64 88
  store ptr %315, ptr %316, align 8, !tbaa !24
  %317 = call noalias dereferenceable_or_null(8) ptr @calloc(i64 noundef 1, i64 noundef 8) #8
  %318 = getelementptr inbounds i8, ptr %304, i64 96
  store ptr %317, ptr %318, align 8, !tbaa !25
  %319 = call noalias dereferenceable_or_null(8) ptr @calloc(i64 noundef 1, i64 noundef 8) #8
  %320 = getelementptr inbounds i8, ptr %304, i64 104
  store ptr %319, ptr %320, align 8, !tbaa !26
  %321 = load ptr, ptr %3, align 8, !tbaa !16
  %322 = getelementptr inbounds i8, ptr %321, i64 72
  %323 = load i32, ptr %322, align 8, !tbaa !33
  store i32 %323, ptr %315, align 4, !tbaa !12
  %324 = getelementptr inbounds i8, ptr %321, i64 80
  %325 = load ptr, ptr %324, align 8, !tbaa !34
  %326 = call ptr @copy_Exp(ptr noundef %325) #6
  %327 = load ptr, ptr %318, align 8, !tbaa !25
  store ptr %326, ptr %327, align 8, !tbaa !16
  %328 = load ptr, ptr %3, align 8, !tbaa !16
  %329 = getelementptr inbounds i8, ptr %328, i64 88
  %330 = load ptr, ptr %329, align 8, !tbaa !35
  %331 = call ptr @copy_Exp(ptr noundef %330) #6
  %332 = load ptr, ptr %320, align 8, !tbaa !26
  store ptr %331, ptr %332, align 8, !tbaa !16
  %333 = getelementptr inbounds i8, ptr %304, i64 112
  store i32 1, ptr %333, align 8, !tbaa !28
  br label %.loopexit240.sink.split

334:                                              ; preds = %52
  %335 = call ptr @new_MixedOperator(ptr noundef nonnull %0) #6
  %336 = load i32, ptr %4, align 8, !tbaa !5
  %337 = icmp sgt i32 %336, 0
  br i1 %337, label %.lr.ph, label %.loopexit240.sink.split

.lr.ph:                                           ; preds = %334
  %338 = getelementptr inbounds i8, ptr %335, i64 8
  br label %339

339:                                              ; preds = %.lr.ph, %339
  %indvars.iv = phi i64 [ 0, %.lr.ph ], [ %indvars.iv.next, %339 ]
  %340 = getelementptr inbounds [15 x i32], ptr @linst_table, i64 0, i64 %indvars.iv
  %341 = load i32, ptr %340, align 4, !tbaa !12
  %342 = getelementptr inbounds [15 x i32], ptr %338, i64 0, i64 %indvars.iv
  store i32 %341, ptr %342, align 4, !tbaa !12
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %343 = load i32, ptr %4, align 8, !tbaa !5
  %344 = sext i32 %343 to i64
  %345 = icmp slt i64 %indvars.iv.next, %344
  br i1 %345, label %339, label %.loopexit240.sink.split, !llvm.loop !49

346:                                              ; preds = %52
  %347 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.4, i32 noundef %54)
  call void @exit(i32 noundef 1) #7
  unreachable

.loopexit240.sink.split:                          ; preds = %339, %293, %266, %334, %._crit_edge249, %._crit_edge265, %._crit_edge245
  %.sink353 = phi ptr [ %304, %._crit_edge245 ], [ %190, %._crit_edge265 ], [ %269, %._crit_edge249 ], [ %335, %334 ], [ %190, %266 ], [ %269, %293 ], [ %335, %339 ]
  %348 = getelementptr inbounds i8, ptr %0, i64 224
  %349 = load ptr, ptr %348, align 8, !tbaa !38
  %350 = call ptr @instantiate_Effect(ptr noundef %349)
  %351 = getelementptr inbounds i8, ptr %.sink353, i64 120
  store ptr %350, ptr %351, align 8, !tbaa !39
  %352 = load ptr, ptr @ghard_mixed_operators, align 8, !tbaa !16
  %353 = getelementptr inbounds i8, ptr %.sink353, i64 128
  store ptr %352, ptr %353, align 8, !tbaa !40
  store ptr %.sink353, ptr @ghard_mixed_operators, align 8, !tbaa !16
  %354 = load i32, ptr @gnum_hard_mixed_operators, align 4, !tbaa !12
  %355 = add nsw i32 %354, 1
  store i32 %355, ptr @gnum_hard_mixed_operators, align 4, !tbaa !12
  br label %.loopexit240

.loopexit240:                                     ; preds = %.loopexit239, %.loopexit240.sink.split, %55
  %356 = load ptr, ptr %3, align 8, !tbaa !16
  call void @free_WffNode(ptr noundef %356) #6
  br label %.loopexit

.loopexit:                                        ; preds = %27, %21, %.loopexit240, %44, %39, %16
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %3) #6
  ret void
}

; Function Attrs: nounwind uwtable
declare dso_local ptr @instantiate_wff(ptr noundef) local_unnamed_addr #3

declare void @free_WffNode(ptr noundef) local_unnamed_addr #4

declare void @dnf(ptr noundef) local_unnamed_addr #4

declare void @cleanup_wff(ptr noundef) local_unnamed_addr #4

declare i32 @is_dnf(ptr noundef) local_unnamed_addr #4

declare void @print_Wff(ptr noundef, i32 noundef) local_unnamed_addr #4

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

declare ptr @new_MixedOperator(ptr noundef) local_unnamed_addr #4

declare ptr @copy_Exp(ptr noundef) local_unnamed_addr #4

; Function Attrs: nounwind uwtable
declare dso_local ptr @instantiate_Effect(ptr noundef) local_unnamed_addr #3

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !10, i64 136}
!6 = !{!"_Operator", !7, i64 0, !8, i64 8, !10, i64 128, !8, i64 132, !10, i64 136, !8, i64 140, !8, i64 200, !7, i64 216, !7, i64 224, !8, i64 232}
!7 = !{!"any pointer", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"int", !8, i64 0}
!11 = !{!8, !8, i64 0}
!12 = !{!10, !10, i64 0}
!13 = distinct !{!13, !14}
!14 = !{!"llvm.loop.mustprogress"}
!15 = !{!6, !7, i64 216}
!16 = !{!7, !7, i64 0}
!17 = !{!18, !10, i64 0}
!18 = !{!"_WffNode", !10, i64 0, !10, i64 4, !10, i64 8, !7, i64 16, !7, i64 24, !7, i64 32, !7, i64 40, !7, i64 48, !10, i64 56, !7, i64 64, !10, i64 72, !7, i64 80, !7, i64 88, !8, i64 96}
!19 = !{!6, !7, i64 0}
!20 = distinct !{!20, !14}
!21 = distinct !{!21, !14}
!22 = !{!23, !7, i64 72}
!23 = !{!"_MixedOperator", !7, i64 0, !8, i64 8, !7, i64 72, !10, i64 80, !7, i64 88, !7, i64 96, !7, i64 104, !10, i64 112, !7, i64 120, !7, i64 128}
!24 = !{!23, !7, i64 88}
!25 = !{!23, !7, i64 96}
!26 = !{!23, !7, i64 104}
!27 = !{!23, !10, i64 80}
!28 = !{!23, !10, i64 112}
!29 = !{!18, !7, i64 48}
!30 = !{!31, !10, i64 0}
!31 = !{!"_Fact", !10, i64 0, !8, i64 4}
!32 = distinct !{!32, !14}
!33 = !{!18, !10, i64 72}
!34 = !{!18, !7, i64 80}
!35 = !{!18, !7, i64 88}
!36 = distinct !{!36, !14}
!37 = distinct !{!37, !14}
!38 = !{!6, !7, i64 224}
!39 = !{!23, !7, i64 120}
!40 = !{!23, !7, i64 128}
!41 = distinct !{!41, !14}
!42 = distinct !{!42, !14}
!43 = distinct !{!43, !14}
!44 = distinct !{!44, !14}
!45 = distinct !{!45, !14}
!46 = distinct !{!46, !14}
!47 = distinct !{!47, !14}
!48 = distinct !{!48, !14}
!49 = distinct !{!49, !14}


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