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

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

@gnum_easy_operators = external global i32, align 4
@geasy_operators = external global ptr, align 8
@garity = external global [50 x i32], align 16

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

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

9:                                                ; preds = %619, %0
  %10 = load i32, ptr %1, align 4, !tbaa !5
  %11 = load i32, ptr @gnum_easy_operators, align 4, !tbaa !5
  %12 = icmp slt i32 %10, %11
  br i1 %12, label %13, label %622

13:                                               ; preds = %9
  %14 = load ptr, ptr @geasy_operators, align 8, !tbaa !9
  %15 = load i32, ptr %1, align 4, !tbaa !5
  %16 = sext i32 %15 to i64
  %17 = getelementptr inbounds ptr, ptr %14, i64 %16
  %18 = load ptr, ptr %17, align 8, !tbaa !9
  store ptr %18, ptr %7, align 8, !tbaa !9
  store i32 0, ptr %2, align 4, !tbaa !5
  br label %19

19:                                               ; preds = %129, %13
  %20 = load i32, ptr %2, align 4, !tbaa !5
  %21 = load ptr, ptr %7, align 8, !tbaa !9
  %22 = getelementptr inbounds %struct._NormOperator, ptr %21, i32 0, i32 8
  %23 = load i32, ptr %22, align 8, !tbaa !11
  %24 = sub nsw i32 %23, 1
  %25 = icmp slt i32 %20, %24
  br i1 %25, label %26, label %132

26:                                               ; preds = %19
  %27 = load i32, ptr %2, align 4, !tbaa !5
  %28 = add nsw i32 %27, 1
  store i32 %28, ptr %3, align 4, !tbaa !5
  br label %29

29:                                               ; preds = %128, %26
  %30 = load i32, ptr %3, align 4, !tbaa !5
  %31 = load ptr, ptr %7, align 8, !tbaa !9
  %32 = getelementptr inbounds %struct._NormOperator, ptr %31, i32 0, i32 8
  %33 = load i32, ptr %32, align 8, !tbaa !11
  %34 = icmp slt i32 %30, %33
  br i1 %34, label %35, label %129

35:                                               ; preds = %29
  %36 = load ptr, ptr %7, align 8, !tbaa !9
  %37 = getelementptr inbounds %struct._NormOperator, ptr %36, i32 0, i32 7
  %38 = load ptr, ptr %37, align 8, !tbaa !13
  %39 = load i32, ptr %2, align 4, !tbaa !5
  %40 = sext i32 %39 to i64
  %41 = getelementptr inbounds %struct._Fact, ptr %38, i64 %40
  %42 = load ptr, ptr %7, align 8, !tbaa !9
  %43 = getelementptr inbounds %struct._NormOperator, ptr %42, i32 0, i32 7
  %44 = load ptr, ptr %43, align 8, !tbaa !13
  %45 = load i32, ptr %3, align 4, !tbaa !5
  %46 = sext i32 %45 to i64
  %47 = getelementptr inbounds %struct._Fact, ptr %44, i64 %46
  %48 = call zeroext i8 @identical_fact(ptr noundef %41, ptr noundef %47)
  %49 = icmp ne i8 %48, 0
  br i1 %49, label %50, label %125

50:                                               ; preds = %35
  %51 = load i32, ptr %3, align 4, !tbaa !5
  store i32 %51, ptr %4, align 4, !tbaa !5
  br label %52

52:                                               ; preds = %117, %50
  %53 = load i32, ptr %4, align 4, !tbaa !5
  %54 = load ptr, ptr %7, align 8, !tbaa !9
  %55 = getelementptr inbounds %struct._NormOperator, ptr %54, i32 0, i32 8
  %56 = load i32, ptr %55, align 8, !tbaa !11
  %57 = sub nsw i32 %56, 1
  %58 = icmp slt i32 %53, %57
  br i1 %58, label %59, label %120

59:                                               ; preds = %52
  %60 = load ptr, ptr %7, align 8, !tbaa !9
  %61 = getelementptr inbounds %struct._NormOperator, ptr %60, i32 0, i32 7
  %62 = load ptr, ptr %61, align 8, !tbaa !13
  %63 = load i32, ptr %4, align 4, !tbaa !5
  %64 = add nsw i32 %63, 1
  %65 = sext i32 %64 to i64
  %66 = getelementptr inbounds %struct._Fact, ptr %62, i64 %65
  %67 = getelementptr inbounds %struct._Fact, ptr %66, i32 0, i32 0
  %68 = load i32, ptr %67, align 4, !tbaa !14
  %69 = load ptr, ptr %7, align 8, !tbaa !9
  %70 = getelementptr inbounds %struct._NormOperator, ptr %69, i32 0, i32 7
  %71 = load ptr, ptr %70, align 8, !tbaa !13
  %72 = load i32, ptr %4, align 4, !tbaa !5
  %73 = sext i32 %72 to i64
  %74 = getelementptr inbounds %struct._Fact, ptr %71, i64 %73
  %75 = getelementptr inbounds %struct._Fact, ptr %74, i32 0, i32 0
  store i32 %68, ptr %75, align 4, !tbaa !14
  store i32 0, ptr %5, align 4, !tbaa !5
  br label %76

76:                                               ; preds = %113, %59
  %77 = load i32, ptr %5, align 4, !tbaa !5
  %78 = load ptr, ptr %7, align 8, !tbaa !9
  %79 = getelementptr inbounds %struct._NormOperator, ptr %78, i32 0, i32 7
  %80 = load ptr, ptr %79, align 8, !tbaa !13
  %81 = load i32, ptr %4, align 4, !tbaa !5
  %82 = sext i32 %81 to i64
  %83 = getelementptr inbounds %struct._Fact, ptr %80, i64 %82
  %84 = getelementptr inbounds %struct._Fact, ptr %83, i32 0, i32 0
  %85 = load i32, ptr %84, align 4, !tbaa !14
  %86 = sext i32 %85 to i64
  %87 = getelementptr inbounds [50 x i32], ptr @garity, i64 0, i64 %86
  %88 = load i32, ptr %87, align 4, !tbaa !5
  %89 = icmp slt i32 %77, %88
  br i1 %89, label %90, label %116

90:                                               ; preds = %76
  %91 = load ptr, ptr %7, align 8, !tbaa !9
  %92 = getelementptr inbounds %struct._NormOperator, ptr %91, i32 0, i32 7
  %93 = load ptr, ptr %92, align 8, !tbaa !13
  %94 = load i32, ptr %4, align 4, !tbaa !5
  %95 = add nsw i32 %94, 1
  %96 = sext i32 %95 to i64
  %97 = getelementptr inbounds %struct._Fact, ptr %93, i64 %96
  %98 = getelementptr inbounds %struct._Fact, ptr %97, i32 0, i32 1
  %99 = load i32, ptr %5, align 4, !tbaa !5
  %100 = sext i32 %99 to i64
  %101 = getelementptr inbounds [5 x i32], ptr %98, i64 0, i64 %100
  %102 = load i32, ptr %101, align 4, !tbaa !5
  %103 = load ptr, ptr %7, align 8, !tbaa !9
  %104 = getelementptr inbounds %struct._NormOperator, ptr %103, i32 0, i32 7
  %105 = load ptr, ptr %104, align 8, !tbaa !13
  %106 = load i32, ptr %4, align 4, !tbaa !5
  %107 = sext i32 %106 to i64
  %108 = getelementptr inbounds %struct._Fact, ptr %105, i64 %107
  %109 = getelementptr inbounds %struct._Fact, ptr %108, i32 0, i32 1
  %110 = load i32, ptr %5, align 4, !tbaa !5
  %111 = sext i32 %110 to i64
  %112 = getelementptr inbounds [5 x i32], ptr %109, i64 0, i64 %111
  store i32 %102, ptr %112, align 4, !tbaa !5
  br label %113

113:                                              ; preds = %90
  %114 = load i32, ptr %5, align 4, !tbaa !5
  %115 = add nsw i32 %114, 1
  store i32 %115, ptr %5, align 4, !tbaa !5
  br label %76, !llvm.loop !16

116:                                              ; preds = %76
  br label %117

117:                                              ; preds = %116
  %118 = load i32, ptr %4, align 4, !tbaa !5
  %119 = add nsw i32 %118, 1
  store i32 %119, ptr %4, align 4, !tbaa !5
  br label %52, !llvm.loop !18

120:                                              ; preds = %52
  %121 = load ptr, ptr %7, align 8, !tbaa !9
  %122 = getelementptr inbounds %struct._NormOperator, ptr %121, i32 0, i32 8
  %123 = load i32, ptr %122, align 8, !tbaa !11
  %124 = add nsw i32 %123, -1
  store i32 %124, ptr %122, align 8, !tbaa !11
  br label %128

125:                                              ; preds = %35
  %126 = load i32, ptr %3, align 4, !tbaa !5
  %127 = add nsw i32 %126, 1
  store i32 %127, ptr %3, align 4, !tbaa !5
  br label %128

128:                                              ; preds = %125, %120
  br label %29, !llvm.loop !19

129:                                              ; preds = %29
  %130 = load i32, ptr %2, align 4, !tbaa !5
  %131 = add nsw i32 %130, 1
  store i32 %131, ptr %2, align 4, !tbaa !5
  br label %19, !llvm.loop !20

132:                                              ; preds = %19
  %133 = load ptr, ptr %7, align 8, !tbaa !9
  %134 = getelementptr inbounds %struct._NormOperator, ptr %133, i32 0, i32 13
  %135 = load ptr, ptr %134, align 8, !tbaa !21
  store ptr %135, ptr %8, align 8, !tbaa !9
  br label %136

136:                                              ; preds = %614, %132
  %137 = load ptr, ptr %8, align 8, !tbaa !9
  %138 = icmp ne ptr %137, null
  br i1 %138, label %139, label %618

139:                                              ; preds = %136
  store i32 0, ptr %2, align 4, !tbaa !5
  br label %140

140:                                              ; preds = %264, %139
  %141 = load i32, ptr %2, align 4, !tbaa !5
  %142 = load ptr, ptr %8, align 8, !tbaa !9
  %143 = getelementptr inbounds %struct._NormEffect, ptr %142, i32 0, i32 4
  %144 = load i32, ptr %143, align 8, !tbaa !22
  %145 = sub nsw i32 %144, 1
  %146 = icmp slt i32 %141, %145
  br i1 %146, label %147, label %267

