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

; 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._FtConn = type { ptr, i32, ptr, i32, ptr, i32, ptr, i32, i32, float, i8, i32, i32, i8, i32, i8 }
%struct._EfConn = type { i32, i8, i8, float, ptr, i32, ptr, ptr, ptr, i32, ptr, ptr, ptr, i32, ptr, i32, ptr, ptr, ptr, i32, ptr, ptr, ptr, i32, ptr, i32, i32, float, i8, i32, i8, i32, i32 }
%struct._FlConn = type { ptr, i32, ptr, ptr, ptr, i32, ptr, ptr, ptr, i32, i8, ptr, ptr, i32, i8, float, i8, ptr, ptr, i8, float, i32 }
%struct._OpConn = type { ptr, i8, ptr, i32, i8, i8, i32, i8, float }

@gop_conn = external global ptr, align 8
@gef_conn = external global ptr, align 8
@gnum_fl_conn = external global i32, align 4
@gfl_conn = external global ptr, align 8
@gcost_rplans = external global i8, align 1
@gft_conn = external global ptr, align 8
@.str.10 = external hidden unnamed_addr constant [2 x i8], align 1
@gnum_ft_conn = external global i32, align 4
@gnum_ef_conn = external global i32, align 4
@.str.39 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.40 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.41 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.42 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.43 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.44 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.45 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.46 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.47 = external hidden unnamed_addr constant [25 x i8], align 1
@stdout = external global ptr, align 8

; 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 @print_fixpoint_result() #1 {
  %1 = alloca i32, align 4
  %2 = alloca i32, align 4
  %3 = alloca i8, align 1
  %4 = alloca i8, align 1
  %5 = alloca i8, align 1
  %6 = alloca i8, align 1
  call void @llvm.lifetime.start.p0(i64 4, ptr %1) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %2) #3
  call void @llvm.lifetime.start.p0(i64 1, ptr %3) #3
  call void @llvm.lifetime.start.p0(i64 1, ptr %4) #3
  call void @llvm.lifetime.start.p0(i64 1, ptr %5) #3
  call void @llvm.lifetime.start.p0(i64 1, ptr %6) #3
  store i32 0, ptr %1, align 4, !tbaa !5
  br label %7

7:                                                ; preds = %213, %0
  br label %8

8:                                                ; preds = %7
  store i8 0, ptr %3, align 1, !tbaa !9
  store i8 0, ptr %4, align 1, !tbaa !9
  store i8 0, ptr %5, align 1, !tbaa !9
  store i8 0, ptr %6, align 1, !tbaa !9
  store i32 0, ptr %2, align 4, !tbaa !5
  br label %9

9:                                                ; preds = %24, %8
  %10 = load i32, ptr %2, align 4, !tbaa !5
  %11 = load i32, ptr @gnum_ft_conn, align 4, !tbaa !5
  %12 = icmp slt i32 %10, %11
  br i1 %12, label %13, label %27

13:                                               ; preds = %9
  %14 = load ptr, ptr @gft_conn, align 8, !tbaa !10
  %15 = load i32, ptr %2, align 4, !tbaa !5
  %16 = sext i32 %15 to i64
  %17 = getelementptr inbounds %struct._FtConn, ptr %14, i64 %16
  %18 = getelementptr inbounds %struct._FtConn, ptr %17, i32 0, i32 8
  %19 = load i32, ptr %18, align 4, !tbaa !12
  %20 = load i32, ptr %1, align 4, !tbaa !5
  %21 = icmp eq i32 %19, %20
  br i1 %21, label %22, label %23

22:                                               ; preds = %13
  store i8 1, ptr %3, align 1, !tbaa !9
  store i8 1, ptr %4, align 1, !tbaa !9
  br label %27

23:                                               ; preds = %13
  br label %24

24:                                               ; preds = %23
  %25 = load i32, ptr %2, align 4, !tbaa !5
  %26 = add nsw i32 %25, 1
  store i32 %26, ptr %2, align 4, !tbaa !5
  br label %9, !llvm.loop !15

27:                                               ; preds = %22, %9
  store i32 0, ptr %2, align 4, !tbaa !5
  br label %28

28:                                               ; preds = %43, %27
  %29 = load i32, ptr %2, align 4, !tbaa !5
  %30 = load i32, ptr @gnum_ef_conn, align 4, !tbaa !5
  %31 = icmp slt i32 %29, %30
  br i1 %31, label %32, label %46

32:                                               ; preds = %28
  %33 = load ptr, ptr @gef_conn, align 8, !tbaa !10
  %34 = load i32, ptr %2, align 4, !tbaa !5
  %35 = sext i32 %34 to i64
  %36 = getelementptr inbounds %struct._EfConn, ptr %33, i64 %35
  %37 = getelementptr inbounds %struct._EfConn, ptr %36, i32 0, i32 26
  %38 = load i32, ptr %37, align 4, !tbaa !17
  %39 = load i32, ptr %1, align 4, !tbaa !5
  %40 = icmp eq i32 %38, %39
  br i1 %40, label %41, label %42

41:                                               ; preds = %32
  store i8 1, ptr %3, align 1, !tbaa !9
  store i8 1, ptr %5, align 1, !tbaa !9
  br label %46

