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

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

%"struct.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 }
%"struct.ClipperLib::IntPoint" = type { i64, i64 }
%"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: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZN10ClipperLib3AbsEx(i64 noundef) #1

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN10ClipperLib7Clipper14IntersectEdgesEPNS_5TEdgeES2_RNS_8IntPointE(ptr noundef nonnull align 8 dereferenceable(135) %0, ptr noundef %1, ptr noundef %2, ptr noundef nonnull align 8 dereferenceable(16) %3) #3 align 2 {
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca i8, align 1
  %10 = alloca i8, align 1
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca i64, align 8
  %18 = alloca i64, align 8
  %19 = alloca i64, align 8
  %20 = alloca i64, align 8
  store ptr %0, ptr %5, align 8, !tbaa !5
  store ptr %1, ptr %6, align 8, !tbaa !5
  store ptr %2, ptr %7, align 8, !tbaa !5
  store ptr %3, ptr %8, align 8, !tbaa !5
  %21 = load ptr, ptr %5, align 8
  call void @llvm.lifetime.start.p0(i64 1, ptr %9) #5
  %22 = load ptr, ptr %6, align 8, !tbaa !5
  %23 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %22, i32 0, i32 9
  %24 = load i32, ptr %23, align 4, !tbaa !9
  %25 = icmp sge i32 %24, 0
  %26 = zext i1 %25 to i8
  store i8 %26, ptr %9, align 1, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 1, ptr %10) #5
  %27 = load ptr, ptr %7, align 8, !tbaa !5
  %28 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %27, i32 0, i32 9
  %29 = load i32, ptr %28, align 4, !tbaa !9
  %30 = icmp sge i32 %29, 0
  %31 = zext i1 %30 to i8
  store i8 %31, ptr %10, align 1, !tbaa !17
  %32 = load ptr, ptr %6, align 8, !tbaa !5
  %33 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %32, i32 0, i32 6
  %34 = load i32, ptr %33, align 8, !tbaa !19
  %35 = icmp eq i32 %34, 0
  br i1 %35, label %41, label %36

36:                                               ; preds = %4
  %37 = load ptr, ptr %7, align 8, !tbaa !5
  %38 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %37, i32 0, i32 6
  %39 = load i32, ptr %38, align 8, !tbaa !19
  %40 = icmp eq i32 %39, 0
  br i1 %40, label %41, label %179

41:                                               ; preds = %36, %4
  %42 = load ptr, ptr %6, align 8, !tbaa !5
  %43 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %42, i32 0, i32 6
  %44 = load i32, ptr %43, align 8, !tbaa !19
  %45 = icmp eq i32 %44, 0
  br i1 %45, label %46, label %52

46:                                               ; preds = %41
  %47 = load ptr, ptr %7, align 8, !tbaa !5
  %48 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %47, i32 0, i32 6
  %49 = load i32, ptr %48, align 8, !tbaa !19
  %50 = icmp eq i32 %49, 0
  br i1 %50, label %51, label %52

51:                                               ; preds = %46
  store i32 1, ptr %11, align 4
  br label %582

52:                                               ; preds = %46, %41
  %53 = load ptr, ptr %6, align 8, !tbaa !5
  %54 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %53, i32 0, i32 4
  %55 = load i32, ptr %54, align 8, !tbaa !20
  %56 = load ptr, ptr %7, align 8, !tbaa !5
  %57 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %56, i32 0, i32 4
  %58 = load i32, ptr %57, align 8, !tbaa !20
  %59 = icmp eq i32 %55, %58
  br i1 %59, label %60, label %106

60:                                               ; preds = %52
  %61 = load ptr, ptr %6, align 8, !tbaa !5
  %62 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %61, i32 0, i32 6
  %63 = load i32, ptr %62, align 8, !tbaa !19
  %64 = load ptr, ptr %7, align 8, !tbaa !5
  %65 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %64, i32 0, i32 6
  %66 = load i32, ptr %65, align 8, !tbaa !19
  %67 = icmp ne i32 %63, %66
  br i1 %67, label %68, label %106

68:                                               ; preds = %60
  %69 = getelementptr inbounds %"class.ClipperLib::Clipper", ptr %21, i32 0, i32 4
  %70 = load i32, ptr %69, align 8, !tbaa !21
  %71 = icmp eq i32 %70, 1
  br i1 %71, label %72, label %106

72:                                               ; preds = %68
  %73 = load ptr, ptr %6, align 8, !tbaa !5
  %74 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %73, i32 0, i32 6
  %75 = load i32, ptr %74, align 8, !tbaa !19
  %76 = icmp eq i32 %75, 0
  br i1 %76, label %77, label %91

77:                                               ; preds = %72
  %78 = load i8, ptr %10, align 1, !tbaa !17, !range !39, !noundef !40
  %79 = trunc i8 %78 to i1
  br i1 %79, label %80, label %90

80:                                               ; preds = %77
  %81 = load ptr, ptr %6, align 8, !tbaa !5
  %82 = load ptr, ptr %8, align 8, !tbaa !5
  %83 = call noundef ptr @_ZN10ClipperLib7Clipper8AddOutPtEPNS_5TEdgeERKNS_8IntPointE(ptr noundef nonnull align 8 dereferenceable(135) %21, ptr noundef %81, ptr noundef nonnull align 8 dereferenceable(16) %82)
  %84 = load i8, ptr %9, align 1, !tbaa !17, !range !39, !noundef !40
  %85 = trunc i8 %84 to i1
  br i1 %85, label %86, label %89

86:                                               ; preds = %80
  %87 = load ptr, ptr %6, align 8, !tbaa !5
  %88 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %87, i32 0, i32 9
  store i32 -1, ptr %88, align 4, !tbaa !9
  br label %89

89:                                               ; preds = %86, %80
  br label %90

90:                                               ; preds = %89, %77
  br label %105

91:                                               ; preds = %72
  %92 = load i8, ptr %9, align 1, !tbaa !17, !range !39, !noundef !40
  %93 = trunc i8 %92 to i1
  br i1 %93, label %94, label %104

94:                                               ; preds = %91
  %95 = load ptr, ptr %7, align 8, !tbaa !5
  %96 = load ptr, ptr %8, align 8, !tbaa !5
  %97 = call noundef ptr @_ZN10ClipperLib7Clipper8AddOutPtEPNS_5TEdgeERKNS_8IntPointE(ptr noundef nonnull align 8 dereferenceable(135) %21, ptr noundef %95, ptr noundef nonnull align 8 dereferenceable(16) %96)
  %98 = load i8, ptr %10, align 1, !tbaa !17, !range !39, !noundef !40
  %99 = trunc i8 %98 to i1
  br i1 %99, label %100, label %103

100:                                              ; preds = %94
  %101 = load ptr, ptr %7, align 8, !tbaa !5
  %102 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %101, i32 0, i32 9
  store i32 -1, ptr %102, align 4, !tbaa !9
  br label %103

103:                                              ; preds = %100, %94
  br label %104

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

105:                                              ; preds = %104, %90
  br label %177

106:                                              ; preds = %68, %60, %52
  %107 = load ptr, ptr %6, align 8, !tbaa !5
  %108 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %107, i32 0, i32 4
  %109 = load i32, ptr %108, align 8, !tbaa !20
  %110 = load ptr, ptr %7, align 8, !tbaa !5
  %111 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %110, i32 0, i32 4
  %112 = load i32, ptr %111, align 8, !tbaa !20
  %113 = icmp ne i32 %109, %112
  br i1 %113, label %114, label %176

114:                                              ; preds = %106
  %115 = load ptr, ptr %6, align 8, !tbaa !5
  %116 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %115, i32 0, i32 6
  %117 = load i32, ptr %116, align 8, !tbaa !19
  %118 = icmp eq i32 %117, 0
  br i1 %118, label %119, label %144

119:                                              ; preds = %114
  %120 = load ptr, ptr %7, align 8, !tbaa !5
  %121 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %120, i32 0, i32 7
  %122 = load i32, ptr %121, align 4, !tbaa !41
  %123 = call i32 @llvm.abs.i32(i32 %122, i1 true)
  %124 = icmp eq i32 %123, 1
  br i1 %124, label %125, label %144

125:                                              ; preds = %119
  %126 = getelementptr inbounds %"class.ClipperLib::Clipper", ptr %21, i32 0, i32 4
  %127 = load i32, ptr %126, align 8, !tbaa !21
  %128 = icmp ne i32 %127, 1
  br i1 %128, label %134, label %129

129:                                              ; preds = %125
  %130 = load ptr, ptr %7, align 8, !tbaa !5
  %131 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %130, i32 0, i32 8
  %132 = load i32, ptr %131, align 8, !tbaa !42
  %133 = icmp eq i32 %132, 0
  br i1 %133, label %134, label %144

134:                                              ; preds = %129, %125
  %135 = load ptr, ptr %6, align 8, !tbaa !5
  %136 = load ptr, ptr %8, align 8, !tbaa !5
  %137 = call noundef ptr @_ZN10ClipperLib7Clipper8AddOutPtEPNS_5TEdgeERKNS_8IntPointE(ptr noundef nonnull align 8 dereferenceable(135) %21, ptr noundef %135, ptr noundef nonnull align 8 dereferenceable(16) %136)
  %138 = load i8, ptr %9, align 1, !tbaa !17, !range !39, !noundef !40
  %139 = trunc i8 %138 to i1
  br i1 %139, label %140, label %143

140:                                              ; preds = %134
  %141 = load ptr, ptr %6, align 8, !tbaa !5
  %142 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %141, i32 0, i32 9
  store i32 -1, ptr %142, align 4, !tbaa !9
  br label %143