147:                                              ; preds = %140
  %148 = load i32, ptr %2, align 4, !tbaa !5
  %149 = add nsw i32 %148, 1
  store i32 %149, ptr %3, align 4, !tbaa !5
  br label %150

150:                                              ; preds = %263, %147
  %151 = load i32, ptr %3, align 4, !tbaa !5
  %152 = load ptr, ptr %8, align 8, !tbaa !9
  %153 = getelementptr inbounds %struct._NormEffect, ptr %152, i32 0, i32 4
  %154 = load i32, ptr %153, align 8, !tbaa !22
  %155 = icmp slt i32 %151, %154
  br i1 %155, label %156, label %264

156:                                              ; preds = %150
  %157 = load ptr, ptr %8, align 8, !tbaa !9
  %158 = getelementptr inbounds %struct._NormEffect, ptr %157, i32 0, i32 3
  %159 = load ptr, ptr %158, align 8, !tbaa !24
  %160 = load i32, ptr %2, align 4, !tbaa !5
  %161 = sext i32 %160 to i64
  %162 = getelementptr inbounds %struct._Fact, ptr %159, i64 %161
  %163 = load ptr, ptr %8, align 8, !tbaa !9
  %164 = getelementptr inbounds %struct._NormEffect, ptr %163, i32 0, i32 3
  %165 = load ptr, ptr %164, align 8, !tbaa !24
  %166 = load i32, ptr %3, align 4, !tbaa !5
  %167 = sext i32 %166 to i64
  %168 = getelementptr inbounds %struct._Fact, ptr %165, i64 %167
  %169 = call zeroext i8 @identical_fact(ptr noundef %162, ptr noundef %168)
  %170 = icmp ne i8 %169, 0
  br i1 %170, label %171, label %260

171:                                              ; preds = %156
  %172 = load i32, ptr %3, align 4, !tbaa !5
  store i32 %172, ptr %4, align 4, !tbaa !5
  br label %173

173:                                              ; preds = %252, %171
  %174 = load i32, ptr %4, align 4, !tbaa !5
  %175 = load ptr, ptr %8, align 8, !tbaa !9
  %176 = getelementptr inbounds %struct._NormEffect, ptr %175, i32 0, i32 4
  %177 = load i32, ptr %176, align 8, !tbaa !22
  %178 = sub nsw i32 %177, 1
  %179 = icmp slt i32 %174, %178
  br i1 %179, label %180, label %255

180:                                              ; preds = %173
  %181 = load ptr, ptr %8, align 8, !tbaa !9
  %182 = getelementptr inbounds %struct._NormEffect, ptr %181, i32 0, i32 3
  %183 = load ptr, ptr %182, align 8, !tbaa !24
  %184 = load i32, ptr %4, align 4, !tbaa !5
  %185 = add nsw i32 %184, 1
  %186 = sext i32 %185 to i64
  %187 = getelementptr inbounds %struct._Fact, ptr %183, i64 %186
  %188 = getelementptr inbounds %struct._Fact, ptr %187, i32 0, i32 0
  %189 = load i32, ptr %188, align 4, !tbaa !14
  %190 = load ptr, ptr %8, align 8, !tbaa !9
  %191 = getelementptr inbounds %struct._NormEffect, ptr %190, i32 0, i32 3
  %192 = load ptr, ptr %191, align 8, !tbaa !24
  %193 = load i32, ptr %4, align 4, !tbaa !5
  %194 = sext i32 %193 to i64
  %195 = getelementptr inbounds %struct._Fact, ptr %192, i64 %194
  %196 = getelementptr inbounds %struct._Fact, ptr %195, i32 0, i32 0
  store i32 %189, ptr %196, align 4, !tbaa !14
  %197 = load ptr, ptr %8, align 8, !tbaa !9
  %198 = getelementptr inbounds %struct._NormEffect, ptr %197, i32 0, i32 3
  %199 = load ptr, ptr %198, align 8, !tbaa !24
  %200 = load i32, ptr %4, align 4, !tbaa !5
  %201 = sext i32 %200 to i64
  %202 = getelementptr inbounds %struct._Fact, ptr %199, i64 %201
  %203 = getelementptr inbounds %struct._Fact, ptr %202, i32 0, i32 0
  %204 = load i32, ptr %203, align 4, !tbaa !14
  %205 = icmp slt i32 %204, 0
  br i1 %205, label %206, label %207

206:                                              ; preds = %180
  br label %219

207:                                              ; preds = %180
  %208 = load ptr, ptr %8, align 8, !tbaa !9
  %209 = getelementptr inbounds %struct._NormEffect, ptr %208, i32 0, i32 3
  %210 = load ptr, ptr %209, align 8, !tbaa !24
  %211 = load i32, ptr %4, align 4, !tbaa !5
  %212 = sext i32 %211 to i64
  %213 = getelementptr inbounds %struct._Fact, ptr %210, i64 %212
  %214 = getelementptr inbounds %struct._Fact, ptr %213, i32 0, i32 0
  %215 = load i32, ptr %214, align 4, !tbaa !14
  %216 = sext i32 %215 to i64
  %217 = getelementptr inbounds [50 x i32], ptr @garity, i64 0, i64 %216
  %218 = load i32, ptr %217, align 4, !tbaa !5
  br label %219

219:                                              ; preds = %207, %206
  %220 = phi i32 [ 2, %206 ], [ %218, %207 ]
  store i32 %220, ptr %6, align 4, !tbaa !5
  store i32 0, ptr %5, align 4, !tbaa !5
  br label %221

221:                                              ; preds = %248, %219
  %222 = load i32, ptr %5, align 4, !tbaa !5
  %223 = load i32, ptr %6, align 4, !tbaa !5
  %224 = icmp slt i32 %222, %223
  br i1 %224, label %225, label %251

225:                                              ; preds = %221
  %226 = load ptr, ptr %8, align 8, !tbaa !9
  %227 = getelementptr inbounds %struct._NormEffect, ptr %226, i32 0, i32 3
  %228 = load ptr, ptr %227, align 8, !tbaa !24
  %229 = load i32, ptr %4, align 4, !tbaa !5
  %230 = add nsw i32 %229, 1
  %231 = sext i32 %230 to i64
  %232 = getelementptr inbounds %struct._Fact, ptr %228, i64 %231
  %233 = getelementptr inbounds %struct._Fact, ptr %232, i32 0, i32 1
  %234 = load i32, ptr %5, align 4, !tbaa !5
  %235 = sext i32 %234 to i64
  %236 = getelementptr inbounds [5 x i32], ptr %233, i64 0, i64 %235
  %237 = load i32, ptr %236, align 4, !tbaa !5
  %238 = load ptr, ptr %8, align 8, !tbaa !9
  %239 = getelementptr inbounds %struct._NormEffect, ptr %238, i32 0, i32 3
  %240 = load ptr, ptr %239, align 8, !tbaa !24
  %241 = load i32, ptr %4, align 4, !tbaa !5
  %242 = sext i32 %241 to i64
  %243 = getelementptr inbounds %struct._Fact, ptr %240, i64 %242
  %244 = getelementptr inbounds %struct._Fact, ptr %243, i32 0, i32 1
  %245 = load i32, ptr %5, align 4, !tbaa !5
  %246 = sext i32 %245 to i64
  %247 = getelementptr inbounds [5 x i32], ptr %244, i64 0, i64 %246
  store i32 %237, ptr %247, align 4, !tbaa !5
  br label %248

248:                                              ; preds = %225
  %249 = load i32, ptr %5, align 4, !tbaa !5
  %250 = add nsw i32 %249, 1
  store i32 %250, ptr %5, align 4, !tbaa !5
  br label %221, !llvm.loop !25

251:                                              ; preds = %221
  br label %252

252:                                              ; preds = %251
  %253 = load i32, ptr %4, align 4, !tbaa !5
  %254 = add nsw i32 %253, 1
  store i32 %254, ptr %4, align 4, !tbaa !5
  br label %173, !llvm.loop !26

255:                                              ; preds = %173
  %256 = load ptr, ptr %8, align 8, !tbaa !9
  %257 = getelementptr inbounds %struct._NormEffect, ptr %256, i32 0, i32 4
  %258 = load i32, ptr %257, align 8, !tbaa !22
  %259 = add nsw i32 %258, -1
  store i32 %259, ptr %257, align 8, !tbaa !22
  br label %263

260:                                              ; preds = %156
  %261 = load i32, ptr %3, align 4, !tbaa !5
  %262 = add nsw i32 %261, 1
  store i32 %262, ptr %3, align 4, !tbaa !5
  br label %263

263:                                              ; preds = %260, %255
  br label %150, !llvm.loop !27

264:                                              ; preds = %150
  %265 = load i32, ptr %2, align 4, !tbaa !5
  %266 = add nsw i32 %265, 1
  store i32 %266, ptr %2, align 4, !tbaa !5
  br label %140, !llvm.loop !28

267:                                              ; preds = %140
  store i32 0, ptr %2, align 4, !tbaa !5
  br label %268

268:                                              ; preds = %380, %307, %267
  %269 = load i32, ptr %2, align 4, !tbaa !5
  %270 = load ptr, ptr %8, align 8, !tbaa !9
  %271 = getelementptr inbounds %struct._NormEffect, ptr %270, i32 0, i32 4
  %272 = load i32, ptr %271, align 8, !tbaa !22
  %273 = icmp slt i32 %269, %272
  br i1 %273, label %274, label %385

274:                                              ; preds = %268
  store i32 0, ptr %3, align 4, !tbaa !5
  br label %275

275:                                              ; preds = %298, %274
  %276 = load i32, ptr %3, align 4, !tbaa !5
  %277 = load ptr, ptr %7, align 8, !tbaa !9
  %278 = getelementptr inbounds %struct._NormOperator, ptr %277, i32 0, i32 8
  %279 = load i32, ptr %278, align 8, !tbaa !11
  %280 = icmp slt i32 %276, %279
  br i1 %280, label %281, label %301

281:                                              ; preds = %275
  %282 = load ptr, ptr %8, align 8, !tbaa !9
  %283 = getelementptr inbounds %struct._NormEffect, ptr %282, i32 0, i32 3
  %284 = load ptr, ptr %283, align 8, !tbaa !24
  %285 = load i32, ptr %2, align 4, !tbaa !5
  %286 = sext i32 %285 to i64
  %287 = getelementptr inbounds %struct._Fact, ptr %284, i64 %286
  %288 = load ptr, ptr %7, align 8, !tbaa !9
  %289 = getelementptr inbounds %struct._NormOperator, ptr %288, i32 0, i32 7
  %290 = load ptr, ptr %289, align 8, !tbaa !13
  %291 = load i32, ptr %3, align 4, !tbaa !5
  %292 = sext i32 %291 to i64
  %293 = getelementptr inbounds %struct._Fact, ptr %290, i64 %292
  %294 = call zeroext i8 @identical_fact(ptr noundef %287, ptr noundef %293)
  %295 = icmp ne i8 %294, 0
  br i1 %295, label %296, label %297

