; LLVM IR from erayzesen/QuarkPhysics :: QuarkPhysics/polypartition (polypartition)

; 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.TPPLPoint = type { double, double, i32 }
%"class.std::__cxx11::list.0" = type { %"class.std::__cxx11::_List_base.1" }
%"class.std::__cxx11::_List_base.1" = type { %"struct.std::__cxx11::_List_base<TPPLPartition::Diagonal, std::allocator<TPPLPartition::Diagonal>>::_List_impl" }
%"struct.std::__cxx11::_List_base<TPPLPartition::Diagonal, std::allocator<TPPLPartition::Diagonal>>::_List_impl" = type { %"struct.std::__detail::_List_node_header" }
%"struct.std::__detail::_List_node_header" = type { %"struct.std::__detail::_List_node_base", i64 }
%"struct.std::__detail::_List_node_base" = type { ptr, ptr }
%"struct.TPPLPartition::Diagonal" = type { i64, i64 }
%"struct.std::_List_iterator.5" = type { ptr }
%class.TPPLPoly = type <{ ptr, i64, i8, [7 x i8] }>
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<long, std::allocator<long>>::_Vector_impl" }
%"struct.std::_Vector_base<long, std::allocator<long>>::_Vector_impl" = type { %"struct.std::_Vector_base<long, std::allocator<long>>::_Vector_impl_data" }
%"struct.std::_Vector_base<long, std::allocator<long>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.__gnu_cxx::__normal_iterator" = type { ptr }
%"struct.TPPLPartition::PartitionVertex" = type { i8, i8, i8, %struct.TPPLPoint, double, ptr, ptr }
%"struct.TPPLPartition::DPState2" = type { i8, i64, %"class.std::__cxx11::list.0" }

; Function Attrs: nobuiltin nounwind
declare void @_ZdaPv(ptr noundef) #0

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN8TPPLPoly4InitEl(ptr noundef nonnull align 8 dereferenceable(17), i64 noundef) #1 align 2

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare { i64, i1 } @llvm.umul.with.overflow.i64(i64, i64) #2

; Function Attrs: nobuiltin allocsize(0)
declare noundef nonnull ptr @_Znam(i64 noundef) #3

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #4

declare i32 @__gxx_personality_v0(...)

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef i32 @_ZN13TPPLPartition10IntersectsER9TPPLPointS1_S1_S1_(ptr noundef nonnull align 1 dereferenceable(1), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24)) #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt7__cxx114listI8TPPLPolySaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(17)) #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZNK8TPPLPoly12GetNumPointsEv(ptr noundef nonnull align 8 dereferenceable(17)) #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(24) ptr @_ZN8TPPLPoly8GetPointEl(ptr noundef nonnull align 8 dereferenceable(17), i64 noundef) #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(24) ptr @_ZN8TPPLPolyixEi(ptr noundef nonnull align 8 dereferenceable(17), i32 noundef) #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZN13TPPLPartition6InConeEPNS_15PartitionVertexER9TPPLPoint(ptr noundef nonnull align 1 dereferenceable(1), ptr noundef, ptr noundef nonnull align 8 dereferenceable(24)) #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN13TPPLPartition21UpdateVertexReflexityEPNS_15PartitionVertexE(ptr noundef nonnull align 1 dereferenceable(1), ptr noundef) #6 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK8TPPLPoly5ValidEv(ptr noundef nonnull align 8 dereferenceable(17)) #7 align 2

; Function Attrs: nobuiltin nounwind
declare void @_ZdaPvm(ptr noundef, i64 noundef) #0

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt7__cxx114listIN13TPPLPartition8DiagonalESaIS2_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #6 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt7__cxx114listIN13TPPLPartition8DiagonalESaIS2_EE9push_backERKS2_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(16)) #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNKSt7__cxx114listIN13TPPLPartition8DiagonalESaIS2_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24)) #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNSt7__cxx114listIN13TPPLPartition8DiagonalESaIS2_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24)) #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(16) ptr @_ZNKSt14_List_iteratorIN13TPPLPartition8DiagonalEEdeEv(ptr noundef nonnull align 8 dereferenceable(8)) #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt7__cxx114listIN13TPPLPartition8DiagonalESaIS2_EE9pop_frontEv(ptr noundef nonnull align 8 dereferenceable(24)) #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt7__cxx1110_List_baseIN13TPPLPartition8DiagonalESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt7__cxx114listIN13TPPLPartition8DiagonalESaIS2_EE5clearEv(ptr noundef nonnull align 8 dereferenceable(24)) #6 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt7__cxx114listIN13TPPLPartition8DiagonalESaIS2_EE10push_frontERKS2_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(16)) #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZNKSt14_List_iteratorIN13TPPLPartition8DiagonalEEptEv(ptr noundef nonnull align 8 dereferenceable(8)) #6 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN13TPPLPartition5TypeAElllPNS_15PartitionVertexEPPNS_8DPState2E(ptr noundef nonnull align 1 dereferenceable(1), i64 noundef, i64 noundef, i64 noundef, ptr noundef, ptr noundef) #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt14_List_iteratorIN13TPPLPartition8DiagonalEEC2Ev(ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNSt7__cxx114listIN13TPPLPartition8DiagonalESaIS2_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24)) #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNSt14_List_iteratorIN13TPPLPartition8DiagonalEEmmEi(ptr noundef nonnull align 8 dereferenceable(8), i32 noundef) #6 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN13TPPLPartition5TypeBElllPNS_15PartitionVertexEPPNS_8DPState2E(ptr noundef nonnull align 1 dereferenceable(1), i64 noundef, i64 noundef, i64 noundef, ptr noundef, ptr noundef) #1 align 2

; Function Attrs: mustprogress uwtable
define dso_local noundef i32 @_ZN13TPPLPartition19ConvexPartition_OPTEP8TPPLPolyPNSt7__cxx114listIS0_SaIS0_EEE(ptr noundef nonnull align 1 dereferenceable(1) %0, ptr noundef %1, ptr noundef %2) #1 align 2 personality ptr @__gxx_personality_v0 {
  %4 = alloca i32, align 4
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca %struct.TPPLPoint, align 8
  %9 = alloca %struct.TPPLPoint, align 8
  %10 = alloca %struct.TPPLPoint, align 8
  %11 = alloca %struct.TPPLPoint, align 8
  %12 = alloca ptr, align 8
  %13 = alloca ptr, align 8
  %14 = alloca i64, align 8
  %15 = alloca i64, align 8
  %16 = alloca i64, align 8
  %17 = alloca i64, align 8
  %18 = alloca i64, align 8
  %19 = alloca %"class.std::__cxx11::list.0", align 8
  %20 = alloca %"class.std::__cxx11::list.0", align 8
  %21 = alloca %"struct.TPPLPartition::Diagonal", align 8
  %22 = alloca %"struct.TPPLPartition::Diagonal", align 8
  %23 = alloca ptr, align 8
  %24 = alloca ptr, align 8
  %25 = alloca %"struct.std::_List_iterator.5", align 8
  %26 = alloca %"struct.std::_List_iterator.5", align 8
  %27 = alloca i32, align 4
  %28 = alloca %class.TPPLPoly, align 8
  %29 = alloca ptr, align 8
  %30 = alloca i32, align 4
  %31 = alloca %"class.std::vector", align 8
  %32 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %33 = alloca i8, align 1
  %34 = alloca i8, align 1
  %35 = alloca %"struct.std::_List_iterator.5", align 8
  %36 = alloca %"struct.std::_List_iterator.5", align 8
  %37 = alloca %"struct.std::_List_iterator.5", align 8
  %38 = alloca %"struct.std::_List_iterator.5", align 8
  %39 = alloca %"struct.std::_List_iterator.5", align 8
  %40 = alloca %"struct.std::_List_iterator.5", align 8
  %41 = alloca %"struct.std::_List_iterator.5", align 8
  %42 = alloca i32, align 4
  %43 = alloca %"struct.std::_List_iterator.5", align 8
  %44 = alloca %"struct.std::_List_iterator.5", align 8
  %45 = alloca %"struct.std::_List_iterator.5", align 8
  %46 = alloca %"struct.std::_List_iterator.5", align 8
  %47 = alloca %"struct.std::_List_iterator.5", align 8
  %48 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %49 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %50 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %51 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %52 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  store ptr %0, ptr %5, align 8, !tbaa !5
  store ptr %1, ptr %6, align 8, !tbaa !5
  store ptr %2, ptr %7, align 8, !tbaa !5
  %53 = load ptr, ptr %5, align 8
  %54 = load ptr, ptr %6, align 8, !tbaa !5
  %55 = call noundef zeroext i1 @_ZNK8TPPLPoly5ValidEv(ptr noundef nonnull align 8 dereferenceable(17) %54)
  br i1 %55, label %57, label %56

56:                                               ; preds = %3
  store i32 0, ptr %4, align 4
  br label %975

57:                                               ; preds = %3
  call void @llvm.lifetime.start.p0(i64 24, ptr %8) #9
  call void @llvm.lifetime.start.p0(i64 24, ptr %9) #9
  call void @llvm.lifetime.start.p0(i64 24, ptr %10) #9
  call void @llvm.lifetime.start.p0(i64 24, ptr %11) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #9
  store ptr null, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #9
  store ptr null, ptr %13, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #9
  call void @llvm.lifetime.start.p0(i64 24, ptr %19) #9
  call void @_ZNSt7__cxx114listIN13TPPLPartition8DiagonalESaIS2_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %19) #9
  call void @llvm.lifetime.start.p0(i64 24, ptr %20) #9
  call void @_ZNSt7__cxx114listIN13TPPLPartition8DiagonalESaIS2_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %20) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr %21) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr %22) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #9
  store ptr null, ptr %23, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #9
  store ptr null, ptr %24, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #9
  call void @_ZNSt14_List_iteratorIN13TPPLPartition8DiagonalEEC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %25) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #9
  call void @_ZNSt14_List_iteratorIN13TPPLPartition8DiagonalEEC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %26) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #9
  call void @llvm.lifetime.start.p0(i64 24, ptr %28) #9
  invoke void @_ZN8TPPLPolyC1Ev(ptr noundef nonnull align 8 dereferenceable(17) %28)
          to label %58 unwind label %116

58:                                               ; preds = %57
  call void @llvm.lifetime.start.p0(i64 24, ptr %31) #9
  call void @_ZNSt6vectorIlSaIlEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %31) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #9
  call void @_ZN9__gnu_cxx17__normal_iteratorIPlSt6vectorIlSaIlEEEC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %32) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %33) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %34) #9
  %59 = load ptr, ptr %6, align 8, !tbaa !5
  %60 = invoke noundef i64 @_ZNK8TPPLPoly12GetNumPointsEv(ptr noundef nonnull align 8 dereferenceable(17) %59)
          to label %61 unwind label %120

61:                                               ; preds = %58
  store i64 %60, ptr %17, align 8, !tbaa !9
  %62 = load i64, ptr %17, align 8, !tbaa !9
  %63 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %62, i64 56)
  %64 = extractvalue { i64, i1 } %63, 1
  %65 = extractvalue { i64, i1 } %63, 0
  %66 = select i1 %64, i64 -1, i64 %65
  %67 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %66) #10
          to label %68 unwind label %120

68:                                               ; preds = %61
  %69 = icmp eq i64 %62, 0
  br i1 %69, label %77, label %70

70:                                               ; preds = %68
  %71 = getelementptr inbounds %"struct.TPPLPartition::PartitionVertex", ptr %67, i64 %62
  br label %72

72:                                               ; preds = %74, %70
  %73 = phi ptr [ %67, %70 ], [ %75, %74 ]
  invoke void @_ZN13TPPLPartition15PartitionVertexC1Ev(ptr noundef nonnull align 8 dereferenceable(56) %73)
          to label %74 unwind label %124

74:                                               ; preds = %72
  %75 = getelementptr inbounds %"struct.TPPLPartition::PartitionVertex", ptr %73, i64 1
  %76 = icmp eq ptr %75, %71
  br i1 %76, label %77, label %72

77:                                               ; preds = %74, %68
  store ptr %67, ptr %12, align 8, !tbaa !5
  %78 = load i64, ptr %17, align 8, !tbaa !9
  %79 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %78, i64 8)
  %80 = extractvalue { i64, i1 } %79, 1
  %81 = extractvalue { i64, i1 } %79, 0
  %82 = select i1 %80, i64 -1, i64 %81
  %83 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %82) #10
          to label %84 unwind label %120

84:                                               ; preds = %77
  store ptr %83, ptr %13, align 8, !tbaa !5
  store i64 0, ptr %14, align 8, !tbaa !9
  br label %85

85:                                               ; preds = %113, %84
  %86 = load i64, ptr %14, align 8, !tbaa !9
  %87 = load i64, ptr %17, align 8, !tbaa !9
  %88 = icmp slt i64 %86, %87
  br i1 %88, label %89, label %128

89:                                               ; preds = %85
  %90 = load i64, ptr %17, align 8, !tbaa !9
  %91 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %90, i64 40)
  %92 = extractvalue { i64, i1 } %91, 1
  %93 = extractvalue { i64, i1 } %91, 0
  %94 = call { i64, i1 } @llvm.uadd.with.overflow.i64(i64 %93, i64 8)
  %95 = extractvalue { i64, i1 } %94, 1
  %96 = or i1 %92, %95
  %97 = extractvalue { i64, i1 } %94, 0
  %98 = select i1 %96, i64 -1, i64 %97
  %99 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %98) #10
          to label %100 unwind label %120

100:                                              ; preds = %89
  store i64 %90, ptr %99, align 16
  %101 = getelementptr inbounds i8, ptr %99, i64 8
  %102 = icmp eq i64 %90, 0
  br i1 %102, label %109, label %103

103:                                              ; preds = %100
  %104 = getelementptr inbounds %"struct.TPPLPartition::DPState2", ptr %101, i64 %90
  br label %105

105:                                              ; preds = %105, %103
  %106 = phi ptr [ %101, %103 ], [ %107, %105 ]
  call void @_ZN13TPPLPartition8DPState2C2Ev(ptr noundef nonnull align 8 dereferenceable(40) %106) #9
  %107 = getelementptr inbounds %"struct.TPPLPartition::DPState2", ptr %106, i64 1
  %108 = icmp eq ptr %107, %104
  br i1 %108, label %109, label %105

109:                                              ; preds = %105, %100
  %110 = load ptr, ptr %13, align 8, !tbaa !5
  %111 = load i64, ptr %14, align 8, !tbaa !9
  %112 = getelementptr inbounds ptr, ptr %110, i64 %111
  store ptr %101, ptr %112, align 8, !tbaa !5
  br label %113

113:                                              ; preds = %109
  %114 = load i64, ptr %14, align 8, !tbaa !9
  %115 = add nsw i64 %114, 1
  store i64 %115, ptr %14, align 8, !tbaa !9
  br label %85, !llvm.loop !11

116:                                              ; preds = %57
  %117 = landingpad { ptr, i32 }
          cleanup
  %118 = extractvalue { ptr, i32 } %117, 0
  store ptr %118, ptr %29, align 8
  %119 = extractvalue { ptr, i32 } %117, 1
  store i32 %119, ptr %30, align 4
  br label %974

120:                                              ; preds = %932, %917, %908, %899, %897, %895, %893, %883, %881, %806, %804, %802, %782, %733, %673, %665, %601, %560, %541, %519, %472, %462, %435, %352, %309, %303, %299, %290, %255, %211, %166, %133, %89, %77, %61, %58
  %121 = landingpad { ptr, i32 }
          cleanup
  %122 = extractvalue { ptr, i32 } %121, 0
  store ptr %122, ptr %29, align 8
  %123 = extractvalue { ptr, i32 } %121, 1
  store i32 %123, ptr %30, align 4
  br label %973

124:                                              ; preds = %72
  %125 = landingpad { ptr, i32 }
          cleanup
  %126 = extractvalue { ptr, i32 } %125, 0
  store ptr %126, ptr %29, align 8
  %127 = extractvalue { ptr, i32 } %125, 1
  store i32 %127, ptr %30, align 4
  call void @_ZdaPvm(ptr noundef %67, i64 noundef %66) #11
  br label %973

128:                                              ; preds = %85
  store i64 0, ptr %14, align 8, !tbaa !9
  br label %129

129:                                              ; preds = %190, %128
  %130 = load i64, ptr %14, align 8, !tbaa !9
  %131 = load i64, ptr %17, align 8, !tbaa !9
  %132 = icmp slt i64 %130, %131
  br i1 %132, label %133, label %193

133:                                              ; preds = %129
  %134 = load ptr, ptr %6, align 8, !tbaa !5
  %135 = load i64, ptr %14, align 8, !tbaa !9
  %136 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN8TPPLPoly8GetPointEl(ptr noundef nonnull align 8 dereferenceable(17) %134, i64 noundef %135)
          to label %137 unwind label %120

137:                                              ; preds = %133
  %138 = load ptr, ptr %12, align 8, !tbaa !5
  %139 = load i64, ptr %14, align 8, !tbaa !9
  %140 = getelementptr inbounds %"struct.TPPLPartition::PartitionVertex", ptr %138, i64 %139
  %141 = getelementptr inbounds %"struct.TPPLPartition::PartitionVertex", ptr %140, i32 0, i32 3
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %141, ptr align 8 %136, i64 24, i1 false), !tbaa.struct !13
  %142 = load ptr, ptr %12, align 8, !tbaa !5
  %143 = load i64, ptr %14, align 8, !tbaa !9
  %144 = getelementptr inbounds %"struct.TPPLPartition::PartitionVertex", ptr %142, i64 %143
  %145 = getelementptr inbounds %"struct.TPPLPartition::PartitionVertex", ptr %144, i32 0, i32 0
  store i8 1, ptr %145, align 8, !tbaa !18
  %146 = load i64, ptr %14, align 8, !tbaa !9
  %147 = icmp eq i64 %146, 0
  br i1 %147, label %148, label %157

148:                                              ; preds = %137
  %149 = load ptr, ptr %12, align 8, !tbaa !5
  %150 = load i64, ptr %17, align 8, !tbaa !9
  %151 = sub nsw i64 %150, 1
  %152 = getelementptr inbounds %"struct.TPPLPartition::PartitionVertex", ptr %149, i64 %151
  %153 = load ptr, ptr %12, align 8, !tbaa !5
  %154 = load i64, ptr %14, align 8, !tbaa !9
  %155 = getelementptr inbounds %"struct.TPPLPartition::PartitionVertex", ptr %153, i64 %154
  %156 = getelementptr inbounds %"struct.TPPLPartition::PartitionVertex", ptr %155, i32 0, i32 5
  store ptr %152, ptr %156, align 8, !tbaa !22
  br label %166

157:                                              ; preds = %137
  %158 = load ptr, ptr %12, align 8, !tbaa !5
  %159 = load i64, ptr %14, align 8, !tbaa !9
  %160 = sub nsw i64 %159, 1
  %161 = getelementptr inbounds %"struct.TPPLPartition::PartitionVertex", ptr %158, i64 %160
  %162 = load ptr, ptr %12, align 8, !tbaa !5
  %163 = load i64, ptr %14, align 8, !tbaa !9
  %164 = getelementptr inbounds %"struct.TPPLPartition::PartitionVertex", ptr %162, i64 %163
  %165 = getelementptr inbounds %"struct.TPPLPartition::PartitionVertex", ptr %164, i32 0, i32 5
  store ptr %161, ptr %165, align 8, !tbaa !22
  br label %166

166:                                              ; preds = %157, %148
  %167 = load i64, ptr %14, align 8, !tbaa !9
  %168 = load ptr, ptr %6, align 8, !tbaa !5
  %169 = invoke noundef i64 @_ZNK8TPPLPoly12GetNumPointsEv(ptr noundef nonnull align 8 dereferenceable(17) %168)
          to label %170 unwind label %120

170:                                              ; preds = %166
  %171 = sub nsw i64 %169, 1
  %172 = icmp eq i64 %167, %171
  br i1 %172, label %173, label %180

173:                                              ; preds = %170
  %174 = load ptr, ptr %12, align 8, !tbaa !5
  %175 = getelementptr inbounds %"struct.TPPLPartition::PartitionVertex", ptr %174, i64 0
  %176 = load ptr, ptr %12, align 8, !tbaa !5
  %177 = load i64, ptr %14, align 8, !tbaa !9
  %178 = getelementptr inbounds %"struct.TPPLPartition::PartitionVertex", ptr %176, i64 %177
  %179 = getelementptr inbounds %"struct.TPPLPartition::PartitionVertex", ptr %178, i32 0, i32 6
  store ptr %175, ptr %179, align 8, !tbaa !23
  br label %189

180:                                              ; preds = %170
  %181 = load ptr, ptr %12, align 8, !tbaa !5
  %182 = load i64, ptr %14, align 8, !tbaa !9
  %183 = add nsw i64 %182, 1
  %184 = getelementptr inbounds %"struct.TPPLPartition::PartitionVertex", ptr %181, i64 %183
  %185 = load ptr, ptr %12, align 8, !tbaa !5
  %186 = load i64, ptr %14, align 8, !tbaa !9
  %187 = getelementptr inbounds %"struct.TPPLPartition::PartitionVertex", ptr %185, i64 %186
  %188 = getelementptr inbounds %"struct.TPPLPartition::PartitionVertex", ptr %187, i32 0, i32 6
  store ptr %184, ptr %188, align 8, !tbaa !23
  br label %189

189:                                              ; preds = %180, %173
  br label %190

190:                                              ; preds = %189
  %191 = load i64, ptr %14, align 8, !tbaa !9
  %192 = add nsw i64 %191, 1
  store i64 %192, ptr %14, align 8, !tbaa !9
  br label %129, !llvm.loop !24

193:                                              ; preds = %129
  store i64 1, ptr %14, align 8, !tbaa !9
  br label %194

194:                                              ; preds = %202, %193
  %195 = load i64, ptr %14, align 8, !tbaa !9
  %196 = load i64, ptr %17, align 8, !tbaa !9
  %197 = icmp slt i64 %195, %196
  br i1 %197, label %198, label %205

198:                                              ; preds = %194
  %199 = load ptr, ptr %12, align 8, !tbaa !5
  %200 = load i64, ptr %14, align 8, !tbaa !9
  %201 = getelementptr inbounds %"struct.TPPLPartition::PartitionVertex", ptr %199, i64 %200
  call void @_ZN13TPPLPartition21UpdateVertexReflexityEPNS_15PartitionVertexE(ptr noundef nonnull align 1 dereferenceable(1) %53, ptr noundef %201)
  br label %202

