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

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

@.str.14 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.29 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.31 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.40 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.64 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.65 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.72 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.73 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.74 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.75 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.76 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.83 = external hidden unnamed_addr constant [46 x i8], align 1
@.str.84 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.85 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.86 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.88 = external hidden unnamed_addr constant [19 x i8], align 1
@gconstants = external global [2000 x ptr], align 16
@.str.89 = external hidden unnamed_addr constant [47 x i8], align 1
@.str.91 = external hidden unnamed_addr constant [50 x i8], align 1
@.str.92 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.93 = external hidden unnamed_addr constant [14 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: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #0

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

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

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

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

; Function Attrs: nounwind uwtable
declare dso_local void @print_type(i32 noundef) #3

; Function Attrs: nounwind uwtable
define dso_local void @print_PseudoAction(ptr noundef %0) #3 {
  %2 = alloca ptr, align 8
  %3 = alloca ptr, align 8
  %4 = alloca i32, align 4
  %5 = alloca i32, align 4
  store ptr %0, ptr %2, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %3) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %4) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %5) #4
  %6 = load ptr, ptr %2, align 8, !tbaa !5
  %7 = getelementptr inbounds %struct._PseudoAction, ptr %6, i32 0, i32 0
  %8 = load ptr, ptr %7, align 8, !tbaa !9
  %9 = getelementptr inbounds %struct._Operator, ptr %8, i32 0, i32 0
  %10 = load ptr, ptr %9, align 8, !tbaa !12
  %11 = call i32 (ptr, ...) @printf(ptr noundef @.str.91, ptr noundef %10)
  store i32 0, ptr %4, align 4, !tbaa !14
  br label %12

12:                                               ; preds = %40, %1
  %13 = load i32, ptr %4, align 4, !tbaa !14
  %14 = load ptr, ptr %2, align 8, !tbaa !5
  %15 = getelementptr inbounds %struct._PseudoAction, ptr %14, i32 0, i32 0
  %16 = load ptr, ptr %15, align 8, !tbaa !9
  %17 = getelementptr inbounds %struct._Operator, ptr %16, i32 0, i32 4
  %18 = load i32, ptr %17, align 8, !tbaa !15
  %19 = icmp slt i32 %13, %18
  br i1 %19, label %20, label %43

20:                                               ; preds = %12
  %21 = load i32, ptr %4, align 4, !tbaa !14
  %22 = load ptr, ptr %2, align 8, !tbaa !5
  %23 = getelementptr inbounds %struct._PseudoAction, ptr %22, i32 0, i32 1
  %24 = load i32, ptr %4, align 4, !tbaa !14
  %25 = sext i32 %24 to i64
  %26 = getelementptr inbounds [15 x i32], ptr %23, i64 0, i64 %25
  %27 = load i32, ptr %26, align 4, !tbaa !14
  %28 = sext i32 %27 to i64
  %29 = getelementptr inbounds [2000 x ptr], ptr @gconstants, i64 0, i64 %28
  %30 = load ptr, ptr %29, align 8, !tbaa !5
  %31 = call i32 (ptr, ...) @printf(ptr noundef @.str.88, i32 noundef %21, ptr noundef %30)
  %32 = load ptr, ptr %2, align 8, !tbaa !5
  %33 = getelementptr inbounds %struct._PseudoAction, ptr %32, i32 0, i32 0
  %34 = load ptr, ptr %33, align 8, !tbaa !9
  %35 = getelementptr inbounds %struct._Operator, ptr %34, i32 0, i32 5
  %36 = load i32, ptr %4, align 4, !tbaa !14
  %37 = sext i32 %36 to i64
  %38 = getelementptr inbounds [15 x i32], ptr %35, i64 0, i64 %37
  %39 = load i32, ptr %38, align 4, !tbaa !14
  call void @print_type(i32 noundef %39)
  br label %40

40:                                               ; preds = %20
  %41 = load i32, ptr %4, align 4, !tbaa !14
  %42 = add nsw i32 %41, 1
  store i32 %42, ptr %4, align 4, !tbaa !14
  br label %12, !llvm.loop !16

43:                                               ; preds = %12
  %44 = call i32 (ptr, ...) @printf(ptr noundef @.str.64)
  store i32 0, ptr %4, align 4, !tbaa !14
  br label %45

45:                                               ; preds = %59, %43
  %46 = load i32, ptr %4, align 4, !tbaa !14
  %47 = load ptr, ptr %2, align 8, !tbaa !5
  %48 = getelementptr inbounds %struct._PseudoAction, ptr %47, i32 0, i32 3
  %49 = load i32, ptr %48, align 8, !tbaa !18
  %50 = icmp slt i32 %46, %49
  br i1 %50, label %51, label %62

51:                                               ; preds = %45
  %52 = load ptr, ptr %2, align 8, !tbaa !5
  %53 = getelementptr inbounds %struct._PseudoAction, ptr %52, i32 0, i32 2
  %54 = load ptr, ptr %53, align 8, !tbaa !19
  %55 = load i32, ptr %4, align 4, !tbaa !14
  %56 = sext i32 %55 to i64
  %57 = getelementptr inbounds %struct._Fact, ptr %54, i64 %56
  call void @print_Fact(ptr noundef %57)
  %58 = call i32 (ptr, ...) @printf(ptr noundef @.str.40)
  br label %59

