; 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"

%"class.std::__cxx11::list" = type { %"class.std::__cxx11::_List_base" }
%"class.std::__cxx11::_List_base" = type { %"struct.std::__cxx11::_List_base<TPPLPoly, std::allocator<TPPLPoly>>::_List_impl" }
%"struct.std::__cxx11::_List_base<TPPLPoly, std::allocator<TPPLPoly>>::_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.std::_List_iterator" = type { ptr }
%struct.TPPLPoint = type { double, double, i32 }
%class.TPPLPoly = type <{ ptr, i64, i8, [7 x i8] }>
%"struct.std::_List_const_iterator" = type { ptr }

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

; 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) #1

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) #2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef double @_ZN13TPPLPartition8DistanceERK9TPPLPointS2_(ptr noundef nonnull align 1 dereferenceable(1), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24)) #3 align 2

; 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)) #0 align 2

; Function Attrs: mustprogress uwtable
define dso_local noundef i32 @_ZN13TPPLPartition11RemoveHolesEPNSt7__cxx114listI8TPPLPolySaIS2_EEES5_(ptr noundef nonnull align 1 dereferenceable(1) %0, ptr noundef %1, ptr noundef %2) #0 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 %"class.std::__cxx11::list", align 8
  %9 = alloca %"struct.std::_List_iterator", align 8
  %10 = alloca %"struct.std::_List_iterator", align 8
  %11 = alloca %"struct.std::_List_iterator", align 8
  %12 = alloca %"struct.std::_List_iterator", align 8
  %13 = alloca i64, align 8
  %14 = alloca i64, align 8
  %15 = alloca i64, align 8
  %16 = alloca i64, align 8
  %17 = alloca %struct.TPPLPoint, align 8
  %18 = alloca %struct.TPPLPoint, align 8
  %19 = alloca %struct.TPPLPoint, align 8
  %20 = alloca %struct.TPPLPoint, align 8
  %21 = alloca %struct.TPPLPoint, align 8
  %22 = alloca double, align 8
  %23 = alloca double, align 8
  %24 = alloca %class.TPPLPoly, align 8
  %25 = alloca ptr, align 8
  %26 = alloca i32, align 4
  %27 = alloca i8, align 1
  %28 = alloca i8, align 1
  %29 = alloca i8, align 1
  %30 = alloca %"struct.std::_List_iterator", align 8
  %31 = alloca %"struct.std::_List_iterator", align 8
  %32 = alloca %"struct.std::_List_iterator", align 8
  %33 = alloca %"struct.std::_List_iterator", align 8
  %34 = alloca %"struct.std::_List_iterator", align 8
  %35 = alloca %"struct.std::_List_iterator", align 8
  %36 = alloca i32, align 4
  %37 = alloca %"struct.std::_List_iterator", align 8
  %38 = alloca %"struct.std::_List_iterator", align 8
  %39 = alloca %"struct.std::_List_iterator", align 8
  %40 = alloca %"struct.std::_List_iterator", align 8
  %41 = alloca %"struct.std::_List_iterator", align 8
  %42 = alloca %"struct.std::_List_iterator", align 8
  %43 = alloca %"struct.std::_List_iterator", align 8
  %44 = alloca %"struct.std::_List_iterator", align 8
  %45 = alloca %"struct.std::_List_iterator", align 8
  %46 = alloca %"struct.std::_List_const_iterator", align 8
  %47 = alloca %"struct.std::_List_iterator", align 8
  %48 = alloca %"struct.std::_List_const_iterator", align 8
  %49 = alloca %"struct.std::_List_iterator", align 8
  %50 = alloca %"struct.std::_List_iterator", align 8
  %51 = alloca %"struct.std::_List_iterator", align 8
  %52 = alloca %"struct.std::_List_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
  call void @llvm.lifetime.start.p0(i64 24, ptr %8) #4
  call void @_ZNSt7__cxx114listI8TPPLPolySaIS1_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %8) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #4
  call void @_ZNSt14_List_iteratorI8TPPLPolyEC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %9) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #4
  call void @_ZNSt14_List_iteratorI8TPPLPolyEC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %10) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #4
  call void @_ZNSt14_List_iteratorI8TPPLPolyEC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %11) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #4
  call void @_ZNSt14_List_iteratorI8TPPLPolyEC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %12) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #4
  call void @llvm.lifetime.start.p0(i64 24, ptr %17) #4
  call void @llvm.lifetime.start.p0(i64 24, ptr %18) #4
  call void @llvm.lifetime.start.p0(i64 24, ptr %19) #4
  call void @llvm.lifetime.start.p0(i64 24, ptr %20) #4
  call void @llvm.lifetime.start.p0(i64 24, ptr %21) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #4
  call void @llvm.lifetime.start.p0(i64 24, ptr %24) #4
  invoke void @_ZN8TPPLPolyC1Ev(ptr noundef nonnull align 8 dereferenceable(17) %24)
          to label %54 unwind label %68

54:                                               ; preds = %3
  call void @llvm.lifetime.start.p0(i64 1, ptr %27) #4
  call void @llvm.lifetime.start.p0(i64 1, ptr %28) #4
  call void @llvm.lifetime.start.p0(i64 1, ptr %29) #4
  store i8 0, ptr %27, align 1, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #4
  %55 = load ptr, ptr %6, align 8, !tbaa !5
  %56 = call ptr @_ZNSt7__cxx114listI8TPPLPolySaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %55) #4
  %57 = getelementptr inbounds %"struct.std::_List_iterator", ptr %30, i32 0, i32 0
  store ptr %56, ptr %57, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %11, ptr align 8 %30, i64 8, i1 false), !tbaa.struct !11
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #4
  br label %58

58:                                               ; preds = %77, %54
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #4
  %59 = load ptr, ptr %6, align 8, !tbaa !5
  %60 = call ptr @_ZNSt7__cxx114listI8TPPLPolySaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %59) #4
  %61 = getelementptr inbounds %"struct.std::_List_iterator", ptr %31, i32 0, i32 0
  store ptr %60, ptr %61, align 8
  %62 = call noundef zeroext i1 @_ZStneRKSt14_List_iteratorI8TPPLPolyES3_(ptr noundef nonnull align 8 dereferenceable(8) %11, ptr noundef nonnull align 8 dereferenceable(8) %31) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #4
  br i1 %62, label %63, label %80

63:                                               ; preds = %58
  %64 = call noundef ptr @_ZNKSt14_List_iteratorI8TPPLPolyEptEv(ptr noundef nonnull align 8 dereferenceable(8) %11) #4
  %65 = invoke noundef zeroext i1 @_ZNK8TPPLPoly6IsHoleEv(ptr noundef nonnull align 8 dereferenceable(17) %64)
          to label %66 unwind label %72

66:                                               ; preds = %63
  br i1 %65, label %67, label %76

67:                                               ; preds = %66
  store i8 1, ptr %27, align 1, !tbaa !9
  br label %80

68:                                               ; preds = %3
  %69 = landingpad { ptr, i32 }
          cleanup
  %70 = extractvalue { ptr, i32 } %69, 0
  store ptr %70, ptr %25, align 8
  %71 = extractvalue { ptr, i32 } %69, 1
  store i32 %71, ptr %26, align 4
  br label %405

72:                                               ; preds = %395, %378, %368, %364, %358, %346, %343, %336, %330, %319, %315, %307, %304, %301, %267, %264, %258, %254, %248, %242, %220, %216, %213, %207, %203, %200, %195, %190, %179, %173, %167, %156, %132, %128, %122, %112, %100, %92, %63
  %73 = landingpad { ptr, i32 }
          cleanup
  %74 = extractvalue { ptr, i32 } %73, 0
  store ptr %74, ptr %25, align 8
  %75 = extractvalue { ptr, i32 } %73, 1
  store i32 %75, ptr %26, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %29) #4
  call void @llvm.lifetime.end.p0(i64 1, ptr %28) #4
  call void @llvm.lifetime.end.p0(i64 1, ptr %27) #4
  call void @_ZN8TPPLPolyD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %24) #4
  br label %405

76:                                               ; preds = %66
  br label %77

77:                                               ; preds = %76
  %78 = call ptr @_ZNSt14_List_iteratorI8TPPLPolyEppEi(ptr noundef nonnull align 8 dereferenceable(8) %11, i32 noundef 0) #4
  %79 = getelementptr inbounds %"struct.std::_List_iterator", ptr %32, i32 0, i32 0
  store ptr %78, ptr %79, align 8
  br label %58, !llvm.loop !12

80:                                               ; preds = %67, %58
  %81 = load i8, ptr %27, align 1, !tbaa !9, !range !14, !noundef !15
  %82 = trunc i8 %81 to i1
  br i1 %82, label %100, label %83

83:                                               ; preds = %80
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #4
  %84 = load ptr, ptr %6, align 8, !tbaa !5
  %85 = call ptr @_ZNSt7__cxx114listI8TPPLPolySaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %84) #4
  %86 = getelementptr inbounds %"struct.std::_List_iterator", ptr %33, i32 0, i32 0
  store ptr %85, ptr %86, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %11, ptr align 8 %33, i64 8, i1 false), !tbaa.struct !11
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #4
  br label %87

87:                                               ; preds = %96, %83
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #4
  %88 = load ptr, ptr %6, align 8, !tbaa !5
  %89 = call ptr @_ZNSt7__cxx114listI8TPPLPolySaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %88) #4
  %90 = getelementptr inbounds %"struct.std::_List_iterator", ptr %34, i32 0, i32 0
  store ptr %89, ptr %90, align 8
  %91 = call noundef zeroext i1 @_ZStneRKSt14_List_iteratorI8TPPLPolyES3_(ptr noundef nonnull align 8 dereferenceable(8) %11, ptr noundef nonnull align 8 dereferenceable(8) %34) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #4
  br i1 %91, label %92, label %99

92:                                               ; preds = %87
  %93 = load ptr, ptr %7, align 8, !tbaa !5
  %94 = call noundef nonnull align 8 dereferenceable(17) ptr @_ZNKSt14_List_iteratorI8TPPLPolyEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %11) #4
  invoke void @_ZNSt7__cxx114listI8TPPLPolySaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %93, ptr noundef nonnull align 8 dereferenceable(17) %94)
          to label %95 unwind label %72

95:                                               ; preds = %92
  br label %96

96:                                               ; preds = %95
  %97 = call ptr @_ZNSt14_List_iteratorI8TPPLPolyEppEi(ptr noundef nonnull align 8 dereferenceable(8) %11, i32 noundef 0) #4
  %98 = getelementptr inbounds %"struct.std::_List_iterator", ptr %35, i32 0, i32 0
  store ptr %97, ptr %98, align 8
  br label %87, !llvm.loop !16

99:                                               ; preds = %87
  store i32 1, ptr %4, align 4
  store i32 1, ptr %36, align 4
  br label %403

100:                                              ; preds = %80
  %101 = load ptr, ptr %6, align 8, !tbaa !5
  %102 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt7__cxx114listI8TPPLPolySaIS1_EEaSERKS3_(ptr noundef nonnull align 8 dereferenceable(24) %8, ptr noundef nonnull align 8 dereferenceable(24) %101)
          to label %103 unwind label %72