296:                                              ; preds = %281
  br label %301

297:                                              ; preds = %281
  br label %298

298:                                              ; preds = %297
  %299 = load i32, ptr %3, align 4, !tbaa !5
  %300 = add nsw i32 %299, 1
  store i32 %300, ptr %3, align 4, !tbaa !5
  br label %275, !llvm.loop !29

301:                                              ; preds = %296, %275
  %302 = load i32, ptr %3, align 4, !tbaa !5
  %303 = load ptr, ptr %7, align 8, !tbaa !9
  %304 = getelementptr inbounds %struct._NormOperator, ptr %303, i32 0, i32 8
  %305 = load i32, ptr %304, align 8, !tbaa !11
  %306 = icmp eq i32 %302, %305
  br i1 %306, label %307, label %310

307:                                              ; preds = %301
  %308 = load i32, ptr %2, align 4, !tbaa !5
  %309 = add nsw i32 %308, 1
  store i32 %309, ptr %2, align 4, !tbaa !5
  br label %268, !llvm.loop !30

310:                                              ; preds = %301
  %311 = load i32, ptr %2, align 4, !tbaa !5
  store i32 %311, ptr %3, align 4, !tbaa !5
  br label %312

312:                                              ; preds = %377, %310
  %313 = load i32, ptr %3, align 4, !tbaa !5
  %314 = load ptr, ptr %8, align 8, !tbaa !9
  %315 = getelementptr inbounds %struct._NormEffect, ptr %314, i32 0, i32 4
  %316 = load i32, ptr %315, align 8, !tbaa !22
  %317 = sub nsw i32 %316, 1
  %318 = icmp slt i32 %313, %317
  br i1 %318, label %319, label %380

319:                                              ; preds = %312
  %320 = load ptr, ptr %8, align 8, !tbaa !9
  %321 = getelementptr inbounds %struct._NormEffect, ptr %320, i32 0, i32 3
  %322 = load ptr, ptr %321, align 8, !tbaa !24
  %323 = load i32, ptr %3, align 4, !tbaa !5
  %324 = add nsw i32 %323, 1
  %325 = sext i32 %324 to i64
  %326 = getelementptr inbounds %struct._Fact, ptr %322, i64 %325
  %327 = getelementptr inbounds %struct._Fact, ptr %326, i32 0, i32 0
  %328 = load i32, ptr %327, align 4, !tbaa !14
  %329 = load ptr, ptr %8, align 8, !tbaa !9
  %330 = getelementptr inbounds %struct._NormEffect, ptr %329, i32 0, i32 3
  %331 = load ptr, ptr %330, align 8, !tbaa !24
  %332 = load i32, ptr %3, align 4, !tbaa !5
  %333 = sext i32 %332 to i64
  %334 = getelementptr inbounds %struct._Fact, ptr %331, i64 %333
  %335 = getelementptr inbounds %struct._Fact, ptr %334, i32 0, i32 0
  store i32 %328, ptr %335, align 4, !tbaa !14
  store i32 0, ptr %4, align 4, !tbaa !5
  br label %336

336:                                              ; preds = %373, %319
  %337 = load i32, ptr %4, align 4, !tbaa !5
  %338 = load ptr, ptr %8, align 8, !tbaa !9
  %339 = getelementptr inbounds %struct._NormEffect, ptr %338, i32 0, i32 3
  %340 = load ptr, ptr %339, align 8, !tbaa !24
  %341 = load i32, ptr %3, align 4, !tbaa !5
  %342 = sext i32 %341 to i64
  %343 = getelementptr inbounds %struct._Fact, ptr %340, i64 %342
  %344 = getelementptr inbounds %struct._Fact, ptr %343, i32 0, i32 0
  %345 = load i32, ptr %344, align 4, !tbaa !14
  %346 = sext i32 %345 to i64
  %347 = getelementptr inbounds [50 x i32], ptr @garity, i64 0, i64 %346
  %348 = load i32, ptr %347, align 4, !tbaa !5
  %349 = icmp slt i32 %337, %348
  br i1 %349, label %350, label %376

350:                                              ; preds = %336
  %351 = load ptr, ptr %8, align 8, !tbaa !9
  %352 = getelementptr inbounds %struct._NormEffect, ptr %351, i32 0, i32 3
  %353 = load ptr, ptr %352, align 8, !tbaa !24
  %354 = load i32, ptr %3, align 4, !tbaa !5
  %355 = add nsw i32 %354, 1
  %356 = sext i32 %355 to i64
  %357 = getelementptr inbounds %struct._Fact, ptr %353, i64 %356
  %358 = getelementptr inbounds %struct._Fact, ptr %357, i32 0, i32 1
  %359 = load i32, ptr %4, align 4, !tbaa !5
  %360 = sext i32 %359 to i64
  %361 = getelementptr inbounds [5 x i32], ptr %358, i64 0, i64 %360
  %362 = load i32, ptr %361, align 4, !tbaa !5
  %363 = load ptr, ptr %8, align 8, !tbaa !9
  %364 = getelementptr inbounds %struct._NormEffect, ptr %363, i32 0, i32 3
  %365 = load ptr, ptr %364, align 8, !tbaa !24
  %366 = load i32, ptr %3, align 4, !tbaa !5
  %367 = sext i32 %366 to i64
  %368 = getelementptr inbounds %struct._Fact, ptr %365, i64 %367
  %369 = getelementptr inbounds %struct._Fact, ptr %368, i32 0, i32 1
  %370 = load i32, ptr %4, align 4, !tbaa !5
  %371 = sext i32 %370 to i64
  %372 = getelementptr inbounds [5 x i32], ptr %369, i64 0, i64 %371
  store i32 %362, ptr %372, align 4, !tbaa !5
  br label %373

373:                                              ; preds = %350
  %374 = load i32, ptr %4, align 4, !tbaa !5
  %375 = add nsw i32 %374, 1
  store i32 %375, ptr %4, align 4, !tbaa !5
  br label %336, !llvm.loop !31

376:                                              ; preds = %336
  br label %377

377:                                              ; preds = %376
  %378 = load i32, ptr %3, align 4, !tbaa !5
  %379 = add nsw i32 %378, 1
  store i32 %379, ptr %3, align 4, !tbaa !5
  br label %312, !llvm.loop !32

380:                                              ; preds = %312
  %381 = load ptr, ptr %8, align 8, !tbaa !9
  %382 = getelementptr inbounds %struct._NormEffect, ptr %381, i32 0, i32 4
  %383 = load i32, ptr %382, align 8, !tbaa !22
  %384 = add nsw i32 %383, -1
  store i32 %384, ptr %382, align 8, !tbaa !22
  br label %268, !llvm.loop !30

385:                                              ; preds = %268
  store i32 0, ptr %2, align 4, !tbaa !5
  br label %386

386:                                              ; preds = %496, %385
  %387 = load i32, ptr %2, align 4, !tbaa !5
  %388 = load ptr, ptr %8, align 8, !tbaa !9
  %389 = getelementptr inbounds %struct._NormEffect, ptr %388, i32 0, i32 6
  %390 = load i32, ptr %389, align 8, !tbaa !33
  %391 = sub nsw i32 %390, 1
  %392 = icmp slt i32 %387, %391
  br i1 %392, label %393, label %499

393:                                              ; preds = %386
  %394 = load i32, ptr %2, align 4, !tbaa !5
  %395 = add nsw i32 %394, 1
  store i32 %395, ptr %3, align 4, !tbaa !5
  br label %396

396:                                              ; preds = %495, %393
  %397 = load i32, ptr %3, align 4, !tbaa !5
  %398 = load ptr, ptr %8, align 8, !tbaa !9
  %399 = getelementptr inbounds %struct._NormEffect, ptr %398, i32 0, i32 6
  %400 = load i32, ptr %399, align 8, !tbaa !33
  %401 = icmp slt i32 %397, %400
  br i1 %401, label %402, label %496

402:                                              ; preds = %396
  %403 = load ptr, ptr %8, align 8, !tbaa !9
  %404 = getelementptr inbounds %struct._NormEffect, ptr %403, i32 0, i32 5
  %405 = load ptr, ptr %404, align 8, !tbaa !34
  %406 = load i32, ptr %2, align 4, !tbaa !5
  %407 = sext i32 %406 to i64
  %408 = getelementptr inbounds %struct._Fact, ptr %405, i64 %407
  %409 = load ptr, ptr %8, align 8, !tbaa !9
  %410 = getelementptr inbounds %struct._NormEffect, ptr %409, i32 0, i32 5
  %411 = load ptr, ptr %410, align 8, !tbaa !34
  %412 = load i32, ptr %3, align 4, !tbaa !5
  %413 = sext i32 %412 to i64
  %414 = getelementptr inbounds %struct._Fact, ptr %411, i64 %413
  %415 = call zeroext i8 @identical_fact(ptr noundef %408, ptr noundef %414)
  %416 = icmp ne i8 %415, 0
  br i1 %416, label %417, label %492

417:                                              ; preds = %402
  %418 = load i32, ptr %3, align 4, !tbaa !5
  store i32 %418, ptr %4, align 4, !tbaa !5
  br label %419

419:                                              ; preds = %484, %417
  %420 = load i32, ptr %4, align 4, !tbaa !5
  %421 = load ptr, ptr %8, align 8, !tbaa !9
  %422 = getelementptr inbounds %struct._NormEffect, ptr %421, i32 0, i32 6
  %423 = load i32, ptr %422, align 8, !tbaa !33
  %424 = sub nsw i32 %423, 1
  %425 = icmp slt i32 %420, %424
  br i1 %425, label %426, label %487