42:                                               ; preds = %32
  br label %43

43:                                               ; preds = %42
  %44 = load i32, ptr %2, align 4, !tbaa !5
  %45 = add nsw i32 %44, 1
  store i32 %45, ptr %2, align 4, !tbaa !5
  br label %28, !llvm.loop !19

46:                                               ; preds = %41, %28
  store i32 0, ptr %2, align 4, !tbaa !5
  br label %47

47:                                               ; preds = %65, %46
  %48 = load i32, ptr %2, align 4, !tbaa !5
  %49 = load i32, ptr @gnum_fl_conn, align 4, !tbaa !5
  %50 = icmp slt i32 %48, %49
  br i1 %50, label %51, label %68

51:                                               ; preds = %47
  %52 = load ptr, ptr @gfl_conn, align 8, !tbaa !10
  %53 = load i32, ptr %2, align 4, !tbaa !5
  %54 = sext i32 %53 to i64
  %55 = getelementptr inbounds %struct._FlConn, ptr %52, i64 %54
  %56 = getelementptr inbounds %struct._FlConn, ptr %55, i32 0, i32 17
  %57 = load ptr, ptr %56, align 8, !tbaa !20
  %58 = load i32, ptr %1, align 4, !tbaa !5
  %59 = sext i32 %58 to i64
  %60 = getelementptr inbounds i8, ptr %57, i64 %59
  %61 = load i8, ptr %60, align 1, !tbaa !9
  %62 = icmp ne i8 %61, 0
  br i1 %62, label %63, label %64

63:                                               ; preds = %51
  store i8 1, ptr %3, align 1, !tbaa !9
  store i8 1, ptr %6, align 1, !tbaa !9
  br label %68

64:                                               ; preds = %51
  br label %65

65:                                               ; preds = %64
  %66 = load i32, ptr %2, align 4, !tbaa !5
  %67 = add nsw i32 %66, 1
  store i32 %67, ptr %2, align 4, !tbaa !5
  br label %47, !llvm.loop !22

68:                                               ; preds = %63, %47
  %69 = load i8, ptr %3, align 1, !tbaa !9
  %70 = icmp ne i8 %69, 0
  br i1 %70, label %72, label %71

71:                                               ; preds = %68
  br label %216

72:                                               ; preds = %68
  %73 = load i32, ptr %1, align 4, !tbaa !5
  %74 = call i32 (ptr, ...) @printf(ptr noundef @.str.39, i32 noundef %73)
  %75 = load i8, ptr %4, align 1, !tbaa !9
  %76 = icmp ne i8 %75, 0
  br i1 %76, label %77, label %112

77:                                               ; preds = %72
  %78 = call i32 (ptr, ...) @printf(ptr noundef @.str.40)
  store i32 0, ptr %2, align 4, !tbaa !5
  br label %79

79:                                               ; preds = %108, %77
  %80 = load i32, ptr %2, align 4, !tbaa !5
  %81 = load i32, ptr @gnum_ft_conn, align 4, !tbaa !5
  %82 = icmp slt i32 %80, %81
  br i1 %82, label %83, label %111

83:                                               ; preds = %79
  %84 = load ptr, ptr @gft_conn, align 8, !tbaa !10
  %85 = load i32, ptr %2, align 4, !tbaa !5
  %86 = sext i32 %85 to i64
  %87 = getelementptr inbounds %struct._FtConn, ptr %84, i64 %86
  %88 = getelementptr inbounds %struct._FtConn, ptr %87, i32 0, i32 8
  %89 = load i32, ptr %88, align 4, !tbaa !12
  %90 = load i32, ptr %1, align 4, !tbaa !5
  %91 = icmp eq i32 %89, %90
  br i1 %91, label %92, label %107

92:                                               ; preds = %83
  %93 = call i32 (ptr, ...) @printf(ptr noundef @.str.10)
  %94 = load i32, ptr %2, align 4, !tbaa !5
  call void @print_ft_name(i32 noundef %94)
  %95 = load i8, ptr @gcost_rplans, align 1, !tbaa !9
  %96 = icmp ne i8 %95, 0
  br i1 %96, label %97, label %106

97:                                               ; preds = %92
  %98 = load ptr, ptr @gft_conn, align 8, !tbaa !10
  %99 = load i32, ptr %2, align 4, !tbaa !5
  %100 = sext i32 %99 to i64
  %101 = getelementptr inbounds %struct._FtConn, ptr %98, i64 %100
  %102 = getelementptr inbounds %struct._FtConn, ptr %101, i32 0, i32 9
  %103 = load float, ptr %102, align 8, !tbaa !23
  %104 = fpext float %103 to double
  %105 = call i32 (ptr, ...) @printf(ptr noundef @.str.41, double noundef %104)
  br label %106

106:                                              ; preds = %97, %92
  br label %107

107:                                              ; preds = %106, %83
  br label %108

108:                                              ; preds = %107
  %109 = load i32, ptr %2, align 4, !tbaa !5
  %110 = add nsw i32 %109, 1
  store i32 %110, ptr %2, align 4, !tbaa !5
  br label %79, !llvm.loop !24

111:                                              ; preds = %79
  br label %112

