; LLVM IR from PaddlePaddle/FastDeploy :: fastdeploy/vision/ocr/ppocr/utils (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_iterator", align 8
  %19 = alloca %"struct.std::_List_const_iterator", align 8
  %20 = alloca %"struct.std::_List_iterator", align 8
  %21 = alloca %"class.std::reverse_iterator.46", 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.46", align 8
  %25 = alloca ptr, align 8
  %26 = alloca i8, align 1
  %27 = alloca ptr, align 8
  %28 = alloca %"struct.std::_List_const_iterator", align 8
  %29 = alloca %"struct.std::_List_iterator", align 8
  %30 = alloca %"struct.ClipperLib::IntPoint", align 8
  %31 = alloca %"class.std::reverse_iterator.46", align 8
  %32 = alloca %"struct.ClipperLib::IntPoint", align 8
  %33 = alloca ptr, align 8
  %34 = alloca ptr, align 8
  %35 = alloca %"struct.ClipperLib::IntPoint", align 8
  %36 = alloca %"struct.ClipperLib::IntPoint", align 8
  %37 = alloca i32, align 4
  %38 = alloca %"struct.ClipperLib::IntPoint", align 8
  %39 = alloca %"struct.ClipperLib::IntPoint", align 8
  %40 = alloca ptr, align 8
  %41 = alloca ptr, align 8
  %42 = alloca ptr, align 8
  %43 = alloca %"struct.ClipperLib::IntPoint", align 8
  %44 = alloca %"struct.ClipperLib::IntPoint", align 8
  %45 = alloca ptr, align 8
  %46 = alloca ptr, align 8
  %47 = alloca ptr, align 8
  %48 = alloca %"struct.ClipperLib::IntPoint", align 8
  %49 = alloca ptr, align 8
  %50 = alloca %"struct.ClipperLib::IntPoint", align 8
  store ptr %0, ptr %3, align 8, !tbaa !5
  store ptr %1, ptr %4, align 8, !tbaa !5
  %51 = 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
  %52 = load ptr, ptr %4, align 8, !tbaa !5
  %53 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %52, i32 0, i32 6
  %54 = load i32, ptr %53, align 8, !tbaa !9
  %55 = icmp eq i32 %54, 0
  %56 = zext i1 %55 to i8
  store i8 %56, ptr %8, align 1, !tbaa !17
  %57 = load ptr, ptr %4, align 8, !tbaa !5
  call void @_ZN10ClipperLib16GetHorzDirectionERNS_5TEdgeERNS_9DirectionERxS4_(ptr noundef nonnull align 8 dereferenceable(136) %57, 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
  %58 = load ptr, ptr %4, align 8, !tbaa !5
  store ptr %58, 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 %59

59:                                               ; preds = %71, %2
  %60 = load ptr, ptr %9, align 8, !tbaa !5
  %61 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %60, i32 0, i32 12
  %62 = load ptr, ptr %61, align 8, !tbaa !19
  %63 = icmp ne ptr %62, null
  br i1 %63, label %64, label %69

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

69:                                               ; preds = %64, %59
  %70 = phi i1 [ false, %59 ], [ %68, %64 ]
  br i1 %70, label %71, label %75

71:                                               ; preds = %69
  %72 = load ptr, ptr %9, align 8, !tbaa !5
  %73 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %72, i32 0, i32 12
  %74 = load ptr, ptr %73, align 8, !tbaa !19
  store ptr %74, ptr %9, align 8, !tbaa !5
  br label %59, !llvm.loop !20

75:                                               ; preds = %69
  %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
  %79 = icmp ne ptr %78, null
  br i1 %79, label %83, label %80

80:                                               ; preds = %75
  %81 = load ptr, ptr %9, align 8, !tbaa !5
  %82 = call noundef ptr @_ZN10ClipperLib13GetMaximaPairEPNS_5TEdgeE(ptr noundef %81)
  store ptr %82, ptr %10, align 8, !tbaa !5
  br label %83

83:                                               ; preds = %80, %75
  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
  %84 = getelementptr inbounds %"class.ClipperLib::Clipper", ptr %51, i32 0, i32 6
  %85 = call noundef i64 @_ZNKSt7__cxx114listIxSaIxEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %84) #5
  %86 = icmp ugt i64 %85, 0
  br i1 %86, label %87, label %167

87:                                               ; preds = %83
  %88 = load i32, ptr %5, align 4, !tbaa !22
  %89 = icmp eq i32 %88, 1
  br i1 %89, label %90, label %131

90:                                               ; preds = %87
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #5
  %91 = getelementptr inbounds %"class.ClipperLib::Clipper", ptr %51, i32 0, i32 6
  %92 = call ptr @_ZNSt7__cxx114listIxSaIxEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %91) #5
  %93 = getelementptr inbounds %"struct.std::_List_iterator", ptr %14, i32 0, i32 0
  store ptr %92, ptr %93, 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 %94

94:                                               ; preds = %109, %90
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #5
  %95 = getelementptr inbounds %"class.ClipperLib::Clipper", ptr %51, i32 0, i32 6
  %96 = call ptr @_ZNSt7__cxx114listIxSaIxEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %95) #5
  %97 = getelementptr inbounds %"struct.std::_List_iterator", ptr %16, 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) %15, ptr noundef nonnull align 8 dereferenceable(8) %16) #5
  %98 = 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 %98, label %99, label %107

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

107:                                              ; preds = %99, %94
  %108 = phi i1 [ false, %94 ], [ %106, %99 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #5
  br i1 %108, label %109, label %111

109:                                              ; preds = %107
  %110 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt20_List_const_iteratorIxEppEv(ptr noundef nonnull align 8 dereferenceable(8) %11) #5
  br label %94, !llvm.loop !27

111:                                              ; preds = %107
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #5
  %112 = getelementptr inbounds %"class.ClipperLib::Clipper", ptr %51, i32 0, i32 6
  %113 = call ptr @_ZNSt7__cxx114listIxSaIxEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %112) #5
  %114 = getelementptr inbounds %"struct.std::_List_iterator", ptr %18, i32 0, i32 0
  store ptr %113, ptr %114, align 8
  call void @_ZNSt20_List_const_iteratorIxEC2ERKSt14_List_iteratorIxE(ptr noundef nonnull align 8 dereferenceable(8) %17, ptr noundef nonnull align 8 dereferenceable(8) %18) #5
  %115 = call noundef zeroext i1 @_ZStneRKSt20_List_const_iteratorIxES2_(ptr noundef nonnull align 8 dereferenceable(8) %11, ptr noundef nonnull align 8 dereferenceable(8) %17) #5
  br i1 %115, label %116, label %124

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

124:                                              ; preds = %116, %111
  %125 = phi i1 [ false, %111 ], [ %123, %116 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #5
  br i1 %125, label %126, label %130

126:                                              ; preds = %124
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #5
  %127 = getelementptr inbounds %"class.ClipperLib::Clipper", ptr %51, i32 0, i32 6
  %128 = call ptr @_ZNSt7__cxx114listIxSaIxEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %127) #5
  %129 = getelementptr inbounds %"struct.std::_List_iterator", ptr %20, i32 0, i32 0
  store ptr %128, ptr %129, align 8
  call void @_ZNSt20_List_const_iteratorIxEC2ERKSt14_List_iteratorIxE(ptr noundef nonnull align 8 dereferenceable(8) %19, ptr noundef nonnull align 8 dereferenceable(8) %20) #5
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %11, ptr align 8 %19, i64 8, i1 false), !tbaa.struct !24
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #5
  br label %130

130:                                              ; preds = %126, %124
  br label %166

131:                                              ; preds = %87
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #5
  %132 = getelementptr inbounds %"class.ClipperLib::Clipper", ptr %51, i32 0, i32 6
  call void @_ZNSt7__cxx114listIxSaIxEE6rbeginEv(ptr dead_on_unwind writable sret(%"class.std::reverse_iterator.46") align 8 %21, ptr noundef nonnull align 8 dereferenceable(24) %132) #5
  %133 = 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) %21) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #5
  br label %134

134:                                              ; preds = %147, %131
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #5
  %135 = getelementptr inbounds %"class.ClipperLib::Clipper", ptr %51, i32 0, i32 6
  call void @_ZNSt7__cxx114listIxSaIxEE4rendEv(ptr dead_on_unwind writable sret(%"class.std::reverse_iterator.46") align 8 %22, ptr noundef nonnull align 8 dereferenceable(24) %135) #5
  %136 = 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) %22)
  br i1 %136, label %137, label %145

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