103:                                              ; preds = %100
  br label %104

104:                                              ; preds = %387, %103
  br label %105

105:                                              ; preds = %104
  store i8 0, ptr %27, align 1, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #4
  %106 = call ptr @_ZNSt7__cxx114listI8TPPLPolySaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %8) #4
  %107 = getelementptr inbounds %"struct.std::_List_iterator", ptr %37, i32 0, i32 0
  store ptr %106, ptr %107, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %11, ptr align 8 %37, i64 8, i1 false), !tbaa.struct !11
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #4
  br label %108

108:                                              ; preds = %149, %105
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #4
  %109 = call ptr @_ZNSt7__cxx114listI8TPPLPolySaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %8) #4
  %110 = getelementptr inbounds %"struct.std::_List_iterator", ptr %38, i32 0, i32 0
  store ptr %109, ptr %110, align 8
  %111 = call noundef zeroext i1 @_ZStneRKSt14_List_iteratorI8TPPLPolyES3_(ptr noundef nonnull align 8 dereferenceable(8) %11, ptr noundef nonnull align 8 dereferenceable(8) %38) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #4
  br i1 %111, label %112, label %152

112:                                              ; preds = %108
  %113 = call noundef ptr @_ZNKSt14_List_iteratorI8TPPLPolyEptEv(ptr noundef nonnull align 8 dereferenceable(8) %11) #4
  %114 = invoke noundef zeroext i1 @_ZNK8TPPLPoly6IsHoleEv(ptr noundef nonnull align 8 dereferenceable(17) %113)
          to label %115 unwind label %72

115:                                              ; preds = %112
  br i1 %114, label %117, label %116

116:                                              ; preds = %115
  br label %149

117:                                              ; preds = %115
  %118 = load i8, ptr %27, align 1, !tbaa !9, !range !14, !noundef !15
  %119 = trunc i8 %118 to i1
  br i1 %119, label %121, label %120

120:                                              ; preds = %117
  store i8 1, ptr %27, align 1, !tbaa !9
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %9, ptr align 8 %11, i64 8, i1 false), !tbaa.struct !11
  store i64 0, ptr %15, align 8, !tbaa !17
  br label %121

121:                                              ; preds = %120, %117
  store i64 0, ptr %13, align 8, !tbaa !17
  br label %122

122:                                              ; preds = %145, %121
  %123 = load i64, ptr %13, align 8, !tbaa !17
  %124 = call noundef ptr @_ZNKSt14_List_iteratorI8TPPLPolyEptEv(ptr noundef nonnull align 8 dereferenceable(8) %11) #4
  %125 = invoke noundef i64 @_ZNK8TPPLPoly12GetNumPointsEv(ptr noundef nonnull align 8 dereferenceable(17) %124)
          to label %126 unwind label %72

126:                                              ; preds = %122
  %127 = icmp slt i64 %123, %125
  br i1 %127, label %128, label %148

128:                                              ; preds = %126
  %129 = call noundef ptr @_ZNKSt14_List_iteratorI8TPPLPolyEptEv(ptr noundef nonnull align 8 dereferenceable(8) %11) #4
  %130 = load i64, ptr %13, align 8, !tbaa !17
  %131 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN8TPPLPoly8GetPointEl(ptr noundef nonnull align 8 dereferenceable(17) %129, i64 noundef %130)
          to label %132 unwind label %72

132:                                              ; preds = %128
  %133 = getelementptr inbounds %struct.TPPLPoint, ptr %131, i32 0, i32 0
  %134 = load double, ptr %133, align 8, !tbaa !19
  %135 = call noundef ptr @_ZNKSt14_List_iteratorI8TPPLPolyEptEv(ptr noundef nonnull align 8 dereferenceable(8) %9) #4
  %136 = load i64, ptr %15, align 8, !tbaa !17
  %137 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN8TPPLPoly8GetPointEl(ptr noundef nonnull align 8 dereferenceable(17) %135, i64 noundef %136)
          to label %138 unwind label %72

138:                                              ; preds = %132
  %139 = getelementptr inbounds %struct.TPPLPoint, ptr %137, i32 0, i32 0
  %140 = load double, ptr %139, align 8, !tbaa !19
  %141 = fcmp ogt double %134, %140
  br i1 %141, label %142, label %144

142:                                              ; preds = %138
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %9, ptr align 8 %11, i64 8, i1 false), !tbaa.struct !11
  %143 = load i64, ptr %13, align 8, !tbaa !17
  store i64 %143, ptr %15, align 8, !tbaa !17
  br label %144

144:                                              ; preds = %142, %138
  br label %145

145:                                              ; preds = %144
  %146 = load i64, ptr %13, align 8, !tbaa !17
  %147 = add nsw i64 %146, 1
  store i64 %147, ptr %13, align 8, !tbaa !17
  br label %122, !llvm.loop !23

148:                                              ; preds = %126
  br label %149

149:                                              ; preds = %148, %116
  %150 = call ptr @_ZNSt14_List_iteratorI8TPPLPolyEppEi(ptr noundef nonnull align 8 dereferenceable(8) %11, i32 noundef 0) #4
  %151 = getelementptr inbounds %"struct.std::_List_iterator", ptr %39, i32 0, i32 0
  store ptr %150, ptr %151, align 8
  br label %108, !llvm.loop !24

152:                                              ; preds = %108
  %153 = load i8, ptr %27, align 1, !tbaa !9, !range !14, !noundef !15
  %154 = trunc i8 %153 to i1
  br i1 %154, label %156, label %155

155:                                              ; preds = %152
  br label %388

156:                                              ; preds = %152
  %157 = call noundef ptr @_ZNKSt14_List_iteratorI8TPPLPolyEptEv(ptr noundef nonnull align 8 dereferenceable(8) %9) #4
  %158 = load i64, ptr %15, align 8, !tbaa !17
  %159 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN8TPPLPoly8GetPointEl(ptr noundef nonnull align 8 dereferenceable(17) %157, i64 noundef %158)
          to label %160 unwind label %72

160:                                              ; preds = %156
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %17, ptr align 8 %159, i64 24, i1 false), !tbaa.struct !25
  store i8 0, ptr %29, align 1, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #4
  %161 = call ptr @_ZNSt7__cxx114listI8TPPLPolySaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %8) #4
  %162 = getelementptr inbounds %"struct.std::_List_iterator", ptr %40, i32 0, i32 0
  store ptr %161, ptr %162, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %11, ptr align 8 %40, i64 8, i1 false), !tbaa.struct !11
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #4
  br label %163

163:                                              ; preds = %294, %160
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #4
  %164 = call ptr @_ZNSt7__cxx114listI8TPPLPolySaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %8) #4
  %165 = getelementptr inbounds %"struct.std::_List_iterator", ptr %41, i32 0, i32 0
  store ptr %164, ptr %165, align 8
  %166 = call noundef zeroext i1 @_ZStneRKSt14_List_iteratorI8TPPLPolyES3_(ptr noundef nonnull align 8 dereferenceable(8) %11, ptr noundef nonnull align 8 dereferenceable(8) %41) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #4
  br i1 %166, label %167, label %297

167:                                              ; preds = %163
  %168 = call noundef ptr @_ZNKSt14_List_iteratorI8TPPLPolyEptEv(ptr noundef nonnull align 8 dereferenceable(8) %11) #4
  %169 = invoke noundef zeroext i1 @_ZNK8TPPLPoly6IsHoleEv(ptr noundef nonnull align 8 dereferenceable(17) %168)
          to label %170 unwind label %72

170:                                              ; preds = %167
  br i1 %169, label %171, label %172

171:                                              ; preds = %170
  br label %294

172:                                              ; preds = %170
  store i64 0, ptr %13, align 8, !tbaa !17
  br label %173

173:                                              ; preds = %290, %172
  %174 = load i64, ptr %13, align 8, !tbaa !17
  %175 = call noundef ptr @_ZNKSt14_List_iteratorI8TPPLPolyEptEv(ptr noundef nonnull align 8 dereferenceable(8) %11) #4
  %176 = invoke noundef i64 @_ZNK8TPPLPoly12GetNumPointsEv(ptr noundef nonnull align 8 dereferenceable(17) %175)
          to label %177 unwind label %72

177:                                              ; preds = %173
  %178 = icmp slt i64 %174, %176
  br i1 %178, label %179, label %293

179:                                              ; preds = %177
  %180 = call noundef ptr @_ZNKSt14_List_iteratorI8TPPLPolyEptEv(ptr noundef nonnull align 8 dereferenceable(8) %11) #4
  %181 = load i64, ptr %13, align 8, !tbaa !17
  %182 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN8TPPLPoly8GetPointEl(ptr noundef nonnull align 8 dereferenceable(17) %180, i64 noundef %181)
          to label %183 unwind label %72

183:                                              ; preds = %179
  %184 = getelementptr inbounds %struct.TPPLPoint, ptr %182, i32 0, i32 0
  %185 = load double, ptr %184, align 8, !tbaa !19
  %186 = getelementptr inbounds %struct.TPPLPoint, ptr %17, i32 0, i32 0
  %187 = load double, ptr %186, align 8, !tbaa !19
  %188 = fcmp ole double %185, %187
  br i1 %188, label %189, label %190

189:                                              ; preds = %183
  br label %290

190:                                              ; preds = %183
  %191 = call noundef ptr @_ZNKSt14_List_iteratorI8TPPLPolyEptEv(ptr noundef nonnull align 8 dereferenceable(8) %11) #4
  %192 = load i64, ptr %13, align 8, !tbaa !17
  %193 = call noundef ptr @_ZNKSt14_List_iteratorI8TPPLPolyEptEv(ptr noundef nonnull align 8 dereferenceable(8) %11) #4
  %194 = invoke noundef i64 @_ZNK8TPPLPoly12GetNumPointsEv(ptr noundef nonnull align 8 dereferenceable(17) %193)
          to label %195 unwind label %72

195:                                              ; preds = %190
  %196 = add nsw i64 %192, %194
  %197 = sub nsw i64 %196, 1
  %198 = call noundef ptr @_ZNKSt14_List_iteratorI8TPPLPolyEptEv(ptr noundef nonnull align 8 dereferenceable(8) %11) #4
  %199 = invoke noundef i64 @_ZNK8TPPLPoly12GetNumPointsEv(ptr noundef nonnull align 8 dereferenceable(17) %198)
          to label %200 unwind label %72

200:                                              ; preds = %195
  %201 = srem i64 %197, %199
  %202 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN8TPPLPoly8GetPointEl(ptr noundef nonnull align 8 dereferenceable(17) %191, i64 noundef %201)
          to label %203 unwind label %72

203:                                              ; preds = %200
  %204 = call noundef ptr @_ZNKSt14_List_iteratorI8TPPLPolyEptEv(ptr noundef nonnull align 8 dereferenceable(8) %11) #4
  %205 = load i64, ptr %13, align 8, !tbaa !17
  %206 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN8TPPLPoly8GetPointEl(ptr noundef nonnull align 8 dereferenceable(17) %204, i64 noundef %205)
          to label %207 unwind label %72