143:                                              ; preds = %140, %134
  br label %175

144:                                              ; preds = %129, %119, %114
  %145 = load ptr, ptr %7, align 8, !tbaa !5
  %146 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %145, i32 0, i32 6
  %147 = load i32, ptr %146, align 8, !tbaa !19
  %148 = icmp eq i32 %147, 0
  br i1 %148, label %149, label %174

149:                                              ; preds = %144
  %150 = load ptr, ptr %6, align 8, !tbaa !5
  %151 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %150, i32 0, i32 7
  %152 = load i32, ptr %151, align 4, !tbaa !41
  %153 = call i32 @llvm.abs.i32(i32 %152, i1 true)
  %154 = icmp eq i32 %153, 1
  br i1 %154, label %155, label %174

155:                                              ; preds = %149
  %156 = getelementptr inbounds %"class.ClipperLib::Clipper", ptr %21, i32 0, i32 4
  %157 = load i32, ptr %156, align 8, !tbaa !21
  %158 = icmp ne i32 %157, 1
  br i1 %158, label %164, label %159

159:                                              ; preds = %155
  %160 = load ptr, ptr %6, align 8, !tbaa !5
  %161 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %160, i32 0, i32 8
  %162 = load i32, ptr %161, align 8, !tbaa !42
  %163 = icmp eq i32 %162, 0
  br i1 %163, label %164, label %174

164:                                              ; preds = %159, %155
  %165 = load ptr, ptr %7, align 8, !tbaa !5
  %166 = load ptr, ptr %8, align 8, !tbaa !5
  %167 = call noundef ptr @_ZN10ClipperLib7Clipper8AddOutPtEPNS_5TEdgeERKNS_8IntPointE(ptr noundef nonnull align 8 dereferenceable(135) %21, ptr noundef %165, ptr noundef nonnull align 8 dereferenceable(16) %166)
  %168 = load i8, ptr %10, align 1, !tbaa !17, !range !39, !noundef !40
  %169 = trunc i8 %168 to i1
  br i1 %169, label %170, label %173

170:                                              ; preds = %164
  %171 = load ptr, ptr %7, align 8, !tbaa !5
  %172 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %171, i32 0, i32 9
  store i32 -1, ptr %172, align 4, !tbaa !9
  br label %173

173:                                              ; preds = %170, %164
  br label %174

174:                                              ; preds = %173, %159, %149, %144
  br label %175

175:                                              ; preds = %174, %143
  br label %176

176:                                              ; preds = %175, %106
  br label %177

177:                                              ; preds = %176, %105
  br label %178

178:                                              ; preds = %177
  store i32 1, ptr %11, align 4
  br label %582

179:                                              ; preds = %36
  %180 = load ptr, ptr %6, align 8, !tbaa !5
  %181 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %180, i32 0, i32 4
  %182 = load i32, ptr %181, align 8, !tbaa !20
  %183 = load ptr, ptr %7, align 8, !tbaa !5
  %184 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %183, i32 0, i32 4
  %185 = load i32, ptr %184, align 8, !tbaa !20
  %186 = icmp eq i32 %182, %185
  br i1 %186, label %187, label %252

187:                                              ; preds = %179
  %188 = load ptr, ptr %6, align 8, !tbaa !5
  %189 = call noundef zeroext i1 @_ZNK10ClipperLib7Clipper17IsEvenOddFillTypeERKNS_5TEdgeE(ptr noundef nonnull align 8 dereferenceable(135) %21, ptr noundef nonnull align 8 dereferenceable(136) %188)
  br i1 %189, label %190, label %202

190:                                              ; preds = %187
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #5
  %191 = load ptr, ptr %6, align 8, !tbaa !5
  %192 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %191, i32 0, i32 7
  %193 = load i32, ptr %192, align 4, !tbaa !41
  store i32 %193, ptr %12, align 4, !tbaa !43
  %194 = load ptr, ptr %7, align 8, !tbaa !5
  %195 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %194, i32 0, i32 7
  %196 = load i32, ptr %195, align 4, !tbaa !41
  %197 = load ptr, ptr %6, align 8, !tbaa !5
  %198 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %197, i32 0, i32 7
  store i32 %196, ptr %198, align 4, !tbaa !41
  %199 = load i32, ptr %12, align 4, !tbaa !43
  %200 = load ptr, ptr %7, align 8, !tbaa !5
  %201 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %200, i32 0, i32 7
  store i32 %199, ptr %201, align 4, !tbaa !41
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #5
  br label %251

202:                                              ; preds = %187
  %203 = load ptr, ptr %6, align 8, !tbaa !5
  %204 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %203, i32 0, i32 7
  %205 = load i32, ptr %204, align 4, !tbaa !41
  %206 = load ptr, ptr %7, align 8, !tbaa !5
  %207 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %206, i32 0, i32 6
  %208 = load i32, ptr %207, align 8, !tbaa !19
  %209 = add nsw i32 %205, %208
  %210 = icmp eq i32 %209, 0
  br i1 %210, label %211, label %218

211:                                              ; preds = %202
  %212 = load ptr, ptr %6, align 8, !tbaa !5
  %213 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %212, i32 0, i32 7
  %214 = load i32, ptr %213, align 4, !tbaa !41
  %215 = sub nsw i32 0, %214
  %216 = load ptr, ptr %6, align 8, !tbaa !5
  %217 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %216, i32 0, i32 7
  store i32 %215, ptr %217, align 4, !tbaa !41
  br label %226

218:                                              ; preds = %202
  %219 = load ptr, ptr %7, align 8, !tbaa !5
  %220 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %219, i32 0, i32 6
  %221 = load i32, ptr %220, align 8, !tbaa !19
  %222 = load ptr, ptr %6, align 8, !tbaa !5
  %223 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %222, i32 0, i32 7
  %224 = load i32, ptr %223, align 4, !tbaa !41
  %225 = add nsw i32 %224, %221
  store i32 %225, ptr %223, align 4, !tbaa !41
  br label %226

226:                                              ; preds = %218, %211
  %227 = load ptr, ptr %7, align 8, !tbaa !5
  %228 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %227, i32 0, i32 7
  %229 = load i32, ptr %228, align 4, !tbaa !41
  %230 = load ptr, ptr %6, align 8, !tbaa !5
  %231 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %230, i32 0, i32 6
  %232 = load i32, ptr %231, align 8, !tbaa !19
  %233 = sub nsw i32 %229, %232
  %234 = icmp eq i32 %233, 0
  br i1 %234, label %235, label %242

235:                                              ; preds = %226
  %236 = load ptr, ptr %7, align 8, !tbaa !5
  %237 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %236, i32 0, i32 7
  %238 = load i32, ptr %237, align 4, !tbaa !41
  %239 = sub nsw i32 0, %238
  %240 = load ptr, ptr %7, align 8, !tbaa !5
  %241 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %240, i32 0, i32 7
  store i32 %239, ptr %241, align 4, !tbaa !41
  br label %250

242:                                              ; preds = %226
  %243 = load ptr, ptr %6, align 8, !tbaa !5
  %244 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %243, i32 0, i32 6
  %245 = load i32, ptr %244, align 8, !tbaa !19
  %246 = load ptr, ptr %7, align 8, !tbaa !5
  %247 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %246, i32 0, i32 7
  %248 = load i32, ptr %247, align 4, !tbaa !41
  %249 = sub nsw i32 %248, %245
  store i32 %249, ptr %247, align 4, !tbaa !41
  br label %250

250:                                              ; preds = %242, %235
  br label %251

251:                                              ; preds = %250, %190
  br label %293

252:                                              ; preds = %179
  %253 = load ptr, ptr %7, align 8, !tbaa !5
  %254 = call noundef zeroext i1 @_ZNK10ClipperLib7Clipper17IsEvenOddFillTypeERKNS_5TEdgeE(ptr noundef nonnull align 8 dereferenceable(135) %21, ptr noundef nonnull align 8 dereferenceable(136) %253)
  br i1 %254, label %263, label %255

255:                                              ; preds = %252
  %256 = load ptr, ptr %7, align 8, !tbaa !5
  %257 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %256, i32 0, i32 6
  %258 = load i32, ptr %257, align 8, !tbaa !19
  %259 = load ptr, ptr %6, align 8, !tbaa !5
  %260 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %259, i32 0, i32 8
  %261 = load i32, ptr %260, align 8, !tbaa !42
  %262 = add nsw i32 %261, %258
  store i32 %262, ptr %260, align 8, !tbaa !42
  br label %272

263:                                              ; preds = %252
  %264 = load ptr, ptr %6, align 8, !tbaa !5
  %265 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %264, i32 0, i32 8
  %266 = load i32, ptr %265, align 8, !tbaa !42
  %267 = icmp eq i32 %266, 0
  %268 = zext i1 %267 to i64
  %269 = select i1 %267, i32 1, i32 0
  %270 = load ptr, ptr %6, align 8, !tbaa !5
  %271 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %270, i32 0, i32 8
  store i32 %269, ptr %271, align 8, !tbaa !42
  br label %272

272:                                              ; preds = %263, %255
  %273 = load ptr, ptr %6, align 8, !tbaa !5
  %274 = call noundef zeroext i1 @_ZNK10ClipperLib7Clipper17IsEvenOddFillTypeERKNS_5TEdgeE(ptr noundef nonnull align 8 dereferenceable(135) %21, ptr noundef nonnull align 8 dereferenceable(136) %273)
  br i1 %274, label %283, label %275