202:                                              ; preds = %198
  %203 = load i64, ptr %14, align 8, !tbaa !9
  %204 = add nsw i64 %203, 1
  store i64 %204, ptr %14, align 8, !tbaa !9
  br label %194, !llvm.loop !25

205:                                              ; preds = %194
  store i64 0, ptr %14, align 8, !tbaa !9
  br label %206

206:                                              ; preds = %331, %205
  %207 = load i64, ptr %14, align 8, !tbaa !9
  %208 = load i64, ptr %17, align 8, !tbaa !9
  %209 = sub nsw i64 %208, 1
  %210 = icmp slt i64 %207, %209
  br i1 %210, label %211, label %334

211:                                              ; preds = %206
  %212 = load ptr, ptr %6, align 8, !tbaa !5
  %213 = load i64, ptr %14, align 8, !tbaa !9
  %214 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN8TPPLPoly8GetPointEl(ptr noundef nonnull align 8 dereferenceable(17) %212, i64 noundef %213)
          to label %215 unwind label %120

215:                                              ; preds = %211
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %8, ptr align 8 %214, i64 24, i1 false), !tbaa.struct !13
  %216 = load i64, ptr %14, align 8, !tbaa !9
  %217 = add nsw i64 %216, 1
  store i64 %217, ptr %15, align 8, !tbaa !9
  br label %218

218:                                              ; preds = %327, %215
  %219 = load i64, ptr %15, align 8, !tbaa !9
  %220 = load i64, ptr %17, align 8, !tbaa !9
  %221 = icmp slt i64 %219, %220
  br i1 %221, label %222, label %330

222:                                              ; preds = %218
  %223 = load ptr, ptr %13, align 8, !tbaa !5
  %224 = load i64, ptr %14, align 8, !tbaa !9
  %225 = getelementptr inbounds ptr, ptr %223, i64 %224
  %226 = load ptr, ptr %225, align 8, !tbaa !5
  %227 = load i64, ptr %15, align 8, !tbaa !9
  %228 = getelementptr inbounds %"struct.TPPLPartition::DPState2", ptr %226, i64 %227
  %229 = getelementptr inbounds %"struct.TPPLPartition::DPState2", ptr %228, i32 0, i32 0
  store i8 1, ptr %229, align 8, !tbaa !26
  %230 = load i64, ptr %15, align 8, !tbaa !9
  %231 = load i64, ptr %14, align 8, !tbaa !9
  %232 = add nsw i64 %231, 1
  %233 = icmp eq i64 %230, %232
  br i1 %233, label %234, label %242

234:                                              ; preds = %222
  %235 = load ptr, ptr %13, align 8, !tbaa !5
  %236 = load i64, ptr %14, align 8, !tbaa !9
  %237 = getelementptr inbounds ptr, ptr %235, i64 %236
  %238 = load ptr, ptr %237, align 8, !tbaa !5
  %239 = load i64, ptr %15, align 8, !tbaa !9
  %240 = getelementptr inbounds %"struct.TPPLPartition::DPState2", ptr %238, i64 %239
  %241 = getelementptr inbounds %"struct.TPPLPartition::DPState2", ptr %240, i32 0, i32 1
  store i64 0, ptr %241, align 8, !tbaa !33
  br label %250

242:                                              ; preds = %222
  %243 = load ptr, ptr %13, align 8, !tbaa !5
  %244 = load i64, ptr %14, align 8, !tbaa !9
  %245 = getelementptr inbounds ptr, ptr %243, i64 %244
  %246 = load ptr, ptr %245, align 8, !tbaa !5
  %247 = load i64, ptr %15, align 8, !tbaa !9
  %248 = getelementptr inbounds %"struct.TPPLPartition::DPState2", ptr %246, i64 %247
  %249 = getelementptr inbounds %"struct.TPPLPartition::DPState2", ptr %248, i32 0, i32 1
  store i64 2147483647, ptr %249, align 8, !tbaa !33
  br label %250

250:                                              ; preds = %242, %234
  %251 = load i64, ptr %15, align 8, !tbaa !9
  %252 = load i64, ptr %14, align 8, !tbaa !9
  %253 = add nsw i64 %252, 1
  %254 = icmp ne i64 %251, %253
  br i1 %254, label %255, label %326

255:                                              ; preds = %250
  %256 = load ptr, ptr %6, align 8, !tbaa !5
  %257 = load i64, ptr %15, align 8, !tbaa !9
  %258 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN8TPPLPoly8GetPointEl(ptr noundef nonnull align 8 dereferenceable(17) %256, i64 noundef %257)
          to label %259 unwind label %120

259:                                              ; preds = %255
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %9, ptr align 8 %258, i64 24, i1 false), !tbaa.struct !13
  %260 = load ptr, ptr %12, align 8, !tbaa !5
  %261 = load i64, ptr %14, align 8, !tbaa !9
  %262 = getelementptr inbounds %"struct.TPPLPartition::PartitionVertex", ptr %260, i64 %261
  %263 = call noundef zeroext i1 @_ZN13TPPLPartition6InConeEPNS_15PartitionVertexER9TPPLPoint(ptr noundef nonnull align 1 dereferenceable(1) %53, ptr noundef %262, ptr noundef nonnull align 8 dereferenceable(24) %9)
  br i1 %263, label %272, label %264

264:                                              ; preds = %259
  %265 = load ptr, ptr %13, align 8, !tbaa !5
  %266 = load i64, ptr %14, align 8, !tbaa !9
  %267 = getelementptr inbounds ptr, ptr %265, i64 %266
  %268 = load ptr, ptr %267, align 8, !tbaa !5
  %269 = load i64, ptr %15, align 8, !tbaa !9
  %270 = getelementptr inbounds %"struct.TPPLPartition::DPState2", ptr %268, i64 %269
  %271 = getelementptr inbounds %"struct.TPPLPartition::DPState2", ptr %270, i32 0, i32 0
  store i8 0, ptr %271, align 8, !tbaa !26
  br label %327

272:                                              ; preds = %259
  %273 = load ptr, ptr %12, align 8, !tbaa !5
  %274 = load i64, ptr %15, align 8, !tbaa !9
  %275 = getelementptr inbounds %"struct.TPPLPartition::PartitionVertex", ptr %273, i64 %274
  %276 = call noundef zeroext i1 @_ZN13TPPLPartition6InConeEPNS_15PartitionVertexER9TPPLPoint(ptr noundef nonnull align 1 dereferenceable(1) %53, ptr noundef %275, ptr noundef nonnull align 8 dereferenceable(24) %8)
  br i1 %276, label %285, label %277

277:                                              ; preds = %272
  %278 = load ptr, ptr %13, align 8, !tbaa !5
  %279 = load i64, ptr %14, align 8, !tbaa !9
  %280 = getelementptr inbounds ptr, ptr %278, i64 %279
  %281 = load ptr, ptr %280, align 8, !tbaa !5
  %282 = load i64, ptr %15, align 8, !tbaa !9
  %283 = getelementptr inbounds %"struct.TPPLPartition::DPState2", ptr %281, i64 %282
  %284 = getelementptr inbounds %"struct.TPPLPartition::DPState2", ptr %283, i32 0, i32 0
  store i8 0, ptr %284, align 8, !tbaa !26
  br label %327

285:                                              ; preds = %272
  store i64 0, ptr %16, align 8, !tbaa !9
  br label %286

286:                                              ; preds = %322, %285
  %287 = load i64, ptr %16, align 8, !tbaa !9
  %288 = load i64, ptr %17, align 8, !tbaa !9
  %289 = icmp slt i64 %287, %288
  br i1 %289, label %290, label %325

290:                                              ; preds = %286
  %291 = load ptr, ptr %6, align 8, !tbaa !5
  %292 = load i64, ptr %16, align 8, !tbaa !9
  %293 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN8TPPLPoly8GetPointEl(ptr noundef nonnull align 8 dereferenceable(17) %291, i64 noundef %292)
          to label %294 unwind label %120

294:                                              ; preds = %290
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %10, ptr align 8 %293, i64 24, i1 false), !tbaa.struct !13
  %295 = load i64, ptr %16, align 8, !tbaa !9
  %296 = load i64, ptr %17, align 8, !tbaa !9
  %297 = sub nsw i64 %296, 1
  %298 = icmp eq i64 %295, %297
  br i1 %298, label %299, label %303

299:                                              ; preds = %294
  %300 = load ptr, ptr %6, align 8, !tbaa !5
  %301 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN8TPPLPoly8GetPointEl(ptr noundef nonnull align 8 dereferenceable(17) %300, i64 noundef 0)
          to label %302 unwind label %120

302:                                              ; preds = %299
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %11, ptr align 8 %301, i64 24, i1 false), !tbaa.struct !13
  br label %309

303:                                              ; preds = %294
  %304 = load ptr, ptr %6, align 8, !tbaa !5
  %305 = load i64, ptr %16, align 8, !tbaa !9
  %306 = add nsw i64 %305, 1
  %307 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN8TPPLPoly8GetPointEl(ptr noundef nonnull align 8 dereferenceable(17) %304, i64 noundef %306)
          to label %308 unwind label %120

308:                                              ; preds = %303
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %11, ptr align 8 %307, i64 24, i1 false), !tbaa.struct !13
  br label %309

309:                                              ; preds = %308, %302
  %310 = invoke noundef i32 @_ZN13TPPLPartition10IntersectsER9TPPLPointS1_S1_S1_(ptr noundef nonnull align 1 dereferenceable(1) %53, ptr noundef nonnull align 8 dereferenceable(24) %8, ptr noundef nonnull align 8 dereferenceable(24) %9, ptr noundef nonnull align 8 dereferenceable(24) %10, ptr noundef nonnull align 8 dereferenceable(24) %11)
          to label %311 unwind label %120

311:                                              ; preds = %309
  %312 = icmp ne i32 %310, 0
  br i1 %312, label %313, label %321

313:                                              ; preds = %311
  %314 = load ptr, ptr %13, align 8, !tbaa !5
  %315 = load i64, ptr %14, align 8, !tbaa !9
  %316 = getelementptr inbounds ptr, ptr %314, i64 %315
  %317 = load ptr, ptr %316, align 8, !tbaa !5
  %318 = load i64, ptr %15, align 8, !tbaa !9
  %319 = getelementptr inbounds %"struct.TPPLPartition::DPState2", ptr %317, i64 %318
  %320 = getelementptr inbounds %"struct.TPPLPartition::DPState2", ptr %319, i32 0, i32 0
  store i8 0, ptr %320, align 8, !tbaa !26
  br label %325

321:                                              ; preds = %311
  br label %322

322:                                              ; preds = %321
  %323 = load i64, ptr %16, align 8, !tbaa !9
  %324 = add nsw i64 %323, 1
  store i64 %324, ptr %16, align 8, !tbaa !9
  br label %286, !llvm.loop !34

325:                                              ; preds = %313, %286
  br label %326

326:                                              ; preds = %325, %250
  br label %327

327:                                              ; preds = %326, %277, %264
  %328 = load i64, ptr %15, align 8, !tbaa !9
  %329 = add nsw i64 %328, 1
  store i64 %329, ptr %15, align 8, !tbaa !9
  br label %218, !llvm.loop !35

330:                                              ; preds = %218
  br label %331

331:                                              ; preds = %330
  %332 = load i64, ptr %14, align 8, !tbaa !9
  %333 = add nsw i64 %332, 1
  store i64 %333, ptr %14, align 8, !tbaa !9
  br label %206, !llvm.loop !36

334:                                              ; preds = %206
  store i64 0, ptr %14, align 8, !tbaa !9
  br label %335

335:                                              ; preds = %375, %334
  %336 = load i64, ptr %14, align 8, !tbaa !9
  %337 = load i64, ptr %17, align 8, !tbaa !9
  %338 = sub nsw i64 %337, 2
  %339 = icmp slt i64 %336, %338
  br i1 %339, label %340, label %378

340:                                              ; preds = %335
  %341 = load i64, ptr %14, align 8, !tbaa !9
  %342 = add nsw i64 %341, 2
  store i64 %342, ptr %15, align 8, !tbaa !9
  %343 = load ptr, ptr %13, align 8, !tbaa !5
  %344 = load i64, ptr %14, align 8, !tbaa !9
  %345 = getelementptr inbounds ptr, ptr %343, i64 %344
  %346 = load ptr, ptr %345, align 8, !tbaa !5
  %347 = load i64, ptr %15, align 8, !tbaa !9
  %348 = getelementptr inbounds %"struct.TPPLPartition::DPState2", ptr %346, i64 %347
  %349 = getelementptr inbounds %"struct.TPPLPartition::DPState2", ptr %348, i32 0, i32 0
  %350 = load i8, ptr %349, align 8, !tbaa !26, !range !37, !noundef !38
  %351 = trunc i8 %350 to i1
  br i1 %351, label %352, label %374

352:                                              ; preds = %340
  %353 = load ptr, ptr %13, align 8, !tbaa !5
  %354 = load i64, ptr %14, align 8, !tbaa !9
  %355 = getelementptr inbounds ptr, ptr %353, i64 %354
  %356 = load ptr, ptr %355, align 8, !tbaa !5
  %357 = load i64, ptr %15, align 8, !tbaa !9
  %358 = getelementptr inbounds %"struct.TPPLPartition::DPState2", ptr %356, i64 %357
  %359 = getelementptr inbounds %"struct.TPPLPartition::DPState2", ptr %358, i32 0, i32 1
  store i64 0, ptr %359, align 8, !tbaa !33
  %360 = load i64, ptr %14, align 8, !tbaa !9
  %361 = add nsw i64 %360, 1
  %362 = getelementptr inbounds %"struct.TPPLPartition::Diagonal", ptr %22, i32 0, i32 0
  store i64 %361, ptr %362, align 8, !tbaa !39
  %363 = load i64, ptr %14, align 8, !tbaa !9
  %364 = add nsw i64 %363, 1
  %365 = getelementptr inbounds %"struct.TPPLPartition::Diagonal", ptr %22, i32 0, i32 1
  store i64 %364, ptr %365, align 8, !tbaa !41
  %366 = load ptr, ptr %13, align 8, !tbaa !5
  %367 = load i64, ptr %14, align 8, !tbaa !9
  %368 = getelementptr inbounds ptr, ptr %366, i64 %367
  %369 = load ptr, ptr %368, align 8, !tbaa !5
  %370 = load i64, ptr %15, align 8, !tbaa !9
  %371 = getelementptr inbounds %"struct.TPPLPartition::DPState2", ptr %369, i64 %370
  %372 = getelementptr inbounds %"struct.TPPLPartition::DPState2", ptr %371, i32 0, i32 2
  invoke void @_ZNSt7__cxx114listIN13TPPLPartition8DiagonalESaIS2_EE9push_backERKS2_(ptr noundef nonnull align 8 dereferenceable(24) %372, ptr noundef nonnull align 8 dereferenceable(16) %22)
          to label %373 unwind label %120

373:                                              ; preds = %352
  br label %374

374:                                              ; preds = %373, %340
  br label %375

375:                                              ; preds = %374
  %376 = load i64, ptr %14, align 8, !tbaa !9
  %377 = add nsw i64 %376, 1
  store i64 %377, ptr %14, align 8, !tbaa !9
  br label %335, !llvm.loop !42

378:                                              ; preds = %335
  %379 = load ptr, ptr %13, align 8, !tbaa !5
  %380 = getelementptr inbounds ptr, ptr %379, i64 0
  %381 = load ptr, ptr %380, align 8, !tbaa !5
  %382 = load i64, ptr %17, align 8, !tbaa !9
  %383 = sub nsw i64 %382, 1
  %384 = getelementptr inbounds %"struct.TPPLPartition::DPState2", ptr %381, i64 %383
  %385 = getelementptr inbounds %"struct.TPPLPartition::DPState2", ptr %384, i32 0, i32 0
  store i8 1, ptr %385, align 8, !tbaa !26
  %386 = load ptr, ptr %12, align 8, !tbaa !5
  %387 = getelementptr inbounds %"struct.TPPLPartition::PartitionVertex", ptr %386, i64 0
  %388 = getelementptr inbounds %"struct.TPPLPartition::PartitionVertex", ptr %387, i32 0, i32 1
  store i8 0, ptr %388, align 1, !tbaa !43
  store i64 3, ptr %18, align 8, !tbaa !9
  br label %389

389:                                              ; preds = %557, %378
  %390 = load i64, ptr %18, align 8, !tbaa !9
  %391 = load i64, ptr %17, align 8, !tbaa !9
  %392 = icmp slt i64 %390, %391
  br i1 %392, label %393, label %560

393:                                              ; preds = %389
  store i64 0, ptr %14, align 8, !tbaa !9
  br label %394

394:                                              ; preds = %482, %393
  %395 = load i64, ptr %14, align 8, !tbaa !9
  %396 = load i64, ptr %17, align 8, !tbaa !9
  %397 = load i64, ptr %18, align 8, !tbaa !9
  %398 = sub nsw i64 %396, %397
  %399 = icmp slt i64 %395, %398
  br i1 %399, label %400, label %485

400:                                              ; preds = %394
  %401 = load ptr, ptr %12, align 8, !tbaa !5
  %402 = load i64, ptr %14, align 8, !tbaa !9
  %403 = getelementptr inbounds %"struct.TPPLPartition::PartitionVertex", ptr %401, i64 %402
  %404 = getelementptr inbounds %"struct.TPPLPartition::PartitionVertex", ptr %403, i32 0, i32 1
  %405 = load i8, ptr %404, align 1, !tbaa !43, !range !37, !noundef !38
  %406 = trunc i8 %405 to i1
  br i1 %406, label %407, label %408

407:                                              ; preds = %400
  br label %482

408:                                              ; preds = %400
  %409 = load i64, ptr %14, align 8, !tbaa !9
  %410 = load i64, ptr %18, align 8, !tbaa !9
  %411 = add nsw i64 %409, %410
  store i64 %411, ptr %16, align 8, !tbaa !9
  %412 = load ptr, ptr %13, align 8, !tbaa !5
  %413 = load i64, ptr %14, align 8, !tbaa !9
  %414 = getelementptr inbounds ptr, ptr %412, i64 %413
  %415 = load ptr, ptr %414, align 8, !tbaa !5
  %416 = load i64, ptr %16, align 8, !tbaa !9
  %417 = getelementptr inbounds %"struct.TPPLPartition::DPState2", ptr %415, i64 %416
  %418 = getelementptr inbounds %"struct.TPPLPartition::DPState2", ptr %417, i32 0, i32 0
  %419 = load i8, ptr %418, align 8, !tbaa !26, !range !37, !noundef !38
  %420 = trunc i8 %419 to i1
  br i1 %420, label %421, label %481

421:                                              ; preds = %408
  %422 = load ptr, ptr %12, align 8, !tbaa !5
  %423 = load i64, ptr %16, align 8, !tbaa !9
  %424 = getelementptr inbounds %"struct.TPPLPartition::PartitionVertex", ptr %422, i64 %423
  %425 = getelementptr inbounds %"struct.TPPLPartition::PartitionVertex", ptr %424, i32 0, i32 1
  %426 = load i8, ptr %425, align 1, !tbaa !43, !range !37, !noundef !38
  %427 = trunc i8 %426 to i1
  br i1 %427, label %446, label %428

428:                                              ; preds = %421
  %429 = load i64, ptr %14, align 8, !tbaa !9
  %430 = add nsw i64 %429, 1
  store i64 %430, ptr %15, align 8, !tbaa !9
  br label %431

431:                                              ; preds = %442, %428
  %432 = load i64, ptr %15, align 8, !tbaa !9
  %433 = load i64, ptr %16, align 8, !tbaa !9
  %434 = icmp slt i64 %432, %433
  br i1 %434, label %435, label %445

435:                                              ; preds = %431
  %436 = load i64, ptr %14, align 8, !tbaa !9
  %437 = load i64, ptr %15, align 8, !tbaa !9
  %438 = load i64, ptr %16, align 8, !tbaa !9
  %439 = load ptr, ptr %12, align 8, !tbaa !5
  %440 = load ptr, ptr %13, align 8, !tbaa !5
  invoke void @_ZN13TPPLPartition5TypeAElllPNS_15PartitionVertexEPPNS_8DPState2E(ptr noundef nonnull align 1 dereferenceable(1) %53, i64 noundef %436, i64 noundef %437, i64 noundef %438, ptr noundef %439, ptr noundef %440)
          to label %441 unwind label %120

441:                                              ; preds = %435
  br label %442

442:                                              ; preds = %441
  %443 = load i64, ptr %15, align 8, !tbaa !9
  %444 = add nsw i64 %443, 1
  store i64 %444, ptr %15, align 8, !tbaa !9
  br label %431, !llvm.loop !44

445:                                              ; preds = %431
  br label %480

446:                                              ; preds = %421
  %447 = load i64, ptr %14, align 8, !tbaa !9
  %448 = add nsw i64 %447, 1
  store i64 %448, ptr %15, align 8, !tbaa !9
  br label %449

449:                                              ; preds = %469, %446
  %450 = load i64, ptr %15, align 8, !tbaa !9
  %451 = load i64, ptr %16, align 8, !tbaa !9
  %452 = sub nsw i64 %451, 1
  %453 = icmp slt i64 %450, %452
  br i1 %453, label %454, label %472

454:                                              ; preds = %449
  %455 = load ptr, ptr %12, align 8, !tbaa !5
  %456 = load i64, ptr %15, align 8, !tbaa !9
  %457 = getelementptr inbounds %"struct.TPPLPartition::PartitionVertex", ptr %455, i64 %456
  %458 = getelementptr inbounds %"struct.TPPLPartition::PartitionVertex", ptr %457, i32 0, i32 1
  %459 = load i8, ptr %458, align 1, !tbaa !43, !range !37, !noundef !38
  %460 = trunc i8 %459 to i1
  br i1 %460, label %461, label %462

461:                                              ; preds = %454
  br label %469

462:                                              ; preds = %454
  %463 = load i64, ptr %14, align 8, !tbaa !9
  %464 = load i64, ptr %15, align 8, !tbaa !9
  %465 = load i64, ptr %16, align 8, !tbaa !9
  %466 = load ptr, ptr %12, align 8, !tbaa !5
  %467 = load ptr, ptr %13, align 8, !tbaa !5
  invoke void @_ZN13TPPLPartition5TypeAElllPNS_15PartitionVertexEPPNS_8DPState2E(ptr noundef nonnull align 1 dereferenceable(1) %53, i64 noundef %463, i64 noundef %464, i64 noundef %465, ptr noundef %466, ptr noundef %467)
          to label %468 unwind label %120