426:                                              ; preds = %419
  %427 = load ptr, ptr %8, align 8, !tbaa !9
  %428 = getelementptr inbounds %struct._NormEffect, ptr %427, i32 0, i32 5
  %429 = load ptr, ptr %428, align 8, !tbaa !34
  %430 = load i32, ptr %4, align 4, !tbaa !5
  %431 = add nsw i32 %430, 1
  %432 = sext i32 %431 to i64
  %433 = getelementptr inbounds %struct._Fact, ptr %429, i64 %432
  %434 = getelementptr inbounds %struct._Fact, ptr %433, i32 0, i32 0
  %435 = load i32, ptr %434, align 4, !tbaa !14
  %436 = load ptr, ptr %8, align 8, !tbaa !9
  %437 = getelementptr inbounds %struct._NormEffect, ptr %436, i32 0, i32 5
  %438 = load ptr, ptr %437, align 8, !tbaa !34
  %439 = load i32, ptr %4, align 4, !tbaa !5
  %440 = sext i32 %439 to i64
  %441 = getelementptr inbounds %struct._Fact, ptr %438, i64 %440
  %442 = getelementptr inbounds %struct._Fact, ptr %441, i32 0, i32 0
  store i32 %435, ptr %442, align 4, !tbaa !14
  store i32 0, ptr %5, align 4, !tbaa !5
  br label %443

443:                                              ; preds = %480, %426
  %444 = load i32, ptr %5, align 4, !tbaa !5
  %445 = load ptr, ptr %8, align 8, !tbaa !9
  %446 = getelementptr inbounds %struct._NormEffect, ptr %445, i32 0, i32 5
  %447 = load ptr, ptr %446, align 8, !tbaa !34
  %448 = load i32, ptr %4, align 4, !tbaa !5
  %449 = sext i32 %448 to i64
  %450 = getelementptr inbounds %struct._Fact, ptr %447, i64 %449
  %451 = getelementptr inbounds %struct._Fact, ptr %450, i32 0, i32 0
  %452 = load i32, ptr %451, align 4, !tbaa !14
  %453 = sext i32 %452 to i64
  %454 = getelementptr inbounds [50 x i32], ptr @garity, i64 0, i64 %453
  %455 = load i32, ptr %454, align 4, !tbaa !5
  %456 = icmp slt i32 %444, %455
  br i1 %456, label %457, label %483

457:                                              ; preds = %443
  %458 = load ptr, ptr %8, align 8, !tbaa !9
  %459 = getelementptr inbounds %struct._NormEffect, ptr %458, i32 0, i32 5
  %460 = load ptr, ptr %459, align 8, !tbaa !34
  %461 = load i32, ptr %4, align 4, !tbaa !5
  %462 = add nsw i32 %461, 1
  %463 = sext i32 %462 to i64
  %464 = getelementptr inbounds %struct._Fact, ptr %460, i64 %463
  %465 = getelementptr inbounds %struct._Fact, ptr %464, i32 0, i32 1
  %466 = load i32, ptr %5, align 4, !tbaa !5
  %467 = sext i32 %466 to i64
  %468 = getelementptr inbounds [5 x i32], ptr %465, i64 0, i64 %467
  %469 = load i32, ptr %468, align 4, !tbaa !5
  %470 = load ptr, ptr %8, align 8, !tbaa !9
  %471 = getelementptr inbounds %struct._NormEffect, ptr %470, i32 0, i32 5
  %472 = load ptr, ptr %471, align 8, !tbaa !34
  %473 = load i32, ptr %4, align 4, !tbaa !5
  %474 = sext i32 %473 to i64
  %475 = getelementptr inbounds %struct._Fact, ptr %472, i64 %474
  %476 = getelementptr inbounds %struct._Fact, ptr %475, i32 0, i32 1
  %477 = load i32, ptr %5, align 4, !tbaa !5
  %478 = sext i32 %477 to i64
  %479 = getelementptr inbounds [5 x i32], ptr %476, i64 0, i64 %478
  store i32 %469, ptr %479, align 4, !tbaa !5
  br label %480

480:                                              ; preds = %457
  %481 = load i32, ptr %5, align 4, !tbaa !5
  %482 = add nsw i32 %481, 1
  store i32 %482, ptr %5, align 4, !tbaa !5
  br label %443, !llvm.loop !35

483:                                              ; preds = %443
  br label %484

484:                                              ; preds = %483
  %485 = load i32, ptr %4, align 4, !tbaa !5
  %486 = add nsw i32 %485, 1
  store i32 %486, ptr %4, align 4, !tbaa !5
  br label %419, !llvm.loop !36

487:                                              ; preds = %419
  %488 = load ptr, ptr %8, align 8, !tbaa !9
  %489 = getelementptr inbounds %struct._NormEffect, ptr %488, i32 0, i32 6
  %490 = load i32, ptr %489, align 8, !tbaa !33
  %491 = add nsw i32 %490, -1
  store i32 %491, ptr %489, align 8, !tbaa !33
  br label %495

492:                                              ; preds = %402
  %493 = load i32, ptr %3, align 4, !tbaa !5
  %494 = add nsw i32 %493, 1
  store i32 %494, ptr %3, align 4, !tbaa !5
  br label %495

495:                                              ; preds = %492, %487
  br label %396, !llvm.loop !37

496:                                              ; preds = %396
  %497 = load i32, ptr %2, align 4, !tbaa !5
  %498 = add nsw i32 %497, 1
  store i32 %498, ptr %2, align 4, !tbaa !5
  br label %386, !llvm.loop !38

499:                                              ; preds = %386
  store i32 0, ptr %2, align 4, !tbaa !5
  br label %500

500:                                              ; preds = %610, %499
  %501 = load i32, ptr %2, align 4, !tbaa !5
  %502 = load ptr, ptr %8, align 8, !tbaa !9
  %503 = getelementptr inbounds %struct._NormEffect, ptr %502, i32 0, i32 8
  %504 = load i32, ptr %503, align 8, !tbaa !39
  %505 = sub nsw i32 %504, 1
  %506 = icmp slt i32 %501, %505
  br i1 %506, label %507, label %613

507:                                              ; preds = %500
  %508 = load i32, ptr %2, align 4, !tbaa !5
  %509 = add nsw i32 %508, 1
  store i32 %509, ptr %3, align 4, !tbaa !5
  br label %510

510:                                              ; preds = %609, %507
  %511 = load i32, ptr %3, align 4, !tbaa !5
  %512 = load ptr, ptr %8, align 8, !tbaa !9
  %513 = getelementptr inbounds %struct._NormEffect, ptr %512, i32 0, i32 8
  %514 = load i32, ptr %513, align 8, !tbaa !39
  %515 = icmp slt i32 %511, %514
  br i1 %515, label %516, label %610

516:                                              ; preds = %510
  %517 = load ptr, ptr %8, align 8, !tbaa !9
  %518 = getelementptr inbounds %struct._NormEffect, ptr %517, i32 0, i32 7
  %519 = load ptr, ptr %518, align 8, !tbaa !40
  %520 = load i32, ptr %2, align 4, !tbaa !5
  %521 = sext i32 %520 to i64
  %522 = getelementptr inbounds %struct._Fact, ptr %519, i64 %521
  %523 = load ptr, ptr %8, align 8, !tbaa !9
  %524 = getelementptr inbounds %struct._NormEffect, ptr %523, i32 0, i32 7
  %525 = load ptr, ptr %524, align 8, !tbaa !40
  %526 = load i32, ptr %3, align 4, !tbaa !5
  %527 = sext i32 %526 to i64
  %528 = getelementptr inbounds %struct._Fact, ptr %525, i64 %527
  %529 = call zeroext i8 @identical_fact(ptr noundef %522, ptr noundef %528)
  %530 = icmp ne i8 %529, 0
  br i1 %530, label %531, label %606

531:                                              ; preds = %516
  %532 = load i32, ptr %3, align 4, !tbaa !5
  store i32 %532, ptr %4, align 4, !tbaa !5
  br label %533

533:                                              ; preds = %598, %531
  %534 = load i32, ptr %4, align 4, !tbaa !5
  %535 = load ptr, ptr %8, align 8, !tbaa !9
  %536 = getelementptr inbounds %struct._NormEffect, ptr %535, i32 0, i32 8
  %537 = load i32, ptr %536, align 8, !tbaa !39
  %538 = sub nsw i32 %537, 1
  %539 = icmp slt i32 %534, %538
  br i1 %539, label %540, label %601

540:                                              ; preds = %533
  %541 = load ptr, ptr %8, align 8, !tbaa !9
  %542 = getelementptr inbounds %struct._NormEffect, ptr %541, i32 0, i32 7
  %543 = load ptr, ptr %542, align 8, !tbaa !40
  %544 = load i32, ptr %4, align 4, !tbaa !5
  %545 = add nsw i32 %544, 1
  %546 = sext i32 %545 to i64
  %547 = getelementptr inbounds %struct._Fact, ptr %543, i64 %546
  %548 = getelementptr inbounds %struct._Fact, ptr %547, i32 0, i32 0
  %549 = load i32, ptr %548, align 4, !tbaa !14
  %550 = load ptr, ptr %8, align 8, !tbaa !9
  %551 = getelementptr inbounds %struct._NormEffect, ptr %550, i32 0, i32 7
  %552 = load ptr, ptr %551, align 8, !tbaa !40
  %553 = load i32, ptr %4, align 4, !tbaa !5
  %554 = sext i32 %553 to i64
  %555 = getelementptr inbounds %struct._Fact, ptr %552, i64 %554
  %556 = getelementptr inbounds %struct._Fact, ptr %555, i32 0, i32 0
  store i32 %549, ptr %556, align 4, !tbaa !14
  store i32 0, ptr %5, align 4, !tbaa !5
  br label %557

557:                                              ; preds = %594, %540
  %558 = load i32, ptr %5, align 4, !tbaa !5
  %559 = load ptr, ptr %8, align 8, !tbaa !9
  %560 = getelementptr inbounds %struct._NormEffect, ptr %559, i32 0, i32 7
  %561 = load ptr, ptr %560, align 8, !tbaa !40
  %562 = load i32, ptr %4, align 4, !tbaa !5
  %563 = sext i32 %562 to i64
  %564 = getelementptr inbounds %struct._Fact, ptr %561, i64 %563
  %565 = getelementptr inbounds %struct._Fact, ptr %564, i32 0, i32 0
  %566 = load i32, ptr %565, align 4, !tbaa !14
  %567 = sext i32 %566 to i64
  %568 = getelementptr inbounds [50 x i32], ptr @garity, i64 0, i64 %567
  %569 = load i32, ptr %568, align 4, !tbaa !5
  %570 = icmp slt i32 %558, %569
  br i1 %570, label %571, label %597