59:                                               ; preds = %51
  %60 = load i32, ptr %4, align 4, !tbaa !14
  %61 = add nsw i32 %60, 1
  store i32 %61, ptr %4, align 4, !tbaa !14
  br label %45, !llvm.loop !20

62:                                               ; preds = %45
  store i32 0, ptr %4, align 4, !tbaa !14
  br label %63

63:                                               ; preds = %112, %62
  %64 = load i32, ptr %4, align 4, !tbaa !14
  %65 = load ptr, ptr %2, align 8, !tbaa !5
  %66 = getelementptr inbounds %struct._PseudoAction, ptr %65, i32 0, i32 7
  %67 = load i32, ptr %66, align 8, !tbaa !21
  %68 = icmp slt i32 %64, %67
  br i1 %68, label %69, label %115

69:                                               ; preds = %63
  %70 = load ptr, ptr %2, align 8, !tbaa !5
  %71 = getelementptr inbounds %struct._PseudoAction, ptr %70, i32 0, i32 4
  %72 = load ptr, ptr %71, align 8, !tbaa !22
  %73 = load i32, ptr %4, align 4, !tbaa !14
  %74 = sext i32 %73 to i64
  %75 = getelementptr inbounds i32, ptr %72, i64 %74
  %76 = load i32, ptr %75, align 4, !tbaa !14
  switch i32 %76, label %87 [
    i32 3001, label %77
    i32 3002, label %79
    i32 3003, label %81
    i32 3004, label %83
    i32 3005, label %85
  ]

77:                                               ; preds = %69
  %78 = call i32 (ptr, ...) @printf(ptr noundef @.str.27)
  br label %96

79:                                               ; preds = %69
  %80 = call i32 (ptr, ...) @printf(ptr noundef @.str.28)
  br label %96

81:                                               ; preds = %69
  %82 = call i32 (ptr, ...) @printf(ptr noundef @.str.29)
  br label %96

83:                                               ; preds = %69
  %84 = call i32 (ptr, ...) @printf(ptr noundef @.str.30)
  br label %96

85:                                               ; preds = %69
  %86 = call i32 (ptr, ...) @printf(ptr noundef @.str.31)
  br label %96

87:                                               ; preds = %69
  %88 = load ptr, ptr %2, align 8, !tbaa !5
  %89 = getelementptr inbounds %struct._PseudoAction, ptr %88, i32 0, i32 4
  %90 = load ptr, ptr %89, align 8, !tbaa !22
  %91 = load i32, ptr %4, align 4, !tbaa !14
  %92 = sext i32 %91 to i64
  %93 = getelementptr inbounds i32, ptr %90, i64 %92
  %94 = load i32, ptr %93, align 4, !tbaa !14
  %95 = call i32 (ptr, ...) @printf(ptr noundef @.str.89, i32 noundef %94)
  call void @exit(i32 noundef 1) #5
  unreachable

96:                                               ; preds = %85, %83, %81, %79, %77
  %97 = load ptr, ptr %2, align 8, !tbaa !5
  %98 = getelementptr inbounds %struct._PseudoAction, ptr %97, i32 0, i32 5
  %99 = load ptr, ptr %98, align 8, !tbaa !23
  %100 = load i32, ptr %4, align 4, !tbaa !14
  %101 = sext i32 %100 to i64
  %102 = getelementptr inbounds ptr, ptr %99, i64 %101
  %103 = load ptr, ptr %102, align 8, !tbaa !5
  call void @print_ExpNode(ptr noundef %103)
  %104 = load ptr, ptr %2, align 8, !tbaa !5
  %105 = getelementptr inbounds %struct._PseudoAction, ptr %104, i32 0, i32 6
  %106 = load ptr, ptr %105, align 8, !tbaa !24
  %107 = load i32, ptr %4, align 4, !tbaa !14
  %108 = sext i32 %107 to i64
  %109 = getelementptr inbounds ptr, ptr %106, i64 %108
  %110 = load ptr, ptr %109, align 8, !tbaa !5
  call void @print_ExpNode(ptr noundef %110)
  %111 = call i32 (ptr, ...) @printf(ptr noundef @.str.14)
  br label %112

112:                                              ; preds = %96
  %113 = load i32, ptr %4, align 4, !tbaa !14
  %114 = add nsw i32 %113, 1
  store i32 %114, ptr %4, align 4, !tbaa !14
  br label %63, !llvm.loop !25

115:                                              ; preds = %63
  store i32 0, ptr %5, align 4, !tbaa !14
  %116 = call i32 (ptr, ...) @printf(ptr noundef @.str.65)
  %117 = load ptr, ptr %2, align 8, !tbaa !5
  %118 = getelementptr inbounds %struct._PseudoAction, ptr %117, i32 0, i32 8
  %119 = load ptr, ptr %118, align 8, !tbaa !26
  store ptr %119, ptr %3, align 8, !tbaa !5
  br label %120

120:                                              ; preds = %288, %115
  %121 = load ptr, ptr %3, align 8, !tbaa !5
  %122 = icmp ne ptr %121, null
  br i1 %122, label %123, label %292