468:                                              ; preds = %462
  br label %469

469:                                              ; preds = %468, %461
  %470 = load i64, ptr %15, align 8, !tbaa !9
  %471 = add nsw i64 %470, 1
  store i64 %471, ptr %15, align 8, !tbaa !9
  br label %449, !llvm.loop !45

472:                                              ; preds = %449
  %473 = load i64, ptr %14, align 8, !tbaa !9
  %474 = load i64, ptr %16, align 8, !tbaa !9
  %475 = sub nsw i64 %474, 1
  %476 = load i64, ptr %16, align 8, !tbaa !9
  %477 = load ptr, ptr %12, align 8, !tbaa !5
  %478 = load ptr, ptr %13, align 8, !tbaa !5
  invoke void @_ZN13TPPLPartition5TypeAElllPNS_15PartitionVertexEPPNS_8DPState2E(ptr noundef nonnull align 1 dereferenceable(1) %53, i64 noundef %473, i64 noundef %475, i64 noundef %476, ptr noundef %477, ptr noundef %478)
          to label %479 unwind label %120

479:                                              ; preds = %472
  br label %480

480:                                              ; preds = %479, %445
  br label %481

481:                                              ; preds = %480, %408
  br label %482

482:                                              ; preds = %481, %407
  %483 = load i64, ptr %14, align 8, !tbaa !9
  %484 = add nsw i64 %483, 1
  store i64 %484, ptr %14, align 8, !tbaa !9
  br label %394, !llvm.loop !46

485:                                              ; preds = %394
  %486 = load i64, ptr %18, align 8, !tbaa !9
  store i64 %486, ptr %16, align 8, !tbaa !9
  br label %487

487:                                              ; preds = %553, %485
  %488 = load i64, ptr %16, align 8, !tbaa !9
  %489 = load i64, ptr %17, align 8, !tbaa !9
  %490 = icmp slt i64 %488, %489
  br i1 %490, label %491, label %556

491:                                              ; preds = %487
  %492 = load ptr, ptr %12, align 8, !tbaa !5
  %493 = load i64, ptr %16, align 8, !tbaa !9
  %494 = getelementptr inbounds %"struct.TPPLPartition::PartitionVertex", ptr %492, i64 %493
  %495 = getelementptr inbounds %"struct.TPPLPartition::PartitionVertex", ptr %494, i32 0, i32 1
  %496 = load i8, ptr %495, align 1, !tbaa !43, !range !37, !noundef !38
  %497 = trunc i8 %496 to i1
  br i1 %497, label %498, label %499

498:                                              ; preds = %491
  br label %553

499:                                              ; preds = %491
  %500 = load i64, ptr %16, align 8, !tbaa !9
  %501 = load i64, ptr %18, align 8, !tbaa !9
  %502 = sub nsw i64 %500, %501
  store i64 %502, ptr %14, align 8, !tbaa !9
  %503 = load ptr, ptr %12, align 8, !tbaa !5
  %504 = load i64, ptr %14, align 8, !tbaa !9
  %505 = getelementptr inbounds %"struct.TPPLPartition::PartitionVertex", ptr %503, i64 %504
  %506 = getelementptr inbounds %"struct.TPPLPartition::PartitionVertex", ptr %505, i32 0, i32 1
  %507 = load i8, ptr %506, align 1, !tbaa !43, !range !37, !noundef !38
  %508 = trunc i8 %507 to i1
  br i1 %508, label %509, label %552

509:                                              ; preds = %499
  %510 = load ptr, ptr %13, align 8, !tbaa !5
  %511 = load i64, ptr %14, align 8, !tbaa !9
  %512 = getelementptr inbounds ptr, ptr %510, i64 %511
  %513 = load ptr, ptr %512, align 8, !tbaa !5
  %514 = load i64, ptr %16, align 8, !tbaa !9
  %515 = getelementptr inbounds %"struct.TPPLPartition::DPState2", ptr %513, i64 %514
  %516 = getelementptr inbounds %"struct.TPPLPartition::DPState2", ptr %515, i32 0, i32 0
  %517 = load i8, ptr %516, align 8, !tbaa !26, !range !37, !noundef !38
  %518 = trunc i8 %517 to i1
  br i1 %518, label %519, label %552

519:                                              ; preds = %509
  %520 = load i64, ptr %14, align 8, !tbaa !9
  %521 = load i64, ptr %14, align 8, !tbaa !9
  %522 = add nsw i64 %521, 1
  %523 = load i64, ptr %16, align 8, !tbaa !9
  %524 = load ptr, ptr %12, align 8, !tbaa !5
  %525 = load ptr, ptr %13, align 8, !tbaa !5
  invoke void @_ZN13TPPLPartition5TypeBElllPNS_15PartitionVertexEPPNS_8DPState2E(ptr noundef nonnull align 1 dereferenceable(1) %53, i64 noundef %520, i64 noundef %522, i64 noundef %523, ptr noundef %524, ptr noundef %525)
          to label %526 unwind label %120

526:                                              ; preds = %519
  %527 = load i64, ptr %14, align 8, !tbaa !9
  %528 = add nsw i64 %527, 2
  store i64 %528, ptr %15, align 8, !tbaa !9
  br label %529

529:                                              ; preds = %548, %526
  %530 = load i64, ptr %15, align 8, !tbaa !9
  %531 = load i64, ptr %16, align 8, !tbaa !9
  %532 = icmp slt i64 %530, %531
  br i1 %532, label %533, label %551

533:                                              ; preds = %529
  %534 = load ptr, ptr %12, align 8, !tbaa !5
  %535 = load i64, ptr %15, align 8, !tbaa !9
  %536 = getelementptr inbounds %"struct.TPPLPartition::PartitionVertex", ptr %534, i64 %535
  %537 = getelementptr inbounds %"struct.TPPLPartition::PartitionVertex", ptr %536, i32 0, i32 1
  %538 = load i8, ptr %537, align 1, !tbaa !43, !range !37, !noundef !38
  %539 = trunc i8 %538 to i1
  br i1 %539, label %540, label %541

540:                                              ; preds = %533
  br label %548

541:                                              ; preds = %533
  %542 = load i64, ptr %14, align 8, !tbaa !9
  %543 = load i64, ptr %15, align 8, !tbaa !9
  %544 = load i64, ptr %16, align 8, !tbaa !9
  %545 = load ptr, ptr %12, align 8, !tbaa !5
  %546 = load ptr, ptr %13, align 8, !tbaa !5
  invoke void @_ZN13TPPLPartition5TypeBElllPNS_15PartitionVertexEPPNS_8DPState2E(ptr noundef nonnull align 1 dereferenceable(1) %53, i64 noundef %542, i64 noundef %543, i64 noundef %544, ptr noundef %545, ptr noundef %546)
          to label %547 unwind label %120

547:                                              ; preds = %541
  br label %548

548:                                              ; preds = %547, %540
  %549 = load i64, ptr %15, align 8, !tbaa !9
  %550 = add nsw i64 %549, 1
  store i64 %550, ptr %15, align 8, !tbaa !9
  br label %529, !llvm.loop !47

551:                                              ; preds = %529
  br label %552

552:                                              ; preds = %551, %509, %499
  br label %553

553:                                              ; preds = %552, %498
  %554 = load i64, ptr %16, align 8, !tbaa !9
  %555 = add nsw i64 %554, 1
  store i64 %555, ptr %16, align 8, !tbaa !9
  br label %487, !llvm.loop !48

556:                                              ; preds = %487
  br label %557

557:                                              ; preds = %556
  %558 = load i64, ptr %18, align 8, !tbaa !9
  %559 = add nsw i64 %558, 1
  store i64 %559, ptr %18, align 8, !tbaa !9
  br label %389, !llvm.loop !49

560:                                              ; preds = %389
  store i32 1, ptr %27, align 4, !tbaa !16
  %561 = getelementptr inbounds %"struct.TPPLPartition::Diagonal", ptr %22, i32 0, i32 0
  store i64 0, ptr %561, align 8, !tbaa !39
  %562 = load i64, ptr %17, align 8, !tbaa !9
  %563 = sub nsw i64 %562, 1
  %564 = getelementptr inbounds %"struct.TPPLPartition::Diagonal", ptr %22, i32 0, i32 1
  store i64 %563, ptr %564, align 8, !tbaa !41
  invoke void @_ZNSt7__cxx114listIN13TPPLPartition8DiagonalESaIS2_EE10push_frontERKS2_(ptr noundef nonnull align 8 dereferenceable(24) %19, ptr noundef nonnull align 8 dereferenceable(16) %22)
          to label %565 unwind label %120

565:                                              ; preds = %560
  br label %566

566:                                              ; preds = %741, %579, %565
  %567 = call noundef zeroext i1 @_ZNKSt7__cxx114listIN13TPPLPartition8DiagonalESaIS2_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %19) #9
  %568 = xor i1 %567, true
  br i1 %568, label %569, label %742

569:                                              ; preds = %566
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #9
  %570 = call ptr @_ZNSt7__cxx114listIN13TPPLPartition8DiagonalESaIS2_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %19) #9
  %571 = getelementptr inbounds %"struct.std::_List_iterator.5", ptr %35, i32 0, i32 0
  store ptr %570, ptr %571, align 8
  %572 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNKSt14_List_iteratorIN13TPPLPartition8DiagonalEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %35) #9
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %21, ptr align 8 %572, i64 16, i1 false), !tbaa.struct !50
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #9
  call void @_ZNSt7__cxx114listIN13TPPLPartition8DiagonalESaIS2_EE9pop_frontEv(ptr noundef nonnull align 8 dereferenceable(24) %19) #9
  %573 = getelementptr inbounds %"struct.TPPLPartition::Diagonal", ptr %21, i32 0, i32 1
  %574 = load i64, ptr %573, align 8, !tbaa !41
  %575 = getelementptr inbounds %"struct.TPPLPartition::Diagonal", ptr %21, i32 0, i32 0
  %576 = load i64, ptr %575, align 8, !tbaa !39
  %577 = sub nsw i64 %574, %576
  %578 = icmp sle i64 %577, 1
  br i1 %578, label %579, label %580

579:                                              ; preds = %569
  br label %566, !llvm.loop !51

580:                                              ; preds = %569
  %581 = load ptr, ptr %13, align 8, !tbaa !5
  %582 = getelementptr inbounds %"struct.TPPLPartition::Diagonal", ptr %21, i32 0, i32 0
  %583 = load i64, ptr %582, align 8, !tbaa !39
  %584 = getelementptr inbounds ptr, ptr %581, i64 %583
  %585 = load ptr, ptr %584, align 8, !tbaa !5
  %586 = getelementptr inbounds %"struct.TPPLPartition::Diagonal", ptr %21, i32 0, i32 1
  %587 = load i64, ptr %586, align 8, !tbaa !41
  %588 = getelementptr inbounds %"struct.TPPLPartition::DPState2", ptr %585, i64 %587
  %589 = getelementptr inbounds %"struct.TPPLPartition::DPState2", ptr %588, i32 0, i32 2
  store ptr %589, ptr %23, align 8, !tbaa !5
  %590 = load ptr, ptr %23, align 8, !tbaa !5
  %591 = call noundef zeroext i1 @_ZNKSt7__cxx114listIN13TPPLPartition8DiagonalESaIS2_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %590) #9
  br i1 %591, label %592, label %593

592:                                              ; preds = %580
  store i32 0, ptr %27, align 4, !tbaa !16
  br label %742

593:                                              ; preds = %580
  %594 = load ptr, ptr %12, align 8, !tbaa !5
  %595 = getelementptr inbounds %"struct.TPPLPartition::Diagonal", ptr %21, i32 0, i32 0
  %596 = load i64, ptr %595, align 8, !tbaa !39
  %597 = getelementptr inbounds %"struct.TPPLPartition::PartitionVertex", ptr %594, i64 %596
  %598 = getelementptr inbounds %"struct.TPPLPartition::PartitionVertex", ptr %597, i32 0, i32 1
  %599 = load i8, ptr %598, align 1, !tbaa !43, !range !37, !noundef !38
  %600 = trunc i8 %599 to i1
  br i1 %600, label %673, label %601

601:                                              ; preds = %593
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #9
  %602 = load ptr, ptr %23, align 8, !tbaa !5
  %603 = call ptr @_ZNSt7__cxx114listIN13TPPLPartition8DiagonalESaIS2_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %602) #9
  %604 = getelementptr inbounds %"struct.std::_List_iterator.5", ptr %36, i32 0, i32 0
  store ptr %603, ptr %604, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %25, ptr align 8 %36, i64 8, i1 false), !tbaa.struct !52
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #9
  %605 = call ptr @_ZNSt14_List_iteratorIN13TPPLPartition8DiagonalEEmmEi(ptr noundef nonnull align 8 dereferenceable(8) %25, i32 noundef 0) #9
  %606 = getelementptr inbounds %"struct.std::_List_iterator.5", ptr %37, i32 0, i32 0
  store ptr %605, ptr %606, align 8
  %607 = call noundef ptr @_ZNKSt14_List_iteratorIN13TPPLPartition8DiagonalEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %25) #9
  %608 = getelementptr inbounds %"struct.TPPLPartition::Diagonal", ptr %607, i32 0, i32 1
  %609 = load i64, ptr %608, align 8, !tbaa !41
  store i64 %609, ptr %15, align 8, !tbaa !9
  %610 = load i64, ptr %15, align 8, !tbaa !9
  %611 = getelementptr inbounds %"struct.TPPLPartition::Diagonal", ptr %22, i32 0, i32 0
  store i64 %610, ptr %611, align 8, !tbaa !39
  %612 = getelementptr inbounds %"struct.TPPLPartition::Diagonal", ptr %21, i32 0, i32 1
  %613 = load i64, ptr %612, align 8, !tbaa !41
  %614 = getelementptr inbounds %"struct.TPPLPartition::Diagonal", ptr %22, i32 0, i32 1
  store i64 %613, ptr %614, align 8, !tbaa !41
  invoke void @_ZNSt7__cxx114listIN13TPPLPartition8DiagonalESaIS2_EE10push_frontERKS2_(ptr noundef nonnull align 8 dereferenceable(24) %19, ptr noundef nonnull align 8 dereferenceable(16) %22)
          to label %615 unwind label %120

615:                                              ; preds = %601
  %616 = load i64, ptr %15, align 8, !tbaa !9
  %617 = getelementptr inbounds %"struct.TPPLPartition::Diagonal", ptr %21, i32 0, i32 0
  %618 = load i64, ptr %617, align 8, !tbaa !39
  %619 = sub nsw i64 %616, %618
  %620 = icmp sgt i64 %619, 1
  br i1 %620, label %621, label %672

621:                                              ; preds = %615
  %622 = call noundef ptr @_ZNKSt14_List_iteratorIN13TPPLPartition8DiagonalEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %25) #9
  %623 = getelementptr inbounds %"struct.TPPLPartition::Diagonal", ptr %622, i32 0, i32 0
  %624 = load i64, ptr %623, align 8, !tbaa !39
  %625 = call noundef ptr @_ZNKSt14_List_iteratorIN13TPPLPartition8DiagonalEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %25) #9
  %626 = getelementptr inbounds %"struct.TPPLPartition::Diagonal", ptr %625, i32 0, i32 1
  %627 = load i64, ptr %626, align 8, !tbaa !41
  %628 = icmp ne i64 %624, %627
  br i1 %628, label %629, label %665

629:                                              ; preds = %621
  %630 = load ptr, ptr %13, align 8, !tbaa !5
  %631 = getelementptr inbounds %"struct.TPPLPartition::Diagonal", ptr %21, i32 0, i32 0
  %632 = load i64, ptr %631, align 8, !tbaa !39
  %633 = getelementptr inbounds ptr, ptr %630, i64 %632
  %634 = load ptr, ptr %633, align 8, !tbaa !5
  %635 = load i64, ptr %15, align 8, !tbaa !9
  %636 = getelementptr inbounds %"struct.TPPLPartition::DPState2", ptr %634, i64 %635
  %637 = getelementptr inbounds %"struct.TPPLPartition::DPState2", ptr %636, i32 0, i32 2
  store ptr %637, ptr %24, align 8, !tbaa !5
  br label %638

638:                                              ; preds = %659, %629
  br label %639

639:                                              ; preds = %638
  %640 = load ptr, ptr %24, align 8, !tbaa !5
  %641 = call noundef zeroext i1 @_ZNKSt7__cxx114listIN13TPPLPartition8DiagonalESaIS2_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %640) #9
  br i1 %641, label %642, label %643

642:                                              ; preds = %639
  store i32 0, ptr %27, align 4, !tbaa !16
  br label %660

643:                                              ; preds = %639
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #9
  %644 = load ptr, ptr %24, align 8, !tbaa !5
  %645 = call ptr @_ZNSt7__cxx114listIN13TPPLPartition8DiagonalESaIS2_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %644) #9
  %646 = getelementptr inbounds %"struct.std::_List_iterator.5", ptr %38, i32 0, i32 0
  store ptr %645, ptr %646, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %26, ptr align 8 %38, i64 8, i1 false), !tbaa.struct !52
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #9
  %647 = call ptr @_ZNSt14_List_iteratorIN13TPPLPartition8DiagonalEEmmEi(ptr noundef nonnull align 8 dereferenceable(8) %26, i32 noundef 0) #9
  %648 = getelementptr inbounds %"struct.std::_List_iterator.5", ptr %39, i32 0, i32 0
  store ptr %647, ptr %648, align 8
  %649 = call noundef ptr @_ZNKSt14_List_iteratorIN13TPPLPartition8DiagonalEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %25) #9
  %650 = getelementptr inbounds %"struct.TPPLPartition::Diagonal", ptr %649, i32 0, i32 0
  %651 = load i64, ptr %650, align 8, !tbaa !39
  %652 = call noundef ptr @_ZNKSt14_List_iteratorIN13TPPLPartition8DiagonalEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %26) #9
  %653 = getelementptr inbounds %"struct.TPPLPartition::Diagonal", ptr %652, i32 0, i32 0
  %654 = load i64, ptr %653, align 8, !tbaa !39
  %655 = icmp ne i64 %651, %654
  br i1 %655, label %656, label %658

656:                                              ; preds = %643
  %657 = load ptr, ptr %24, align 8, !tbaa !5
  call void @_ZNSt7__cxx114listIN13TPPLPartition8DiagonalESaIS2_EE8pop_backEv(ptr noundef nonnull align 8 dereferenceable(24) %657) #9
  br label %659

658:                                              ; preds = %643
  br label %660

659:                                              ; preds = %656
  br label %638, !llvm.loop !53

660:                                              ; preds = %658, %642
  %661 = load i32, ptr %27, align 4, !tbaa !16
  %662 = icmp eq i32 %661, 0
  br i1 %662, label %663, label %664

663:                                              ; preds = %660
  br label %742

664:                                              ; preds = %660
  br label %665

665:                                              ; preds = %664, %621
  %666 = getelementptr inbounds %"struct.TPPLPartition::Diagonal", ptr %21, i32 0, i32 0
  %667 = load i64, ptr %666, align 8, !tbaa !39
  %668 = getelementptr inbounds %"struct.TPPLPartition::Diagonal", ptr %22, i32 0, i32 0
  store i64 %667, ptr %668, align 8, !tbaa !39
  %669 = load i64, ptr %15, align 8, !tbaa !9
  %670 = getelementptr inbounds %"struct.TPPLPartition::Diagonal", ptr %22, i32 0, i32 1
  store i64 %669, ptr %670, align 8, !tbaa !41
  invoke void @_ZNSt7__cxx114listIN13TPPLPartition8DiagonalESaIS2_EE10push_frontERKS2_(ptr noundef nonnull align 8 dereferenceable(24) %19, ptr noundef nonnull align 8 dereferenceable(16) %22)
          to label %671 unwind label %120

671:                                              ; preds = %665
  br label %672

672:                                              ; preds = %671, %615
  br label %741

673:                                              ; preds = %593
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #9
  %674 = load ptr, ptr %23, align 8, !tbaa !5
  %675 = call ptr @_ZNSt7__cxx114listIN13TPPLPartition8DiagonalESaIS2_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %674) #9
  %676 = getelementptr inbounds %"struct.std::_List_iterator.5", ptr %40, i32 0, i32 0
  store ptr %675, ptr %676, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %25, ptr align 8 %40, i64 8, i1 false), !tbaa.struct !52
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #9
  %677 = call noundef ptr @_ZNKSt14_List_iteratorIN13TPPLPartition8DiagonalEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %25) #9
  %678 = getelementptr inbounds %"struct.TPPLPartition::Diagonal", ptr %677, i32 0, i32 0
  %679 = load i64, ptr %678, align 8, !tbaa !39
  store i64 %679, ptr %15, align 8, !tbaa !9
  %680 = getelementptr inbounds %"struct.TPPLPartition::Diagonal", ptr %21, i32 0, i32 0
  %681 = load i64, ptr %680, align 8, !tbaa !39
  %682 = getelementptr inbounds %"struct.TPPLPartition::Diagonal", ptr %22, i32 0, i32 0
  store i64 %681, ptr %682, align 8, !tbaa !39
  %683 = load i64, ptr %15, align 8, !tbaa !9
  %684 = getelementptr inbounds %"struct.TPPLPartition::Diagonal", ptr %22, i32 0, i32 1
  store i64 %683, ptr %684, align 8, !tbaa !41
  invoke void @_ZNSt7__cxx114listIN13TPPLPartition8DiagonalESaIS2_EE10push_frontERKS2_(ptr noundef nonnull align 8 dereferenceable(24) %19, ptr noundef nonnull align 8 dereferenceable(16) %22)
          to label %685 unwind label %120

685:                                              ; preds = %673
  %686 = getelementptr inbounds %"struct.TPPLPartition::Diagonal", ptr %21, i32 0, i32 1
  %687 = load i64, ptr %686, align 8, !tbaa !41
  %688 = load i64, ptr %15, align 8, !tbaa !9
  %689 = sub nsw i64 %687, %688
  %690 = icmp sgt i64 %689, 1
  br i1 %690, label %691, label %740