571:                                              ; preds = %557
  %572 = load ptr, ptr %8, align 8, !tbaa !9
  %573 = getelementptr inbounds %struct._NormEffect, ptr %572, i32 0, i32 7
  %574 = load ptr, ptr %573, align 8, !tbaa !40
  %575 = load i32, ptr %4, align 4, !tbaa !5
  %576 = add nsw i32 %575, 1
  %577 = sext i32 %576 to i64
  %578 = getelementptr inbounds %struct._Fact, ptr %574, i64 %577
  %579 = getelementptr inbounds %struct._Fact, ptr %578, i32 0, i32 1
  %580 = load i32, ptr %5, align 4, !tbaa !5
  %581 = sext i32 %580 to i64
  %582 = getelementptr inbounds [5 x i32], ptr %579, i64 0, i64 %581
  %583 = load i32, ptr %582, align 4, !tbaa !5
  %584 = load ptr, ptr %8, align 8, !tbaa !9
  %585 = getelementptr inbounds %struct._NormEffect, ptr %584, i32 0, i32 7
  %586 = load ptr, ptr %585, align 8, !tbaa !40
  %587 = load i32, ptr %4, align 4, !tbaa !5
  %588 = sext i32 %587 to i64
  %589 = getelementptr inbounds %struct._Fact, ptr %586, i64 %588
  %590 = getelementptr inbounds %struct._Fact, ptr %589, i32 0, i32 1
  %591 = load i32, ptr %5, align 4, !tbaa !5
  %592 = sext i32 %591 to i64
  %593 = getelementptr inbounds [5 x i32], ptr %590, i64 0, i64 %592
  store i32 %583, ptr %593, align 4, !tbaa !5
  br label %594

594:                                              ; preds = %571
  %595 = load i32, ptr %5, align 4, !tbaa !5
  %596 = add nsw i32 %595, 1
  store i32 %596, ptr %5, align 4, !tbaa !5
  br label %557, !llvm.loop !41

597:                                              ; preds = %557
  br label %598

598:                                              ; preds = %597
  %599 = load i32, ptr %4, align 4, !tbaa !5
  %600 = add nsw i32 %599, 1
  store i32 %600, ptr %4, align 4, !tbaa !5
  br label %533, !llvm.loop !42

601:                                              ; preds = %533
  %602 = load ptr, ptr %8, align 8, !tbaa !9
  %603 = getelementptr inbounds %struct._NormEffect, ptr %602, i32 0, i32 8
  %604 = load i32, ptr %603, align 8, !tbaa !39
  %605 = add nsw i32 %604, -1
  store i32 %605, ptr %603, align 8, !tbaa !39
  br label %609

606:                                              ; preds = %516
  %607 = load i32, ptr %3, align 4, !tbaa !5
  %608 = add nsw i32 %607, 1
  store i32 %608, ptr %3, align 4, !tbaa !5
  br label %609

609:                                              ; preds = %606, %601
  br label %510, !llvm.loop !43

610:                                              ; preds = %510
  %611 = load i32, ptr %2, align 4, !tbaa !5
  %612 = add nsw i32 %611, 1
  store i32 %612, ptr %2, align 4, !tbaa !5
  br label %500, !llvm.loop !44

613:                                              ; preds = %500
  br label %614

614:                                              ; preds = %613
  %615 = load ptr, ptr %8, align 8, !tbaa !9
  %616 = getelementptr inbounds %struct._NormEffect, ptr %615, i32 0, i32 18
  %617 = load ptr, ptr %616, align 8, !tbaa !45
  store ptr %617, ptr %8, align 8, !tbaa !9
  br label %136, !llvm.loop !46

618:                                              ; preds = %136
  br label %619

619:                                              ; preds = %618
  %620 = load i32, ptr %1, align 4, !tbaa !5
  %621 = add nsw i32 %620, 1
  store i32 %621, ptr %1, align 4, !tbaa !5
  br label %9, !llvm.loop !47

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

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

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"any pointer", !7, i64 0}
!11 = !{!12, !6, i64 264}
!12 = !{!"_NormOperator", !10, i64 0, !6, i64 8, !7, i64 12, !7, i64 72, !7, i64 132, !6, i64 192, !7, i64 196, !10, i64 256, !6, i64 264, !10, i64 272, !10, i64 280, !10, i64 288, !6, i64 296, !10, i64 304, !7, i64 312}
!13 = !{!12, !10, i64 256}
!14 = !{!15, !6, i64 0}
!15 = !{!"_Fact", !6, i64 0, !7, i64 4}
!16 = distinct !{!16, !17}
!17 = !{!"llvm.loop.mustprogress"}
!18 = distinct !{!18, !17}
!19 = distinct !{!19, !17}
!20 = distinct !{!20, !17}
!21 = !{!12, !10, i64 304}
!22 = !{!23, !6, i64 136}
!23 = !{!"_NormEffect", !6, i64 0, !7, i64 4, !7, i64 64, !10, i64 128, !6, i64 136, !10, i64 144, !6, i64 152, !10, i64 160, !6, i64 168, !10, i64 176, !10, i64 184, !10, i64 192, !6, i64 200, !10, i64 208, !10, i64 216, !10, i64 224, !6, i64 232, !10, i64 240, !10, i64 248}
!24 = !{!23, !10, i64 128}
!25 = distinct !{!25, !17}
!26 = distinct !{!26, !17}
!27 = distinct !{!27, !17}
!28 = distinct !{!28, !17}
!29 = distinct !{!29, !17}
!30 = distinct !{!30, !17}
!31 = distinct !{!31, !17}
!32 = distinct !{!32, !17}
!33 = !{!23, !6, i64 152}
!34 = !{!23, !10, i64 144}
!35 = distinct !{!35, !17}
!36 = distinct !{!36, !17}
!37 = distinct !{!37, !17}
!38 = distinct !{!38, !17}
!39 = !{!23, !6, i64 168}
!40 = !{!23, !10, i64 160}
!41 = distinct !{!41, !17}
!42 = distinct !{!42, !17}
!43 = distinct !{!43, !17}
!44 = distinct !{!44, !17}
!45 = !{!23, !10, i64 248}
!46 = distinct !{!46, !17}
!47 = distinct !{!47, !17}


; 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] }

@gnum_easy_operators = external local_unnamed_addr global i32, align 4
@geasy_operators = external local_unnamed_addr global ptr, align 8
@garity = external local_unnamed_addr global [50 x i32], align 16

; Function Attrs: nounwind uwtable
define dso_local void @cleanup_easy_domain() local_unnamed_addr #0 {
  tail call void @handle_empty_easy_parameters()
  %1 = load i32, ptr @gnum_easy_operators, align 4, !tbaa !5
  %2 = icmp sgt i32 %1, 0
  br i1 %2, label %.lr.ph274, label %._crit_edge275

.lr.ph274:                                        ; preds = %0, %._crit_edge271
  %indvars.iv338 = phi i64 [ %indvars.iv.next339, %._crit_edge271 ], [ 0, %0 ]
  %3 = load ptr, ptr @geasy_operators, align 8, !tbaa !9
  %4 = getelementptr inbounds ptr, ptr %3, i64 %indvars.iv338
  %5 = load ptr, ptr %4, align 8, !tbaa !9
  %6 = getelementptr inbounds i8, ptr %5, i64 264
  %7 = load i32, ptr %6, align 8, !tbaa !11
  %8 = icmp sgt i32 %7, 1
  br i1 %8, label %.lr.ph212, label %._crit_edge213

.lr.ph212:                                        ; preds = %.lr.ph274
  %9 = getelementptr inbounds i8, ptr %5, i64 256
  br label %14

.loopexit197:                                     ; preds = %52, %14
  %10 = phi i32 [ %15, %14 ], [ %53, %52 ]
  %11 = add nsw i32 %10, -1
  %12 = sext i32 %11 to i64
  %13 = icmp slt i64 %indvars.iv.next287, %12
  br i1 %13, label %14, label %._crit_edge213, !llvm.loop !13

14:                                               ; preds = %.lr.ph212, %.loopexit197
  %15 = phi i32 [ %7, %.lr.ph212 ], [ %10, %.loopexit197 ]
  %indvars.iv286 = phi i64 [ 0, %.lr.ph212 ], [ %indvars.iv.next287, %.loopexit197 ]
  %indvars.iv.next287 = add nuw nsw i64 %indvars.iv286, 1
  %16 = sext i32 %15 to i64
  %17 = icmp slt i64 %indvars.iv.next287, %16
  br i1 %17, label %.lr.ph209, label %.loopexit197

.lr.ph209:                                        ; preds = %14
  %18 = trunc nuw nsw i64 %indvars.iv.next287 to i32
  br label %19

19:                                               ; preds = %.lr.ph209, %52
  %.0170207 = phi i32 [ %18, %.lr.ph209 ], [ %.1171, %52 ]
  %20 = load ptr, ptr %9, align 8, !tbaa !15
  %21 = getelementptr inbounds %struct._Fact, ptr %20, i64 %indvars.iv286
  %22 = sext i32 %.0170207 to i64
  %23 = getelementptr inbounds %struct._Fact, ptr %20, i64 %22
  %24 = tail call zeroext i8 @identical_fact(ptr noundef %21, ptr noundef %23)
  %.not180 = icmp eq i8 %24, 0
  br i1 %.not180, label %50, label %.preheader192

.preheader192:                                    ; preds = %19
  %25 = load i32, ptr %6, align 8, !tbaa !11
  %26 = add nsw i32 %25, -1
  %27 = icmp slt i32 %.0170207, %26
  br i1 %27, label %.lr.ph206, label %._crit_edge

.lr.ph206:                                        ; preds = %.preheader192
  %28 = load ptr, ptr %9, align 8, !tbaa !15
  br label %33

.loopexit186.loopexit:                            ; preds = %43
  %.pre = load i32, ptr %6, align 8, !tbaa !11
  br label %.loopexit186

.loopexit186:                                     ; preds = %.loopexit186.loopexit, %33
  %29 = phi i32 [ %.pre, %.loopexit186.loopexit ], [ %34, %33 ]
  %30 = add nsw i32 %29, -1
  %31 = sext i32 %30 to i64
  %32 = icmp slt i64 %indvars.iv.next284, %31
  br i1 %32, label %33, label %._crit_edge, !llvm.loop !16