123:                                              ; preds = %120
  %124 = load i32, ptr %5, align 4, !tbaa !14
  %125 = add nsw i32 %124, 1
  store i32 %125, ptr %5, align 4, !tbaa !14
  %126 = call i32 (ptr, ...) @printf(ptr noundef @.str.92, i32 noundef %124)
  %127 = call i32 (ptr, ...) @printf(ptr noundef @.str.93)
  store i32 0, ptr %4, align 4, !tbaa !14
  br label %128

128:                                              ; preds = %142, %123
  %129 = load i32, ptr %4, align 4, !tbaa !14
  %130 = load ptr, ptr %3, align 8, !tbaa !5
  %131 = getelementptr inbounds %struct._PseudoActionEffect, ptr %130, i32 0, i32 1
  %132 = load i32, ptr %131, align 8, !tbaa !27
  %133 = icmp slt i32 %129, %132
  br i1 %133, label %134, label %145

134:                                              ; preds = %128
  %135 = load ptr, ptr %3, align 8, !tbaa !5
  %136 = getelementptr inbounds %struct._PseudoActionEffect, ptr %135, i32 0, i32 0
  %137 = load ptr, ptr %136, align 8, !tbaa !29
  %138 = load i32, ptr %4, align 4, !tbaa !14
  %139 = sext i32 %138 to i64
  %140 = getelementptr inbounds %struct._Fact, ptr %137, i64 %139
  call void @print_Fact(ptr noundef %140)
  %141 = call i32 (ptr, ...) @printf(ptr noundef @.str.40)
  br label %142

142:                                              ; preds = %134
  %143 = load i32, ptr %4, align 4, !tbaa !14
  %144 = add nsw i32 %143, 1
  store i32 %144, ptr %4, align 4, !tbaa !14
  br label %128, !llvm.loop !30

145:                                              ; preds = %128
  store i32 0, ptr %4, align 4, !tbaa !14
  br label %146

146:                                              ; preds = %195, %145
  %147 = load i32, ptr %4, align 4, !tbaa !14
  %148 = load ptr, ptr %3, align 8, !tbaa !5
  %149 = getelementptr inbounds %struct._PseudoActionEffect, ptr %148, i32 0, i32 9
  %150 = load i32, ptr %149, align 8, !tbaa !31
  %151 = icmp slt i32 %147, %150
  br i1 %151, label %152, label %198

152:                                              ; preds = %146
  %153 = load ptr, ptr %3, align 8, !tbaa !5
  %154 = getelementptr inbounds %struct._PseudoActionEffect, ptr %153, i32 0, i32 6
  %155 = load ptr, ptr %154, align 8, !tbaa !32
  %156 = load i32, ptr %4, align 4, !tbaa !14
  %157 = sext i32 %156 to i64
  %158 = getelementptr inbounds i32, ptr %155, i64 %157
  %159 = load i32, ptr %158, align 4, !tbaa !14
  switch i32 %159, label %170 [
    i32 3001, label %160
    i32 3002, label %162
    i32 3003, label %164
    i32 3004, label %166
    i32 3005, label %168
  ]

160:                                              ; preds = %152
  %161 = call i32 (ptr, ...) @printf(ptr noundef @.str.27)
  br label %179

162:                                              ; preds = %152
  %163 = call i32 (ptr, ...) @printf(ptr noundef @.str.28)
  br label %179

164:                                              ; preds = %152
  %165 = call i32 (ptr, ...) @printf(ptr noundef @.str.29)
  br label %179

166:                                              ; preds = %152
  %167 = call i32 (ptr, ...) @printf(ptr noundef @.str.30)
  br label %179

168:                                              ; preds = %152
  %169 = call i32 (ptr, ...) @printf(ptr noundef @.str.31)
  br label %179

170:                                              ; preds = %152
  %171 = load ptr, ptr %3, align 8, !tbaa !5
  %172 = getelementptr inbounds %struct._PseudoActionEffect, ptr %171, i32 0, i32 6
  %173 = load ptr, ptr %172, align 8, !tbaa !32
  %174 = load i32, ptr %4, align 4, !tbaa !14
  %175 = sext i32 %174 to i64
  %176 = getelementptr inbounds i32, ptr %173, i64 %175
  %177 = load i32, ptr %176, align 4, !tbaa !14
  %178 = call i32 (ptr, ...) @printf(ptr noundef @.str.83, i32 noundef %177)
  call void @exit(i32 noundef 1) #5
  unreachable

179:                                              ; preds = %168, %166, %164, %162, %160
  %180 = load ptr, ptr %3, align 8, !tbaa !5
  %181 = getelementptr inbounds %struct._PseudoActionEffect, ptr %180, i32 0, i32 7
  %182 = load ptr, ptr %181, align 8, !tbaa !33
  %183 = load i32, ptr %4, align 4, !tbaa !14
  %184 = sext i32 %183 to i64
  %185 = getelementptr inbounds ptr, ptr %182, i64 %184
  %186 = load ptr, ptr %185, align 8, !tbaa !5
  call void @print_ExpNode(ptr noundef %186)
  %187 = load ptr, ptr %3, align 8, !tbaa !5
  %188 = getelementptr inbounds %struct._PseudoActionEffect, ptr %187, i32 0, i32 8
  %189 = load ptr, ptr %188, align 8, !tbaa !34
  %190 = load i32, ptr %4, align 4, !tbaa !14
  %191 = sext i32 %190 to i64
  %192 = getelementptr inbounds ptr, ptr %189, i64 %191
  %193 = load ptr, ptr %192, align 8, !tbaa !5
  call void @print_ExpNode(ptr noundef %193)
  %194 = call i32 (ptr, ...) @printf(ptr noundef @.str.14)
  br label %195

