; LLVM IR from PaddlePaddle/Serving :: core/predictor/tools/ocrtools (clipper)

; Unoptimized IR (clang -disable-llvm-passes):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%"struct.std::_List_const_iterator" = type { ptr }
%"class.std::reverse_iterator" = type { %"struct.std::_List_const_iterator" }
%"struct.std::_List_iterator" = type { ptr }
%"class.std::reverse_iterator.46" = type { %"struct.std::_List_iterator" }
%"struct.ClipperLib::IntPoint" = type { i64, i64 }
%"struct.ClipperLib::TEdge" = type { %"struct.ClipperLib::IntPoint", %"struct.ClipperLib::IntPoint", %"struct.ClipperLib::IntPoint", double, i32, i32, i32, i32, i32, i32, ptr, ptr, ptr, ptr, ptr, ptr, ptr }
%"class.ClipperLib::Clipper" = type <{ ptr, %"class.std::vector.33", %"class.std::vector.33", %"class.std::vector.38", i32, [4 x i8], %"class.std::__cxx11::list", ptr, i8, [3 x i8], i32, i32, i8, i8, i8, i8, %"class.ClipperLib::ClipperBase" }>
%"class.std::vector.33" = type { %"struct.std::_Vector_base.34" }
%"struct.std::_Vector_base.34" = type { %"struct.std::_Vector_base<ClipperLib::Join *, std::allocator<ClipperLib::Join *>>::_Vector_impl" }
%"struct.std::_Vector_base<ClipperLib::Join *, std::allocator<ClipperLib::Join *>>::_Vector_impl" = type { %"struct.std::_Vector_base<ClipperLib::Join *, std::allocator<ClipperLib::Join *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<ClipperLib::Join *, std::allocator<ClipperLib::Join *>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.38" = type { %"struct.std::_Vector_base.39" }
%"struct.std::_Vector_base.39" = type { %"struct.std::_Vector_base<ClipperLib::IntersectNode *, std::allocator<ClipperLib::IntersectNode *>>::_Vector_impl" }
%"struct.std::_Vector_base<ClipperLib::IntersectNode *, std::allocator<ClipperLib::IntersectNode *>>::_Vector_impl" = type { %"struct.std::_Vector_base<ClipperLib::IntersectNode *, std::allocator<ClipperLib::IntersectNode *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<ClipperLib::IntersectNode *, std::allocator<ClipperLib::IntersectNode *>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::__cxx11::list" = type { %"class.std::__cxx11::_List_base" }
%"class.std::__cxx11::_List_base" = type { %"struct.std::__cxx11::_List_base<long long, std::allocator<long long>>::_List_impl" }
%"struct.std::__cxx11::_List_base<long long, std::allocator<long long>>::_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 }
%"class.ClipperLib::ClipperBase" = type { ptr, %"class.__gnu_cxx::__normal_iterator", %"class.std::vector.5", i8, %"class.std::vector.10", i8, i8, %"class.std::vector.15", ptr, %"class.std::priority_queue" }
%"class.__gnu_cxx::__normal_iterator" = type { ptr }
%"class.std::vector.5" = type { %"struct.std::_Vector_base.6" }
%"struct.std::_Vector_base.6" = type { %"struct.std::_Vector_base<ClipperLib::LocalMinimum, std::allocator<ClipperLib::LocalMinimum>>::_Vector_impl" }
%"struct.std::_Vector_base<ClipperLib::LocalMinimum, std::allocator<ClipperLib::LocalMinimum>>::_Vector_impl" = type { %"struct.std::_Vector_base<ClipperLib::LocalMinimum, std::allocator<ClipperLib::LocalMinimum>>::_Vector_impl_data" }
%"struct.std::_Vector_base<ClipperLib::LocalMinimum, std::allocator<ClipperLib::LocalMinimum>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.10" = type { %"struct.std::_Vector_base.11" }
%"struct.std::_Vector_base.11" = type { %"struct.std::_Vector_base<ClipperLib::TEdge *, std::allocator<ClipperLib::TEdge *>>::_Vector_impl" }
%"struct.std::_Vector_base<ClipperLib::TEdge *, std::allocator<ClipperLib::TEdge *>>::_Vector_impl" = type { %"struct.std::_Vector_base<ClipperLib::TEdge *, std::allocator<ClipperLib::TEdge *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<ClipperLib::TEdge *, std::allocator<ClipperLib::TEdge *>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.15" = type { %"struct.std::_Vector_base.16" }
%"struct.std::_Vector_base.16" = type { %"struct.std::_Vector_base<ClipperLib::OutRec *, std::allocator<ClipperLib::OutRec *>>::_Vector_impl" }
%"struct.std::_Vector_base<ClipperLib::OutRec *, std::allocator<ClipperLib::OutRec *>>::_Vector_impl" = type { %"struct.std::_Vector_base<ClipperLib::OutRec *, std::allocator<ClipperLib::OutRec *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<ClipperLib::OutRec *, std::allocator<ClipperLib::OutRec *>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::priority_queue" = type <{ %"class.std::vector.20", [8 x i8] }>
%"class.std::vector.20" = type { %"struct.std::_Vector_base.21" }
%"struct.std::_Vector_base.21" = type { %"struct.std::_Vector_base<long long, std::allocator<long long>>::_Vector_impl" }
%"struct.std::_Vector_base<long long, std::allocator<long long>>::_Vector_impl" = type { %"struct.std::_Vector_base<long long, std::allocator<long long>>::_Vector_impl_data" }
%"struct.std::_Vector_base<long long, std::allocator<long long>>::_Vector_impl_data" = type { ptr, ptr, ptr }

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

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

; 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

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZN10ClipperLib11SlopesEqualERKNS_5TEdgeES2_b(ptr noundef nonnull align 8 dereferenceable(136), ptr noundef nonnull align 8 dereferenceable(136), i1 noundef zeroext) #2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZN10ClipperLib19HorzSegmentsOverlapExxxx(i64 noundef, i64 noundef, i64 noundef, i64 noundef) #4

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN10ClipperLib11ClipperBase13DeleteFromAELEPNS_5TEdgeE(ptr noundef nonnull align 8 dereferenceable(144), ptr noundef) #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN10ClipperLib11ClipperBase18SwapPositionsInAELEPNS_5TEdgeES2_(ptr noundef nonnull align 8 dereferenceable(144), ptr noundef, ptr noundef) #4 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef ptr @_ZN10ClipperLib7Clipper8AddOutPtEPNS_5TEdgeERKNS_8IntPointE(ptr noundef nonnull align 8 dereferenceable(135), ptr noundef, ptr noundef nonnull align 8 dereferenceable(16)) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN10ClipperLib8IntPointC2Exx(ptr noundef nonnull align 8 dereferenceable(16), i64 noundef, i64 noundef) unnamed_addr #4 align 2

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZN10ClipperLib7Clipper12GetLastOutPtEPNS_5TEdgeE(ptr noundef nonnull align 8 dereferenceable(135), ptr noundef) #4 align 2

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN10ClipperLib7Clipper17ProcessHorizontalEPNS_5TEdgeE(ptr noundef nonnull align 8 dereferenceable(135) %0, ptr noundef %1) #2 align 2 {
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca i32, align 4
  %6 = alloca i64, align 8
  %7 = alloca i64, align 8
  %8 = alloca i8, align 1
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca %"struct.std::_List_const_iterator", align 8
  %12 = alloca %"class.std::reverse_iterator", align 8
  %13 = alloca %"struct.std::_List_const_iterator", align 8
  %14 = alloca %"struct.std::_List_iterator", align 8
  %15 = alloca %"struct.std::_List_const_iterator", align 8
  %16 = alloca %"struct.std::_List_iterator", align 8
  %17 = alloca %"struct.std::_List_const_iterator", align 8
  %18 = alloca %"struct.std::_List_const_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_iterator", align 8
  %22 = alloca %"class.std::reverse_iterator.46", align 8
  %23 = alloca %"class.std::reverse_iterator.46", align 8
  %24 = alloca %"class.std::reverse_iterator", align 8
  %25 = alloca %"class.std::reverse_iterator.46", align 8
  %26 = alloca %"class.std::reverse_iterator.46", align 8
  %27 = alloca ptr, align 8
  %28 = alloca i8, align 1
  %29 = alloca ptr, align 8
  %30 = alloca %"struct.std::_List_const_iterator", align 8
  %31 = alloca %"struct.std::_List_iterator", align 8
  %32 = alloca %"struct.ClipperLib::IntPoint", align 8
  %33 = alloca %"struct.std::_List_const_iterator", align 8
  %34 = alloca %"class.std::reverse_iterator.46", align 8
  %35 = alloca %"struct.ClipperLib::IntPoint", align 8
  %36 = alloca %"class.std::reverse_iterator", align 8
  %37 = alloca ptr, align 8
  %38 = alloca ptr, align 8
  %39 = alloca %"struct.ClipperLib::IntPoint", align 8
  %40 = alloca %"struct.ClipperLib::IntPoint", align 8
  %41 = alloca i32, align 4
  %42 = alloca %"struct.ClipperLib::IntPoint", align 8
  %43 = alloca %"struct.ClipperLib::IntPoint", align 8
  %44 = alloca ptr, align 8
  %45 = alloca ptr, align 8
  %46 = alloca ptr, align 8
  %47 = alloca %"struct.ClipperLib::IntPoint", align 8
  %48 = alloca %"struct.ClipperLib::IntPoint", align 8
  %49 = alloca ptr, align 8
  %50 = alloca ptr, align 8
  %51 = alloca ptr, align 8
  %52 = alloca %"struct.ClipperLib::IntPoint", align 8
  %53 = alloca ptr, align 8
  %54 = alloca %"struct.ClipperLib::IntPoint", align 8
  store ptr %0, ptr %3, align 8, !tbaa !5
  store ptr %1, ptr %4, align 8, !tbaa !5
  %55 = load ptr, ptr %3, align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr %5) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %6) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #5
  call void @llvm.lifetime.start.p0(i64 1, ptr %8) #5
  %56 = load ptr, ptr %4, align 8, !tbaa !5
  %57 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %56, i32 0, i32 6
  %58 = load i32, ptr %57, align 8, !tbaa !9
  %59 = icmp eq i32 %58, 0
  %60 = zext i1 %59 to i8
  store i8 %60, ptr %8, align 1, !tbaa !17
  %61 = load ptr, ptr %4, align 8, !tbaa !5
  call void @_ZN10ClipperLib16GetHorzDirectionERNS_5TEdgeERNS_9DirectionERxS4_(ptr noundef nonnull align 8 dereferenceable(136) %61, ptr noundef nonnull align 4 dereferenceable(4) %5, ptr noundef nonnull align 8 dereferenceable(8) %6, ptr noundef nonnull align 8 dereferenceable(8) %7)
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #5
  %62 = load ptr, ptr %4, align 8, !tbaa !5
  store ptr %62, ptr %9, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #5
  store ptr null, ptr %10, align 8, !tbaa !5
  br label %63

63:                                               ; preds = %75, %2
  %64 = load ptr, ptr %9, align 8, !tbaa !5
  %65 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %64, i32 0, i32 12
  %66 = load ptr, ptr %65, align 8, !tbaa !19
  %67 = icmp ne ptr %66, null
  br i1 %67, label %68, label %73

68:                                               ; preds = %63
  %69 = load ptr, ptr %9, align 8, !tbaa !5
  %70 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %69, i32 0, i32 12
  %71 = load ptr, ptr %70, align 8, !tbaa !19
  %72 = call noundef zeroext i1 @_ZN10ClipperLib12IsHorizontalERNS_5TEdgeE(ptr noundef nonnull align 8 dereferenceable(136) %71)
  br label %73

73:                                               ; preds = %68, %63
  %74 = phi i1 [ false, %63 ], [ %72, %68 ]
  br i1 %74, label %75, label %79

75:                                               ; preds = %73
  %76 = load ptr, ptr %9, align 8, !tbaa !5
  %77 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %76, i32 0, i32 12
  %78 = load ptr, ptr %77, align 8, !tbaa !19
  store ptr %78, ptr %9, align 8, !tbaa !5
  br label %63, !llvm.loop !20

79:                                               ; preds = %73
  %80 = load ptr, ptr %9, align 8, !tbaa !5
  %81 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %80, i32 0, i32 12
  %82 = load ptr, ptr %81, align 8, !tbaa !19
  %83 = icmp ne ptr %82, null
  br i1 %83, label %87, label %84

84:                                               ; preds = %79
  %85 = load ptr, ptr %9, align 8, !tbaa !5
  %86 = call noundef ptr @_ZN10ClipperLib13GetMaximaPairEPNS_5TEdgeE(ptr noundef %85)
  store ptr %86, ptr %10, align 8, !tbaa !5
  br label %87

87:                                               ; preds = %84, %79
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #5
  call void @_ZNSt20_List_const_iteratorIxEC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %11) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #5
  call void @_ZNSt16reverse_iteratorISt20_List_const_iteratorIxEEC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %12) #5
  %88 = getelementptr inbounds %"class.ClipperLib::Clipper", ptr %55, i32 0, i32 6
  %89 = call noundef i64 @_ZNKSt7__cxx114listIxSaIxEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %88) #5
  %90 = icmp ugt i64 %89, 0
  br i1 %90, label %91, label %171

91:                                               ; preds = %87
  %92 = load i32, ptr %5, align 4, !tbaa !22
  %93 = icmp eq i32 %92, 1
  br i1 %93, label %94, label %136

94:                                               ; preds = %91
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #5
  %95 = getelementptr inbounds %"class.ClipperLib::Clipper", ptr %55, i32 0, i32 6
  %96 = call ptr @_ZNSt7__cxx114listIxSaIxEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %95) #5
  %97 = getelementptr inbounds %"struct.std::_List_iterator", ptr %14, i32 0, i32 0
  store ptr %96, ptr %97, align 8
  call void @_ZNSt20_List_const_iteratorIxEC2ERKSt14_List_iteratorIxE(ptr noundef nonnull align 8 dereferenceable(8) %13, ptr noundef nonnull align 8 dereferenceable(8) %14) #5
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %11, ptr align 8 %13, i64 8, i1 false), !tbaa.struct !24
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #5
  br label %98

98:                                               ; preds = %113, %94
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #5
  %99 = getelementptr inbounds %"class.ClipperLib::Clipper", ptr %55, i32 0, i32 6
  %100 = call ptr @_ZNSt7__cxx114listIxSaIxEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %99) #5
  %101 = getelementptr inbounds %"struct.std::_List_iterator", ptr %16, i32 0, i32 0
  store ptr %100, ptr %101, align 8
  call void @_ZNSt20_List_const_iteratorIxEC2ERKSt14_List_iteratorIxE(ptr noundef nonnull align 8 dereferenceable(8) %15, ptr noundef nonnull align 8 dereferenceable(8) %16) #5
  %102 = call noundef zeroext i1 @_ZStneRKSt20_List_const_iteratorIxES2_(ptr noundef nonnull align 8 dereferenceable(8) %11, ptr noundef nonnull align 8 dereferenceable(8) %15) #5
  br i1 %102, label %103, label %111

103:                                              ; preds = %98
  %104 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt20_List_const_iteratorIxEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %11) #5
  %105 = load i64, ptr %104, align 8, !tbaa !25
  %106 = load ptr, ptr %4, align 8, !tbaa !5
  %107 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %106, i32 0, i32 0
  %108 = getelementptr inbounds %"struct.ClipperLib::IntPoint", ptr %107, i32 0, i32 0
  %109 = load i64, ptr %108, align 8, !tbaa !26
  %110 = icmp sle i64 %105, %109
  br label %111

111:                                              ; preds = %103, %98
  %112 = phi i1 [ false, %98 ], [ %110, %103 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #5
  br i1 %112, label %113, label %116

113:                                              ; preds = %111
  %114 = call ptr @_ZNSt20_List_const_iteratorIxEppEi(ptr noundef nonnull align 8 dereferenceable(8) %11, i32 noundef 0) #5
  %115 = getelementptr inbounds %"struct.std::_List_const_iterator", ptr %17, i32 0, i32 0
  store ptr %114, ptr %115, align 8
  br label %98, !llvm.loop !27

116:                                              ; preds = %111
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #5
  %117 = getelementptr inbounds %"class.ClipperLib::Clipper", ptr %55, i32 0, i32 6
  %118 = call ptr @_ZNSt7__cxx114listIxSaIxEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %117) #5
  %119 = getelementptr inbounds %"struct.std::_List_iterator", ptr %19, i32 0, i32 0
  store ptr %118, ptr %119, align 8
  call void @_ZNSt20_List_const_iteratorIxEC2ERKSt14_List_iteratorIxE(ptr noundef nonnull align 8 dereferenceable(8) %18, ptr noundef nonnull align 8 dereferenceable(8) %19) #5
  %120 = call noundef zeroext i1 @_ZStneRKSt20_List_const_iteratorIxES2_(ptr noundef nonnull align 8 dereferenceable(8) %11, ptr noundef nonnull align 8 dereferenceable(8) %18) #5
  br i1 %120, label %121, label %129

121:                                              ; preds = %116
  %122 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt20_List_const_iteratorIxEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %11) #5
  %123 = load i64, ptr %122, align 8, !tbaa !25
  %124 = load ptr, ptr %9, align 8, !tbaa !5
  %125 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %124, i32 0, i32 2
  %126 = getelementptr inbounds %"struct.ClipperLib::IntPoint", ptr %125, i32 0, i32 0
  %127 = load i64, ptr %126, align 8, !tbaa !28
  %128 = icmp sge i64 %123, %127
  br label %129