145:                                              ; preds = %137, %134
  %146 = phi i1 [ false, %134 ], [ %144, %137 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #5
  br i1 %146, label %147, label %149

147:                                              ; preds = %145
  %148 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt16reverse_iteratorISt20_List_const_iteratorIxEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %12)
  br label %134, !llvm.loop !29

149:                                              ; preds = %145
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #5
  %150 = getelementptr inbounds %"class.ClipperLib::Clipper", ptr %51, 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) %150) #5
  %151 = 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 %151, label %152, label %160

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

160:                                              ; preds = %152, %149
  %161 = phi i1 [ false, %149 ], [ %159, %152 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #5
  br i1 %161, label %162, label %165

162:                                              ; preds = %160
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #5
  %163 = getelementptr inbounds %"class.ClipperLib::Clipper", ptr %51, i32 0, i32 6
  call void @_ZNSt7__cxx114listIxSaIxEE4rendEv(ptr dead_on_unwind writable sret(%"class.std::reverse_iterator.46") align 8 %24, ptr noundef nonnull align 8 dereferenceable(24) %163) #5
  %164 = 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) %24) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #5
  br label %165

165:                                              ; preds = %162, %160
  br label %166

166:                                              ; preds = %165, %130
  br label %167

167:                                              ; preds = %166, %83
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #5
  store ptr null, ptr %25, align 8, !tbaa !5
  br label %168

168:                                              ; preds = %461, %167
  call void @llvm.lifetime.start.p0(i64 1, ptr %26) #5
  %169 = load ptr, ptr %4, align 8, !tbaa !5
  %170 = load ptr, ptr %9, align 8, !tbaa !5
  %171 = icmp eq ptr %169, %170
  %172 = zext i1 %171 to i8
  store i8 %172, ptr %26, align 1, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #5
  %173 = load ptr, ptr %4, align 8, !tbaa !5
  %174 = load i32, ptr %5, align 4, !tbaa !22
  %175 = call noundef ptr @_ZN10ClipperLib12GetNextInAELEPNS_5TEdgeENS_9DirectionE(ptr noundef %173, i32 noundef %174)
  store ptr %175, ptr %27, align 8, !tbaa !5
  br label %176

176:                                              ; preds = %421, %168
  %177 = load ptr, ptr %27, align 8, !tbaa !5
  %178 = icmp ne ptr %177, null
  br i1 %178, label %179, label %432

179:                                              ; preds = %176
  %180 = getelementptr inbounds %"class.ClipperLib::Clipper", ptr %51, i32 0, i32 6
  %181 = call noundef i64 @_ZNKSt7__cxx114listIxSaIxEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %180) #5
  %182 = icmp ugt i64 %181, 0
  br i1 %182, label %183, label %257

183:                                              ; preds = %179
  %184 = load i32, ptr %5, align 4, !tbaa !22
  %185 = icmp eq i32 %184, 1
  br i1 %185, label %186, label %222

186:                                              ; preds = %183
  br label %187

187:                                              ; preds = %219, %186
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #5
  %188 = getelementptr inbounds %"class.ClipperLib::Clipper", ptr %51, i32 0, i32 6
  %189 = call ptr @_ZNSt7__cxx114listIxSaIxEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %188) #5
  %190 = getelementptr inbounds %"struct.std::_List_iterator", ptr %29, i32 0, i32 0
  store ptr %189, ptr %190, align 8
  call void @_ZNSt20_List_const_iteratorIxEC2ERKSt14_List_iteratorIxE(ptr noundef nonnull align 8 dereferenceable(8) %28, ptr noundef nonnull align 8 dereferenceable(8) %29) #5
  %191 = call noundef zeroext i1 @_ZStneRKSt20_List_const_iteratorIxES2_(ptr noundef nonnull align 8 dereferenceable(8) %11, ptr noundef nonnull align 8 dereferenceable(8) %28) #5
  br i1 %191, label %192, label %200

192:                                              ; preds = %187
  %193 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt20_List_const_iteratorIxEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %11) #5
  %194 = load i64, ptr %193, align 8, !tbaa !25
  %195 = load ptr, ptr %27, align 8, !tbaa !5
  %196 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %195, i32 0, i32 1
  %197 = getelementptr inbounds %"struct.ClipperLib::IntPoint", ptr %196, i32 0, i32 0
  %198 = load i64, ptr %197, align 8, !tbaa !30
  %199 = icmp slt i64 %194, %198
  br label %200

200:                                              ; preds = %192, %187
  %201 = phi i1 [ false, %187 ], [ %199, %192 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #5
  br i1 %201, label %202, label %221

202:                                              ; preds = %200
  %203 = load ptr, ptr %4, align 8, !tbaa !5
  %204 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %203, i32 0, i32 9
  %205 = load i32, ptr %204, align 4, !tbaa !31
  %206 = icmp sge i32 %205, 0
  br i1 %206, label %207, label %219

207:                                              ; preds = %202
  %208 = load i8, ptr %8, align 1, !tbaa !17, !range !32, !noundef !33
  %209 = trunc i8 %208 to i1
  br i1 %209, label %219, label %210

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

219:                                              ; preds = %210, %207, %202
  %220 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt20_List_const_iteratorIxEppEv(ptr noundef nonnull align 8 dereferenceable(8) %11) #5
  br label %187, !llvm.loop !35

221:                                              ; preds = %200
  br label %256

222:                                              ; preds = %183
  br label %223

223:                                              ; preds = %253, %222
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #5
  %224 = getelementptr inbounds %"class.ClipperLib::Clipper", ptr %51, i32 0, i32 6
  call void @_ZNSt7__cxx114listIxSaIxEE4rendEv(ptr dead_on_unwind writable sret(%"class.std::reverse_iterator.46") align 8 %31, ptr noundef nonnull align 8 dereferenceable(24) %224) #5
  %225 = 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) %31)
  br i1 %225, label %226, label %234

226:                                              ; preds = %223
  %227 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt16reverse_iteratorISt20_List_const_iteratorIxEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %12)
  %228 = load i64, ptr %227, align 8, !tbaa !25
  %229 = load ptr, ptr %27, align 8, !tbaa !5
  %230 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %229, i32 0, i32 1
  %231 = getelementptr inbounds %"struct.ClipperLib::IntPoint", ptr %230, i32 0, i32 0
  %232 = load i64, ptr %231, align 8, !tbaa !30
  %233 = icmp sgt i64 %228, %232
  br label %234

234:                                              ; preds = %226, %223
  %235 = phi i1 [ false, %223 ], [ %233, %226 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #5
  br i1 %235, label %236, label %255

236:                                              ; preds = %234
  %237 = load ptr, ptr %4, align 8, !tbaa !5
  %238 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %237, i32 0, i32 9
  %239 = load i32, ptr %238, align 4, !tbaa !31
  %240 = icmp sge i32 %239, 0
  br i1 %240, label %241, label %253

241:                                              ; preds = %236
  %242 = load i8, ptr %8, align 1, !tbaa !17, !range !32, !noundef !33
  %243 = trunc i8 %242 to i1
  br i1 %243, label %253, label %244

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

253:                                              ; preds = %244, %241, %236
  %254 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt16reverse_iteratorISt20_List_const_iteratorIxEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %12)
  br label %223, !llvm.loop !36

255:                                              ; preds = %234
  br label %256

256:                                              ; preds = %255, %221
  br label %257

257:                                              ; preds = %256, %179
  %258 = load i32, ptr %5, align 4, !tbaa !22
  %259 = icmp eq i32 %258, 1
  br i1 %259, label %260, label %267

260:                                              ; preds = %257
  %261 = load ptr, ptr %27, align 8, !tbaa !5
  %262 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %261, i32 0, i32 1
  %263 = getelementptr inbounds %"struct.ClipperLib::IntPoint", ptr %262, i32 0, i32 0
  %264 = load i64, ptr %263, align 8, !tbaa !30
  %265 = load i64, ptr %7, align 8, !tbaa !25
  %266 = icmp sgt i64 %264, %265
  br i1 %266, label %277, label %267

267:                                              ; preds = %260, %257
  %268 = load i32, ptr %5, align 4, !tbaa !22
  %269 = icmp eq i32 %268, 0
  br i1 %269, label %270, label %278

270:                                              ; preds = %267
  %271 = load ptr, ptr %27, align 8, !tbaa !5
  %272 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %271, i32 0, i32 1
  %273 = getelementptr inbounds %"struct.ClipperLib::IntPoint", ptr %272, i32 0, i32 0
  %274 = load i64, ptr %273, align 8, !tbaa !30
  %275 = load i64, ptr %6, align 8, !tbaa !25
  %276 = icmp slt i64 %274, %275
  br i1 %276, label %277, label %278