691:                                              ; preds = %685
  %692 = call noundef ptr @_ZNKSt14_List_iteratorIN13TPPLPartition8DiagonalEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %25) #9
  %693 = getelementptr inbounds %"struct.TPPLPartition::Diagonal", ptr %692, i32 0, i32 0
  %694 = load i64, ptr %693, align 8, !tbaa !39
  %695 = call noundef ptr @_ZNKSt14_List_iteratorIN13TPPLPartition8DiagonalEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %25) #9
  %696 = getelementptr inbounds %"struct.TPPLPartition::Diagonal", ptr %695, i32 0, i32 1
  %697 = load i64, ptr %696, align 8, !tbaa !41
  %698 = icmp ne i64 %694, %697
  br i1 %698, label %699, label %733

699:                                              ; preds = %691
  %700 = load ptr, ptr %13, align 8, !tbaa !5
  %701 = load i64, ptr %15, align 8, !tbaa !9
  %702 = getelementptr inbounds ptr, ptr %700, i64 %701
  %703 = load ptr, ptr %702, align 8, !tbaa !5
  %704 = getelementptr inbounds %"struct.TPPLPartition::Diagonal", ptr %21, i32 0, i32 1
  %705 = load i64, ptr %704, align 8, !tbaa !41
  %706 = getelementptr inbounds %"struct.TPPLPartition::DPState2", ptr %703, i64 %705
  %707 = getelementptr inbounds %"struct.TPPLPartition::DPState2", ptr %706, i32 0, i32 2
  store ptr %707, ptr %24, align 8, !tbaa !5
  br label %708

708:                                              ; preds = %727, %699
  br label %709

709:                                              ; preds = %708
  %710 = load ptr, ptr %24, align 8, !tbaa !5
  %711 = call noundef zeroext i1 @_ZNKSt7__cxx114listIN13TPPLPartition8DiagonalESaIS2_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %710) #9
  br i1 %711, label %712, label %713

712:                                              ; preds = %709
  store i32 0, ptr %27, align 4, !tbaa !16
  br label %728

713:                                              ; preds = %709
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #9
  %714 = load ptr, ptr %24, align 8, !tbaa !5
  %715 = call ptr @_ZNSt7__cxx114listIN13TPPLPartition8DiagonalESaIS2_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %714) #9
  %716 = getelementptr inbounds %"struct.std::_List_iterator.5", ptr %41, i32 0, i32 0
  store ptr %715, ptr %716, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %26, ptr align 8 %41, i64 8, i1 false), !tbaa.struct !52
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #9
  %717 = call noundef ptr @_ZNKSt14_List_iteratorIN13TPPLPartition8DiagonalEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %25) #9
  %718 = getelementptr inbounds %"struct.TPPLPartition::Diagonal", ptr %717, i32 0, i32 1
  %719 = load i64, ptr %718, align 8, !tbaa !41
  %720 = call noundef ptr @_ZNKSt14_List_iteratorIN13TPPLPartition8DiagonalEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %26) #9
  %721 = getelementptr inbounds %"struct.TPPLPartition::Diagonal", ptr %720, i32 0, i32 1
  %722 = load i64, ptr %721, align 8, !tbaa !41
  %723 = icmp ne i64 %719, %722
  br i1 %723, label %724, label %726

724:                                              ; preds = %713
  %725 = load ptr, ptr %24, align 8, !tbaa !5
  call void @_ZNSt7__cxx114listIN13TPPLPartition8DiagonalESaIS2_EE9pop_frontEv(ptr noundef nonnull align 8 dereferenceable(24) %725) #9
  br label %727

726:                                              ; preds = %713
  br label %728

727:                                              ; preds = %724
  br label %708, !llvm.loop !54

728:                                              ; preds = %726, %712
  %729 = load i32, ptr %27, align 4, !tbaa !16
  %730 = icmp eq i32 %729, 0
  br i1 %730, label %731, label %732

731:                                              ; preds = %728
  br label %742

732:                                              ; preds = %728
  br label %733

733:                                              ; preds = %732, %691
  %734 = load i64, ptr %15, align 8, !tbaa !9
  %735 = getelementptr inbounds %"struct.TPPLPartition::Diagonal", ptr %22, i32 0, i32 0
  store i64 %734, ptr %735, align 8, !tbaa !39
  %736 = getelementptr inbounds %"struct.TPPLPartition::Diagonal", ptr %21, i32 0, i32 1
  %737 = load i64, ptr %736, align 8, !tbaa !41
  %738 = getelementptr inbounds %"struct.TPPLPartition::Diagonal", ptr %22, i32 0, i32 1
  store i64 %737, ptr %738, align 8, !tbaa !41
  invoke void @_ZNSt7__cxx114listIN13TPPLPartition8DiagonalESaIS2_EE10push_frontERKS2_(ptr noundef nonnull align 8 dereferenceable(24) %19, ptr noundef nonnull align 8 dereferenceable(16) %22)
          to label %739 unwind label %120

739:                                              ; preds = %733
  br label %740

740:                                              ; preds = %739, %685
  br label %741

741:                                              ; preds = %740, %672
  br label %566, !llvm.loop !51

742:                                              ; preds = %731, %663, %592, %566
  %743 = load i32, ptr %27, align 4, !tbaa !16
  %744 = icmp eq i32 %743, 0
  br i1 %744, label %745, label %782

745:                                              ; preds = %742
  store i64 0, ptr %14, align 8, !tbaa !9
  br label %746

746:                                              ; preds = %769, %745
  %747 = load i64, ptr %14, align 8, !tbaa !9
  %748 = load i64, ptr %17, align 8, !tbaa !9
  %749 = icmp slt i64 %747, %748
  br i1 %749, label %750, label %772

750:                                              ; preds = %746
  %751 = load ptr, ptr %13, align 8, !tbaa !5
  %752 = load i64, ptr %14, align 8, !tbaa !9
  %753 = getelementptr inbounds ptr, ptr %751, i64 %752
  %754 = load ptr, ptr %753, align 8, !tbaa !5
  %755 = icmp eq ptr %754, null
  br i1 %755, label %768, label %756

756:                                              ; preds = %750
  %757 = getelementptr inbounds i8, ptr %754, i64 -8
  %758 = load i64, ptr %757, align 8
  %759 = getelementptr inbounds %"struct.TPPLPartition::DPState2", ptr %754, i64 %758
  %760 = icmp eq ptr %754, %759
  br i1 %760, label %765, label %761

761:                                              ; preds = %761, %756
  %762 = phi ptr [ %759, %756 ], [ %763, %761 ]
  %763 = getelementptr inbounds %"struct.TPPLPartition::DPState2", ptr %762, i64 -1
  call void @_ZN13TPPLPartition8DPState2D2Ev(ptr noundef nonnull align 8 dereferenceable(40) %763) #9
  %764 = icmp eq ptr %763, %754
  br i1 %764, label %765, label %761

765:                                              ; preds = %761, %756
  %766 = mul i64 40, %758
  %767 = add i64 %766, 8
  call void @_ZdaPvm(ptr noundef %757, i64 noundef %767) #11
  br label %768

768:                                              ; preds = %765, %750
  br label %769

769:                                              ; preds = %768
  %770 = load i64, ptr %14, align 8, !tbaa !9
  %771 = add nsw i64 %770, 1
  store i64 %771, ptr %14, align 8, !tbaa !9
  br label %746, !llvm.loop !55

772:                                              ; preds = %746
  %773 = load ptr, ptr %13, align 8, !tbaa !5
  %774 = icmp eq ptr %773, null
  br i1 %774, label %776, label %775

775:                                              ; preds = %772
  call void @_ZdaPv(ptr noundef %773) #11
  br label %776

776:                                              ; preds = %775, %772
  %777 = load ptr, ptr %12, align 8, !tbaa !5
  %778 = icmp eq ptr %777, null
  br i1 %778, label %780, label %779

779:                                              ; preds = %776
  call void @_ZdaPv(ptr noundef %777) #11
  br label %780

780:                                              ; preds = %779, %776
  %781 = load i32, ptr %27, align 4, !tbaa !16
  store i32 %781, ptr %4, align 4
  store i32 1, ptr %42, align 4
  br label %972

782:                                              ; preds = %742
  %783 = getelementptr inbounds %"struct.TPPLPartition::Diagonal", ptr %22, i32 0, i32 0
  store i64 0, ptr %783, align 8, !tbaa !39
  %784 = load i64, ptr %17, align 8, !tbaa !9
  %785 = sub nsw i64 %784, 1
  %786 = getelementptr inbounds %"struct.TPPLPartition::Diagonal", ptr %22, i32 0, i32 1
  store i64 %785, ptr %786, align 8, !tbaa !41
  invoke void @_ZNSt7__cxx114listIN13TPPLPartition8DiagonalESaIS2_EE10push_frontERKS2_(ptr noundef nonnull align 8 dereferenceable(24) %19, ptr noundef nonnull align 8 dereferenceable(16) %22)
          to label %787 unwind label %120

787:                                              ; preds = %782
  br label %788

788:                                              ; preds = %934, %801, %787
  %789 = call noundef zeroext i1 @_ZNKSt7__cxx114listIN13TPPLPartition8DiagonalESaIS2_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %19) #9
  %790 = xor i1 %789, true
  br i1 %790, label %791, label %935

791:                                              ; preds = %788
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #9
  %792 = call ptr @_ZNSt7__cxx114listIN13TPPLPartition8DiagonalESaIS2_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %19) #9
  %793 = getelementptr inbounds %"struct.std::_List_iterator.5", ptr %43, i32 0, i32 0
  store ptr %792, ptr %793, align 8
  %794 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNKSt14_List_iteratorIN13TPPLPartition8DiagonalEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %43) #9
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %21, ptr align 8 %794, i64 16, i1 false), !tbaa.struct !50
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #9
  call void @_ZNSt7__cxx114listIN13TPPLPartition8DiagonalESaIS2_EE9pop_frontEv(ptr noundef nonnull align 8 dereferenceable(24) %19) #9
  %795 = getelementptr inbounds %"struct.TPPLPartition::Diagonal", ptr %21, i32 0, i32 1
  %796 = load i64, ptr %795, align 8, !tbaa !41
  %797 = getelementptr inbounds %"struct.TPPLPartition::Diagonal", ptr %21, i32 0, i32 0
  %798 = load i64, ptr %797, align 8, !tbaa !39
  %799 = sub nsw i64 %796, %798
  %800 = icmp sle i64 %799, 1
  br i1 %800, label %801, label %802

801:                                              ; preds = %791
  br label %788, !llvm.loop !56

802:                                              ; preds = %791
  call void @_ZNSt6vectorIlSaIlEE5clearEv(ptr noundef nonnull align 8 dereferenceable(24) %31) #9
  call void @_ZNSt7__cxx114listIN13TPPLPartition8DiagonalESaIS2_EE5clearEv(ptr noundef nonnull align 8 dereferenceable(24) %20) #9
  %803 = getelementptr inbounds %"struct.TPPLPartition::Diagonal", ptr %21, i32 0, i32 0
  invoke void @_ZNSt6vectorIlSaIlEE9push_backERKl(ptr noundef nonnull align 8 dereferenceable(24) %31, ptr noundef nonnull align 8 dereferenceable(8) %803)
          to label %804 unwind label %120

804:                                              ; preds = %802
  %805 = getelementptr inbounds %"struct.TPPLPartition::Diagonal", ptr %21, i32 0, i32 1
  invoke void @_ZNSt6vectorIlSaIlEE9push_backERKl(ptr noundef nonnull align 8 dereferenceable(24) %31, ptr noundef nonnull align 8 dereferenceable(8) %805)
          to label %806 unwind label %120

806:                                              ; preds = %804
  invoke void @_ZNSt7__cxx114listIN13TPPLPartition8DiagonalESaIS2_EE10push_frontERKS2_(ptr noundef nonnull align 8 dereferenceable(24) %20, ptr noundef nonnull align 8 dereferenceable(16) %21)
          to label %807 unwind label %120

807:                                              ; preds = %806
  br label %808

808:                                              ; preds = %898, %821, %807
  %809 = call noundef zeroext i1 @_ZNKSt7__cxx114listIN13TPPLPartition8DiagonalESaIS2_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %20) #9
  %810 = xor i1 %809, true
  br i1 %810, label %811, label %899

811:                                              ; preds = %808
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #9
  %812 = call ptr @_ZNSt7__cxx114listIN13TPPLPartition8DiagonalESaIS2_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %20) #9
  %813 = getelementptr inbounds %"struct.std::_List_iterator.5", ptr %44, i32 0, i32 0
  store ptr %812, ptr %813, align 8
  %814 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNKSt14_List_iteratorIN13TPPLPartition8DiagonalEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %44) #9
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %21, ptr align 8 %814, i64 16, i1 false), !tbaa.struct !50
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #9
  call void @_ZNSt7__cxx114listIN13TPPLPartition8DiagonalESaIS2_EE9pop_frontEv(ptr noundef nonnull align 8 dereferenceable(24) %20) #9
  %815 = getelementptr inbounds %"struct.TPPLPartition::Diagonal", ptr %21, i32 0, i32 1
  %816 = load i64, ptr %815, align 8, !tbaa !41
  %817 = getelementptr inbounds %"struct.TPPLPartition::Diagonal", ptr %21, i32 0, i32 0
  %818 = load i64, ptr %817, align 8, !tbaa !39
  %819 = sub nsw i64 %816, %818
  %820 = icmp sle i64 %819, 1
  br i1 %820, label %821, label %822

821:                                              ; preds = %811
  br label %808, !llvm.loop !57

822:                                              ; preds = %811
  store i8 1, ptr %33, align 1, !tbaa !58
  store i8 1, ptr %34, align 1, !tbaa !58
  %823 = load ptr, ptr %13, align 8, !tbaa !5
  %824 = getelementptr inbounds %"struct.TPPLPartition::Diagonal", ptr %21, i32 0, i32 0
  %825 = load i64, ptr %824, align 8, !tbaa !39
  %826 = getelementptr inbounds ptr, ptr %823, i64 %825
  %827 = load ptr, ptr %826, align 8, !tbaa !5
  %828 = getelementptr inbounds %"struct.TPPLPartition::Diagonal", ptr %21, i32 0, i32 1
  %829 = load i64, ptr %828, align 8, !tbaa !41
  %830 = getelementptr inbounds %"struct.TPPLPartition::DPState2", ptr %827, i64 %829
  %831 = getelementptr inbounds %"struct.TPPLPartition::DPState2", ptr %830, i32 0, i32 2
  store ptr %831, ptr %23, align 8, !tbaa !5
  %832 = load ptr, ptr %12, align 8, !tbaa !5
  %833 = getelementptr inbounds %"struct.TPPLPartition::Diagonal", ptr %21, i32 0, i32 0
  %834 = load i64, ptr %833, align 8, !tbaa !39
  %835 = getelementptr inbounds %"struct.TPPLPartition::PartitionVertex", ptr %832, i64 %834
  %836 = getelementptr inbounds %"struct.TPPLPartition::PartitionVertex", ptr %835, i32 0, i32 1
  %837 = load i8, ptr %836, align 1, !tbaa !43, !range !37, !noundef !38
  %838 = trunc i8 %837 to i1
  br i1 %838, label %857, label %839

839:                                              ; preds = %822
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #9
  %840 = load ptr, ptr %23, align 8, !tbaa !5
  %841 = call ptr @_ZNSt7__cxx114listIN13TPPLPartition8DiagonalESaIS2_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %840) #9
  %842 = getelementptr inbounds %"struct.std::_List_iterator.5", ptr %45, i32 0, i32 0
  store ptr %841, ptr %842, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %25, ptr align 8 %45, i64 8, i1 false), !tbaa.struct !52
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #9
  %843 = call ptr @_ZNSt14_List_iteratorIN13TPPLPartition8DiagonalEEmmEi(ptr noundef nonnull align 8 dereferenceable(8) %25, i32 noundef 0) #9
  %844 = getelementptr inbounds %"struct.std::_List_iterator.5", ptr %46, i32 0, i32 0
  store ptr %843, ptr %844, align 8
  %845 = call noundef ptr @_ZNKSt14_List_iteratorIN13TPPLPartition8DiagonalEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %25) #9
  %846 = getelementptr inbounds %"struct.TPPLPartition::Diagonal", ptr %845, i32 0, i32 1
  %847 = load i64, ptr %846, align 8, !tbaa !41
  store i64 %847, ptr %15, align 8, !tbaa !9
  %848 = call noundef ptr @_ZNKSt14_List_iteratorIN13TPPLPartition8DiagonalEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %25) #9
  %849 = getelementptr inbounds %"struct.TPPLPartition::Diagonal", ptr %848, i32 0, i32 0
  %850 = load i64, ptr %849, align 8, !tbaa !39
  %851 = call noundef ptr @_ZNKSt14_List_iteratorIN13TPPLPartition8DiagonalEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %25) #9
  %852 = getelementptr inbounds %"struct.TPPLPartition::Diagonal", ptr %851, i32 0, i32 1
  %853 = load i64, ptr %852, align 8, !tbaa !41
  %854 = icmp ne i64 %850, %853
  br i1 %854, label %855, label %856

855:                                              ; preds = %839
  store i8 0, ptr %33, align 1, !tbaa !58
  br label %856

856:                                              ; preds = %855, %839
  br label %873

857:                                              ; preds = %822
  call void @llvm.lifetime.start.p0(i64 8, ptr %47) #9
  %858 = load ptr, ptr %23, align 8, !tbaa !5
  %859 = call ptr @_ZNSt7__cxx114listIN13TPPLPartition8DiagonalESaIS2_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %858) #9
  %860 = getelementptr inbounds %"struct.std::_List_iterator.5", ptr %47, i32 0, i32 0
  store ptr %859, ptr %860, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %25, ptr align 8 %47, i64 8, i1 false), !tbaa.struct !52
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #9
  %861 = call noundef ptr @_ZNKSt14_List_iteratorIN13TPPLPartition8DiagonalEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %25) #9
  %862 = getelementptr inbounds %"struct.TPPLPartition::Diagonal", ptr %861, i32 0, i32 0
  %863 = load i64, ptr %862, align 8, !tbaa !39
  store i64 %863, ptr %15, align 8, !tbaa !9
  %864 = call noundef ptr @_ZNKSt14_List_iteratorIN13TPPLPartition8DiagonalEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %25) #9
  %865 = getelementptr inbounds %"struct.TPPLPartition::Diagonal", ptr %864, i32 0, i32 0
  %866 = load i64, ptr %865, align 8, !tbaa !39
  %867 = call noundef ptr @_ZNKSt14_List_iteratorIN13TPPLPartition8DiagonalEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %25) #9
  %868 = getelementptr inbounds %"struct.TPPLPartition::Diagonal", ptr %867, i32 0, i32 1
  %869 = load i64, ptr %868, align 8, !tbaa !41
  %870 = icmp ne i64 %866, %869
  br i1 %870, label %871, label %872

871:                                              ; preds = %857
  store i8 0, ptr %34, align 1, !tbaa !58
  br label %872

872:                                              ; preds = %871, %857
  br label %873

873:                                              ; preds = %872, %856
  %874 = getelementptr inbounds %"struct.TPPLPartition::Diagonal", ptr %21, i32 0, i32 0
  %875 = load i64, ptr %874, align 8, !tbaa !39
  %876 = getelementptr inbounds %"struct.TPPLPartition::Diagonal", ptr %22, i32 0, i32 0
  store i64 %875, ptr %876, align 8, !tbaa !39
  %877 = load i64, ptr %15, align 8, !tbaa !9
  %878 = getelementptr inbounds %"struct.TPPLPartition::Diagonal", ptr %22, i32 0, i32 1
  store i64 %877, ptr %878, align 8, !tbaa !41
  %879 = load i8, ptr %33, align 1, !tbaa !58, !range !37, !noundef !38
  %880 = trunc i8 %879 to i1
  br i1 %880, label %881, label %883

881:                                              ; preds = %873
  invoke void @_ZNSt7__cxx114listIN13TPPLPartition8DiagonalESaIS2_EE9push_backERKS2_(ptr noundef nonnull align 8 dereferenceable(24) %19, ptr noundef nonnull align 8 dereferenceable(16) %22)
          to label %882 unwind label %120

882:                                              ; preds = %881
  br label %885

883:                                              ; preds = %873
  invoke void @_ZNSt7__cxx114listIN13TPPLPartition8DiagonalESaIS2_EE9push_backERKS2_(ptr noundef nonnull align 8 dereferenceable(24) %20, ptr noundef nonnull align 8 dereferenceable(16) %22)
          to label %884 unwind label %120

884:                                              ; preds = %883
  br label %885

885:                                              ; preds = %884, %882
  %886 = load i64, ptr %15, align 8, !tbaa !9
  %887 = getelementptr inbounds %"struct.TPPLPartition::Diagonal", ptr %22, i32 0, i32 0
  store i64 %886, ptr %887, align 8, !tbaa !39
  %888 = getelementptr inbounds %"struct.TPPLPartition::Diagonal", ptr %21, i32 0, i32 1
  %889 = load i64, ptr %888, align 8, !tbaa !41
  %890 = getelementptr inbounds %"struct.TPPLPartition::Diagonal", ptr %22, i32 0, i32 1
  store i64 %889, ptr %890, align 8, !tbaa !41
  %891 = load i8, ptr %34, align 1, !tbaa !58, !range !37, !noundef !38
  %892 = trunc i8 %891 to i1
  br i1 %892, label %893, label %895

893:                                              ; preds = %885
  invoke void @_ZNSt7__cxx114listIN13TPPLPartition8DiagonalESaIS2_EE9push_backERKS2_(ptr noundef nonnull align 8 dereferenceable(24) %19, ptr noundef nonnull align 8 dereferenceable(16) %22)
          to label %894 unwind label %120

894:                                              ; preds = %893
  br label %897

895:                                              ; preds = %885
  invoke void @_ZNSt7__cxx114listIN13TPPLPartition8DiagonalESaIS2_EE9push_backERKS2_(ptr noundef nonnull align 8 dereferenceable(24) %20, ptr noundef nonnull align 8 dereferenceable(16) %22)
          to label %896 unwind label %120

896:                                              ; preds = %895
  br label %897

897:                                              ; preds = %896, %894
  invoke void @_ZNSt6vectorIlSaIlEE9push_backERKl(ptr noundef nonnull align 8 dereferenceable(24) %31, ptr noundef nonnull align 8 dereferenceable(8) %15)
          to label %898 unwind label %120

898:                                              ; preds = %897
  br label %808, !llvm.loop !57