207:                                              ; preds = %203
  %208 = call noundef ptr @_ZNKSt14_List_iteratorI8TPPLPolyEptEv(ptr noundef nonnull align 8 dereferenceable(8) %11) #4
  %209 = load i64, ptr %13, align 8, !tbaa !17
  %210 = add nsw i64 %209, 1
  %211 = call noundef ptr @_ZNKSt14_List_iteratorI8TPPLPolyEptEv(ptr noundef nonnull align 8 dereferenceable(8) %11) #4
  %212 = invoke noundef i64 @_ZNK8TPPLPoly12GetNumPointsEv(ptr noundef nonnull align 8 dereferenceable(17) %211)
          to label %213 unwind label %72

213:                                              ; preds = %207
  %214 = srem i64 %210, %212
  %215 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN8TPPLPoly8GetPointEl(ptr noundef nonnull align 8 dereferenceable(17) %208, i64 noundef %214)
          to label %216 unwind label %72

216:                                              ; preds = %213
  %217 = invoke noundef zeroext i1 @_ZN13TPPLPartition6InConeER9TPPLPointS1_S1_S1_(ptr noundef nonnull align 1 dereferenceable(1) %53, ptr noundef nonnull align 8 dereferenceable(24) %202, ptr noundef nonnull align 8 dereferenceable(24) %206, ptr noundef nonnull align 8 dereferenceable(24) %215, ptr noundef nonnull align 8 dereferenceable(24) %17)
          to label %218 unwind label %72

218:                                              ; preds = %216
  br i1 %217, label %220, label %219

219:                                              ; preds = %218
  br label %290

220:                                              ; preds = %218
  %221 = call noundef ptr @_ZNKSt14_List_iteratorI8TPPLPolyEptEv(ptr noundef nonnull align 8 dereferenceable(8) %11) #4
  %222 = load i64, ptr %13, align 8, !tbaa !17
  %223 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN8TPPLPoly8GetPointEl(ptr noundef nonnull align 8 dereferenceable(17) %221, i64 noundef %222)
          to label %224 unwind label %72

224:                                              ; preds = %220
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %18, ptr align 8 %223, i64 24, i1 false), !tbaa.struct !25
  %225 = load i8, ptr %29, align 1, !tbaa !9, !range !14, !noundef !15
  %226 = trunc i8 %225 to i1
  br i1 %226, label %227, label %235

227:                                              ; preds = %224
  %228 = call noundef double @_ZN13TPPLPartition8DistanceERK9TPPLPointS2_(ptr noundef nonnull align 1 dereferenceable(1) %53, ptr noundef nonnull align 8 dereferenceable(24) %17, ptr noundef nonnull align 8 dereferenceable(24) %18)
  store double %228, ptr %22, align 8, !tbaa !26
  %229 = call noundef double @_ZN13TPPLPartition8DistanceERK9TPPLPointS2_(ptr noundef nonnull align 1 dereferenceable(1) %53, ptr noundef nonnull align 8 dereferenceable(24) %17, ptr noundef nonnull align 8 dereferenceable(24) %19)
  store double %229, ptr %23, align 8, !tbaa !26
  %230 = load double, ptr %23, align 8, !tbaa !26
  %231 = load double, ptr %22, align 8, !tbaa !26
  %232 = fcmp olt double %230, %231
  br i1 %232, label %233, label %234

233:                                              ; preds = %227
  br label %290

234:                                              ; preds = %227
  br label %235

235:                                              ; preds = %234, %224
  store i8 1, ptr %28, align 1, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #4
  %236 = call ptr @_ZNSt7__cxx114listI8TPPLPolySaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %8) #4
  %237 = getelementptr inbounds %"struct.std::_List_iterator", ptr %42, i32 0, i32 0
  store ptr %236, ptr %237, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %12, ptr align 8 %42, i64 8, i1 false), !tbaa.struct !11
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #4
  br label %238

238:                                              ; preds = %281, %235
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #4
  %239 = call ptr @_ZNSt7__cxx114listI8TPPLPolySaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %8) #4
  %240 = getelementptr inbounds %"struct.std::_List_iterator", ptr %43, i32 0, i32 0
  store ptr %239, ptr %240, align 8
  %241 = call noundef zeroext i1 @_ZStneRKSt14_List_iteratorI8TPPLPolyES3_(ptr noundef nonnull align 8 dereferenceable(8) %12, ptr noundef nonnull align 8 dereferenceable(8) %43) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #4
  br i1 %241, label %242, label %284

242:                                              ; preds = %238
  %243 = call noundef ptr @_ZNKSt14_List_iteratorI8TPPLPolyEptEv(ptr noundef nonnull align 8 dereferenceable(8) %12) #4
  %244 = invoke noundef zeroext i1 @_ZNK8TPPLPoly6IsHoleEv(ptr noundef nonnull align 8 dereferenceable(17) %243)
          to label %245 unwind label %72

245:                                              ; preds = %242
  br i1 %244, label %246, label %247

246:                                              ; preds = %245
  br label %281

247:                                              ; preds = %245
  store i64 0, ptr %14, align 8, !tbaa !17
  br label %248

248:                                              ; preds = %273, %247
  %249 = load i64, ptr %14, align 8, !tbaa !17
  %250 = call noundef ptr @_ZNKSt14_List_iteratorI8TPPLPolyEptEv(ptr noundef nonnull align 8 dereferenceable(8) %12) #4
  %251 = invoke noundef i64 @_ZNK8TPPLPoly12GetNumPointsEv(ptr noundef nonnull align 8 dereferenceable(17) %250)
          to label %252 unwind label %72

252:                                              ; preds = %248
  %253 = icmp slt i64 %249, %251
  br i1 %253, label %254, label %276

254:                                              ; preds = %252
  %255 = call noundef ptr @_ZNKSt14_List_iteratorI8TPPLPolyEptEv(ptr noundef nonnull align 8 dereferenceable(8) %12) #4
  %256 = load i64, ptr %14, align 8, !tbaa !17
  %257 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN8TPPLPoly8GetPointEl(ptr noundef nonnull align 8 dereferenceable(17) %255, i64 noundef %256)
          to label %258 unwind label %72

258:                                              ; preds = %254
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %20, ptr align 8 %257, i64 24, i1 false), !tbaa.struct !25
  %259 = call noundef ptr @_ZNKSt14_List_iteratorI8TPPLPolyEptEv(ptr noundef nonnull align 8 dereferenceable(8) %12) #4
  %260 = load i64, ptr %14, align 8, !tbaa !17
  %261 = add nsw i64 %260, 1
  %262 = call noundef ptr @_ZNKSt14_List_iteratorI8TPPLPolyEptEv(ptr noundef nonnull align 8 dereferenceable(8) %12) #4
  %263 = invoke noundef i64 @_ZNK8TPPLPoly12GetNumPointsEv(ptr noundef nonnull align 8 dereferenceable(17) %262)
          to label %264 unwind label %72

264:                                              ; preds = %258
  %265 = srem i64 %261, %263
  %266 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN8TPPLPoly8GetPointEl(ptr noundef nonnull align 8 dereferenceable(17) %259, i64 noundef %265)
          to label %267 unwind label %72

267:                                              ; preds = %264
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %21, ptr align 8 %266, i64 24, i1 false), !tbaa.struct !25
  %268 = invoke noundef i32 @_ZN13TPPLPartition10IntersectsER9TPPLPointS1_S1_S1_(ptr noundef nonnull align 1 dereferenceable(1) %53, ptr noundef nonnull align 8 dereferenceable(24) %17, ptr noundef nonnull align 8 dereferenceable(24) %18, ptr noundef nonnull align 8 dereferenceable(24) %20, ptr noundef nonnull align 8 dereferenceable(24) %21)
          to label %269 unwind label %72

269:                                              ; preds = %267
  %270 = icmp ne i32 %268, 0
  br i1 %270, label %271, label %272

271:                                              ; preds = %269
  store i8 0, ptr %28, align 1, !tbaa !9
  br label %276

272:                                              ; preds = %269
  br label %273

273:                                              ; preds = %272
  %274 = load i64, ptr %14, align 8, !tbaa !17
  %275 = add nsw i64 %274, 1
  store i64 %275, ptr %14, align 8, !tbaa !17
  br label %248, !llvm.loop !28

276:                                              ; preds = %271, %252
  %277 = load i8, ptr %28, align 1, !tbaa !9, !range !14, !noundef !15
  %278 = trunc i8 %277 to i1
  br i1 %278, label %280, label %279

279:                                              ; preds = %276
  br label %284

280:                                              ; preds = %276
  br label %281

281:                                              ; preds = %280, %246
  %282 = call ptr @_ZNSt14_List_iteratorI8TPPLPolyEppEi(ptr noundef nonnull align 8 dereferenceable(8) %12, i32 noundef 0) #4
  %283 = getelementptr inbounds %"struct.std::_List_iterator", ptr %44, i32 0, i32 0
  store ptr %282, ptr %283, align 8
  br label %238, !llvm.loop !29

284:                                              ; preds = %279, %238
  %285 = load i8, ptr %28, align 1, !tbaa !9, !range !14, !noundef !15
  %286 = trunc i8 %285 to i1
  br i1 %286, label %287, label %289

287:                                              ; preds = %284
  store i8 1, ptr %29, align 1, !tbaa !9
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %19, ptr align 8 %18, i64 24, i1 false), !tbaa.struct !25
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %10, ptr align 8 %11, i64 8, i1 false), !tbaa.struct !11
  %288 = load i64, ptr %13, align 8, !tbaa !17
  store i64 %288, ptr %16, align 8, !tbaa !17
  br label %289

289:                                              ; preds = %287, %284
  br label %290

290:                                              ; preds = %289, %233, %219, %189
  %291 = load i64, ptr %13, align 8, !tbaa !17
  %292 = add nsw i64 %291, 1
  store i64 %292, ptr %13, align 8, !tbaa !17
  br label %173, !llvm.loop !30

293:                                              ; preds = %177
  br label %294

294:                                              ; preds = %293, %171
  %295 = call ptr @_ZNSt14_List_iteratorI8TPPLPolyEppEi(ptr noundef nonnull align 8 dereferenceable(8) %11, i32 noundef 0) #4
  %296 = getelementptr inbounds %"struct.std::_List_iterator", ptr %45, i32 0, i32 0
  store ptr %295, ptr %296, align 8
  br label %163, !llvm.loop !31

297:                                              ; preds = %163
  %298 = load i8, ptr %29, align 1, !tbaa !9, !range !14, !noundef !15
  %299 = trunc i8 %298 to i1
  br i1 %299, label %301, label %300

300:                                              ; preds = %297
  store i32 0, ptr %4, align 4
  store i32 1, ptr %36, align 4
  br label %403

301:                                              ; preds = %297
  %302 = call noundef ptr @_ZNKSt14_List_iteratorI8TPPLPolyEptEv(ptr noundef nonnull align 8 dereferenceable(8) %9) #4
  %303 = invoke noundef i64 @_ZNK8TPPLPoly12GetNumPointsEv(ptr noundef nonnull align 8 dereferenceable(17) %302)
          to label %304 unwind label %72