112:                                              ; preds = %111, %72
  %113 = load i8, ptr %6, align 1, !tbaa !9
  %114 = icmp ne i8 %113, 0
  br i1 %114, label %115, label %157

115:                                              ; preds = %112
  %116 = call i32 (ptr, ...) @printf(ptr noundef @.str.42)
  store i32 0, ptr %2, align 4, !tbaa !5
  br label %117

117:                                              ; preds = %153, %115
  %118 = load i32, ptr %2, align 4, !tbaa !5
  %119 = load i32, ptr @gnum_fl_conn, align 4, !tbaa !5
  %120 = icmp slt i32 %118, %119
  br i1 %120, label %121, label %156

121:                                              ; preds = %117
  %122 = load ptr, ptr @gfl_conn, align 8, !tbaa !10
  %123 = load i32, ptr %2, align 4, !tbaa !5
  %124 = sext i32 %123 to i64
  %125 = getelementptr inbounds %struct._FlConn, ptr %122, i64 %124
  %126 = getelementptr inbounds %struct._FlConn, ptr %125, i32 0, i32 17
  %127 = load ptr, ptr %126, align 8, !tbaa !20
  %128 = load i32, ptr %1, align 4, !tbaa !5
  %129 = sext i32 %128 to i64
  %130 = getelementptr inbounds i8, ptr %127, i64 %129
  %131 = load i8, ptr %130, align 1, !tbaa !9
  %132 = icmp ne i8 %131, 0
  br i1 %132, label %133, label %148

133:                                              ; preds = %121
  %134 = call i32 (ptr, ...) @printf(ptr noundef @.str.10)
  %135 = load i32, ptr %2, align 4, !tbaa !5
  call void @print_fl_name(i32 noundef %135)
  %136 = load ptr, ptr @gfl_conn, align 8, !tbaa !10
  %137 = load i32, ptr %2, align 4, !tbaa !5
  %138 = sext i32 %137 to i64
  %139 = getelementptr inbounds %struct._FlConn, ptr %136, i64 %138
  %140 = getelementptr inbounds %struct._FlConn, ptr %139, i32 0, i32 18
  %141 = load ptr, ptr %140, align 8, !tbaa !25
  %142 = load i32, ptr %1, align 4, !tbaa !5
  %143 = sext i32 %142 to i64
  %144 = getelementptr inbounds float, ptr %141, i64 %143
  %145 = load float, ptr %144, align 4, !tbaa !26
  %146 = fpext float %145 to double
  %147 = call i32 (ptr, ...) @printf(ptr noundef @.str.43, double noundef %146)
  br label %152

148:                                              ; preds = %121
  %149 = call i32 (ptr, ...) @printf(ptr noundef @.str.10)
  %150 = load i32, ptr %2, align 4, !tbaa !5
  call void @print_fl_name(i32 noundef %150)
  %151 = call i32 (ptr, ...) @printf(ptr noundef @.str.44)
  br label %152

152:                                              ; preds = %148, %133
  br label %153

153:                                              ; preds = %152
  %154 = load i32, ptr %2, align 4, !tbaa !5
  %155 = add nsw i32 %154, 1
  store i32 %155, ptr %2, align 4, !tbaa !5
  br label %117, !llvm.loop !27

156:                                              ; preds = %117
  br label %157

157:                                              ; preds = %156, %112
  %158 = load i8, ptr %5, align 1, !tbaa !9
  %159 = icmp ne i8 %158, 0
  br i1 %159, label %160, label %213

160:                                              ; preds = %157
  %161 = call i32 (ptr, ...) @printf(ptr noundef @.str.45)
  store i32 0, ptr %2, align 4, !tbaa !5
  br label %162

162:                                              ; preds = %209, %160
  %163 = load i32, ptr %2, align 4, !tbaa !5
  %164 = load i32, ptr @gnum_ef_conn, align 4, !tbaa !5
  %165 = icmp slt i32 %163, %164
  br i1 %165, label %166, label %212

166:                                              ; preds = %162
  %167 = load ptr, ptr @gef_conn, align 8, !tbaa !10
  %168 = load i32, ptr %2, align 4, !tbaa !5
  %169 = sext i32 %168 to i64
  %170 = getelementptr inbounds %struct._EfConn, ptr %167, i64 %169
  %171 = getelementptr inbounds %struct._EfConn, ptr %170, i32 0, i32 26
  %172 = load i32, ptr %171, align 4, !tbaa !17
  %173 = load i32, ptr %1, align 4, !tbaa !5
  %174 = icmp eq i32 %172, %173
  br i1 %174, label %175, label %208

175:                                              ; preds = %166
  %176 = load i32, ptr %2, align 4, !tbaa !5
  %177 = call i32 (ptr, ...) @printf(ptr noundef @.str.46, i32 noundef %176)
  %178 = load ptr, ptr @gef_conn, align 8, !tbaa !10
  %179 = load i32, ptr %2, align 4, !tbaa !5
  %180 = sext i32 %179 to i64
  %181 = getelementptr inbounds %struct._EfConn, ptr %178, i64 %180
  %182 = getelementptr inbounds %struct._EfConn, ptr %181, i32 0, i32 0
  %183 = load i32, ptr %182, align 8, !tbaa !28
  call void @print_op_name(i32 noundef %183)
  %184 = load i8, ptr @gcost_rplans, align 1, !tbaa !9
  %185 = icmp ne i8 %184, 0
  br i1 %185, label %186, label %207