277:                                              ; preds = %270, %260
  br label %432

278:                                              ; preds = %270, %267
  %279 = load ptr, ptr %27, align 8, !tbaa !5
  %280 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %279, i32 0, i32 1
  %281 = getelementptr inbounds %"struct.ClipperLib::IntPoint", ptr %280, i32 0, i32 0
  %282 = load i64, ptr %281, align 8, !tbaa !30
  %283 = load ptr, ptr %4, align 8, !tbaa !5
  %284 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %283, i32 0, i32 2
  %285 = getelementptr inbounds %"struct.ClipperLib::IntPoint", ptr %284, i32 0, i32 0
  %286 = load i64, ptr %285, align 8, !tbaa !28
  %287 = icmp eq i64 %282, %286
  br i1 %287, label %288, label %304

288:                                              ; preds = %278
  %289 = load ptr, ptr %4, align 8, !tbaa !5
  %290 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %289, i32 0, i32 12
  %291 = load ptr, ptr %290, align 8, !tbaa !19
  %292 = icmp ne ptr %291, null
  br i1 %292, label %293, label %304

293:                                              ; preds = %288
  %294 = load ptr, ptr %27, align 8, !tbaa !5
  %295 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %294, i32 0, i32 3
  %296 = load double, ptr %295, align 8, !tbaa !37
  %297 = load ptr, ptr %4, align 8, !tbaa !5
  %298 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %297, i32 0, i32 12
  %299 = load ptr, ptr %298, align 8, !tbaa !19
  %300 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %299, i32 0, i32 3
  %301 = load double, ptr %300, align 8, !tbaa !37
  %302 = fcmp olt double %296, %301
  br i1 %302, label %303, label %304

303:                                              ; preds = %293
  br label %432

304:                                              ; preds = %293, %288, %278
  %305 = load ptr, ptr %4, align 8, !tbaa !5
  %306 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %305, i32 0, i32 9
  %307 = load i32, ptr %306, align 4, !tbaa !31
  %308 = icmp sge i32 %307, 0
  br i1 %308, label %309, label %368

309:                                              ; preds = %304
  %310 = load i8, ptr %8, align 1, !tbaa !17, !range !32, !noundef !33
  %311 = trunc i8 %310 to i1
  br i1 %311, label %368, label %312

312:                                              ; preds = %309
  %313 = load ptr, ptr %4, align 8, !tbaa !5
  %314 = load ptr, ptr %27, align 8, !tbaa !5
  %315 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %314, i32 0, i32 1
  %316 = call noundef ptr @_ZN10ClipperLib7Clipper8AddOutPtEPNS_5TEdgeERKNS_8IntPointE(ptr noundef nonnull align 8 dereferenceable(135) %51, ptr noundef %313, ptr noundef nonnull align 8 dereferenceable(16) %315)
  store ptr %316, ptr %25, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #5
  %317 = getelementptr inbounds %"class.ClipperLib::Clipper", ptr %51, i32 0, i32 7
  %318 = load ptr, ptr %317, align 8, !tbaa !38
  store ptr %318, ptr %33, align 8, !tbaa !5
  br label %319

319:                                              ; preds = %356, %312
  %320 = load ptr, ptr %33, align 8, !tbaa !5
  %321 = icmp ne ptr %320, null
  br i1 %321, label %322, label %360

322:                                              ; preds = %319
  %323 = load ptr, ptr %33, align 8, !tbaa !5
  %324 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %323, i32 0, i32 9
  %325 = load i32, ptr %324, align 4, !tbaa !31
  %326 = icmp sge i32 %325, 0
  br i1 %326, label %327, label %356

327:                                              ; preds = %322
  %328 = load ptr, ptr %4, align 8, !tbaa !5
  %329 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %328, i32 0, i32 0
  %330 = getelementptr inbounds %"struct.ClipperLib::IntPoint", ptr %329, i32 0, i32 0
  %331 = load i64, ptr %330, align 8, !tbaa !26
  %332 = load ptr, ptr %4, align 8, !tbaa !5
  %333 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %332, i32 0, i32 2
  %334 = getelementptr inbounds %"struct.ClipperLib::IntPoint", ptr %333, i32 0, i32 0
  %335 = load i64, ptr %334, align 8, !tbaa !28
  %336 = load ptr, ptr %33, align 8, !tbaa !5
  %337 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %336, i32 0, i32 0
  %338 = getelementptr inbounds %"struct.ClipperLib::IntPoint", ptr %337, i32 0, i32 0
  %339 = load i64, ptr %338, align 8, !tbaa !26
  %340 = load ptr, ptr %33, align 8, !tbaa !5
  %341 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %340, i32 0, i32 2
  %342 = getelementptr inbounds %"struct.ClipperLib::IntPoint", ptr %341, i32 0, i32 0
  %343 = load i64, ptr %342, align 8, !tbaa !28
  %344 = call noundef zeroext i1 @_ZN10ClipperLib19HorzSegmentsOverlapExxxx(i64 noundef %331, i64 noundef %335, i64 noundef %339, i64 noundef %343)
  br i1 %344, label %345, label %356

345:                                              ; preds = %327
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #5
  %346 = load ptr, ptr %33, align 8, !tbaa !5
  %347 = call noundef ptr @_ZN10ClipperLib7Clipper12GetLastOutPtEPNS_5TEdgeE(ptr noundef nonnull align 8 dereferenceable(135) %51, ptr noundef %346)
  store ptr %347, ptr %34, align 8, !tbaa !5
  %348 = load ptr, ptr %34, align 8, !tbaa !5
  %349 = load ptr, ptr %25, align 8, !tbaa !5
  %350 = load ptr, ptr %33, align 8, !tbaa !5
  %351 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %350, i32 0, i32 2
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %35, ptr align 8 %351, i64 16, i1 false), !tbaa.struct !56
  %352 = getelementptr inbounds { i64, i64 }, ptr %35, i32 0, i32 0
  %353 = load i64, ptr %352, align 8
  %354 = getelementptr inbounds { i64, i64 }, ptr %35, i32 0, i32 1
  %355 = load i64, ptr %354, align 8
  call void @_ZN10ClipperLib7Clipper7AddJoinEPNS_5OutPtES2_NS_8IntPointE(ptr noundef nonnull align 8 dereferenceable(135) %51, ptr noundef %348, ptr noundef %349, i64 %353, i64 %355)
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #5
  br label %356

356:                                              ; preds = %345, %327, %322
  %357 = load ptr, ptr %33, align 8, !tbaa !5
  %358 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %357, i32 0, i32 15
  %359 = load ptr, ptr %358, align 8, !tbaa !57
  store ptr %359, ptr %33, align 8, !tbaa !5
  br label %319, !llvm.loop !58

360:                                              ; preds = %319
  %361 = load ptr, ptr %25, align 8, !tbaa !5
  %362 = load ptr, ptr %4, align 8, !tbaa !5
  %363 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %362, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %36, ptr align 8 %363, i64 16, i1 false), !tbaa.struct !56
  %364 = getelementptr inbounds { i64, i64 }, ptr %36, i32 0, i32 0
  %365 = load i64, ptr %364, align 8
  %366 = getelementptr inbounds { i64, i64 }, ptr %36, i32 0, i32 1
  %367 = load i64, ptr %366, align 8
  call void @_ZN10ClipperLib7Clipper12AddGhostJoinEPNS_5OutPtENS_8IntPointE(ptr noundef nonnull align 8 dereferenceable(135) %51, ptr noundef %361, i64 %365, i64 %367)
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #5
  br label %368

368:                                              ; preds = %360, %309, %304
  %369 = load ptr, ptr %27, align 8, !tbaa !5
  %370 = load ptr, ptr %10, align 8, !tbaa !5
  %371 = icmp eq ptr %369, %370
  br i1 %371, label %372, label %396

372:                                              ; preds = %368
  %373 = load i8, ptr %26, align 1, !tbaa !17, !range !32, !noundef !33
  %374 = trunc i8 %373 to i1
  br i1 %374, label %375, label %396

375:                                              ; preds = %372
  %376 = load ptr, ptr %4, align 8, !tbaa !5
  %377 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %376, i32 0, i32 9
  %378 = load i32, ptr %377, align 4, !tbaa !31
  %379 = icmp sge i32 %378, 0
  br i1 %379, label %380, label %385

380:                                              ; preds = %375
  %381 = load ptr, ptr %4, align 8, !tbaa !5
  %382 = load ptr, ptr %10, align 8, !tbaa !5
  %383 = load ptr, ptr %4, align 8, !tbaa !5
  %384 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %383, i32 0, i32 2
  call void @_ZN10ClipperLib7Clipper15AddLocalMaxPolyEPNS_5TEdgeES2_RKNS_8IntPointE(ptr noundef nonnull align 8 dereferenceable(135) %51, ptr noundef %381, ptr noundef %382, ptr noundef nonnull align 8 dereferenceable(16) %384)
  br label %385