129:                                              ; preds = %121, %116
  %130 = phi i1 [ false, %116 ], [ %128, %121 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #5
  br i1 %130, label %131, label %135

131:                                              ; preds = %129
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #5
  %132 = getelementptr inbounds %"class.ClipperLib::Clipper", ptr %55, i32 0, i32 6
  %133 = call ptr @_ZNSt7__cxx114listIxSaIxEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %132) #5
  %134 = getelementptr inbounds %"struct.std::_List_iterator", ptr %21, i32 0, i32 0
  store ptr %133, ptr %134, align 8
  call void @_ZNSt20_List_const_iteratorIxEC2ERKSt14_List_iteratorIxE(ptr noundef nonnull align 8 dereferenceable(8) %20, ptr noundef nonnull align 8 dereferenceable(8) %21) #5
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %11, ptr align 8 %20, i64 8, i1 false), !tbaa.struct !24
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #5
  br label %135

135:                                              ; preds = %131, %129
  br label %170

136:                                              ; preds = %91
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #5
  %137 = getelementptr inbounds %"class.ClipperLib::Clipper", ptr %55, i32 0, i32 6
  call void @_ZNSt7__cxx114listIxSaIxEE6rbeginEv(ptr dead_on_unwind writable sret(%"class.std::reverse_iterator.46") align 8 %22, ptr noundef nonnull align 8 dereferenceable(24) %137) #5
  %138 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt16reverse_iteratorISt20_List_const_iteratorIxEEaSISt14_List_iteratorIxEEERS2_RKS_IT_E(ptr noundef nonnull align 8 dereferenceable(8) %12, ptr noundef nonnull align 8 dereferenceable(8) %22) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #5
  br label %139

139:                                              ; preds = %152, %136
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #5
  %140 = getelementptr inbounds %"class.ClipperLib::Clipper", ptr %55, i32 0, i32 6
  call void @_ZNSt7__cxx114listIxSaIxEE4rendEv(ptr dead_on_unwind writable sret(%"class.std::reverse_iterator.46") align 8 %23, ptr noundef nonnull align 8 dereferenceable(24) %140) #5
  %141 = call noundef zeroext i1 @_ZStneISt20_List_const_iteratorIxESt14_List_iteratorIxEEbRKSt16reverse_iteratorIT_ERKS4_IT0_E(ptr noundef nonnull align 8 dereferenceable(8) %12, ptr noundef nonnull align 8 dereferenceable(8) %23)
  br i1 %141, label %142, label %150

142:                                              ; preds = %139
  %143 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt16reverse_iteratorISt20_List_const_iteratorIxEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %12)
  %144 = load i64, ptr %143, align 8, !tbaa !25
  %145 = load ptr, ptr %4, align 8, !tbaa !5
  %146 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %145, i32 0, i32 0
  %147 = getelementptr inbounds %"struct.ClipperLib::IntPoint", ptr %146, i32 0, i32 0
  %148 = load i64, ptr %147, align 8, !tbaa !26
  %149 = icmp sgt i64 %144, %148
  br label %150

150:                                              ; preds = %142, %139
  %151 = phi i1 [ false, %139 ], [ %149, %142 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #5
  br i1 %151, label %152, label %153

152:                                              ; preds = %150
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #5
  call void @_ZNSt16reverse_iteratorISt20_List_const_iteratorIxEEppEi(ptr dead_on_unwind writable sret(%"class.std::reverse_iterator") align 8 %24, ptr noundef nonnull align 8 dereferenceable(8) %12, i32 noundef 0)
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #5
  br label %139, !llvm.loop !29

153:                                              ; preds = %150
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #5
  %154 = getelementptr inbounds %"class.ClipperLib::Clipper", ptr %55, i32 0, i32 6
  call void @_ZNSt7__cxx114listIxSaIxEE4rendEv(ptr dead_on_unwind writable sret(%"class.std::reverse_iterator.46") align 8 %25, ptr noundef nonnull align 8 dereferenceable(24) %154) #5
  %155 = call noundef zeroext i1 @_ZStneISt20_List_const_iteratorIxESt14_List_iteratorIxEEbRKSt16reverse_iteratorIT_ERKS4_IT0_E(ptr noundef nonnull align 8 dereferenceable(8) %12, ptr noundef nonnull align 8 dereferenceable(8) %25)
  br i1 %155, label %156, label %164

156:                                              ; preds = %153
  %157 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt16reverse_iteratorISt20_List_const_iteratorIxEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %12)
  %158 = load i64, ptr %157, align 8, !tbaa !25
  %159 = load ptr, ptr %9, align 8, !tbaa !5
  %160 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %159, i32 0, i32 2
  %161 = getelementptr inbounds %"struct.ClipperLib::IntPoint", ptr %160, i32 0, i32 0
  %162 = load i64, ptr %161, align 8, !tbaa !28
  %163 = icmp sle i64 %158, %162
  br label %164

164:                                              ; preds = %156, %153
  %165 = phi i1 [ false, %153 ], [ %163, %156 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #5
  br i1 %165, label %166, label %169

166:                                              ; preds = %164
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #5
  %167 = getelementptr inbounds %"class.ClipperLib::Clipper", ptr %55, i32 0, i32 6
  call void @_ZNSt7__cxx114listIxSaIxEE4rendEv(ptr dead_on_unwind writable sret(%"class.std::reverse_iterator.46") align 8 %26, ptr noundef nonnull align 8 dereferenceable(24) %167) #5
  %168 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt16reverse_iteratorISt20_List_const_iteratorIxEEaSISt14_List_iteratorIxEEERS2_RKS_IT_E(ptr noundef nonnull align 8 dereferenceable(8) %12, ptr noundef nonnull align 8 dereferenceable(8) %26) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #5
  br label %169

169:                                              ; preds = %166, %164
  br label %170

170:                                              ; preds = %169, %135
  br label %171

171:                                              ; preds = %170, %87
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #5
  store ptr null, ptr %27, align 8, !tbaa !5
  br label %172

172:                                              ; preds = %465, %171
  call void @llvm.lifetime.start.p0(i64 1, ptr %28) #5
  %173 = load ptr, ptr %4, align 8, !tbaa !5
  %174 = load ptr, ptr %9, align 8, !tbaa !5
  %175 = icmp eq ptr %173, %174
  %176 = zext i1 %175 to i8
  store i8 %176, ptr %28, align 1, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #5
  %177 = load ptr, ptr %4, align 8, !tbaa !5
  %178 = load i32, ptr %5, align 4, !tbaa !22
  %179 = call noundef ptr @_ZN10ClipperLib12GetNextInAELEPNS_5TEdgeENS_9DirectionE(ptr noundef %177, i32 noundef %178)
  store ptr %179, ptr %29, align 8, !tbaa !5
  br label %180

180:                                              ; preds = %425, %172
  %181 = load ptr, ptr %29, align 8, !tbaa !5
  %182 = icmp ne ptr %181, null
  br i1 %182, label %183, label %436

183:                                              ; preds = %180
  %184 = getelementptr inbounds %"class.ClipperLib::Clipper", ptr %55, i32 0, i32 6
  %185 = call noundef i64 @_ZNKSt7__cxx114listIxSaIxEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %184) #5
  %186 = icmp ugt i64 %185, 0
  br i1 %186, label %187, label %261

187:                                              ; preds = %183
  %188 = load i32, ptr %5, align 4, !tbaa !22
  %189 = icmp eq i32 %188, 1
  br i1 %189, label %190, label %227

190:                                              ; preds = %187
  br label %191

191:                                              ; preds = %223, %190
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #5
  %192 = getelementptr inbounds %"class.ClipperLib::Clipper", ptr %55, i32 0, i32 6
  %193 = call ptr @_ZNSt7__cxx114listIxSaIxEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %192) #5
  %194 = getelementptr inbounds %"struct.std::_List_iterator", ptr %31, i32 0, i32 0
  store ptr %193, ptr %194, align 8
  call void @_ZNSt20_List_const_iteratorIxEC2ERKSt14_List_iteratorIxE(ptr noundef nonnull align 8 dereferenceable(8) %30, ptr noundef nonnull align 8 dereferenceable(8) %31) #5
  %195 = call noundef zeroext i1 @_ZStneRKSt20_List_const_iteratorIxES2_(ptr noundef nonnull align 8 dereferenceable(8) %11, ptr noundef nonnull align 8 dereferenceable(8) %30) #5
  br i1 %195, label %196, label %204

196:                                              ; preds = %191
  %197 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt20_List_const_iteratorIxEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %11) #5
  %198 = load i64, ptr %197, align 8, !tbaa !25
  %199 = load ptr, ptr %29, align 8, !tbaa !5
  %200 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %199, i32 0, i32 1
  %201 = getelementptr inbounds %"struct.ClipperLib::IntPoint", ptr %200, i32 0, i32 0
  %202 = load i64, ptr %201, align 8, !tbaa !30
  %203 = icmp slt i64 %198, %202
  br label %204

204:                                              ; preds = %196, %191
  %205 = phi i1 [ false, %191 ], [ %203, %196 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #5
  br i1 %205, label %206, label %226

206:                                              ; preds = %204
  %207 = load ptr, ptr %4, align 8, !tbaa !5
  %208 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %207, i32 0, i32 9
  %209 = load i32, ptr %208, align 4, !tbaa !31
  %210 = icmp sge i32 %209, 0
  br i1 %210, label %211, label %223

211:                                              ; preds = %206
  %212 = load i8, ptr %8, align 1, !tbaa !17, !range !32, !noundef !33
  %213 = trunc i8 %212 to i1
  br i1 %213, label %223, label %214

214:                                              ; preds = %211
  %215 = load ptr, ptr %4, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %32) #5
  %216 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt20_List_const_iteratorIxEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %11) #5
  %217 = load i64, ptr %216, align 8, !tbaa !25
  %218 = load ptr, ptr %4, align 8, !tbaa !5
  %219 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %218, i32 0, i32 0
  %220 = getelementptr inbounds %"struct.ClipperLib::IntPoint", ptr %219, i32 0, i32 1
  %221 = load i64, ptr %220, align 8, !tbaa !34
  call void @_ZN10ClipperLib8IntPointC2Exx(ptr noundef nonnull align 8 dereferenceable(16) %32, i64 noundef %217, i64 noundef %221)
  %222 = call noundef ptr @_ZN10ClipperLib7Clipper8AddOutPtEPNS_5TEdgeERKNS_8IntPointE(ptr noundef nonnull align 8 dereferenceable(135) %55, ptr noundef %215, ptr noundef nonnull align 8 dereferenceable(16) %32)
  call void @llvm.lifetime.end.p0(i64 16, ptr %32) #5
  br label %223

223:                                              ; preds = %214, %211, %206
  %224 = call ptr @_ZNSt20_List_const_iteratorIxEppEi(ptr noundef nonnull align 8 dereferenceable(8) %11, i32 noundef 0) #5
  %225 = getelementptr inbounds %"struct.std::_List_const_iterator", ptr %33, i32 0, i32 0
  store ptr %224, ptr %225, align 8
  br label %191, !llvm.loop !35

226:                                              ; preds = %204
  br label %260

227:                                              ; preds = %187
  br label %228

228:                                              ; preds = %258, %227
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #5
  %229 = getelementptr inbounds %"class.ClipperLib::Clipper", ptr %55, i32 0, i32 6
  call void @_ZNSt7__cxx114listIxSaIxEE4rendEv(ptr dead_on_unwind writable sret(%"class.std::reverse_iterator.46") align 8 %34, ptr noundef nonnull align 8 dereferenceable(24) %229) #5
  %230 = call noundef zeroext i1 @_ZStneISt20_List_const_iteratorIxESt14_List_iteratorIxEEbRKSt16reverse_iteratorIT_ERKS4_IT0_E(ptr noundef nonnull align 8 dereferenceable(8) %12, ptr noundef nonnull align 8 dereferenceable(8) %34)
  br i1 %230, label %231, label %239

231:                                              ; preds = %228
  %232 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt16reverse_iteratorISt20_List_const_iteratorIxEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %12)
  %233 = load i64, ptr %232, align 8, !tbaa !25
  %234 = load ptr, ptr %29, align 8, !tbaa !5
  %235 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %234, i32 0, i32 1
  %236 = getelementptr inbounds %"struct.ClipperLib::IntPoint", ptr %235, i32 0, i32 0
  %237 = load i64, ptr %236, align 8, !tbaa !30
  %238 = icmp sgt i64 %233, %237
  br label %239

239:                                              ; preds = %231, %228
  %240 = phi i1 [ false, %228 ], [ %238, %231 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #5
  br i1 %240, label %241, label %259

241:                                              ; preds = %239
  %242 = load ptr, ptr %4, align 8, !tbaa !5
  %243 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %242, i32 0, i32 9
  %244 = load i32, ptr %243, align 4, !tbaa !31
  %245 = icmp sge i32 %244, 0
  br i1 %245, label %246, label %258

246:                                              ; preds = %241
  %247 = load i8, ptr %8, align 1, !tbaa !17, !range !32, !noundef !33
  %248 = trunc i8 %247 to i1
  br i1 %248, label %258, label %249

249:                                              ; preds = %246
  %250 = load ptr, ptr %4, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %35) #5
  %251 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt16reverse_iteratorISt20_List_const_iteratorIxEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %12)
  %252 = load i64, ptr %251, align 8, !tbaa !25
  %253 = load ptr, ptr %4, align 8, !tbaa !5
  %254 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %253, i32 0, i32 0
  %255 = getelementptr inbounds %"struct.ClipperLib::IntPoint", ptr %254, i32 0, i32 1
  %256 = load i64, ptr %255, align 8, !tbaa !34
  call void @_ZN10ClipperLib8IntPointC2Exx(ptr noundef nonnull align 8 dereferenceable(16) %35, i64 noundef %252, i64 noundef %256)
  %257 = call noundef ptr @_ZN10ClipperLib7Clipper8AddOutPtEPNS_5TEdgeERKNS_8IntPointE(ptr noundef nonnull align 8 dereferenceable(135) %55, ptr noundef %250, ptr noundef nonnull align 8 dereferenceable(16) %35)
  call void @llvm.lifetime.end.p0(i64 16, ptr %35) #5
  br label %258

258:                                              ; preds = %249, %246, %241
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #5
  call void @_ZNSt16reverse_iteratorISt20_List_const_iteratorIxEEppEi(ptr dead_on_unwind writable sret(%"class.std::reverse_iterator") align 8 %36, ptr noundef nonnull align 8 dereferenceable(8) %12, i32 noundef 0)
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #5
  br label %228, !llvm.loop !36

259:                                              ; preds = %239
  br label %260

260:                                              ; preds = %259, %226
  br label %261

261:                                              ; preds = %260, %183
  %262 = load i32, ptr %5, align 4, !tbaa !22
  %263 = icmp eq i32 %262, 1
  br i1 %263, label %264, label %271

264:                                              ; preds = %261
  %265 = load ptr, ptr %29, align 8, !tbaa !5
  %266 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %265, i32 0, i32 1
  %267 = getelementptr inbounds %"struct.ClipperLib::IntPoint", ptr %266, i32 0, i32 0
  %268 = load i64, ptr %267, align 8, !tbaa !30
  %269 = load i64, ptr %7, align 8, !tbaa !25
  %270 = icmp sgt i64 %268, %269
  br i1 %270, label %281, label %271

271:                                              ; preds = %264, %261
  %272 = load i32, ptr %5, align 4, !tbaa !22
  %273 = icmp eq i32 %272, 0
  br i1 %273, label %274, label %282

274:                                              ; preds = %271
  %275 = load ptr, ptr %29, align 8, !tbaa !5
  %276 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %275, i32 0, i32 1
  %277 = getelementptr inbounds %"struct.ClipperLib::IntPoint", ptr %276, i32 0, i32 0
  %278 = load i64, ptr %277, align 8, !tbaa !30
  %279 = load i64, ptr %6, align 8, !tbaa !25
  %280 = icmp slt i64 %278, %279
  br i1 %280, label %281, label %282

281:                                              ; preds = %274, %264
  br label %436

282:                                              ; preds = %274, %271
  %283 = load ptr, ptr %29, align 8, !tbaa !5
  %284 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %283, i32 0, i32 1
  %285 = getelementptr inbounds %"struct.ClipperLib::IntPoint", ptr %284, i32 0, i32 0
  %286 = load i64, ptr %285, align 8, !tbaa !30
  %287 = load ptr, ptr %4, align 8, !tbaa !5
  %288 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %287, i32 0, i32 2
  %289 = getelementptr inbounds %"struct.ClipperLib::IntPoint", ptr %288, i32 0, i32 0
  %290 = load i64, ptr %289, align 8, !tbaa !28
  %291 = icmp eq i64 %286, %290
  br i1 %291, label %292, label %308

292:                                              ; preds = %282
  %293 = load ptr, ptr %4, align 8, !tbaa !5
  %294 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %293, i32 0, i32 12
  %295 = load ptr, ptr %294, align 8, !tbaa !19
  %296 = icmp ne ptr %295, null
  br i1 %296, label %297, label %308

297:                                              ; preds = %292
  %298 = load ptr, ptr %29, align 8, !tbaa !5
  %299 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %298, i32 0, i32 3
  %300 = load double, ptr %299, align 8, !tbaa !37
  %301 = load ptr, ptr %4, align 8, !tbaa !5
  %302 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %301, i32 0, i32 12
  %303 = load ptr, ptr %302, align 8, !tbaa !19
  %304 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %303, i32 0, i32 3
  %305 = load double, ptr %304, align 8, !tbaa !37
  %306 = fcmp olt double %300, %305
  br i1 %306, label %307, label %308