33:                                               ; preds = %.lr.ph206, %.loopexit186
  %34 = phi i32 [ %25, %.lr.ph206 ], [ %29, %.loopexit186 ]
  %indvars.iv283 = phi i64 [ %22, %.lr.ph206 ], [ %indvars.iv.next284, %.loopexit186 ]
  %indvars.iv.next284 = add nsw i64 %indvars.iv283, 1
  %35 = getelementptr inbounds %struct._Fact, ptr %28, i64 %indvars.iv.next284
  %36 = load i32, ptr %35, align 4, !tbaa !17
  %37 = getelementptr inbounds %struct._Fact, ptr %28, i64 %indvars.iv283
  store i32 %36, ptr %37, align 4, !tbaa !17
  %38 = sext i32 %36 to i64
  %39 = getelementptr inbounds [50 x i32], ptr @garity, i64 0, i64 %38
  %40 = load i32, ptr %39, align 4, !tbaa !5
  %41 = icmp sgt i32 %40, 0
  br i1 %41, label %.lr.ph, label %.loopexit186

.lr.ph:                                           ; preds = %33
  %42 = getelementptr inbounds i8, ptr %37, i64 4
  br label %43

43:                                               ; preds = %.lr.ph, %43
  %indvars.iv = phi i64 [ 0, %.lr.ph ], [ %indvars.iv.next, %43 ]
  %44 = getelementptr inbounds %struct._Fact, ptr %28, i64 %indvars.iv.next284, i32 1, i64 %indvars.iv
  %45 = load i32, ptr %44, align 4, !tbaa !5
  %46 = getelementptr inbounds [5 x i32], ptr %42, i64 0, i64 %indvars.iv
  store i32 %45, ptr %46, align 4, !tbaa !5
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %47 = load i32, ptr %39, align 4, !tbaa !5
  %48 = sext i32 %47 to i64
  %49 = icmp slt i64 %indvars.iv.next, %48
  br i1 %49, label %43, label %.loopexit186.loopexit, !llvm.loop !19

._crit_edge:                                      ; preds = %.loopexit186, %.preheader192
  %.lcssa = phi i32 [ %26, %.preheader192 ], [ %30, %.loopexit186 ]
  store i32 %.lcssa, ptr %6, align 8, !tbaa !11
  br label %52

50:                                               ; preds = %19
  %51 = add nsw i32 %.0170207, 1
  %.pre342 = load i32, ptr %6, align 8, !tbaa !11
  br label %52

52:                                               ; preds = %50, %._crit_edge
  %53 = phi i32 [ %.lcssa, %._crit_edge ], [ %.pre342, %50 ]
  %.1171 = phi i32 [ %.0170207, %._crit_edge ], [ %51, %50 ]
  %54 = icmp slt i32 %.1171, %53
  br i1 %54, label %19, label %.loopexit197, !llvm.loop !20

._crit_edge213:                                   ; preds = %.loopexit197, %.lr.ph274
  %55 = getelementptr inbounds i8, ptr %5, i64 304
  %.0267 = load ptr, ptr %55, align 8, !tbaa !9
  %.not268 = icmp eq ptr %.0267, null
  br i1 %.not268, label %._crit_edge271, label %.preheader196.lr.ph

.preheader196.lr.ph:                              ; preds = %._crit_edge213
  %56 = getelementptr inbounds i8, ptr %5, i64 256
  br label %.preheader196

.preheader196:                                    ; preds = %.preheader196.lr.ph, %._crit_edge266
  %.0269 = phi ptr [ %.0267, %.preheader196.lr.ph ], [ %.0, %._crit_edge266 ]
  %57 = getelementptr inbounds i8, ptr %.0269, i64 136
  %58 = load i32, ptr %57, align 8, !tbaa !21
  %59 = icmp sgt i32 %58, 1
  br i1 %59, label %.lr.ph226, label %.preheader195

.lr.ph226:                                        ; preds = %.preheader196
  %60 = getelementptr inbounds i8, ptr %.0269, i64 128
  br label %68

.loopexit191:                                     ; preds = %109, %68
  %61 = phi i32 [ %69, %68 ], [ %110, %109 ]
  %62 = add nsw i32 %61, -1
  %63 = sext i32 %62 to i64
  %64 = icmp slt i64 %indvars.iv.next297, %63
  br i1 %64, label %68, label %.preheader195, !llvm.loop !23

.preheader195:                                    ; preds = %.loopexit191, %.preheader196
  %65 = phi i32 [ %58, %.preheader196 ], [ %61, %.loopexit191 ]
  %66 = icmp sgt i32 %65, 0
  br i1 %66, label %.preheader190.lr.ph.lr.ph, label %.preheader194

.preheader190.lr.ph.lr.ph:                        ; preds = %.preheader195
  %67 = getelementptr inbounds i8, ptr %.0269, i64 128
  br label %.preheader190.lr.ph

68:                                               ; preds = %.lr.ph226, %.loopexit191
  %69 = phi i32 [ %58, %.lr.ph226 ], [ %61, %.loopexit191 ]
  %indvars.iv296 = phi i64 [ 0, %.lr.ph226 ], [ %indvars.iv.next297, %.loopexit191 ]
  %indvars.iv.next297 = add nuw nsw i64 %indvars.iv296, 1
  %70 = sext i32 %69 to i64
  %71 = icmp slt i64 %indvars.iv.next297, %70
  br i1 %71, label %.lr.ph224, label %.loopexit191

.lr.ph224:                                        ; preds = %68
  %72 = trunc nuw nsw i64 %indvars.iv.next297 to i32
  br label %73

73:                                               ; preds = %.lr.ph224, %109
  %.2172222 = phi i32 [ %72, %.lr.ph224 ], [ %.3173, %109 ]
  %74 = load ptr, ptr %60, align 8, !tbaa !24
  %75 = getelementptr inbounds %struct._Fact, ptr %74, i64 %indvars.iv296
  %76 = sext i32 %.2172222 to i64
  %77 = getelementptr inbounds %struct._Fact, ptr %74, i64 %76
  %78 = tail call zeroext i8 @identical_fact(ptr noundef %75, ptr noundef %77)
  %.not179 = icmp eq i8 %78, 0
  br i1 %.not179, label %107, label %.preheader185

.preheader185:                                    ; preds = %73
  %79 = load i32, ptr %57, align 8, !tbaa !21
  %80 = add nsw i32 %79, -1
  %81 = icmp slt i32 %.2172222, %80
  br i1 %81, label %.lr.ph219, label %._crit_edge220

.lr.ph219:                                        ; preds = %.preheader185
  %82 = load ptr, ptr %60, align 8, !tbaa !24
  br label %87

.loopexit182.loopexit:                            ; preds = %.lr.ph217, %middle.block
  %.pre343 = load i32, ptr %57, align 8, !tbaa !21
  br label %.loopexit182

.loopexit182:                                     ; preds = %.loopexit182.loopexit, %93
  %83 = phi i32 [ %.pre343, %.loopexit182.loopexit ], [ %88, %93 ]
  %84 = add nsw i32 %83, -1
  %85 = sext i32 %84 to i64
  %86 = icmp slt i64 %indvars.iv.next294, %85
  br i1 %86, label %87, label %._crit_edge220, !llvm.loop !25

87:                                               ; preds = %.lr.ph219, %.loopexit182
  %88 = phi i32 [ %79, %.lr.ph219 ], [ %83, %.loopexit182 ]
  %indvars.iv293 = phi i64 [ %76, %.lr.ph219 ], [ %indvars.iv.next294, %.loopexit182 ]
  %indvars.iv.next294 = add nsw i64 %indvars.iv293, 1
  %89 = getelementptr inbounds %struct._Fact, ptr %82, i64 %indvars.iv.next294
  %90 = load i32, ptr %89, align 4, !tbaa !17
  %91 = getelementptr inbounds %struct._Fact, ptr %82, i64 %indvars.iv293
  store i32 %90, ptr %91, align 4, !tbaa !17
  %92 = icmp slt i32 %90, 0
  br i1 %92, label %.lr.ph217.preheader, label %93

93:                                               ; preds = %87
  %94 = zext nneg i32 %90 to i64
  %95 = getelementptr inbounds [50 x i32], ptr @garity, i64 0, i64 %94
  %96 = load i32, ptr %95, align 4, !tbaa !5
  %97 = icmp sgt i32 %96, 0
  br i1 %97, label %.lr.ph217.preheader, label %.loopexit182

.lr.ph217.preheader:                              ; preds = %87, %93
  %98 = phi i32 [ %96, %93 ], [ 2, %87 ]
  %wide.trip.count = zext nneg i32 %98 to i64
  %min.iters.check = icmp ult i32 %98, 8
  br i1 %min.iters.check, label %.lr.ph217.preheader376, label %vector.ph

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

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %99 = getelementptr inbounds %struct._Fact, ptr %82, i64 %indvars.iv.next294, i32 1, i64 %index
  %100 = getelementptr inbounds i8, ptr %99, i64 16
  %wide.load = load <4 x i32>, ptr %99, align 4, !tbaa !5
  %wide.load375 = load <4 x i32>, ptr %100, align 4, !tbaa !5
  %101 = getelementptr inbounds %struct._Fact, ptr %82, i64 %indvars.iv293, i32 1, i64 %index
  %102 = getelementptr inbounds i8, ptr %101, i64 16
  store <4 x i32> %wide.load, ptr %101, align 4, !tbaa !5
  store <4 x i32> %wide.load375, ptr %102, align 4, !tbaa !5
  %index.next = add nuw i64 %index, 8
  %103 = icmp eq i64 %index.next, %n.vec
  br i1 %103, label %middle.block, label %vector.body, !llvm.loop !26

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %n.vec, %wide.trip.count
  br i1 %cmp.n, label %.loopexit182.loopexit, label %.lr.ph217.preheader376

.lr.ph217.preheader376:                           ; preds = %middle.block, %.lr.ph217.preheader
  %indvars.iv290.ph = phi i64 [ 0, %.lr.ph217.preheader ], [ %n.vec, %middle.block ]
  br label %.lr.ph217

.lr.ph217:                                        ; preds = %.lr.ph217.preheader376, %.lr.ph217
  %indvars.iv290 = phi i64 [ %indvars.iv.next291, %.lr.ph217 ], [ %indvars.iv290.ph, %.lr.ph217.preheader376 ]
  %104 = getelementptr inbounds %struct._Fact, ptr %82, i64 %indvars.iv.next294, i32 1, i64 %indvars.iv290
  %105 = load i32, ptr %104, align 4, !tbaa !5
  %106 = getelementptr inbounds %struct._Fact, ptr %82, i64 %indvars.iv293, i32 1, i64 %indvars.iv290
  store i32 %105, ptr %106, align 4, !tbaa !5
  %indvars.iv.next291 = add nuw nsw i64 %indvars.iv290, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next291, %wide.trip.count
  br i1 %exitcond.not, label %.loopexit182.loopexit, label %.lr.ph217, !llvm.loop !29