275:                                              ; preds = %272
  %276 = load ptr, ptr %6, align 8, !tbaa !5
  %277 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %276, i32 0, i32 6
  %278 = load i32, ptr %277, align 8, !tbaa !19
  %279 = load ptr, ptr %7, align 8, !tbaa !5
  %280 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %279, i32 0, i32 8
  %281 = load i32, ptr %280, align 8, !tbaa !42
  %282 = sub nsw i32 %281, %278
  store i32 %282, ptr %280, align 8, !tbaa !42
  br label %292

283:                                              ; preds = %272
  %284 = load ptr, ptr %7, align 8, !tbaa !5
  %285 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %284, i32 0, i32 8
  %286 = load i32, ptr %285, align 8, !tbaa !42
  %287 = icmp eq i32 %286, 0
  %288 = zext i1 %287 to i64
  %289 = select i1 %287, i32 1, i32 0
  %290 = load ptr, ptr %7, align 8, !tbaa !5
  %291 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %290, i32 0, i32 8
  store i32 %289, ptr %291, align 8, !tbaa !42
  br label %292

292:                                              ; preds = %283, %275
  br label %293

293:                                              ; preds = %292, %251
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #5
  %294 = load ptr, ptr %6, align 8, !tbaa !5
  %295 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %294, i32 0, i32 4
  %296 = load i32, ptr %295, align 8, !tbaa !20
  %297 = icmp eq i32 %296, 0
  br i1 %297, label %298, label %303

298:                                              ; preds = %293
  %299 = getelementptr inbounds %"class.ClipperLib::Clipper", ptr %21, i32 0, i32 11
  %300 = load i32, ptr %299, align 8, !tbaa !44
  store i32 %300, ptr %13, align 4, !tbaa !45
  %301 = getelementptr inbounds %"class.ClipperLib::Clipper", ptr %21, i32 0, i32 10
  %302 = load i32, ptr %301, align 4, !tbaa !46
  store i32 %302, ptr %15, align 4, !tbaa !45
  br label %308

303:                                              ; preds = %293
  %304 = getelementptr inbounds %"class.ClipperLib::Clipper", ptr %21, i32 0, i32 10
  %305 = load i32, ptr %304, align 4, !tbaa !46
  store i32 %305, ptr %13, align 4, !tbaa !45
  %306 = getelementptr inbounds %"class.ClipperLib::Clipper", ptr %21, i32 0, i32 11
  %307 = load i32, ptr %306, align 8, !tbaa !44
  store i32 %307, ptr %15, align 4, !tbaa !45
  br label %308

308:                                              ; preds = %303, %298
  %309 = load ptr, ptr %7, align 8, !tbaa !5
  %310 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %309, i32 0, i32 4
  %311 = load i32, ptr %310, align 8, !tbaa !20
  %312 = icmp eq i32 %311, 0
  br i1 %312, label %313, label %318

313:                                              ; preds = %308
  %314 = getelementptr inbounds %"class.ClipperLib::Clipper", ptr %21, i32 0, i32 11
  %315 = load i32, ptr %314, align 8, !tbaa !44
  store i32 %315, ptr %14, align 4, !tbaa !45
  %316 = getelementptr inbounds %"class.ClipperLib::Clipper", ptr %21, i32 0, i32 10
  %317 = load i32, ptr %316, align 4, !tbaa !46
  store i32 %317, ptr %16, align 4, !tbaa !45
  br label %323

318:                                              ; preds = %308
  %319 = getelementptr inbounds %"class.ClipperLib::Clipper", ptr %21, i32 0, i32 10
  %320 = load i32, ptr %319, align 4, !tbaa !46
  store i32 %320, ptr %14, align 4, !tbaa !45
  %321 = getelementptr inbounds %"class.ClipperLib::Clipper", ptr %21, i32 0, i32 11
  %322 = load i32, ptr %321, align 8, !tbaa !44
  store i32 %322, ptr %16, align 4, !tbaa !45
  br label %323

323:                                              ; preds = %318, %313
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #5
  %324 = load i32, ptr %13, align 4, !tbaa !45
  switch i32 %324, label %336 [
    i32 2, label %325
    i32 3, label %330
  ]

325:                                              ; preds = %323
  %326 = load ptr, ptr %6, align 8, !tbaa !5
  %327 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %326, i32 0, i32 7
  %328 = load i32, ptr %327, align 4, !tbaa !41
  %329 = sext i32 %328 to i64
  store i64 %329, ptr %17, align 8, !tbaa !47
  br label %342

330:                                              ; preds = %323
  %331 = load ptr, ptr %6, align 8, !tbaa !5
  %332 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %331, i32 0, i32 7
  %333 = load i32, ptr %332, align 4, !tbaa !41
  %334 = sub nsw i32 0, %333
  %335 = sext i32 %334 to i64
  store i64 %335, ptr %17, align 8, !tbaa !47
  br label %342

336:                                              ; preds = %323
  %337 = load ptr, ptr %6, align 8, !tbaa !5
  %338 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %337, i32 0, i32 7
  %339 = load i32, ptr %338, align 4, !tbaa !41
  %340 = sext i32 %339 to i64
  %341 = call noundef i64 @_ZN10ClipperLib3AbsEx(i64 noundef %340)
  store i64 %341, ptr %17, align 8, !tbaa !47
  br label %342

342:                                              ; preds = %336, %330, %325
  %343 = load i32, ptr %14, align 4, !tbaa !45
  switch i32 %343, label %355 [
    i32 2, label %344
    i32 3, label %349
  ]

344:                                              ; preds = %342
  %345 = load ptr, ptr %7, align 8, !tbaa !5
  %346 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %345, i32 0, i32 7
  %347 = load i32, ptr %346, align 4, !tbaa !41
  %348 = sext i32 %347 to i64
  store i64 %348, ptr %18, align 8, !tbaa !47
  br label %361

349:                                              ; preds = %342
  %350 = load ptr, ptr %7, align 8, !tbaa !5
  %351 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %350, i32 0, i32 7
  %352 = load i32, ptr %351, align 4, !tbaa !41
  %353 = sub nsw i32 0, %352
  %354 = sext i32 %353 to i64
  store i64 %354, ptr %18, align 8, !tbaa !47
  br label %361

355:                                              ; preds = %342
  %356 = load ptr, ptr %7, align 8, !tbaa !5
  %357 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %356, i32 0, i32 7
  %358 = load i32, ptr %357, align 4, !tbaa !41
  %359 = sext i32 %358 to i64
  %360 = call noundef i64 @_ZN10ClipperLib3AbsEx(i64 noundef %359)
  store i64 %360, ptr %18, align 8, !tbaa !47
  br label %361

361:                                              ; preds = %355, %349, %344
  %362 = load i8, ptr %9, align 1, !tbaa !17, !range !39, !noundef !40
  %363 = trunc i8 %362 to i1
  br i1 %363, label %364, label %407

364:                                              ; preds = %361
  %365 = load i8, ptr %10, align 1, !tbaa !17, !range !39, !noundef !40
  %366 = trunc i8 %365 to i1
  br i1 %366, label %367, label %407

367:                                              ; preds = %364
  %368 = load i64, ptr %17, align 8, !tbaa !47
  %369 = icmp ne i64 %368, 0
  br i1 %369, label %370, label %373

370:                                              ; preds = %367
  %371 = load i64, ptr %17, align 8, !tbaa !47
  %372 = icmp ne i64 %371, 1
  br i1 %372, label %391, label %373

373:                                              ; preds = %370, %367
  %374 = load i64, ptr %18, align 8, !tbaa !47
  %375 = icmp ne i64 %374, 0
  br i1 %375, label %376, label %379

376:                                              ; preds = %373
  %377 = load i64, ptr %18, align 8, !tbaa !47
  %378 = icmp ne i64 %377, 1
  br i1 %378, label %391, label %379

379:                                              ; preds = %376, %373
  %380 = load ptr, ptr %6, align 8, !tbaa !5
  %381 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %380, i32 0, i32 4
  %382 = load i32, ptr %381, align 8, !tbaa !20
  %383 = load ptr, ptr %7, align 8, !tbaa !5
  %384 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %383, i32 0, i32 4
  %385 = load i32, ptr %384, align 8, !tbaa !20
  %386 = icmp ne i32 %382, %385
  br i1 %386, label %387, label %395

387:                                              ; preds = %379
  %388 = getelementptr inbounds %"class.ClipperLib::Clipper", ptr %21, i32 0, i32 4
  %389 = load i32, ptr %388, align 8, !tbaa !21
  %390 = icmp ne i32 %389, 3
  br i1 %390, label %391, label %395

391:                                              ; preds = %387, %376, %370
  %392 = load ptr, ptr %6, align 8, !tbaa !5
  %393 = load ptr, ptr %7, align 8, !tbaa !5
  %394 = load ptr, ptr %8, align 8, !tbaa !5
  call void @_ZN10ClipperLib7Clipper15AddLocalMaxPolyEPNS_5TEdgeES2_RKNS_8IntPointE(ptr noundef nonnull align 8 dereferenceable(135) %21, ptr noundef %392, ptr noundef %393, ptr noundef nonnull align 8 dereferenceable(16) %394)
  br label %406