307:                                              ; preds = %297
  br label %436

308:                                              ; preds = %297, %292, %282
  %309 = load ptr, ptr %4, align 8, !tbaa !5
  %310 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %309, i32 0, i32 9
  %311 = load i32, ptr %310, align 4, !tbaa !31
  %312 = icmp sge i32 %311, 0
  br i1 %312, label %313, label %372

313:                                              ; preds = %308
  %314 = load i8, ptr %8, align 1, !tbaa !17, !range !32, !noundef !33
  %315 = trunc i8 %314 to i1
  br i1 %315, label %372, label %316

316:                                              ; preds = %313
  %317 = load ptr, ptr %4, align 8, !tbaa !5
  %318 = load ptr, ptr %29, align 8, !tbaa !5
  %319 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %318, i32 0, i32 1
  %320 = call noundef ptr @_ZN10ClipperLib7Clipper8AddOutPtEPNS_5TEdgeERKNS_8IntPointE(ptr noundef nonnull align 8 dereferenceable(135) %55, ptr noundef %317, ptr noundef nonnull align 8 dereferenceable(16) %319)
  store ptr %320, ptr %27, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #5
  %321 = getelementptr inbounds %"class.ClipperLib::Clipper", ptr %55, i32 0, i32 7
  %322 = load ptr, ptr %321, align 8, !tbaa !38
  store ptr %322, ptr %37, align 8, !tbaa !5
  br label %323

323:                                              ; preds = %360, %316
  %324 = load ptr, ptr %37, align 8, !tbaa !5
  %325 = icmp ne ptr %324, null
  br i1 %325, label %326, label %364

326:                                              ; preds = %323
  %327 = load ptr, ptr %37, align 8, !tbaa !5
  %328 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %327, i32 0, i32 9
  %329 = load i32, ptr %328, align 4, !tbaa !31
  %330 = icmp sge i32 %329, 0
  br i1 %330, label %331, label %360

331:                                              ; preds = %326
  %332 = load ptr, ptr %4, align 8, !tbaa !5
  %333 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %332, i32 0, i32 0
  %334 = getelementptr inbounds %"struct.ClipperLib::IntPoint", ptr %333, i32 0, i32 0
  %335 = load i64, ptr %334, align 8, !tbaa !26
  %336 = load ptr, ptr %4, align 8, !tbaa !5
  %337 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %336, i32 0, i32 2
  %338 = getelementptr inbounds %"struct.ClipperLib::IntPoint", ptr %337, i32 0, i32 0
  %339 = load i64, ptr %338, align 8, !tbaa !28
  %340 = load ptr, ptr %37, align 8, !tbaa !5
  %341 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %340, i32 0, i32 0
  %342 = getelementptr inbounds %"struct.ClipperLib::IntPoint", ptr %341, i32 0, i32 0
  %343 = load i64, ptr %342, align 8, !tbaa !26
  %344 = load ptr, ptr %37, align 8, !tbaa !5
  %345 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %344, i32 0, i32 2
  %346 = getelementptr inbounds %"struct.ClipperLib::IntPoint", ptr %345, i32 0, i32 0
  %347 = load i64, ptr %346, align 8, !tbaa !28
  %348 = call noundef zeroext i1 @_ZN10ClipperLib19HorzSegmentsOverlapExxxx(i64 noundef %335, i64 noundef %339, i64 noundef %343, i64 noundef %347)
  br i1 %348, label %349, label %360

349:                                              ; preds = %331
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #5
  %350 = load ptr, ptr %37, align 8, !tbaa !5
  %351 = call noundef ptr @_ZN10ClipperLib7Clipper12GetLastOutPtEPNS_5TEdgeE(ptr noundef nonnull align 8 dereferenceable(135) %55, ptr noundef %350)
  store ptr %351, ptr %38, align 8, !tbaa !5
  %352 = load ptr, ptr %38, align 8, !tbaa !5
  %353 = load ptr, ptr %27, align 8, !tbaa !5
  %354 = load ptr, ptr %37, align 8, !tbaa !5
  %355 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %354, i32 0, i32 2
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %39, ptr align 8 %355, i64 16, i1 false), !tbaa.struct !56
  %356 = getelementptr inbounds { i64, i64 }, ptr %39, i32 0, i32 0
  %357 = load i64, ptr %356, align 8
  %358 = getelementptr inbounds { i64, i64 }, ptr %39, i32 0, i32 1
  %359 = load i64, ptr %358, align 8
  call void @_ZN10ClipperLib7Clipper7AddJoinEPNS_5OutPtES2_NS_8IntPointE(ptr noundef nonnull align 8 dereferenceable(135) %55, ptr noundef %352, ptr noundef %353, i64 %357, i64 %359)
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #5
  br label %360

360:                                              ; preds = %349, %331, %326
  %361 = load ptr, ptr %37, align 8, !tbaa !5
  %362 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %361, i32 0, i32 15
  %363 = load ptr, ptr %362, align 8, !tbaa !57
  store ptr %363, ptr %37, align 8, !tbaa !5
  br label %323, !llvm.loop !58

364:                                              ; preds = %323
  %365 = load ptr, ptr %27, align 8, !tbaa !5
  %366 = load ptr, ptr %4, align 8, !tbaa !5
  %367 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %366, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %40, ptr align 8 %367, i64 16, i1 false), !tbaa.struct !56
  %368 = getelementptr inbounds { i64, i64 }, ptr %40, i32 0, i32 0
  %369 = load i64, ptr %368, align 8
  %370 = getelementptr inbounds { i64, i64 }, ptr %40, i32 0, i32 1
  %371 = load i64, ptr %370, align 8
  call void @_ZN10ClipperLib7Clipper12AddGhostJoinEPNS_5OutPtENS_8IntPointE(ptr noundef nonnull align 8 dereferenceable(135) %55, ptr noundef %365, i64 %369, i64 %371)
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #5
  br label %372

372:                                              ; preds = %364, %313, %308
  %373 = load ptr, ptr %29, align 8, !tbaa !5
  %374 = load ptr, ptr %10, align 8, !tbaa !5
  %375 = icmp eq ptr %373, %374
  br i1 %375, label %376, label %400

376:                                              ; preds = %372
  %377 = load i8, ptr %28, align 1, !tbaa !17, !range !32, !noundef !33
  %378 = trunc i8 %377 to i1
  br i1 %378, label %379, label %400

379:                                              ; preds = %376
  %380 = load ptr, ptr %4, align 8, !tbaa !5
  %381 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %380, i32 0, i32 9
  %382 = load i32, ptr %381, align 4, !tbaa !31
  %383 = icmp sge i32 %382, 0
  br i1 %383, label %384, label %389

384:                                              ; preds = %379
  %385 = load ptr, ptr %4, align 8, !tbaa !5
  %386 = load ptr, ptr %10, align 8, !tbaa !5
  %387 = load ptr, ptr %4, align 8, !tbaa !5
  %388 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %387, i32 0, i32 2
  call void @_ZN10ClipperLib7Clipper15AddLocalMaxPolyEPNS_5TEdgeES2_RKNS_8IntPointE(ptr noundef nonnull align 8 dereferenceable(135) %55, ptr noundef %385, ptr noundef %386, ptr noundef nonnull align 8 dereferenceable(16) %388)
  br label %389

389:                                              ; preds = %384, %379
  %390 = load ptr, ptr %55, align 8, !tbaa !59
  %391 = getelementptr i8, ptr %390, i64 -24
  %392 = load i64, ptr %391, align 8
  %393 = getelementptr inbounds i8, ptr %55, i64 %392
  %394 = load ptr, ptr %4, align 8, !tbaa !5
  call void @_ZN10ClipperLib11ClipperBase13DeleteFromAELEPNS_5TEdgeE(ptr noundef nonnull align 8 dereferenceable(144) %393, ptr noundef %394)
  %395 = load ptr, ptr %55, align 8, !tbaa !59
  %396 = getelementptr i8, ptr %395, i64 -24
  %397 = load i64, ptr %396, align 8
  %398 = getelementptr inbounds i8, ptr %55, i64 %397
  %399 = load ptr, ptr %10, align 8, !tbaa !5
  call void @_ZN10ClipperLib11ClipperBase13DeleteFromAELEPNS_5TEdgeE(ptr noundef nonnull align 8 dereferenceable(144) %398, ptr noundef %399)
  store i32 1, ptr %41, align 4
  br label %463

400:                                              ; preds = %376, %372
  %401 = load i32, ptr %5, align 4, !tbaa !22
  %402 = icmp eq i32 %401, 1
  br i1 %402, label %403, label %414

403:                                              ; preds = %400
  call void @llvm.lifetime.start.p0(i64 16, ptr %42) #5
  %404 = load ptr, ptr %29, align 8, !tbaa !5
  %405 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %404, i32 0, i32 1
  %406 = getelementptr inbounds %"struct.ClipperLib::IntPoint", ptr %405, i32 0, i32 0
  %407 = load i64, ptr %406, align 8, !tbaa !30
  %408 = load ptr, ptr %4, align 8, !tbaa !5
  %409 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %408, i32 0, i32 1
  %410 = getelementptr inbounds %"struct.ClipperLib::IntPoint", ptr %409, i32 0, i32 1
  %411 = load i64, ptr %410, align 8, !tbaa !61
  call void @_ZN10ClipperLib8IntPointC2Exx(ptr noundef nonnull align 8 dereferenceable(16) %42, i64 noundef %407, i64 noundef %411)
  %412 = load ptr, ptr %4, align 8, !tbaa !5
  %413 = load ptr, ptr %29, align 8, !tbaa !5
  call void @_ZN10ClipperLib7Clipper14IntersectEdgesEPNS_5TEdgeES2_RNS_8IntPointE(ptr noundef nonnull align 8 dereferenceable(135) %55, ptr noundef %412, ptr noundef %413, ptr noundef nonnull align 8 dereferenceable(16) %42)
  call void @llvm.lifetime.end.p0(i64 16, ptr %42) #5
  br label %425

414:                                              ; preds = %400
  call void @llvm.lifetime.start.p0(i64 16, ptr %43) #5
  %415 = load ptr, ptr %29, align 8, !tbaa !5
  %416 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %415, i32 0, i32 1
  %417 = getelementptr inbounds %"struct.ClipperLib::IntPoint", ptr %416, i32 0, i32 0
  %418 = load i64, ptr %417, align 8, !tbaa !30
  %419 = load ptr, ptr %4, align 8, !tbaa !5
  %420 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %419, i32 0, i32 1
  %421 = getelementptr inbounds %"struct.ClipperLib::IntPoint", ptr %420, i32 0, i32 1
  %422 = load i64, ptr %421, align 8, !tbaa !61
  call void @_ZN10ClipperLib8IntPointC2Exx(ptr noundef nonnull align 8 dereferenceable(16) %43, i64 noundef %418, i64 noundef %422)
  %423 = load ptr, ptr %29, align 8, !tbaa !5
  %424 = load ptr, ptr %4, align 8, !tbaa !5
  call void @_ZN10ClipperLib7Clipper14IntersectEdgesEPNS_5TEdgeES2_RNS_8IntPointE(ptr noundef nonnull align 8 dereferenceable(135) %55, ptr noundef %423, ptr noundef %424, ptr noundef nonnull align 8 dereferenceable(16) %43)
  call void @llvm.lifetime.end.p0(i64 16, ptr %43) #5
  br label %425

425:                                              ; preds = %414, %403
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #5
  %426 = load ptr, ptr %29, align 8, !tbaa !5
  %427 = load i32, ptr %5, align 4, !tbaa !22
  %428 = call noundef ptr @_ZN10ClipperLib12GetNextInAELEPNS_5TEdgeENS_9DirectionE(ptr noundef %426, i32 noundef %427)
  store ptr %428, ptr %44, align 8, !tbaa !5
  %429 = load ptr, ptr %55, align 8, !tbaa !59
  %430 = getelementptr i8, ptr %429, i64 -24
  %431 = load i64, ptr %430, align 8
  %432 = getelementptr inbounds i8, ptr %55, i64 %431
  %433 = load ptr, ptr %4, align 8, !tbaa !5
  %434 = load ptr, ptr %29, align 8, !tbaa !5
  call void @_ZN10ClipperLib11ClipperBase18SwapPositionsInAELEPNS_5TEdgeES2_(ptr noundef nonnull align 8 dereferenceable(144) %432, ptr noundef %433, ptr noundef %434)
  %435 = load ptr, ptr %44, align 8, !tbaa !5
  store ptr %435, ptr %29, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #5
  br label %180, !llvm.loop !62

436:                                              ; preds = %307, %281, %180
  %437 = load ptr, ptr %4, align 8, !tbaa !5
  %438 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %437, i32 0, i32 12
  %439 = load ptr, ptr %438, align 8, !tbaa !19
  %440 = icmp ne ptr %439, null
  br i1 %440, label %441, label %446

441:                                              ; preds = %436
  %442 = load ptr, ptr %4, align 8, !tbaa !5
  %443 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %442, i32 0, i32 12
  %444 = load ptr, ptr %443, align 8, !tbaa !19
  %445 = call noundef zeroext i1 @_ZN10ClipperLib12IsHorizontalERNS_5TEdgeE(ptr noundef nonnull align 8 dereferenceable(136) %444)
  br i1 %445, label %447, label %446

446:                                              ; preds = %441, %436
  store i32 8, ptr %41, align 4
  br label %463

447:                                              ; preds = %441
  %448 = load ptr, ptr %55, align 8, !tbaa !59
  %449 = getelementptr i8, ptr %448, i64 -24
  %450 = load i64, ptr %449, align 8
  %451 = getelementptr inbounds i8, ptr %55, i64 %450
  call void @_ZN10ClipperLib11ClipperBase17UpdateEdgeIntoAELERPNS_5TEdgeE(ptr noundef nonnull align 8 dereferenceable(144) %451, ptr noundef nonnull align 8 dereferenceable(8) %4)
  %452 = load ptr, ptr %4, align 8, !tbaa !5
  %453 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %452, i32 0, i32 9
  %454 = load i32, ptr %453, align 4, !tbaa !31
  %455 = icmp sge i32 %454, 0
  br i1 %455, label %456, label %461

456:                                              ; preds = %447
  %457 = load ptr, ptr %4, align 8, !tbaa !5
  %458 = load ptr, ptr %4, align 8, !tbaa !5
  %459 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %458, i32 0, i32 0
  %460 = call noundef ptr @_ZN10ClipperLib7Clipper8AddOutPtEPNS_5TEdgeERKNS_8IntPointE(ptr noundef nonnull align 8 dereferenceable(135) %55, ptr noundef %457, ptr noundef nonnull align 8 dereferenceable(16) %459)
  br label %461

461:                                              ; preds = %456, %447
  %462 = load ptr, ptr %4, align 8, !tbaa !5
  call void @_ZN10ClipperLib16GetHorzDirectionERNS_5TEdgeERNS_9DirectionERxS4_(ptr noundef nonnull align 8 dereferenceable(136) %462, ptr noundef nonnull align 4 dereferenceable(4) %5, ptr noundef nonnull align 8 dereferenceable(8) %6, ptr noundef nonnull align 8 dereferenceable(8) %7)
  store i32 0, ptr %41, align 4
  br label %463

463:                                              ; preds = %461, %446, %389
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %28) #5
  %464 = load i32, ptr %41, align 4
  switch i32 %464, label %717 [
    i32 0, label %465
    i32 8, label %466
  ]

465:                                              ; preds = %463
  br label %172, !llvm.loop !63

466:                                              ; preds = %463
  %467 = load ptr, ptr %4, align 8, !tbaa !5
  %468 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %467, i32 0, i32 9
  %469 = load i32, ptr %468, align 4, !tbaa !31
  %470 = icmp sge i32 %469, 0
  br i1 %470, label %471, label %528

471:                                              ; preds = %466
  %472 = load ptr, ptr %27, align 8, !tbaa !5
  %473 = icmp ne ptr %472, null
  br i1 %473, label %528, label %474

474:                                              ; preds = %471
  %475 = load ptr, ptr %4, align 8, !tbaa !5
  %476 = call noundef ptr @_ZN10ClipperLib7Clipper12GetLastOutPtEPNS_5TEdgeE(ptr noundef nonnull align 8 dereferenceable(135) %55, ptr noundef %475)
  store ptr %476, ptr %27, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #5
  %477 = getelementptr inbounds %"class.ClipperLib::Clipper", ptr %55, i32 0, i32 7
  %478 = load ptr, ptr %477, align 8, !tbaa !38
  store ptr %478, ptr %45, align 8, !tbaa !5
  br label %479

479:                                              ; preds = %516, %474
  %480 = load ptr, ptr %45, align 8, !tbaa !5
  %481 = icmp ne ptr %480, null
  br i1 %481, label %482, label %520

482:                                              ; preds = %479
  %483 = load ptr, ptr %45, align 8, !tbaa !5
  %484 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %483, i32 0, i32 9
  %485 = load i32, ptr %484, align 4, !tbaa !31
  %486 = icmp sge i32 %485, 0
  br i1 %486, label %487, label %516