304:                                              ; preds = %301
  %305 = call noundef ptr @_ZNKSt14_List_iteratorI8TPPLPolyEptEv(ptr noundef nonnull align 8 dereferenceable(8) %10) #4
  %306 = invoke noundef i64 @_ZNK8TPPLPoly12GetNumPointsEv(ptr noundef nonnull align 8 dereferenceable(17) %305)
          to label %307 unwind label %72

307:                                              ; preds = %304
  %308 = add nsw i64 %303, %306
  %309 = add nsw i64 %308, 2
  invoke void @_ZN8TPPLPoly4InitEl(ptr noundef nonnull align 8 dereferenceable(17) %24, i64 noundef %309)
          to label %310 unwind label %72

310:                                              ; preds = %307
  store i64 0, ptr %14, align 8, !tbaa !17
  store i64 0, ptr %13, align 8, !tbaa !17
  br label %311

311:                                              ; preds = %326, %310
  %312 = load i64, ptr %13, align 8, !tbaa !17
  %313 = load i64, ptr %16, align 8, !tbaa !17
  %314 = icmp sle i64 %312, %313
  br i1 %314, label %315, label %329

315:                                              ; preds = %311
  %316 = call noundef ptr @_ZNKSt14_List_iteratorI8TPPLPolyEptEv(ptr noundef nonnull align 8 dereferenceable(8) %10) #4
  %317 = load i64, ptr %13, align 8, !tbaa !17
  %318 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN8TPPLPoly8GetPointEl(ptr noundef nonnull align 8 dereferenceable(17) %316, i64 noundef %317)
          to label %319 unwind label %72

319:                                              ; preds = %315
  %320 = load i64, ptr %14, align 8, !tbaa !17
  %321 = trunc i64 %320 to i32
  %322 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN8TPPLPolyixEi(ptr noundef nonnull align 8 dereferenceable(17) %24, i32 noundef %321)
          to label %323 unwind label %72

323:                                              ; preds = %319
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %322, ptr align 8 %318, i64 24, i1 false), !tbaa.struct !25
  %324 = load i64, ptr %14, align 8, !tbaa !17
  %325 = add nsw i64 %324, 1
  store i64 %325, ptr %14, align 8, !tbaa !17
  br label %326

326:                                              ; preds = %323
  %327 = load i64, ptr %13, align 8, !tbaa !17
  %328 = add nsw i64 %327, 1
  store i64 %328, ptr %13, align 8, !tbaa !17
  br label %311, !llvm.loop !32

329:                                              ; preds = %311
  store i64 0, ptr %13, align 8, !tbaa !17
  br label %330

330:                                              ; preds = %353, %329
  %331 = load i64, ptr %13, align 8, !tbaa !17
  %332 = call noundef ptr @_ZNKSt14_List_iteratorI8TPPLPolyEptEv(ptr noundef nonnull align 8 dereferenceable(8) %9) #4
  %333 = invoke noundef i64 @_ZNK8TPPLPoly12GetNumPointsEv(ptr noundef nonnull align 8 dereferenceable(17) %332)
          to label %334 unwind label %72

334:                                              ; preds = %330
  %335 = icmp sle i64 %331, %333
  br i1 %335, label %336, label %356

336:                                              ; preds = %334
  %337 = call noundef ptr @_ZNKSt14_List_iteratorI8TPPLPolyEptEv(ptr noundef nonnull align 8 dereferenceable(8) %9) #4
  %338 = load i64, ptr %13, align 8, !tbaa !17
  %339 = load i64, ptr %15, align 8, !tbaa !17
  %340 = add nsw i64 %338, %339
  %341 = call noundef ptr @_ZNKSt14_List_iteratorI8TPPLPolyEptEv(ptr noundef nonnull align 8 dereferenceable(8) %9) #4
  %342 = invoke noundef i64 @_ZNK8TPPLPoly12GetNumPointsEv(ptr noundef nonnull align 8 dereferenceable(17) %341)
          to label %343 unwind label %72

343:                                              ; preds = %336
  %344 = srem i64 %340, %342
  %345 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN8TPPLPoly8GetPointEl(ptr noundef nonnull align 8 dereferenceable(17) %337, i64 noundef %344)
          to label %346 unwind label %72

346:                                              ; preds = %343
  %347 = load i64, ptr %14, align 8, !tbaa !17
  %348 = trunc i64 %347 to i32
  %349 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN8TPPLPolyixEi(ptr noundef nonnull align 8 dereferenceable(17) %24, i32 noundef %348)
          to label %350 unwind label %72

350:                                              ; preds = %346
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %349, ptr align 8 %345, i64 24, i1 false), !tbaa.struct !25
  %351 = load i64, ptr %14, align 8, !tbaa !17
  %352 = add nsw i64 %351, 1
  store i64 %352, ptr %14, align 8, !tbaa !17
  br label %353

353:                                              ; preds = %350
  %354 = load i64, ptr %13, align 8, !tbaa !17
  %355 = add nsw i64 %354, 1
  store i64 %355, ptr %13, align 8, !tbaa !17
  br label %330, !llvm.loop !33

356:                                              ; preds = %334
  %357 = load i64, ptr %16, align 8, !tbaa !17
  store i64 %357, ptr %13, align 8, !tbaa !17
  br label %358

358:                                              ; preds = %375, %356
  %359 = load i64, ptr %13, align 8, !tbaa !17
  %360 = call noundef ptr @_ZNKSt14_List_iteratorI8TPPLPolyEptEv(ptr noundef nonnull align 8 dereferenceable(8) %10) #4
  %361 = invoke noundef i64 @_ZNK8TPPLPoly12GetNumPointsEv(ptr noundef nonnull align 8 dereferenceable(17) %360)
          to label %362 unwind label %72

362:                                              ; preds = %358
  %363 = icmp slt i64 %359, %361
  br i1 %363, label %364, label %378

364:                                              ; preds = %362
  %365 = call noundef ptr @_ZNKSt14_List_iteratorI8TPPLPolyEptEv(ptr noundef nonnull align 8 dereferenceable(8) %10) #4
  %366 = load i64, ptr %13, align 8, !tbaa !17
  %367 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN8TPPLPoly8GetPointEl(ptr noundef nonnull align 8 dereferenceable(17) %365, i64 noundef %366)
          to label %368 unwind label %72

368:                                              ; preds = %364
  %369 = load i64, ptr %14, align 8, !tbaa !17
  %370 = trunc i64 %369 to i32
  %371 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN8TPPLPolyixEi(ptr noundef nonnull align 8 dereferenceable(17) %24, i32 noundef %370)
          to label %372 unwind label %72

372:                                              ; preds = %368
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %371, ptr align 8 %367, i64 24, i1 false), !tbaa.struct !25
  %373 = load i64, ptr %14, align 8, !tbaa !17
  %374 = add nsw i64 %373, 1
  store i64 %374, ptr %14, align 8, !tbaa !17
  br label %375

375:                                              ; preds = %372
  %376 = load i64, ptr %13, align 8, !tbaa !17
  %377 = add nsw i64 %376, 1
  store i64 %377, ptr %13, align 8, !tbaa !17
  br label %358, !llvm.loop !34

378:                                              ; preds = %362
  call void @_ZNSt20_List_const_iteratorI8TPPLPolyEC2ERKSt14_List_iteratorIS0_E(ptr noundef nonnull align 8 dereferenceable(8) %46, ptr noundef nonnull align 8 dereferenceable(8) %9) #4
  %379 = getelementptr inbounds %"struct.std::_List_const_iterator", ptr %46, i32 0, i32 0
  %380 = load ptr, ptr %379, align 8
  %381 = call ptr @_ZNSt7__cxx114listI8TPPLPolySaIS1_EE5eraseESt20_List_const_iteratorIS1_E(ptr noundef nonnull align 8 dereferenceable(24) %8, ptr %380) #4
  %382 = getelementptr inbounds %"struct.std::_List_iterator", ptr %47, i32 0, i32 0
  store ptr %381, ptr %382, align 8
  call void @_ZNSt20_List_const_iteratorI8TPPLPolyEC2ERKSt14_List_iteratorIS0_E(ptr noundef nonnull align 8 dereferenceable(8) %48, ptr noundef nonnull align 8 dereferenceable(8) %10) #4
  %383 = getelementptr inbounds %"struct.std::_List_const_iterator", ptr %48, i32 0, i32 0
  %384 = load ptr, ptr %383, align 8
  %385 = call ptr @_ZNSt7__cxx114listI8TPPLPolySaIS1_EE5eraseESt20_List_const_iteratorIS1_E(ptr noundef nonnull align 8 dereferenceable(24) %8, ptr %384) #4
  %386 = getelementptr inbounds %"struct.std::_List_iterator", ptr %49, i32 0, i32 0
  store ptr %385, ptr %386, align 8
  invoke void @_ZNSt7__cxx114listI8TPPLPolySaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %8, ptr noundef nonnull align 8 dereferenceable(17) %24)
          to label %387 unwind label %72

387:                                              ; preds = %378
  br label %104, !llvm.loop !35

388:                                              ; preds = %155
  call void @llvm.lifetime.start.p0(i64 8, ptr %50) #4
  %389 = call ptr @_ZNSt7__cxx114listI8TPPLPolySaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %8) #4
  %390 = getelementptr inbounds %"struct.std::_List_iterator", ptr %50, i32 0, i32 0
  store ptr %389, ptr %390, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %11, ptr align 8 %50, i64 8, i1 false), !tbaa.struct !11
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #4
  br label %391

391:                                              ; preds = %399, %388
  call void @llvm.lifetime.start.p0(i64 8, ptr %51) #4
  %392 = call ptr @_ZNSt7__cxx114listI8TPPLPolySaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %8) #4
  %393 = getelementptr inbounds %"struct.std::_List_iterator", ptr %51, i32 0, i32 0
  store ptr %392, ptr %393, align 8
  %394 = call noundef zeroext i1 @_ZStneRKSt14_List_iteratorI8TPPLPolyES3_(ptr noundef nonnull align 8 dereferenceable(8) %11, ptr noundef nonnull align 8 dereferenceable(8) %51) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #4
  br i1 %394, label %395, label %402

395:                                              ; preds = %391
  %396 = load ptr, ptr %7, align 8, !tbaa !5
  %397 = call noundef nonnull align 8 dereferenceable(17) ptr @_ZNKSt14_List_iteratorI8TPPLPolyEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %11) #4
  invoke void @_ZNSt7__cxx114listI8TPPLPolySaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %396, ptr noundef nonnull align 8 dereferenceable(17) %397)
          to label %398 unwind label %72

398:                                              ; preds = %395
  br label %399

399:                                              ; preds = %398
  %400 = call ptr @_ZNSt14_List_iteratorI8TPPLPolyEppEi(ptr noundef nonnull align 8 dereferenceable(8) %11, i32 noundef 0) #4
  %401 = getelementptr inbounds %"struct.std::_List_iterator", ptr %52, i32 0, i32 0
  store ptr %400, ptr %401, align 8
  br label %391, !llvm.loop !36

402:                                              ; preds = %391
  store i32 1, ptr %4, align 4
  store i32 1, ptr %36, align 4
  br label %403