385:                                              ; preds = %380, %375
  %386 = load ptr, ptr %51, align 8, !tbaa !59
  %387 = getelementptr i8, ptr %386, i64 -24
  %388 = load i64, ptr %387, align 8
  %389 = getelementptr inbounds i8, ptr %51, i64 %388
  %390 = load ptr, ptr %4, align 8, !tbaa !5
  call void @_ZN10ClipperLib11ClipperBase13DeleteFromAELEPNS_5TEdgeE(ptr noundef nonnull align 8 dereferenceable(144) %389, ptr noundef %390)
  %391 = load ptr, ptr %51, align 8, !tbaa !59
  %392 = getelementptr i8, ptr %391, i64 -24
  %393 = load i64, ptr %392, align 8
  %394 = getelementptr inbounds i8, ptr %51, i64 %393
  %395 = load ptr, ptr %10, align 8, !tbaa !5
  call void @_ZN10ClipperLib11ClipperBase13DeleteFromAELEPNS_5TEdgeE(ptr noundef nonnull align 8 dereferenceable(144) %394, ptr noundef %395)
  store i32 1, ptr %37, align 4
  br label %459

396:                                              ; preds = %372, %368
  %397 = load i32, ptr %5, align 4, !tbaa !22
  %398 = icmp eq i32 %397, 1
  br i1 %398, label %399, label %410

399:                                              ; preds = %396
  call void @llvm.lifetime.start.p0(i64 16, ptr %38) #5
  %400 = load ptr, ptr %27, align 8, !tbaa !5
  %401 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %400, i32 0, i32 1
  %402 = getelementptr inbounds %"struct.ClipperLib::IntPoint", ptr %401, i32 0, i32 0
  %403 = load i64, ptr %402, align 8, !tbaa !30
  %404 = load ptr, ptr %4, 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 1
  %407 = load i64, ptr %406, align 8, !tbaa !61
  call void @_ZN10ClipperLib8IntPointC2Exx(ptr noundef nonnull align 8 dereferenceable(16) %38, i64 noundef %403, i64 noundef %407)
  %408 = load ptr, ptr %4, align 8, !tbaa !5
  %409 = load ptr, ptr %27, align 8, !tbaa !5
  call void @_ZN10ClipperLib7Clipper14IntersectEdgesEPNS_5TEdgeES2_RNS_8IntPointE(ptr noundef nonnull align 8 dereferenceable(135) %51, ptr noundef %408, ptr noundef %409, ptr noundef nonnull align 8 dereferenceable(16) %38)
  call void @llvm.lifetime.end.p0(i64 16, ptr %38) #5
  br label %421

410:                                              ; preds = %396
  call void @llvm.lifetime.start.p0(i64 16, ptr %39) #5
  %411 = load ptr, ptr %27, align 8, !tbaa !5
  %412 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %411, i32 0, i32 1
  %413 = getelementptr inbounds %"struct.ClipperLib::IntPoint", ptr %412, i32 0, i32 0
  %414 = load i64, ptr %413, align 8, !tbaa !30
  %415 = load ptr, ptr %4, 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 1
  %418 = load i64, ptr %417, align 8, !tbaa !61
  call void @_ZN10ClipperLib8IntPointC2Exx(ptr noundef nonnull align 8 dereferenceable(16) %39, i64 noundef %414, i64 noundef %418)
  %419 = load ptr, ptr %27, align 8, !tbaa !5
  %420 = load ptr, ptr %4, align 8, !tbaa !5
  call void @_ZN10ClipperLib7Clipper14IntersectEdgesEPNS_5TEdgeES2_RNS_8IntPointE(ptr noundef nonnull align 8 dereferenceable(135) %51, ptr noundef %419, ptr noundef %420, ptr noundef nonnull align 8 dereferenceable(16) %39)
  call void @llvm.lifetime.end.p0(i64 16, ptr %39) #5
  br label %421

421:                                              ; preds = %410, %399
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #5
  %422 = load ptr, ptr %27, align 8, !tbaa !5
  %423 = load i32, ptr %5, align 4, !tbaa !22
  %424 = call noundef ptr @_ZN10ClipperLib12GetNextInAELEPNS_5TEdgeENS_9DirectionE(ptr noundef %422, i32 noundef %423)
  store ptr %424, ptr %40, align 8, !tbaa !5
  %425 = load ptr, ptr %51, align 8, !tbaa !59
  %426 = getelementptr i8, ptr %425, i64 -24
  %427 = load i64, ptr %426, align 8
  %428 = getelementptr inbounds i8, ptr %51, i64 %427
  %429 = load ptr, ptr %4, align 8, !tbaa !5
  %430 = load ptr, ptr %27, align 8, !tbaa !5
  call void @_ZN10ClipperLib11ClipperBase18SwapPositionsInAELEPNS_5TEdgeES2_(ptr noundef nonnull align 8 dereferenceable(144) %428, ptr noundef %429, ptr noundef %430)
  %431 = load ptr, ptr %40, align 8, !tbaa !5
  store ptr %431, ptr %27, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #5
  br label %176, !llvm.loop !62

432:                                              ; preds = %303, %277, %176
  %433 = load ptr, ptr %4, align 8, !tbaa !5
  %434 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %433, i32 0, i32 12
  %435 = load ptr, ptr %434, align 8, !tbaa !19
  %436 = icmp ne ptr %435, null
  br i1 %436, label %437, label %442

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

442:                                              ; preds = %437, %432
  store i32 8, ptr %37, align 4
  br label %459

443:                                              ; preds = %437
  %444 = load ptr, ptr %51, align 8, !tbaa !59
  %445 = getelementptr i8, ptr %444, i64 -24
  %446 = load i64, ptr %445, align 8
  %447 = getelementptr inbounds i8, ptr %51, i64 %446
  call void @_ZN10ClipperLib11ClipperBase17UpdateEdgeIntoAELERPNS_5TEdgeE(ptr noundef nonnull align 8 dereferenceable(144) %447, ptr noundef nonnull align 8 dereferenceable(8) %4)
  %448 = load ptr, ptr %4, align 8, !tbaa !5
  %449 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %448, i32 0, i32 9
  %450 = load i32, ptr %449, align 4, !tbaa !31
  %451 = icmp sge i32 %450, 0
  br i1 %451, label %452, label %457

452:                                              ; preds = %443
  %453 = load ptr, ptr %4, align 8, !tbaa !5
  %454 = load ptr, ptr %4, align 8, !tbaa !5
  %455 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %454, i32 0, i32 0
  %456 = call noundef ptr @_ZN10ClipperLib7Clipper8AddOutPtEPNS_5TEdgeERKNS_8IntPointE(ptr noundef nonnull align 8 dereferenceable(135) %51, ptr noundef %453, ptr noundef nonnull align 8 dereferenceable(16) %455)
  br label %457

457:                                              ; preds = %452, %443
  %458 = load ptr, ptr %4, align 8, !tbaa !5
  call void @_ZN10ClipperLib16GetHorzDirectionERNS_5TEdgeERNS_9DirectionERxS4_(ptr noundef nonnull align 8 dereferenceable(136) %458, 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 %37, align 4
  br label %459

459:                                              ; preds = %457, %442, %385
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %26) #5
  %460 = load i32, ptr %37, align 4
  switch i32 %460, label %713 [
    i32 0, label %461
    i32 8, label %462
  ]

461:                                              ; preds = %459
  br label %168, !llvm.loop !63

462:                                              ; preds = %459
  %463 = load ptr, ptr %4, align 8, !tbaa !5
  %464 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %463, i32 0, i32 9
  %465 = load i32, ptr %464, align 4, !tbaa !31
  %466 = icmp sge i32 %465, 0
  br i1 %466, label %467, label %524

467:                                              ; preds = %462
  %468 = load ptr, ptr %25, align 8, !tbaa !5
  %469 = icmp ne ptr %468, null
  br i1 %469, label %524, label %470

470:                                              ; preds = %467
  %471 = load ptr, ptr %4, align 8, !tbaa !5
  %472 = call noundef ptr @_ZN10ClipperLib7Clipper12GetLastOutPtEPNS_5TEdgeE(ptr noundef nonnull align 8 dereferenceable(135) %51, ptr noundef %471)
  store ptr %472, ptr %25, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #5
  %473 = getelementptr inbounds %"class.ClipperLib::Clipper", ptr %51, i32 0, i32 7
  %474 = load ptr, ptr %473, align 8, !tbaa !38
  store ptr %474, ptr %41, align 8, !tbaa !5
  br label %475