195:                                              ; preds = %179
  %196 = load i32, ptr %4, align 4, !tbaa !14
  %197 = add nsw i32 %196, 1
  store i32 %197, ptr %4, align 4, !tbaa !14
  br label %146, !llvm.loop !35

198:                                              ; preds = %146
  %199 = call i32 (ptr, ...) @printf(ptr noundef @.str.84)
  store i32 0, ptr %4, align 4, !tbaa !14
  br label %200

200:                                              ; preds = %214, %198
  %201 = load i32, ptr %4, align 4, !tbaa !14
  %202 = load ptr, ptr %3, align 8, !tbaa !5
  %203 = getelementptr inbounds %struct._PseudoActionEffect, ptr %202, i32 0, i32 3
  %204 = load i32, ptr %203, align 8, !tbaa !36
  %205 = icmp slt i32 %201, %204
  br i1 %205, label %206, label %217

206:                                              ; preds = %200
  %207 = load ptr, ptr %3, align 8, !tbaa !5
  %208 = getelementptr inbounds %struct._PseudoActionEffect, ptr %207, i32 0, i32 2
  %209 = load ptr, ptr %208, align 8, !tbaa !37
  %210 = load i32, ptr %4, align 4, !tbaa !14
  %211 = sext i32 %210 to i64
  %212 = getelementptr inbounds %struct._Fact, ptr %209, i64 %211
  call void @print_Fact(ptr noundef %212)
  %213 = call i32 (ptr, ...) @printf(ptr noundef @.str.40)
  br label %214

214:                                              ; preds = %206
  %215 = load i32, ptr %4, align 4, !tbaa !14
  %216 = add nsw i32 %215, 1
  store i32 %216, ptr %4, align 4, !tbaa !14
  br label %200, !llvm.loop !38

217:                                              ; preds = %200
  %218 = call i32 (ptr, ...) @printf(ptr noundef @.str.85)
  store i32 0, ptr %4, align 4, !tbaa !14
  br label %219

219:                                              ; preds = %233, %217
  %220 = load i32, ptr %4, align 4, !tbaa !14
  %221 = load ptr, ptr %3, align 8, !tbaa !5
  %222 = getelementptr inbounds %struct._PseudoActionEffect, ptr %221, i32 0, i32 5
  %223 = load i32, ptr %222, align 8, !tbaa !39
  %224 = icmp slt i32 %220, %223
  br i1 %224, label %225, label %236

225:                                              ; preds = %219
  %226 = load ptr, ptr %3, align 8, !tbaa !5
  %227 = getelementptr inbounds %struct._PseudoActionEffect, ptr %226, i32 0, i32 4
  %228 = load ptr, ptr %227, align 8, !tbaa !40
  %229 = load i32, ptr %4, align 4, !tbaa !14
  %230 = sext i32 %229 to i64
  %231 = getelementptr inbounds %struct._Fact, ptr %228, i64 %230
  call void @print_Fact(ptr noundef %231)
  %232 = call i32 (ptr, ...) @printf(ptr noundef @.str.40)
  br label %233

233:                                              ; preds = %225
  %234 = load i32, ptr %4, align 4, !tbaa !14
  %235 = add nsw i32 %234, 1
  store i32 %235, ptr %4, align 4, !tbaa !14
  br label %219, !llvm.loop !41

236:                                              ; preds = %219
  store i32 0, ptr %4, align 4, !tbaa !14
  br label %237

237:                                              ; preds = %284, %236
  %238 = load i32, ptr %4, align 4, !tbaa !14
  %239 = load ptr, ptr %3, align 8, !tbaa !5
  %240 = getelementptr inbounds %struct._PseudoActionEffect, ptr %239, i32 0, i32 13
  %241 = load i32, ptr %240, align 8, !tbaa !42
  %242 = icmp slt i32 %238, %241
  br i1 %242, label %243, label %287

243:                                              ; preds = %237
  %244 = load ptr, ptr %3, align 8, !tbaa !5
  %245 = getelementptr inbounds %struct._PseudoActionEffect, ptr %244, i32 0, i32 10
  %246 = load ptr, ptr %245, align 8, !tbaa !43
  %247 = load i32, ptr %4, align 4, !tbaa !14
  %248 = sext i32 %247 to i64
  %249 = getelementptr inbounds i32, ptr %246, i64 %248
  %250 = load i32, ptr %249, align 4, !tbaa !14
  switch i32 %250, label %261 [
    i32 4000, label %251
    i32 4001, label %253
    i32 4002, label %255
    i32 4003, label %257
    i32 4004, label %259
  ]

251:                                              ; preds = %243
  %252 = call i32 (ptr, ...) @printf(ptr noundef @.str.72)
  br label %270