899:                                              ; preds = %808
  %900 = call ptr @_ZNSt6vectorIlSaIlEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %31) #9
  %901 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %48, i32 0, i32 0
  store ptr %900, ptr %901, align 8
  %902 = call ptr @_ZNSt6vectorIlSaIlEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %31) #9
  %903 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %49, i32 0, i32 0
  store ptr %902, ptr %903, align 8
  %904 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %48, i32 0, i32 0
  %905 = load ptr, ptr %904, align 8
  %906 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %49, i32 0, i32 0
  %907 = load ptr, ptr %906, align 8
  invoke void @_ZSt4sortIN9__gnu_cxx17__normal_iteratorIPlSt6vectorIlSaIlEEEEEvT_S7_(ptr %905, ptr %907)
          to label %908 unwind label %120

908:                                              ; preds = %899
  %909 = call noundef i64 @_ZNKSt6vectorIlSaIlEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %31) #9
  invoke void @_ZN8TPPLPoly4InitEl(ptr noundef nonnull align 8 dereferenceable(17) %28, i64 noundef %909)
          to label %910 unwind label %120

910:                                              ; preds = %908
  store i64 0, ptr %16, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %50) #9
  %911 = call ptr @_ZNSt6vectorIlSaIlEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %31) #9
  %912 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %50, i32 0, i32 0
  store ptr %911, ptr %912, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %32, ptr align 8 %50, i64 8, i1 false), !tbaa.struct !52
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #9
  br label %913

913:                                              ; preds = %929, %910
  call void @llvm.lifetime.start.p0(i64 8, ptr %51) #9
  %914 = call ptr @_ZNSt6vectorIlSaIlEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %31) #9
  %915 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %51, i32 0, i32 0
  store ptr %914, ptr %915, align 8
  %916 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPlSt6vectorIlSaIlEEEEbRKNS_17__normal_iteratorIT_T0_EESA_(ptr noundef nonnull align 8 dereferenceable(8) %32, ptr noundef nonnull align 8 dereferenceable(8) %51) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #9
  br i1 %916, label %917, label %932

917:                                              ; preds = %913
  %918 = load ptr, ptr %12, align 8, !tbaa !5
  %919 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPlSt6vectorIlSaIlEEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %32) #9
  %920 = load i64, ptr %919, align 8, !tbaa !9
  %921 = getelementptr inbounds %"struct.TPPLPartition::PartitionVertex", ptr %918, i64 %920
  %922 = getelementptr inbounds %"struct.TPPLPartition::PartitionVertex", ptr %921, i32 0, i32 3
  %923 = load i64, ptr %16, align 8, !tbaa !9
  %924 = trunc i64 %923 to i32
  %925 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN8TPPLPolyixEi(ptr noundef nonnull align 8 dereferenceable(17) %28, i32 noundef %924)
          to label %926 unwind label %120

926:                                              ; preds = %917
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %925, ptr align 8 %922, i64 24, i1 false), !tbaa.struct !13
  %927 = load i64, ptr %16, align 8, !tbaa !9
  %928 = add nsw i64 %927, 1
  store i64 %928, ptr %16, align 8, !tbaa !9
  br label %929

929:                                              ; preds = %926
  %930 = call ptr @_ZN9__gnu_cxx17__normal_iteratorIPlSt6vectorIlSaIlEEEppEi(ptr noundef nonnull align 8 dereferenceable(8) %32, i32 noundef 0) #9
  %931 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %52, i32 0, i32 0
  store ptr %930, ptr %931, align 8
  br label %913, !llvm.loop !59

932:                                              ; preds = %913
  %933 = load ptr, ptr %7, align 8, !tbaa !5
  invoke void @_ZNSt7__cxx114listI8TPPLPolySaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %933, ptr noundef nonnull align 8 dereferenceable(17) %28)
          to label %934 unwind label %120

934:                                              ; preds = %932
  br label %788, !llvm.loop !56

935:                                              ; preds = %788
  store i64 0, ptr %14, align 8, !tbaa !9
  br label %936

936:                                              ; preds = %959, %935
  %937 = load i64, ptr %14, align 8, !tbaa !9
  %938 = load i64, ptr %17, align 8, !tbaa !9
  %939 = icmp slt i64 %937, %938
  br i1 %939, label %940, label %962

940:                                              ; preds = %936
  %941 = load ptr, ptr %13, align 8, !tbaa !5
  %942 = load i64, ptr %14, align 8, !tbaa !9
  %943 = getelementptr inbounds ptr, ptr %941, i64 %942
  %944 = load ptr, ptr %943, align 8, !tbaa !5
  %945 = icmp eq ptr %944, null
  br i1 %945, label %958, label %946

946:                                              ; preds = %940
  %947 = getelementptr inbounds i8, ptr %944, i64 -8
  %948 = load i64, ptr %947, align 8
  %949 = getelementptr inbounds %"struct.TPPLPartition::DPState2", ptr %944, i64 %948
  %950 = icmp eq ptr %944, %949
  br i1 %950, label %955, label %951

951:                                              ; preds = %951, %946
  %952 = phi ptr [ %949, %946 ], [ %953, %951 ]
  %953 = getelementptr inbounds %"struct.TPPLPartition::DPState2", ptr %952, i64 -1
  call void @_ZN13TPPLPartition8DPState2D2Ev(ptr noundef nonnull align 8 dereferenceable(40) %953) #9
  %954 = icmp eq ptr %953, %944
  br i1 %954, label %955, label %951

955:                                              ; preds = %951, %946
  %956 = mul i64 40, %948
  %957 = add i64 %956, 8
  call void @_ZdaPvm(ptr noundef %947, i64 noundef %957) #11
  br label %958

958:                                              ; preds = %955, %940
  br label %959

959:                                              ; preds = %958
  %960 = load i64, ptr %14, align 8, !tbaa !9
  %961 = add nsw i64 %960, 1
  store i64 %961, ptr %14, align 8, !tbaa !9
  br label %936, !llvm.loop !60

962:                                              ; preds = %936
  %963 = load ptr, ptr %13, align 8, !tbaa !5
  %964 = icmp eq ptr %963, null
  br i1 %964, label %966, label %965

965:                                              ; preds = %962
  call void @_ZdaPv(ptr noundef %963) #11
  br label %966

966:                                              ; preds = %965, %962
  %967 = load ptr, ptr %12, align 8, !tbaa !5
  %968 = icmp eq ptr %967, null
  br i1 %968, label %970, label %969

969:                                              ; preds = %966
  call void @_ZdaPv(ptr noundef %967) #11
  br label %970

970:                                              ; preds = %969, %966
  %971 = load i32, ptr %27, align 4, !tbaa !16
  store i32 %971, ptr %4, align 4
  store i32 1, ptr %42, align 4
  br label %972

972:                                              ; preds = %970, %780
  call void @llvm.lifetime.end.p0(i64 1, ptr %34) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %33) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #9
  call void @_ZNSt6vectorIlSaIlEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %31) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr %31) #9
  call void @_ZN8TPPLPolyD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %28) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr %28) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %22) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %21) #9
  call void @_ZNSt7__cxx1110_List_baseIN13TPPLPartition8DiagonalESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %20) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr %20) #9
  call void @_ZNSt7__cxx1110_List_baseIN13TPPLPartition8DiagonalESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %19) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr %19) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr %11) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr %10) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr %9) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr %8) #9
  br label %975

973:                                              ; preds = %124, %120
  call void @llvm.lifetime.end.p0(i64 1, ptr %34) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %33) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #9
  call void @_ZNSt6vectorIlSaIlEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %31) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr %31) #9
  call void @_ZN8TPPLPolyD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %28) #9
  br label %974

974:                                              ; preds = %973, %116
  call void @llvm.lifetime.end.p0(i64 24, ptr %28) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %22) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %21) #9
  call void @_ZNSt7__cxx1110_List_baseIN13TPPLPartition8DiagonalESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %20) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr %20) #9
  call void @_ZNSt7__cxx1110_List_baseIN13TPPLPartition8DiagonalESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %19) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr %19) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr %11) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr %10) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr %9) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr %8) #9
  br label %977

975:                                              ; preds = %972, %56
  %976 = load i32, ptr %4, align 4
  ret i32 %976

977:                                              ; preds = %974
  %978 = load ptr, ptr %29, align 8
  %979 = load i32, ptr %30, align 4
  %980 = insertvalue { ptr, i32 } poison, ptr %978, 0
  %981 = insertvalue { ptr, i32 } %980, i32 %979, 1
  resume { ptr, i32 } %981
}

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt6vectorIlSaIlEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN9__gnu_cxx17__normal_iteratorIPlSt6vectorIlSaIlEEEC2Ev(ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #6 align 2

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare { i64, i1 } @llvm.uadd.with.overflow.i64(i64, i64) #2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN13TPPLPartition8DPState2C2Ev(ptr noundef nonnull align 8 dereferenceable(40)) unnamed_addr #7 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt7__cxx114listIN13TPPLPartition8DiagonalESaIS2_EE8pop_backEv(ptr noundef nonnull align 8 dereferenceable(24)) #6 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN13TPPLPartition8DPState2D2Ev(ptr noundef nonnull align 8 dereferenceable(40)) unnamed_addr #7 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt6vectorIlSaIlEE5clearEv(ptr noundef nonnull align 8 dereferenceable(24)) #6 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt6vectorIlSaIlEE9push_backERKl(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(8)) #1 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZSt4sortIN9__gnu_cxx17__normal_iteratorIPlSt6vectorIlSaIlEEEEEvT_S7_(ptr, ptr) #8

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNSt6vectorIlSaIlEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24)) #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNSt6vectorIlSaIlEE3endEv(ptr noundef nonnull align 8 dereferenceable(24)) #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZNKSt6vectorIlSaIlEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24)) #6 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZN9__gnu_cxxneIPlSt6vectorIlSaIlEEEEbRKNS_17__normal_iteratorIT_T0_EESA_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) #7

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPlSt6vectorIlSaIlEEEdeEv(ptr noundef nonnull align 8 dereferenceable(8)) #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZN9__gnu_cxx17__normal_iteratorIPlSt6vectorIlSaIlEEEppEi(ptr noundef nonnull align 8 dereferenceable(8), i32 noundef) #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt6vectorIlSaIlEED2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #6 align 2

declare void @_ZN8TPPLPolyC1Ev(ptr)

declare void @_ZN8TPPLPolyD1Ev(ptr)

declare void @_ZN13TPPLPartition15PartitionVertexC1Ev(ptr)

attributes #0 = { nobuiltin 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 = { mustprogress 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 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #3 = { nobuiltin allocsize(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 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #5 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #6 = { mustprogress 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 #7 = { inlinehint mustprogress 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 #8 = { inlinehint mustprogress 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 #9 = { nounwind }
attributes #10 = { builtin allocsize(0) }
attributes #11 = { builtin 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++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"long", !7, i64 0}
!11 = distinct !{!11, !12}
!12 = !{!"llvm.loop.mustprogress"}
!13 = !{i64 0, i64 8, !14, i64 8, i64 8, !14, i64 16, i64 4, !16}
!14 = !{!15, !15, i64 0}
!15 = !{!"double", !7, i64 0}
!16 = !{!17, !17, i64 0}
!17 = !{!"int", !7, i64 0}
!18 = !{!19, !20, i64 0}
!19 = !{!"_ZTSN13TPPLPartition15PartitionVertexE", !20, i64 0, !20, i64 1, !20, i64 2, !21, i64 8, !15, i64 32, !6, i64 40, !6, i64 48}
!20 = !{!"bool", !7, i64 0}
!21 = !{!"_ZTS9TPPLPoint", !15, i64 0, !15, i64 8, !17, i64 16}
!22 = !{!19, !6, i64 40}
!23 = !{!19, !6, i64 48}
!24 = distinct !{!24, !12}
!25 = distinct !{!25, !12}
!26 = !{!27, !20, i64 0}
!27 = !{!"_ZTSN13TPPLPartition8DPState2E", !20, i64 0, !10, i64 8, !28, i64 16}
!28 = !{!"_ZTSNSt7__cxx114listIN13TPPLPartition8DiagonalESaIS2_EEE", !29, i64 0}
!29 = !{!"_ZTSNSt7__cxx1110_List_baseIN13TPPLPartition8DiagonalESaIS2_EEE", !30, i64 0}
!30 = !{!"_ZTSNSt7__cxx1110_List_baseIN13TPPLPartition8DiagonalESaIS2_EE10_List_implE", !31, i64 0}
!31 = !{!"_ZTSNSt8__detail17_List_node_headerE", !32, i64 0, !10, i64 16}
!32 = !{!"_ZTSNSt8__detail15_List_node_baseE", !6, i64 0, !6, i64 8}
!33 = !{!27, !10, i64 8}
!34 = distinct !{!34, !12}
!35 = distinct !{!35, !12}
!36 = distinct !{!36, !12}
!37 = !{i8 0, i8 2}
!38 = !{}
!39 = !{!40, !10, i64 0}
!40 = !{!"_ZTSN13TPPLPartition8DiagonalE", !10, i64 0, !10, i64 8}
!41 = !{!40, !10, i64 8}
!42 = distinct !{!42, !12}
!43 = !{!19, !20, i64 1}
!44 = distinct !{!44, !12}
!45 = distinct !{!45, !12}
!46 = distinct !{!46, !12}
!47 = distinct !{!47, !12}
!48 = distinct !{!48, !12}
!49 = distinct !{!49, !12}
!50 = !{i64 0, i64 8, !9, i64 8, i64 8, !9}
!51 = distinct !{!51, !12}
!52 = !{i64 0, i64 8, !5}
!53 = distinct !{!53, !12}
!54 = distinct !{!54, !12}
!55 = distinct !{!55, !12}
!56 = distinct !{!56, !12}
!57 = distinct !{!57, !12}
!58 = !{!20, !20, i64 0}
!59 = distinct !{!59, !12}
!60 = distinct !{!60, !12}


; 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.TPPLPoint = type { double, double, i32 }
%"class.std::__cxx11::list.0" = type { %"class.std::__cxx11::_List_base.1" }
%"class.std::__cxx11::_List_base.1" = type { %"struct.std::__cxx11::_List_base<TPPLPartition::Diagonal, std::allocator<TPPLPartition::Diagonal>>::_List_impl" }
%"struct.std::__cxx11::_List_base<TPPLPartition::Diagonal, std::allocator<TPPLPartition::Diagonal>>::_List_impl" = type { %"struct.std::__detail::_List_node_header" }
%"struct.std::__detail::_List_node_header" = type { %"struct.std::__detail::_List_node_base", i64 }
%"struct.std::__detail::_List_node_base" = type { ptr, ptr }
%"struct.TPPLPartition::Diagonal" = type { i64, i64 }
%"struct.std::_List_iterator.5" = type { ptr }
%class.TPPLPoly = type <{ ptr, i64, i8, [7 x i8] }>
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<long, std::allocator<long>>::_Vector_impl" }
%"struct.std::_Vector_base<long, std::allocator<long>>::_Vector_impl" = type { %"struct.std::_Vector_base<long, std::allocator<long>>::_Vector_impl_data" }
%"struct.std::_Vector_base<long, std::allocator<long>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.__gnu_cxx::__normal_iterator" = type { ptr }
%"struct.TPPLPartition::PartitionVertex" = type { i8, i8, i8, %struct.TPPLPoint, double, ptr, ptr }
%"struct.TPPLPartition::DPState2" = type { i8, i64, %"class.std::__cxx11::list.0" }

; Function Attrs: nobuiltin nounwind
declare void @_ZdaPv(ptr noundef) local_unnamed_addr #0

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN8TPPLPoly4InitEl(ptr noundef nonnull align 8 dereferenceable(17), i64 noundef) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare { i64, i1 } @llvm.umul.with.overflow.i64(i64, i64) #2

; Function Attrs: nobuiltin allocsize(0)
declare noundef nonnull ptr @_Znam(i64 noundef) local_unnamed_addr #3

; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #4

declare i32 @__gxx_personality_v0(...)

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef i32 @_ZN13TPPLPartition10IntersectsER9TPPLPointS1_S1_S1_(ptr noundef nonnull align 1 dereferenceable(1), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt7__cxx114listI8TPPLPolySaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(17)) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZNK8TPPLPoly12GetNumPointsEv(ptr noundef nonnull align 8 dereferenceable(17)) local_unnamed_addr #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(24) ptr @_ZN8TPPLPoly8GetPointEl(ptr noundef nonnull align 8 dereferenceable(17), i64 noundef) local_unnamed_addr #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(24) ptr @_ZN8TPPLPolyixEi(ptr noundef nonnull align 8 dereferenceable(17), i32 noundef) local_unnamed_addr #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZN13TPPLPartition6InConeEPNS_15PartitionVertexER9TPPLPoint(ptr noundef nonnull align 1 dereferenceable(1), ptr noundef, ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN13TPPLPartition21UpdateVertexReflexityEPNS_15PartitionVertexE(ptr noundef nonnull align 1 dereferenceable(1), ptr noundef) local_unnamed_addr #6 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK8TPPLPoly5ValidEv(ptr noundef nonnull align 8 dereferenceable(17)) local_unnamed_addr #7 align 2

; Function Attrs: nobuiltin nounwind
declare void @_ZdaPvm(ptr noundef, i64 noundef) local_unnamed_addr #0

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt7__cxx114listIN13TPPLPartition8DiagonalESaIS2_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #6 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt7__cxx114listIN13TPPLPartition8DiagonalESaIS2_EE9push_backERKS2_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNKSt7__cxx114listIN13TPPLPartition8DiagonalESaIS2_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNSt7__cxx114listIN13TPPLPartition8DiagonalESaIS2_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(16) ptr @_ZNKSt14_List_iteratorIN13TPPLPartition8DiagonalEEdeEv(ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt7__cxx114listIN13TPPLPartition8DiagonalESaIS2_EE9pop_frontEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt7__cxx1110_List_baseIN13TPPLPartition8DiagonalESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt7__cxx114listIN13TPPLPartition8DiagonalESaIS2_EE5clearEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #6 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt7__cxx114listIN13TPPLPartition8DiagonalESaIS2_EE10push_frontERKS2_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZNKSt14_List_iteratorIN13TPPLPartition8DiagonalEEptEv(ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #6 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN13TPPLPartition5TypeAElllPNS_15PartitionVertexEPPNS_8DPState2E(ptr noundef nonnull align 1 dereferenceable(1), i64 noundef, i64 noundef, i64 noundef, ptr noundef, ptr noundef) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt14_List_iteratorIN13TPPLPartition8DiagonalEEC2Ev(ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNSt7__cxx114listIN13TPPLPartition8DiagonalESaIS2_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNSt14_List_iteratorIN13TPPLPartition8DiagonalEEmmEi(ptr noundef nonnull align 8 dereferenceable(8), i32 noundef) local_unnamed_addr #6 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN13TPPLPartition5TypeBElllPNS_15PartitionVertexEPPNS_8DPState2E(ptr noundef nonnull align 1 dereferenceable(1), i64 noundef, i64 noundef, i64 noundef, ptr noundef, ptr noundef) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress uwtable
define dso_local noundef i32 @_ZN13TPPLPartition19ConvexPartition_OPTEP8TPPLPolyPNSt7__cxx114listIS0_SaIS0_EEE(ptr noundef nonnull align 1 dereferenceable(1) %0, ptr noundef nonnull %1, ptr noundef %2) local_unnamed_addr #1 align 2 personality ptr @__gxx_personality_v0 {
  %4 = alloca %struct.TPPLPoint, align 8
  %5 = alloca %struct.TPPLPoint, align 8
  %6 = alloca %struct.TPPLPoint, align 8
  %7 = alloca %struct.TPPLPoint, align 8
  %8 = alloca i64, align 8
  %9 = alloca %"class.std::__cxx11::list.0", align 8
  %10 = alloca %"class.std::__cxx11::list.0", align 8
  %11 = alloca %"struct.TPPLPartition::Diagonal", align 8
  %12 = alloca %"struct.TPPLPartition::Diagonal", align 8
  %13 = alloca %"struct.std::_List_iterator.5", align 8
  %14 = alloca %"struct.std::_List_iterator.5", align 8
  %15 = alloca %class.TPPLPoly, align 8
  %16 = alloca %"class.std::vector", align 8
  %17 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %18 = alloca %"struct.std::_List_iterator.5", align 8
  %19 = alloca %"struct.std::_List_iterator.5", align 8
  %20 = alloca %"struct.std::_List_iterator.5", align 8
  %21 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %22 = tail call noundef zeroext i1 @_ZNK8TPPLPoly5ValidEv(ptr noundef nonnull align 8 dereferenceable(17) %1)
  br i1 %22, label %23, label %413

23:                                               ; preds = %3
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %4) #9
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %5) #9
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %6) #9
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %7) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %8) #9
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %9) #9
  call void @_ZNSt7__cxx114listIN13TPPLPartition8DiagonalESaIS2_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %9) #9
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %10) #9
  call void @_ZNSt7__cxx114listIN13TPPLPartition8DiagonalESaIS2_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %10) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %11) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %12) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %13) #9
  call void @_ZNSt14_List_iteratorIN13TPPLPartition8DiagonalEEC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %13) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %14) #9
  call void @_ZNSt14_List_iteratorIN13TPPLPartition8DiagonalEEC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %14) #9
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %15) #9
  invoke void @_ZN8TPPLPolyC1Ev(ptr noundef nonnull align 8 dereferenceable(17) %15)
          to label %24 unwind label %73

24:                                               ; preds = %23
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %16) #9
  call void @_ZNSt6vectorIlSaIlEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %16) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %17) #9
  call void @_ZN9__gnu_cxx17__normal_iteratorIPlSt6vectorIlSaIlEEEC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %17) #9
  %25 = call noundef i64 @_ZNK8TPPLPoly12GetNumPointsEv(ptr noundef nonnull align 8 dereferenceable(17) %1)
  %26 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %25, i64 56)
  %27 = extractvalue { i64, i1 } %26, 1
  %28 = extractvalue { i64, i1 } %26, 0
  %29 = select i1 %27, i64 -1, i64 %28
  %30 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %29) #10
          to label %31 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp

31:                                               ; preds = %24
  %32 = icmp eq i64 %25, 0
  br i1 %32, label %.loopexit323, label %33

33:                                               ; preds = %31
  %34 = getelementptr inbounds %"struct.TPPLPartition::PartitionVertex", ptr %30, i64 %25
  br label %35