475:                                              ; preds = %512, %470
  %476 = load ptr, ptr %41, align 8, !tbaa !5
  %477 = icmp ne ptr %476, null
  br i1 %477, label %478, label %516

478:                                              ; preds = %475
  %479 = load ptr, ptr %41, align 8, !tbaa !5
  %480 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %479, i32 0, i32 9
  %481 = load i32, ptr %480, align 4, !tbaa !31
  %482 = icmp sge i32 %481, 0
  br i1 %482, label %483, label %512

483:                                              ; preds = %478
  %484 = load ptr, ptr %4, align 8, !tbaa !5
  %485 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %484, i32 0, i32 0
  %486 = getelementptr inbounds %"struct.ClipperLib::IntPoint", ptr %485, i32 0, i32 0
  %487 = load i64, ptr %486, align 8, !tbaa !26
  %488 = load ptr, ptr %4, align 8, !tbaa !5
  %489 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %488, i32 0, i32 2
  %490 = getelementptr inbounds %"struct.ClipperLib::IntPoint", ptr %489, i32 0, i32 0
  %491 = load i64, ptr %490, align 8, !tbaa !28
  %492 = load ptr, ptr %41, align 8, !tbaa !5
  %493 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %492, i32 0, i32 0
  %494 = getelementptr inbounds %"struct.ClipperLib::IntPoint", ptr %493, i32 0, i32 0
  %495 = load i64, ptr %494, align 8, !tbaa !26
  %496 = load ptr, ptr %41, align 8, !tbaa !5
  %497 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %496, i32 0, i32 2
  %498 = getelementptr inbounds %"struct.ClipperLib::IntPoint", ptr %497, i32 0, i32 0
  %499 = load i64, ptr %498, align 8, !tbaa !28
  %500 = call noundef zeroext i1 @_ZN10ClipperLib19HorzSegmentsOverlapExxxx(i64 noundef %487, i64 noundef %491, i64 noundef %495, i64 noundef %499)
  br i1 %500, label %501, label %512

501:                                              ; preds = %483
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #5
  %502 = load ptr, ptr %41, align 8, !tbaa !5
  %503 = call noundef ptr @_ZN10ClipperLib7Clipper12GetLastOutPtEPNS_5TEdgeE(ptr noundef nonnull align 8 dereferenceable(135) %51, ptr noundef %502)
  store ptr %503, ptr %42, align 8, !tbaa !5
  %504 = load ptr, ptr %42, align 8, !tbaa !5
  %505 = load ptr, ptr %25, align 8, !tbaa !5
  %506 = load ptr, ptr %41, align 8, !tbaa !5
  %507 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %506, i32 0, i32 2
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %43, ptr align 8 %507, i64 16, i1 false), !tbaa.struct !56
  %508 = getelementptr inbounds { i64, i64 }, ptr %43, i32 0, i32 0
  %509 = load i64, ptr %508, align 8
  %510 = getelementptr inbounds { i64, i64 }, ptr %43, i32 0, i32 1
  %511 = load i64, ptr %510, align 8
  call void @_ZN10ClipperLib7Clipper7AddJoinEPNS_5OutPtES2_NS_8IntPointE(ptr noundef nonnull align 8 dereferenceable(135) %51, ptr noundef %504, ptr noundef %505, i64 %509, i64 %511)
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #5
  br label %512

512:                                              ; preds = %501, %483, %478
  %513 = load ptr, ptr %41, align 8, !tbaa !5
  %514 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %513, i32 0, i32 15
  %515 = load ptr, ptr %514, align 8, !tbaa !57
  store ptr %515, ptr %41, align 8, !tbaa !5
  br label %475, !llvm.loop !64

516:                                              ; preds = %475
  %517 = load ptr, ptr %25, align 8, !tbaa !5
  %518 = load ptr, ptr %4, align 8, !tbaa !5
  %519 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %518, i32 0, i32 2
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %44, ptr align 8 %519, i64 16, i1 false), !tbaa.struct !56
  %520 = getelementptr inbounds { i64, i64 }, ptr %44, i32 0, i32 0
  %521 = load i64, ptr %520, align 8
  %522 = getelementptr inbounds { i64, i64 }, ptr %44, i32 0, i32 1
  %523 = load i64, ptr %522, align 8
  call void @_ZN10ClipperLib7Clipper12AddGhostJoinEPNS_5OutPtENS_8IntPointE(ptr noundef nonnull align 8 dereferenceable(135) %51, ptr noundef %517, i64 %521, i64 %523)
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #5
  br label %524

524:                                              ; preds = %516, %467, %462
  %525 = load ptr, ptr %4, align 8, !tbaa !5
  %526 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %525, i32 0, i32 12
  %527 = load ptr, ptr %526, align 8, !tbaa !19
  %528 = icmp ne ptr %527, null
  br i1 %528, label %529, label %696

529:                                              ; preds = %524
  %530 = load ptr, ptr %4, align 8, !tbaa !5
  %531 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %530, i32 0, i32 9
  %532 = load i32, ptr %531, align 4, !tbaa !31
  %533 = icmp sge i32 %532, 0
  br i1 %533, label %534, label %690

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

547:                                              ; preds = %534
  store i32 1, ptr %37, align 4
  br label %713

548:                                              ; preds = %534
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #5
  %549 = load ptr, ptr %4, align 8, !tbaa !5
  %550 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %549, i32 0, i32 14
  %551 = load ptr, ptr %550, align 8, !tbaa !65
  store ptr %551, ptr %45, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #5
  %552 = load ptr, ptr %4, align 8, !tbaa !5
  %553 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %552, i32 0, i32 13
  %554 = load ptr, ptr %553, align 8, !tbaa !66
  store ptr %554, ptr %46, align 8, !tbaa !5
  %555 = load ptr, ptr %45, align 8, !tbaa !5
  %556 = icmp ne ptr %555, null
  br i1 %556, label %557, label %621

557:                                              ; preds = %548
  %558 = load ptr, ptr %45, align 8, !tbaa !5
  %559 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %558, i32 0, i32 1
  %560 = getelementptr inbounds %"struct.ClipperLib::IntPoint", ptr %559, i32 0, i32 0
  %561 = load i64, ptr %560, align 8, !tbaa !30
  %562 = load ptr, ptr %4, align 8, !tbaa !5
  %563 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %562, i32 0, i32 0
  %564 = getelementptr inbounds %"struct.ClipperLib::IntPoint", ptr %563, i32 0, i32 0
  %565 = load i64, ptr %564, align 8, !tbaa !26
  %566 = icmp eq i64 %561, %565
  br i1 %566, label %567, label %621

567:                                              ; preds = %557
  %568 = load ptr, ptr %45, align 8, !tbaa !5
  %569 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %568, i32 0, i32 1
  %570 = getelementptr inbounds %"struct.ClipperLib::IntPoint", ptr %569, i32 0, i32 1
  %571 = load i64, ptr %570, align 8, !tbaa !61
  %572 = load ptr, ptr %4, align 8, !tbaa !5
  %573 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %572, i32 0, i32 0
  %574 = getelementptr inbounds %"struct.ClipperLib::IntPoint", ptr %573, i32 0, i32 1
  %575 = load i64, ptr %574, align 8, !tbaa !34
  %576 = icmp eq i64 %571, %575
  br i1 %576, label %577, label %621

577:                                              ; preds = %567
  %578 = load ptr, ptr %45, align 8, !tbaa !5
  %579 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %578, i32 0, i32 6
  %580 = load i32, ptr %579, align 8, !tbaa !9
  %581 = icmp ne i32 %580, 0
  br i1 %581, label %582, label %621

582:                                              ; preds = %577
  %583 = load ptr, ptr %45, align 8, !tbaa !5
  %584 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %583, i32 0, i32 9
  %585 = load i32, ptr %584, align 4, !tbaa !31
  %586 = icmp sge i32 %585, 0
  br i1 %586, label %587, label %621

587:                                              ; preds = %582
  %588 = load ptr, ptr %45, align 8, !tbaa !5
  %589 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %588, i32 0, i32 1
  %590 = getelementptr inbounds %"struct.ClipperLib::IntPoint", ptr %589, i32 0, i32 1
  %591 = load i64, ptr %590, align 8, !tbaa !61
  %592 = load ptr, ptr %45, align 8, !tbaa !5
  %593 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %592, i32 0, i32 2
  %594 = getelementptr inbounds %"struct.ClipperLib::IntPoint", ptr %593, i32 0, i32 1
  %595 = load i64, ptr %594, align 8, !tbaa !67
  %596 = icmp sgt i64 %591, %595
  br i1 %596, label %597, label %621