395:                                              ; preds = %387, %379
  %396 = load ptr, ptr %6, align 8, !tbaa !5
  %397 = load ptr, ptr %8, align 8, !tbaa !5
  %398 = call noundef ptr @_ZN10ClipperLib7Clipper8AddOutPtEPNS_5TEdgeERKNS_8IntPointE(ptr noundef nonnull align 8 dereferenceable(135) %21, ptr noundef %396, ptr noundef nonnull align 8 dereferenceable(16) %397)
  %399 = load ptr, ptr %7, align 8, !tbaa !5
  %400 = load ptr, ptr %8, align 8, !tbaa !5
  %401 = call noundef ptr @_ZN10ClipperLib7Clipper8AddOutPtEPNS_5TEdgeERKNS_8IntPointE(ptr noundef nonnull align 8 dereferenceable(135) %21, ptr noundef %399, ptr noundef nonnull align 8 dereferenceable(16) %400)
  %402 = load ptr, ptr %6, align 8, !tbaa !5
  %403 = load ptr, ptr %7, align 8, !tbaa !5
  call void @_ZN10ClipperLib9SwapSidesERNS_5TEdgeES1_(ptr noundef nonnull align 8 dereferenceable(136) %402, ptr noundef nonnull align 8 dereferenceable(136) %403)
  %404 = load ptr, ptr %6, align 8, !tbaa !5
  %405 = load ptr, ptr %7, align 8, !tbaa !5
  call void @_ZN10ClipperLib15SwapPolyIndexesERNS_5TEdgeES1_(ptr noundef nonnull align 8 dereferenceable(136) %404, ptr noundef nonnull align 8 dereferenceable(136) %405)
  br label %406

406:                                              ; preds = %395, %391
  br label %581

407:                                              ; preds = %364, %361
  %408 = load i8, ptr %9, align 1, !tbaa !17, !range !39, !noundef !40
  %409 = trunc i8 %408 to i1
  br i1 %409, label %410, label %425

410:                                              ; preds = %407
  %411 = load i64, ptr %18, align 8, !tbaa !47
  %412 = icmp eq i64 %411, 0
  br i1 %412, label %416, label %413

413:                                              ; preds = %410
  %414 = load i64, ptr %18, align 8, !tbaa !47
  %415 = icmp eq i64 %414, 1
  br i1 %415, label %416, label %424

416:                                              ; preds = %413, %410
  %417 = load ptr, ptr %6, align 8, !tbaa !5
  %418 = load ptr, ptr %8, align 8, !tbaa !5
  %419 = call noundef ptr @_ZN10ClipperLib7Clipper8AddOutPtEPNS_5TEdgeERKNS_8IntPointE(ptr noundef nonnull align 8 dereferenceable(135) %21, ptr noundef %417, ptr noundef nonnull align 8 dereferenceable(16) %418)
  %420 = load ptr, ptr %6, align 8, !tbaa !5
  %421 = load ptr, ptr %7, align 8, !tbaa !5
  call void @_ZN10ClipperLib9SwapSidesERNS_5TEdgeES1_(ptr noundef nonnull align 8 dereferenceable(136) %420, ptr noundef nonnull align 8 dereferenceable(136) %421)
  %422 = load ptr, ptr %6, align 8, !tbaa !5
  %423 = load ptr, ptr %7, align 8, !tbaa !5
  call void @_ZN10ClipperLib15SwapPolyIndexesERNS_5TEdgeES1_(ptr noundef nonnull align 8 dereferenceable(136) %422, ptr noundef nonnull align 8 dereferenceable(136) %423)
  br label %424

424:                                              ; preds = %416, %413
  br label %580

425:                                              ; preds = %407
  %426 = load i8, ptr %10, align 1, !tbaa !17, !range !39, !noundef !40
  %427 = trunc i8 %426 to i1
  br i1 %427, label %428, label %443

428:                                              ; preds = %425
  %429 = load i64, ptr %17, align 8, !tbaa !47
  %430 = icmp eq i64 %429, 0
  br i1 %430, label %434, label %431

431:                                              ; preds = %428
  %432 = load i64, ptr %17, align 8, !tbaa !47
  %433 = icmp eq i64 %432, 1
  br i1 %433, label %434, label %442

434:                                              ; preds = %431, %428
  %435 = load ptr, ptr %7, align 8, !tbaa !5
  %436 = load ptr, ptr %8, align 8, !tbaa !5
  %437 = call noundef ptr @_ZN10ClipperLib7Clipper8AddOutPtEPNS_5TEdgeERKNS_8IntPointE(ptr noundef nonnull align 8 dereferenceable(135) %21, ptr noundef %435, ptr noundef nonnull align 8 dereferenceable(16) %436)
  %438 = load ptr, ptr %6, align 8, !tbaa !5
  %439 = load ptr, ptr %7, align 8, !tbaa !5
  call void @_ZN10ClipperLib9SwapSidesERNS_5TEdgeES1_(ptr noundef nonnull align 8 dereferenceable(136) %438, ptr noundef nonnull align 8 dereferenceable(136) %439)
  %440 = load ptr, ptr %6, align 8, !tbaa !5
  %441 = load ptr, ptr %7, align 8, !tbaa !5
  call void @_ZN10ClipperLib15SwapPolyIndexesERNS_5TEdgeES1_(ptr noundef nonnull align 8 dereferenceable(136) %440, ptr noundef nonnull align 8 dereferenceable(136) %441)
  br label %442

442:                                              ; preds = %434, %431
  br label %579

443:                                              ; preds = %425
  %444 = load i64, ptr %17, align 8, !tbaa !47
  %445 = icmp eq i64 %444, 0
  br i1 %445, label %449, label %446

446:                                              ; preds = %443
  %447 = load i64, ptr %17, align 8, !tbaa !47
  %448 = icmp eq i64 %447, 1
  br i1 %448, label %449, label %578

449:                                              ; preds = %446, %443
  %450 = load i64, ptr %18, align 8, !tbaa !47
  %451 = icmp eq i64 %450, 0
  br i1 %451, label %455, label %452

452:                                              ; preds = %449
  %453 = load i64, ptr %18, align 8, !tbaa !47
  %454 = icmp eq i64 %453, 1
  br i1 %454, label %455, label %578

455:                                              ; preds = %452, %449
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #5
  %456 = load i32, ptr %15, align 4, !tbaa !45
  switch i32 %456, label %468 [
    i32 2, label %457
    i32 3, label %462
  ]

457:                                              ; preds = %455
  %458 = load ptr, ptr %6, align 8, !tbaa !5
  %459 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %458, i32 0, i32 8
  %460 = load i32, ptr %459, align 8, !tbaa !42
  %461 = sext i32 %460 to i64
  store i64 %461, ptr %19, align 8, !tbaa !47
  br label %474

462:                                              ; preds = %455
  %463 = load ptr, ptr %6, align 8, !tbaa !5
  %464 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %463, i32 0, i32 8
  %465 = load i32, ptr %464, align 8, !tbaa !42
  %466 = sub nsw i32 0, %465
  %467 = sext i32 %466 to i64
  store i64 %467, ptr %19, align 8, !tbaa !47
  br label %474

468:                                              ; preds = %455
  %469 = load ptr, ptr %6, align 8, !tbaa !5
  %470 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %469, i32 0, i32 8
  %471 = load i32, ptr %470, align 8, !tbaa !42
  %472 = sext i32 %471 to i64
  %473 = call noundef i64 @_ZN10ClipperLib3AbsEx(i64 noundef %472)
  store i64 %473, ptr %19, align 8, !tbaa !47
  br label %474

474:                                              ; preds = %468, %462, %457
  %475 = load i32, ptr %16, align 4, !tbaa !45
  switch i32 %475, label %487 [
    i32 2, label %476
    i32 3, label %481
  ]

476:                                              ; preds = %474
  %477 = load ptr, ptr %7, align 8, !tbaa !5
  %478 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %477, i32 0, i32 8
  %479 = load i32, ptr %478, align 8, !tbaa !42
  %480 = sext i32 %479 to i64
  store i64 %480, ptr %20, align 8, !tbaa !47
  br label %493

481:                                              ; preds = %474
  %482 = load ptr, ptr %7, align 8, !tbaa !5
  %483 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %482, i32 0, i32 8
  %484 = load i32, ptr %483, align 8, !tbaa !42
  %485 = sub nsw i32 0, %484
  %486 = sext i32 %485 to i64
  store i64 %486, ptr %20, align 8, !tbaa !47
  br label %493

487:                                              ; preds = %474
  %488 = load ptr, ptr %7, align 8, !tbaa !5
  %489 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %488, i32 0, i32 8
  %490 = load i32, ptr %489, align 8, !tbaa !42
  %491 = sext i32 %490 to i64
  %492 = call noundef i64 @_ZN10ClipperLib3AbsEx(i64 noundef %491)
  store i64 %492, ptr %20, align 8, !tbaa !47
  br label %493

493:                                              ; preds = %487, %481, %476
  %494 = load ptr, ptr %6, align 8, !tbaa !5
  %495 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %494, i32 0, i32 4
  %496 = load i32, ptr %495, align 8, !tbaa !20
  %497 = load ptr, ptr %7, align 8, !tbaa !5
  %498 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %497, i32 0, i32 4
  %499 = load i32, ptr %498, align 8, !tbaa !20
  %500 = icmp ne i32 %496, %499
  br i1 %500, label %501, label %506

501:                                              ; preds = %493
  %502 = load ptr, ptr %6, align 8, !tbaa !5
  %503 = load ptr, ptr %7, align 8, !tbaa !5
  %504 = load ptr, ptr %8, align 8, !tbaa !5
  %505 = call noundef ptr @_ZN10ClipperLib7Clipper15AddLocalMinPolyEPNS_5TEdgeES2_RKNS_8IntPointE(ptr noundef nonnull align 8 dereferenceable(135) %21, ptr noundef %502, ptr noundef %503, ptr noundef nonnull align 8 dereferenceable(16) %504)
  br label %577

506:                                              ; preds = %493
  %507 = load i64, ptr %17, align 8, !tbaa !47
  %508 = icmp eq i64 %507, 1
  br i1 %508, label %509, label %573