403:                                              ; preds = %402, %300, %99
  call void @llvm.lifetime.end.p0(i64 1, ptr %29) #4
  call void @llvm.lifetime.end.p0(i64 1, ptr %28) #4
  call void @llvm.lifetime.end.p0(i64 1, ptr %27) #4
  call void @_ZN8TPPLPolyD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %24) #4
  call void @llvm.lifetime.end.p0(i64 24, ptr %24) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #4
  call void @llvm.lifetime.end.p0(i64 24, ptr %21) #4
  call void @llvm.lifetime.end.p0(i64 24, ptr %20) #4
  call void @llvm.lifetime.end.p0(i64 24, ptr %19) #4
  call void @llvm.lifetime.end.p0(i64 24, ptr %18) #4
  call void @llvm.lifetime.end.p0(i64 24, ptr %17) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #4
  call void @_ZNSt7__cxx1110_List_baseI8TPPLPolySaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %8) #4
  call void @llvm.lifetime.end.p0(i64 24, ptr %8) #4
  %404 = load i32, ptr %4, align 4
  ret i32 %404

405:                                              ; preds = %72, %68
  call void @llvm.lifetime.end.p0(i64 24, ptr %24) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #4
  call void @llvm.lifetime.end.p0(i64 24, ptr %21) #4
  call void @llvm.lifetime.end.p0(i64 24, ptr %20) #4
  call void @llvm.lifetime.end.p0(i64 24, ptr %19) #4
  call void @llvm.lifetime.end.p0(i64 24, ptr %18) #4
  call void @llvm.lifetime.end.p0(i64 24, ptr %17) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #4
  call void @_ZNSt7__cxx1110_List_baseI8TPPLPolySaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %8) #4
  call void @llvm.lifetime.end.p0(i64 24, ptr %8) #4
  br label %406

406:                                              ; preds = %405
  %407 = load ptr, ptr %25, align 8
  %408 = load i32, ptr %26, align 4
  %409 = insertvalue { ptr, i32 } poison, ptr %407, 0
  %410 = insertvalue { ptr, i32 } %409, i32 %408, 1
  resume { ptr, i32 } %410
}

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

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

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNSt14_List_iteratorI8TPPLPolyEppEi(ptr noundef nonnull align 8 dereferenceable(8), i32 noundef) #3 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)) #0 align 2

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZNK8TPPLPoly12GetNumPointsEv(ptr noundef nonnull align 8 dereferenceable(17)) #3 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) #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZN13TPPLPartition6InConeER9TPPLPointS1_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)) #3 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) #3 align 2

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

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

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

declare void @_ZN8TPPLPolyC1Ev(ptr)

declare void @_ZN8TPPLPolyD1Ev(ptr)

attributes #0 = { 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 #1 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { 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 #4 = { 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 = !{!"bool", !7, i64 0}
!11 = !{i64 0, i64 8, !5}
!12 = distinct !{!12, !13}
!13 = !{!"llvm.loop.mustprogress"}
!14 = !{i8 0, i8 2}
!15 = !{}
!16 = distinct !{!16, !13}
!17 = !{!18, !18, i64 0}
!18 = !{!"long", !7, i64 0}
!19 = !{!20, !21, i64 0}
!20 = !{!"_ZTS9TPPLPoint", !21, i64 0, !21, i64 8, !22, i64 16}
!21 = !{!"double", !7, i64 0}
!22 = !{!"int", !7, i64 0}
!23 = distinct !{!23, !13}
!24 = distinct !{!24, !13}
!25 = !{i64 0, i64 8, !26, i64 8, i64 8, !26, i64 16, i64 4, !27}
!26 = !{!21, !21, i64 0}
!27 = !{!22, !22, i64 0}
!28 = distinct !{!28, !13}
!29 = distinct !{!29, !13}
!30 = distinct !{!30, !13}
!31 = distinct !{!31, !13}
!32 = distinct !{!32, !13}
!33 = distinct !{!33, !13}
!34 = distinct !{!34, !13}
!35 = distinct !{!35, !13}
!36 = distinct !{!36, !13}


; 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"

%"class.std::__cxx11::list" = type { %"class.std::__cxx11::_List_base" }
%"class.std::__cxx11::_List_base" = type { %"struct.std::__cxx11::_List_base<TPPLPoly, std::allocator<TPPLPoly>>::_List_impl" }
%"struct.std::__cxx11::_List_base<TPPLPoly, std::allocator<TPPLPoly>>::_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.std::_List_iterator" = type { ptr }
%struct.TPPLPoint = type { double, double, i32 }
%class.TPPLPoly = type <{ ptr, i64, i8, [7 x i8] }>
%"struct.std::_List_const_iterator" = type { ptr }

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

; 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) #1

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) #2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef double @_ZN13TPPLPartition8DistanceERK9TPPLPointS2_(ptr noundef nonnull align 1 dereferenceable(1), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #3 align 2

; 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 #0 align 2

; Function Attrs: mustprogress uwtable
define dso_local noundef range(i32 0, 2) i32 @_ZN13TPPLPartition11RemoveHolesEPNSt7__cxx114listI8TPPLPolySaIS2_EEES5_(ptr noundef nonnull align 1 dereferenceable(1) %0, ptr noundef %1, ptr noundef %2) local_unnamed_addr #0 align 2 personality ptr @__gxx_personality_v0 {
  %4 = alloca %"class.std::__cxx11::list", align 8
  %5 = alloca %"struct.std::_List_iterator", align 8
  %6 = alloca %"struct.std::_List_iterator", align 8
  %7 = alloca %"struct.std::_List_iterator", align 8
  %8 = alloca %"struct.std::_List_iterator", align 8
  %9 = alloca %struct.TPPLPoint, align 8
  %10 = alloca %struct.TPPLPoint, align 8
  %11 = alloca %struct.TPPLPoint, align 8
  %12 = alloca %struct.TPPLPoint, align 8
  %13 = alloca %struct.TPPLPoint, align 8
  %14 = alloca %class.TPPLPoly, align 8
  %15 = alloca %"struct.std::_List_iterator", align 8
  %16 = alloca %"struct.std::_List_iterator", align 8
  %17 = alloca %"struct.std::_List_iterator", align 8
  %18 = alloca %"struct.std::_List_iterator", align 8
  %19 = alloca %"struct.std::_List_iterator", align 8
  %20 = alloca %"struct.std::_List_const_iterator", align 8
  %21 = alloca %"struct.std::_List_const_iterator", align 8
  %22 = alloca %"struct.std::_List_iterator", align 8
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %4) #4
  call void @_ZNSt7__cxx114listI8TPPLPolySaIS1_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %4) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %5) #4
  call void @_ZNSt14_List_iteratorI8TPPLPolyEC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %5) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %6) #4
  call void @_ZNSt14_List_iteratorI8TPPLPolyEC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %6) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %7) #4
  call void @_ZNSt14_List_iteratorI8TPPLPolyEC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %7) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %8) #4
  call void @_ZNSt14_List_iteratorI8TPPLPolyEC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %8) #4
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %9) #4
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %10) #4
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %11) #4
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %12) #4
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %13) #4
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %14) #4
  invoke void @_ZN8TPPLPolyC1Ev(ptr noundef nonnull align 8 dereferenceable(17) %14)
          to label %23 unwind label %29

23:                                               ; preds = %3
  %24 = call ptr @_ZNSt7__cxx114listI8TPPLPolySaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %1) #4
  store ptr %24, ptr %7, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %15) #4
  %25 = call ptr @_ZNSt7__cxx114listI8TPPLPolySaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %1) #4
  store ptr %25, ptr %15, align 8
  %26 = call noundef zeroext i1 @_ZStneRKSt14_List_iteratorI8TPPLPolyES3_(ptr noundef nonnull align 8 dereferenceable(8) %7, ptr noundef nonnull align 8 dereferenceable(8) %15) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #4
  br i1 %26, label %.lr.ph, label %.critedge

.lr.ph:                                           ; preds = %23, %31
  %27 = call noundef ptr @_ZNKSt14_List_iteratorI8TPPLPolyEptEv(ptr noundef nonnull align 8 dereferenceable(8) %7) #4
  %28 = call noundef zeroext i1 @_ZNK8TPPLPoly6IsHoleEv(ptr noundef nonnull align 8 dereferenceable(17) %27)
  br i1 %28, label %43, label %31

29:                                               ; preds = %3
  %30 = landingpad { ptr, i32 }
          cleanup
  br label %201

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

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

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

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

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

.loopexit.split-lp:                               ; preds = %.loopexit.split-lp.loopexit, %.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, %.loopexit103
  %lpad.phi = phi { ptr, i32 } [ %lpad.loopexit, %.loopexit103 ], [ %lpad.loopexit105, %.loopexit.split-lp.loopexit ], [ %lpad.loopexit116, %.loopexit.split-lp.loopexit.split-lp.loopexit ], [ %lpad.loopexit119, %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit ], [ %lpad.loopexit.split-lp120, %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp ]
  call void @_ZN8TPPLPolyD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %14) #4
  br label %201

31:                                               ; preds = %.lr.ph
  %32 = call ptr @_ZNSt14_List_iteratorI8TPPLPolyEppEi(ptr noundef nonnull align 8 dereferenceable(8) %7, i32 noundef 0) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %15) #4
  %33 = call ptr @_ZNSt7__cxx114listI8TPPLPolySaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %1) #4
  store ptr %33, ptr %15, align 8
  %34 = call noundef zeroext i1 @_ZStneRKSt14_List_iteratorI8TPPLPolyES3_(ptr noundef nonnull align 8 dereferenceable(8) %7, ptr noundef nonnull align 8 dereferenceable(8) %15) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #4
  br i1 %34, label %.lr.ph, label %.critedge, !llvm.loop !9

.critedge:                                        ; preds = %31, %23
  %35 = call ptr @_ZNSt7__cxx114listI8TPPLPolySaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %1) #4
  store ptr %35, ptr %7, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %16) #4
  %36 = call ptr @_ZNSt7__cxx114listI8TPPLPolySaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %1) #4
  store ptr %36, ptr %16, align 8
  %37 = call noundef zeroext i1 @_ZStneRKSt14_List_iteratorI8TPPLPolyES3_(ptr noundef nonnull align 8 dereferenceable(8) %7, ptr noundef nonnull align 8 dereferenceable(8) %16) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %16) #4
  br i1 %37, label %.lr.ph126, label %.loopexit

.lr.ph126:                                        ; preds = %.critedge, %39
  %38 = call noundef nonnull align 8 dereferenceable(17) ptr @_ZNKSt14_List_iteratorI8TPPLPolyEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %7) #4
  invoke void @_ZNSt7__cxx114listI8TPPLPolySaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %2, ptr noundef nonnull align 8 dereferenceable(17) %38)
          to label %39 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit

39:                                               ; preds = %.lr.ph126
  %40 = call ptr @_ZNSt14_List_iteratorI8TPPLPolyEppEi(ptr noundef nonnull align 8 dereferenceable(8) %7, i32 noundef 0) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %16) #4
  %41 = call ptr @_ZNSt7__cxx114listI8TPPLPolySaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %1) #4
  store ptr %41, ptr %16, align 8
  %42 = call noundef zeroext i1 @_ZStneRKSt14_List_iteratorI8TPPLPolyES3_(ptr noundef nonnull align 8 dereferenceable(8) %7, ptr noundef nonnull align 8 dereferenceable(8) %16) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %16) #4
  br i1 %42, label %.lr.ph126, label %.loopexit, !llvm.loop !11