35:                                               ; preds = %37, %33
  %36 = phi ptr [ %30, %33 ], [ %38, %37 ]
  invoke void @_ZN13TPPLPartition15PartitionVertexC1Ev(ptr noundef nonnull align 8 dereferenceable(56) %36)
          to label %37 unwind label %75

37:                                               ; preds = %35
  %38 = getelementptr inbounds i8, ptr %36, i64 56
  %39 = icmp eq ptr %38, %34
  br i1 %39, label %.loopexit323, label %35

.loopexit323:                                     ; preds = %37, %31
  %40 = icmp ugt i64 %25, 2305843009213693951
  %41 = shl nuw i64 %25, 3
  %42 = select i1 %40, i64 -1, i64 %41
  %43 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %42) #10
          to label %.preheader320 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp

.preheader320:                                    ; preds = %.loopexit323
  %44 = icmp sgt i64 %25, 0
  br i1 %44, label %.lr.ph, label %.preheader317.thread

.lr.ph:                                           ; preds = %.preheader320
  %45 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %25, i64 40)
  %46 = extractvalue { i64, i1 } %45, 1
  %47 = extractvalue { i64, i1 } %45, 0
  %48 = call { i64, i1 } @llvm.uadd.with.overflow.i64(i64 %47, i64 8)
  %49 = extractvalue { i64, i1 } %48, 1
  %50 = or i1 %46, %49
  %51 = extractvalue { i64, i1 } %48, 0
  %52 = select i1 %50, i64 -1, i64 %51
  br label %62

.preheader318:                                    ; preds = %.loopexit319
  br i1 %44, label %53, label %.preheader317.thread

53:                                               ; preds = %.preheader318
  %54 = getelementptr %"struct.TPPLPartition::PartitionVertex", ptr %30, i64 %25
  %55 = getelementptr i8, ptr %54, i64 -56
  %56 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZN8TPPLPoly8GetPointEl(ptr noundef nonnull align 8 dereferenceable(17) %1, i64 noundef 0)
  %57 = getelementptr inbounds i8, ptr %30, i64 8
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %57, ptr noundef nonnull align 8 dereferenceable(24) %56, i64 24, i1 false), !tbaa.struct !5
  store i8 1, ptr %30, align 8, !tbaa !12
  %58 = getelementptr inbounds i8, ptr %30, i64 40
  store ptr %55, ptr %58, align 8
  %59 = call noundef i64 @_ZNK8TPPLPoly12GetNumPointsEv(ptr noundef nonnull align 8 dereferenceable(17) %1)
  %60 = icmp eq i64 %59, 1
  %spec.select.idx = select i1 %60, i64 0, i64 56
  %spec.select = getelementptr inbounds i8, ptr %30, i64 %spec.select.idx
  %61 = getelementptr inbounds i8, ptr %30, i64 48
  store ptr %spec.select, ptr %61, align 8
  %exitcond385.peel.not = icmp eq i64 %25, 1
  br i1 %exitcond385.peel.not, label %.preheader317.thread, label %.peel.next

62:                                               ; preds = %.lr.ph, %.loopexit319
  %.0210327 = phi i64 [ 0, %.lr.ph ], [ %72, %.loopexit319 ]
  %63 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %52) #10
          to label %64 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit

64:                                               ; preds = %62
  store i64 %25, ptr %63, align 16
  %65 = getelementptr inbounds i8, ptr %63, i64 8
  %66 = getelementptr inbounds %"struct.TPPLPartition::DPState2", ptr %65, i64 %25
  br label %67

67:                                               ; preds = %67, %64
  %68 = phi ptr [ %65, %64 ], [ %69, %67 ]
  call void @_ZN13TPPLPartition8DPState2C2Ev(ptr noundef nonnull align 8 dereferenceable(40) %68) #9
  %69 = getelementptr inbounds i8, ptr %68, i64 40
  %70 = icmp eq ptr %69, %66
  br i1 %70, label %.loopexit319, label %67

.loopexit319:                                     ; preds = %67
  %71 = getelementptr inbounds ptr, ptr %43, i64 %.0210327
  store ptr %65, ptr %71, align 8, !tbaa !17
  %72 = add nuw nsw i64 %.0210327, 1
  %exitcond.not = icmp eq i64 %72, %25
  br i1 %exitcond.not, label %.preheader318, label %62, !llvm.loop !18

73:                                               ; preds = %23
  %74 = landingpad { ptr, i32 }
          cleanup
  br label %412

.loopexit274:                                     ; preds = %.invoke, %372, %373, %380
  %lpad.loopexit = landingpad { ptr, i32 }
          cleanup
  br label %.loopexit.split-lp

.loopexit.split-lp.loopexit:                      ; preds = %._crit_edge375, %383, %._crit_edge371, %333, %332, %331
  %lpad.loopexit276 = landingpad { ptr, i32 }
          cleanup
  br label %.loopexit.split-lp

.loopexit.split-lp.loopexit.split-lp.loopexit:    ; preds = %.loopexit282.invoke, %236, %271
  %lpad.loopexit285 = landingpad { ptr, i32 }
          cleanup
  br label %.loopexit.split-lp

.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit: ; preds = %207
  %lpad.loopexit289 = landingpad { ptr, i32 }
          cleanup
  br label %.loopexit.split-lp

.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit: ; preds = %179
  %lpad.loopexit293 = landingpad { ptr, i32 }
          cleanup
  br label %.loopexit.split-lp

.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit: ; preds = %172
  %lpad.loopexit297 = landingpad { ptr, i32 }
          cleanup
  br label %.loopexit.split-lp

.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit: ; preds = %199
  %lpad.loopexit301 = landingpad { ptr, i32 }
          cleanup
  br label %.loopexit.split-lp

.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit: ; preds = %._crit_edge345
  %lpad.loopexit304 = landingpad { ptr, i32 }
          cleanup
  br label %.loopexit.split-lp

.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit: ; preds = %142
  %lpad.loopexit308 = landingpad { ptr, i32 }
          cleanup
  br label %.loopexit.split-lp

.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit: ; preds = %.lr.ph333
  %lpad.loopexit312 = landingpad { ptr, i32 }
          cleanup
  br label %.loopexit.split-lp

.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit: ; preds = %62
  %lpad.loopexit321 = landingpad { ptr, i32 }
          cleanup
  br label %.loopexit.split-lp

.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp: ; preds = %24, %.loopexit323, %._crit_edge357, %.thread
  %lpad.loopexit.split-lp = landingpad { ptr, i32 }
          cleanup
  br label %.loopexit.split-lp

75:                                               ; preds = %35
  %76 = landingpad { ptr, i32 }
          cleanup
  call void @_ZdaPvm(ptr noundef nonnull %30, i64 noundef %29) #11
  br label %.loopexit.split-lp

.preheader317.thread:                             ; preds = %53, %.preheader318, %.preheader320
  %77 = add i64 %25, -1
  br label %._crit_edge.thread

.peel.next:                                       ; preds = %53, %.peel.next
  %.1211328 = phi i64 [ %88, %.peel.next ], [ 1, %53 ]
  %78 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZN8TPPLPoly8GetPointEl(ptr noundef nonnull align 8 dereferenceable(17) %1, i64 noundef %.1211328)
  %79 = getelementptr inbounds %"struct.TPPLPartition::PartitionVertex", ptr %30, i64 %.1211328
  %80 = getelementptr inbounds i8, ptr %79, i64 8
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %80, ptr noundef nonnull align 8 dereferenceable(24) %78, i64 24, i1 false), !tbaa.struct !5
  store i8 1, ptr %79, align 8, !tbaa !12
  %81 = getelementptr i8, ptr %79, i64 -56
  %82 = getelementptr inbounds i8, ptr %79, i64 40
  store ptr %81, ptr %82, align 8
  %83 = call noundef i64 @_ZNK8TPPLPoly12GetNumPointsEv(ptr noundef nonnull align 8 dereferenceable(17) %1)
  %84 = add nsw i64 %83, -1
  %85 = icmp eq i64 %.1211328, %84
  %86 = getelementptr inbounds i8, ptr %79, i64 56
  %spec.select410 = select i1 %85, ptr %30, ptr %86
  %87 = getelementptr inbounds i8, ptr %79, i64 48
  store ptr %spec.select410, ptr %87, align 8
  %88 = add nuw nsw i64 %.1211328, 1
  %exitcond385.not = icmp eq i64 %88, %25
  br i1 %exitcond385.not, label %.lr.ph331, label %.peel.next, !llvm.loop !20

.preheader316:                                    ; preds = %.lr.ph331
  %89 = add nsw i64 %25, -1
  br label %.lr.ph335

.lr.ph331:                                        ; preds = %.peel.next, %.lr.ph331
  %.2330 = phi i64 [ %91, %.lr.ph331 ], [ 1, %.peel.next ]
  %90 = getelementptr inbounds %"struct.TPPLPartition::PartitionVertex", ptr %30, i64 %.2330
  call void @_ZN13TPPLPartition21UpdateVertexReflexityEPNS_15PartitionVertexE(ptr noundef nonnull align 1 dereferenceable(1) %0, ptr noundef nonnull %90)
  %91 = add nuw nsw i64 %.2330, 1
  %exitcond387.not = icmp eq i64 %91, %25
  br i1 %exitcond387.not, label %.preheader316, label %.lr.ph331, !llvm.loop !22

.loopexit315:                                     ; preds = %.loopexit311
  %exitcond389.not = icmp eq i64 %96, %89
  br i1 %exitcond389.not, label %.preheader307, label %.lr.ph335, !llvm.loop !23

.preheader307:                                    ; preds = %.loopexit315
  %92 = add nsw i64 %25, -2
  %93 = icmp sgt i64 %25, 2
  br i1 %93, label %.lr.ph339, label %._crit_edge.thread

.lr.ph339:                                        ; preds = %.preheader307
  %94 = getelementptr inbounds i8, ptr %12, i64 8
  br label %135

.lr.ph335:                                        ; preds = %.preheader316, %.loopexit315
  %.3336 = phi i64 [ %96, %.loopexit315 ], [ 0, %.preheader316 ]
  %95 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZN8TPPLPoly8GetPointEl(ptr noundef nonnull align 8 dereferenceable(17) %1, i64 noundef %.3336)
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(24) %95, i64 24, i1 false), !tbaa.struct !5
  %96 = add nuw nsw i64 %.3336, 1
  store i64 %96, ptr %8, align 8, !tbaa !24
  %97 = getelementptr inbounds ptr, ptr %43, i64 %.3336
  %98 = getelementptr inbounds %"struct.TPPLPartition::PartitionVertex", ptr %30, i64 %.3336
  br label %99

99:                                               ; preds = %.lr.ph335, %.loopexit311
  %storemerge253334 = phi i64 [ %96, %.lr.ph335 ], [ %133, %.loopexit311 ]
  %100 = load ptr, ptr %97, align 8, !tbaa !17
  %101 = getelementptr inbounds %"struct.TPPLPartition::DPState2", ptr %100, i64 %storemerge253334
  store i8 1, ptr %101, align 8, !tbaa !26
  %102 = icmp eq i64 %storemerge253334, %96
  %spec.select411 = select i1 %102, i64 0, i64 2147483647
  %103 = getelementptr inbounds %"struct.TPPLPartition::DPState2", ptr %100, i64 %storemerge253334, i32 1
  store i64 %spec.select411, ptr %103, align 8
  %104 = load i64, ptr %8, align 8, !tbaa !24
  %.not254 = icmp eq i64 %104, %96
  br i1 %.not254, label %.loopexit311, label %105

105:                                              ; preds = %99
  %106 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZN8TPPLPoly8GetPointEl(ptr noundef nonnull align 8 dereferenceable(17) %1, i64 noundef %104)
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(24) %106, i64 24, i1 false), !tbaa.struct !5
  %107 = call noundef zeroext i1 @_ZN13TPPLPartition6InConeEPNS_15PartitionVertexER9TPPLPoint(ptr noundef nonnull align 1 dereferenceable(1) %0, ptr noundef nonnull %98, ptr noundef nonnull align 8 dereferenceable(24) %5)
  br i1 %107, label %112, label %108

108:                                              ; preds = %105
  %109 = load ptr, ptr %97, align 8, !tbaa !17
  %110 = load i64, ptr %8, align 8, !tbaa !24
  %111 = getelementptr inbounds %"struct.TPPLPartition::DPState2", ptr %109, i64 %110
  br label %.loopexit311.sink.split

112:                                              ; preds = %105
  %113 = load i64, ptr %8, align 8, !tbaa !24
  %114 = getelementptr inbounds %"struct.TPPLPartition::PartitionVertex", ptr %30, i64 %113
  %115 = call noundef zeroext i1 @_ZN13TPPLPartition6InConeEPNS_15PartitionVertexER9TPPLPoint(ptr noundef nonnull align 1 dereferenceable(1) %0, ptr noundef nonnull %114, ptr noundef nonnull align 8 dereferenceable(24) %4)
  br i1 %115, label %.lr.ph333, label %116

116:                                              ; preds = %112
  %117 = load ptr, ptr %97, align 8, !tbaa !17
  %118 = load i64, ptr %8, align 8, !tbaa !24
  %119 = getelementptr inbounds %"struct.TPPLPartition::DPState2", ptr %117, i64 %118
  br label %.loopexit311.sink.split

120:                                              ; preds = %127
  %121 = add nuw nsw i64 %.0212332, 1
  %exitcond388.not = icmp eq i64 %121, %25
  br i1 %exitcond388.not, label %.loopexit311, label %.lr.ph333, !llvm.loop !33

.lr.ph333:                                        ; preds = %112, %120
  %.0212332 = phi i64 [ %121, %120 ], [ 0, %112 ]
  %122 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZN8TPPLPoly8GetPointEl(ptr noundef nonnull align 8 dereferenceable(17) %1, i64 noundef %.0212332)
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %6, ptr noundef nonnull align 8 dereferenceable(24) %122, i64 24, i1 false), !tbaa.struct !5
  %123 = icmp eq i64 %.0212332, %89
  %124 = add nuw nsw i64 %.0212332, 1
  %.sink412 = select i1 %123, i64 0, i64 %124
  %125 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZN8TPPLPoly8GetPointEl(ptr noundef nonnull align 8 dereferenceable(17) %1, i64 noundef %.sink412)
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %7, ptr noundef nonnull align 8 dereferenceable(24) %125, i64 24, i1 false)
  %126 = invoke noundef i32 @_ZN13TPPLPartition10IntersectsER9TPPLPointS1_S1_S1_(ptr noundef nonnull align 1 dereferenceable(1) %0, ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(24) %6, ptr noundef nonnull align 8 dereferenceable(24) %7)
          to label %127 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit

127:                                              ; preds = %.lr.ph333
  %.not255 = icmp eq i32 %126, 0
  br i1 %.not255, label %120, label %128

128:                                              ; preds = %127
  %129 = load ptr, ptr %97, align 8, !tbaa !17
  %130 = load i64, ptr %8, align 8, !tbaa !24
  %131 = getelementptr inbounds %"struct.TPPLPartition::DPState2", ptr %129, i64 %130
  br label %.loopexit311.sink.split

.loopexit311.sink.split:                          ; preds = %108, %116, %128
  %.sink = phi ptr [ %131, %128 ], [ %119, %116 ], [ %111, %108 ]
  store i8 0, ptr %.sink, align 8, !tbaa !26
  br label %.loopexit311

.loopexit311:                                     ; preds = %120, %.loopexit311.sink.split, %99
  %132 = load i64, ptr %8, align 8, !tbaa !24
  %133 = add nsw i64 %132, 1
  store i64 %133, ptr %8, align 8, !tbaa !24
  %134 = icmp slt i64 %133, %25
  br i1 %134, label %99, label %.loopexit315, !llvm.loop !34

135:                                              ; preds = %.lr.ph339, %147
  %.4338 = phi i64 [ 0, %.lr.ph339 ], [ %.pre-phi, %147 ]
  %136 = add nuw nsw i64 %.4338, 2
  store i64 %136, ptr %8, align 8, !tbaa !24
  %137 = getelementptr inbounds ptr, ptr %43, i64 %.4338
  %138 = load ptr, ptr %137, align 8, !tbaa !17
  %139 = getelementptr inbounds %"struct.TPPLPartition::DPState2", ptr %138, i64 %136
  %140 = load i8, ptr %139, align 8, !tbaa !26, !range !35, !noundef !36
  %141 = trunc nuw i8 %140 to i1
  br i1 %141, label %142, label %._crit_edge401

._crit_edge401:                                   ; preds = %135
  %.pre402 = add nuw nsw i64 %.4338, 1
  br label %147

142:                                              ; preds = %135
  %143 = getelementptr inbounds i8, ptr %139, i64 8
  store i64 0, ptr %143, align 8, !tbaa !37
  %144 = add nuw nsw i64 %.4338, 1
  store i64 %144, ptr %12, align 8, !tbaa !38
  store i64 %144, ptr %94, align 8, !tbaa !40
  %145 = load i64, ptr %8, align 8, !tbaa !24
  %146 = getelementptr inbounds %"struct.TPPLPartition::DPState2", ptr %138, i64 %145, i32 2
  invoke void @_ZNSt7__cxx114listIN13TPPLPartition8DiagonalESaIS2_EE9push_backERKS2_(ptr noundef nonnull align 8 dereferenceable(24) %146, ptr noundef nonnull align 8 dereferenceable(16) %12)
          to label %147 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit

147:                                              ; preds = %._crit_edge401, %142
  %.pre-phi = phi i64 [ %.pre402, %._crit_edge401 ], [ %144, %142 ]
  %exitcond390.not = icmp eq i64 %.pre-phi, %92
  br i1 %exitcond390.not, label %._crit_edge, label %135, !llvm.loop !41

._crit_edge.thread:                               ; preds = %.preheader307, %.preheader317.thread
  %.ph404 = phi i64 [ %89, %.preheader307 ], [ %77, %.preheader317.thread ]
  %148 = load ptr, ptr %43, align 8, !tbaa !17
  %149 = getelementptr inbounds %"struct.TPPLPartition::DPState2", ptr %148, i64 %.ph404
  store i8 1, ptr %149, align 8, !tbaa !26
  %150 = getelementptr inbounds i8, ptr %30, i64 1
  store i8 0, ptr %150, align 1, !tbaa !42
  br label %._crit_edge357

._crit_edge:                                      ; preds = %147
  %151 = load ptr, ptr %43, align 8, !tbaa !17
  %152 = getelementptr inbounds %"struct.TPPLPartition::DPState2", ptr %151, i64 %89
  store i8 1, ptr %152, align 8, !tbaa !26
  %153 = getelementptr inbounds i8, ptr %30, i64 1
  store i8 0, ptr %153, align 1, !tbaa !42
  %.not416 = icmp eq i64 %25, 3
  br i1 %.not416, label %._crit_edge357, label %.preheader303

.preheader303:                                    ; preds = %._crit_edge, %._crit_edge355
  %.0215356 = phi i64 [ %214, %._crit_edge355 ], [ 3, %._crit_edge ]
  %154 = sub nsw i64 %25, %.0215356
  %155 = icmp sgt i64 %154, 0
  br i1 %155, label %.lr.ph348, label %.lr.ph354.preheader

.lr.ph348:                                        ; preds = %.preheader303, %.loopexit296
  %.5347 = phi i64 [ %183, %.loopexit296 ], [ 0, %.preheader303 ]
  %156 = getelementptr inbounds %"struct.TPPLPartition::PartitionVertex", ptr %30, i64 %.5347, i32 1
  %157 = load i8, ptr %156, align 1, !tbaa !42, !range !35, !noundef !36
  %158 = trunc nuw i8 %157 to i1
  br i1 %158, label %.loopexit296, label %159

159:                                              ; preds = %.lr.ph348
  %160 = add nuw nsw i64 %.5347, %.0215356
  %161 = getelementptr inbounds ptr, ptr %43, i64 %.5347
  %162 = load ptr, ptr %161, align 8, !tbaa !17
  %163 = getelementptr inbounds %"struct.TPPLPartition::DPState2", ptr %162, i64 %160
  %164 = load i8, ptr %163, align 8, !tbaa !26, !range !35, !noundef !36
  %165 = trunc nuw i8 %164 to i1
  br i1 %165, label %166, label %.loopexit296

166:                                              ; preds = %159
  %167 = getelementptr inbounds %"struct.TPPLPartition::PartitionVertex", ptr %30, i64 %160, i32 1
  %168 = load i8, ptr %167, align 1, !tbaa !42, !range !35, !noundef !36
  %169 = trunc nuw i8 %168 to i1
  br i1 %169, label %.preheader292, label %.preheader295

.preheader295:                                    ; preds = %166
  %storemerge251340 = add nuw nsw i64 %.5347, 1
  store i64 %storemerge251340, ptr %8, align 8, !tbaa !24
  br label %172

.preheader292:                                    ; preds = %166
  %170 = add nsw i64 %160, -1
  %storemerge252342 = add nuw nsw i64 %.5347, 1
  store i64 %storemerge252342, ptr %8, align 8, !tbaa !24
  %171 = icmp slt i64 %storemerge252342, %170
  br i1 %171, label %.lr.ph344, label %._crit_edge345

172:                                              ; preds = %.preheader295, %173
  %storemerge251341 = phi i64 [ %storemerge251340, %.preheader295 ], [ %storemerge251, %173 ]
  invoke void @_ZN13TPPLPartition5TypeAElllPNS_15PartitionVertexEPPNS_8DPState2E(ptr noundef nonnull align 1 dereferenceable(1) %0, i64 noundef %.5347, i64 noundef %storemerge251341, i64 noundef %160, ptr noundef nonnull %30, ptr noundef nonnull %43)
          to label %173 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit

173:                                              ; preds = %172
  %174 = load i64, ptr %8, align 8, !tbaa !24
  %storemerge251 = add nsw i64 %174, 1
  store i64 %storemerge251, ptr %8, align 8, !tbaa !24
  %175 = icmp slt i64 %storemerge251, %160
  br i1 %175, label %172, label %.loopexit296, !llvm.loop !43

.lr.ph344:                                        ; preds = %.preheader292, %180
  %storemerge252343 = phi i64 [ %storemerge252, %180 ], [ %storemerge252342, %.preheader292 ]
  %176 = getelementptr inbounds %"struct.TPPLPartition::PartitionVertex", ptr %30, i64 %storemerge252343, i32 1
  %177 = load i8, ptr %176, align 1, !tbaa !42, !range !35, !noundef !36
  %178 = trunc nuw i8 %177 to i1
  br i1 %178, label %180, label %179