253:                                              ; preds = %243
  %254 = call i32 (ptr, ...) @printf(ptr noundef @.str.73)
  br label %270

255:                                              ; preds = %243
  %256 = call i32 (ptr, ...) @printf(ptr noundef @.str.74)
  br label %270

257:                                              ; preds = %243
  %258 = call i32 (ptr, ...) @printf(ptr noundef @.str.75)
  br label %270

259:                                              ; preds = %243
  %260 = call i32 (ptr, ...) @printf(ptr noundef @.str.76)
  br label %270

261:                                              ; preds = %243
  %262 = load ptr, ptr %3, align 8, !tbaa !5
  %263 = getelementptr inbounds %struct._PseudoActionEffect, ptr %262, i32 0, i32 10
  %264 = load ptr, ptr %263, align 8, !tbaa !43
  %265 = load i32, ptr %4, align 4, !tbaa !14
  %266 = sext i32 %265 to i64
  %267 = getelementptr inbounds i32, ptr %264, i64 %266
  %268 = load i32, ptr %267, align 4, !tbaa !14
  %269 = call i32 (ptr, ...) @printf(ptr noundef @.str.86, i32 noundef %268)
  call void @exit(i32 noundef 1) #5
  unreachable

270:                                              ; preds = %259, %257, %255, %253, %251
  %271 = load ptr, ptr %3, align 8, !tbaa !5
  %272 = getelementptr inbounds %struct._PseudoActionEffect, ptr %271, i32 0, i32 11
  %273 = load ptr, ptr %272, align 8, !tbaa !44
  %274 = load i32, ptr %4, align 4, !tbaa !14
  %275 = sext i32 %274 to i64
  %276 = getelementptr inbounds %struct._Fluent, ptr %273, i64 %275
  call void @print_Fluent(ptr noundef %276)
  %277 = load ptr, ptr %3, align 8, !tbaa !5
  %278 = getelementptr inbounds %struct._PseudoActionEffect, ptr %277, i32 0, i32 12
  %279 = load ptr, ptr %278, align 8, !tbaa !45
  %280 = load i32, ptr %4, align 4, !tbaa !14
  %281 = sext i32 %280 to i64
  %282 = getelementptr inbounds ptr, ptr %279, i64 %281
  %283 = load ptr, ptr %282, align 8, !tbaa !5
  call void @print_ExpNode(ptr noundef %283)
  br label %284

284:                                              ; preds = %270
  %285 = load i32, ptr %4, align 4, !tbaa !14
  %286 = add nsw i32 %285, 1
  store i32 %286, ptr %4, align 4, !tbaa !14
  br label %237, !llvm.loop !46

287:                                              ; preds = %237
  br label %288

288:                                              ; preds = %287
  %289 = load ptr, ptr %3, align 8, !tbaa !5
  %290 = getelementptr inbounds %struct._PseudoActionEffect, ptr %289, i32 0, i32 14
  %291 = load ptr, ptr %290, align 8, !tbaa !47
  store ptr %291, ptr %3, align 8, !tbaa !5
  br label %120, !llvm.loop !48

292:                                              ; preds = %120
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %4) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %3) #4
  ret void
}

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

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

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

@.str.14 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.29 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.31 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.40 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.64 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.65 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.72 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.73 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.74 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.75 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.76 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.83 = external hidden unnamed_addr constant [46 x i8], align 1
@.str.84 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.85 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.86 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.88 = external hidden unnamed_addr constant [19 x i8], align 1
@gconstants = external local_unnamed_addr global [2000 x ptr], align 16
@.str.89 = external hidden unnamed_addr constant [47 x i8], align 1
@.str.91 = external hidden unnamed_addr constant [50 x i8], align 1
@.str.92 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.93 = external hidden unnamed_addr constant [14 x i8], align 1
@switch.table.print_PseudoAction.1 = private unnamed_addr constant [5 x ptr] [ptr @.str.27, ptr @.str.28, ptr @.str.29, ptr @.str.30, ptr @.str.31], align 8
@switch.table.print_PseudoAction.2 = private unnamed_addr constant [5 x ptr] [ptr @.str.72, ptr @.str.73, ptr @.str.74, ptr @.str.75, ptr @.str.76], align 8

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

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