509:                                              ; preds = %506
  %510 = load i64, ptr %18, align 8, !tbaa !47
  %511 = icmp eq i64 %510, 1
  br i1 %511, label %512, label %573

512:                                              ; preds = %509
  %513 = getelementptr inbounds %"class.ClipperLib::Clipper", ptr %21, i32 0, i32 4
  %514 = load i32, ptr %513, align 8, !tbaa !21
  switch i32 %514, label %572 [
    i32 0, label %515
    i32 1, label %527
    i32 2, label %539
    i32 3, label %567
  ]

515:                                              ; preds = %512
  %516 = load i64, ptr %19, align 8, !tbaa !47
  %517 = icmp sgt i64 %516, 0
  br i1 %517, label %518, label %526

518:                                              ; preds = %515
  %519 = load i64, ptr %20, align 8, !tbaa !47
  %520 = icmp sgt i64 %519, 0
  br i1 %520, label %521, label %526

521:                                              ; preds = %518
  %522 = load ptr, ptr %6, align 8, !tbaa !5
  %523 = load ptr, ptr %7, align 8, !tbaa !5
  %524 = load ptr, ptr %8, align 8, !tbaa !5
  %525 = call noundef ptr @_ZN10ClipperLib7Clipper15AddLocalMinPolyEPNS_5TEdgeES2_RKNS_8IntPointE(ptr noundef nonnull align 8 dereferenceable(135) %21, ptr noundef %522, ptr noundef %523, ptr noundef nonnull align 8 dereferenceable(16) %524)
  br label %526

526:                                              ; preds = %521, %518, %515
  br label %572

527:                                              ; preds = %512
  %528 = load i64, ptr %19, align 8, !tbaa !47
  %529 = icmp sle i64 %528, 0
  br i1 %529, label %530, label %538

530:                                              ; preds = %527
  %531 = load i64, ptr %20, align 8, !tbaa !47
  %532 = icmp sle i64 %531, 0
  br i1 %532, label %533, label %538

533:                                              ; preds = %530
  %534 = load ptr, ptr %6, align 8, !tbaa !5
  %535 = load ptr, ptr %7, align 8, !tbaa !5
  %536 = load ptr, ptr %8, align 8, !tbaa !5
  %537 = call noundef ptr @_ZN10ClipperLib7Clipper15AddLocalMinPolyEPNS_5TEdgeES2_RKNS_8IntPointE(ptr noundef nonnull align 8 dereferenceable(135) %21, ptr noundef %534, ptr noundef %535, ptr noundef nonnull align 8 dereferenceable(16) %536)
  br label %538

538:                                              ; preds = %533, %530, %527
  br label %572

539:                                              ; preds = %512
  %540 = load ptr, ptr %6, align 8, !tbaa !5
  %541 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %540, i32 0, i32 4
  %542 = load i32, ptr %541, align 8, !tbaa !20
  %543 = icmp eq i32 %542, 1
  br i1 %543, label %544, label %550

544:                                              ; preds = %539
  %545 = load i64, ptr %19, align 8, !tbaa !47
  %546 = icmp sgt i64 %545, 0
  br i1 %546, label %547, label %550

547:                                              ; preds = %544
  %548 = load i64, ptr %20, align 8, !tbaa !47
  %549 = icmp sgt i64 %548, 0
  br i1 %549, label %561, label %550

550:                                              ; preds = %547, %544, %539
  %551 = load ptr, ptr %6, align 8, !tbaa !5
  %552 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %551, i32 0, i32 4
  %553 = load i32, ptr %552, align 8, !tbaa !20
  %554 = icmp eq i32 %553, 0
  br i1 %554, label %555, label %566

555:                                              ; preds = %550
  %556 = load i64, ptr %19, align 8, !tbaa !47
  %557 = icmp sle i64 %556, 0
  br i1 %557, label %558, label %566

558:                                              ; preds = %555
  %559 = load i64, ptr %20, align 8, !tbaa !47
  %560 = icmp sle i64 %559, 0
  br i1 %560, label %561, label %566

561:                                              ; preds = %558, %547
  %562 = load ptr, ptr %6, align 8, !tbaa !5
  %563 = load ptr, ptr %7, align 8, !tbaa !5
  %564 = load ptr, ptr %8, align 8, !tbaa !5
  %565 = call noundef ptr @_ZN10ClipperLib7Clipper15AddLocalMinPolyEPNS_5TEdgeES2_RKNS_8IntPointE(ptr noundef nonnull align 8 dereferenceable(135) %21, ptr noundef %562, ptr noundef %563, ptr noundef nonnull align 8 dereferenceable(16) %564)
  br label %566

566:                                              ; preds = %561, %558, %555, %550
  br label %572

567:                                              ; preds = %512
  %568 = load ptr, ptr %6, align 8, !tbaa !5
  %569 = load ptr, ptr %7, align 8, !tbaa !5
  %570 = load ptr, ptr %8, align 8, !tbaa !5
  %571 = call noundef ptr @_ZN10ClipperLib7Clipper15AddLocalMinPolyEPNS_5TEdgeES2_RKNS_8IntPointE(ptr noundef nonnull align 8 dereferenceable(135) %21, ptr noundef %568, ptr noundef %569, ptr noundef nonnull align 8 dereferenceable(16) %570)
  br label %572

572:                                              ; preds = %567, %566, %538, %526, %512
  br label %576

573:                                              ; preds = %509, %506
  %574 = load ptr, ptr %6, align 8, !tbaa !5
  %575 = load ptr, ptr %7, align 8, !tbaa !5
  call void @_ZN10ClipperLib9SwapSidesERNS_5TEdgeES1_(ptr noundef nonnull align 8 dereferenceable(136) %574, ptr noundef nonnull align 8 dereferenceable(136) %575)
  br label %576

576:                                              ; preds = %573, %572
  br label %577

577:                                              ; preds = %576, %501
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #5
  br label %578

578:                                              ; preds = %577, %452, %446
  br label %579

579:                                              ; preds = %578, %442
  br label %580

580:                                              ; preds = %579, %424
  br label %581

581:                                              ; preds = %580, %406
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #5
  store i32 0, ptr %11, align 4
  br label %582

582:                                              ; preds = %581, %178, %51
  call void @llvm.lifetime.end.p0(i64 1, ptr %10) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %9) #5
  %583 = load i32, ptr %11, align 4
  switch i32 %583, label %585 [
    i32 0, label %584
    i32 1, label %584
  ]

584:                                              ; preds = %582, %582
  ret void