186:                                              ; preds = %175
  %187 = load ptr, ptr @gef_conn, align 8, !tbaa !10
  %188 = load i32, ptr %2, align 4, !tbaa !5
  %189 = sext i32 %188 to i64
  %190 = getelementptr inbounds %struct._EfConn, ptr %187, i64 %189
  %191 = getelementptr inbounds %struct._EfConn, ptr %190, i32 0, i32 27
  %192 = load float, ptr %191, align 8, !tbaa !29
  %193 = fpext float %192 to double
  %194 = load ptr, ptr @gop_conn, align 8, !tbaa !10
  %195 = load ptr, ptr @gef_conn, align 8, !tbaa !10
  %196 = load i32, ptr %2, align 4, !tbaa !5
  %197 = sext i32 %196 to i64
  %198 = getelementptr inbounds %struct._EfConn, ptr %195, i64 %197
  %199 = getelementptr inbounds %struct._EfConn, ptr %198, i32 0, i32 0
  %200 = load i32, ptr %199, align 8, !tbaa !28
  %201 = sext i32 %200 to i64
  %202 = getelementptr inbounds %struct._OpConn, ptr %194, i64 %201
  %203 = getelementptr inbounds %struct._OpConn, ptr %202, i32 0, i32 8
  %204 = load float, ptr %203, align 8, !tbaa !30
  %205 = fpext float %204 to double
  %206 = call i32 (ptr, ...) @printf(ptr noundef @.str.47, double noundef %193, double noundef %205)
  br label %207

207:                                              ; preds = %186, %175
  br label %208

208:                                              ; preds = %207, %166
  br label %209

209:                                              ; preds = %208
  %210 = load i32, ptr %2, align 4, !tbaa !5
  %211 = add nsw i32 %210, 1
  store i32 %211, ptr %2, align 4, !tbaa !5
  br label %162, !llvm.loop !32

212:                                              ; preds = %162
  br label %213

213:                                              ; preds = %212, %157
  %214 = load i32, ptr %1, align 4, !tbaa !5
  %215 = add nsw i32 %214, 1
  store i32 %215, ptr %1, align 4, !tbaa !5
  br label %7

216:                                              ; preds = %71
  %217 = call i32 (ptr, ...) @printf(ptr noundef @.str.10)
  %218 = load ptr, ptr @stdout, align 8, !tbaa !10
  %219 = call i32 @fflush(ptr noundef %218)
  call void @llvm.lifetime.end.p0(i64 1, ptr %6) #3
  call void @llvm.lifetime.end.p0(i64 1, ptr %5) #3
  call void @llvm.lifetime.end.p0(i64 1, ptr %4) #3
  call void @llvm.lifetime.end.p0(i64 1, ptr %3) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %2) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %1) #3
  ret void
}

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

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

declare void @print_op_name(i32 noundef) #2

declare void @print_fl_name(i32 noundef) #2

declare void @print_ft_name(i32 noundef) #2