179:                                              ; preds = %.lr.ph344
  invoke void @_ZN13TPPLPartition5TypeAElllPNS_15PartitionVertexEPPNS_8DPState2E(ptr noundef nonnull align 1 dereferenceable(1) %0, i64 noundef %.5347, i64 noundef %storemerge252343, i64 noundef %160, ptr noundef nonnull %30, ptr noundef nonnull %43)
          to label %._crit_edge398 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit

._crit_edge398:                                   ; preds = %179
  %.pre = load i64, ptr %8, align 8, !tbaa !24
  br label %180

180:                                              ; preds = %._crit_edge398, %.lr.ph344
  %181 = phi i64 [ %.pre, %._crit_edge398 ], [ %storemerge252343, %.lr.ph344 ]
  %storemerge252 = add nsw i64 %181, 1
  store i64 %storemerge252, ptr %8, align 8, !tbaa !24
  %182 = icmp slt i64 %storemerge252, %170
  br i1 %182, label %.lr.ph344, label %._crit_edge345, !llvm.loop !44

._crit_edge345:                                   ; preds = %180, %.preheader292
  invoke void @_ZN13TPPLPartition5TypeAElllPNS_15PartitionVertexEPPNS_8DPState2E(ptr noundef nonnull align 1 dereferenceable(1) %0, i64 noundef %.5347, i64 noundef %170, i64 noundef %160, ptr noundef nonnull %30, ptr noundef nonnull %43)
          to label %.loopexit296 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit

.loopexit296:                                     ; preds = %173, %159, %._crit_edge345, %.lr.ph348
  %183 = add nuw nsw i64 %.5347, 1
  %184 = icmp slt i64 %183, %154
  br i1 %184, label %.lr.ph348, label %.lr.ph354.preheader, !llvm.loop !45

.lr.ph354.preheader:                              ; preds = %.loopexit296, %.preheader303
  br label %.lr.ph354

.lr.ph354:                                        ; preds = %.lr.ph354.preheader, %.loopexit288
  %.1213352 = phi i64 [ %212, %.loopexit288 ], [ %.0215356, %.lr.ph354.preheader ]
  %185 = getelementptr inbounds %"struct.TPPLPartition::PartitionVertex", ptr %30, i64 %.1213352, i32 1
  %186 = load i8, ptr %185, align 1, !tbaa !42, !range !35, !noundef !36
  %187 = trunc nuw i8 %186 to i1
  br i1 %187, label %.loopexit288, label %188

188:                                              ; preds = %.lr.ph354
  %189 = sub nuw nsw i64 %.1213352, %.0215356
  %190 = getelementptr inbounds %"struct.TPPLPartition::PartitionVertex", ptr %30, i64 %189, i32 1
  %191 = load i8, ptr %190, align 1, !tbaa !42, !range !35, !noundef !36
  %192 = trunc nuw i8 %191 to i1
  br i1 %192, label %193, label %.loopexit288

193:                                              ; preds = %188
  %194 = getelementptr inbounds ptr, ptr %43, i64 %189
  %195 = load ptr, ptr %194, align 8, !tbaa !17
  %196 = getelementptr inbounds %"struct.TPPLPartition::DPState2", ptr %195, i64 %.1213352
  %197 = load i8, ptr %196, align 8, !tbaa !26, !range !35, !noundef !36
  %198 = trunc nuw i8 %197 to i1
  br i1 %198, label %199, label %.loopexit288

199:                                              ; preds = %193
  %200 = add nuw nsw i64 %189, 1
  invoke void @_ZN13TPPLPartition5TypeBElllPNS_15PartitionVertexEPPNS_8DPState2E(ptr noundef nonnull align 1 dereferenceable(1) %0, i64 noundef %189, i64 noundef %200, i64 noundef %.1213352, ptr noundef nonnull %30, ptr noundef nonnull %43)
          to label %201 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit

201:                                              ; preds = %199
  %202 = add nuw nsw i64 %189, 2
  store i64 %202, ptr %8, align 8, !tbaa !24
  %203 = icmp ult i64 %202, %.1213352
  br i1 %203, label %.lr.ph351, label %.loopexit288

.lr.ph351:                                        ; preds = %201, %208
  %storemerge349 = phi i64 [ %210, %208 ], [ %202, %201 ]
  %204 = getelementptr inbounds %"struct.TPPLPartition::PartitionVertex", ptr %30, i64 %storemerge349, i32 1
  %205 = load i8, ptr %204, align 1, !tbaa !42, !range !35, !noundef !36
  %206 = trunc nuw i8 %205 to i1
  br i1 %206, label %208, label %207

207:                                              ; preds = %.lr.ph351
  invoke void @_ZN13TPPLPartition5TypeBElllPNS_15PartitionVertexEPPNS_8DPState2E(ptr noundef nonnull align 1 dereferenceable(1) %0, i64 noundef %189, i64 noundef %storemerge349, i64 noundef %.1213352, ptr noundef nonnull %30, ptr noundef nonnull %43)
          to label %._crit_edge399 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit

._crit_edge399:                                   ; preds = %207
  %.pre400 = load i64, ptr %8, align 8, !tbaa !24
  br label %208

208:                                              ; preds = %._crit_edge399, %.lr.ph351
  %209 = phi i64 [ %.pre400, %._crit_edge399 ], [ %storemerge349, %.lr.ph351 ]
  %210 = add nsw i64 %209, 1
  store i64 %210, ptr %8, align 8, !tbaa !24
  %211 = icmp slt i64 %210, %.1213352
  br i1 %211, label %.lr.ph351, label %.loopexit288, !llvm.loop !46

.loopexit288:                                     ; preds = %208, %201, %188, %193, %.lr.ph354
  %212 = add nuw nsw i64 %.1213352, 1
  %213 = icmp slt i64 %212, %25
  br i1 %213, label %.lr.ph354, label %._crit_edge355, !llvm.loop !47

._crit_edge355:                                   ; preds = %.loopexit288
  %214 = add nuw nsw i64 %.0215356, 1
  %exitcond391.not = icmp eq i64 %214, %25
  br i1 %exitcond391.not, label %._crit_edge357, label %.preheader303, !llvm.loop !48

._crit_edge357:                                   ; preds = %._crit_edge355, %._crit_edge.thread, %._crit_edge
  %215 = phi i64 [ %.ph404, %._crit_edge.thread ], [ %89, %._crit_edge ], [ %89, %._crit_edge355 ]
  store i64 0, ptr %12, align 8, !tbaa !38
  %216 = getelementptr inbounds i8, ptr %12, i64 8
  store i64 %215, ptr %216, align 8, !tbaa !40
  invoke void @_ZNSt7__cxx114listIN13TPPLPartition8DiagonalESaIS2_EE10push_frontERKS2_(ptr noundef nonnull align 8 dereferenceable(24) %9, ptr noundef nonnull align 8 dereferenceable(16) %12)
          to label %.preheader283 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp

.preheader283:                                    ; preds = %._crit_edge357
  %217 = call noundef zeroext i1 @_ZNKSt7__cxx114listIN13TPPLPartition8DiagonalESaIS2_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %9) #9
  br i1 %217, label %.thread, label %.lr.ph364

.lr.ph364:                                        ; preds = %.preheader283
  %218 = getelementptr inbounds i8, ptr %11, i64 8
  br label %219

219:                                              ; preds = %.lr.ph364, %.backedge287
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %18) #9
  %220 = call ptr @_ZNSt7__cxx114listIN13TPPLPartition8DiagonalESaIS2_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %9) #9
  store ptr %220, ptr %18, align 8
  %221 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNKSt14_List_iteratorIN13TPPLPartition8DiagonalEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %18) #9
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %11, ptr noundef nonnull align 8 dereferenceable(16) %221, i64 16, i1 false), !tbaa.struct !49
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %18) #9
  call void @_ZNSt7__cxx114listIN13TPPLPartition8DiagonalESaIS2_EE9pop_frontEv(ptr noundef nonnull align 8 dereferenceable(24) %9) #9
  %222 = load i64, ptr %218, align 8, !tbaa !40
  %223 = load i64, ptr %11, align 8, !tbaa !38
  %224 = sub nsw i64 %222, %223
  %225 = icmp slt i64 %224, 2
  br i1 %225, label %.backedge287, label %226

226:                                              ; preds = %219
  %227 = getelementptr inbounds ptr, ptr %43, i64 %223
  %228 = load ptr, ptr %227, align 8, !tbaa !17
  %229 = getelementptr inbounds %"struct.TPPLPartition::DPState2", ptr %228, i64 %222, i32 2
  %230 = call noundef zeroext i1 @_ZNKSt7__cxx114listIN13TPPLPartition8DiagonalESaIS2_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %229) #9
  br i1 %230, label %.preheader269, label %231

231:                                              ; preds = %226
  %232 = load i64, ptr %11, align 8, !tbaa !38
  %233 = getelementptr inbounds %"struct.TPPLPartition::PartitionVertex", ptr %30, i64 %232, i32 1
  %234 = load i8, ptr %233, align 1, !tbaa !42, !range !35, !noundef !36
  %235 = trunc nuw i8 %234 to i1
  br i1 %235, label %271, label %236

236:                                              ; preds = %231
  %237 = call ptr @_ZNSt7__cxx114listIN13TPPLPartition8DiagonalESaIS2_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %229) #9
  store ptr %237, ptr %13, align 8, !tbaa !17
  %238 = call ptr @_ZNSt14_List_iteratorIN13TPPLPartition8DiagonalEEmmEi(ptr noundef nonnull align 8 dereferenceable(8) %13, i32 noundef 0) #9
  %239 = call noundef ptr @_ZNKSt14_List_iteratorIN13TPPLPartition8DiagonalEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %13) #9
  %240 = getelementptr inbounds i8, ptr %239, i64 8
  %241 = load i64, ptr %240, align 8, !tbaa !40
  store i64 %241, ptr %8, align 8, !tbaa !24
  store i64 %241, ptr %12, align 8, !tbaa !38
  %242 = load i64, ptr %218, align 8, !tbaa !40
  store i64 %242, ptr %216, align 8, !tbaa !40
  invoke void @_ZNSt7__cxx114listIN13TPPLPartition8DiagonalESaIS2_EE10push_frontERKS2_(ptr noundef nonnull align 8 dereferenceable(24) %9, ptr noundef nonnull align 8 dereferenceable(16) %12)
          to label %243 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit

243:                                              ; preds = %236
  %244 = load i64, ptr %8, align 8, !tbaa !24
  %245 = load i64, ptr %11, align 8, !tbaa !38
  %246 = sub nsw i64 %244, %245
  %247 = icmp sgt i64 %246, 1
  br i1 %247, label %248, label %.backedge287

248:                                              ; preds = %243
  %249 = call noundef ptr @_ZNKSt14_List_iteratorIN13TPPLPartition8DiagonalEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %13) #9
  %250 = load i64, ptr %249, align 8, !tbaa !38
  %251 = call noundef ptr @_ZNKSt14_List_iteratorIN13TPPLPartition8DiagonalEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %13) #9
  %252 = getelementptr inbounds i8, ptr %251, i64 8
  %253 = load i64, ptr %252, align 8, !tbaa !40
  %.not = icmp eq i64 %250, %253
  br i1 %.not, label %.loopexit282, label %254

254:                                              ; preds = %248
  %255 = load i64, ptr %11, align 8, !tbaa !38
  %256 = getelementptr inbounds ptr, ptr %43, i64 %255
  %257 = load ptr, ptr %256, align 8, !tbaa !17
  %258 = load i64, ptr %8, align 8, !tbaa !24
  %259 = getelementptr inbounds %"struct.TPPLPartition::DPState2", ptr %257, i64 %258, i32 2
  %260 = call noundef zeroext i1 @_ZNKSt7__cxx114listIN13TPPLPartition8DiagonalESaIS2_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %259) #9
  br i1 %260, label %.preheader269, label %.lr.ph359

.lr.ph359:                                        ; preds = %254, %267
  %261 = call ptr @_ZNSt7__cxx114listIN13TPPLPartition8DiagonalESaIS2_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %259) #9
  store ptr %261, ptr %14, align 8, !tbaa !17
  %262 = call ptr @_ZNSt14_List_iteratorIN13TPPLPartition8DiagonalEEmmEi(ptr noundef nonnull align 8 dereferenceable(8) %14, i32 noundef 0) #9
  %263 = call noundef ptr @_ZNKSt14_List_iteratorIN13TPPLPartition8DiagonalEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %13) #9
  %264 = load i64, ptr %263, align 8, !tbaa !38
  %265 = call noundef ptr @_ZNKSt14_List_iteratorIN13TPPLPartition8DiagonalEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %14) #9
  %266 = load i64, ptr %265, align 8, !tbaa !38
  %.not246 = icmp eq i64 %264, %266
  br i1 %.not246, label %.loopexit282, label %267

267:                                              ; preds = %.lr.ph359
  call void @_ZNSt7__cxx114listIN13TPPLPartition8DiagonalESaIS2_EE8pop_backEv(ptr noundef nonnull align 8 dereferenceable(24) %259) #9
  %268 = call noundef zeroext i1 @_ZNKSt7__cxx114listIN13TPPLPartition8DiagonalESaIS2_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %259) #9
  br i1 %268, label %.preheader269, label %.lr.ph359, !llvm.loop !50

.loopexit282:                                     ; preds = %.lr.ph359, %248
  %269 = load i64, ptr %11, align 8, !tbaa !38
  store i64 %269, ptr %12, align 8, !tbaa !38
  %270 = load i64, ptr %8, align 8, !tbaa !24
  br label %.loopexit282.invoke

.loopexit282.invoke:                              ; preds = %.loopexit280, %.loopexit282
  %.sink413 = phi i64 [ %304, %.loopexit280 ], [ %270, %.loopexit282 ]
  store i64 %.sink413, ptr %216, align 8, !tbaa !40
  invoke void @_ZNSt7__cxx114listIN13TPPLPartition8DiagonalESaIS2_EE10push_frontERKS2_(ptr noundef nonnull align 8 dereferenceable(24) %9, ptr noundef nonnull align 8 dereferenceable(16) %12)
          to label %.backedge287 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit

271:                                              ; preds = %231
  %272 = call ptr @_ZNSt7__cxx114listIN13TPPLPartition8DiagonalESaIS2_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %229) #9
  store ptr %272, ptr %13, align 8, !tbaa !17
  %273 = call noundef ptr @_ZNKSt14_List_iteratorIN13TPPLPartition8DiagonalEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %13) #9
  %274 = load i64, ptr %273, align 8, !tbaa !38
  store i64 %274, ptr %8, align 8, !tbaa !24
  %275 = load i64, ptr %11, align 8, !tbaa !38
  store i64 %275, ptr %12, align 8, !tbaa !38
  store i64 %274, ptr %216, align 8, !tbaa !40
  invoke void @_ZNSt7__cxx114listIN13TPPLPartition8DiagonalESaIS2_EE10push_frontERKS2_(ptr noundef nonnull align 8 dereferenceable(24) %9, ptr noundef nonnull align 8 dereferenceable(16) %12)
          to label %276 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit

276:                                              ; preds = %271
  %277 = load i64, ptr %218, align 8, !tbaa !40
  %278 = load i64, ptr %8, align 8, !tbaa !24
  %279 = sub nsw i64 %277, %278
  %280 = icmp sgt i64 %279, 1
  br i1 %280, label %281, label %.backedge287

281:                                              ; preds = %276
  %282 = call noundef ptr @_ZNKSt14_List_iteratorIN13TPPLPartition8DiagonalEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %13) #9
  %283 = load i64, ptr %282, align 8, !tbaa !38
  %284 = call noundef ptr @_ZNKSt14_List_iteratorIN13TPPLPartition8DiagonalEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %13) #9
  %285 = getelementptr inbounds i8, ptr %284, i64 8
  %286 = load i64, ptr %285, align 8, !tbaa !40
  %.not247 = icmp eq i64 %283, %286
  br i1 %.not247, label %.loopexit280, label %287

287:                                              ; preds = %281
  %288 = load i64, ptr %8, align 8, !tbaa !24
  %289 = getelementptr inbounds ptr, ptr %43, i64 %288
  %290 = load ptr, ptr %289, align 8, !tbaa !17
  %291 = load i64, ptr %218, align 8, !tbaa !40
  %292 = getelementptr inbounds %"struct.TPPLPartition::DPState2", ptr %290, i64 %291, i32 2
  %293 = call noundef zeroext i1 @_ZNKSt7__cxx114listIN13TPPLPartition8DiagonalESaIS2_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %292) #9
  br i1 %293, label %.preheader269, label %.lr.ph362

.lr.ph362:                                        ; preds = %287, %301
  %294 = call ptr @_ZNSt7__cxx114listIN13TPPLPartition8DiagonalESaIS2_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %292) #9
  store ptr %294, ptr %14, align 8, !tbaa !17
  %295 = call noundef ptr @_ZNKSt14_List_iteratorIN13TPPLPartition8DiagonalEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %13) #9
  %296 = getelementptr inbounds i8, ptr %295, i64 8
  %297 = load i64, ptr %296, align 8, !tbaa !40
  %298 = call noundef ptr @_ZNKSt14_List_iteratorIN13TPPLPartition8DiagonalEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %14) #9
  %299 = getelementptr inbounds i8, ptr %298, i64 8
  %300 = load i64, ptr %299, align 8, !tbaa !40
  %.not248 = icmp eq i64 %297, %300
  br i1 %.not248, label %.loopexit280, label %301

301:                                              ; preds = %.lr.ph362
  call void @_ZNSt7__cxx114listIN13TPPLPartition8DiagonalESaIS2_EE9pop_frontEv(ptr noundef nonnull align 8 dereferenceable(24) %292) #9
  %302 = call noundef zeroext i1 @_ZNKSt7__cxx114listIN13TPPLPartition8DiagonalESaIS2_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %292) #9
  br i1 %302, label %.preheader269, label %.lr.ph362, !llvm.loop !51

.loopexit280:                                     ; preds = %.lr.ph362, %281
  %303 = load i64, ptr %8, align 8, !tbaa !24
  store i64 %303, ptr %12, align 8, !tbaa !38
  %304 = load i64, ptr %218, align 8, !tbaa !40
  br label %.loopexit282.invoke

.backedge287:                                     ; preds = %.loopexit282.invoke, %243, %276, %219
  %305 = call noundef zeroext i1 @_ZNKSt7__cxx114listIN13TPPLPartition8DiagonalESaIS2_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %9) #9
  br i1 %305, label %.thread, label %219, !llvm.loop !52

.preheader269:                                    ; preds = %226, %254, %287, %267, %301
  br i1 %44, label %.lr.ph381, label %._crit_edge382

.lr.ph381:                                        ; preds = %.preheader269, %319
  %.6380 = phi i64 [ %320, %319 ], [ 0, %.preheader269 ]
  %306 = getelementptr inbounds ptr, ptr %43, i64 %.6380
  %307 = load ptr, ptr %306, align 8, !tbaa !17
  %308 = icmp eq ptr %307, null
  br i1 %308, label %319, label %309

309:                                              ; preds = %.lr.ph381
  %310 = getelementptr inbounds i8, ptr %307, i64 -8
  %311 = load i64, ptr %310, align 8
  %312 = icmp eq i64 %311, 0
  br i1 %312, label %.loopexit, label %.preheader.preheader

.preheader.preheader:                             ; preds = %309
  %313 = getelementptr inbounds %"struct.TPPLPartition::DPState2", ptr %307, i64 %311
  br label %.preheader

.preheader:                                       ; preds = %.preheader.preheader, %.preheader
  %314 = phi ptr [ %315, %.preheader ], [ %313, %.preheader.preheader ]
  %315 = getelementptr inbounds i8, ptr %314, i64 -40
  call void @_ZN13TPPLPartition8DPState2D2Ev(ptr noundef nonnull align 8 dereferenceable(40) %315) #9
  %316 = icmp eq ptr %315, %307
  br i1 %316, label %.loopexit, label %.preheader

.loopexit:                                        ; preds = %.preheader, %309
  %317 = mul i64 %311, 40
  %318 = add i64 %317, 8
  call void @_ZdaPvm(ptr noundef nonnull %310, i64 noundef %318) #11
  br label %319

319:                                              ; preds = %.lr.ph381, %.loopexit
  %320 = add nuw nsw i64 %.6380, 1
  %exitcond393.not = icmp eq i64 %320, %25
  br i1 %exitcond393.not, label %._crit_edge382, label %.lr.ph381, !llvm.loop !53

.thread:                                          ; preds = %.backedge287, %.preheader283
  store i64 0, ptr %12, align 8, !tbaa !38
  store i64 %215, ptr %216, align 8, !tbaa !40
  invoke void @_ZNSt7__cxx114listIN13TPPLPartition8DiagonalESaIS2_EE10push_frontERKS2_(ptr noundef nonnull align 8 dereferenceable(24) %9, ptr noundef nonnull align 8 dereferenceable(16) %12)
          to label %.preheader275 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp

.preheader275:                                    ; preds = %.thread
  %321 = call noundef zeroext i1 @_ZNKSt7__cxx114listIN13TPPLPartition8DiagonalESaIS2_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %9) #9
  br i1 %321, label %.preheader272, label %.lr.ph376

.lr.ph376:                                        ; preds = %.preheader275
  %322 = getelementptr inbounds i8, ptr %11, i64 8
  br label %323

.preheader272:                                    ; preds = %.backedge279, %.preheader275
  br i1 %44, label %.lr.ph378, label %._crit_edge382

323:                                              ; preds = %.lr.ph376, %.backedge279
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %19) #9
  %324 = call ptr @_ZNSt7__cxx114listIN13TPPLPartition8DiagonalESaIS2_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %9) #9
  store ptr %324, ptr %19, align 8
  %325 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNKSt14_List_iteratorIN13TPPLPartition8DiagonalEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %19) #9
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %11, ptr noundef nonnull align 8 dereferenceable(16) %325, i64 16, i1 false), !tbaa.struct !49
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %19) #9
  call void @_ZNSt7__cxx114listIN13TPPLPartition8DiagonalESaIS2_EE9pop_frontEv(ptr noundef nonnull align 8 dereferenceable(24) %9) #9
  %326 = load i64, ptr %322, align 8, !tbaa !40
  %327 = load i64, ptr %11, align 8, !tbaa !38
  %328 = sub nsw i64 %326, %327
  %329 = icmp slt i64 %328, 2
  br i1 %329, label %.backedge279, label %331