487:                                              ; preds = %482
  %488 = load ptr, ptr %4, align 8, !tbaa !5
  %489 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %488, i32 0, i32 0
  %490 = getelementptr inbounds %"struct.ClipperLib::IntPoint", ptr %489, i32 0, i32 0
  %491 = load i64, ptr %490, align 8, !tbaa !26
  %492 = load ptr, ptr %4, align 8, !tbaa !5
  %493 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %492, i32 0, i32 2
  %494 = getelementptr inbounds %"struct.ClipperLib::IntPoint", ptr %493, i32 0, i32 0
  %495 = load i64, ptr %494, align 8, !tbaa !28
  %496 = load ptr, ptr %45, align 8, !tbaa !5
  %497 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %496, i32 0, i32 0
  %498 = getelementptr inbounds %"struct.ClipperLib::IntPoint", ptr %497, i32 0, i32 0
  %499 = load i64, ptr %498, align 8, !tbaa !26
  %500 = load ptr, ptr %45, align 8, !tbaa !5
  %501 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %500, i32 0, i32 2
  %502 = getelementptr inbounds %"struct.ClipperLib::IntPoint", ptr %501, i32 0, i32 0
  %503 = load i64, ptr %502, align 8, !tbaa !28
  %504 = call noundef zeroext i1 @_ZN10ClipperLib19HorzSegmentsOverlapExxxx(i64 noundef %491, i64 noundef %495, i64 noundef %499, i64 noundef %503)
  br i1 %504, label %505, label %516

505:                                              ; preds = %487
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #5
  %506 = load ptr, ptr %45, align 8, !tbaa !5
  %507 = call noundef ptr @_ZN10ClipperLib7Clipper12GetLastOutPtEPNS_5TEdgeE(ptr noundef nonnull align 8 dereferenceable(135) %55, ptr noundef %506)
  store ptr %507, ptr %46, align 8, !tbaa !5
  %508 = load ptr, ptr %46, align 8, !tbaa !5
  %509 = load ptr, ptr %27, align 8, !tbaa !5
  %510 = load ptr, ptr %45, align 8, !tbaa !5
  %511 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %510, i32 0, i32 2
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %47, ptr align 8 %511, i64 16, i1 false), !tbaa.struct !56
  %512 = getelementptr inbounds { i64, i64 }, ptr %47, i32 0, i32 0
  %513 = load i64, ptr %512, align 8
  %514 = getelementptr inbounds { i64, i64 }, ptr %47, i32 0, i32 1
  %515 = load i64, ptr %514, align 8
  call void @_ZN10ClipperLib7Clipper7AddJoinEPNS_5OutPtES2_NS_8IntPointE(ptr noundef nonnull align 8 dereferenceable(135) %55, ptr noundef %508, ptr noundef %509, i64 %513, i64 %515)
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #5
  br label %516

516:                                              ; preds = %505, %487, %482
  %517 = load ptr, ptr %45, align 8, !tbaa !5
  %518 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %517, i32 0, i32 15
  %519 = load ptr, ptr %518, align 8, !tbaa !57
  store ptr %519, ptr %45, align 8, !tbaa !5
  br label %479, !llvm.loop !64

520:                                              ; preds = %479
  %521 = load ptr, ptr %27, align 8, !tbaa !5
  %522 = load ptr, ptr %4, align 8, !tbaa !5
  %523 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %522, i32 0, i32 2
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %48, ptr align 8 %523, i64 16, i1 false), !tbaa.struct !56
  %524 = getelementptr inbounds { i64, i64 }, ptr %48, i32 0, i32 0
  %525 = load i64, ptr %524, align 8
  %526 = getelementptr inbounds { i64, i64 }, ptr %48, i32 0, i32 1
  %527 = load i64, ptr %526, align 8
  call void @_ZN10ClipperLib7Clipper12AddGhostJoinEPNS_5OutPtENS_8IntPointE(ptr noundef nonnull align 8 dereferenceable(135) %55, ptr noundef %521, i64 %525, i64 %527)
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #5
  br label %528

528:                                              ; preds = %520, %471, %466
  %529 = load ptr, ptr %4, align 8, !tbaa !5
  %530 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %529, i32 0, i32 12
  %531 = load ptr, ptr %530, align 8, !tbaa !19
  %532 = icmp ne ptr %531, null
  br i1 %532, label %533, label %700

533:                                              ; preds = %528
  %534 = load ptr, ptr %4, align 8, !tbaa !5
  %535 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %534, i32 0, i32 9
  %536 = load i32, ptr %535, align 4, !tbaa !31
  %537 = icmp sge i32 %536, 0
  br i1 %537, label %538, label %694

538:                                              ; preds = %533
  %539 = load ptr, ptr %4, align 8, !tbaa !5
  %540 = load ptr, ptr %4, align 8, !tbaa !5
  %541 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %540, i32 0, i32 2
  %542 = call noundef ptr @_ZN10ClipperLib7Clipper8AddOutPtEPNS_5TEdgeERKNS_8IntPointE(ptr noundef nonnull align 8 dereferenceable(135) %55, ptr noundef %539, ptr noundef nonnull align 8 dereferenceable(16) %541)
  store ptr %542, ptr %27, align 8, !tbaa !5
  %543 = load ptr, ptr %55, align 8, !tbaa !59
  %544 = getelementptr i8, ptr %543, i64 -24
  %545 = load i64, ptr %544, align 8
  %546 = getelementptr inbounds i8, ptr %55, i64 %545
  call void @_ZN10ClipperLib11ClipperBase17UpdateEdgeIntoAELERPNS_5TEdgeE(ptr noundef nonnull align 8 dereferenceable(144) %546, ptr noundef nonnull align 8 dereferenceable(8) %4)
  %547 = load ptr, ptr %4, align 8, !tbaa !5
  %548 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %547, i32 0, i32 6
  %549 = load i32, ptr %548, align 8, !tbaa !9
  %550 = icmp eq i32 %549, 0
  br i1 %550, label %551, label %552

551:                                              ; preds = %538
  store i32 1, ptr %41, align 4
  br label %717

552:                                              ; preds = %538
  call void @llvm.lifetime.start.p0(i64 8, ptr %49) #5
  %553 = load ptr, ptr %4, align 8, !tbaa !5
  %554 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %553, i32 0, i32 14
  %555 = load ptr, ptr %554, align 8, !tbaa !65
  store ptr %555, ptr %49, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %50) #5
  %556 = load ptr, ptr %4, align 8, !tbaa !5
  %557 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %556, i32 0, i32 13
  %558 = load ptr, ptr %557, align 8, !tbaa !66
  store ptr %558, ptr %50, align 8, !tbaa !5
  %559 = load ptr, ptr %49, align 8, !tbaa !5
  %560 = icmp ne ptr %559, null
  br i1 %560, label %561, label %625

561:                                              ; preds = %552
  %562 = load ptr, ptr %49, align 8, !tbaa !5
  %563 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %562, i32 0, i32 1
  %564 = getelementptr inbounds %"struct.ClipperLib::IntPoint", ptr %563, i32 0, i32 0
  %565 = load i64, ptr %564, align 8, !tbaa !30
  %566 = load ptr, ptr %4, align 8, !tbaa !5
  %567 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %566, i32 0, i32 0
  %568 = getelementptr inbounds %"struct.ClipperLib::IntPoint", ptr %567, i32 0, i32 0
  %569 = load i64, ptr %568, align 8, !tbaa !26
  %570 = icmp eq i64 %565, %569
  br i1 %570, label %571, label %625

571:                                              ; preds = %561
  %572 = load ptr, ptr %49, align 8, !tbaa !5
  %573 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %572, i32 0, i32 1
  %574 = getelementptr inbounds %"struct.ClipperLib::IntPoint", ptr %573, i32 0, i32 1
  %575 = load i64, ptr %574, align 8, !tbaa !61
  %576 = load ptr, ptr %4, align 8, !tbaa !5
  %577 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %576, i32 0, i32 0
  %578 = getelementptr inbounds %"struct.ClipperLib::IntPoint", ptr %577, i32 0, i32 1
  %579 = load i64, ptr %578, align 8, !tbaa !34
  %580 = icmp eq i64 %575, %579
  br i1 %580, label %581, label %625

581:                                              ; preds = %571
  %582 = load ptr, ptr %49, align 8, !tbaa !5
  %583 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %582, i32 0, i32 6
  %584 = load i32, ptr %583, align 8, !tbaa !9
  %585 = icmp ne i32 %584, 0
  br i1 %585, label %586, label %625

586:                                              ; preds = %581
  %587 = load ptr, ptr %49, align 8, !tbaa !5
  %588 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %587, i32 0, i32 9
  %589 = load i32, ptr %588, align 4, !tbaa !31
  %590 = icmp sge i32 %589, 0
  br i1 %590, label %591, label %625

591:                                              ; preds = %586
  %592 = load ptr, ptr %49, align 8, !tbaa !5
  %593 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %592, i32 0, i32 1
  %594 = getelementptr inbounds %"struct.ClipperLib::IntPoint", ptr %593, i32 0, i32 1
  %595 = load i64, ptr %594, align 8, !tbaa !61
  %596 = load ptr, ptr %49, align 8, !tbaa !5
  %597 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %596, i32 0, i32 2
  %598 = getelementptr inbounds %"struct.ClipperLib::IntPoint", ptr %597, i32 0, i32 1
  %599 = load i64, ptr %598, align 8, !tbaa !67
  %600 = icmp sgt i64 %595, %599
  br i1 %600, label %601, label %625

601:                                              ; preds = %591
  %602 = load ptr, ptr %4, align 8, !tbaa !5
  %603 = load ptr, ptr %49, align 8, !tbaa !5
  %604 = load ptr, ptr %55, align 8, !tbaa !59
  %605 = getelementptr i8, ptr %604, i64 -24
  %606 = load i64, ptr %605, align 8
  %607 = getelementptr inbounds i8, ptr %55, i64 %606
  %608 = getelementptr inbounds %"class.ClipperLib::ClipperBase", ptr %607, i32 0, i32 3
  %609 = load i8, ptr %608, align 8, !tbaa !68, !range !32, !noundef !33
  %610 = trunc i8 %609 to i1
  %611 = call noundef zeroext i1 @_ZN10ClipperLib11SlopesEqualERKNS_5TEdgeES2_b(ptr noundef nonnull align 8 dereferenceable(136) %602, ptr noundef nonnull align 8 dereferenceable(136) %603, i1 noundef zeroext %610)
  br i1 %611, label %612, label %625

612:                                              ; preds = %601
  call void @llvm.lifetime.start.p0(i64 8, ptr %51) #5
  %613 = load ptr, ptr %49, align 8, !tbaa !5
  %614 = load ptr, ptr %4, align 8, !tbaa !5
  %615 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %614, i32 0, i32 0
  %616 = call noundef ptr @_ZN10ClipperLib7Clipper8AddOutPtEPNS_5TEdgeERKNS_8IntPointE(ptr noundef nonnull align 8 dereferenceable(135) %55, ptr noundef %613, ptr noundef nonnull align 8 dereferenceable(16) %615)
  store ptr %616, ptr %51, align 8, !tbaa !5
  %617 = load ptr, ptr %27, align 8, !tbaa !5
  %618 = load ptr, ptr %51, align 8, !tbaa !5
  %619 = load ptr, ptr %4, align 8, !tbaa !5
  %620 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %619, i32 0, i32 2
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %52, ptr align 8 %620, i64 16, i1 false), !tbaa.struct !56
  %621 = getelementptr inbounds { i64, i64 }, ptr %52, i32 0, i32 0
  %622 = load i64, ptr %621, align 8
  %623 = getelementptr inbounds { i64, i64 }, ptr %52, i32 0, i32 1
  %624 = load i64, ptr %623, align 8
  call void @_ZN10ClipperLib7Clipper7AddJoinEPNS_5OutPtES2_NS_8IntPointE(ptr noundef nonnull align 8 dereferenceable(135) %55, ptr noundef %617, ptr noundef %618, i64 %622, i64 %624)
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #5
  br label %693

625:                                              ; preds = %601, %591, %586, %581, %571, %561, %552
  %626 = load ptr, ptr %50, align 8, !tbaa !5
  %627 = icmp ne ptr %626, null
  br i1 %627, label %628, label %692

628:                                              ; preds = %625
  %629 = load ptr, ptr %50, align 8, !tbaa !5
  %630 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %629, i32 0, i32 1
  %631 = getelementptr inbounds %"struct.ClipperLib::IntPoint", ptr %630, i32 0, i32 0
  %632 = load i64, ptr %631, align 8, !tbaa !30
  %633 = load ptr, ptr %4, align 8, !tbaa !5
  %634 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %633, i32 0, i32 0
  %635 = getelementptr inbounds %"struct.ClipperLib::IntPoint", ptr %634, i32 0, i32 0
  %636 = load i64, ptr %635, align 8, !tbaa !26
  %637 = icmp eq i64 %632, %636
  br i1 %637, label %638, label %692

638:                                              ; preds = %628
  %639 = load ptr, ptr %50, align 8, !tbaa !5
  %640 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %639, i32 0, i32 1
  %641 = getelementptr inbounds %"struct.ClipperLib::IntPoint", ptr %640, i32 0, i32 1
  %642 = load i64, ptr %641, align 8, !tbaa !61
  %643 = load ptr, ptr %4, align 8, !tbaa !5
  %644 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %643, i32 0, i32 0
  %645 = getelementptr inbounds %"struct.ClipperLib::IntPoint", ptr %644, i32 0, i32 1
  %646 = load i64, ptr %645, align 8, !tbaa !34
  %647 = icmp eq i64 %642, %646
  br i1 %647, label %648, label %692

648:                                              ; preds = %638
  %649 = load ptr, ptr %50, align 8, !tbaa !5
  %650 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %649, i32 0, i32 6
  %651 = load i32, ptr %650, align 8, !tbaa !9
  %652 = icmp ne i32 %651, 0
  br i1 %652, label %653, label %692

653:                                              ; preds = %648
  %654 = load ptr, ptr %50, align 8, !tbaa !5
  %655 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %654, i32 0, i32 9
  %656 = load i32, ptr %655, align 4, !tbaa !31
  %657 = icmp sge i32 %656, 0
  br i1 %657, label %658, label %692

658:                                              ; preds = %653
  %659 = load ptr, ptr %50, align 8, !tbaa !5
  %660 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %659, i32 0, i32 1
  %661 = getelementptr inbounds %"struct.ClipperLib::IntPoint", ptr %660, i32 0, i32 1
  %662 = load i64, ptr %661, align 8, !tbaa !61
  %663 = load ptr, ptr %50, align 8, !tbaa !5
  %664 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %663, i32 0, i32 2
  %665 = getelementptr inbounds %"struct.ClipperLib::IntPoint", ptr %664, i32 0, i32 1
  %666 = load i64, ptr %665, align 8, !tbaa !67
  %667 = icmp sgt i64 %662, %666
  br i1 %667, label %668, label %692

668:                                              ; preds = %658
  %669 = load ptr, ptr %4, align 8, !tbaa !5
  %670 = load ptr, ptr %50, align 8, !tbaa !5
  %671 = load ptr, ptr %55, align 8, !tbaa !59
  %672 = getelementptr i8, ptr %671, i64 -24
  %673 = load i64, ptr %672, align 8
  %674 = getelementptr inbounds i8, ptr %55, i64 %673
  %675 = getelementptr inbounds %"class.ClipperLib::ClipperBase", ptr %674, i32 0, i32 3
  %676 = load i8, ptr %675, align 8, !tbaa !68, !range !32, !noundef !33
  %677 = trunc i8 %676 to i1
  %678 = call noundef zeroext i1 @_ZN10ClipperLib11SlopesEqualERKNS_5TEdgeES2_b(ptr noundef nonnull align 8 dereferenceable(136) %669, ptr noundef nonnull align 8 dereferenceable(136) %670, i1 noundef zeroext %677)
  br i1 %678, label %679, label %692

679:                                              ; preds = %668
  call void @llvm.lifetime.start.p0(i64 8, ptr %53) #5
  %680 = load ptr, ptr %50, align 8, !tbaa !5
  %681 = load ptr, ptr %4, align 8, !tbaa !5
  %682 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %681, i32 0, i32 0
  %683 = call noundef ptr @_ZN10ClipperLib7Clipper8AddOutPtEPNS_5TEdgeERKNS_8IntPointE(ptr noundef nonnull align 8 dereferenceable(135) %55, ptr noundef %680, ptr noundef nonnull align 8 dereferenceable(16) %682)
  store ptr %683, ptr %53, align 8, !tbaa !5
  %684 = load ptr, ptr %27, align 8, !tbaa !5
  %685 = load ptr, ptr %53, align 8, !tbaa !5
  %686 = load ptr, ptr %4, align 8, !tbaa !5
  %687 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %686, i32 0, i32 2
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %54, ptr align 8 %687, i64 16, i1 false), !tbaa.struct !56
  %688 = getelementptr inbounds { i64, i64 }, ptr %54, i32 0, i32 0
  %689 = load i64, ptr %688, align 8
  %690 = getelementptr inbounds { i64, i64 }, ptr %54, i32 0, i32 1
  %691 = load i64, ptr %690, align 8
  call void @_ZN10ClipperLib7Clipper7AddJoinEPNS_5OutPtES2_NS_8IntPointE(ptr noundef nonnull align 8 dereferenceable(135) %55, ptr noundef %684, ptr noundef %685, i64 %689, i64 %691)
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #5
  br label %692

692:                                              ; preds = %679, %668, %658, %653, %648, %638, %628, %625
  br label %693

693:                                              ; preds = %692, %612
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #5
  br label %699

694:                                              ; preds = %533
  %695 = load ptr, ptr %55, align 8, !tbaa !59
  %696 = getelementptr i8, ptr %695, i64 -24
  %697 = load i64, ptr %696, align 8
  %698 = getelementptr inbounds i8, ptr %55, i64 %697
  call void @_ZN10ClipperLib11ClipperBase17UpdateEdgeIntoAELERPNS_5TEdgeE(ptr noundef nonnull align 8 dereferenceable(144) %698, ptr noundef nonnull align 8 dereferenceable(8) %4)
  br label %699