declare i32 @fflush(ptr noundef) #2

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 = { "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 }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!7, !7, i64 0}
!10 = !{!11, !11, i64 0}
!11 = !{!"any pointer", !7, i64 0}
!12 = !{!13, !6, i64 60}
!13 = !{!"_FtConn", !11, i64 0, !6, i64 8, !11, i64 16, !6, i64 24, !11, i64 32, !6, i64 40, !11, i64 48, !6, i64 56, !6, i64 60, !14, i64 64, !7, i64 68, !6, i64 72, !6, i64 76, !7, i64 80, !6, i64 84, !7, i64 88}
!14 = !{!"float", !7, i64 0}
!15 = distinct !{!15, !16}
!16 = !{!"llvm.loop.mustprogress"}
!17 = !{!18, !6, i64 188}
!18 = !{!"_EfConn", !6, i64 0, !7, i64 4, !7, i64 5, !14, i64 8, !11, i64 16, !6, i64 24, !11, i64 32, !11, i64 40, !11, i64 48, !6, i64 56, !11, i64 64, !11, i64 72, !11, i64 80, !6, i64 88, !11, i64 96, !6, i64 104, !11, i64 112, !11, i64 120, !11, i64 128, !6, i64 136, !11, i64 144, !11, i64 152, !11, i64 160, !6, i64 168, !11, i64 176, !6, i64 184, !6, i64 188, !14, i64 192, !7, i64 196, !6, i64 200, !7, i64 204, !6, i64 208, !6, i64 212}
!19 = distinct !{!19, !16}
!20 = !{!21, !11, i64 112}
!21 = !{!"_FlConn", !11, i64 0, !6, i64 8, !11, i64 16, !11, i64 24, !11, i64 32, !6, i64 40, !11, i64 48, !11, i64 56, !11, i64 64, !6, i64 72, !7, i64 76, !11, i64 80, !11, i64 88, !6, i64 96, !7, i64 100, !14, i64 104, !7, i64 108, !11, i64 112, !11, i64 120, !7, i64 128, !14, i64 132, !6, i64 136}
!22 = distinct !{!22, !16}
!23 = !{!13, !14, i64 64}
!24 = distinct !{!24, !16}
!25 = !{!21, !11, i64 120}
!26 = !{!14, !14, i64 0}
!27 = distinct !{!27, !16}
!28 = !{!18, !6, i64 0}
!29 = !{!18, !14, i64 192}
!30 = !{!31, !14, i64 40}
!31 = !{!"_OpConn", !11, i64 0, !7, i64 8, !11, i64 16, !6, i64 24, !7, i64 28, !7, i64 29, !6, i64 32, !7, i64 36, !14, i64 40}
!32 = distinct !{!32, !16}


; 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._FtConn = type { ptr, i32, ptr, i32, ptr, i32, ptr, i32, i32, float, i8, i32, i32, i8, i32, i8 }
%struct._EfConn = type { i32, i8, i8, float, ptr, i32, ptr, ptr, ptr, i32, ptr, ptr, ptr, i32, ptr, i32, ptr, ptr, ptr, i32, ptr, ptr, ptr, i32, ptr, i32, i32, float, i8, i32, i8, i32, i32 }
%struct._FlConn = type { ptr, i32, ptr, ptr, ptr, i32, ptr, ptr, ptr, i32, i8, ptr, ptr, i32, i8, float, i8, ptr, ptr, i8, float, i32 }
%struct._OpConn = type { ptr, i8, ptr, i32, i8, i8, i32, i8, float }

@gop_conn = external local_unnamed_addr global ptr, align 8
@gef_conn = external local_unnamed_addr global ptr, align 8
@gnum_fl_conn = external local_unnamed_addr global i32, align 4
@gfl_conn = external local_unnamed_addr global ptr, align 8
@gcost_rplans = external local_unnamed_addr global i8, align 1
@gft_conn = external local_unnamed_addr global ptr, align 8
@.str.10 = external hidden unnamed_addr constant [2 x i8], align 1
@gnum_ft_conn = external local_unnamed_addr global i32, align 4
@gnum_ef_conn = external local_unnamed_addr global i32, align 4
@.str.39 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.40 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.41 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.42 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.43 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.44 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.45 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.46 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.47 = external hidden unnamed_addr constant [25 x i8], align 1
@stdout = external local_unnamed_addr global ptr, align 8

; Function Attrs: nounwind uwtable
define dso_local void @print_fixpoint_result() local_unnamed_addr #0 {
  br label %1

1:                                                ; preds = %.loopexit, %0
  %indvars.iv116 = phi i64 [ %indvars.iv.next117, %.loopexit ], [ 0, %0 ]
  %2 = load i32, ptr @gnum_ft_conn, align 4, !tbaa !5
  %.not4963 = icmp sgt i32 %2, 0
  br i1 %.not4963, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %1
  %3 = load ptr, ptr @gft_conn, align 8, !tbaa !9
  %4 = zext nneg i32 %2 to i64
  %wide.trip.count = zext nneg i32 %2 to i64
  %5 = getelementptr inbounds i8, ptr %3, i64 60
  %6 = load i32, ptr %5, align 4, !tbaa !11
  %7 = zext i32 %6 to i64
  %8 = icmp eq i64 %indvars.iv116, %7
  br i1 %8, label %._crit_edge, label %.lr.ph124

.lr.ph124:                                        ; preds = %.lr.ph, %9
  %indvars.iv123 = phi i64 [ %indvars.iv.next, %9 ], [ 0, %.lr.ph ]
  %indvars.iv.next = add nuw nsw i64 %indvars.iv123, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond.not, label %._crit_edge.loopexit, label %9, !llvm.loop !14

9:                                                ; preds = %.lr.ph124
  %10 = getelementptr inbounds %struct._FtConn, ptr %3, i64 %indvars.iv.next, i32 8
  %11 = load i32, ptr %10, align 4, !tbaa !11
  %12 = zext i32 %11 to i64
  %13 = icmp eq i64 %indvars.iv116, %12
  br i1 %13, label %._crit_edge.loopexit, label %.lr.ph124, !llvm.loop !14

._crit_edge.loopexit:                             ; preds = %.lr.ph124, %9
  %.041.ph = phi i8 [ 0, %.lr.ph124 ], [ 1, %9 ]
  %.not49.le = icmp ult i64 %indvars.iv.next, %4
  br label %._crit_edge

._crit_edge:                                      ; preds = %._crit_edge.loopexit, %.lr.ph, %1
  %.not49.lcssa = phi i1 [ false, %1 ], [ true, %.lr.ph ], [ %.not49.le, %._crit_edge.loopexit ]
  %.041 = phi i8 [ 0, %1 ], [ 1, %.lr.ph ], [ %.041.ph, %._crit_edge.loopexit ]
  %14 = load i32, ptr @gnum_ef_conn, align 4, !tbaa !5
  %.not5370 = icmp sgt i32 %14, 0
  br i1 %.not5370, label %.lr.ph74, label %._crit_edge75

.lr.ph74:                                         ; preds = %._crit_edge
  %15 = load ptr, ptr @gef_conn, align 8, !tbaa !9
  %16 = zext nneg i32 %14 to i64
  %wide.trip.count101 = zext nneg i32 %14 to i64
  %17 = getelementptr inbounds i8, ptr %15, i64 188
  %18 = load i32, ptr %17, align 4, !tbaa !16
  %19 = zext i32 %18 to i64
  %20 = icmp eq i64 %indvars.iv116, %19
  br i1 %20, label %._crit_edge75, label %.lr.ph130

.lr.ph130:                                        ; preds = %.lr.ph74, %21
  %indvars.iv99129 = phi i64 [ %indvars.iv.next100, %21 ], [ 0, %.lr.ph74 ]
  %indvars.iv.next100 = add nuw nsw i64 %indvars.iv99129, 1
  %exitcond102.not = icmp eq i64 %indvars.iv.next100, %wide.trip.count101
  br i1 %exitcond102.not, label %._crit_edge75.loopexit, label %21, !llvm.loop !18

21:                                               ; preds = %.lr.ph130
  %22 = getelementptr inbounds %struct._EfConn, ptr %15, i64 %indvars.iv.next100, i32 26
  %23 = load i32, ptr %22, align 4, !tbaa !16
  %24 = zext i32 %23 to i64
  %25 = icmp eq i64 %indvars.iv116, %24
  br i1 %25, label %._crit_edge75.loopexit, label %.lr.ph130, !llvm.loop !18

._crit_edge75.loopexit:                           ; preds = %.lr.ph130, %21
  %.1.ph = phi i8 [ %.041, %.lr.ph130 ], [ 1, %21 ]
  %.not53.le = icmp ult i64 %indvars.iv.next100, %16
  br label %._crit_edge75

._crit_edge75:                                    ; preds = %._crit_edge75.loopexit, %.lr.ph74, %._crit_edge
  %.not53.lcssa = phi i1 [ false, %._crit_edge ], [ true, %.lr.ph74 ], [ %.not53.le, %._crit_edge75.loopexit ]
  %.1 = phi i8 [ %.041, %._crit_edge ], [ 1, %.lr.ph74 ], [ %.1.ph, %._crit_edge75.loopexit ]
  %26 = load i32, ptr @gnum_fl_conn, align 4, !tbaa !5
  %.not5181 = icmp sgt i32 %26, 0
  br i1 %.not5181, label %.lr.ph85, label %._crit_edge86

.lr.ph85:                                         ; preds = %._crit_edge75
  %27 = load ptr, ptr @gfl_conn, align 8, !tbaa !9
  %28 = zext nneg i32 %26 to i64
  %wide.trip.count105 = zext nneg i32 %26 to i64
  %29 = getelementptr inbounds i8, ptr %27, i64 112
  %30 = load ptr, ptr %29, align 8, !tbaa !19
  %31 = getelementptr inbounds i8, ptr %30, i64 %indvars.iv116
  %32 = load i8, ptr %31, align 1, !tbaa !21
  %.not136 = icmp eq i8 %32, 0
  br i1 %.not136, label %.lr.ph138, label %.thread

.lr.ph138:                                        ; preds = %.lr.ph85, %33
  %indvars.iv103137 = phi i64 [ %indvars.iv.next104, %33 ], [ 0, %.lr.ph85 ]
  %indvars.iv.next104 = add nuw nsw i64 %indvars.iv103137, 1
  %exitcond106.not = icmp eq i64 %indvars.iv.next104, %wide.trip.count105
  br i1 %exitcond106.not, label %._crit_edge86.loopexit, label %33, !llvm.loop !22

33:                                               ; preds = %.lr.ph138
  %34 = getelementptr inbounds %struct._FlConn, ptr %27, i64 %indvars.iv.next104, i32 17
  %35 = load ptr, ptr %34, align 8, !tbaa !19
  %36 = getelementptr inbounds i8, ptr %35, i64 %indvars.iv116
  %37 = load i8, ptr %36, align 1, !tbaa !21
  %.not = icmp eq i8 %37, 0
  br i1 %.not, label %.lr.ph138, label %.thread.loopexit, !llvm.loop !22

._crit_edge86.loopexit:                           ; preds = %.lr.ph138
  %.not51.le148 = icmp ult i64 %indvars.iv.next104, %28
  br label %._crit_edge86

._crit_edge86:                                    ; preds = %._crit_edge86.loopexit, %._crit_edge75
  %.not51.lcssa = phi i1 [ false, %._crit_edge75 ], [ %.not51.le148, %._crit_edge86.loopexit ]
  %.not47 = icmp eq i8 %.1, 0
  br i1 %.not47, label %121, label %.thread

.thread.loopexit:                                 ; preds = %33
  %.not51.le = icmp ult i64 %indvars.iv.next104, %28
  br label %.thread

.thread:                                          ; preds = %.thread.loopexit, %.lr.ph85, %._crit_edge86
  %.not5162 = phi i1 [ %.not51.lcssa, %._crit_edge86 ], [ true, %.lr.ph85 ], [ %.not51.le, %.thread.loopexit ]
  %38 = trunc nuw nsw i64 %indvars.iv116 to i32
  %39 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.39, i32 noundef %38)
  br i1 %.not49.lcssa, label %40, label %.loopexit60