43:                                               ; preds = %.lr.ph
  %44 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt7__cxx114listI8TPPLPolySaIS1_EEaSERKS3_(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(24) %1)
          to label %.preheader114 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp

.preheader114:                                    ; preds = %43, %._crit_edge164
  %.078 = phi i64 [ %.482, %._crit_edge164 ], [ undef, %43 ]
  %.073 = phi i64 [ %.5, %._crit_edge164 ], [ undef, %43 ]
  %45 = call ptr @_ZNSt7__cxx114listI8TPPLPolySaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %4) #4
  store ptr %45, ptr %7, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %17) #4
  %46 = call ptr @_ZNSt7__cxx114listI8TPPLPolySaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %4) #4
  store ptr %46, ptr %17, align 8
  %47 = call noundef zeroext i1 @_ZStneRKSt14_List_iteratorI8TPPLPolyES3_(ptr noundef nonnull align 8 dereferenceable(8) %7, ptr noundef nonnull align 8 dereferenceable(8) %17) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %17) #4
  br i1 %47, label %.lr.ph132, label %._crit_edge.thread

.lr.ph132:                                        ; preds = %.preheader114, %.loopexit110
  %.174131 = phi i64 [ %.5, %.loopexit110 ], [ %.073, %.preheader114 ]
  %.186130 = phi i8 [ %.388, %.loopexit110 ], [ 0, %.preheader114 ]
  %48 = call noundef ptr @_ZNKSt14_List_iteratorI8TPPLPolyEptEv(ptr noundef nonnull align 8 dereferenceable(8) %7) #4
  %49 = call noundef zeroext i1 @_ZNK8TPPLPoly6IsHoleEv(ptr noundef nonnull align 8 dereferenceable(17) %48)
  br i1 %49, label %50, label %.loopexit110

50:                                               ; preds = %.lr.ph132
  %51 = trunc nuw i8 %.186130 to i1
  br i1 %51, label %54, label %52

52:                                               ; preds = %50
  %53 = load i64, ptr %7, align 8, !tbaa !5
  store i64 %53, ptr %5, align 8, !tbaa !5
  br label %54

54:                                               ; preds = %52, %50
  %.287 = phi i8 [ %.186130, %50 ], [ 1, %52 ]
  %.275 = phi i64 [ %.174131, %50 ], [ 0, %52 ]
  %55 = call noundef ptr @_ZNKSt14_List_iteratorI8TPPLPolyEptEv(ptr noundef nonnull align 8 dereferenceable(8) %7) #4
  %56 = call noundef i64 @_ZNK8TPPLPoly12GetNumPointsEv(ptr noundef nonnull align 8 dereferenceable(17) %55)
  %57 = icmp sgt i64 %56, 0
  br i1 %57, label %.lr.ph129, label %.loopexit110

.lr.ph129:                                        ; preds = %54, %67
  %.068128 = phi i64 [ %68, %67 ], [ 0, %54 ]
  %.376127 = phi i64 [ %.477, %67 ], [ %.275, %54 ]
  %58 = call noundef ptr @_ZNKSt14_List_iteratorI8TPPLPolyEptEv(ptr noundef nonnull align 8 dereferenceable(8) %7) #4
  %59 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZN8TPPLPoly8GetPointEl(ptr noundef nonnull align 8 dereferenceable(17) %58, i64 noundef %.068128)
  %60 = load double, ptr %59, align 8, !tbaa !12
  %61 = call noundef ptr @_ZNKSt14_List_iteratorI8TPPLPolyEptEv(ptr noundef nonnull align 8 dereferenceable(8) %5) #4
  %62 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZN8TPPLPoly8GetPointEl(ptr noundef nonnull align 8 dereferenceable(17) %61, i64 noundef %.376127)
  %63 = load double, ptr %62, align 8, !tbaa !12
  %64 = fcmp ogt double %60, %63
  br i1 %64, label %65, label %67

65:                                               ; preds = %.lr.ph129
  %66 = load i64, ptr %7, align 8, !tbaa !5
  store i64 %66, ptr %5, align 8, !tbaa !5
  br label %67

67:                                               ; preds = %.lr.ph129, %65
  %.477 = phi i64 [ %.068128, %65 ], [ %.376127, %.lr.ph129 ]
  %68 = add nuw nsw i64 %.068128, 1
  %69 = call noundef ptr @_ZNKSt14_List_iteratorI8TPPLPolyEptEv(ptr noundef nonnull align 8 dereferenceable(8) %7) #4
  %70 = call noundef i64 @_ZNK8TPPLPoly12GetNumPointsEv(ptr noundef nonnull align 8 dereferenceable(17) %69)
  %71 = icmp slt i64 %68, %70
  br i1 %71, label %.lr.ph129, label %.loopexit110, !llvm.loop !16

.loopexit110:                                     ; preds = %67, %54, %.lr.ph132
  %.388 = phi i8 [ %.186130, %.lr.ph132 ], [ %.287, %54 ], [ %.287, %67 ]
  %.5 = phi i64 [ %.174131, %.lr.ph132 ], [ %.275, %54 ], [ %.477, %67 ]
  %72 = call ptr @_ZNSt14_List_iteratorI8TPPLPolyEppEi(ptr noundef nonnull align 8 dereferenceable(8) %7, i32 noundef 0) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %17) #4
  %73 = call ptr @_ZNSt7__cxx114listI8TPPLPolySaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %4) #4
  store ptr %73, ptr %17, align 8
  %74 = call noundef zeroext i1 @_ZStneRKSt14_List_iteratorI8TPPLPolyES3_(ptr noundef nonnull align 8 dereferenceable(8) %7, ptr noundef nonnull align 8 dereferenceable(8) %17) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %17) #4
  br i1 %74, label %.lr.ph132, label %._crit_edge, !llvm.loop !17

._crit_edge:                                      ; preds = %.loopexit110
  %75 = trunc nuw i8 %.388 to i1
  br i1 %75, label %76, label %._crit_edge.thread

76:                                               ; preds = %._crit_edge
  %77 = call noundef ptr @_ZNKSt14_List_iteratorI8TPPLPolyEptEv(ptr noundef nonnull align 8 dereferenceable(8) %5) #4
  %78 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZN8TPPLPoly8GetPointEl(ptr noundef nonnull align 8 dereferenceable(17) %77, i64 noundef %.5)
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %9, ptr noundef nonnull align 8 dereferenceable(24) %78, i64 24, i1 false), !tbaa.struct !18
  %79 = call ptr @_ZNSt7__cxx114listI8TPPLPolySaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %4) #4
  store ptr %79, ptr %7, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %18) #4
  %80 = call ptr @_ZNSt7__cxx114listI8TPPLPolySaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %4) #4
  store ptr %80, ptr %18, align 8
  %81 = call noundef zeroext i1 @_ZStneRKSt14_List_iteratorI8TPPLPolyES3_(ptr noundef nonnull align 8 dereferenceable(8) %7, ptr noundef nonnull align 8 dereferenceable(8) %18) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %18) #4
  br i1 %81, label %.lr.ph147, label %.loopexit

.lr.ph147:                                        ; preds = %76, %.loopexit109
  %.179145 = phi i64 [ %.482, %.loopexit109 ], [ %.078, %76 ]
  %.093144 = phi i8 [ %.396, %.loopexit109 ], [ 0, %76 ]
  %82 = call noundef ptr @_ZNKSt14_List_iteratorI8TPPLPolyEptEv(ptr noundef nonnull align 8 dereferenceable(8) %7) #4
  %83 = call noundef zeroext i1 @_ZNK8TPPLPoly6IsHoleEv(ptr noundef nonnull align 8 dereferenceable(17) %82)
  br i1 %83, label %.loopexit109, label %.preheader108

.preheader108:                                    ; preds = %.lr.ph147
  %84 = call noundef ptr @_ZNKSt14_List_iteratorI8TPPLPolyEptEv(ptr noundef nonnull align 8 dereferenceable(8) %7) #4
  %85 = call noundef i64 @_ZNK8TPPLPoly12GetNumPointsEv(ptr noundef nonnull align 8 dereferenceable(17) %84)
  %86 = icmp sgt i64 %85, 0
  br i1 %86, label %.lr.ph141, label %.loopexit109

.lr.ph141:                                        ; preds = %.preheader108, %.thread101
  %.1140 = phi i64 [ %.pre-phi, %.thread101 ], [ 0, %.preheader108 ]
  %.280139 = phi i64 [ %.381, %.thread101 ], [ %.179145, %.preheader108 ]
  %.194138 = phi i8 [ %.295, %.thread101 ], [ %.093144, %.preheader108 ]
  %87 = call noundef ptr @_ZNKSt14_List_iteratorI8TPPLPolyEptEv(ptr noundef nonnull align 8 dereferenceable(8) %7) #4
  %88 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZN8TPPLPoly8GetPointEl(ptr noundef nonnull align 8 dereferenceable(17) %87, i64 noundef %.1140)
  %89 = load double, ptr %88, align 8, !tbaa !12
  %90 = load double, ptr %9, align 8, !tbaa !12
  %91 = fcmp ugt double %89, %90
  br i1 %91, label %92, label %.lr.ph141..thread101_crit_edge

.lr.ph141..thread101_crit_edge:                   ; preds = %.lr.ph141
  %.pre = add nuw nsw i64 %.1140, 1
  br label %.thread101

92:                                               ; preds = %.lr.ph141
  %93 = call noundef ptr @_ZNKSt14_List_iteratorI8TPPLPolyEptEv(ptr noundef nonnull align 8 dereferenceable(8) %7) #4
  %94 = call noundef ptr @_ZNKSt14_List_iteratorI8TPPLPolyEptEv(ptr noundef nonnull align 8 dereferenceable(8) %7) #4
  %95 = call noundef i64 @_ZNK8TPPLPoly12GetNumPointsEv(ptr noundef nonnull align 8 dereferenceable(17) %94)
  %96 = add nsw i64 %.1140, -1
  %97 = add i64 %96, %95
  %98 = call noundef ptr @_ZNKSt14_List_iteratorI8TPPLPolyEptEv(ptr noundef nonnull align 8 dereferenceable(8) %7) #4
  %99 = call noundef i64 @_ZNK8TPPLPoly12GetNumPointsEv(ptr noundef nonnull align 8 dereferenceable(17) %98)
  %100 = srem i64 %97, %99
  %101 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZN8TPPLPoly8GetPointEl(ptr noundef nonnull align 8 dereferenceable(17) %93, i64 noundef %100)
  %102 = call noundef ptr @_ZNKSt14_List_iteratorI8TPPLPolyEptEv(ptr noundef nonnull align 8 dereferenceable(8) %7) #4
  %103 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZN8TPPLPoly8GetPointEl(ptr noundef nonnull align 8 dereferenceable(17) %102, i64 noundef %.1140)
  %104 = call noundef ptr @_ZNKSt14_List_iteratorI8TPPLPolyEptEv(ptr noundef nonnull align 8 dereferenceable(8) %7) #4
  %105 = add nuw nsw i64 %.1140, 1
  %106 = call noundef ptr @_ZNKSt14_List_iteratorI8TPPLPolyEptEv(ptr noundef nonnull align 8 dereferenceable(8) %7) #4
  %107 = call noundef i64 @_ZNK8TPPLPoly12GetNumPointsEv(ptr noundef nonnull align 8 dereferenceable(17) %106)
  %108 = srem i64 %105, %107
  %109 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZN8TPPLPoly8GetPointEl(ptr noundef nonnull align 8 dereferenceable(17) %104, i64 noundef %108)
  %110 = call noundef zeroext i1 @_ZN13TPPLPartition6InConeER9TPPLPointS1_S1_S1_(ptr noundef nonnull align 1 dereferenceable(1) %0, ptr noundef nonnull align 8 dereferenceable(24) %101, ptr noundef nonnull align 8 dereferenceable(24) %103, ptr noundef nonnull align 8 dereferenceable(24) %109, ptr noundef nonnull align 8 dereferenceable(24) %9)
  br i1 %110, label %111, label %.thread101