699:                                              ; preds = %694, %693
  br label %716

700:                                              ; preds = %528
  %701 = load ptr, ptr %4, align 8, !tbaa !5
  %702 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %701, i32 0, i32 9
  %703 = load i32, ptr %702, align 4, !tbaa !31
  %704 = icmp sge i32 %703, 0
  br i1 %704, label %705, label %710

705:                                              ; preds = %700
  %706 = load ptr, ptr %4, align 8, !tbaa !5
  %707 = load ptr, ptr %4, align 8, !tbaa !5
  %708 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %707, i32 0, i32 2
  %709 = call noundef ptr @_ZN10ClipperLib7Clipper8AddOutPtEPNS_5TEdgeERKNS_8IntPointE(ptr noundef nonnull align 8 dereferenceable(135) %55, ptr noundef %706, ptr noundef nonnull align 8 dereferenceable(16) %708)
  br label %710

710:                                              ; preds = %705, %700
  %711 = load ptr, ptr %55, align 8, !tbaa !59
  %712 = getelementptr i8, ptr %711, i64 -24
  %713 = load i64, ptr %712, align 8
  %714 = getelementptr inbounds i8, ptr %55, i64 %713
  %715 = load ptr, ptr %4, align 8, !tbaa !5
  call void @_ZN10ClipperLib11ClipperBase13DeleteFromAELEPNS_5TEdgeE(ptr noundef nonnull align 8 dereferenceable(144) %714, ptr noundef %715)
  br label %716

716:                                              ; preds = %710, %699
  store i32 0, ptr %41, align 4
  br label %717

717:                                              ; preds = %716, %551, %463
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %8) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #5
  %718 = load i32, ptr %41, align 4
  switch i32 %718, label %720 [
    i32 0, label %719
    i32 1, label %719
  ]

719:                                              ; preds = %717, %717
  ret void

720:                                              ; preds = %717
  unreachable
}

; Function Attrs: mustprogress uwtable
declare dso_local noundef ptr @_ZN10ClipperLib13GetMaximaPairEPNS_5TEdgeE(ptr noundef) #2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZN10ClipperLib12GetNextInAELEPNS_5TEdgeENS_9DirectionE(ptr noundef, i32 noundef) #4

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN10ClipperLib16GetHorzDirectionERNS_5TEdgeERNS_9DirectionERxS4_(ptr noundef nonnull align 8 dereferenceable(136), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) #4

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt7__cxx114listIxSaIxEE6rbeginEv(ptr dead_on_unwind noalias writable sret(%"class.std::reverse_iterator.46") align 8, ptr noundef nonnull align 8 dereferenceable(24)) #4 align 2

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt7__cxx114listIxSaIxEE4rendEv(ptr dead_on_unwind noalias writable sret(%"class.std::reverse_iterator.46") align 8, ptr noundef nonnull align 8 dereferenceable(24)) #4 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt16reverse_iteratorISt20_List_const_iteratorIxEEppEi(ptr dead_on_unwind noalias writable sret(%"class.std::reverse_iterator") align 8, ptr noundef nonnull align 8 dereferenceable(8), i32 noundef) #4 align 2

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { 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 #3 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { 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 #5 = { 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, !16, i64 64}
!10 = !{!"_ZTSN10ClipperLib5TEdgeE", !11, i64 0, !11, i64 16, !11, i64 32, !13, i64 48, !14, i64 56, !15, i64 60, !16, i64 64, !16, i64 68, !16, i64 72, !16, i64 76, !6, i64 80, !6, i64 88, !6, i64 96, !6, i64 104, !6, i64 112, !6, i64 120, !6, i64 128}
!11 = !{!"_ZTSN10ClipperLib8IntPointE", !12, i64 0, !12, i64 8}
!12 = !{!"long long", !7, i64 0}
!13 = !{!"double", !7, i64 0}
!14 = !{!"_ZTSN10ClipperLib8PolyTypeE", !7, i64 0}
!15 = !{!"_ZTSN10ClipperLib8EdgeSideE", !7, i64 0}
!16 = !{!"int", !7, i64 0}
!17 = !{!18, !18, i64 0}
!18 = !{!"bool", !7, i64 0}
!19 = !{!10, !6, i64 96}
!20 = distinct !{!20, !21}
!21 = !{!"llvm.loop.mustprogress"}
!22 = !{!23, !23, i64 0}
!23 = !{!"_ZTSN10ClipperLib9DirectionE", !7, i64 0}
!24 = !{i64 0, i64 8, !5}
!25 = !{!12, !12, i64 0}
!26 = !{!10, !12, i64 0}
!27 = distinct !{!27, !21}
!28 = !{!10, !12, i64 32}
!29 = distinct !{!29, !21}
!30 = !{!10, !12, i64 16}
!31 = !{!10, !16, i64 76}
!32 = !{i8 0, i8 2}
!33 = !{}
!34 = !{!10, !12, i64 8}
!35 = distinct !{!35, !21}
!36 = distinct !{!36, !21}
!37 = !{!10, !13, i64 48}
!38 = !{!39, !6, i64 112}
!39 = !{!"_ZTSN10ClipperLib7ClipperE", !40, i64 8, !40, i64 32, !44, i64 56, !48, i64 80, !49, i64 88, !6, i64 112, !18, i64 120, !55, i64 124, !55, i64 128, !18, i64 132, !18, i64 133, !18, i64 134}
!40 = !{!"_ZTSSt6vectorIPN10ClipperLib4JoinESaIS2_EE", !41, i64 0}
!41 = !{!"_ZTSSt12_Vector_baseIPN10ClipperLib4JoinESaIS2_EE", !42, i64 0}
!42 = !{!"_ZTSNSt12_Vector_baseIPN10ClipperLib4JoinESaIS2_EE12_Vector_implE", !43, i64 0}
!43 = !{!"_ZTSNSt12_Vector_baseIPN10ClipperLib4JoinESaIS2_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!44 = !{!"_ZTSSt6vectorIPN10ClipperLib13IntersectNodeESaIS2_EE", !45, i64 0}
!45 = !{!"_ZTSSt12_Vector_baseIPN10ClipperLib13IntersectNodeESaIS2_EE", !46, i64 0}
!46 = !{!"_ZTSNSt12_Vector_baseIPN10ClipperLib13IntersectNodeESaIS2_EE12_Vector_implE", !47, i64 0}
!47 = !{!"_ZTSNSt12_Vector_baseIPN10ClipperLib13IntersectNodeESaIS2_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!48 = !{!"_ZTSN10ClipperLib8ClipTypeE", !7, i64 0}
!49 = !{!"_ZTSNSt7__cxx114listIxSaIxEEE", !50, i64 0}
!50 = !{!"_ZTSNSt7__cxx1110_List_baseIxSaIxEEE", !51, i64 0}
!51 = !{!"_ZTSNSt7__cxx1110_List_baseIxSaIxEE10_List_implE", !52, i64 0}
!52 = !{!"_ZTSNSt8__detail17_List_node_headerE", !53, i64 0, !54, i64 16}
!53 = !{!"_ZTSNSt8__detail15_List_node_baseE", !6, i64 0, !6, i64 8}
!54 = !{!"long", !7, i64 0}
!55 = !{!"_ZTSN10ClipperLib12PolyFillTypeE", !7, i64 0}
!56 = !{i64 0, i64 8, !25, i64 8, i64 8, !25}
!57 = !{!10, !6, i64 120}
!58 = distinct !{!58, !21}
!59 = !{!60, !60, i64 0}
!60 = !{!"vtable pointer", !8, i64 0}
!61 = !{!10, !12, i64 24}
!62 = distinct !{!62, !21}
!63 = distinct !{!63, !21}
!64 = distinct !{!64, !21}
!65 = !{!10, !6, i64 112}
!66 = !{!10, !6, i64 104}
!67 = !{!10, !12, i64 40}
!68 = !{!69, !18, i64 40}
!69 = !{!"_ZTSN10ClipperLib11ClipperBaseE", !70, i64 8, !71, i64 16, !18, i64 40, !75, i64 48, !18, i64 72, !18, i64 73, !79, i64 80, !6, i64 104, !83, i64 112}
!70 = !{!"_ZTSN9__gnu_cxx17__normal_iteratorIPN10ClipperLib12LocalMinimumESt6vectorIS2_SaIS2_EEEE", !6, i64 0}
!71 = !{!"_ZTSSt6vectorIN10ClipperLib12LocalMinimumESaIS1_EE", !72, i64 0}
!72 = !{!"_ZTSSt12_Vector_baseIN10ClipperLib12LocalMinimumESaIS1_EE", !73, i64 0}
!73 = !{!"_ZTSNSt12_Vector_baseIN10ClipperLib12LocalMinimumESaIS1_EE12_Vector_implE", !74, i64 0}
!74 = !{!"_ZTSNSt12_Vector_baseIN10ClipperLib12LocalMinimumESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!75 = !{!"_ZTSSt6vectorIPN10ClipperLib5TEdgeESaIS2_EE", !76, i64 0}
!76 = !{!"_ZTSSt12_Vector_baseIPN10ClipperLib5TEdgeESaIS2_EE", !77, i64 0}
!77 = !{!"_ZTSNSt12_Vector_baseIPN10ClipperLib5TEdgeESaIS2_EE12_Vector_implE", !78, i64 0}
!78 = !{!"_ZTSNSt12_Vector_baseIPN10ClipperLib5TEdgeESaIS2_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!79 = !{!"_ZTSSt6vectorIPN10ClipperLib6OutRecESaIS2_EE", !80, i64 0}
!80 = !{!"_ZTSSt12_Vector_baseIPN10ClipperLib6OutRecESaIS2_EE", !81, i64 0}
!81 = !{!"_ZTSNSt12_Vector_baseIPN10ClipperLib6OutRecESaIS2_EE12_Vector_implE", !82, i64 0}
!82 = !{!"_ZTSNSt12_Vector_baseIPN10ClipperLib6OutRecESaIS2_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!83 = !{!"_ZTSSt14priority_queueIxSt6vectorIxSaIxEESt4lessIxEE", !84, i64 0, !88, i64 24}
!84 = !{!"_ZTSSt6vectorIxSaIxEE", !85, i64 0}
!85 = !{!"_ZTSSt12_Vector_baseIxSaIxEE", !86, i64 0}
!86 = !{!"_ZTSNSt12_Vector_baseIxSaIxEE12_Vector_implE", !87, i64 0}
!87 = !{!"_ZTSNSt12_Vector_baseIxSaIxEE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!88 = !{!"_ZTSSt4lessIxE"}


; Optimized IR (opt -passes='default<O3>'):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%"struct.std::_List_const_iterator" = type { ptr }
%"class.std::reverse_iterator" = type { %"struct.std::_List_const_iterator" }
%"struct.std::_List_iterator" = type { ptr }
%"class.std::reverse_iterator.46" = type { %"struct.std::_List_iterator" }
%"struct.ClipperLib::IntPoint" = type { i64, i64 }

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZN10ClipperLib11SlopesEqualERKNS_5TEdgeES2_b(ptr noundef nonnull align 8 dereferenceable(136), ptr noundef nonnull align 8 dereferenceable(136), i1 noundef zeroext) local_unnamed_addr #1

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZN10ClipperLib19HorzSegmentsOverlapExxxx(i64 noundef, i64 noundef, i64 noundef, i64 noundef) local_unnamed_addr #3

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

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN10ClipperLib7Clipper17ProcessHorizontalEPNS_5TEdgeE(ptr noundef nonnull align 8 dereferenceable(135) %0, ptr noundef nonnull %1) local_unnamed_addr #1 align 2 {
  %3 = alloca ptr, align 8
  %4 = alloca i32, align 4
  %5 = alloca i64, align 8
  %6 = alloca i64, align 8
  %7 = alloca %"struct.std::_List_const_iterator", align 8
  %8 = alloca %"class.std::reverse_iterator", align 8
  %9 = alloca %"struct.std::_List_const_iterator", align 8
  %10 = alloca %"struct.std::_List_iterator", align 8
  %11 = alloca %"struct.std::_List_const_iterator", align 8
  %12 = alloca %"struct.std::_List_iterator", align 8
  %13 = alloca %"struct.std::_List_const_iterator", align 8
  %14 = alloca %"struct.std::_List_iterator", align 8
  %15 = alloca %"struct.std::_List_const_iterator", align 8
  %16 = alloca %"struct.std::_List_iterator", align 8
  %17 = alloca %"class.std::reverse_iterator.46", align 8
  %18 = alloca %"class.std::reverse_iterator.46", align 8
  %19 = alloca %"class.std::reverse_iterator", align 8
  %20 = alloca %"class.std::reverse_iterator.46", align 8
  %21 = alloca %"class.std::reverse_iterator.46", align 8
  %22 = alloca %"struct.std::_List_const_iterator", align 8
  %23 = alloca %"struct.std::_List_iterator", align 8
  %24 = alloca %"struct.ClipperLib::IntPoint", align 8
  %25 = alloca %"class.std::reverse_iterator.46", align 8
  %26 = alloca %"struct.ClipperLib::IntPoint", align 8
  %27 = alloca %"class.std::reverse_iterator", align 8
  %28 = alloca %"struct.ClipperLib::IntPoint", align 8
  %29 = alloca %"struct.ClipperLib::IntPoint", align 8
  store ptr %1, ptr %3, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %4) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %5) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %6) #4
  %30 = getelementptr inbounds i8, ptr %1, i64 64
  %31 = load i32, ptr %30, align 8, !tbaa !9
  %32 = icmp eq i32 %31, 0
  call void @_ZN10ClipperLib16GetHorzDirectionERNS_5TEdgeERNS_9DirectionERxS4_(ptr noundef nonnull align 8 dereferenceable(136) %1, ptr noundef nonnull align 4 dereferenceable(4) %4, ptr noundef nonnull align 8 dereferenceable(8) %5, ptr noundef nonnull align 8 dereferenceable(8) %6)
  br label %33

33:                                               ; preds = %36, %2
  %.0.in = phi ptr [ %3, %2 ], [ %34, %36 ]
  %.0 = load ptr, ptr %.0.in, align 8, !tbaa !5
  %34 = getelementptr inbounds i8, ptr %.0, i64 96
  %35 = load ptr, ptr %34, align 8, !tbaa !17
  %.not = icmp eq ptr %35, null
  br i1 %.not, label %.critedge.thread, label %36

36:                                               ; preds = %33
  %37 = call noundef zeroext i1 @_ZN10ClipperLib12IsHorizontalERNS_5TEdgeE(ptr noundef nonnull align 8 dereferenceable(136) %35)
  br i1 %37, label %33, label %.critedge, !llvm.loop !18

.critedge:                                        ; preds = %36
  %.pr = load ptr, ptr %34, align 8, !tbaa !17
  %.not113 = icmp eq ptr %.pr, null
  br i1 %.not113, label %.critedge.thread, label %39

.critedge.thread:                                 ; preds = %33, %.critedge
  %38 = call noundef ptr @_ZN10ClipperLib13GetMaximaPairEPNS_5TEdgeE(ptr noundef nonnull %.0)
  br label %39

39:                                               ; preds = %.critedge.thread, %.critedge
  %.0100 = phi ptr [ null, %.critedge ], [ %38, %.critedge.thread ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %7) #4
  call void @_ZNSt20_List_const_iteratorIxEC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %7) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %8) #4
  call void @_ZNSt16reverse_iteratorISt20_List_const_iteratorIxEEC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %8) #4
  %40 = getelementptr inbounds i8, ptr %0, i64 88
  %41 = call noundef i64 @_ZNKSt7__cxx114listIxSaIxEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %40) #4
  %.not114 = icmp eq i64 %41, 0
  br i1 %.not114, label %86, label %42

42:                                               ; preds = %39
  %43 = load i32, ptr %4, align 4, !tbaa !20
  %44 = icmp eq i32 %43, 1
  br i1 %44, label %45, label %68

45:                                               ; preds = %42
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %9) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %10) #4
  %46 = call ptr @_ZNSt7__cxx114listIxSaIxEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %40) #4
  store ptr %46, ptr %10, align 8
  call void @_ZNSt20_List_const_iteratorIxEC2ERKSt14_List_iteratorIxE(ptr noundef nonnull align 8 dereferenceable(8) %9, ptr noundef nonnull align 8 dereferenceable(8) %10) #4
  %47 = load i64, ptr %9, align 8, !tbaa !5
  store i64 %47, ptr %7, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %11) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %12) #4
  %48 = call ptr @_ZNSt7__cxx114listIxSaIxEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %40) #4
  store ptr %48, ptr %12, align 8
  call void @_ZNSt20_List_const_iteratorIxEC2ERKSt14_List_iteratorIxE(ptr noundef nonnull align 8 dereferenceable(8) %11, ptr noundef nonnull align 8 dereferenceable(8) %12) #4
  %49 = call noundef zeroext i1 @_ZStneRKSt20_List_const_iteratorIxES2_(ptr noundef nonnull align 8 dereferenceable(8) %7, ptr noundef nonnull align 8 dereferenceable(8) %11) #4
  br i1 %49, label %.lr.ph154, label %.critedge2

.lr.ph154:                                        ; preds = %45, %54
  %50 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt20_List_const_iteratorIxEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %7) #4
  %51 = load i64, ptr %50, align 8, !tbaa !22
  %52 = load ptr, ptr %3, align 8, !tbaa !5
  %53 = load i64, ptr %52, align 8, !tbaa !23
  %.not116 = icmp sgt i64 %51, %53
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #4
  br i1 %.not116, label %.loopexit147, label %54