; Function Attrs: nounwind uwtable
declare dso_local void @print_ExpNode(ptr noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare dso_local void @print_Fluent(ptr noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare dso_local void @print_Fact(ptr noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare dso_local void @print_type(i32 noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
define dso_local void @print_PseudoAction(ptr nocapture noundef readonly %0) local_unnamed_addr #2 {
  %2 = load ptr, ptr %0, align 8, !tbaa !5
  %3 = load ptr, ptr %2, align 8, !tbaa !11
  %4 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.91, ptr noundef %3)
  %5 = load ptr, ptr %0, align 8, !tbaa !5
  %6 = getelementptr inbounds i8, ptr %5, i64 136
  %7 = load i32, ptr %6, align 8, !tbaa !13
  %8 = icmp sgt i32 %7, 0
  br i1 %8, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %1
  %9 = getelementptr inbounds i8, ptr %0, i64 8
  br label %10

10:                                               ; preds = %.lr.ph, %10
  %indvars.iv = phi i64 [ 0, %.lr.ph ], [ %indvars.iv.next, %10 ]
  %11 = getelementptr inbounds [15 x i32], ptr %9, i64 0, i64 %indvars.iv
  %12 = load i32, ptr %11, align 4, !tbaa !14
  %13 = sext i32 %12 to i64
  %14 = getelementptr inbounds [2000 x ptr], ptr @gconstants, i64 0, i64 %13
  %15 = load ptr, ptr %14, align 8, !tbaa !15
  %16 = trunc nuw nsw i64 %indvars.iv to i32
  %17 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.88, i32 noundef %16, ptr noundef %15)
  %18 = load ptr, ptr %0, align 8, !tbaa !5
  %19 = getelementptr inbounds i8, ptr %18, i64 140
  %20 = getelementptr inbounds [15 x i32], ptr %19, i64 0, i64 %indvars.iv
  %21 = load i32, ptr %20, align 4, !tbaa !14
  tail call void @print_type(i32 noundef %21)
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %22 = load ptr, ptr %0, align 8, !tbaa !5
  %23 = getelementptr inbounds i8, ptr %22, i64 136
  %24 = load i32, ptr %23, align 8, !tbaa !13
  %25 = sext i32 %24 to i64
  %26 = icmp slt i64 %indvars.iv.next, %25
  br i1 %26, label %10, label %._crit_edge, !llvm.loop !16

._crit_edge:                                      ; preds = %10, %1
  %27 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.64)
  %28 = getelementptr inbounds i8, ptr %0, i64 80
  %29 = load i32, ptr %28, align 8, !tbaa !18
  %30 = icmp sgt i32 %29, 0
  br i1 %30, label %.lr.ph74, label %.preheader68

.lr.ph74:                                         ; preds = %._crit_edge
  %31 = getelementptr inbounds i8, ptr %0, i64 72
  br label %38

.preheader68:                                     ; preds = %38, %._crit_edge
  %32 = getelementptr inbounds i8, ptr %0, i64 112
  %33 = load i32, ptr %32, align 8, !tbaa !19
  %34 = icmp sgt i32 %33, 0
  br i1 %34, label %.lr.ph76, label %._crit_edge77

.lr.ph76:                                         ; preds = %.preheader68
  %35 = getelementptr inbounds i8, ptr %0, i64 88
  %36 = getelementptr inbounds i8, ptr %0, i64 96
  %37 = getelementptr inbounds i8, ptr %0, i64 104
  br label %45

38:                                               ; preds = %.lr.ph74, %38
  %indvars.iv107 = phi i64 [ 0, %.lr.ph74 ], [ %indvars.iv.next108, %38 ]
  %39 = load ptr, ptr %31, align 8, !tbaa !20
  %40 = getelementptr inbounds %struct._Fact, ptr %39, i64 %indvars.iv107
  tail call void @print_Fact(ptr noundef %40)
  %41 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.40)
  %indvars.iv.next108 = add nuw nsw i64 %indvars.iv107, 1
  %42 = load i32, ptr %28, align 8, !tbaa !18
  %43 = sext i32 %42 to i64
  %44 = icmp slt i64 %indvars.iv.next108, %43
  br i1 %44, label %38, label %.preheader68, !llvm.loop !21

45:                                               ; preds = %.lr.ph76, %switch.lookup
  %indvars.iv110 = phi i64 [ 0, %.lr.ph76 ], [ %indvars.iv.next111, %switch.lookup ]
  %46 = load ptr, ptr %35, align 8, !tbaa !22
  %47 = getelementptr inbounds i32, ptr %46, i64 %indvars.iv110
  %48 = load i32, ptr %47, align 4, !tbaa !14
  %switch.tableidx = add i32 %48, -3001
  %49 = icmp ult i32 %switch.tableidx, 5
  br i1 %49, label %switch.lookup, label %50

50:                                               ; preds = %45
  %51 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.89, i32 noundef %48)
  tail call void @exit(i32 noundef 1) #3
  unreachable

switch.lookup:                                    ; preds = %45
  %52 = zext nneg i32 %switch.tableidx to i64
  %switch.gep = getelementptr inbounds [5 x ptr], ptr @switch.table.print_PseudoAction.1, i64 0, i64 %52
  %switch.load = load ptr, ptr %switch.gep, align 8
  %53 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) %switch.load)
  %54 = load ptr, ptr %36, align 8, !tbaa !23
  %55 = getelementptr inbounds ptr, ptr %54, i64 %indvars.iv110
  %56 = load ptr, ptr %55, align 8, !tbaa !15
  tail call void @print_ExpNode(ptr noundef %56)
  %57 = load ptr, ptr %37, align 8, !tbaa !24
  %58 = getelementptr inbounds ptr, ptr %57, i64 %indvars.iv110
  %59 = load ptr, ptr %58, align 8, !tbaa !15
  tail call void @print_ExpNode(ptr noundef %59)
  %60 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.14)
  %indvars.iv.next111 = add nuw nsw i64 %indvars.iv110, 1
  %61 = load i32, ptr %32, align 8, !tbaa !19
  %62 = sext i32 %61 to i64
  %63 = icmp slt i64 %indvars.iv.next111, %62
  br i1 %63, label %45, label %._crit_edge77, !llvm.loop !25