597:                                              ; preds = %587
  %598 = load ptr, ptr %4, align 8, !tbaa !5
  %599 = load ptr, ptr %45, align 8, !tbaa !5
  %600 = load ptr, ptr %51, align 8, !tbaa !59
  %601 = getelementptr i8, ptr %600, i64 -24
  %602 = load i64, ptr %601, align 8
  %603 = getelementptr inbounds i8, ptr %51, i64 %602
  %604 = getelementptr inbounds %"class.ClipperLib::ClipperBase", ptr %603, i32 0, i32 3
  %605 = load i8, ptr %604, align 8, !tbaa !68, !range !32, !noundef !33
  %606 = trunc i8 %605 to i1
  %607 = call noundef zeroext i1 @_ZN10ClipperLib11SlopesEqualERKNS_5TEdgeES2_b(ptr noundef nonnull align 8 dereferenceable(136) %598, ptr noundef nonnull align 8 dereferenceable(136) %599, i1 noundef zeroext %606)
  br i1 %607, label %608, label %621

608:                                              ; preds = %597
  call void @llvm.lifetime.start.p0(i64 8, ptr %47) #5
  %609 = load ptr, ptr %45, align 8, !tbaa !5
  %610 = load ptr, ptr %4, align 8, !tbaa !5
  %611 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %610, i32 0, i32 0
  %612 = call noundef ptr @_ZN10ClipperLib7Clipper8AddOutPtEPNS_5TEdgeERKNS_8IntPointE(ptr noundef nonnull align 8 dereferenceable(135) %51, ptr noundef %609, ptr noundef nonnull align 8 dereferenceable(16) %611)
  store ptr %612, ptr %47, align 8, !tbaa !5
  %613 = load ptr, ptr %25, align 8, !tbaa !5
  %614 = load ptr, ptr %47, align 8, !tbaa !5
  %615 = load ptr, ptr %4, align 8, !tbaa !5
  %616 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %615, i32 0, i32 2
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %48, ptr align 8 %616, i64 16, i1 false), !tbaa.struct !56
  %617 = getelementptr inbounds { i64, i64 }, ptr %48, i32 0, i32 0
  %618 = load i64, ptr %617, align 8
  %619 = getelementptr inbounds { i64, i64 }, ptr %48, i32 0, i32 1
  %620 = load i64, ptr %619, align 8
  call void @_ZN10ClipperLib7Clipper7AddJoinEPNS_5OutPtES2_NS_8IntPointE(ptr noundef nonnull align 8 dereferenceable(135) %51, ptr noundef %613, ptr noundef %614, i64 %618, i64 %620)
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #5
  br label %689

621:                                              ; preds = %597, %587, %582, %577, %567, %557, %548
  %622 = load ptr, ptr %46, align 8, !tbaa !5
  %623 = icmp ne ptr %622, null
  br i1 %623, label %624, label %688

624:                                              ; preds = %621
  %625 = load ptr, ptr %46, align 8, !tbaa !5
  %626 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %625, i32 0, i32 1
  %627 = getelementptr inbounds %"struct.ClipperLib::IntPoint", ptr %626, i32 0, i32 0
  %628 = load i64, ptr %627, align 8, !tbaa !30
  %629 = load ptr, ptr %4, align 8, !tbaa !5
  %630 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %629, i32 0, i32 0
  %631 = getelementptr inbounds %"struct.ClipperLib::IntPoint", ptr %630, i32 0, i32 0
  %632 = load i64, ptr %631, align 8, !tbaa !26
  %633 = icmp eq i64 %628, %632
  br i1 %633, label %634, label %688

634:                                              ; preds = %624
  %635 = load ptr, ptr %46, align 8, !tbaa !5
  %636 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %635, i32 0, i32 1
  %637 = getelementptr inbounds %"struct.ClipperLib::IntPoint", ptr %636, i32 0, i32 1
  %638 = load i64, ptr %637, align 8, !tbaa !61
  %639 = load ptr, ptr %4, align 8, !tbaa !5
  %640 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %639, i32 0, i32 0
  %641 = getelementptr inbounds %"struct.ClipperLib::IntPoint", ptr %640, i32 0, i32 1
  %642 = load i64, ptr %641, align 8, !tbaa !34
  %643 = icmp eq i64 %638, %642
  br i1 %643, label %644, label %688

644:                                              ; preds = %634
  %645 = load ptr, ptr %46, align 8, !tbaa !5
  %646 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %645, i32 0, i32 6
  %647 = load i32, ptr %646, align 8, !tbaa !9
  %648 = icmp ne i32 %647, 0
  br i1 %648, label %649, label %688

649:                                              ; preds = %644
  %650 = load ptr, ptr %46, align 8, !tbaa !5
  %651 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %650, i32 0, i32 9
  %652 = load i32, ptr %651, align 4, !tbaa !31
  %653 = icmp sge i32 %652, 0
  br i1 %653, label %654, label %688

654:                                              ; preds = %649
  %655 = load ptr, ptr %46, align 8, !tbaa !5
  %656 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %655, i32 0, i32 1
  %657 = getelementptr inbounds %"struct.ClipperLib::IntPoint", ptr %656, i32 0, i32 1
  %658 = load i64, ptr %657, align 8, !tbaa !61
  %659 = load ptr, ptr %46, align 8, !tbaa !5
  %660 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %659, i32 0, i32 2
  %661 = getelementptr inbounds %"struct.ClipperLib::IntPoint", ptr %660, i32 0, i32 1
  %662 = load i64, ptr %661, align 8, !tbaa !67
  %663 = icmp sgt i64 %658, %662
  br i1 %663, label %664, label %688

664:                                              ; preds = %654
  %665 = load ptr, ptr %4, align 8, !tbaa !5
  %666 = load ptr, ptr %46, align 8, !tbaa !5
  %667 = load ptr, ptr %51, align 8, !tbaa !59
  %668 = getelementptr i8, ptr %667, i64 -24
  %669 = load i64, ptr %668, align 8
  %670 = getelementptr inbounds i8, ptr %51, i64 %669
  %671 = getelementptr inbounds %"class.ClipperLib::ClipperBase", ptr %670, i32 0, i32 3
  %672 = load i8, ptr %671, align 8, !tbaa !68, !range !32, !noundef !33
  %673 = trunc i8 %672 to i1
  %674 = call noundef zeroext i1 @_ZN10ClipperLib11SlopesEqualERKNS_5TEdgeES2_b(ptr noundef nonnull align 8 dereferenceable(136) %665, ptr noundef nonnull align 8 dereferenceable(136) %666, i1 noundef zeroext %673)
  br i1 %674, label %675, label %688

675:                                              ; preds = %664
  call void @llvm.lifetime.start.p0(i64 8, ptr %49) #5
  %676 = load ptr, ptr %46, align 8, !tbaa !5
  %677 = load ptr, ptr %4, align 8, !tbaa !5
  %678 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %677, i32 0, i32 0
  %679 = call noundef ptr @_ZN10ClipperLib7Clipper8AddOutPtEPNS_5TEdgeERKNS_8IntPointE(ptr noundef nonnull align 8 dereferenceable(135) %51, ptr noundef %676, ptr noundef nonnull align 8 dereferenceable(16) %678)
  store ptr %679, ptr %49, align 8, !tbaa !5
  %680 = load ptr, ptr %25, align 8, !tbaa !5
  %681 = load ptr, ptr %49, align 8, !tbaa !5
  %682 = load ptr, ptr %4, align 8, !tbaa !5
  %683 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %682, i32 0, i32 2
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %50, ptr align 8 %683, i64 16, i1 false), !tbaa.struct !56
  %684 = getelementptr inbounds { i64, i64 }, ptr %50, i32 0, i32 0
  %685 = load i64, ptr %684, align 8
  %686 = getelementptr inbounds { i64, i64 }, ptr %50, i32 0, i32 1
  %687 = load i64, ptr %686, align 8
  call void @_ZN10ClipperLib7Clipper7AddJoinEPNS_5OutPtES2_NS_8IntPointE(ptr noundef nonnull align 8 dereferenceable(135) %51, ptr noundef %680, ptr noundef %681, i64 %685, i64 %687)
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #5
  br label %688

688:                                              ; preds = %675, %664, %654, %649, %644, %634, %624, %621
  br label %689

689:                                              ; preds = %688, %608
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #5
  br label %695