111:                                              ; preds = %92
  %112 = call noundef ptr @_ZNKSt14_List_iteratorI8TPPLPolyEptEv(ptr noundef nonnull align 8 dereferenceable(8) %7) #4
  %113 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZN8TPPLPoly8GetPointEl(ptr noundef nonnull align 8 dereferenceable(17) %112, i64 noundef %.1140)
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %10, ptr noundef nonnull align 8 dereferenceable(24) %113, i64 24, i1 false), !tbaa.struct !18
  %114 = trunc nuw i8 %.194138 to i1
  br i1 %114, label %115, label %119

115:                                              ; preds = %111
  %116 = call noundef double @_ZN13TPPLPartition8DistanceERK9TPPLPointS2_(ptr noundef nonnull align 1 dereferenceable(1) %0, ptr noundef nonnull align 8 dereferenceable(24) %9, ptr noundef nonnull align 8 dereferenceable(24) %10)
  %117 = call noundef double @_ZN13TPPLPartition8DistanceERK9TPPLPointS2_(ptr noundef nonnull align 1 dereferenceable(1) %0, ptr noundef nonnull align 8 dereferenceable(24) %9, ptr noundef nonnull align 8 dereferenceable(24) %11)
  %118 = fcmp olt double %117, %116
  br i1 %118, label %.thread101, label %119

119:                                              ; preds = %115, %111
  %120 = call ptr @_ZNSt7__cxx114listI8TPPLPolySaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %4) #4
  store ptr %120, ptr %8, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %19) #4
  %121 = call ptr @_ZNSt7__cxx114listI8TPPLPolySaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %4) #4
  store ptr %121, ptr %19, align 8
  %122 = call noundef zeroext i1 @_ZStneRKSt14_List_iteratorI8TPPLPolyES3_(ptr noundef nonnull align 8 dereferenceable(8) %8, ptr noundef nonnull align 8 dereferenceable(8) %19) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %19) #4
  br i1 %122, label %.lr.ph136, label %._crit_edge137

.lr.ph136:                                        ; preds = %119, %.loopexit104
  %123 = call noundef ptr @_ZNKSt14_List_iteratorI8TPPLPolyEptEv(ptr noundef nonnull align 8 dereferenceable(8) %8) #4
  %124 = call noundef zeroext i1 @_ZNK8TPPLPoly6IsHoleEv(ptr noundef nonnull align 8 dereferenceable(17) %123)
  br i1 %124, label %.loopexit104, label %.preheader

.preheader:                                       ; preds = %.lr.ph136, %138
  %.069 = phi i64 [ %132, %138 ], [ 0, %.lr.ph136 ]
  %125 = call noundef ptr @_ZNKSt14_List_iteratorI8TPPLPolyEptEv(ptr noundef nonnull align 8 dereferenceable(8) %8) #4
  %126 = call noundef i64 @_ZNK8TPPLPoly12GetNumPointsEv(ptr noundef nonnull align 8 dereferenceable(17) %125)
  %127 = icmp slt i64 %.069, %126
  br i1 %127, label %128, label %.loopexit104

128:                                              ; preds = %.preheader
  %129 = call noundef ptr @_ZNKSt14_List_iteratorI8TPPLPolyEptEv(ptr noundef nonnull align 8 dereferenceable(8) %8) #4
  %130 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZN8TPPLPoly8GetPointEl(ptr noundef nonnull align 8 dereferenceable(17) %129, i64 noundef %.069)
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %12, ptr noundef nonnull align 8 dereferenceable(24) %130, i64 24, i1 false), !tbaa.struct !18
  %131 = call noundef ptr @_ZNKSt14_List_iteratorI8TPPLPolyEptEv(ptr noundef nonnull align 8 dereferenceable(8) %8) #4
  %132 = add nuw nsw i64 %.069, 1
  %133 = call noundef ptr @_ZNKSt14_List_iteratorI8TPPLPolyEptEv(ptr noundef nonnull align 8 dereferenceable(8) %8) #4
  %134 = call noundef i64 @_ZNK8TPPLPoly12GetNumPointsEv(ptr noundef nonnull align 8 dereferenceable(17) %133)
  %135 = srem i64 %132, %134
  %136 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZN8TPPLPoly8GetPointEl(ptr noundef nonnull align 8 dereferenceable(17) %131, i64 noundef %135)
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %13, ptr noundef nonnull align 8 dereferenceable(24) %136, i64 24, i1 false), !tbaa.struct !18
  %137 = invoke noundef i32 @_ZN13TPPLPartition10IntersectsER9TPPLPointS1_S1_S1_(ptr noundef nonnull align 1 dereferenceable(1) %0, ptr noundef nonnull align 8 dereferenceable(24) %9, ptr noundef nonnull align 8 dereferenceable(24) %10, ptr noundef nonnull align 8 dereferenceable(24) %12, ptr noundef nonnull align 8 dereferenceable(24) %13)
          to label %138 unwind label %.loopexit.split-lp.loopexit

138:                                              ; preds = %128
  %.not99 = icmp eq i32 %137, 0
  br i1 %.not99, label %.preheader, label %.thread101, !llvm.loop !21

.loopexit104:                                     ; preds = %.preheader, %.lr.ph136
  %139 = call ptr @_ZNSt14_List_iteratorI8TPPLPolyEppEi(ptr noundef nonnull align 8 dereferenceable(8) %8, i32 noundef 0) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %19) #4
  %140 = call ptr @_ZNSt7__cxx114listI8TPPLPolySaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %4) #4
  store ptr %140, ptr %19, align 8
  %141 = call noundef zeroext i1 @_ZStneRKSt14_List_iteratorI8TPPLPolyES3_(ptr noundef nonnull align 8 dereferenceable(8) %8, ptr noundef nonnull align 8 dereferenceable(8) %19) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %19) #4
  br i1 %141, label %.lr.ph136, label %._crit_edge137, !llvm.loop !22

._crit_edge137:                                   ; preds = %.loopexit104, %119
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %11, ptr noundef nonnull align 8 dereferenceable(24) %10, i64 24, i1 false), !tbaa.struct !18
  %142 = load i64, ptr %7, align 8, !tbaa !5
  store i64 %142, ptr %6, align 8, !tbaa !5
  br label %.thread101

.thread101:                                       ; preds = %138, %.lr.ph141..thread101_crit_edge, %._crit_edge137, %115, %92
  %.pre-phi = phi i64 [ %.pre, %.lr.ph141..thread101_crit_edge ], [ %105, %._crit_edge137 ], [ %105, %115 ], [ %105, %92 ], [ %105, %138 ]
  %.295 = phi i8 [ %.194138, %.lr.ph141..thread101_crit_edge ], [ 1, %._crit_edge137 ], [ %.194138, %115 ], [ %.194138, %92 ], [ %.194138, %138 ]
  %.381 = phi i64 [ %.280139, %.lr.ph141..thread101_crit_edge ], [ %.1140, %._crit_edge137 ], [ %.280139, %115 ], [ %.280139, %92 ], [ %.280139, %138 ]
  %143 = call noundef ptr @_ZNKSt14_List_iteratorI8TPPLPolyEptEv(ptr noundef nonnull align 8 dereferenceable(8) %7) #4
  %144 = call noundef i64 @_ZNK8TPPLPoly12GetNumPointsEv(ptr noundef nonnull align 8 dereferenceable(17) %143)
  %145 = icmp slt i64 %.pre-phi, %144
  br i1 %145, label %.lr.ph141, label %.loopexit109, !llvm.loop !23

.loopexit109:                                     ; preds = %.thread101, %.preheader108, %.lr.ph147
  %.396 = phi i8 [ %.093144, %.lr.ph147 ], [ %.093144, %.preheader108 ], [ %.295, %.thread101 ]
  %.482 = phi i64 [ %.179145, %.lr.ph147 ], [ %.179145, %.preheader108 ], [ %.381, %.thread101 ]
  %146 = call ptr @_ZNSt14_List_iteratorI8TPPLPolyEppEi(ptr noundef nonnull align 8 dereferenceable(8) %7, i32 noundef 0) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %18) #4
  %147 = call ptr @_ZNSt7__cxx114listI8TPPLPolySaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %4) #4
  store ptr %147, ptr %18, align 8
  %148 = call noundef zeroext i1 @_ZStneRKSt14_List_iteratorI8TPPLPolyES3_(ptr noundef nonnull align 8 dereferenceable(8) %7, ptr noundef nonnull align 8 dereferenceable(8) %18) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %18) #4
  br i1 %148, label %.lr.ph147, label %._crit_edge148, !llvm.loop !24

._crit_edge148:                                   ; preds = %.loopexit109
  %149 = trunc nuw i8 %.396 to i1
  br i1 %149, label %150, label %.loopexit

150:                                              ; preds = %._crit_edge148
  %151 = call noundef ptr @_ZNKSt14_List_iteratorI8TPPLPolyEptEv(ptr noundef nonnull align 8 dereferenceable(8) %5) #4
  %152 = call noundef i64 @_ZNK8TPPLPoly12GetNumPointsEv(ptr noundef nonnull align 8 dereferenceable(17) %151)
  %153 = call noundef ptr @_ZNKSt14_List_iteratorI8TPPLPolyEptEv(ptr noundef nonnull align 8 dereferenceable(8) %6) #4
  %154 = call noundef i64 @_ZNK8TPPLPoly12GetNumPointsEv(ptr noundef nonnull align 8 dereferenceable(17) %153)
  %155 = add i64 %152, 2
  %156 = add i64 %155, %154
  invoke void @_ZN8TPPLPoly4InitEl(ptr noundef nonnull align 8 dereferenceable(17) %14, i64 noundef %156)
          to label %.preheader113 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit

.preheader113:                                    ; preds = %150
  %.not151 = icmp slt i64 %.482, 0
  br i1 %.not151, label %.preheader112, label %.lr.ph154.preheader

.lr.ph154.preheader:                              ; preds = %.preheader113
  %157 = add nuw i64 %.482, 1
  br label %.lr.ph154