._crit_edge77:                                    ; preds = %switch.lookup, %.preheader68
  %64 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.65)
  %65 = getelementptr inbounds i8, ptr %0, i64 120
  %.06694 = load ptr, ptr %65, align 8, !tbaa !15
  %.not95 = icmp eq ptr %.06694, null
  br i1 %.not95, label %._crit_edge100, label %.lr.ph99

.lr.ph99:                                         ; preds = %._crit_edge77, %._crit_edge93
  %.06697 = phi ptr [ %.066, %._crit_edge93 ], [ %.06694, %._crit_edge77 ]
  %.096 = phi i32 [ %66, %._crit_edge93 ], [ 0, %._crit_edge77 ]
  %66 = add nuw nsw i32 %.096, 1
  %67 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.92, i32 noundef %.096)
  %68 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.93)
  %69 = getelementptr inbounds i8, ptr %.06697, i64 8
  %70 = load i32, ptr %69, align 8, !tbaa !26
  %71 = icmp sgt i32 %70, 0
  br i1 %71, label %.lr.ph80, label %.preheader67

.preheader67:                                     ; preds = %.lr.ph80, %.lr.ph99
  %72 = getelementptr inbounds i8, ptr %.06697, i64 72
  %73 = load i32, ptr %72, align 8, !tbaa !28
  %74 = icmp sgt i32 %73, 0
  br i1 %74, label %.lr.ph82, label %._crit_edge83

.lr.ph82:                                         ; preds = %.preheader67
  %75 = getelementptr inbounds i8, ptr %.06697, i64 48
  %76 = getelementptr inbounds i8, ptr %.06697, i64 56
  %77 = getelementptr inbounds i8, ptr %.06697, i64 64
  br label %84

.lr.ph80:                                         ; preds = %.lr.ph99, %.lr.ph80
  %indvars.iv113 = phi i64 [ %indvars.iv.next114, %.lr.ph80 ], [ 0, %.lr.ph99 ]
  %78 = load ptr, ptr %.06697, align 8, !tbaa !29
  %79 = getelementptr inbounds %struct._Fact, ptr %78, i64 %indvars.iv113
  tail call void @print_Fact(ptr noundef %79)
  %80 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.40)
  %indvars.iv.next114 = add nuw nsw i64 %indvars.iv113, 1
  %81 = load i32, ptr %69, align 8, !tbaa !26
  %82 = sext i32 %81 to i64
  %83 = icmp slt i64 %indvars.iv.next114, %82
  br i1 %83, label %.lr.ph80, label %.preheader67, !llvm.loop !30

84:                                               ; preds = %.lr.ph82, %switch.lookup139
  %indvars.iv116 = phi i64 [ 0, %.lr.ph82 ], [ %indvars.iv.next117, %switch.lookup139 ]
  %85 = load ptr, ptr %75, align 8, !tbaa !31
  %86 = getelementptr inbounds i32, ptr %85, i64 %indvars.iv116
  %87 = load i32, ptr %86, align 4, !tbaa !14
  %switch.tableidx140 = add i32 %87, -3001
  %88 = icmp ult i32 %switch.tableidx140, 5
  br i1 %88, label %switch.lookup139, label %89

89:                                               ; preds = %84
  %90 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.83, i32 noundef %87)
  tail call void @exit(i32 noundef 1) #3
  unreachable

switch.lookup139:                                 ; preds = %84
  %91 = zext nneg i32 %switch.tableidx140 to i64
  %switch.gep141 = getelementptr inbounds [5 x ptr], ptr @switch.table.print_PseudoAction.1, i64 0, i64 %91
  %switch.load142 = load ptr, ptr %switch.gep141, align 8
  %92 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) %switch.load142)
  %93 = load ptr, ptr %76, align 8, !tbaa !32
  %94 = getelementptr inbounds ptr, ptr %93, i64 %indvars.iv116
  %95 = load ptr, ptr %94, align 8, !tbaa !15
  tail call void @print_ExpNode(ptr noundef %95)
  %96 = load ptr, ptr %77, align 8, !tbaa !33
  %97 = getelementptr inbounds ptr, ptr %96, i64 %indvars.iv116
  %98 = load ptr, ptr %97, align 8, !tbaa !15
  tail call void @print_ExpNode(ptr noundef %98)
  %99 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.14)
  %indvars.iv.next117 = add nuw nsw i64 %indvars.iv116, 1
  %100 = load i32, ptr %72, align 8, !tbaa !28
  %101 = sext i32 %100 to i64
  %102 = icmp slt i64 %indvars.iv.next117, %101
  br i1 %102, label %84, label %._crit_edge83, !llvm.loop !34

._crit_edge83:                                    ; preds = %switch.lookup139, %.preheader67
  %103 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.84)
  %104 = getelementptr inbounds i8, ptr %.06697, i64 24
  %105 = load i32, ptr %104, align 8, !tbaa !35
  %106 = icmp sgt i32 %105, 0
  br i1 %106, label %.lr.ph86, label %._crit_edge87

.lr.ph86:                                         ; preds = %._crit_edge83
  %107 = getelementptr inbounds i8, ptr %.06697, i64 16
  br label %108