40:                                               ; preds = %.thread
  %41 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.40)
  %42 = load i32, ptr @gnum_ft_conn, align 4, !tbaa !5
  %43 = icmp sgt i32 %42, 0
  br i1 %43, label %.lr.ph90, label %.loopexit60

.lr.ph90:                                         ; preds = %40, %59
  %indvars.iv107 = phi i64 [ %indvars.iv.next108, %59 ], [ 0, %40 ]
  %44 = load ptr, ptr @gft_conn, align 8, !tbaa !9
  %45 = getelementptr inbounds %struct._FtConn, ptr %44, i64 %indvars.iv107, i32 8
  %46 = load i32, ptr %45, align 4, !tbaa !11
  %47 = zext i32 %46 to i64
  %48 = icmp eq i64 %indvars.iv116, %47
  br i1 %48, label %49, label %59

49:                                               ; preds = %.lr.ph90
  %50 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.10)
  %51 = trunc nuw nsw i64 %indvars.iv107 to i32
  tail call void @print_ft_name(i32 noundef %51) #3
  %52 = load i8, ptr @gcost_rplans, align 1, !tbaa !21
  %.not56 = icmp eq i8 %52, 0
  br i1 %.not56, label %59, label %53

53:                                               ; preds = %49
  %54 = load ptr, ptr @gft_conn, align 8, !tbaa !9
  %55 = getelementptr inbounds %struct._FtConn, ptr %54, i64 %indvars.iv107, i32 9
  %56 = load float, ptr %55, align 8, !tbaa !23
  %57 = fpext float %56 to double
  %58 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.41, double noundef %57)
  br label %59