54:                                               ; preds = %.lr.ph154
  %55 = call ptr @_ZNSt20_List_const_iteratorIxEppEi(ptr noundef nonnull align 8 dereferenceable(8) %7, i32 noundef 0) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %11) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %12) #4
  %56 = call ptr @_ZNSt7__cxx114listIxSaIxEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %40) #4
  store ptr %56, ptr %12, align 8
  call void @_ZNSt20_List_const_iteratorIxEC2ERKSt14_List_iteratorIxE(ptr noundef nonnull align 8 dereferenceable(8) %11, ptr noundef nonnull align 8 dereferenceable(8) %12) #4
  %57 = call noundef zeroext i1 @_ZStneRKSt20_List_const_iteratorIxES2_(ptr noundef nonnull align 8 dereferenceable(8) %7, ptr noundef nonnull align 8 dereferenceable(8) %11) #4
  br i1 %57, label %.lr.ph154, label %.critedge2, !llvm.loop !24

.critedge2:                                       ; preds = %54, %45
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #4
  br label %.loopexit147

.loopexit147:                                     ; preds = %.lr.ph154, %.critedge2
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %13) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %14) #4
  %58 = call ptr @_ZNSt7__cxx114listIxSaIxEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %40) #4
  store ptr %58, ptr %14, align 8
  call void @_ZNSt20_List_const_iteratorIxEC2ERKSt14_List_iteratorIxE(ptr noundef nonnull align 8 dereferenceable(8) %13, ptr noundef nonnull align 8 dereferenceable(8) %14) #4
  %59 = call noundef zeroext i1 @_ZStneRKSt20_List_const_iteratorIxES2_(ptr noundef nonnull align 8 dereferenceable(8) %7, ptr noundef nonnull align 8 dereferenceable(8) %13) #4
  br i1 %59, label %60, label %.critedge4

60:                                               ; preds = %.loopexit147
  %61 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt20_List_const_iteratorIxEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %7) #4
  %62 = load i64, ptr %61, align 8, !tbaa !22
  %63 = getelementptr inbounds i8, ptr %.0, i64 32
  %64 = load i64, ptr %63, align 8, !tbaa !25
  %.not117 = icmp slt i64 %62, %64
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #4
  br i1 %.not117, label %86, label %65

65:                                               ; preds = %60
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %15) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %16) #4
  %66 = call ptr @_ZNSt7__cxx114listIxSaIxEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %40) #4
  store ptr %66, ptr %16, align 8
  call void @_ZNSt20_List_const_iteratorIxEC2ERKSt14_List_iteratorIxE(ptr noundef nonnull align 8 dereferenceable(8) %15, ptr noundef nonnull align 8 dereferenceable(8) %16) #4
  %67 = load i64, ptr %15, align 8, !tbaa !5
  store i64 %67, ptr %7, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %16) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #4
  br label %86

.critedge4:                                       ; preds = %.loopexit147
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #4
  br label %86

68:                                               ; preds = %42
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %17) #4
  call void @_ZNSt7__cxx114listIxSaIxEE6rbeginEv(ptr dead_on_unwind nonnull writable sret(%"class.std::reverse_iterator.46") align 8 %17, ptr noundef nonnull align 8 dereferenceable(24) %40) #4
  %69 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt16reverse_iteratorISt20_List_const_iteratorIxEEaSISt14_List_iteratorIxEEERS2_RKS_IT_E(ptr noundef nonnull align 8 dereferenceable(8) %8, ptr noundef nonnull align 8 dereferenceable(8) %17) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %17) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %18) #4
  call void @_ZNSt7__cxx114listIxSaIxEE4rendEv(ptr dead_on_unwind nonnull writable sret(%"class.std::reverse_iterator.46") align 8 %18, ptr noundef nonnull align 8 dereferenceable(24) %40) #4
  %70 = call noundef zeroext i1 @_ZStneISt20_List_const_iteratorIxESt14_List_iteratorIxEEbRKSt16reverse_iteratorIT_ERKS4_IT0_E(ptr noundef nonnull align 8 dereferenceable(8) %8, ptr noundef nonnull align 8 dereferenceable(8) %18)
  br i1 %70, label %.lr.ph, label %.critedge6

.lr.ph:                                           ; preds = %68, %76
  %71 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt16reverse_iteratorISt20_List_const_iteratorIxEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %8)
  %72 = load i64, ptr %71, align 8, !tbaa !22
  %73 = load ptr, ptr %3, align 8, !tbaa !5
  %74 = load i64, ptr %73, align 8, !tbaa !23
  %75 = icmp sgt i64 %72, %74
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %18) #4
  br i1 %75, label %76, label %.loopexit148

76:                                               ; preds = %.lr.ph
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %19) #4
  call void @_ZNSt16reverse_iteratorISt20_List_const_iteratorIxEEppEi(ptr dead_on_unwind nonnull writable sret(%"class.std::reverse_iterator") align 8 %19, ptr noundef nonnull align 8 dereferenceable(8) %8, i32 noundef 0)
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %19) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %18) #4
  call void @_ZNSt7__cxx114listIxSaIxEE4rendEv(ptr dead_on_unwind nonnull writable sret(%"class.std::reverse_iterator.46") align 8 %18, ptr noundef nonnull align 8 dereferenceable(24) %40) #4
  %77 = call noundef zeroext i1 @_ZStneISt20_List_const_iteratorIxESt14_List_iteratorIxEEbRKSt16reverse_iteratorIT_ERKS4_IT0_E(ptr noundef nonnull align 8 dereferenceable(8) %8, ptr noundef nonnull align 8 dereferenceable(8) %18)
  br i1 %77, label %.lr.ph, label %.critedge6, !llvm.loop !26

.critedge6:                                       ; preds = %76, %68
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %18) #4
  br label %.loopexit148

.loopexit148:                                     ; preds = %.lr.ph, %.critedge6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %20) #4
  call void @_ZNSt7__cxx114listIxSaIxEE4rendEv(ptr dead_on_unwind nonnull writable sret(%"class.std::reverse_iterator.46") align 8 %20, ptr noundef nonnull align 8 dereferenceable(24) %40) #4
  %78 = call noundef zeroext i1 @_ZStneISt20_List_const_iteratorIxESt14_List_iteratorIxEEbRKSt16reverse_iteratorIT_ERKS4_IT0_E(ptr noundef nonnull align 8 dereferenceable(8) %8, ptr noundef nonnull align 8 dereferenceable(8) %20)
  br i1 %78, label %79, label %.critedge8

79:                                               ; preds = %.loopexit148
  %80 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt16reverse_iteratorISt20_List_const_iteratorIxEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %8)
  %81 = load i64, ptr %80, align 8, !tbaa !22
  %82 = getelementptr inbounds i8, ptr %.0, i64 32
  %83 = load i64, ptr %82, align 8, !tbaa !25
  %.not115 = icmp sgt i64 %81, %83
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %20) #4
  br i1 %.not115, label %86, label %84

84:                                               ; preds = %79
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %21) #4
  call void @_ZNSt7__cxx114listIxSaIxEE4rendEv(ptr dead_on_unwind nonnull writable sret(%"class.std::reverse_iterator.46") align 8 %21, ptr noundef nonnull align 8 dereferenceable(24) %40) #4
  %85 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt16reverse_iteratorISt20_List_const_iteratorIxEEaSISt14_List_iteratorIxEEERS2_RKS_IT_E(ptr noundef nonnull align 8 dereferenceable(8) %8, ptr noundef nonnull align 8 dereferenceable(8) %21) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %21) #4
  br label %86

.critedge8:                                       ; preds = %.loopexit148
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %20) #4
  br label %86

86:                                               ; preds = %.critedge4, %65, %60, %.critedge8, %84, %79, %39
  %87 = getelementptr inbounds i8, ptr %0, i64 112
  br label %88

88:                                               ; preds = %243, %86
  %.0101 = phi ptr [ null, %86 ], [ %.1.lcssa, %243 ]
  %89 = load ptr, ptr %3, align 8, !tbaa !5
  %90 = icmp ne ptr %89, %.0
  %91 = load i32, ptr %4, align 4, !tbaa !20
  %92 = call noundef ptr @_ZN10ClipperLib12GetNextInAELEPNS_5TEdgeENS_9DirectionE(ptr noundef %89, i32 noundef %91)
  %.not118161 = icmp eq ptr %92, null
  br i1 %.not118161, label %._crit_edge166, label %.lr.ph165

.lr.ph165:                                        ; preds = %88, %219
  %.1163 = phi ptr [ %.2, %219 ], [ %.0101, %88 ]
  %.0102162 = phi ptr [ %221, %219 ], [ %92, %88 ]
  %93 = call noundef i64 @_ZNKSt7__cxx114listIxSaIxEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %40) #4
  %.not119 = icmp eq i64 %93, 0
  br i1 %.not119, label %.loopexit, label %94

94:                                               ; preds = %.lr.ph165
  %95 = load i32, ptr %4, align 4, !tbaa !20
  %96 = icmp eq i32 %95, 1
  br i1 %96, label %.preheader, label %.preheader145

.preheader145:                                    ; preds = %94
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %25) #4
  call void @_ZNSt7__cxx114listIxSaIxEE4rendEv(ptr dead_on_unwind nonnull writable sret(%"class.std::reverse_iterator.46") align 8 %25, ptr noundef nonnull align 8 dereferenceable(24) %40) #4
  %97 = call noundef zeroext i1 @_ZStneISt20_List_const_iteratorIxESt14_List_iteratorIxEEbRKSt16reverse_iteratorIT_ERKS4_IT0_E(ptr noundef nonnull align 8 dereferenceable(8) %8, ptr noundef nonnull align 8 dereferenceable(8) %25)
  br i1 %97, label %.lr.ph155, label %.critedge12

.lr.ph155:                                        ; preds = %.preheader145
  %98 = getelementptr inbounds i8, ptr %.0102162, i64 16
  br label %123

.preheader:                                       ; preds = %94
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %22) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %23) #4
  %99 = call ptr @_ZNSt7__cxx114listIxSaIxEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %40) #4
  store ptr %99, ptr %23, align 8
  call void @_ZNSt20_List_const_iteratorIxEC2ERKSt14_List_iteratorIxE(ptr noundef nonnull align 8 dereferenceable(8) %22, ptr noundef nonnull align 8 dereferenceable(8) %23) #4
  %100 = call noundef zeroext i1 @_ZStneRKSt20_List_const_iteratorIxES2_(ptr noundef nonnull align 8 dereferenceable(8) %7, ptr noundef nonnull align 8 dereferenceable(8) %22) #4
  br i1 %100, label %.lr.ph156, label %.critedge10

.lr.ph156:                                        ; preds = %.preheader
  %101 = getelementptr inbounds i8, ptr %.0102162, i64 16
  br label %102

102:                                              ; preds = %.lr.ph156, %119
  %103 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt20_List_const_iteratorIxEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %7) #4
  %104 = load i64, ptr %103, align 8, !tbaa !22
  %105 = load i64, ptr %101, align 8, !tbaa !27
  %106 = icmp slt i64 %104, %105
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %23) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %22) #4
  br i1 %106, label %107, label %.loopexit

107:                                              ; preds = %102
  %108 = load ptr, ptr %3, align 8, !tbaa !5
  %109 = getelementptr inbounds i8, ptr %108, i64 76
  %110 = load i32, ptr %109, align 4, !tbaa !28
  %111 = icmp slt i32 %110, 0
  %brmerge = select i1 %111, i1 true, i1 %32
  br i1 %brmerge, label %119, label %112

112:                                              ; preds = %107
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %24) #4
  %113 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt20_List_const_iteratorIxEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %7) #4
  %114 = load i64, ptr %113, align 8, !tbaa !22
  %115 = load ptr, ptr %3, align 8, !tbaa !5
  %116 = getelementptr inbounds i8, ptr %115, i64 8
  %117 = load i64, ptr %116, align 8, !tbaa !29
  call void @_ZN10ClipperLib8IntPointC2Exx(ptr noundef nonnull align 8 dereferenceable(16) %24, i64 noundef %114, i64 noundef %117)
  %118 = call noundef ptr @_ZN10ClipperLib7Clipper8AddOutPtEPNS_5TEdgeERKNS_8IntPointE(ptr noundef nonnull align 8 dereferenceable(135) %0, ptr noundef nonnull %108, ptr noundef nonnull align 8 dereferenceable(16) %24)
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %24) #4
  br label %119

119:                                              ; preds = %107, %112
  %120 = call ptr @_ZNSt20_List_const_iteratorIxEppEi(ptr noundef nonnull align 8 dereferenceable(8) %7, i32 noundef 0) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %22) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %23) #4
  %121 = call ptr @_ZNSt7__cxx114listIxSaIxEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %40) #4
  store ptr %121, ptr %23, align 8
  call void @_ZNSt20_List_const_iteratorIxEC2ERKSt14_List_iteratorIxE(ptr noundef nonnull align 8 dereferenceable(8) %22, ptr noundef nonnull align 8 dereferenceable(8) %23) #4
  %122 = call noundef zeroext i1 @_ZStneRKSt20_List_const_iteratorIxES2_(ptr noundef nonnull align 8 dereferenceable(8) %7, ptr noundef nonnull align 8 dereferenceable(8) %22) #4
  br i1 %122, label %102, label %.critedge10, !llvm.loop !30

.critedge10:                                      ; preds = %119, %.preheader
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %23) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %22) #4
  br label %.loopexit

123:                                              ; preds = %.lr.ph155, %140
  %124 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt16reverse_iteratorISt20_List_const_iteratorIxEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %8)
  %125 = load i64, ptr %124, align 8, !tbaa !22
  %126 = load i64, ptr %98, align 8, !tbaa !27
  %127 = icmp sgt i64 %125, %126
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %25) #4
  br i1 %127, label %128, label %.loopexit

128:                                              ; preds = %123
  %129 = load ptr, ptr %3, align 8, !tbaa !5
  %130 = getelementptr inbounds i8, ptr %129, i64 76
  %131 = load i32, ptr %130, align 4, !tbaa !28
  %132 = icmp slt i32 %131, 0
  %brmerge131 = select i1 %132, i1 true, i1 %32
  br i1 %brmerge131, label %140, label %133

133:                                              ; preds = %128
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %26) #4
  %134 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt16reverse_iteratorISt20_List_const_iteratorIxEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %8)
  %135 = load i64, ptr %134, align 8, !tbaa !22
  %136 = load ptr, ptr %3, align 8, !tbaa !5
  %137 = getelementptr inbounds i8, ptr %136, i64 8
  %138 = load i64, ptr %137, align 8, !tbaa !29
  call void @_ZN10ClipperLib8IntPointC2Exx(ptr noundef nonnull align 8 dereferenceable(16) %26, i64 noundef %135, i64 noundef %138)
  %139 = call noundef ptr @_ZN10ClipperLib7Clipper8AddOutPtEPNS_5TEdgeERKNS_8IntPointE(ptr noundef nonnull align 8 dereferenceable(135) %0, ptr noundef nonnull %129, ptr noundef nonnull align 8 dereferenceable(16) %26)
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %26) #4
  br label %140

140:                                              ; preds = %128, %133
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %27) #4
  call void @_ZNSt16reverse_iteratorISt20_List_const_iteratorIxEEppEi(ptr dead_on_unwind nonnull writable sret(%"class.std::reverse_iterator") align 8 %27, ptr noundef nonnull align 8 dereferenceable(8) %8, i32 noundef 0)
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %27) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %25) #4
  call void @_ZNSt7__cxx114listIxSaIxEE4rendEv(ptr dead_on_unwind nonnull writable sret(%"class.std::reverse_iterator.46") align 8 %25, ptr noundef nonnull align 8 dereferenceable(24) %40) #4
  %141 = call noundef zeroext i1 @_ZStneISt20_List_const_iteratorIxESt14_List_iteratorIxEEbRKSt16reverse_iteratorIT_ERKS4_IT0_E(ptr noundef nonnull align 8 dereferenceable(8) %8, ptr noundef nonnull align 8 dereferenceable(8) %25)
  br i1 %141, label %123, label %.critedge12, !llvm.loop !31

.critedge12:                                      ; preds = %140, %.preheader145
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %25) #4
  br label %.loopexit

.loopexit:                                        ; preds = %123, %102, %.critedge10, %.critedge12, %.lr.ph165
  %142 = load i32, ptr %4, align 4, !tbaa !20
  %.phi.trans.insert = getelementptr inbounds i8, ptr %.0102162, i64 16
  %.pre = load i64, ptr %.phi.trans.insert, align 8, !tbaa !27
  switch i32 %142, label %.thread [
    i32 1, label %143
    i32 0, label %146
  ]

143:                                              ; preds = %.loopexit
  %144 = load i64, ptr %6, align 8, !tbaa !22
  %145 = icmp sgt i64 %.pre, %144
  br i1 %145, label %._crit_edge166, label %.thread

146:                                              ; preds = %.loopexit
  %147 = load i64, ptr %5, align 8, !tbaa !22
  %148 = icmp slt i64 %.pre, %147
  br i1 %148, label %._crit_edge166, label %.thread

.thread:                                          ; preds = %.loopexit, %143, %146
  %149 = getelementptr inbounds i8, ptr %.0102162, i64 16
  %150 = load ptr, ptr %3, align 8, !tbaa !5
  %151 = getelementptr inbounds i8, ptr %150, i64 32
  %152 = load i64, ptr %151, align 8, !tbaa !25
  %153 = icmp eq i64 %.pre, %152
  br i1 %153, label %154, label %163