690:                                              ; preds = %529
  %691 = load ptr, ptr %51, align 8, !tbaa !59
  %692 = getelementptr i8, ptr %691, i64 -24
  %693 = load i64, ptr %692, align 8
  %694 = getelementptr inbounds i8, ptr %51, i64 %693
  call void @_ZN10ClipperLib11ClipperBase17UpdateEdgeIntoAELERPNS_5TEdgeE(ptr noundef nonnull align 8 dereferenceable(144) %694, ptr noundef nonnull align 8 dereferenceable(8) %4)
  br label %695

695:                                              ; preds = %690, %689
  br label %712

696:                                              ; preds = %524
  %697 = load ptr, ptr %4, align 8, !tbaa !5
  %698 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %697, i32 0, i32 9
  %699 = load i32, ptr %698, align 4, !tbaa !31
  %700 = icmp sge i32 %699, 0
  br i1 %700, label %701, label %706

701:                                              ; preds = %696
  %702 = load ptr, ptr %4, align 8, !tbaa !5
  %703 = load ptr, ptr %4, align 8, !tbaa !5
  %704 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %703, i32 0, i32 2
  %705 = call noundef ptr @_ZN10ClipperLib7Clipper8AddOutPtEPNS_5TEdgeERKNS_8IntPointE(ptr noundef nonnull align 8 dereferenceable(135) %51, ptr noundef %702, ptr noundef nonnull align 8 dereferenceable(16) %704)
  br label %706

706:                                              ; preds = %701, %696
  %707 = load ptr, ptr %51, align 8, !tbaa !59
  %708 = getelementptr i8, ptr %707, i64 -24
  %709 = load i64, ptr %708, align 8
  %710 = getelementptr inbounds i8, ptr %51, i64 %709
  %711 = load ptr, ptr %4, align 8, !tbaa !5
  call void @_ZN10ClipperLib11ClipperBase13DeleteFromAELEPNS_5TEdgeE(ptr noundef nonnull align 8 dereferenceable(144) %710, ptr noundef %711)
  br label %712

712:                                              ; preds = %706, %695
  store i32 0, ptr %37, align 4
  br label %713

713:                                              ; preds = %712, %547, %459
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #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
  %714 = load i32, ptr %37, align 4
  switch i32 %714, label %716 [
    i32 0, label %715
    i32 1, label %715
  ]

715:                                              ; preds = %713, %713
  ret void

716:                                              ; preds = %713
  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 noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt20_List_const_iteratorIxEppEv(ptr noundef nonnull align 8 dereferenceable(8)) #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 noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt16reverse_iteratorISt20_List_const_iteratorIxEEppEv(ptr noundef nonnull align 8 dereferenceable(8)) #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.46", align 8
  %20 = alloca %"class.std::reverse_iterator.46", align 8
  %21 = alloca %"struct.std::_List_const_iterator", align 8
  %22 = alloca %"struct.std::_List_iterator", align 8
  %23 = alloca %"struct.ClipperLib::IntPoint", align 8
  %24 = alloca %"class.std::reverse_iterator.46", align 8
  %25 = alloca %"struct.ClipperLib::IntPoint", align 8
  %26 = alloca %"struct.ClipperLib::IntPoint", align 8
  %27 = 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
  %28 = getelementptr inbounds i8, ptr %1, i64 64
  %29 = load i32, ptr %28, align 8, !tbaa !9
  %30 = icmp eq i32 %29, 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 %31

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

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

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

.critedge.thread:                                 ; preds = %31, %.critedge
  %36 = call noundef ptr @_ZN10ClipperLib13GetMaximaPairEPNS_5TEdgeE(ptr noundef nonnull %.0)
  br label %37

37:                                               ; preds = %.critedge.thread, %.critedge
  %.098 = phi ptr [ null, %.critedge ], [ %36, %.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
  %38 = getelementptr inbounds i8, ptr %0, i64 88
  %39 = call noundef i64 @_ZNKSt7__cxx114listIxSaIxEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %38) #4
  %.not112 = icmp eq i64 %39, 0
  br i1 %.not112, label %85, label %40

40:                                               ; preds = %37
  %41 = load i32, ptr %4, align 4, !tbaa !20
  %42 = icmp eq i32 %41, 1
  br i1 %42, label %43, label %66

43:                                               ; preds = %40
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %9) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %10) #4
  %44 = call ptr @_ZNSt7__cxx114listIxSaIxEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %38) #4
  store ptr %44, 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
  %45 = load i64, ptr %9, align 8, !tbaa !5
  store i64 %45, 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
  %46 = call ptr @_ZNSt7__cxx114listIxSaIxEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %38) #4
  store ptr %46, 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
  %47 = 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 %47, label %.lr.ph152, label %.critedge2

.lr.ph152:                                        ; preds = %43, %52
  %48 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt20_List_const_iteratorIxEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %7) #4
  %49 = load i64, ptr %48, align 8, !tbaa !22
  %50 = load ptr, ptr %3, align 8, !tbaa !5
  %51 = load i64, ptr %50, align 8, !tbaa !23
  %.not114 = icmp sgt i64 %49, %51
  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 %.not114, label %.loopexit145, label %52

52:                                               ; preds = %.lr.ph152
  %53 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt20_List_const_iteratorIxEppEv(ptr noundef nonnull align 8 dereferenceable(8) %7) #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
  %54 = call ptr @_ZNSt7__cxx114listIxSaIxEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %38) #4
  store ptr %54, 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
  %55 = 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 %55, label %.lr.ph152, label %.critedge2, !llvm.loop !24

.critedge2:                                       ; preds = %52, %43
  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 %.loopexit145

.loopexit145:                                     ; preds = %.lr.ph152, %.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
  %56 = call ptr @_ZNSt7__cxx114listIxSaIxEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %38) #4
  store ptr %56, 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
  %57 = 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 %57, label %58, label %.critedge4

58:                                               ; preds = %.loopexit145
  %59 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt20_List_const_iteratorIxEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %7) #4
  %60 = load i64, ptr %59, align 8, !tbaa !22
  %61 = getelementptr inbounds i8, ptr %.0, i64 32
  %62 = load i64, ptr %61, align 8, !tbaa !25
  %.not115 = icmp slt i64 %60, %62
  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 %.not115, label %85, label %63

63:                                               ; preds = %58
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %15) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %16) #4
  %64 = call ptr @_ZNSt7__cxx114listIxSaIxEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %38) #4
  store ptr %64, 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
  %65 = load i64, ptr %15, align 8, !tbaa !5
  store i64 %65, 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 %85

.critedge4:                                       ; preds = %.loopexit145
  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 %85

66:                                               ; preds = %40
  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) %38) #4
  %67 = 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) %38) #4
  %68 = 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 %68, label %.lr.ph, label %.critedge6

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

74:                                               ; preds = %.lr.ph
  %75 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt16reverse_iteratorISt20_List_const_iteratorIxEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %8)
  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) %38) #4
  %76 = 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 %76, label %.lr.ph, label %.critedge6, !llvm.loop !26

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

.loopexit146:                                     ; preds = %.lr.ph, %.critedge6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %19) #4
  call void @_ZNSt7__cxx114listIxSaIxEE4rendEv(ptr dead_on_unwind nonnull writable sret(%"class.std::reverse_iterator.46") align 8 %19, ptr noundef nonnull align 8 dereferenceable(24) %38) #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) %19)
  br i1 %77, label %78, label %.critedge8

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

83:                                               ; preds = %78
  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) %38) #4
  %84 = 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) %20) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %20) #4
  br label %85

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

85:                                               ; preds = %.critedge4, %63, %58, %.critedge8, %83, %78, %37
  %86 = getelementptr inbounds i8, ptr %0, i64 112
  br label %87

87:                                               ; preds = %243, %85
  %.099 = phi ptr [ null, %85 ], [ %.1.lcssa, %243 ]
  %88 = load ptr, ptr %3, align 8, !tbaa !5
  %89 = icmp ne ptr %88, %.0
  %90 = load i32, ptr %4, align 4, !tbaa !20
  %91 = call noundef ptr @_ZN10ClipperLib12GetNextInAELEPNS_5TEdgeENS_9DirectionE(ptr noundef %88, i32 noundef %90)
  %.not116159 = icmp eq ptr %91, null
  br i1 %.not116159, label %._crit_edge164, label %.lr.ph163

.lr.ph163:                                        ; preds = %87, %219
  %.1161 = phi ptr [ %.2, %219 ], [ %.099, %87 ]
  %.0100160 = phi ptr [ %221, %219 ], [ %91, %87 ]
  %92 = call noundef i64 @_ZNKSt7__cxx114listIxSaIxEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %38) #4
  %.not117 = icmp eq i64 %92, 0
  br i1 %.not117, label %.loopexit, label %93

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