585:                                              ; preds = %582
  unreachable
}

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.abs.i32(i32, i1 immarg) #4

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

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

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #2 = { 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 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 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
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 76}
!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, !16, i64 64}
!20 = !{!10, !14, i64 56}
!21 = !{!22, !31, i64 80}
!22 = !{!"_ZTSN10ClipperLib7ClipperE", !23, i64 8, !23, i64 32, !27, i64 56, !31, i64 80, !32, i64 88, !6, i64 112, !18, i64 120, !38, i64 124, !38, i64 128, !18, i64 132, !18, i64 133, !18, i64 134}
!23 = !{!"_ZTSSt6vectorIPN10ClipperLib4JoinESaIS2_EE", !24, i64 0}
!24 = !{!"_ZTSSt12_Vector_baseIPN10ClipperLib4JoinESaIS2_EE", !25, i64 0}
!25 = !{!"_ZTSNSt12_Vector_baseIPN10ClipperLib4JoinESaIS2_EE12_Vector_implE", !26, i64 0}
!26 = !{!"_ZTSNSt12_Vector_baseIPN10ClipperLib4JoinESaIS2_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!27 = !{!"_ZTSSt6vectorIPN10ClipperLib13IntersectNodeESaIS2_EE", !28, i64 0}
!28 = !{!"_ZTSSt12_Vector_baseIPN10ClipperLib13IntersectNodeESaIS2_EE", !29, i64 0}
!29 = !{!"_ZTSNSt12_Vector_baseIPN10ClipperLib13IntersectNodeESaIS2_EE12_Vector_implE", !30, i64 0}
!30 = !{!"_ZTSNSt12_Vector_baseIPN10ClipperLib13IntersectNodeESaIS2_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!31 = !{!"_ZTSN10ClipperLib8ClipTypeE", !7, i64 0}
!32 = !{!"_ZTSNSt7__cxx114listIxSaIxEEE", !33, i64 0}
!33 = !{!"_ZTSNSt7__cxx1110_List_baseIxSaIxEEE", !34, i64 0}
!34 = !{!"_ZTSNSt7__cxx1110_List_baseIxSaIxEE10_List_implE", !35, i64 0}
!35 = !{!"_ZTSNSt8__detail17_List_node_headerE", !36, i64 0, !37, i64 16}
!36 = !{!"_ZTSNSt8__detail15_List_node_baseE", !6, i64 0, !6, i64 8}
!37 = !{!"long", !7, i64 0}
!38 = !{!"_ZTSN10ClipperLib12PolyFillTypeE", !7, i64 0}
!39 = !{i8 0, i8 2}
!40 = !{}
!41 = !{!10, !16, i64 68}
!42 = !{!10, !16, i64 72}
!43 = !{!16, !16, i64 0}
!44 = !{!22, !38, i64 128}
!45 = !{!38, !38, i64 0}
!46 = !{!22, !38, i64 124}
!47 = !{!12, !12, i64 0}


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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZN10ClipperLib3AbsEx(i64 noundef) local_unnamed_addr #0

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef ptr @_ZN10ClipperLib7Clipper15AddLocalMinPolyEPNS_5TEdgeES2_RKNS_8IntPointE(ptr noundef nonnull align 8 dereferenceable(135), ptr noundef, ptr noundef, ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #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)) local_unnamed_addr #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)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN10ClipperLib7Clipper14IntersectEdgesEPNS_5TEdgeES2_RNS_8IntPointE(ptr noundef nonnull align 8 dereferenceable(135) %0, ptr noundef %1, ptr noundef %2, ptr noundef nonnull align 8 dereferenceable(16) %3) local_unnamed_addr #2 align 2 {
  %5 = getelementptr inbounds i8, ptr %1, i64 76
  %6 = load i32, ptr %5, align 4, !tbaa !5
  %7 = icmp slt i32 %6, 0
  %8 = getelementptr inbounds i8, ptr %2, i64 76
  %9 = load i32, ptr %8, align 4, !tbaa !5
  %10 = icmp slt i32 %9, 0
  %11 = getelementptr inbounds i8, ptr %1, i64 64
  %12 = load i32, ptr %11, align 8, !tbaa !16
  %.not228 = icmp eq i32 %12, 0
  %13 = getelementptr inbounds i8, ptr %2, i64 64
  %14 = load i32, ptr %13, align 8, !tbaa !16
  %15 = icmp eq i32 %14, 0
  br i1 %.not228, label %22, label %16

16:                                               ; preds = %4
  %17 = getelementptr inbounds i8, ptr %1, i64 56
  %18 = load i32, ptr %17, align 8, !tbaa !17
  %19 = getelementptr inbounds i8, ptr %2, i64 56
  %20 = load i32, ptr %19, align 8, !tbaa !17
  %21 = icmp eq i32 %18, %20
  br i1 %15, label %.thread208, label %71

22:                                               ; preds = %4
  br i1 %15, label %.thread207, label %23

23:                                               ; preds = %22
  %24 = getelementptr inbounds i8, ptr %1, i64 56
  %25 = load i32, ptr %24, align 8, !tbaa !17
  %26 = getelementptr inbounds i8, ptr %2, i64 56
  %27 = load i32, ptr %26, align 8, !tbaa !17
  %28 = icmp eq i32 %25, %27
  br i1 %28, label %29, label %42

.thread208:                                       ; preds = %16
  br i1 %21, label %.thread210, label %.thread209

29:                                               ; preds = %23
  %30 = getelementptr inbounds i8, ptr %0, i64 80
  %31 = load i32, ptr %30, align 8
  %32 = icmp ne i32 %31, 1
  %brmerge225 = select i1 %32, i1 true, i1 %10
  br i1 %brmerge225, label %.thread207, label %36

.thread210:                                       ; preds = %.thread208
  %33 = getelementptr inbounds i8, ptr %0, i64 80
  %34 = load i32, ptr %33, align 8
  %35 = icmp ne i32 %34, 1
  %brmerge215 = select i1 %35, i1 true, i1 %7
  br i1 %brmerge215, label %.thread207, label %39

36:                                               ; preds = %29
  %37 = tail call noundef ptr @_ZN10ClipperLib7Clipper8AddOutPtEPNS_5TEdgeERKNS_8IntPointE(ptr noundef nonnull align 8 dereferenceable(135) %0, ptr noundef nonnull %1, ptr noundef nonnull align 8 dereferenceable(16) %3)
  br i1 %7, label %.thread207, label %38

38:                                               ; preds = %36
  store i32 -1, ptr %5, align 4, !tbaa !5
  br label %.thread207

39:                                               ; preds = %.thread210
  %40 = tail call noundef ptr @_ZN10ClipperLib7Clipper8AddOutPtEPNS_5TEdgeERKNS_8IntPointE(ptr noundef nonnull align 8 dereferenceable(135) %0, ptr noundef nonnull %2, ptr noundef nonnull align 8 dereferenceable(16) %3)
  br i1 %10, label %.thread207, label %41

41:                                               ; preds = %39
  store i32 -1, ptr %8, align 4, !tbaa !5
  br label %.thread207

42:                                               ; preds = %23
  %43 = getelementptr inbounds i8, ptr %2, i64 68
  %44 = load i32, ptr %43, align 4, !tbaa !18
  %45 = tail call i32 @llvm.abs.i32(i32 %44, i1 true)
  %46 = icmp eq i32 %45, 1
  br i1 %46, label %47, label %.thread207

47:                                               ; preds = %42
  %48 = getelementptr inbounds i8, ptr %0, i64 80
  %49 = load i32, ptr %48, align 8, !tbaa !19
  %.not197 = icmp eq i32 %49, 1
  br i1 %.not197, label %50, label %54

50:                                               ; preds = %47
  %51 = getelementptr inbounds i8, ptr %2, i64 72
  %52 = load i32, ptr %51, align 8, !tbaa !38
  %53 = icmp eq i32 %52, 0
  br i1 %53, label %54, label %.thread207

54:                                               ; preds = %50, %47
  %55 = tail call noundef ptr @_ZN10ClipperLib7Clipper8AddOutPtEPNS_5TEdgeERKNS_8IntPointE(ptr noundef nonnull align 8 dereferenceable(135) %0, ptr noundef nonnull %1, ptr noundef nonnull align 8 dereferenceable(16) %3)
  br i1 %7, label %.thread207, label %56

56:                                               ; preds = %54
  store i32 -1, ptr %5, align 4, !tbaa !5
  br label %.thread207

.thread209:                                       ; preds = %.thread208
  %57 = getelementptr inbounds i8, ptr %1, i64 68
  %58 = load i32, ptr %57, align 4, !tbaa !18
  %59 = tail call i32 @llvm.abs.i32(i32 %58, i1 true)
  %60 = icmp eq i32 %59, 1
  br i1 %60, label %61, label %.thread207

61:                                               ; preds = %.thread209
  %62 = getelementptr inbounds i8, ptr %0, i64 80
  %63 = load i32, ptr %62, align 8, !tbaa !19
  %.not198 = icmp eq i32 %63, 1
  br i1 %.not198, label %64, label %68

64:                                               ; preds = %61
  %65 = getelementptr inbounds i8, ptr %1, i64 72
  %66 = load i32, ptr %65, align 8, !tbaa !38
  %67 = icmp eq i32 %66, 0
  br i1 %67, label %68, label %.thread207

68:                                               ; preds = %64, %61
  %69 = tail call noundef ptr @_ZN10ClipperLib7Clipper8AddOutPtEPNS_5TEdgeERKNS_8IntPointE(ptr noundef nonnull align 8 dereferenceable(135) %0, ptr noundef nonnull %2, ptr noundef nonnull align 8 dereferenceable(16) %3)
  br i1 %10, label %.thread207, label %70

70:                                               ; preds = %68
  store i32 -1, ptr %8, align 4, !tbaa !5
  br label %.thread207

71:                                               ; preds = %16
  br i1 %21, label %72, label %92

72:                                               ; preds = %71
  %73 = tail call noundef zeroext i1 @_ZNK10ClipperLib7Clipper17IsEvenOddFillTypeERKNS_5TEdgeE(ptr noundef nonnull align 8 dereferenceable(135) %0, ptr noundef nonnull align 8 dereferenceable(136) %1)
  %74 = getelementptr inbounds i8, ptr %1, i64 68
  %75 = load i32, ptr %74, align 4, !tbaa !18
  br i1 %73, label %76, label %79

76:                                               ; preds = %72
  %77 = getelementptr inbounds i8, ptr %2, i64 68
  %78 = load i32, ptr %77, align 4, !tbaa !18
  store i32 %78, ptr %74, align 4, !tbaa !18
  store i32 %75, ptr %77, align 4, !tbaa !18
  br label %116

79:                                               ; preds = %72
  %80 = load i32, ptr %13, align 8, !tbaa !16
  %81 = add nsw i32 %80, %75
  %82 = icmp eq i32 %81, 0
  %83 = sub nsw i32 0, %75
  %storemerge = select i1 %82, i32 %83, i32 %81
  store i32 %storemerge, ptr %74, align 4, !tbaa !18
  %84 = getelementptr inbounds i8, ptr %2, i64 68
  %85 = load i32, ptr %84, align 4, !tbaa !18
  %86 = load i32, ptr %11, align 8, !tbaa !16
  %87 = icmp eq i32 %85, %86
  br i1 %87, label %88, label %90

88:                                               ; preds = %79
  %89 = sub nsw i32 0, %85
  store i32 %89, ptr %84, align 4, !tbaa !18
  br label %116

90:                                               ; preds = %79
  %91 = sub nsw i32 %85, %86
  store i32 %91, ptr %84, align 4, !tbaa !18
  br label %116

92:                                               ; preds = %71
  %93 = tail call noundef zeroext i1 @_ZNK10ClipperLib7Clipper17IsEvenOddFillTypeERKNS_5TEdgeE(ptr noundef nonnull align 8 dereferenceable(135) %0, ptr noundef nonnull align 8 dereferenceable(136) %2)
  br i1 %93, label %99, label %94

94:                                               ; preds = %92
  %95 = load i32, ptr %13, align 8, !tbaa !16
  %96 = getelementptr inbounds i8, ptr %1, i64 72
  %97 = load i32, ptr %96, align 8, !tbaa !38
  %98 = add nsw i32 %97, %95
  store i32 %98, ptr %96, align 8, !tbaa !38
  br label %104

99:                                               ; preds = %92
  %100 = getelementptr inbounds i8, ptr %1, i64 72
  %101 = load i32, ptr %100, align 8, !tbaa !38
  %102 = icmp eq i32 %101, 0
  %103 = zext i1 %102 to i32
  store i32 %103, ptr %100, align 8, !tbaa !38
  br label %104

104:                                              ; preds = %99, %94
  %105 = tail call noundef zeroext i1 @_ZNK10ClipperLib7Clipper17IsEvenOddFillTypeERKNS_5TEdgeE(ptr noundef nonnull align 8 dereferenceable(135) %0, ptr noundef nonnull align 8 dereferenceable(136) %1)
  br i1 %105, label %111, label %106

106:                                              ; preds = %104
  %107 = load i32, ptr %11, align 8, !tbaa !16
  %108 = getelementptr inbounds i8, ptr %2, i64 72
  %109 = load i32, ptr %108, align 8, !tbaa !38
  %110 = sub nsw i32 %109, %107
  store i32 %110, ptr %108, align 8, !tbaa !38
  br label %116

111:                                              ; preds = %104
  %112 = getelementptr inbounds i8, ptr %2, i64 72
  %113 = load i32, ptr %112, align 8, !tbaa !38
  %114 = icmp eq i32 %113, 0
  %115 = zext i1 %114 to i32
  store i32 %115, ptr %112, align 8, !tbaa !38
  br label %116

116:                                              ; preds = %106, %111, %76, %90, %88
  %117 = load i32, ptr %17, align 8, !tbaa !17
  %118 = icmp eq i32 %117, 0
  %119 = getelementptr inbounds i8, ptr %0, i64 128
  %120 = getelementptr inbounds i8, ptr %0, i64 124
  %.val = load i32, ptr %120, align 4
  %.val216 = load i32, ptr %119, align 8
  %.0186 = select i1 %118, i32 %.val, i32 %.val216
  %.0188 = select i1 %118, i32 %.val216, i32 %.val
  %121 = load i32, ptr %19, align 8, !tbaa !17
  %122 = icmp eq i32 %121, 0
  %.0185 = select i1 %122, i32 %.val, i32 %.val216
  %.0187 = select i1 %122, i32 %.val216, i32 %.val
  %123 = getelementptr inbounds i8, ptr %1, i64 68
  %124 = load i32, ptr %123, align 4, !tbaa !18
  switch i32 %.0188, label %130 [
    i32 2, label %125
    i32 3, label %127
  ]

125:                                              ; preds = %116
  %126 = sext i32 %124 to i64
  br label %133

127:                                              ; preds = %116
  %128 = sub nsw i32 0, %124
  %129 = sext i32 %128 to i64
  br label %133

130:                                              ; preds = %116
  %131 = sext i32 %124 to i64
  %132 = tail call noundef i64 @_ZN10ClipperLib3AbsEx(i64 noundef %131)
  br label %133

133:                                              ; preds = %130, %127, %125
  %.0184 = phi i64 [ %132, %130 ], [ %129, %127 ], [ %126, %125 ]
  %134 = getelementptr inbounds i8, ptr %2, i64 68
  %135 = load i32, ptr %134, align 4, !tbaa !18
  switch i32 %.0187, label %141 [
    i32 2, label %136
    i32 3, label %138
  ]

136:                                              ; preds = %133
  %137 = sext i32 %135 to i64
  br label %144

138:                                              ; preds = %133
  %139 = sub nsw i32 0, %135
  %140 = sext i32 %139 to i64
  br label %144

141:                                              ; preds = %133
  %142 = sext i32 %135 to i64
  %143 = tail call noundef i64 @_ZN10ClipperLib3AbsEx(i64 noundef %142)
  br label %144

144:                                              ; preds = %141, %138, %136
  %.0183 = phi i64 [ %143, %141 ], [ %140, %138 ], [ %137, %136 ]
  %brmerge = select i1 %7, i1 true, i1 %10
  br i1 %brmerge, label %155, label %145

145:                                              ; preds = %144
  %or.cond = icmp ugt i64 %.0184, 1
  %or.cond3 = icmp ugt i64 %.0183, 1
  %or.cond204 = select i1 %or.cond, i1 true, i1 %or.cond3
  br i1 %or.cond204, label %151, label %146

146:                                              ; preds = %145
  %147 = load i32, ptr %17, align 8, !tbaa !17
  %148 = load i32, ptr %19, align 8, !tbaa !17
  %.not193 = icmp eq i32 %147, %148
  %149 = getelementptr inbounds i8, ptr %0, i64 80
  %150 = load i32, ptr %149, align 8
  %.not194 = icmp eq i32 %150, 3
  %or.cond206 = select i1 %.not193, i1 true, i1 %.not194
  br i1 %or.cond206, label %152, label %151

151:                                              ; preds = %146, %145
  tail call void @_ZN10ClipperLib7Clipper15AddLocalMaxPolyEPNS_5TEdgeES2_RKNS_8IntPointE(ptr noundef nonnull align 8 dereferenceable(135) %0, ptr noundef nonnull %1, ptr noundef nonnull %2, ptr noundef nonnull align 8 dereferenceable(16) %3)
  br label %.thread207

152:                                              ; preds = %146
  %153 = tail call noundef ptr @_ZN10ClipperLib7Clipper8AddOutPtEPNS_5TEdgeERKNS_8IntPointE(ptr noundef nonnull align 8 dereferenceable(135) %0, ptr noundef nonnull %1, ptr noundef nonnull align 8 dereferenceable(16) %3)
  %154 = tail call noundef ptr @_ZN10ClipperLib7Clipper8AddOutPtEPNS_5TEdgeERKNS_8IntPointE(ptr noundef nonnull align 8 dereferenceable(135) %0, ptr noundef nonnull %2, ptr noundef nonnull align 8 dereferenceable(16) %3)
  tail call void @_ZN10ClipperLib9SwapSidesERNS_5TEdgeES1_(ptr noundef nonnull align 8 dereferenceable(136) %1, ptr noundef nonnull align 8 dereferenceable(136) %2)
  tail call void @_ZN10ClipperLib15SwapPolyIndexesERNS_5TEdgeES1_(ptr noundef nonnull align 8 dereferenceable(136) %1, ptr noundef nonnull align 8 dereferenceable(136) %2)
  br label %.thread207

155:                                              ; preds = %144
  br i1 %7, label %159, label %156

156:                                              ; preds = %155
  %or.cond5 = icmp ult i64 %.0183, 2
  br i1 %or.cond5, label %157, label %.thread207

157:                                              ; preds = %156
  %158 = tail call noundef ptr @_ZN10ClipperLib7Clipper8AddOutPtEPNS_5TEdgeERKNS_8IntPointE(ptr noundef nonnull align 8 dereferenceable(135) %0, ptr noundef nonnull %1, ptr noundef nonnull align 8 dereferenceable(16) %3)
  tail call void @_ZN10ClipperLib9SwapSidesERNS_5TEdgeES1_(ptr noundef nonnull align 8 dereferenceable(136) %1, ptr noundef nonnull align 8 dereferenceable(136) %2)
  tail call void @_ZN10ClipperLib15SwapPolyIndexesERNS_5TEdgeES1_(ptr noundef nonnull align 8 dereferenceable(136) %1, ptr noundef nonnull align 8 dereferenceable(136) %2)
  br label %.thread207

159:                                              ; preds = %155
  br i1 %10, label %163, label %160

160:                                              ; preds = %159
  %or.cond7 = icmp ult i64 %.0184, 2
  br i1 %or.cond7, label %161, label %.thread207

161:                                              ; preds = %160
  %162 = tail call noundef ptr @_ZN10ClipperLib7Clipper8AddOutPtEPNS_5TEdgeERKNS_8IntPointE(ptr noundef nonnull align 8 dereferenceable(135) %0, ptr noundef nonnull %2, ptr noundef nonnull align 8 dereferenceable(16) %3)
  tail call void @_ZN10ClipperLib9SwapSidesERNS_5TEdgeES1_(ptr noundef nonnull align 8 dereferenceable(136) %1, ptr noundef nonnull align 8 dereferenceable(136) %2)
  tail call void @_ZN10ClipperLib15SwapPolyIndexesERNS_5TEdgeES1_(ptr noundef nonnull align 8 dereferenceable(136) %1, ptr noundef nonnull align 8 dereferenceable(136) %2)
  br label %.thread207

163:                                              ; preds = %159
  %164 = icmp eq i64 %.0184, 1
  %or.cond9 = icmp ult i64 %.0184, 2
  br i1 %or.cond9, label %165, label %.thread207

165:                                              ; preds = %163
  %166 = icmp eq i64 %.0183, 1
  %or.cond11 = icmp ult i64 %.0183, 2
  br i1 %or.cond11, label %167, label %.thread207

167:                                              ; preds = %165
  %168 = getelementptr inbounds i8, ptr %1, i64 72
  %169 = load i32, ptr %168, align 8, !tbaa !38
  switch i32 %.0186, label %175 [
    i32 2, label %170
    i32 3, label %172
  ]

170:                                              ; preds = %167
  %171 = sext i32 %169 to i64
  br label %178

172:                                              ; preds = %167
  %173 = sub nsw i32 0, %169
  %174 = sext i32 %173 to i64
  br label %178

175:                                              ; preds = %167
  %176 = sext i32 %169 to i64
  %177 = tail call noundef i64 @_ZN10ClipperLib3AbsEx(i64 noundef %176)
  br label %178

178:                                              ; preds = %175, %172, %170
  %.0182 = phi i64 [ %177, %175 ], [ %174, %172 ], [ %171, %170 ]
  %179 = getelementptr inbounds i8, ptr %2, i64 72
  %180 = load i32, ptr %179, align 8, !tbaa !38
  switch i32 %.0185, label %186 [
    i32 2, label %181
    i32 3, label %183
  ]

181:                                              ; preds = %178
  %182 = sext i32 %180 to i64
  br label %189

183:                                              ; preds = %178
  %184 = sub nsw i32 0, %180
  %185 = sext i32 %184 to i64
  br label %189

186:                                              ; preds = %178
  %187 = sext i32 %180 to i64
  %188 = tail call noundef i64 @_ZN10ClipperLib3AbsEx(i64 noundef %187)
  br label %189

189:                                              ; preds = %186, %183, %181
  %.0 = phi i64 [ %188, %186 ], [ %185, %183 ], [ %182, %181 ]
  %190 = load i32, ptr %17, align 8, !tbaa !17
  %191 = load i32, ptr %19, align 8, !tbaa !17
  %.not = icmp eq i32 %190, %191
  br i1 %.not, label %194, label %192

192:                                              ; preds = %189
  %193 = tail call noundef ptr @_ZN10ClipperLib7Clipper15AddLocalMinPolyEPNS_5TEdgeES2_RKNS_8IntPointE(ptr noundef nonnull align 8 dereferenceable(135) %0, ptr noundef nonnull %1, ptr noundef nonnull %2, ptr noundef nonnull align 8 dereferenceable(16) %3)
  br label %.thread207

194:                                              ; preds = %189
  %or.cond13 = select i1 %164, i1 %166, i1 false
  br i1 %or.cond13, label %195, label %220

195:                                              ; preds = %194
  %196 = getelementptr inbounds i8, ptr %0, i64 80
  %197 = load i32, ptr %196, align 8, !tbaa !19
  switch i32 %197, label %.thread207 [
    i32 0, label %198
    i32 1, label %203
    i32 2, label %208
    i32 3, label %218
  ]

198:                                              ; preds = %195
  %199 = icmp sgt i64 %.0182, 0
  %200 = icmp sgt i64 %.0, 0
  %or.cond15 = select i1 %199, i1 %200, i1 false
  br i1 %or.cond15, label %201, label %.thread207

201:                                              ; preds = %198
  %202 = tail call noundef ptr @_ZN10ClipperLib7Clipper15AddLocalMinPolyEPNS_5TEdgeES2_RKNS_8IntPointE(ptr noundef nonnull align 8 dereferenceable(135) %0, ptr noundef nonnull %1, ptr noundef nonnull %2, ptr noundef nonnull align 8 dereferenceable(16) %3)
  br label %.thread207

203:                                              ; preds = %195
  %204 = icmp slt i64 %.0182, 1
  %205 = icmp slt i64 %.0, 1
  %or.cond17 = select i1 %204, i1 %205, i1 false
  br i1 %or.cond17, label %206, label %.thread207

206:                                              ; preds = %203
  %207 = tail call noundef ptr @_ZN10ClipperLib7Clipper15AddLocalMinPolyEPNS_5TEdgeES2_RKNS_8IntPointE(ptr noundef nonnull align 8 dereferenceable(135) %0, ptr noundef nonnull %1, ptr noundef nonnull %2, ptr noundef nonnull align 8 dereferenceable(16) %3)
  br label %.thread207

208:                                              ; preds = %195
  %209 = icmp eq i32 %190, 1
  %210 = icmp sgt i64 %.0182, 0
  %or.cond19 = select i1 %209, i1 %210, i1 false
  %211 = icmp sgt i64 %.0, 0
  %or.cond21 = select i1 %or.cond19, i1 %211, i1 false
  br i1 %or.cond21, label %216, label %212

212:                                              ; preds = %208
  %213 = icmp eq i32 %190, 0
  %214 = icmp slt i64 %.0182, 1
  %or.cond23 = select i1 %213, i1 %214, i1 false
  %215 = icmp slt i64 %.0, 1
  %or.cond25 = select i1 %or.cond23, i1 %215, i1 false
  br i1 %or.cond25, label %216, label %.thread207

216:                                              ; preds = %212, %208
  %217 = tail call noundef ptr @_ZN10ClipperLib7Clipper15AddLocalMinPolyEPNS_5TEdgeES2_RKNS_8IntPointE(ptr noundef nonnull align 8 dereferenceable(135) %0, ptr noundef nonnull %1, ptr noundef nonnull %2, ptr noundef nonnull align 8 dereferenceable(16) %3)
  br label %.thread207

218:                                              ; preds = %195
  %219 = tail call noundef ptr @_ZN10ClipperLib7Clipper15AddLocalMinPolyEPNS_5TEdgeES2_RKNS_8IntPointE(ptr noundef nonnull align 8 dereferenceable(135) %0, ptr noundef nonnull %1, ptr noundef nonnull %2, ptr noundef nonnull align 8 dereferenceable(16) %3)
  br label %.thread207

220:                                              ; preds = %194
  tail call void @_ZN10ClipperLib9SwapSidesERNS_5TEdgeES1_(ptr noundef nonnull align 8 dereferenceable(136) %1, ptr noundef nonnull align 8 dereferenceable(136) %2)
  br label %.thread207

.thread207:                                       ; preds = %42, %50, %29, %.thread210, %152, %151, %160, %161, %165, %163, %157, %156, %220, %212, %216, %203, %206, %198, %201, %218, %195, %192, %.thread209, %64, %70, %68, %54, %56, %36, %38, %39, %41, %22
  ret void
}

; Function Attrs: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.abs.i32(i32, i1 immarg) #3

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN10ClipperLib9SwapSidesERNS_5TEdgeES1_(ptr noundef nonnull align 8 dereferenceable(136), ptr noundef nonnull align 8 dereferenceable(136)) local_unnamed_addr #0

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN10ClipperLib15SwapPolyIndexesERNS_5TEdgeES1_(ptr noundef nonnull align 8 dereferenceable(136), ptr noundef nonnull align 8 dereferenceable(136)) local_unnamed_addr #0

attributes #0 = { 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 #1 = { 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 #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 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }

!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, !14, i64 76}
!6 = !{!"_ZTSN10ClipperLib5TEdgeE", !7, i64 0, !7, i64 16, !7, i64 32, !11, i64 48, !12, i64 56, !13, i64 60, !14, i64 64, !14, i64 68, !14, i64 72, !14, i64 76, !15, i64 80, !15, i64 88, !15, i64 96, !15, i64 104, !15, i64 112, !15, i64 120, !15, i64 128}
!7 = !{!"_ZTSN10ClipperLib8IntPointE", !8, i64 0, !8, i64 8}
!8 = !{!"long long", !9, i64 0}
!9 = !{!"omnipotent char", !10, i64 0}
!10 = !{!"Simple C++ TBAA"}
!11 = !{!"double", !9, i64 0}
!12 = !{!"_ZTSN10ClipperLib8PolyTypeE", !9, i64 0}
!13 = !{!"_ZTSN10ClipperLib8EdgeSideE", !9, i64 0}
!14 = !{!"int", !9, i64 0}
!15 = !{!"any pointer", !9, i64 0}
!16 = !{!6, !14, i64 64}
!17 = !{!6, !12, i64 56}
!18 = !{!6, !14, i64 68}
!19 = !{!20, !29, i64 80}
!20 = !{!"_ZTSN10ClipperLib7ClipperE", !21, i64 8, !21, i64 32, !25, i64 56, !29, i64 80, !30, i64 88, !15, i64 112, !36, i64 120, !37, i64 124, !37, i64 128, !36, i64 132, !36, i64 133, !36, i64 134}
!21 = !{!"_ZTSSt6vectorIPN10ClipperLib4JoinESaIS2_EE", !22, i64 0}
!22 = !{!"_ZTSSt12_Vector_baseIPN10ClipperLib4JoinESaIS2_EE", !23, i64 0}
!23 = !{!"_ZTSNSt12_Vector_baseIPN10ClipperLib4JoinESaIS2_EE12_Vector_implE", !24, i64 0}
!24 = !{!"_ZTSNSt12_Vector_baseIPN10ClipperLib4JoinESaIS2_EE17_Vector_impl_dataE", !15, i64 0, !15, i64 8, !15, i64 16}
!25 = !{!"_ZTSSt6vectorIPN10ClipperLib13IntersectNodeESaIS2_EE", !26, i64 0}
!26 = !{!"_ZTSSt12_Vector_baseIPN10ClipperLib13IntersectNodeESaIS2_EE", !27, i64 0}
!27 = !{!"_ZTSNSt12_Vector_baseIPN10ClipperLib13IntersectNodeESaIS2_EE12_Vector_implE", !28, i64 0}
!28 = !{!"_ZTSNSt12_Vector_baseIPN10ClipperLib13IntersectNodeESaIS2_EE17_Vector_impl_dataE", !15, i64 0, !15, i64 8, !15, i64 16}
!29 = !{!"_ZTSN10ClipperLib8ClipTypeE", !9, i64 0}
!30 = !{!"_ZTSNSt7__cxx114listIxSaIxEEE", !31, i64 0}
!31 = !{!"_ZTSNSt7__cxx1110_List_baseIxSaIxEEE", !32, i64 0}
!32 = !{!"_ZTSNSt7__cxx1110_List_baseIxSaIxEE10_List_implE", !33, i64 0}
!33 = !{!"_ZTSNSt8__detail17_List_node_headerE", !34, i64 0, !35, i64 16}
!34 = !{!"_ZTSNSt8__detail15_List_node_baseE", !15, i64 0, !15, i64 8}
!35 = !{!"long", !9, i64 0}
!36 = !{!"bool", !9, i64 0}
!37 = !{!"_ZTSN10ClipperLib12PolyFillTypeE", !9, i64 0}
!38 = !{!6, !14, i64 72}


; Effective O3 passes: BDCEPass,ConstraintEliminationPass,CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,InferAlignmentPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,ReassociatePass,SROAPass,SimplifyCFGPass,TailCallElimPass