154:                                              ; preds = %.thread
  %155 = getelementptr inbounds i8, ptr %150, i64 96
  %156 = load ptr, ptr %155, align 8, !tbaa !17
  %.not120 = icmp eq ptr %156, null
  br i1 %.not120, label %163, label %157

157:                                              ; preds = %154
  %158 = getelementptr inbounds i8, ptr %.0102162, i64 48
  %159 = load double, ptr %158, align 8, !tbaa !32
  %160 = getelementptr inbounds i8, ptr %156, i64 48
  %161 = load double, ptr %160, align 8, !tbaa !32
  %162 = fcmp olt double %159, %161
  br i1 %162, label %._crit_edge166, label %163

163:                                              ; preds = %157, %154, %.thread
  %164 = getelementptr inbounds i8, ptr %150, i64 76
  %165 = load i32, ptr %164, align 4, !tbaa !28
  %166 = icmp slt i32 %165, 0
  %brmerge133 = select i1 %166, i1 true, i1 %32
  br i1 %brmerge133, label %186, label %167

167:                                              ; preds = %163
  %168 = call noundef ptr @_ZN10ClipperLib7Clipper8AddOutPtEPNS_5TEdgeERKNS_8IntPointE(ptr noundef nonnull align 8 dereferenceable(135) %0, ptr noundef nonnull %150, ptr noundef nonnull align 8 dereferenceable(16) %149)
  %.0103157 = load ptr, ptr %87, align 8, !tbaa !5
  %.not121158 = icmp eq ptr %.0103157, null
  br i1 %.not121158, label %._crit_edge, label %.lr.ph160

.lr.ph160:                                        ; preds = %167, %183
  %.0103159 = phi ptr [ %.0103, %183 ], [ %.0103157, %167 ]
  %169 = getelementptr inbounds i8, ptr %.0103159, i64 76
  %170 = load i32, ptr %169, align 4, !tbaa !28
  %171 = icmp sgt i32 %170, -1
  br i1 %171, label %172, label %183

172:                                              ; preds = %.lr.ph160
  %173 = load ptr, ptr %3, align 8, !tbaa !5
  %174 = load i64, ptr %173, align 8, !tbaa !23
  %175 = getelementptr inbounds i8, ptr %173, i64 32
  %176 = load i64, ptr %175, align 8, !tbaa !25
  %177 = load i64, ptr %.0103159, align 8, !tbaa !23
  %178 = getelementptr inbounds i8, ptr %.0103159, i64 32
  %179 = load i64, ptr %178, align 8, !tbaa !25
  %180 = call noundef zeroext i1 @_ZN10ClipperLib19HorzSegmentsOverlapExxxx(i64 noundef %174, i64 noundef %176, i64 noundef %177, i64 noundef %179)
  br i1 %180, label %181, label %183

181:                                              ; preds = %172
  %182 = call noundef ptr @_ZN10ClipperLib7Clipper12GetLastOutPtEPNS_5TEdgeE(ptr noundef nonnull align 8 dereferenceable(135) %0, ptr noundef nonnull %.0103159)
  %.sroa.050.0.copyload = load i64, ptr %178, align 8, !tbaa !22
  %.sroa.251.0..sroa_idx = getelementptr inbounds i8, ptr %.0103159, i64 40
  %.sroa.251.0.copyload = load i64, ptr %.sroa.251.0..sroa_idx, align 8, !tbaa !22
  call void @_ZN10ClipperLib7Clipper7AddJoinEPNS_5OutPtES2_NS_8IntPointE(ptr noundef nonnull align 8 dereferenceable(135) %0, ptr noundef %182, ptr noundef %168, i64 %.sroa.050.0.copyload, i64 %.sroa.251.0.copyload)
  br label %183

183:                                              ; preds = %181, %172, %.lr.ph160
  %184 = getelementptr inbounds i8, ptr %.0103159, i64 120
  %.0103 = load ptr, ptr %184, align 8, !tbaa !5
  %.not121 = icmp eq ptr %.0103, null
  br i1 %.not121, label %._crit_edge, label %.lr.ph160, !llvm.loop !33

._crit_edge:                                      ; preds = %183, %167
  %185 = load ptr, ptr %3, align 8, !tbaa !5
  %.sroa.048.0.copyload = load i64, ptr %185, align 8, !tbaa !22
  %.sroa.249.0..sroa_idx = getelementptr inbounds i8, ptr %185, i64 8
  %.sroa.249.0.copyload = load i64, ptr %.sroa.249.0..sroa_idx, align 8, !tbaa !22
  call void @_ZN10ClipperLib7Clipper12AddGhostJoinEPNS_5OutPtENS_8IntPointE(ptr noundef nonnull align 8 dereferenceable(135) %0, ptr noundef %168, i64 %.sroa.048.0.copyload, i64 %.sroa.249.0.copyload)
  br label %186

186:                                              ; preds = %163, %._crit_edge
  %.2 = phi ptr [ %168, %._crit_edge ], [ %.1163, %163 ]
  %187 = icmp ne ptr %.0102162, %.0100
  %brmerge136 = or i1 %90, %187
  br i1 %brmerge136, label %204, label %188

188:                                              ; preds = %186
  %189 = load ptr, ptr %3, align 8, !tbaa !5
  %190 = getelementptr inbounds i8, ptr %189, i64 76
  %191 = load i32, ptr %190, align 4, !tbaa !28
  %192 = icmp sgt i32 %191, -1
  br i1 %192, label %193, label %.thread142

193:                                              ; preds = %188
  %194 = getelementptr inbounds i8, ptr %189, i64 32
  call void @_ZN10ClipperLib7Clipper15AddLocalMaxPolyEPNS_5TEdgeES2_RKNS_8IntPointE(ptr noundef nonnull align 8 dereferenceable(135) %0, ptr noundef nonnull %189, ptr noundef %.0100, ptr noundef nonnull align 8 dereferenceable(16) %194)
  %.pre184 = load ptr, ptr %3, align 8, !tbaa !5
  br label %.thread142

.thread142:                                       ; preds = %188, %193
  %195 = phi ptr [ %189, %188 ], [ %.pre184, %193 ]
  %196 = load ptr, ptr %0, align 8, !tbaa !34
  %197 = getelementptr i8, ptr %196, i64 -24
  %198 = load i64, ptr %197, align 8
  %199 = getelementptr inbounds i8, ptr %0, i64 %198
  call void @_ZN10ClipperLib11ClipperBase13DeleteFromAELEPNS_5TEdgeE(ptr noundef nonnull align 8 dereferenceable(144) %199, ptr noundef %195)
  %200 = load ptr, ptr %0, align 8, !tbaa !34
  %201 = getelementptr i8, ptr %200, i64 -24
  %202 = load i64, ptr %201, align 8
  %203 = getelementptr inbounds i8, ptr %0, i64 %202
  call void @_ZN10ClipperLib11ClipperBase13DeleteFromAELEPNS_5TEdgeE(ptr noundef nonnull align 8 dereferenceable(144) %203, ptr noundef %.0100)
  br label %383

204:                                              ; preds = %186
  %205 = load i32, ptr %4, align 4, !tbaa !20
  %206 = icmp eq i32 %205, 1
  br i1 %206, label %207, label %213

207:                                              ; preds = %204
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %28) #4
  %208 = load i64, ptr %149, align 8, !tbaa !27
  %209 = load ptr, ptr %3, align 8, !tbaa !5
  %210 = getelementptr inbounds i8, ptr %209, i64 24
  %211 = load i64, ptr %210, align 8, !tbaa !36
  call void @_ZN10ClipperLib8IntPointC2Exx(ptr noundef nonnull align 8 dereferenceable(16) %28, i64 noundef %208, i64 noundef %211)
  %212 = load ptr, ptr %3, align 8, !tbaa !5
  call void @_ZN10ClipperLib7Clipper14IntersectEdgesEPNS_5TEdgeES2_RNS_8IntPointE(ptr noundef nonnull align 8 dereferenceable(135) %0, ptr noundef %212, ptr noundef nonnull %.0102162, ptr noundef nonnull align 8 dereferenceable(16) %28)
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %28) #4
  br label %219

213:                                              ; preds = %204
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %29) #4
  %214 = load i64, ptr %149, align 8, !tbaa !27
  %215 = load ptr, ptr %3, align 8, !tbaa !5
  %216 = getelementptr inbounds i8, ptr %215, i64 24
  %217 = load i64, ptr %216, align 8, !tbaa !36
  call void @_ZN10ClipperLib8IntPointC2Exx(ptr noundef nonnull align 8 dereferenceable(16) %29, i64 noundef %214, i64 noundef %217)
  %218 = load ptr, ptr %3, align 8, !tbaa !5
  call void @_ZN10ClipperLib7Clipper14IntersectEdgesEPNS_5TEdgeES2_RNS_8IntPointE(ptr noundef nonnull align 8 dereferenceable(135) %0, ptr noundef nonnull %.0102162, ptr noundef %218, ptr noundef nonnull align 8 dereferenceable(16) %29)
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %29) #4
  br label %219

219:                                              ; preds = %213, %207
  %220 = load i32, ptr %4, align 4, !tbaa !20
  %221 = call noundef ptr @_ZN10ClipperLib12GetNextInAELEPNS_5TEdgeENS_9DirectionE(ptr noundef nonnull %.0102162, i32 noundef %220)
  %222 = load ptr, ptr %0, align 8, !tbaa !34
  %223 = getelementptr i8, ptr %222, i64 -24
  %224 = load i64, ptr %223, align 8
  %225 = getelementptr inbounds i8, ptr %0, i64 %224
  %226 = load ptr, ptr %3, align 8, !tbaa !5
  call void @_ZN10ClipperLib11ClipperBase18SwapPositionsInAELEPNS_5TEdgeES2_(ptr noundef nonnull align 8 dereferenceable(144) %225, ptr noundef %226, ptr noundef nonnull %.0102162)
  %.not118 = icmp eq ptr %221, null
  br i1 %.not118, label %._crit_edge166, label %.lr.ph165, !llvm.loop !37

._crit_edge166:                                   ; preds = %219, %146, %143, %157, %88
  %.1.lcssa = phi ptr [ %.0101, %88 ], [ %.1163, %157 ], [ %.1163, %143 ], [ %.1163, %146 ], [ %.2, %219 ]
  %227 = load ptr, ptr %3, align 8, !tbaa !5
  %228 = getelementptr inbounds i8, ptr %227, i64 96
  %229 = load ptr, ptr %228, align 8, !tbaa !17
  %.not122 = icmp eq ptr %229, null
  br i1 %.not122, label %split, label %230

230:                                              ; preds = %._crit_edge166
  %231 = call noundef zeroext i1 @_ZN10ClipperLib12IsHorizontalERNS_5TEdgeE(ptr noundef nonnull align 8 dereferenceable(136) %229)
  br i1 %231, label %232, label %._crit_edge186

._crit_edge186:                                   ; preds = %230
  %.pre187 = load ptr, ptr %3, align 8, !tbaa !5
  br label %split

232:                                              ; preds = %230
  %233 = load ptr, ptr %0, align 8, !tbaa !34
  %234 = getelementptr i8, ptr %233, i64 -24
  %235 = load i64, ptr %234, align 8
  %236 = getelementptr inbounds i8, ptr %0, i64 %235
  call void @_ZN10ClipperLib11ClipperBase17UpdateEdgeIntoAELERPNS_5TEdgeE(ptr noundef nonnull align 8 dereferenceable(144) %236, ptr noundef nonnull align 8 dereferenceable(8) %3)
  %237 = load ptr, ptr %3, align 8, !tbaa !5
  %238 = getelementptr inbounds i8, ptr %237, i64 76
  %239 = load i32, ptr %238, align 4, !tbaa !28
  %240 = icmp sgt i32 %239, -1
  br i1 %240, label %241, label %243

241:                                              ; preds = %232
  %242 = call noundef ptr @_ZN10ClipperLib7Clipper8AddOutPtEPNS_5TEdgeERKNS_8IntPointE(ptr noundef nonnull align 8 dereferenceable(135) %0, ptr noundef nonnull %237, ptr noundef nonnull align 8 dereferenceable(16) %237)
  %.pre185 = load ptr, ptr %3, align 8, !tbaa !5
  br label %243

243:                                              ; preds = %232, %241
  %244 = phi ptr [ %237, %232 ], [ %.pre185, %241 ]
  call void @_ZN10ClipperLib16GetHorzDirectionERNS_5TEdgeERNS_9DirectionERxS4_(ptr noundef nonnull align 8 dereferenceable(136) %244, ptr noundef nonnull align 4 dereferenceable(4) %4, ptr noundef nonnull align 8 dereferenceable(8) %5, ptr noundef nonnull align 8 dereferenceable(8) %6)
  br label %88

split:                                            ; preds = %._crit_edge166, %._crit_edge186
  %245 = phi ptr [ %.pre187, %._crit_edge186 ], [ %227, %._crit_edge166 ]
  %246 = getelementptr inbounds i8, ptr %245, i64 76
  %247 = load i32, ptr %246, align 4, !tbaa !28
  %248 = icmp slt i32 %247, 0
  %249 = icmp ne ptr %.1.lcssa, null
  %or.cond = select i1 %248, i1 true, i1 %249
  br i1 %or.cond, label %270, label %250

250:                                              ; preds = %split
  %251 = call noundef ptr @_ZN10ClipperLib7Clipper12GetLastOutPtEPNS_5TEdgeE(ptr noundef nonnull align 8 dereferenceable(135) %0, ptr noundef nonnull %245)
  %.0105173 = load ptr, ptr %87, align 8, !tbaa !5
  %.not123174 = icmp eq ptr %.0105173, null
  br i1 %.not123174, label %._crit_edge178, label %.lr.ph177

.lr.ph177:                                        ; preds = %250, %266
  %.0105175 = phi ptr [ %.0105, %266 ], [ %.0105173, %250 ]
  %252 = getelementptr inbounds i8, ptr %.0105175, i64 76
  %253 = load i32, ptr %252, align 4, !tbaa !28
  %254 = icmp sgt i32 %253, -1
  br i1 %254, label %255, label %266

255:                                              ; preds = %.lr.ph177
  %256 = load ptr, ptr %3, align 8, !tbaa !5
  %257 = load i64, ptr %256, align 8, !tbaa !23
  %258 = getelementptr inbounds i8, ptr %256, i64 32
  %259 = load i64, ptr %258, align 8, !tbaa !25
  %260 = load i64, ptr %.0105175, align 8, !tbaa !23
  %261 = getelementptr inbounds i8, ptr %.0105175, i64 32
  %262 = load i64, ptr %261, align 8, !tbaa !25
  %263 = call noundef zeroext i1 @_ZN10ClipperLib19HorzSegmentsOverlapExxxx(i64 noundef %257, i64 noundef %259, i64 noundef %260, i64 noundef %262)
  br i1 %263, label %264, label %266

264:                                              ; preds = %255
  %265 = call noundef ptr @_ZN10ClipperLib7Clipper12GetLastOutPtEPNS_5TEdgeE(ptr noundef nonnull align 8 dereferenceable(135) %0, ptr noundef nonnull %.0105175)
  %.sroa.037.0.copyload = load i64, ptr %261, align 8, !tbaa !22
  %.sroa.238.0..sroa_idx = getelementptr inbounds i8, ptr %.0105175, i64 40
  %.sroa.238.0.copyload = load i64, ptr %.sroa.238.0..sroa_idx, align 8, !tbaa !22
  call void @_ZN10ClipperLib7Clipper7AddJoinEPNS_5OutPtES2_NS_8IntPointE(ptr noundef nonnull align 8 dereferenceable(135) %0, ptr noundef %265, ptr noundef %251, i64 %.sroa.037.0.copyload, i64 %.sroa.238.0.copyload)
  br label %266

266:                                              ; preds = %264, %255, %.lr.ph177
  %267 = getelementptr inbounds i8, ptr %.0105175, i64 120
  %.0105 = load ptr, ptr %267, align 8, !tbaa !5
  %.not123 = icmp eq ptr %.0105, null
  br i1 %.not123, label %._crit_edge178, label %.lr.ph177, !llvm.loop !38

._crit_edge178:                                   ; preds = %266, %250
  %268 = load ptr, ptr %3, align 8, !tbaa !5
  %269 = getelementptr inbounds i8, ptr %268, i64 32
  %.sroa.035.0.copyload = load i64, ptr %269, align 8, !tbaa !22
  %.sroa.236.0..sroa_idx = getelementptr inbounds i8, ptr %268, i64 40
  %.sroa.236.0.copyload = load i64, ptr %.sroa.236.0..sroa_idx, align 8, !tbaa !22
  call void @_ZN10ClipperLib7Clipper12AddGhostJoinEPNS_5OutPtENS_8IntPointE(ptr noundef nonnull align 8 dereferenceable(135) %0, ptr noundef %251, i64 %.sroa.035.0.copyload, i64 %.sroa.236.0.copyload)
  %.pre188 = load ptr, ptr %3, align 8, !tbaa !5
  br label %270

270:                                              ; preds = %._crit_edge178, %split
  %271 = phi ptr [ %.pre188, %._crit_edge178 ], [ %245, %split ]
  %272 = getelementptr inbounds i8, ptr %271, i64 96
  %273 = load ptr, ptr %272, align 8, !tbaa !17
  %.not124 = icmp eq ptr %273, null
  %274 = getelementptr inbounds i8, ptr %271, i64 76
  %275 = load i32, ptr %274, align 4, !tbaa !28
  %276 = icmp sgt i32 %275, -1
  br i1 %.not124, label %373, label %277