.preheader143:                                    ; preds = %93
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %24) #4
  call void @_ZNSt7__cxx114listIxSaIxEE4rendEv(ptr dead_on_unwind nonnull writable sret(%"class.std::reverse_iterator.46") align 8 %24, ptr noundef nonnull align 8 dereferenceable(24) %38) #4
  %96 = 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) %24)
  br i1 %96, label %.lr.ph153, label %.critedge12

.lr.ph153:                                        ; preds = %.preheader143
  %97 = getelementptr inbounds i8, ptr %.0100160, i64 16
  br label %122

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

.lr.ph154:                                        ; preds = %.preheader
  %100 = getelementptr inbounds i8, ptr %.0100160, i64 16
  br label %101

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

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

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

118:                                              ; preds = %106, %111
  %119 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt20_List_const_iteratorIxEppEv(ptr noundef nonnull align 8 dereferenceable(8) %7) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %21) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %22) #4
  %120 = call ptr @_ZNSt7__cxx114listIxSaIxEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %38) #4
  store ptr %120, ptr %22, align 8
  call void @_ZNSt20_List_const_iteratorIxEC2ERKSt14_List_iteratorIxE(ptr noundef nonnull align 8 dereferenceable(8) %21, ptr noundef nonnull align 8 dereferenceable(8) %22) #4
  %121 = call noundef zeroext i1 @_ZStneRKSt20_List_const_iteratorIxES2_(ptr noundef nonnull align 8 dereferenceable(8) %7, ptr noundef nonnull align 8 dereferenceable(8) %21) #4
  br i1 %121, label %101, label %.critedge10, !llvm.loop !30

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

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

127:                                              ; preds = %122
  %128 = load ptr, ptr %3, align 8, !tbaa !5
  %129 = getelementptr inbounds i8, ptr %128, i64 76
  %130 = load i32, ptr %129, align 4, !tbaa !28
  %131 = icmp slt i32 %130, 0
  %brmerge129 = select i1 %131, i1 true, i1 %30
  br i1 %brmerge129, label %139, label %132

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

139:                                              ; preds = %127, %132
  %140 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt16reverse_iteratorISt20_List_const_iteratorIxEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %8)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %24) #4
  call void @_ZNSt7__cxx114listIxSaIxEE4rendEv(ptr dead_on_unwind nonnull writable sret(%"class.std::reverse_iterator.46") align 8 %24, ptr noundef nonnull align 8 dereferenceable(24) %38) #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) %24)
  br i1 %141, label %122, label %.critedge12, !llvm.loop !31

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

.loopexit:                                        ; preds = %122, %101, %.critedge10, %.critedge12, %.lr.ph163
  %142 = load i32, ptr %4, align 4, !tbaa !20
  %.phi.trans.insert = getelementptr inbounds i8, ptr %.0100160, 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_edge164, 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_edge164, label %.thread

.thread:                                          ; preds = %.loopexit, %143, %146
  %149 = getelementptr inbounds i8, ptr %.0100160, 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
  %.not118 = icmp eq ptr %156, null
  br i1 %.not118, label %163, label %157

157:                                              ; preds = %154
  %158 = getelementptr inbounds i8, ptr %.0100160, 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_edge164, 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
  %brmerge131 = select i1 %166, i1 true, i1 %30
  br i1 %brmerge131, 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)
  %.0101155 = load ptr, ptr %86, align 8, !tbaa !5
  %.not119156 = icmp eq ptr %.0101155, null
  br i1 %.not119156, label %._crit_edge, label %.lr.ph158

.lr.ph158:                                        ; preds = %167, %183
  %.0101157 = phi ptr [ %.0101, %183 ], [ %.0101155, %167 ]
  %169 = getelementptr inbounds i8, ptr %.0101157, 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.ph158
  %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 %.0101157, align 8, !tbaa !23
  %178 = getelementptr inbounds i8, ptr %.0101157, 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 %.0101157)
  %.sroa.050.0.copyload = load i64, ptr %178, align 8, !tbaa !22
  %.sroa.251.0..sroa_idx = getelementptr inbounds i8, ptr %.0101157, 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.ph158
  %184 = getelementptr inbounds i8, ptr %.0101157, i64 120
  %.0101 = load ptr, ptr %184, align 8, !tbaa !5
  %.not119 = icmp eq ptr %.0101, null
  br i1 %.not119, label %._crit_edge, label %.lr.ph158, !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 ], [ %.1161, %163 ]
  %187 = icmp ne ptr %.0100160, %.098
  %brmerge134 = or i1 %89, %187
  br i1 %brmerge134, 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 %.thread140

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 %.098, ptr noundef nonnull align 8 dereferenceable(16) %194)
  %.pre182 = load ptr, ptr %3, align 8, !tbaa !5
  br label %.thread140

.thread140:                                       ; preds = %188, %193
  %195 = phi ptr [ %189, %188 ], [ %.pre182, %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 %.098)
  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 %26) #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) %26, 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 %.0100160, ptr noundef nonnull align 8 dereferenceable(16) %26)
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %26) #4
  br label %219

213:                                              ; preds = %204
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %27) #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) %27, 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 %.0100160, ptr noundef %218, ptr noundef nonnull align 8 dereferenceable(16) %27)
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %27) #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 %.0100160, 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 %.0100160)
  %.not116 = icmp eq ptr %221, null
  br i1 %.not116, label %._crit_edge164, label %.lr.ph163, !llvm.loop !37

._crit_edge164:                                   ; preds = %219, %146, %143, %157, %87
  %.1.lcssa = phi ptr [ %.099, %87 ], [ %.1161, %157 ], [ %.1161, %143 ], [ %.1161, %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
  %.not120 = icmp eq ptr %229, null
  br i1 %.not120, label %split, label %230

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

._crit_edge184:                                   ; preds = %230
  %.pre185 = 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)
  %.pre183 = load ptr, ptr %3, align 8, !tbaa !5
  br label %243

243:                                              ; preds = %232, %241
  %244 = phi ptr [ %237, %232 ], [ %.pre183, %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 %87

split:                                            ; preds = %._crit_edge164, %._crit_edge184
  %245 = phi ptr [ %.pre185, %._crit_edge184 ], [ %227, %._crit_edge164 ]
  %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)
  %.0103171 = load ptr, ptr %86, align 8, !tbaa !5
  %.not121172 = icmp eq ptr %.0103171, null
  br i1 %.not121172, label %._crit_edge176, label %.lr.ph175

.lr.ph175:                                        ; preds = %250, %266
  %.0103173 = phi ptr [ %.0103, %266 ], [ %.0103171, %250 ]
  %252 = getelementptr inbounds i8, ptr %.0103173, 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.ph175
  %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 %.0103173, align 8, !tbaa !23
  %261 = getelementptr inbounds i8, ptr %.0103173, 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 %.0103173)
  %.sroa.037.0.copyload = load i64, ptr %261, align 8, !tbaa !22
  %.sroa.238.0..sroa_idx = getelementptr inbounds i8, ptr %.0103173, 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.ph175
  %267 = getelementptr inbounds i8, ptr %.0103173, i64 120
  %.0103 = load ptr, ptr %267, align 8, !tbaa !5
  %.not121 = icmp eq ptr %.0103, null
  br i1 %.not121, label %._crit_edge176, label %.lr.ph175, !llvm.loop !38

._crit_edge176:                                   ; 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)
  %.pre186 = load ptr, ptr %3, align 8, !tbaa !5
  br label %270

270:                                              ; preds = %._crit_edge176, %split
  %271 = phi ptr [ %.pre186, %._crit_edge176 ], [ %245, %split ]
  %272 = getelementptr inbounds i8, ptr %271, i64 96
  %273 = load ptr, ptr %272, align 8, !tbaa !17
  %.not122 = 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 %.not122, 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
  %.not123 = icmp eq ptr %291, null
  br i1 %.not123, 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
  %.not124 = icmp eq i32 %307, 0
  br i1 %.not124, 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
  %.not125 = icmp eq ptr %293, null
  br i1 %.not125, 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
  %.not126 = icmp eq i32 %345, 0
  br i1 %.not126, 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)
  %.pre187 = load ptr, ptr %3, align 8, !tbaa !5
  br label %377

377:                                              ; preds = %374, %373
  %378 = phi ptr [ %.pre187, %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 = %.thread140, %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 noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt20_List_const_iteratorIxEppEv(ptr noundef nonnull align 8 dereferenceable(8)) 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 noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt16reverse_iteratorISt20_List_const_iteratorIxEEppEv(ptr noundef nonnull align 8 dereferenceable(8)) 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