108:                                              ; preds = %.lr.ph86, %108
  %indvars.iv119 = phi i64 [ 0, %.lr.ph86 ], [ %indvars.iv.next120, %108 ]
  %109 = load ptr, ptr %107, align 8, !tbaa !36
  %110 = getelementptr inbounds %struct._Fact, ptr %109, i64 %indvars.iv119
  tail call void @print_Fact(ptr noundef %110)
  %111 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.40)
  %indvars.iv.next120 = add nuw nsw i64 %indvars.iv119, 1
  %112 = load i32, ptr %104, align 8, !tbaa !35
  %113 = sext i32 %112 to i64
  %114 = icmp slt i64 %indvars.iv.next120, %113
  br i1 %114, label %108, label %._crit_edge87, !llvm.loop !37

._crit_edge87:                                    ; preds = %108, %._crit_edge83
  %115 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.85)
  %116 = getelementptr inbounds i8, ptr %.06697, i64 40
  %117 = load i32, ptr %116, align 8, !tbaa !38
  %118 = icmp sgt i32 %117, 0
  br i1 %118, label %.lr.ph90, label %.preheader

.lr.ph90:                                         ; preds = %._crit_edge87
  %119 = getelementptr inbounds i8, ptr %.06697, i64 32
  br label %126

.preheader:                                       ; preds = %126, %._crit_edge87
  %120 = getelementptr inbounds i8, ptr %.06697, i64 104
  %121 = load i32, ptr %120, align 8, !tbaa !39
  %122 = icmp sgt i32 %121, 0
  br i1 %122, label %.lr.ph92, label %._crit_edge93

.lr.ph92:                                         ; preds = %.preheader
  %123 = getelementptr inbounds i8, ptr %.06697, i64 80
  %124 = getelementptr inbounds i8, ptr %.06697, i64 88
  %125 = getelementptr inbounds i8, ptr %.06697, i64 96
  br label %133

126:                                              ; preds = %.lr.ph90, %126
  %indvars.iv122 = phi i64 [ 0, %.lr.ph90 ], [ %indvars.iv.next123, %126 ]
  %127 = load ptr, ptr %119, align 8, !tbaa !40
  %128 = getelementptr inbounds %struct._Fact, ptr %127, i64 %indvars.iv122
  tail call void @print_Fact(ptr noundef %128)
  %129 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.40)
  %indvars.iv.next123 = add nuw nsw i64 %indvars.iv122, 1
  %130 = load i32, ptr %116, align 8, !tbaa !38
  %131 = sext i32 %130 to i64
  %132 = icmp slt i64 %indvars.iv.next123, %131
  br i1 %132, label %126, label %.preheader, !llvm.loop !41

133:                                              ; preds = %.lr.ph92, %switch.lookup143
  %indvars.iv125 = phi i64 [ 0, %.lr.ph92 ], [ %indvars.iv.next126, %switch.lookup143 ]
  %134 = load ptr, ptr %123, align 8, !tbaa !42
  %135 = getelementptr inbounds i32, ptr %134, i64 %indvars.iv125
  %136 = load i32, ptr %135, align 4, !tbaa !14
  %switch.tableidx144 = add i32 %136, -4000
  %137 = icmp ult i32 %switch.tableidx144, 5
  br i1 %137, label %switch.lookup143, label %138

138:                                              ; preds = %133
  %139 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.86, i32 noundef %136)
  tail call void @exit(i32 noundef 1) #3
  unreachable

switch.lookup143:                                 ; preds = %133
  %140 = zext nneg i32 %switch.tableidx144 to i64
  %switch.gep145 = getelementptr inbounds [5 x ptr], ptr @switch.table.print_PseudoAction.2, i64 0, i64 %140
  %switch.load146 = load ptr, ptr %switch.gep145, align 8
  %141 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) %switch.load146)
  %142 = load ptr, ptr %124, align 8, !tbaa !43
  %143 = getelementptr inbounds %struct._Fluent, ptr %142, i64 %indvars.iv125
  tail call void @print_Fluent(ptr noundef %143)
  %144 = load ptr, ptr %125, align 8, !tbaa !44
  %145 = getelementptr inbounds ptr, ptr %144, i64 %indvars.iv125
  %146 = load ptr, ptr %145, align 8, !tbaa !15
  tail call void @print_ExpNode(ptr noundef %146)
  %indvars.iv.next126 = add nuw nsw i64 %indvars.iv125, 1
  %147 = load i32, ptr %120, align 8, !tbaa !39
  %148 = sext i32 %147 to i64
  %149 = icmp slt i64 %indvars.iv.next126, %148
  br i1 %149, label %133, label %._crit_edge93, !llvm.loop !45

._crit_edge93:                                    ; preds = %switch.lookup143, %.preheader
  %150 = getelementptr inbounds i8, ptr %.06697, i64 112
  %.066 = load ptr, ptr %150, align 8, !tbaa !15
  %.not = icmp eq ptr %.066, null
  br i1 %.not, label %._crit_edge100, label %.lr.ph99, !llvm.loop !46

._crit_edge100:                                   ; preds = %._crit_edge93, %._crit_edge77
  ret void
}

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

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

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


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