.preheader112:                                    ; preds = %.lr.ph154, %.preheader113
  %.170.lcssa = phi i64 [ 0, %.preheader113 ], [ %157, %.lr.ph154 ]
  %158 = call noundef ptr @_ZNKSt14_List_iteratorI8TPPLPolyEptEv(ptr noundef nonnull align 8 dereferenceable(8) %5) #4
  %159 = call noundef i64 @_ZNK8TPPLPoly12GetNumPointsEv(ptr noundef nonnull align 8 dereferenceable(17) %158)
  %.not97156 = icmp slt i64 %159, 0
  br i1 %.not97156, label %.preheader111, label %.lr.ph159

.lr.ph154:                                        ; preds = %.lr.ph154.preheader, %.lr.ph154
  %.2153 = phi i64 [ %164, %.lr.ph154 ], [ 0, %.lr.ph154.preheader ]
  %160 = call noundef ptr @_ZNKSt14_List_iteratorI8TPPLPolyEptEv(ptr noundef nonnull align 8 dereferenceable(8) %6) #4
  %161 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZN8TPPLPoly8GetPointEl(ptr noundef nonnull align 8 dereferenceable(17) %160, i64 noundef %.2153)
  %162 = trunc i64 %.2153 to i32
  %163 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZN8TPPLPolyixEi(ptr noundef nonnull align 8 dereferenceable(17) %14, i32 noundef %162)
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %163, ptr noundef nonnull align 8 dereferenceable(24) %161, i64 24, i1 false), !tbaa.struct !18
  %164 = add nuw i64 %.2153, 1
  %exitcond.not = icmp eq i64 %.2153, %.482
  br i1 %exitcond.not, label %.preheader112, label %.lr.ph154, !llvm.loop !25

.preheader111:                                    ; preds = %.lr.ph159, %.preheader112
  %.271.lcssa = phi i64 [ %.170.lcssa, %.preheader112 ], [ %176, %.lr.ph159 ]
  %165 = call noundef ptr @_ZNKSt14_List_iteratorI8TPPLPolyEptEv(ptr noundef nonnull align 8 dereferenceable(8) %6) #4
  %166 = call noundef i64 @_ZNK8TPPLPoly12GetNumPointsEv(ptr noundef nonnull align 8 dereferenceable(17) %165)
  %167 = icmp slt i64 %.482, %166
  br i1 %167, label %.lr.ph163, label %._crit_edge164

.lr.ph159:                                        ; preds = %.preheader112, %.lr.ph159
  %.3158 = phi i64 [ %177, %.lr.ph159 ], [ 0, %.preheader112 ]
  %.271157 = phi i64 [ %176, %.lr.ph159 ], [ %.170.lcssa, %.preheader112 ]
  %168 = call noundef ptr @_ZNKSt14_List_iteratorI8TPPLPolyEptEv(ptr noundef nonnull align 8 dereferenceable(8) %5) #4
  %169 = add nsw i64 %.3158, %.5
  %170 = call noundef ptr @_ZNKSt14_List_iteratorI8TPPLPolyEptEv(ptr noundef nonnull align 8 dereferenceable(8) %5) #4
  %171 = call noundef i64 @_ZNK8TPPLPoly12GetNumPointsEv(ptr noundef nonnull align 8 dereferenceable(17) %170)
  %172 = srem i64 %169, %171
  %173 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZN8TPPLPoly8GetPointEl(ptr noundef nonnull align 8 dereferenceable(17) %168, i64 noundef %172)
  %174 = trunc i64 %.271157 to i32
  %175 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZN8TPPLPolyixEi(ptr noundef nonnull align 8 dereferenceable(17) %14, i32 noundef %174)
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %175, ptr noundef nonnull align 8 dereferenceable(24) %173, i64 24, i1 false), !tbaa.struct !18
  %176 = add nuw nsw i64 %.271157, 1
  %177 = add nuw nsw i64 %.3158, 1
  %178 = call noundef ptr @_ZNKSt14_List_iteratorI8TPPLPolyEptEv(ptr noundef nonnull align 8 dereferenceable(8) %5) #4
  %179 = call noundef i64 @_ZNK8TPPLPoly12GetNumPointsEv(ptr noundef nonnull align 8 dereferenceable(17) %178)
  %.not97.not = icmp slt i64 %.3158, %179
  br i1 %.not97.not, label %.lr.ph159, label %.preheader111, !llvm.loop !26

.lr.ph163:                                        ; preds = %.preheader111, %.lr.ph163
  %.4162 = phi i64 [ %185, %.lr.ph163 ], [ %.482, %.preheader111 ]
  %.372161 = phi i64 [ %184, %.lr.ph163 ], [ %.271.lcssa, %.preheader111 ]
  %180 = call noundef ptr @_ZNKSt14_List_iteratorI8TPPLPolyEptEv(ptr noundef nonnull align 8 dereferenceable(8) %6) #4
  %181 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZN8TPPLPoly8GetPointEl(ptr noundef nonnull align 8 dereferenceable(17) %180, i64 noundef %.4162)
  %182 = trunc i64 %.372161 to i32
  %183 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZN8TPPLPolyixEi(ptr noundef nonnull align 8 dereferenceable(17) %14, i32 noundef %182)
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %183, ptr noundef nonnull align 8 dereferenceable(24) %181, i64 24, i1 false), !tbaa.struct !18
  %184 = add nuw nsw i64 %.372161, 1
  %185 = add nsw i64 %.4162, 1
  %186 = call noundef ptr @_ZNKSt14_List_iteratorI8TPPLPolyEptEv(ptr noundef nonnull align 8 dereferenceable(8) %6) #4
  %187 = call noundef i64 @_ZNK8TPPLPoly12GetNumPointsEv(ptr noundef nonnull align 8 dereferenceable(17) %186)
  %188 = icmp slt i64 %185, %187
  br i1 %188, label %.lr.ph163, label %._crit_edge164, !llvm.loop !27

._crit_edge164:                                   ; preds = %.lr.ph163, %.preheader111
  call void @_ZNSt20_List_const_iteratorI8TPPLPolyEC2ERKSt14_List_iteratorIS0_E(ptr noundef nonnull align 8 dereferenceable(8) %20, ptr noundef nonnull align 8 dereferenceable(8) %5) #4
  %189 = load ptr, ptr %20, align 8
  %190 = call ptr @_ZNSt7__cxx114listI8TPPLPolySaIS1_EE5eraseESt20_List_const_iteratorIS1_E(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr %189) #4
  call void @_ZNSt20_List_const_iteratorI8TPPLPolyEC2ERKSt14_List_iteratorIS0_E(ptr noundef nonnull align 8 dereferenceable(8) %21, ptr noundef nonnull align 8 dereferenceable(8) %6) #4
  %191 = load ptr, ptr %21, align 8
  %192 = call ptr @_ZNSt7__cxx114listI8TPPLPolySaIS1_EE5eraseESt20_List_const_iteratorIS1_E(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr %191) #4
  invoke void @_ZNSt7__cxx114listI8TPPLPolySaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(17) %14)
          to label %.preheader114 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit, !llvm.loop !28

._crit_edge.thread:                               ; preds = %.preheader114, %._crit_edge
  %193 = call ptr @_ZNSt7__cxx114listI8TPPLPolySaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %4) #4
  store ptr %193, ptr %7, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %22) #4
  %194 = call ptr @_ZNSt7__cxx114listI8TPPLPolySaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %4) #4
  store ptr %194, ptr %22, align 8
  %195 = call noundef zeroext i1 @_ZStneRKSt14_List_iteratorI8TPPLPolyES3_(ptr noundef nonnull align 8 dereferenceable(8) %7, ptr noundef nonnull align 8 dereferenceable(8) %22) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %22) #4
  br i1 %195, label %.lr.ph166, label %.loopexit

.lr.ph166:                                        ; preds = %._crit_edge.thread, %197
  %196 = call noundef nonnull align 8 dereferenceable(17) ptr @_ZNKSt14_List_iteratorI8TPPLPolyEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %7) #4
  invoke void @_ZNSt7__cxx114listI8TPPLPolySaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %2, ptr noundef nonnull align 8 dereferenceable(17) %196)
          to label %197 unwind label %.loopexit103

197:                                              ; preds = %.lr.ph166
  %198 = call ptr @_ZNSt14_List_iteratorI8TPPLPolyEppEi(ptr noundef nonnull align 8 dereferenceable(8) %7, i32 noundef 0) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %22) #4
  %199 = call ptr @_ZNSt7__cxx114listI8TPPLPolySaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %4) #4
  store ptr %199, ptr %22, align 8
  %200 = call noundef zeroext i1 @_ZStneRKSt14_List_iteratorI8TPPLPolyES3_(ptr noundef nonnull align 8 dereferenceable(8) %7, ptr noundef nonnull align 8 dereferenceable(8) %22) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %22) #4
  br i1 %200, label %.lr.ph166, label %.loopexit, !llvm.loop !29

.loopexit:                                        ; preds = %39, %76, %._crit_edge148, %197, %.critedge, %._crit_edge.thread
  %.0 = phi i32 [ 1, %._crit_edge.thread ], [ 1, %.critedge ], [ 1, %197 ], [ 0, %._crit_edge148 ], [ 0, %76 ], [ 1, %39 ]
  call void @_ZN8TPPLPolyD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %14) #4
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %14) #4
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %13) #4
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %12) #4
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %11) #4
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %10) #4
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %9) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %5) #4
  call void @_ZNSt7__cxx1110_List_baseI8TPPLPolySaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %4) #4
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %4) #4
  ret i32 %.0

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNSt14_List_iteratorI8TPPLPolyEppEi(ptr noundef nonnull align 8 dereferenceable(8), i32 noundef) local_unnamed_addr #3 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 #0 align 2

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZNK8TPPLPoly12GetNumPointsEv(ptr noundef nonnull align 8 dereferenceable(17)) local_unnamed_addr #3 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 #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZN13TPPLPartition6InConeER9TPPLPointS1_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 #3 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 #3 align 2

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

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

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

declare void @_ZN8TPPLPolyC1Ev(ptr) local_unnamed_addr

declare void @_ZN8TPPLPolyD1Ev(ptr) local_unnamed_addr

attributes #0 = { 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 #1 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { 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 #4 = { 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 = distinct !{!9, !10}
!10 = !{!"llvm.loop.mustprogress"}
!11 = distinct !{!11, !10}
!12 = !{!13, !14, i64 0}
!13 = !{!"_ZTS9TPPLPoint", !14, i64 0, !14, i64 8, !15, i64 16}
!14 = !{!"double", !7, i64 0}
!15 = !{!"int", !7, i64 0}
!16 = distinct !{!16, !10}
!17 = distinct !{!17, !10}
!18 = !{i64 0, i64 8, !19, i64 8, i64 8, !19, i64 16, i64 4, !20}
!19 = !{!14, !14, i64 0}
!20 = !{!15, !15, i64 0}
!21 = distinct !{!21, !10}
!22 = distinct !{!22, !10}
!23 = distinct !{!23, !10}
!24 = distinct !{!24, !10}
!25 = distinct !{!25, !10}
!26 = distinct !{!26, !10}
!27 = distinct !{!27, !10}
!28 = distinct !{!28, !10}
!29 = distinct !{!29, !10}


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