._crit_edge220:                                   ; preds = %.loopexit182, %.preheader185
  %.lcssa199 = phi i32 [ %80, %.preheader185 ], [ %84, %.loopexit182 ]
  store i32 %.lcssa199, ptr %57, align 8, !tbaa !21
  br label %109

107:                                              ; preds = %73
  %108 = add nsw i32 %.2172222, 1
  %.pre344 = load i32, ptr %57, align 8, !tbaa !21
  br label %109

109:                                              ; preds = %107, %._crit_edge220
  %110 = phi i32 [ %.lcssa199, %._crit_edge220 ], [ %.pre344, %107 ]
  %.3173 = phi i32 [ %.2172222, %._crit_edge220 ], [ %108, %107 ]
  %111 = icmp slt i32 %.3173, %110
  br i1 %111, label %73, label %.loopexit191, !llvm.loop !30

.preheader194:                                    ; preds = %.outer, %._crit_edge239, %.preheader195
  %112 = getelementptr inbounds i8, ptr %.0269, i64 152
  %113 = load i32, ptr %112, align 8, !tbaa !31
  %114 = icmp sgt i32 %113, 1
  br i1 %114, label %.lr.ph253, label %.preheader193

.lr.ph253:                                        ; preds = %.preheader194
  %115 = getelementptr inbounds i8, ptr %.0269, i64 144
  br label %166

.preheader190:                                    ; preds = %.preheader190.lr.ph, %._crit_edge239
  %116 = load i32, ptr %6, align 8, !tbaa !11
  %117 = icmp sgt i32 %116, 0
  br i1 %117, label %.lr.ph229, label %._crit_edge230

.lr.ph229:                                        ; preds = %.preheader190, %123
  %indvars.iv299 = phi i64 [ %indvars.iv.next300, %123 ], [ 0, %.preheader190 ]
  %118 = load ptr, ptr %67, align 8, !tbaa !24
  %119 = getelementptr inbounds %struct._Fact, ptr %118, i64 %indvars.iv306
  %120 = load ptr, ptr %56, align 8, !tbaa !15
  %121 = getelementptr inbounds %struct._Fact, ptr %120, i64 %indvars.iv299
  %122 = tail call zeroext i8 @identical_fact(ptr noundef %119, ptr noundef %121)
  %.not178 = icmp eq i8 %122, 0
  %.pre345.pre = load i32, ptr %6, align 8, !tbaa !11
  br i1 %.not178, label %123, label %._crit_edge230.loopexit

123:                                              ; preds = %.lr.ph229
  %indvars.iv.next300 = add nuw nsw i64 %indvars.iv299, 1
  %124 = sext i32 %.pre345.pre to i64
  %125 = icmp slt i64 %indvars.iv.next300, %124
  br i1 %125, label %.lr.ph229, label %._crit_edge230.loopexit, !llvm.loop !32

._crit_edge230.loopexit:                          ; preds = %.lr.ph229, %123
  %.4174.lcssa.ph.in = phi i64 [ %indvars.iv.next300, %123 ], [ %indvars.iv299, %.lr.ph229 ]
  %.4174.lcssa.ph = trunc i64 %.4174.lcssa.ph.in to i32
  br label %._crit_edge230

._crit_edge230:                                   ; preds = %._crit_edge230.loopexit, %.preheader190
  %126 = phi i32 [ %116, %.preheader190 ], [ %.pre345.pre, %._crit_edge230.loopexit ]
  %.4174.lcssa = phi i32 [ 0, %.preheader190 ], [ %.4174.lcssa.ph, %._crit_edge230.loopexit ]
  %127 = icmp eq i32 %.4174.lcssa, %126
  br i1 %127, label %.outer, label %.preheader189

.preheader189:                                    ; preds = %._crit_edge230
  %128 = load i32, ptr %57, align 8, !tbaa !21
  %129 = add nsw i32 %128, -1
  %130 = sext i32 %129 to i64
  %131 = icmp slt i64 %indvars.iv306, %130
  br i1 %131, label %.lr.ph238, label %._crit_edge239

.lr.ph238:                                        ; preds = %.preheader189
  %132 = load ptr, ptr %67, align 8, !tbaa !24
  br label %140

.outer:                                           ; preds = %._crit_edge230
  %indvars.iv.next307 = add nuw nsw i64 %indvars.iv306, 1
  %133 = load i32, ptr %57, align 8, !tbaa !21
  %134 = sext i32 %133 to i64
  %135 = icmp slt i64 %indvars.iv.next307, %134
  br i1 %135, label %.preheader190.lr.ph, label %.preheader194, !llvm.loop !33

.preheader190.lr.ph:                              ; preds = %.preheader190.lr.ph.lr.ph, %.outer
  %indvars.iv306 = phi i64 [ 0, %.preheader190.lr.ph.lr.ph ], [ %indvars.iv.next307, %.outer ]
  br label %.preheader190

.loopexit184.loopexit:                            ; preds = %150
  %.pre346 = load i32, ptr %57, align 8, !tbaa !21
  br label %.loopexit184

.loopexit184:                                     ; preds = %.loopexit184.loopexit, %140
  %136 = phi i32 [ %.pre346, %.loopexit184.loopexit ], [ %141, %140 ]
  %137 = add nsw i32 %136, -1
  %138 = sext i32 %137 to i64
  %139 = icmp slt i64 %indvars.iv.next309, %138
  br i1 %139, label %140, label %._crit_edge239, !llvm.loop !34

140:                                              ; preds = %.lr.ph238, %.loopexit184
  %141 = phi i32 [ %128, %.lr.ph238 ], [ %136, %.loopexit184 ]
  %indvars.iv308 = phi i64 [ %indvars.iv306, %.lr.ph238 ], [ %indvars.iv.next309, %.loopexit184 ]
  %indvars.iv.next309 = add nuw nsw i64 %indvars.iv308, 1
  %142 = getelementptr inbounds %struct._Fact, ptr %132, i64 %indvars.iv.next309
  %143 = load i32, ptr %142, align 4, !tbaa !17
  %144 = getelementptr inbounds %struct._Fact, ptr %132, i64 %indvars.iv308
  store i32 %143, ptr %144, align 4, !tbaa !17
  %145 = sext i32 %143 to i64
  %146 = getelementptr inbounds [50 x i32], ptr @garity, i64 0, i64 %145
  %147 = load i32, ptr %146, align 4, !tbaa !5
  %148 = icmp sgt i32 %147, 0
  br i1 %148, label %.lr.ph236, label %.loopexit184

.lr.ph236:                                        ; preds = %140
  %149 = getelementptr inbounds i8, ptr %144, i64 4
  br label %150

150:                                              ; preds = %.lr.ph236, %150
  %indvars.iv302 = phi i64 [ 0, %.lr.ph236 ], [ %indvars.iv.next303, %150 ]
  %151 = getelementptr inbounds %struct._Fact, ptr %132, i64 %indvars.iv.next309, i32 1, i64 %indvars.iv302
  %152 = load i32, ptr %151, align 4, !tbaa !5
  %153 = getelementptr inbounds [5 x i32], ptr %149, i64 0, i64 %indvars.iv302
  store i32 %152, ptr %153, align 4, !tbaa !5
  %indvars.iv.next303 = add nuw nsw i64 %indvars.iv302, 1
  %154 = load i32, ptr %146, align 4, !tbaa !5
  %155 = sext i32 %154 to i64
  %156 = icmp slt i64 %indvars.iv.next303, %155
  br i1 %156, label %150, label %.loopexit184.loopexit, !llvm.loop !35

._crit_edge239:                                   ; preds = %.loopexit184, %.preheader189
  %.pre-phi = phi i64 [ %130, %.preheader189 ], [ %138, %.loopexit184 ]
  %.lcssa201 = phi i32 [ %129, %.preheader189 ], [ %137, %.loopexit184 ]
  store i32 %.lcssa201, ptr %57, align 8, !tbaa !21
  %157 = icmp slt i64 %indvars.iv306, %.pre-phi
  br i1 %157, label %.preheader190, label %.preheader194, !llvm.loop !33

.loopexit188:                                     ; preds = %204, %166
  %158 = phi i32 [ %167, %166 ], [ %205, %204 ]
  %159 = add nsw i32 %158, -1
  %160 = sext i32 %159 to i64
  %161 = icmp slt i64 %indvars.iv.next323, %160
  br i1 %161, label %166, label %.preheader193, !llvm.loop !36

.preheader193:                                    ; preds = %.loopexit188, %.preheader194
  %162 = getelementptr inbounds i8, ptr %.0269, i64 168
  %163 = load i32, ptr %162, align 8, !tbaa !37
  %164 = icmp sgt i32 %163, 1
  br i1 %164, label %.lr.ph265, label %._crit_edge266

.lr.ph265:                                        ; preds = %.preheader193
  %165 = getelementptr inbounds i8, ptr %.0269, i64 160
  br label %211

166:                                              ; preds = %.lr.ph253, %.loopexit188
  %167 = phi i32 [ %113, %.lr.ph253 ], [ %158, %.loopexit188 ]
  %indvars.iv322 = phi i64 [ 0, %.lr.ph253 ], [ %indvars.iv.next323, %.loopexit188 ]
  %indvars.iv.next323 = add nuw nsw i64 %indvars.iv322, 1
  %168 = sext i32 %167 to i64
  %169 = icmp slt i64 %indvars.iv.next323, %168
  br i1 %169, label %.lr.ph251, label %.loopexit188

.lr.ph251:                                        ; preds = %166
  %170 = trunc nuw nsw i64 %indvars.iv.next323 to i32
  br label %171

171:                                              ; preds = %.lr.ph251, %204
  %.6249 = phi i32 [ %170, %.lr.ph251 ], [ %.7, %204 ]
  %172 = load ptr, ptr %115, align 8, !tbaa !38
  %173 = getelementptr inbounds %struct._Fact, ptr %172, i64 %indvars.iv322
  %174 = sext i32 %.6249 to i64
  %175 = getelementptr inbounds %struct._Fact, ptr %172, i64 %174
  %176 = tail call zeroext i8 @identical_fact(ptr noundef %173, ptr noundef %175)
  %.not177 = icmp eq i8 %176, 0
  br i1 %.not177, label %202, label %.preheader183

.preheader183:                                    ; preds = %171
  %177 = load i32, ptr %112, align 8, !tbaa !31
  %178 = add nsw i32 %177, -1
  %179 = icmp slt i32 %.6249, %178
  br i1 %179, label %.lr.ph246, label %._crit_edge247