59:                                               ; preds = %.lr.ph90, %53, %49
  %indvars.iv.next108 = add nuw nsw i64 %indvars.iv107, 1
  %60 = load i32, ptr @gnum_ft_conn, align 4, !tbaa !5
  %61 = sext i32 %60 to i64
  %62 = icmp slt i64 %indvars.iv.next108, %61
  br i1 %62, label %.lr.ph90, label %.loopexit60, !llvm.loop !24

.loopexit60:                                      ; preds = %59, %40, %.thread
  br i1 %.not5162, label %63, label %.loopexit59

63:                                               ; preds = %.loopexit60
  %64 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.42)
  %65 = load i32, ptr @gnum_fl_conn, align 4, !tbaa !5
  %66 = icmp sgt i32 %65, 0
  br i1 %66, label %.lr.ph93, label %.loopexit59

.lr.ph93:                                         ; preds = %63, %84
  %indvars.iv110 = phi i64 [ %indvars.iv.next111, %84 ], [ 0, %63 ]
  %67 = load ptr, ptr @gfl_conn, align 8, !tbaa !9
  %68 = getelementptr inbounds %struct._FlConn, ptr %67, i64 %indvars.iv110, i32 17
  %69 = load ptr, ptr %68, align 8, !tbaa !19
  %70 = getelementptr inbounds i8, ptr %69, i64 %indvars.iv116
  %71 = load i8, ptr %70, align 1, !tbaa !21
  %.not55 = icmp eq i8 %71, 0
  %72 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.10)
  %73 = trunc nuw nsw i64 %indvars.iv110 to i32
  tail call void @print_fl_name(i32 noundef %73) #3
  br i1 %.not55, label %82, label %74

74:                                               ; preds = %.lr.ph93
  %75 = load ptr, ptr @gfl_conn, align 8, !tbaa !9
  %76 = getelementptr inbounds %struct._FlConn, ptr %75, i64 %indvars.iv110, i32 18
  %77 = load ptr, ptr %76, align 8, !tbaa !25
  %78 = getelementptr inbounds float, ptr %77, i64 %indvars.iv116
  %79 = load float, ptr %78, align 4, !tbaa !26
  %80 = fpext float %79 to double
  %81 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.43, double noundef %80)
  br label %84

82:                                               ; preds = %.lr.ph93
  %83 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.44)
  br label %84

84:                                               ; preds = %74, %82
  %indvars.iv.next111 = add nuw nsw i64 %indvars.iv110, 1
  %85 = load i32, ptr @gnum_fl_conn, align 4, !tbaa !5
  %86 = sext i32 %85 to i64
  %87 = icmp slt i64 %indvars.iv.next111, %86
  br i1 %87, label %.lr.ph93, label %.loopexit59, !llvm.loop !27

.loopexit59:                                      ; preds = %84, %63, %.loopexit60
  br i1 %.not53.lcssa, label %88, label %.loopexit

88:                                               ; preds = %.loopexit59
  %89 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.45)
  %90 = load i32, ptr @gnum_ef_conn, align 4, !tbaa !5
  %91 = icmp sgt i32 %90, 0
  br i1 %91, label %.lr.ph96, label %.loopexit

.lr.ph96:                                         ; preds = %88, %117
  %indvars.iv113 = phi i64 [ %indvars.iv.next114, %117 ], [ 0, %88 ]
  %92 = load ptr, ptr @gef_conn, align 8, !tbaa !9
  %93 = getelementptr inbounds %struct._EfConn, ptr %92, i64 %indvars.iv113, i32 26
  %94 = load i32, ptr %93, align 4, !tbaa !16
  %95 = zext i32 %94 to i64
  %96 = icmp eq i64 %indvars.iv116, %95
  br i1 %96, label %97, label %117