277:                                              ; preds = %270
  br i1 %276, label %278, label %368

278:                                              ; preds = %277
  %279 = getelementptr inbounds i8, ptr %271, i64 32
  %280 = call noundef ptr @_ZN10ClipperLib7Clipper8AddOutPtEPNS_5TEdgeERKNS_8IntPointE(ptr noundef nonnull align 8 dereferenceable(135) %0, ptr noundef nonnull %271, ptr noundef nonnull align 8 dereferenceable(16) %279)
  %281 = load ptr, ptr %0, align 8, !tbaa !34
  %282 = getelementptr i8, ptr %281, i64 -24
  %283 = load i64, ptr %282, align 8
  %284 = getelementptr inbounds i8, ptr %0, i64 %283
  call void @_ZN10ClipperLib11ClipperBase17UpdateEdgeIntoAELERPNS_5TEdgeE(ptr noundef nonnull align 8 dereferenceable(144) %284, ptr noundef nonnull align 8 dereferenceable(8) %3)
  %285 = load ptr, ptr %3, align 8, !tbaa !5
  %286 = getelementptr inbounds i8, ptr %285, i64 64
  %287 = load i32, ptr %286, align 8, !tbaa !9
  %288 = icmp eq i32 %287, 0
  br i1 %288, label %383, label %289

289:                                              ; preds = %278
  %290 = getelementptr inbounds i8, ptr %285, i64 112
  %291 = load ptr, ptr %290, align 8, !tbaa !39
  %292 = getelementptr inbounds i8, ptr %285, i64 104
  %293 = load ptr, ptr %292, align 8, !tbaa !40
  %.not125 = icmp eq ptr %291, null
  br i1 %.not125, label %330, label %294

294:                                              ; preds = %289
  %295 = getelementptr inbounds i8, ptr %291, i64 16
  %296 = load i64, ptr %295, align 8, !tbaa !27
  %297 = load i64, ptr %285, align 8, !tbaa !23
  %298 = icmp eq i64 %296, %297
  br i1 %298, label %299, label %330

299:                                              ; preds = %294
  %300 = getelementptr inbounds i8, ptr %291, i64 24
  %301 = load i64, ptr %300, align 8, !tbaa !36
  %302 = getelementptr inbounds i8, ptr %285, i64 8
  %303 = load i64, ptr %302, align 8, !tbaa !29
  %304 = icmp eq i64 %301, %303
  br i1 %304, label %305, label %330

305:                                              ; preds = %299
  %306 = getelementptr inbounds i8, ptr %291, i64 64
  %307 = load i32, ptr %306, align 8, !tbaa !9
  %.not126 = icmp eq i32 %307, 0
  br i1 %.not126, label %330, label %308

308:                                              ; preds = %305
  %309 = getelementptr inbounds i8, ptr %291, i64 76
  %310 = load i32, ptr %309, align 4, !tbaa !28
  %311 = icmp sgt i32 %310, -1
  br i1 %311, label %312, label %330

312:                                              ; preds = %308
  %313 = getelementptr inbounds i8, ptr %291, i64 40
  %314 = load i64, ptr %313, align 8, !tbaa !41
  %315 = icmp sgt i64 %301, %314
  br i1 %315, label %316, label %330

316:                                              ; preds = %312
  %317 = load ptr, ptr %0, align 8, !tbaa !34
  %318 = getelementptr i8, ptr %317, i64 -24
  %319 = load i64, ptr %318, align 8
  %320 = getelementptr inbounds i8, ptr %0, i64 %319
  %321 = getelementptr inbounds i8, ptr %320, i64 40
  %322 = load i8, ptr %321, align 8, !tbaa !42, !range !64, !noundef !65
  %323 = trunc nuw i8 %322 to i1
  %324 = call noundef zeroext i1 @_ZN10ClipperLib11SlopesEqualERKNS_5TEdgeES2_b(ptr noundef nonnull align 8 dereferenceable(136) %285, ptr noundef nonnull align 8 dereferenceable(136) %291, i1 noundef zeroext %323)
  br i1 %324, label %325, label %330

325:                                              ; preds = %316
  %326 = load ptr, ptr %3, align 8, !tbaa !5
  %327 = call noundef ptr @_ZN10ClipperLib7Clipper8AddOutPtEPNS_5TEdgeERKNS_8IntPointE(ptr noundef nonnull align 8 dereferenceable(135) %0, ptr noundef nonnull %291, ptr noundef nonnull align 8 dereferenceable(16) %326)
  %328 = load ptr, ptr %3, align 8, !tbaa !5
  %329 = getelementptr inbounds i8, ptr %328, i64 32
  %.sroa.014.0.copyload = load i64, ptr %329, align 8, !tbaa !22
  %.sroa.215.0..sroa_idx = getelementptr inbounds i8, ptr %328, i64 40
  %.sroa.215.0.copyload = load i64, ptr %.sroa.215.0..sroa_idx, align 8, !tbaa !22
  call void @_ZN10ClipperLib7Clipper7AddJoinEPNS_5OutPtES2_NS_8IntPointE(ptr noundef nonnull align 8 dereferenceable(135) %0, ptr noundef %280, ptr noundef %327, i64 %.sroa.014.0.copyload, i64 %.sroa.215.0.copyload)
  br label %383

330:                                              ; preds = %316, %312, %308, %305, %299, %294, %289
  %.not127 = icmp eq ptr %293, null
  br i1 %.not127, label %383, label %331

331:                                              ; preds = %330
  %332 = getelementptr inbounds i8, ptr %293, i64 16
  %333 = load i64, ptr %332, align 8, !tbaa !27
  %334 = load ptr, ptr %3, align 8, !tbaa !5
  %335 = load i64, ptr %334, align 8, !tbaa !23
  %336 = icmp eq i64 %333, %335
  br i1 %336, label %337, label %383

337:                                              ; preds = %331
  %338 = getelementptr inbounds i8, ptr %293, i64 24
  %339 = load i64, ptr %338, align 8, !tbaa !36
  %340 = getelementptr inbounds i8, ptr %334, i64 8
  %341 = load i64, ptr %340, align 8, !tbaa !29
  %342 = icmp eq i64 %339, %341
  br i1 %342, label %343, label %383

343:                                              ; preds = %337
  %344 = getelementptr inbounds i8, ptr %293, i64 64
  %345 = load i32, ptr %344, align 8, !tbaa !9
  %.not128 = icmp eq i32 %345, 0
  br i1 %.not128, label %383, label %346

346:                                              ; preds = %343
  %347 = getelementptr inbounds i8, ptr %293, i64 76
  %348 = load i32, ptr %347, align 4, !tbaa !28
  %349 = icmp sgt i32 %348, -1
  br i1 %349, label %350, label %383

350:                                              ; preds = %346
  %351 = getelementptr inbounds i8, ptr %293, i64 40
  %352 = load i64, ptr %351, align 8, !tbaa !41
  %353 = icmp sgt i64 %339, %352
  br i1 %353, label %354, label %383

354:                                              ; preds = %350
  %355 = load ptr, ptr %0, align 8, !tbaa !34
  %356 = getelementptr i8, ptr %355, i64 -24
  %357 = load i64, ptr %356, align 8
  %358 = getelementptr inbounds i8, ptr %0, i64 %357
  %359 = getelementptr inbounds i8, ptr %358, i64 40
  %360 = load i8, ptr %359, align 8, !tbaa !42, !range !64, !noundef !65
  %361 = trunc nuw i8 %360 to i1
  %362 = call noundef zeroext i1 @_ZN10ClipperLib11SlopesEqualERKNS_5TEdgeES2_b(ptr noundef nonnull align 8 dereferenceable(136) %334, ptr noundef nonnull align 8 dereferenceable(136) %293, i1 noundef zeroext %361)
  br i1 %362, label %363, label %383

363:                                              ; preds = %354
  %364 = load ptr, ptr %3, align 8, !tbaa !5
  %365 = call noundef ptr @_ZN10ClipperLib7Clipper8AddOutPtEPNS_5TEdgeERKNS_8IntPointE(ptr noundef nonnull align 8 dereferenceable(135) %0, ptr noundef nonnull %293, ptr noundef nonnull align 8 dereferenceable(16) %364)
  %366 = load ptr, ptr %3, align 8, !tbaa !5
  %367 = getelementptr inbounds i8, ptr %366, i64 32
  %.sroa.0.0.copyload = load i64, ptr %367, align 8, !tbaa !22
  %.sroa.2.0..sroa_idx = getelementptr inbounds i8, ptr %366, i64 40
  %.sroa.2.0.copyload = load i64, ptr %.sroa.2.0..sroa_idx, align 8, !tbaa !22
  call void @_ZN10ClipperLib7Clipper7AddJoinEPNS_5OutPtES2_NS_8IntPointE(ptr noundef nonnull align 8 dereferenceable(135) %0, ptr noundef %280, ptr noundef %365, i64 %.sroa.0.0.copyload, i64 %.sroa.2.0.copyload)
  br label %383

368:                                              ; preds = %277
  %369 = load ptr, ptr %0, align 8, !tbaa !34
  %370 = getelementptr i8, ptr %369, i64 -24
  %371 = load i64, ptr %370, align 8
  %372 = getelementptr inbounds i8, ptr %0, i64 %371
  call void @_ZN10ClipperLib11ClipperBase17UpdateEdgeIntoAELERPNS_5TEdgeE(ptr noundef nonnull align 8 dereferenceable(144) %372, ptr noundef nonnull align 8 dereferenceable(8) %3)
  br label %383

373:                                              ; preds = %270
  br i1 %276, label %374, label %377

374:                                              ; preds = %373
  %375 = getelementptr inbounds i8, ptr %271, i64 32
  %376 = call noundef ptr @_ZN10ClipperLib7Clipper8AddOutPtEPNS_5TEdgeERKNS_8IntPointE(ptr noundef nonnull align 8 dereferenceable(135) %0, ptr noundef nonnull %271, ptr noundef nonnull align 8 dereferenceable(16) %375)
  %.pre189 = load ptr, ptr %3, align 8, !tbaa !5
  br label %377

377:                                              ; preds = %374, %373
  %378 = phi ptr [ %.pre189, %374 ], [ %271, %373 ]
  %379 = load ptr, ptr %0, align 8, !tbaa !34
  %380 = getelementptr i8, ptr %379, i64 -24
  %381 = load i64, ptr %380, align 8
  %382 = getelementptr inbounds i8, ptr %0, i64 %381
  call void @_ZN10ClipperLib11ClipperBase13DeleteFromAELEPNS_5TEdgeE(ptr noundef nonnull align 8 dereferenceable(144) %382, ptr noundef %378)
  br label %383

383:                                              ; preds = %.thread142, %377, %368, %330, %331, %337, %343, %346, %350, %354, %363, %325, %278
  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 @llvm.lifetime.end.p0(i64 4, ptr nonnull %4) #4
  ret void
}

; Function Attrs: mustprogress uwtable
declare dso_local noundef ptr @_ZN10ClipperLib13GetMaximaPairEPNS_5TEdgeE(ptr noundef) local_unnamed_addr #1

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZN10ClipperLib12GetNextInAELEPNS_5TEdgeENS_9DirectionE(ptr noundef, i32 noundef) local_unnamed_addr #3

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN10ClipperLib16GetHorzDirectionERNS_5TEdgeERNS_9DirectionERxS4_(ptr noundef nonnull align 8 dereferenceable(136), ptr noundef nonnull align 4 dereferenceable(4), 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 void @_ZNSt20_List_const_iteratorIxEC2Ev(ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #3 align 2

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt20_List_const_iteratorIxEC2ERKSt14_List_iteratorIxE(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 noundef zeroext i1 @_ZStneRKSt20_List_const_iteratorIxES2_(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__cxx114listIxSaIxEE3endEv(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(8) ptr @_ZNKSt20_List_const_iteratorIxEdeEv(ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #3 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt7__cxx114listIxSaIxEE6rbeginEv(ptr dead_on_unwind noalias writable sret(%"class.std::reverse_iterator.46") align 8, 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(8) ptr @_ZNSt16reverse_iteratorISt20_List_const_iteratorIxEEaSISt14_List_iteratorIxEEERS2_RKS_IT_E(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #3 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt7__cxx114listIxSaIxEE4rendEv(ptr dead_on_unwind noalias writable sret(%"class.std::reverse_iterator.46") align 8, 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(8) ptr @_ZNKSt16reverse_iteratorISt20_List_const_iteratorIxEEdeEv(ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt16reverse_iteratorISt20_List_const_iteratorIxEEppEi(ptr dead_on_unwind noalias writable sret(%"class.std::reverse_iterator") align 8, ptr noundef nonnull align 8 dereferenceable(8), i32 noundef) local_unnamed_addr #3 align 2

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #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, !16, i64 64}
!10 = !{!"_ZTSN10ClipperLib5TEdgeE", !11, i64 0, !11, i64 16, !11, i64 32, !13, i64 48, !14, i64 56, !15, i64 60, !16, i64 64, !16, i64 68, !16, i64 72, !16, i64 76, !6, i64 80, !6, i64 88, !6, i64 96, !6, i64 104, !6, i64 112, !6, i64 120, !6, i64 128}
!11 = !{!"_ZTSN10ClipperLib8IntPointE", !12, i64 0, !12, i64 8}
!12 = !{!"long long", !7, i64 0}
!13 = !{!"double", !7, i64 0}
!14 = !{!"_ZTSN10ClipperLib8PolyTypeE", !7, i64 0}
!15 = !{!"_ZTSN10ClipperLib8EdgeSideE", !7, i64 0}
!16 = !{!"int", !7, i64 0}
!17 = !{!10, !6, i64 96}
!18 = distinct !{!18, !19}
!19 = !{!"llvm.loop.mustprogress"}
!20 = !{!21, !21, i64 0}
!21 = !{!"_ZTSN10ClipperLib9DirectionE", !7, i64 0}
!22 = !{!12, !12, i64 0}
!23 = !{!10, !12, i64 0}
!24 = distinct !{!24, !19}
!25 = !{!10, !12, i64 32}
!26 = distinct !{!26, !19}
!27 = !{!10, !12, i64 16}
!28 = !{!10, !16, i64 76}
!29 = !{!10, !12, i64 8}
!30 = distinct !{!30, !19}
!31 = distinct !{!31, !19}
!32 = !{!10, !13, i64 48}
!33 = distinct !{!33, !19}
!34 = !{!35, !35, i64 0}
!35 = !{!"vtable pointer", !8, i64 0}
!36 = !{!10, !12, i64 24}
!37 = distinct !{!37, !19}
!38 = distinct !{!38, !19}
!39 = !{!10, !6, i64 112}
!40 = !{!10, !6, i64 104}
!41 = !{!10, !12, i64 40}
!42 = !{!43, !49, i64 40}
!43 = !{!"_ZTSN10ClipperLib11ClipperBaseE", !44, i64 8, !45, i64 16, !49, i64 40, !50, i64 48, !49, i64 72, !49, i64 73, !54, i64 80, !6, i64 104, !58, i64 112}
!44 = !{!"_ZTSN9__gnu_cxx17__normal_iteratorIPN10ClipperLib12LocalMinimumESt6vectorIS2_SaIS2_EEEE", !6, i64 0}
!45 = !{!"_ZTSSt6vectorIN10ClipperLib12LocalMinimumESaIS1_EE", !46, i64 0}
!46 = !{!"_ZTSSt12_Vector_baseIN10ClipperLib12LocalMinimumESaIS1_EE", !47, i64 0}
!47 = !{!"_ZTSNSt12_Vector_baseIN10ClipperLib12LocalMinimumESaIS1_EE12_Vector_implE", !48, i64 0}
!48 = !{!"_ZTSNSt12_Vector_baseIN10ClipperLib12LocalMinimumESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!49 = !{!"bool", !7, i64 0}
!50 = !{!"_ZTSSt6vectorIPN10ClipperLib5TEdgeESaIS2_EE", !51, i64 0}
!51 = !{!"_ZTSSt12_Vector_baseIPN10ClipperLib5TEdgeESaIS2_EE", !52, i64 0}
!52 = !{!"_ZTSNSt12_Vector_baseIPN10ClipperLib5TEdgeESaIS2_EE12_Vector_implE", !53, i64 0}
!53 = !{!"_ZTSNSt12_Vector_baseIPN10ClipperLib5TEdgeESaIS2_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!54 = !{!"_ZTSSt6vectorIPN10ClipperLib6OutRecESaIS2_EE", !55, i64 0}
!55 = !{!"_ZTSSt12_Vector_baseIPN10ClipperLib6OutRecESaIS2_EE", !56, i64 0}
!56 = !{!"_ZTSNSt12_Vector_baseIPN10ClipperLib6OutRecESaIS2_EE12_Vector_implE", !57, i64 0}
!57 = !{!"_ZTSNSt12_Vector_baseIPN10ClipperLib6OutRecESaIS2_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!58 = !{!"_ZTSSt14priority_queueIxSt6vectorIxSaIxEESt4lessIxEE", !59, i64 0, !63, i64 24}
!59 = !{!"_ZTSSt6vectorIxSaIxEE", !60, i64 0}
!60 = !{!"_ZTSSt12_Vector_baseIxSaIxEE", !61, i64 0}
!61 = !{!"_ZTSNSt12_Vector_baseIxSaIxEE12_Vector_implE", !62, i64 0}
!62 = !{!"_ZTSNSt12_Vector_baseIxSaIxEE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!63 = !{!"_ZTSSt4lessIxE"}
!64 = !{i8 0, i8 2}
!65 = !{}


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