.lr.ph246:                                        ; preds = %.preheader183
  %180 = load ptr, ptr %115, align 8, !tbaa !38
  br label %185

.loopexit181.loopexit:                            ; preds = %195
  %.pre347 = load i32, ptr %112, align 8, !tbaa !31
  br label %.loopexit181

.loopexit181:                                     ; preds = %.loopexit181.loopexit, %185
  %181 = phi i32 [ %.pre347, %.loopexit181.loopexit ], [ %186, %185 ]
  %182 = add nsw i32 %181, -1
  %183 = sext i32 %182 to i64
  %184 = icmp slt i64 %indvars.iv.next319, %183
  br i1 %184, label %185, label %._crit_edge247, !llvm.loop !39

185:                                              ; preds = %.lr.ph246, %.loopexit181
  %186 = phi i32 [ %177, %.lr.ph246 ], [ %181, %.loopexit181 ]
  %indvars.iv318 = phi i64 [ %174, %.lr.ph246 ], [ %indvars.iv.next319, %.loopexit181 ]
  %indvars.iv.next319 = add nsw i64 %indvars.iv318, 1
  %187 = getelementptr inbounds %struct._Fact, ptr %180, i64 %indvars.iv.next319
  %188 = load i32, ptr %187, align 4, !tbaa !17
  %189 = getelementptr inbounds %struct._Fact, ptr %180, i64 %indvars.iv318
  store i32 %188, ptr %189, align 4, !tbaa !17
  %190 = sext i32 %188 to i64
  %191 = getelementptr inbounds [50 x i32], ptr @garity, i64 0, i64 %190
  %192 = load i32, ptr %191, align 4, !tbaa !5
  %193 = icmp sgt i32 %192, 0
  br i1 %193, label %.lr.ph244, label %.loopexit181

.lr.ph244:                                        ; preds = %185
  %194 = getelementptr inbounds i8, ptr %189, i64 4
  br label %195

195:                                              ; preds = %.lr.ph244, %195
  %indvars.iv314 = phi i64 [ 0, %.lr.ph244 ], [ %indvars.iv.next315, %195 ]
  %196 = getelementptr inbounds %struct._Fact, ptr %180, i64 %indvars.iv.next319, i32 1, i64 %indvars.iv314
  %197 = load i32, ptr %196, align 4, !tbaa !5
  %198 = getelementptr inbounds [5 x i32], ptr %194, i64 0, i64 %indvars.iv314
  store i32 %197, ptr %198, align 4, !tbaa !5
  %indvars.iv.next315 = add nuw nsw i64 %indvars.iv314, 1
  %199 = load i32, ptr %191, align 4, !tbaa !5
  %200 = sext i32 %199 to i64
  %201 = icmp slt i64 %indvars.iv.next315, %200
  br i1 %201, label %195, label %.loopexit181.loopexit, !llvm.loop !40

._crit_edge247:                                   ; preds = %.loopexit181, %.preheader183
  %.lcssa202 = phi i32 [ %178, %.preheader183 ], [ %182, %.loopexit181 ]
  store i32 %.lcssa202, ptr %112, align 8, !tbaa !31
  br label %204

202:                                              ; preds = %171
  %203 = add nsw i32 %.6249, 1
  %.pre348 = load i32, ptr %112, align 8, !tbaa !31
  br label %204

204:                                              ; preds = %202, %._crit_edge247
  %205 = phi i32 [ %.lcssa202, %._crit_edge247 ], [ %.pre348, %202 ]
  %.7 = phi i32 [ %.6249, %._crit_edge247 ], [ %203, %202 ]
  %206 = icmp slt i32 %.7, %205
  br i1 %206, label %171, label %.loopexit188, !llvm.loop !41

.loopexit187:                                     ; preds = %249, %211
  %207 = phi i32 [ %212, %211 ], [ %250, %249 ]
  %208 = add nsw i32 %207, -1
  %209 = sext i32 %208 to i64
  %210 = icmp slt i64 %indvars.iv.next335, %209
  br i1 %210, label %211, label %._crit_edge266, !llvm.loop !42

211:                                              ; preds = %.lr.ph265, %.loopexit187
  %212 = phi i32 [ %163, %.lr.ph265 ], [ %207, %.loopexit187 ]
  %indvars.iv334 = phi i64 [ 0, %.lr.ph265 ], [ %indvars.iv.next335, %.loopexit187 ]
  %indvars.iv.next335 = add nuw nsw i64 %indvars.iv334, 1
  %213 = sext i32 %212 to i64
  %214 = icmp slt i64 %indvars.iv.next335, %213
  br i1 %214, label %.lr.ph263, label %.loopexit187

.lr.ph263:                                        ; preds = %211
  %215 = trunc nuw nsw i64 %indvars.iv.next335 to i32
  br label %216

216:                                              ; preds = %.lr.ph263, %249
  %.8261 = phi i32 [ %215, %.lr.ph263 ], [ %.9, %249 ]
  %217 = load ptr, ptr %165, align 8, !tbaa !43
  %218 = getelementptr inbounds %struct._Fact, ptr %217, i64 %indvars.iv334
  %219 = sext i32 %.8261 to i64
  %220 = getelementptr inbounds %struct._Fact, ptr %217, i64 %219
  %221 = tail call zeroext i8 @identical_fact(ptr noundef %218, ptr noundef %220)
  %.not176 = icmp eq i8 %221, 0
  br i1 %.not176, label %247, label %.preheader

.preheader:                                       ; preds = %216
  %222 = load i32, ptr %162, align 8, !tbaa !37
  %223 = add nsw i32 %222, -1
  %224 = icmp slt i32 %.8261, %223
  br i1 %224, label %.lr.ph258, label %._crit_edge259

.lr.ph258:                                        ; preds = %.preheader
  %225 = load ptr, ptr %165, align 8, !tbaa !43
  br label %230

.loopexit.loopexit:                               ; preds = %240
  %.pre349 = load i32, ptr %162, align 8, !tbaa !37
  br label %.loopexit

.loopexit:                                        ; preds = %.loopexit.loopexit, %230
  %226 = phi i32 [ %.pre349, %.loopexit.loopexit ], [ %231, %230 ]
  %227 = add nsw i32 %226, -1
  %228 = sext i32 %227 to i64
  %229 = icmp slt i64 %indvars.iv.next331, %228
  br i1 %229, label %230, label %._crit_edge259, !llvm.loop !44

230:                                              ; preds = %.lr.ph258, %.loopexit
  %231 = phi i32 [ %222, %.lr.ph258 ], [ %226, %.loopexit ]
  %indvars.iv330 = phi i64 [ %219, %.lr.ph258 ], [ %indvars.iv.next331, %.loopexit ]
  %indvars.iv.next331 = add nsw i64 %indvars.iv330, 1
  %232 = getelementptr inbounds %struct._Fact, ptr %225, i64 %indvars.iv.next331
  %233 = load i32, ptr %232, align 4, !tbaa !17
  %234 = getelementptr inbounds %struct._Fact, ptr %225, i64 %indvars.iv330
  store i32 %233, ptr %234, align 4, !tbaa !17
  %235 = sext i32 %233 to i64
  %236 = getelementptr inbounds [50 x i32], ptr @garity, i64 0, i64 %235
  %237 = load i32, ptr %236, align 4, !tbaa !5
  %238 = icmp sgt i32 %237, 0
  br i1 %238, label %.lr.ph256, label %.loopexit

.lr.ph256:                                        ; preds = %230
  %239 = getelementptr inbounds i8, ptr %234, i64 4
  br label %240

240:                                              ; preds = %.lr.ph256, %240
  %indvars.iv326 = phi i64 [ 0, %.lr.ph256 ], [ %indvars.iv.next327, %240 ]
  %241 = getelementptr inbounds %struct._Fact, ptr %225, i64 %indvars.iv.next331, i32 1, i64 %indvars.iv326
  %242 = load i32, ptr %241, align 4, !tbaa !5
  %243 = getelementptr inbounds [5 x i32], ptr %239, i64 0, i64 %indvars.iv326
  store i32 %242, ptr %243, align 4, !tbaa !5
  %indvars.iv.next327 = add nuw nsw i64 %indvars.iv326, 1
  %244 = load i32, ptr %236, align 4, !tbaa !5
  %245 = sext i32 %244 to i64
  %246 = icmp slt i64 %indvars.iv.next327, %245
  br i1 %246, label %240, label %.loopexit.loopexit, !llvm.loop !45

._crit_edge259:                                   ; preds = %.loopexit, %.preheader
  %.lcssa203 = phi i32 [ %223, %.preheader ], [ %227, %.loopexit ]
  store i32 %.lcssa203, ptr %162, align 8, !tbaa !37
  br label %249

247:                                              ; preds = %216
  %248 = add nsw i32 %.8261, 1
  %.pre350 = load i32, ptr %162, align 8, !tbaa !37
  br label %249

249:                                              ; preds = %247, %._crit_edge259
  %250 = phi i32 [ %.lcssa203, %._crit_edge259 ], [ %.pre350, %247 ]
  %.9 = phi i32 [ %.8261, %._crit_edge259 ], [ %248, %247 ]
  %251 = icmp slt i32 %.9, %250
  br i1 %251, label %216, label %.loopexit187, !llvm.loop !46

._crit_edge266:                                   ; preds = %.loopexit187, %.preheader193
  %252 = getelementptr inbounds i8, ptr %.0269, i64 248
  %.0 = load ptr, ptr %252, align 8, !tbaa !9
  %.not = icmp eq ptr %.0, null
  br i1 %.not, label %._crit_edge271, label %.preheader196, !llvm.loop !47

._crit_edge271:                                   ; preds = %._crit_edge266, %._crit_edge213
  %indvars.iv.next339 = add nuw nsw i64 %indvars.iv338, 1
  %253 = load i32, ptr @gnum_easy_operators, align 4, !tbaa !5
  %254 = sext i32 %253 to i64
  %255 = icmp slt i64 %indvars.iv.next339, %254
  br i1 %255, label %.lr.ph274, label %._crit_edge275, !llvm.loop !48

._crit_edge275:                                   ; preds = %._crit_edge271, %0
  ret void
}

; Function Attrs: nounwind uwtable
declare dso_local void @handle_empty_easy_parameters() local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare dso_local zeroext i8 @identical_fact(ptr noundef, ptr noundef) local_unnamed_addr #0

attributes #0 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }

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

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


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