97:                                               ; preds = %.lr.ph96
  %98 = trunc nuw nsw i64 %indvars.iv113 to i32
  %99 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.46, i32 noundef %98)
  %100 = load ptr, ptr @gef_conn, align 8, !tbaa !9
  %101 = getelementptr inbounds %struct._EfConn, ptr %100, i64 %indvars.iv113
  %102 = load i32, ptr %101, align 8, !tbaa !28
  tail call void @print_op_name(i32 noundef %102) #3
  %103 = load i8, ptr @gcost_rplans, align 1, !tbaa !21
  %.not54 = icmp eq i8 %103, 0
  br i1 %.not54, label %117, label %104

104:                                              ; preds = %97
  %105 = load ptr, ptr @gef_conn, align 8, !tbaa !9
  %106 = getelementptr inbounds %struct._EfConn, ptr %105, i64 %indvars.iv113
  %107 = getelementptr inbounds i8, ptr %106, i64 192
  %108 = load float, ptr %107, align 8, !tbaa !29
  %109 = fpext float %108 to double
  %110 = load ptr, ptr @gop_conn, align 8, !tbaa !9
  %111 = load i32, ptr %106, align 8, !tbaa !28
  %112 = sext i32 %111 to i64
  %113 = getelementptr inbounds %struct._OpConn, ptr %110, i64 %112, i32 8
  %114 = load float, ptr %113, align 8, !tbaa !30
  %115 = fpext float %114 to double
  %116 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.47, double noundef %109, double noundef %115)
  br label %117

117:                                              ; preds = %.lr.ph96, %104, %97
  %indvars.iv.next114 = add nuw nsw i64 %indvars.iv113, 1
  %118 = load i32, ptr @gnum_ef_conn, align 4, !tbaa !5
  %119 = sext i32 %118 to i64
  %120 = icmp slt i64 %indvars.iv.next114, %119
  br i1 %120, label %.lr.ph96, label %.loopexit, !llvm.loop !32

.loopexit:                                        ; preds = %117, %88, %.loopexit59
  %indvars.iv.next117 = add nuw nsw i64 %indvars.iv116, 1
  br label %1

121:                                              ; preds = %._crit_edge86
  %122 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.10)
  %123 = load ptr, ptr @stdout, align 8, !tbaa !9
  %124 = tail call i32 @fflush(ptr noundef %123)
  ret void
}

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

declare void @print_op_name(i32 noundef) local_unnamed_addr #2

declare void @print_fl_name(i32 noundef) local_unnamed_addr #2

declare void @print_ft_name(i32 noundef) local_unnamed_addr #2

; Function Attrs: nofree nounwind
declare noundef i32 @fflush(ptr nocapture noundef) local_unnamed_addr #1

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" }
attributes #1 = { nofree nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { 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 60}
!12 = !{!"_FtConn", !10, i64 0, !6, i64 8, !10, i64 16, !6, i64 24, !10, i64 32, !6, i64 40, !10, i64 48, !6, i64 56, !6, i64 60, !13, i64 64, !7, i64 68, !6, i64 72, !6, i64 76, !7, i64 80, !6, i64 84, !7, i64 88}
!13 = !{!"float", !7, i64 0}
!14 = distinct !{!14, !15}
!15 = !{!"llvm.loop.mustprogress"}
!16 = !{!17, !6, i64 188}
!17 = !{!"_EfConn", !6, i64 0, !7, i64 4, !7, i64 5, !13, i64 8, !10, i64 16, !6, i64 24, !10, i64 32, !10, i64 40, !10, i64 48, !6, i64 56, !10, i64 64, !10, i64 72, !10, i64 80, !6, i64 88, !10, i64 96, !6, i64 104, !10, i64 112, !10, i64 120, !10, i64 128, !6, i64 136, !10, i64 144, !10, i64 152, !10, i64 160, !6, i64 168, !10, i64 176, !6, i64 184, !6, i64 188, !13, i64 192, !7, i64 196, !6, i64 200, !7, i64 204, !6, i64 208, !6, i64 212}
!18 = distinct !{!18, !15}
!19 = !{!20, !10, i64 112}
!20 = !{!"_FlConn", !10, i64 0, !6, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !6, i64 40, !10, i64 48, !10, i64 56, !10, i64 64, !6, i64 72, !7, i64 76, !10, i64 80, !10, i64 88, !6, i64 96, !7, i64 100, !13, i64 104, !7, i64 108, !10, i64 112, !10, i64 120, !7, i64 128, !13, i64 132, !6, i64 136}
!21 = !{!7, !7, i64 0}
!22 = distinct !{!22, !15}
!23 = !{!12, !13, i64 64}
!24 = distinct !{!24, !15}
!25 = !{!20, !10, i64 120}
!26 = !{!13, !13, i64 0}
!27 = distinct !{!27, !15}
!28 = !{!17, !6, i64 0}
!29 = !{!17, !13, i64 192}
!30 = !{!31, !13, i64 40}
!31 = !{!"_OpConn", !10, i64 0, !7, i64 8, !10, i64 16, !6, i64 24, !7, i64 28, !7, i64 29, !6, i64 32, !7, i64 36, !13, i64 40}
!32 = distinct !{!32, !15}


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