.backedge279:                                     ; preds = %323, %._crit_edge375
  %330 = call noundef zeroext i1 @_ZNKSt7__cxx114listIN13TPPLPartition8DiagonalESaIS2_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %9) #9
  br i1 %330, label %.preheader272, label %323, !llvm.loop !54

331:                                              ; preds = %323
  call void @_ZNSt6vectorIlSaIlEE5clearEv(ptr noundef nonnull align 8 dereferenceable(24) %16) #9
  call void @_ZNSt7__cxx114listIN13TPPLPartition8DiagonalESaIS2_EE5clearEv(ptr noundef nonnull align 8 dereferenceable(24) %10) #9
  invoke void @_ZNSt6vectorIlSaIlEE9push_backERKl(ptr noundef nonnull align 8 dereferenceable(24) %16, ptr noundef nonnull align 8 dereferenceable(8) %11)
          to label %332 unwind label %.loopexit.split-lp.loopexit

332:                                              ; preds = %331
  invoke void @_ZNSt6vectorIlSaIlEE9push_backERKl(ptr noundef nonnull align 8 dereferenceable(24) %16, ptr noundef nonnull align 8 dereferenceable(8) %322)
          to label %333 unwind label %.loopexit.split-lp.loopexit

333:                                              ; preds = %332
  invoke void @_ZNSt7__cxx114listIN13TPPLPartition8DiagonalESaIS2_EE10push_frontERKS2_(ptr noundef nonnull align 8 dereferenceable(24) %10, ptr noundef nonnull align 8 dereferenceable(16) %11)
          to label %.preheader273 unwind label %.loopexit.split-lp.loopexit

.preheader273:                                    ; preds = %333
  %334 = call noundef zeroext i1 @_ZNKSt7__cxx114listIN13TPPLPartition8DiagonalESaIS2_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %10) #9
  br i1 %334, label %._crit_edge371, label %.lr.ph370

.lr.ph370:                                        ; preds = %.preheader273, %.backedge
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %20) #9
  %335 = call ptr @_ZNSt7__cxx114listIN13TPPLPartition8DiagonalESaIS2_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %10) #9
  store ptr %335, ptr %20, align 8
  %336 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNKSt14_List_iteratorIN13TPPLPartition8DiagonalEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %20) #9
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %11, ptr noundef nonnull align 8 dereferenceable(16) %336, i64 16, i1 false), !tbaa.struct !49
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %20) #9
  call void @_ZNSt7__cxx114listIN13TPPLPartition8DiagonalESaIS2_EE9pop_frontEv(ptr noundef nonnull align 8 dereferenceable(24) %10) #9
  %337 = load i64, ptr %322, align 8, !tbaa !40
  %338 = load i64, ptr %11, align 8, !tbaa !38
  %339 = sub nsw i64 %337, %338
  %340 = icmp slt i64 %339, 2
  br i1 %340, label %.backedge, label %342

.backedge:                                        ; preds = %.lr.ph370, %380
  %341 = call noundef zeroext i1 @_ZNKSt7__cxx114listIN13TPPLPartition8DiagonalESaIS2_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %10) #9
  br i1 %341, label %._crit_edge371, label %.lr.ph370, !llvm.loop !55

342:                                              ; preds = %.lr.ph370
  %343 = getelementptr inbounds ptr, ptr %43, i64 %338
  %344 = load ptr, ptr %343, align 8, !tbaa !17
  %345 = getelementptr inbounds %"struct.TPPLPartition::DPState2", ptr %344, i64 %337, i32 2
  %346 = getelementptr inbounds %"struct.TPPLPartition::PartitionVertex", ptr %30, i64 %338, i32 1
  %347 = load i8, ptr %346, align 1, !tbaa !42, !range !35, !noundef !36
  %348 = trunc nuw i8 %347 to i1
  br i1 %348, label %.thread262, label %359

.thread262:                                       ; preds = %342
  %349 = call ptr @_ZNSt7__cxx114listIN13TPPLPartition8DiagonalESaIS2_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %345) #9
  store ptr %349, ptr %13, align 8, !tbaa !17
  %350 = call noundef ptr @_ZNKSt14_List_iteratorIN13TPPLPartition8DiagonalEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %13) #9
  %351 = load i64, ptr %350, align 8, !tbaa !38
  store i64 %351, ptr %8, align 8, !tbaa !24
  %352 = call noundef ptr @_ZNKSt14_List_iteratorIN13TPPLPartition8DiagonalEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %13) #9
  %353 = load i64, ptr %352, align 8, !tbaa !38
  %354 = call noundef ptr @_ZNKSt14_List_iteratorIN13TPPLPartition8DiagonalEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %13) #9
  %355 = getelementptr inbounds i8, ptr %354, i64 8
  %356 = load i64, ptr %355, align 8, !tbaa !40
  %.not250 = icmp eq i64 %353, %356
  %357 = load i64, ptr %11, align 8, !tbaa !38
  store i64 %357, ptr %12, align 8, !tbaa !38
  %358 = load i64, ptr %8, align 8, !tbaa !24
  store i64 %358, ptr %216, align 8, !tbaa !40
  br label %372

359:                                              ; preds = %342
  %360 = call ptr @_ZNSt7__cxx114listIN13TPPLPartition8DiagonalESaIS2_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %345) #9
  store ptr %360, ptr %13, align 8, !tbaa !17
  %361 = call ptr @_ZNSt14_List_iteratorIN13TPPLPartition8DiagonalEEmmEi(ptr noundef nonnull align 8 dereferenceable(8) %13, i32 noundef 0) #9
  %362 = call noundef ptr @_ZNKSt14_List_iteratorIN13TPPLPartition8DiagonalEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %13) #9
  %363 = getelementptr inbounds i8, ptr %362, i64 8
  %364 = load i64, ptr %363, align 8, !tbaa !40
  store i64 %364, ptr %8, align 8, !tbaa !24
  %365 = call noundef ptr @_ZNKSt14_List_iteratorIN13TPPLPartition8DiagonalEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %13) #9
  %366 = load i64, ptr %365, align 8, !tbaa !38
  %367 = call noundef ptr @_ZNKSt14_List_iteratorIN13TPPLPartition8DiagonalEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %13) #9
  %368 = getelementptr inbounds i8, ptr %367, i64 8
  %369 = load i64, ptr %368, align 8, !tbaa !40
  %.not249 = icmp eq i64 %366, %369
  %370 = load i64, ptr %11, align 8, !tbaa !38
  store i64 %370, ptr %12, align 8, !tbaa !38
  %371 = load i64, ptr %8, align 8, !tbaa !24
  store i64 %371, ptr %216, align 8, !tbaa !40
  br i1 %.not249, label %372, label %373

372:                                              ; preds = %.thread262, %359
  %.0228266 = phi i1 [ %.not250, %.thread262 ], [ true, %359 ]
  invoke void @_ZNSt7__cxx114listIN13TPPLPartition8DiagonalESaIS2_EE9push_backERKS2_(ptr noundef nonnull align 8 dereferenceable(24) %9, ptr noundef nonnull align 8 dereferenceable(16) %12)
          to label %376 unwind label %.loopexit274

373:                                              ; preds = %359
  invoke void @_ZNSt7__cxx114listIN13TPPLPartition8DiagonalESaIS2_EE9push_backERKS2_(ptr noundef nonnull align 8 dereferenceable(24) %10, ptr noundef nonnull align 8 dereferenceable(16) %12)
          to label %.thread267 unwind label %.loopexit274

.thread267:                                       ; preds = %373
  %374 = load i64, ptr %8, align 8, !tbaa !24
  store i64 %374, ptr %12, align 8, !tbaa !38
  %375 = load i64, ptr %322, align 8, !tbaa !40
  store i64 %375, ptr %216, align 8, !tbaa !40
  br label %.invoke

376:                                              ; preds = %372
  %377 = load i64, ptr %8, align 8, !tbaa !24
  store i64 %377, ptr %12, align 8, !tbaa !38
  %378 = load i64, ptr %322, align 8, !tbaa !40
  store i64 %378, ptr %216, align 8, !tbaa !40
  %spec.select414 = select i1 %.0228266, ptr %9, ptr %10
  br label %.invoke

.invoke:                                          ; preds = %376, %.thread267
  %379 = phi ptr [ %9, %.thread267 ], [ %spec.select414, %376 ]
  invoke void @_ZNSt7__cxx114listIN13TPPLPartition8DiagonalESaIS2_EE9push_backERKS2_(ptr noundef nonnull align 8 dereferenceable(24) %379, ptr noundef nonnull align 8 dereferenceable(16) %12)
          to label %380 unwind label %.loopexit274

380:                                              ; preds = %.invoke
  invoke void @_ZNSt6vectorIlSaIlEE9push_backERKl(ptr noundef nonnull align 8 dereferenceable(24) %16, ptr noundef nonnull align 8 dereferenceable(8) %8)
          to label %.backedge unwind label %.loopexit274

._crit_edge371:                                   ; preds = %.backedge, %.preheader273
  %381 = call ptr @_ZNSt6vectorIlSaIlEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %16) #9
  %382 = call ptr @_ZNSt6vectorIlSaIlEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %16) #9
  invoke void @_ZSt4sortIN9__gnu_cxx17__normal_iteratorIPlSt6vectorIlSaIlEEEEEvT_S7_(ptr %381, ptr %382)
          to label %383 unwind label %.loopexit.split-lp.loopexit

383:                                              ; preds = %._crit_edge371
  %384 = call noundef i64 @_ZNKSt6vectorIlSaIlEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %16) #9
  invoke void @_ZN8TPPLPoly4InitEl(ptr noundef nonnull align 8 dereferenceable(17) %15, i64 noundef %384)
          to label %385 unwind label %.loopexit.split-lp.loopexit

385:                                              ; preds = %383
  %386 = call ptr @_ZNSt6vectorIlSaIlEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %16) #9
  store ptr %386, ptr %17, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %21) #9
  %387 = call ptr @_ZNSt6vectorIlSaIlEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %16) #9
  store ptr %387, ptr %21, align 8
  %388 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPlSt6vectorIlSaIlEEEEbRKNS_17__normal_iteratorIT_T0_EESA_(ptr noundef nonnull align 8 dereferenceable(8) %17, ptr noundef nonnull align 8 dereferenceable(8) %21) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %21) #9
  br i1 %388, label %.lr.ph374, label %._crit_edge375

.lr.ph374:                                        ; preds = %385, %.lr.ph374
  %.2214372 = phi i32 [ %393, %.lr.ph374 ], [ 0, %385 ]
  %389 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPlSt6vectorIlSaIlEEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %17) #9
  %390 = load i64, ptr %389, align 8, !tbaa !24
  %391 = getelementptr inbounds %"struct.TPPLPartition::PartitionVertex", ptr %30, i64 %390, i32 3
  %392 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZN8TPPLPolyixEi(ptr noundef nonnull align 8 dereferenceable(17) %15, i32 noundef %.2214372)
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %392, ptr noundef nonnull align 8 dereferenceable(24) %391, i64 24, i1 false), !tbaa.struct !5
  %393 = add i32 %.2214372, 1
  %394 = call ptr @_ZN9__gnu_cxx17__normal_iteratorIPlSt6vectorIlSaIlEEEppEi(ptr noundef nonnull align 8 dereferenceable(8) %17, i32 noundef 0) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %21) #9
  %395 = call ptr @_ZNSt6vectorIlSaIlEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %16) #9
  store ptr %395, ptr %21, align 8
  %396 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPlSt6vectorIlSaIlEEEEbRKNS_17__normal_iteratorIT_T0_EESA_(ptr noundef nonnull align 8 dereferenceable(8) %17, ptr noundef nonnull align 8 dereferenceable(8) %21) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %21) #9
  br i1 %396, label %.lr.ph374, label %._crit_edge375, !llvm.loop !56

._crit_edge375:                                   ; preds = %.lr.ph374, %385
  invoke void @_ZNSt7__cxx114listI8TPPLPolySaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %2, ptr noundef nonnull align 8 dereferenceable(17) %15)
          to label %.backedge279 unwind label %.loopexit.split-lp.loopexit

.lr.ph378:                                        ; preds = %.preheader272, %410
  %.7377 = phi i64 [ %411, %410 ], [ 0, %.preheader272 ]
  %397 = getelementptr inbounds ptr, ptr %43, i64 %.7377
  %398 = load ptr, ptr %397, align 8, !tbaa !17
  %399 = icmp eq ptr %398, null
  br i1 %399, label %410, label %400

400:                                              ; preds = %.lr.ph378
  %401 = getelementptr inbounds i8, ptr %398, i64 -8
  %402 = load i64, ptr %401, align 8
  %403 = icmp eq i64 %402, 0
  br i1 %403, label %.loopexit271, label %.preheader270.preheader

.preheader270.preheader:                          ; preds = %400
  %404 = getelementptr inbounds %"struct.TPPLPartition::DPState2", ptr %398, i64 %402
  br label %.preheader270

.preheader270:                                    ; preds = %.preheader270.preheader, %.preheader270
  %405 = phi ptr [ %406, %.preheader270 ], [ %404, %.preheader270.preheader ]
  %406 = getelementptr inbounds i8, ptr %405, i64 -40
  call void @_ZN13TPPLPartition8DPState2D2Ev(ptr noundef nonnull align 8 dereferenceable(40) %406) #9
  %407 = icmp eq ptr %406, %398
  br i1 %407, label %.loopexit271, label %.preheader270

.loopexit271:                                     ; preds = %.preheader270, %400
  %408 = mul i64 %402, 40
  %409 = add i64 %408, 8
  call void @_ZdaPvm(ptr noundef nonnull %401, i64 noundef %409) #11
  br label %410

410:                                              ; preds = %.lr.ph378, %.loopexit271
  %411 = add nuw nsw i64 %.7377, 1
  %exitcond392.not = icmp eq i64 %411, %25
  br i1 %exitcond392.not, label %._crit_edge382, label %.lr.ph378, !llvm.loop !57

._crit_edge382:                                   ; preds = %319, %410, %.preheader272, %.preheader269
  %.6222406 = phi i32 [ 0, %.preheader269 ], [ 1, %.preheader272 ], [ 1, %410 ], [ 0, %319 ]
  call void @_ZdaPv(ptr noundef nonnull %43) #11
  call void @_ZdaPv(ptr noundef nonnull %30) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %17) #9
  call void @_ZNSt6vectorIlSaIlEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %16) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %16) #9
  call void @_ZN8TPPLPolyD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %15) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %15) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %12) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %11) #9
  call void @_ZNSt7__cxx1110_List_baseIN13TPPLPartition8DiagonalESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %10) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %10) #9
  call void @_ZNSt7__cxx1110_List_baseIN13TPPLPartition8DiagonalESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %9) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %9) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %7) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %6) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %5) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %4) #9
  br label %413

.loopexit.split-lp:                               ; preds = %.loopexit274, %.loopexit.split-lp.loopexit.split-lp.loopexit, %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit, %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit, %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit, %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit, %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp, %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit, %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit, %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit, %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit, %.loopexit.split-lp.loopexit, %75
  %.pn = phi { ptr, i32 } [ %76, %75 ], [ %lpad.loopexit, %.loopexit274 ], [ %lpad.loopexit276, %.loopexit.split-lp.loopexit ], [ %lpad.loopexit285, %.loopexit.split-lp.loopexit.split-lp.loopexit ], [ %lpad.loopexit289, %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit ], [ %lpad.loopexit293, %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit ], [ %lpad.loopexit297, %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit ], [ %lpad.loopexit301, %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit ], [ %lpad.loopexit304, %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit ], [ %lpad.loopexit308, %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit ], [ %lpad.loopexit312, %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit ], [ %lpad.loopexit321, %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit ], [ %lpad.loopexit.split-lp, %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %17) #9
  call void @_ZNSt6vectorIlSaIlEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %16) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %16) #9
  call void @_ZN8TPPLPolyD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %15) #9
  br label %412

412:                                              ; preds = %.loopexit.split-lp, %73
  %.pn.pn = phi { ptr, i32 } [ %.pn, %.loopexit.split-lp ], [ %74, %73 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %15) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %12) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %11) #9
  call void @_ZNSt7__cxx1110_List_baseIN13TPPLPartition8DiagonalESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %10) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %10) #9
  call void @_ZNSt7__cxx1110_List_baseIN13TPPLPartition8DiagonalESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %9) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %9) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %7) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %6) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %5) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %4) #9
  resume { ptr, i32 } %.pn.pn

413:                                              ; preds = %3, %._crit_edge382
  %.1 = phi i32 [ %.6222406, %._crit_edge382 ], [ 0, %3 ]
  ret i32 %.1
}

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt6vectorIlSaIlEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN9__gnu_cxx17__normal_iteratorIPlSt6vectorIlSaIlEEEC2Ev(ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #6 align 2

; Function Attrs: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare { i64, i1 } @llvm.uadd.with.overflow.i64(i64, i64) #2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN13TPPLPartition8DPState2C2Ev(ptr noundef nonnull align 8 dereferenceable(40)) unnamed_addr #7 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt7__cxx114listIN13TPPLPartition8DiagonalESaIS2_EE8pop_backEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #6 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN13TPPLPartition8DPState2D2Ev(ptr noundef nonnull align 8 dereferenceable(40)) unnamed_addr #7 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt6vectorIlSaIlEE5clearEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #6 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt6vectorIlSaIlEE9push_backERKl(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #1 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZSt4sortIN9__gnu_cxx17__normal_iteratorIPlSt6vectorIlSaIlEEEEEvT_S7_(ptr, ptr) local_unnamed_addr #8

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNSt6vectorIlSaIlEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNSt6vectorIlSaIlEE3endEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZNKSt6vectorIlSaIlEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #6 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZN9__gnu_cxxneIPlSt6vectorIlSaIlEEEEbRKNS_17__normal_iteratorIT_T0_EESA_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #7

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPlSt6vectorIlSaIlEEEdeEv(ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZN9__gnu_cxx17__normal_iteratorIPlSt6vectorIlSaIlEEEppEi(ptr noundef nonnull align 8 dereferenceable(8), i32 noundef) local_unnamed_addr #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt6vectorIlSaIlEED2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #6 align 2

declare void @_ZN8TPPLPolyC1Ev(ptr) local_unnamed_addr

declare void @_ZN8TPPLPolyD1Ev(ptr) local_unnamed_addr

declare void @_ZN13TPPLPartition15PartitionVertexC1Ev(ptr) local_unnamed_addr

attributes #0 = { nobuiltin 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 = { mustprogress 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 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #3 = { nobuiltin allocsize(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 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #5 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #6 = { mustprogress 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 #7 = { inlinehint mustprogress 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 #8 = { inlinehint mustprogress 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 #9 = { nounwind }
attributes #10 = { builtin allocsize(0) }
attributes #11 = { builtin 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 = !{i64 0, i64 8, !6, i64 8, i64 8, !6, i64 16, i64 4, !10}
!6 = !{!7, !7, i64 0}
!7 = !{!"double", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!11, !11, i64 0}
!11 = !{!"int", !8, i64 0}
!12 = !{!13, !14, i64 0}
!13 = !{!"_ZTSN13TPPLPartition15PartitionVertexE", !14, i64 0, !14, i64 1, !14, i64 2, !15, i64 8, !7, i64 32, !16, i64 40, !16, i64 48}
!14 = !{!"bool", !8, i64 0}
!15 = !{!"_ZTS9TPPLPoint", !7, i64 0, !7, i64 8, !11, i64 16}
!16 = !{!"any pointer", !8, i64 0}
!17 = !{!16, !16, i64 0}
!18 = distinct !{!18, !19}
!19 = !{!"llvm.loop.mustprogress"}
!20 = distinct !{!20, !19, !21}
!21 = !{!"llvm.loop.peeled.count", i32 1}
!22 = distinct !{!22, !19}
!23 = distinct !{!23, !19}
!24 = !{!25, !25, i64 0}
!25 = !{!"long", !8, i64 0}
!26 = !{!27, !14, i64 0}
!27 = !{!"_ZTSN13TPPLPartition8DPState2E", !14, i64 0, !25, i64 8, !28, i64 16}
!28 = !{!"_ZTSNSt7__cxx114listIN13TPPLPartition8DiagonalESaIS2_EEE", !29, i64 0}
!29 = !{!"_ZTSNSt7__cxx1110_List_baseIN13TPPLPartition8DiagonalESaIS2_EEE", !30, i64 0}
!30 = !{!"_ZTSNSt7__cxx1110_List_baseIN13TPPLPartition8DiagonalESaIS2_EE10_List_implE", !31, i64 0}
!31 = !{!"_ZTSNSt8__detail17_List_node_headerE", !32, i64 0, !25, i64 16}
!32 = !{!"_ZTSNSt8__detail15_List_node_baseE", !16, i64 0, !16, i64 8}
!33 = distinct !{!33, !19}
!34 = distinct !{!34, !19}
!35 = !{i8 0, i8 2}
!36 = !{}
!37 = !{!27, !25, i64 8}
!38 = !{!39, !25, i64 0}
!39 = !{!"_ZTSN13TPPLPartition8DiagonalE", !25, i64 0, !25, i64 8}
!40 = !{!39, !25, i64 8}
!41 = distinct !{!41, !19}
!42 = !{!13, !14, i64 1}
!43 = distinct !{!43, !19}
!44 = distinct !{!44, !19}
!45 = distinct !{!45, !19}
!46 = distinct !{!46, !19}
!47 = distinct !{!47, !19}
!48 = distinct !{!48, !19}
!49 = !{i64 0, i64 8, !24, i64 8, i64 8, !24}
!50 = distinct !{!50, !19}
!51 = distinct !{!51, !19}
!52 = distinct !{!52, !19}
!53 = distinct !{!53, !19}
!54 = distinct !{!54, !19}
!55 = distinct !{!55, !19}
!56 = distinct !{!56, !19}
!57 = distinct !{!57, !19}


; Effective O3 passes: AggressiveInstCombinePass,ConstraintEliminationPass,CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,LCSSAPass,LICMPass,LoopFullUnrollPass,LoopInstSimplifyPass,LoopRotatePass,LoopSimplifyCFGPass,LoopSimplifyPass,LoopUnrollPass,MergedLoadStoreMotionPass,PostOrderFunctionAttrsPass,SCCPPass,SROAPass,SimplifyCFGPass,TailCallElimPass