; 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::LocalMinimum" = type { i64, ptr, ptr }
%"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::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 zeroext i1 @_ZN10ClipperLib12IsHorizontalERNS_5TEdgeE(ptr noundef nonnull align 8 dereferenceable(136)) #1

; Function Attrs: mustprogress uwtable
define dso_local noundef ptr @_ZN10ClipperLib11ClipperBase12ProcessBoundEPNS_5TEdgeEb(ptr noundef nonnull align 8 dereferenceable(144) %0, ptr noundef %1, i1 noundef zeroext %2) #2 align 2 {
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca i8, align 1
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca %"struct.ClipperLib::LocalMinimum", align 8
  %11 = alloca i32, align 4
  %12 = alloca ptr, align 8
  store ptr %0, ptr %5, align 8, !tbaa !5
  store ptr %1, ptr %6, align 8, !tbaa !5
  %13 = zext i1 %2 to i8
  store i8 %13, ptr %7, align 1, !tbaa !9
  %14 = load ptr, ptr %5, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #3
  %15 = load ptr, ptr %6, align 8, !tbaa !5
  store ptr %15, ptr %8, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #3
  store ptr null, ptr %9, align 8, !tbaa !5
  %16 = load ptr, ptr %6, align 8, !tbaa !5
  %17 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %16, i32 0, i32 9
  %18 = load i32, ptr %17, align 4, !tbaa !11
  %19 = icmp eq i32 %18, -2
  br i1 %19, label %20, label %132

20:                                               ; preds = %3
  %21 = load i8, ptr %7, align 1, !tbaa !9, !range !19, !noundef !20
  %22 = trunc i8 %21 to i1
  br i1 %22, label %23, label %55

23:                                               ; preds = %20
  br label %24

24:                                               ; preds = %36, %23
  %25 = load ptr, ptr %6, align 8, !tbaa !5
  %26 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %25, i32 0, i32 2
  %27 = getelementptr inbounds %"struct.ClipperLib::IntPoint", ptr %26, i32 0, i32 1
  %28 = load i64, ptr %27, align 8, !tbaa !21
  %29 = load ptr, ptr %6, align 8, !tbaa !5
  %30 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %29, i32 0, i32 10
  %31 = load ptr, ptr %30, align 8, !tbaa !22
  %32 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %31, i32 0, i32 0
  %33 = getelementptr inbounds %"struct.ClipperLib::IntPoint", ptr %32, i32 0, i32 1
  %34 = load i64, ptr %33, align 8, !tbaa !23
  %35 = icmp eq i64 %28, %34
  br i1 %35, label %36, label %40

36:                                               ; preds = %24
  %37 = load ptr, ptr %6, align 8, !tbaa !5
  %38 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %37, i32 0, i32 10
  %39 = load ptr, ptr %38, align 8, !tbaa !22
  store ptr %39, ptr %6, align 8, !tbaa !5
  br label %24, !llvm.loop !24

40:                                               ; preds = %24
  br label %41

41:                                               ; preds = %50, %40
  %42 = load ptr, ptr %6, align 8, !tbaa !5
  %43 = load ptr, ptr %8, align 8, !tbaa !5
  %44 = icmp ne ptr %42, %43
  br i1 %44, label %45, label %48

45:                                               ; preds = %41
  %46 = load ptr, ptr %6, align 8, !tbaa !5
  %47 = call noundef zeroext i1 @_ZN10ClipperLib12IsHorizontalERNS_5TEdgeE(ptr noundef nonnull align 8 dereferenceable(136) %46)
  br label %48

48:                                               ; preds = %45, %41
  %49 = phi i1 [ false, %41 ], [ %47, %45 ]
  br i1 %49, label %50, label %54

50:                                               ; preds = %48
  %51 = load ptr, ptr %6, align 8, !tbaa !5
  %52 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %51, i32 0, i32 11
  %53 = load ptr, ptr %52, align 8, !tbaa !26
  store ptr %53, ptr %6, align 8, !tbaa !5
  br label %41, !llvm.loop !27

54:                                               ; preds = %48
  br label %87

55:                                               ; preds = %20
  br label %56

56:                                               ; preds = %68, %55
  %57 = load ptr, ptr %6, align 8, !tbaa !5
  %58 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %57, i32 0, i32 2
  %59 = getelementptr inbounds %"struct.ClipperLib::IntPoint", ptr %58, i32 0, i32 1
  %60 = load i64, ptr %59, align 8, !tbaa !21
  %61 = load ptr, ptr %6, align 8, !tbaa !5
  %62 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %61, i32 0, i32 11
  %63 = load ptr, ptr %62, align 8, !tbaa !26
  %64 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %63, i32 0, i32 0
  %65 = getelementptr inbounds %"struct.ClipperLib::IntPoint", ptr %64, i32 0, i32 1
  %66 = load i64, ptr %65, align 8, !tbaa !23
  %67 = icmp eq i64 %60, %66
  br i1 %67, label %68, label %72

68:                                               ; preds = %56
  %69 = load ptr, ptr %6, align 8, !tbaa !5
  %70 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %69, i32 0, i32 11
  %71 = load ptr, ptr %70, align 8, !tbaa !26
  store ptr %71, ptr %6, align 8, !tbaa !5
  br label %56, !llvm.loop !28

72:                                               ; preds = %56
  br label %73

73:                                               ; preds = %82, %72
  %74 = load ptr, ptr %6, align 8, !tbaa !5
  %75 = load ptr, ptr %8, align 8, !tbaa !5
  %76 = icmp ne ptr %74, %75
  br i1 %76, label %77, label %80

77:                                               ; preds = %73
  %78 = load ptr, ptr %6, align 8, !tbaa !5
  %79 = call noundef zeroext i1 @_ZN10ClipperLib12IsHorizontalERNS_5TEdgeE(ptr noundef nonnull align 8 dereferenceable(136) %78)
  br label %80

80:                                               ; preds = %77, %73
  %81 = phi i1 [ false, %73 ], [ %79, %77 ]
  br i1 %81, label %82, label %86

82:                                               ; preds = %80
  %83 = load ptr, ptr %6, align 8, !tbaa !5
  %84 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %83, i32 0, i32 10
  %85 = load ptr, ptr %84, align 8, !tbaa !22
  store ptr %85, ptr %6, align 8, !tbaa !5
  br label %73, !llvm.loop !29

86:                                               ; preds = %80
  br label %87

87:                                               ; preds = %86, %54
  %88 = load ptr, ptr %6, align 8, !tbaa !5
  %89 = load ptr, ptr %8, align 8, !tbaa !5
  %90 = icmp eq ptr %88, %89
  br i1 %90, label %91, label %103

91:                                               ; preds = %87
  %92 = load i8, ptr %7, align 1, !tbaa !9, !range !19, !noundef !20
  %93 = trunc i8 %92 to i1
  br i1 %93, label %94, label %98

94:                                               ; preds = %91
  %95 = load ptr, ptr %6, align 8, !tbaa !5
  %96 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %95, i32 0, i32 10
  %97 = load ptr, ptr %96, align 8, !tbaa !22
  store ptr %97, ptr %8, align 8, !tbaa !5
  br label %102

98:                                               ; preds = %91
  %99 = load ptr, ptr %6, align 8, !tbaa !5
  %100 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %99, i32 0, i32 11
  %101 = load ptr, ptr %100, align 8, !tbaa !26
  store ptr %101, ptr %8, align 8, !tbaa !5
  br label %102

102:                                              ; preds = %98, %94
  br label %130

103:                                              ; preds = %87
  %104 = load i8, ptr %7, align 1, !tbaa !9, !range !19, !noundef !20
  %105 = trunc i8 %104 to i1
  br i1 %105, label %106, label %110

106:                                              ; preds = %103
  %107 = load ptr, ptr %8, align 8, !tbaa !5
  %108 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %107, i32 0, i32 10
  %109 = load ptr, ptr %108, align 8, !tbaa !22
  store ptr %109, ptr %6, align 8, !tbaa !5
  br label %114

110:                                              ; preds = %103
  %111 = load ptr, ptr %8, align 8, !tbaa !5
  %112 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %111, i32 0, i32 11
  %113 = load ptr, ptr %112, align 8, !tbaa !26
  store ptr %113, ptr %6, align 8, !tbaa !5
  br label %114

114:                                              ; preds = %110, %106
  call void @llvm.lifetime.start.p0(i64 24, ptr %10) #3
  %115 = load ptr, ptr %6, align 8, !tbaa !5
  %116 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %115, i32 0, i32 0
  %117 = getelementptr inbounds %"struct.ClipperLib::IntPoint", ptr %116, i32 0, i32 1
  %118 = load i64, ptr %117, align 8, !tbaa !23
  %119 = getelementptr inbounds %"struct.ClipperLib::LocalMinimum", ptr %10, i32 0, i32 0
  store i64 %118, ptr %119, align 8, !tbaa !30
  %120 = getelementptr inbounds %"struct.ClipperLib::LocalMinimum", ptr %10, i32 0, i32 1
  store ptr null, ptr %120, align 8, !tbaa !32
  %121 = load ptr, ptr %6, align 8, !tbaa !5
  %122 = getelementptr inbounds %"struct.ClipperLib::LocalMinimum", ptr %10, i32 0, i32 2
  store ptr %121, ptr %122, align 8, !tbaa !33
  %123 = load ptr, ptr %6, align 8, !tbaa !5
  %124 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %123, i32 0, i32 6
  store i32 0, ptr %124, align 8, !tbaa !34
  %125 = load ptr, ptr %6, align 8, !tbaa !5
  %126 = load i8, ptr %7, align 1, !tbaa !9, !range !19, !noundef !20
  %127 = trunc i8 %126 to i1
  %128 = call noundef ptr @_ZN10ClipperLib11ClipperBase12ProcessBoundEPNS_5TEdgeEb(ptr noundef nonnull align 8 dereferenceable(144) %14, ptr noundef %125, i1 noundef zeroext %127)
  store ptr %128, ptr %8, align 8, !tbaa !5
  %129 = getelementptr inbounds %"class.ClipperLib::ClipperBase", ptr %14, i32 0, i32 2
  call void @_ZNSt6vectorIN10ClipperLib12LocalMinimumESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %129, ptr noundef nonnull align 8 dereferenceable(24) %10)
  call void @llvm.lifetime.end.p0(i64 24, ptr %10) #3
  br label %130

130:                                              ; preds = %114, %102
  %131 = load ptr, ptr %8, align 8, !tbaa !5
  store ptr %131, ptr %4, align 8
  store i32 1, ptr %11, align 4
  br label %458

132:                                              ; preds = %3
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #3
  %133 = load ptr, ptr %6, align 8, !tbaa !5
  %134 = call noundef zeroext i1 @_ZN10ClipperLib12IsHorizontalERNS_5TEdgeE(ptr noundef nonnull align 8 dereferenceable(136) %133)
  br i1 %134, label %135, label %186

135:                                              ; preds = %132
  %136 = load i8, ptr %7, align 1, !tbaa !9, !range !19, !noundef !20
  %137 = trunc i8 %136 to i1
  br i1 %137, label %138, label %142

138:                                              ; preds = %135
  %139 = load ptr, ptr %6, align 8, !tbaa !5
  %140 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %139, i32 0, i32 11
  %141 = load ptr, ptr %140, align 8, !tbaa !26
  store ptr %141, ptr %12, align 8, !tbaa !5
  br label %146

142:                                              ; preds = %135
  %143 = load ptr, ptr %6, align 8, !tbaa !5
  %144 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %143, i32 0, i32 10
  %145 = load ptr, ptr %144, align 8, !tbaa !22
  store ptr %145, ptr %12, align 8, !tbaa !5
  br label %146

146:                                              ; preds = %142, %138
  %147 = load ptr, ptr %12, align 8, !tbaa !5
  %148 = call noundef zeroext i1 @_ZN10ClipperLib12IsHorizontalERNS_5TEdgeE(ptr noundef nonnull align 8 dereferenceable(136) %147)
  br i1 %148, label %149, label %172

149:                                              ; preds = %146
  %150 = load ptr, ptr %12, align 8, !tbaa !5
  %151 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %150, i32 0, i32 0
  %152 = getelementptr inbounds %"struct.ClipperLib::IntPoint", ptr %151, i32 0, i32 0
  %153 = load i64, ptr %152, align 8, !tbaa !35
  %154 = load ptr, ptr %6, align 8, !tbaa !5
  %155 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %154, i32 0, i32 0
  %156 = getelementptr inbounds %"struct.ClipperLib::IntPoint", ptr %155, i32 0, i32 0
  %157 = load i64, ptr %156, align 8, !tbaa !35
  %158 = icmp ne i64 %153, %157
  br i1 %158, label %159, label %171

159:                                              ; preds = %149
  %160 = load ptr, ptr %12, align 8, !tbaa !5
  %161 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %160, i32 0, i32 2
  %162 = getelementptr inbounds %"struct.ClipperLib::IntPoint", ptr %161, i32 0, i32 0
  %163 = load i64, ptr %162, align 8, !tbaa !36
  %164 = load ptr, ptr %6, align 8, !tbaa !5
  %165 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %164, i32 0, i32 0
  %166 = getelementptr inbounds %"struct.ClipperLib::IntPoint", ptr %165, i32 0, i32 0
  %167 = load i64, ptr %166, align 8, !tbaa !35
  %168 = icmp ne i64 %163, %167
  br i1 %168, label %169, label %171

169:                                              ; preds = %159
  %170 = load ptr, ptr %6, align 8, !tbaa !5
  call void @_ZN10ClipperLib17ReverseHorizontalERNS_5TEdgeE(ptr noundef nonnull align 8 dereferenceable(136) %170)
  br label %171

171:                                              ; preds = %169, %159, %149
  br label %185

172:                                              ; preds = %146
  %173 = load ptr, ptr %12, align 8, !tbaa !5
  %174 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %173, i32 0, i32 0
  %175 = getelementptr inbounds %"struct.ClipperLib::IntPoint", ptr %174, i32 0, i32 0
  %176 = load i64, ptr %175, align 8, !tbaa !35
  %177 = load ptr, ptr %6, align 8, !tbaa !5
  %178 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %177, i32 0, i32 0
  %179 = getelementptr inbounds %"struct.ClipperLib::IntPoint", ptr %178, i32 0, i32 0
  %180 = load i64, ptr %179, align 8, !tbaa !35
  %181 = icmp ne i64 %176, %180
  br i1 %181, label %182, label %184

182:                                              ; preds = %172
  %183 = load ptr, ptr %6, align 8, !tbaa !5
  call void @_ZN10ClipperLib17ReverseHorizontalERNS_5TEdgeE(ptr noundef nonnull align 8 dereferenceable(136) %183)
  br label %184

184:                                              ; preds = %182, %172
  br label %185

185:                                              ; preds = %184, %171
  br label %186

186:                                              ; preds = %185, %132
  %187 = load ptr, ptr %6, align 8, !tbaa !5
  store ptr %187, ptr %12, align 8, !tbaa !5
  %188 = load i8, ptr %7, align 1, !tbaa !9, !range !19, !noundef !20
  %189 = trunc i8 %188 to i1
  br i1 %189, label %190, label %316

190:                                              ; preds = %186
  br label %191

191:                                              ; preds = %212, %190
  %192 = load ptr, ptr %8, align 8, !tbaa !5
  %193 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %192, i32 0, i32 2
  %194 = getelementptr inbounds %"struct.ClipperLib::IntPoint", ptr %193, i32 0, i32 1
  %195 = load i64, ptr %194, align 8, !tbaa !21
  %196 = load ptr, ptr %8, align 8, !tbaa !5
  %197 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %196, i32 0, i32 10
  %198 = load ptr, ptr %197, align 8, !tbaa !22
  %199 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %198, i32 0, i32 0
  %200 = getelementptr inbounds %"struct.ClipperLib::IntPoint", ptr %199, i32 0, i32 1
  %201 = load i64, ptr %200, align 8, !tbaa !23
  %202 = icmp eq i64 %195, %201
  br i1 %202, label %203, label %210

203:                                              ; preds = %191
  %204 = load ptr, ptr %8, align 8, !tbaa !5
  %205 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %204, i32 0, i32 10
  %206 = load ptr, ptr %205, align 8, !tbaa !22
  %207 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %206, i32 0, i32 9
  %208 = load i32, ptr %207, align 4, !tbaa !11
  %209 = icmp ne i32 %208, -2
  br label %210

210:                                              ; preds = %203, %191
  %211 = phi i1 [ false, %191 ], [ %209, %203 ]
  br i1 %211, label %212, label %216

212:                                              ; preds = %210
  %213 = load ptr, ptr %8, align 8, !tbaa !5
  %214 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %213, i32 0, i32 10
  %215 = load ptr, ptr %214, align 8, !tbaa !22
  store ptr %215, ptr %8, align 8, !tbaa !5
  br label %191, !llvm.loop !37

216:                                              ; preds = %210
  %217 = load ptr, ptr %8, align 8, !tbaa !5
  %218 = call noundef zeroext i1 @_ZN10ClipperLib12IsHorizontalERNS_5TEdgeE(ptr noundef nonnull align 8 dereferenceable(136) %217)
  br i1 %218, label %219, label %256

219:                                              ; preds = %216
  %220 = load ptr, ptr %8, align 8, !tbaa !5
  %221 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %220, i32 0, i32 10
  %222 = load ptr, ptr %221, align 8, !tbaa !22
  %223 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %222, i32 0, i32 9
  %224 = load i32, ptr %223, align 4, !tbaa !11
  %225 = icmp ne i32 %224, -2
  br i1 %225, label %226, label %256

226:                                              ; preds = %219
  %227 = load ptr, ptr %8, align 8, !tbaa !5
  store ptr %227, ptr %9, align 8, !tbaa !5
  br label %228

228:                                              ; preds = %233, %226
  %229 = load ptr, ptr %9, align 8, !tbaa !5
  %230 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %229, i32 0, i32 11
  %231 = load ptr, ptr %230, align 8, !tbaa !26
  %232 = call noundef zeroext i1 @_ZN10ClipperLib12IsHorizontalERNS_5TEdgeE(ptr noundef nonnull align 8 dereferenceable(136) %231)
  br i1 %232, label %233, label %237

233:                                              ; preds = %228
  %234 = load ptr, ptr %9, align 8, !tbaa !5
  %235 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %234, i32 0, i32 11
  %236 = load ptr, ptr %235, align 8, !tbaa !26
  store ptr %236, ptr %9, align 8, !tbaa !5
  br label %228, !llvm.loop !38

237:                                              ; preds = %228
  %238 = load ptr, ptr %9, align 8, !tbaa !5
  %239 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %238, i32 0, i32 11
  %240 = load ptr, ptr %239, align 8, !tbaa !26
  %241 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %240, i32 0, i32 2
  %242 = getelementptr inbounds %"struct.ClipperLib::IntPoint", ptr %241, i32 0, i32 0
  %243 = load i64, ptr %242, align 8, !tbaa !36
  %244 = load ptr, ptr %8, align 8, !tbaa !5
  %245 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %244, i32 0, i32 10
  %246 = load ptr, ptr %245, align 8, !tbaa !22
  %247 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %246, i32 0, i32 2
  %248 = getelementptr inbounds %"struct.ClipperLib::IntPoint", ptr %247, i32 0, i32 0
  %249 = load i64, ptr %248, align 8, !tbaa !36
  %250 = icmp sgt i64 %243, %249
  br i1 %250, label %251, label %255

251:                                              ; preds = %237
  %252 = load ptr, ptr %9, align 8, !tbaa !5
  %253 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %252, i32 0, i32 11
  %254 = load ptr, ptr %253, align 8, !tbaa !26
  store ptr %254, ptr %8, align 8, !tbaa !5
  br label %255

255:                                              ; preds = %251, %237
  br label %256

256:                                              ; preds = %255, %219, %216
  br label %257

257:                                              ; preds = %287, %256
  %258 = load ptr, ptr %6, align 8, !tbaa !5
  %259 = load ptr, ptr %8, align 8, !tbaa !5
  %260 = icmp ne ptr %258, %259
  br i1 %260, label %261, label %291

261:                                              ; preds = %257
  %262 = load ptr, ptr %6, align 8, !tbaa !5
  %263 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %262, i32 0, i32 10
  %264 = load ptr, ptr %263, align 8, !tbaa !22
  %265 = load ptr, ptr %6, align 8, !tbaa !5
  %266 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %265, i32 0, i32 12
  store ptr %264, ptr %266, align 8, !tbaa !39
  %267 = load ptr, ptr %6, align 8, !tbaa !5
  %268 = call noundef zeroext i1 @_ZN10ClipperLib12IsHorizontalERNS_5TEdgeE(ptr noundef nonnull align 8 dereferenceable(136) %267)
  br i1 %268, label %269, label %287

269:                                              ; preds = %261
  %270 = load ptr, ptr %6, align 8, !tbaa !5
  %271 = load ptr, ptr %12, align 8, !tbaa !5
  %272 = icmp ne ptr %270, %271
  br i1 %272, label %273, label %287

273:                                              ; preds = %269
  %274 = load ptr, ptr %6, align 8, !tbaa !5
  %275 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %274, i32 0, i32 0
  %276 = getelementptr inbounds %"struct.ClipperLib::IntPoint", ptr %275, i32 0, i32 0
  %277 = load i64, ptr %276, align 8, !tbaa !35
  %278 = load ptr, ptr %6, align 8, !tbaa !5
  %279 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %278, i32 0, i32 11
  %280 = load ptr, ptr %279, align 8, !tbaa !26
  %281 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %280, i32 0, i32 2
  %282 = getelementptr inbounds %"struct.ClipperLib::IntPoint", ptr %281, i32 0, i32 0
  %283 = load i64, ptr %282, align 8, !tbaa !36
  %284 = icmp ne i64 %277, %283
  br i1 %284, label %285, label %287

285:                                              ; preds = %273
  %286 = load ptr, ptr %6, align 8, !tbaa !5
  call void @_ZN10ClipperLib17ReverseHorizontalERNS_5TEdgeE(ptr noundef nonnull align 8 dereferenceable(136) %286)
  br label %287

287:                                              ; preds = %285, %273, %269, %261
  %288 = load ptr, ptr %6, align 8, !tbaa !5
  %289 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %288, i32 0, i32 10
  %290 = load ptr, ptr %289, align 8, !tbaa !22
  store ptr %290, ptr %6, align 8, !tbaa !5
  br label %257, !llvm.loop !40

291:                                              ; preds = %257
  %292 = load ptr, ptr %6, align 8, !tbaa !5
  %293 = call noundef zeroext i1 @_ZN10ClipperLib12IsHorizontalERNS_5TEdgeE(ptr noundef nonnull align 8 dereferenceable(136) %292)
  br i1 %293, label %294, label %312

294:                                              ; preds = %291
  %295 = load ptr, ptr %6, align 8, !tbaa !5
  %296 = load ptr, ptr %12, align 8, !tbaa !5
  %297 = icmp ne ptr %295, %296
  br i1 %297, label %298, label %312

298:                                              ; preds = %294
  %299 = load ptr, ptr %6, align 8, !tbaa !5
  %300 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %299, i32 0, i32 0
  %301 = getelementptr inbounds %"struct.ClipperLib::IntPoint", ptr %300, i32 0, i32 0
  %302 = load i64, ptr %301, align 8, !tbaa !35
  %303 = load ptr, ptr %6, align 8, !tbaa !5
  %304 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %303, i32 0, i32 11
  %305 = load ptr, ptr %304, align 8, !tbaa !26
  %306 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %305, i32 0, i32 2
  %307 = getelementptr inbounds %"struct.ClipperLib::IntPoint", ptr %306, i32 0, i32 0
  %308 = load i64, ptr %307, align 8, !tbaa !36
  %309 = icmp ne i64 %302, %308
  br i1 %309, label %310, label %312

310:                                              ; preds = %298
  %311 = load ptr, ptr %6, align 8, !tbaa !5
  call void @_ZN10ClipperLib17ReverseHorizontalERNS_5TEdgeE(ptr noundef nonnull align 8 dereferenceable(136) %311)
  br label %312

312:                                              ; preds = %310, %298, %294, %291
  %313 = load ptr, ptr %8, align 8, !tbaa !5
  %314 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %313, i32 0, i32 10
  %315 = load ptr, ptr %314, align 8, !tbaa !22
  store ptr %315, ptr %8, align 8, !tbaa !5
  br label %456

316:                                              ; preds = %186
  br label %317

317:                                              ; preds = %338, %316
  %318 = load ptr, ptr %8, align 8, !tbaa !5
  %319 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %318, i32 0, i32 2
  %320 = getelementptr inbounds %"struct.ClipperLib::IntPoint", ptr %319, i32 0, i32 1
  %321 = load i64, ptr %320, align 8, !tbaa !21
  %322 = load ptr, ptr %8, align 8, !tbaa !5
  %323 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %322, i32 0, i32 11
  %324 = load ptr, ptr %323, align 8, !tbaa !26
  %325 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %324, i32 0, i32 0
  %326 = getelementptr inbounds %"struct.ClipperLib::IntPoint", ptr %325, i32 0, i32 1
  %327 = load i64, ptr %326, align 8, !tbaa !23
  %328 = icmp eq i64 %321, %327
  br i1 %328, label %329, label %336

329:                                              ; preds = %317
  %330 = load ptr, ptr %8, align 8, !tbaa !5
  %331 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %330, i32 0, i32 11
  %332 = load ptr, ptr %331, align 8, !tbaa !26
  %333 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %332, i32 0, i32 9
  %334 = load i32, ptr %333, align 4, !tbaa !11
  %335 = icmp ne i32 %334, -2
  br label %336

336:                                              ; preds = %329, %317
  %337 = phi i1 [ false, %317 ], [ %335, %329 ]
  br i1 %337, label %338, label %342

338:                                              ; preds = %336
  %339 = load ptr, ptr %8, align 8, !tbaa !5
  %340 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %339, i32 0, i32 11
  %341 = load ptr, ptr %340, align 8, !tbaa !26
  store ptr %341, ptr %8, align 8, !tbaa !5
  br label %317, !llvm.loop !41

342:                                              ; preds = %336
  %343 = load ptr, ptr %8, align 8, !tbaa !5
  %344 = call noundef zeroext i1 @_ZN10ClipperLib12IsHorizontalERNS_5TEdgeE(ptr noundef nonnull align 8 dereferenceable(136) %343)
  br i1 %344, label %345, label %396

345:                                              ; preds = %342
  %346 = load ptr, ptr %8, align 8, !tbaa !5
  %347 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %346, i32 0, i32 11
  %348 = load ptr, ptr %347, align 8, !tbaa !26
  %349 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %348, i32 0, i32 9
  %350 = load i32, ptr %349, align 4, !tbaa !11
  %351 = icmp ne i32 %350, -2
  br i1 %351, label %352, label %396

352:                                              ; preds = %345
  %353 = load ptr, ptr %8, align 8, !tbaa !5
  store ptr %353, ptr %9, align 8, !tbaa !5
  br label %354

354:                                              ; preds = %359, %352
  %355 = load ptr, ptr %9, align 8, !tbaa !5
  %356 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %355, i32 0, i32 10
  %357 = load ptr, ptr %356, align 8, !tbaa !22
  %358 = call noundef zeroext i1 @_ZN10ClipperLib12IsHorizontalERNS_5TEdgeE(ptr noundef nonnull align 8 dereferenceable(136) %357)
  br i1 %358, label %359, label %363

359:                                              ; preds = %354
  %360 = load ptr, ptr %9, align 8, !tbaa !5
  %361 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %360, i32 0, i32 10
  %362 = load ptr, ptr %361, align 8, !tbaa !22
  store ptr %362, ptr %9, align 8, !tbaa !5
  br label %354, !llvm.loop !42

363:                                              ; preds = %354
  %364 = load ptr, ptr %9, align 8, !tbaa !5
  %365 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %364, i32 0, i32 10
  %366 = load ptr, ptr %365, align 8, !tbaa !22
  %367 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %366, i32 0, i32 2
  %368 = getelementptr inbounds %"struct.ClipperLib::IntPoint", ptr %367, i32 0, i32 0
  %369 = load i64, ptr %368, align 8, !tbaa !36
  %370 = load ptr, ptr %8, align 8, !tbaa !5
  %371 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %370, i32 0, i32 11
  %372 = load ptr, ptr %371, align 8, !tbaa !26
  %373 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %372, i32 0, i32 2
  %374 = getelementptr inbounds %"struct.ClipperLib::IntPoint", ptr %373, i32 0, i32 0
  %375 = load i64, ptr %374, align 8, !tbaa !36
  %376 = icmp eq i64 %369, %375
  br i1 %376, label %391, label %377

377:                                              ; preds = %363
  %378 = load ptr, ptr %9, align 8, !tbaa !5
  %379 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %378, i32 0, i32 10
  %380 = load ptr, ptr %379, align 8, !tbaa !22
  %381 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %380, i32 0, i32 2
  %382 = getelementptr inbounds %"struct.ClipperLib::IntPoint", ptr %381, i32 0, i32 0
  %383 = load i64, ptr %382, align 8, !tbaa !36
  %384 = load ptr, ptr %8, align 8, !tbaa !5
  %385 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %384, i32 0, i32 11
  %386 = load ptr, ptr %385, align 8, !tbaa !26
  %387 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %386, i32 0, i32 2
  %388 = getelementptr inbounds %"struct.ClipperLib::IntPoint", ptr %387, i32 0, i32 0
  %389 = load i64, ptr %388, align 8, !tbaa !36
  %390 = icmp sgt i64 %383, %389
  br i1 %390, label %391, label %395

391:                                              ; preds = %377, %363
  %392 = load ptr, ptr %9, align 8, !tbaa !5
  %393 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %392, i32 0, i32 10
  %394 = load ptr, ptr %393, align 8, !tbaa !22
  store ptr %394, ptr %8, align 8, !tbaa !5
  br label %395

395:                                              ; preds = %391, %377
  br label %396

396:                                              ; preds = %395, %345, %342
  br label %397

397:                                              ; preds = %427, %396
  %398 = load ptr, ptr %6, align 8, !tbaa !5
  %399 = load ptr, ptr %8, align 8, !tbaa !5
  %400 = icmp ne ptr %398, %399
  br i1 %400, label %401, label %431

401:                                              ; preds = %397
  %402 = load ptr, ptr %6, align 8, !tbaa !5
  %403 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %402, i32 0, i32 11
  %404 = load ptr, ptr %403, align 8, !tbaa !26
  %405 = load ptr, ptr %6, align 8, !tbaa !5
  %406 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %405, i32 0, i32 12
  store ptr %404, ptr %406, align 8, !tbaa !39
  %407 = load ptr, ptr %6, align 8, !tbaa !5
  %408 = call noundef zeroext i1 @_ZN10ClipperLib12IsHorizontalERNS_5TEdgeE(ptr noundef nonnull align 8 dereferenceable(136) %407)
  br i1 %408, label %409, label %427

409:                                              ; preds = %401
  %410 = load ptr, ptr %6, align 8, !tbaa !5
  %411 = load ptr, ptr %12, align 8, !tbaa !5
  %412 = icmp ne ptr %410, %411
  br i1 %412, label %413, label %427

413:                                              ; preds = %409
  %414 = load ptr, ptr %6, align 8, !tbaa !5
  %415 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %414, i32 0, i32 0
  %416 = getelementptr inbounds %"struct.ClipperLib::IntPoint", ptr %415, i32 0, i32 0
  %417 = load i64, ptr %416, align 8, !tbaa !35
  %418 = load ptr, ptr %6, align 8, !tbaa !5
  %419 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %418, i32 0, i32 10
  %420 = load ptr, ptr %419, align 8, !tbaa !22
  %421 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %420, i32 0, i32 2
  %422 = getelementptr inbounds %"struct.ClipperLib::IntPoint", ptr %421, i32 0, i32 0
  %423 = load i64, ptr %422, align 8, !tbaa !36
  %424 = icmp ne i64 %417, %423
  br i1 %424, label %425, label %427

425:                                              ; preds = %413
  %426 = load ptr, ptr %6, align 8, !tbaa !5
  call void @_ZN10ClipperLib17ReverseHorizontalERNS_5TEdgeE(ptr noundef nonnull align 8 dereferenceable(136) %426)
  br label %427

427:                                              ; preds = %425, %413, %409, %401
  %428 = load ptr, ptr %6, align 8, !tbaa !5
  %429 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %428, i32 0, i32 11
  %430 = load ptr, ptr %429, align 8, !tbaa !26
  store ptr %430, ptr %6, align 8, !tbaa !5
  br label %397, !llvm.loop !43

431:                                              ; preds = %397
  %432 = load ptr, ptr %6, align 8, !tbaa !5
  %433 = call noundef zeroext i1 @_ZN10ClipperLib12IsHorizontalERNS_5TEdgeE(ptr noundef nonnull align 8 dereferenceable(136) %432)
  br i1 %433, label %434, label %452

434:                                              ; preds = %431
  %435 = load ptr, ptr %6, align 8, !tbaa !5
  %436 = load ptr, ptr %12, align 8, !tbaa !5
  %437 = icmp ne ptr %435, %436
  br i1 %437, label %438, label %452

438:                                              ; preds = %434
  %439 = load ptr, ptr %6, align 8, !tbaa !5
  %440 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %439, i32 0, i32 0
  %441 = getelementptr inbounds %"struct.ClipperLib::IntPoint", ptr %440, i32 0, i32 0
  %442 = load i64, ptr %441, align 8, !tbaa !35
  %443 = load ptr, ptr %6, align 8, !tbaa !5
  %444 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %443, i32 0, i32 10
  %445 = load ptr, ptr %444, align 8, !tbaa !22
  %446 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %445, i32 0, i32 2
  %447 = getelementptr inbounds %"struct.ClipperLib::IntPoint", ptr %446, i32 0, i32 0
  %448 = load i64, ptr %447, align 8, !tbaa !36
  %449 = icmp ne i64 %442, %448
  br i1 %449, label %450, label %452

450:                                              ; preds = %438
  %451 = load ptr, ptr %6, align 8, !tbaa !5
  call void @_ZN10ClipperLib17ReverseHorizontalERNS_5TEdgeE(ptr noundef nonnull align 8 dereferenceable(136) %451)
  br label %452

452:                                              ; preds = %450, %438, %434, %431
  %453 = load ptr, ptr %8, align 8, !tbaa !5
  %454 = getelementptr inbounds %"struct.ClipperLib::TEdge", ptr %453, i32 0, i32 11
  %455 = load ptr, ptr %454, align 8, !tbaa !26
  store ptr %455, ptr %8, align 8, !tbaa !5
  br label %456

456:                                              ; preds = %452, %312
  %457 = load ptr, ptr %8, align 8, !tbaa !5
  store ptr %457, ptr %4, align 8
  store i32 1, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #3
  br label %458

458:                                              ; preds = %456, %130
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #3
  %459 = load ptr, ptr %4, align 8
  ret ptr %459
}

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN10ClipperLib17ReverseHorizontalERNS_5TEdgeE(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 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 = { nounwind }

!llvm.module.flags = !{!0, !1, !2, !3}
!llvm.ident = !{!4}

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"bool", !7, i64 0}
!11 = !{!12, !18, i64 76}
!12 = !{!"_ZTSN10ClipperLib5TEdgeE", !13, i64 0, !13, i64 16, !13, i64 32, !15, i64 48, !16, i64 56, !17, i64 60, !18, i64 64, !18, i64 68, !18, i64 72, !18, i64 76, !6, i64 80, !6, i64 88, !6, i64 96, !6, i64 104, !6, i64 112, !6, i64 120, !6, i64 128}
!13 = !{!"_ZTSN10ClipperLib8IntPointE", !14, i64 0, !14, i64 8}
!14 = !{!"long long", !7, i64 0}
!15 = !{!"double", !7, i64 0}
!16 = !{!"_ZTSN10ClipperLib8PolyTypeE", !7, i64 0}
!17 = !{!"_ZTSN10ClipperLib8EdgeSideE", !7, i64 0}
!18 = !{!"int", !7, i64 0}
!19 = !{i8 0, i8 2}
!20 = !{}
!21 = !{!12, !14, i64 40}
!22 = !{!12, !6, i64 80}
!23 = !{!12, !14, i64 8}
!24 = distinct !{!24, !25}
!25 = !{!"llvm.loop.mustprogress"}
!26 = !{!12, !6, i64 88}
!27 = distinct !{!27, !25}
!28 = distinct !{!28, !25}
!29 = distinct !{!29, !25}
!30 = !{!31, !14, i64 0}
!31 = !{!"_ZTSN10ClipperLib12LocalMinimumE", !14, i64 0, !6, i64 8, !6, i64 16}
!32 = !{!31, !6, i64 8}
!33 = !{!31, !6, i64 16}
!34 = !{!12, !18, i64 64}
!35 = !{!12, !14, i64 0}
!36 = !{!12, !14, i64 32}
!37 = distinct !{!37, !25}
!38 = distinct !{!38, !25}
!39 = !{!12, !6, i64 96}
!40 = distinct !{!40, !25}
!41 = distinct !{!41, !25}
!42 = distinct !{!42, !25}
!43 = distinct !{!43, !25}


; 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.ClipperLib::LocalMinimum" = type { i64, ptr, ptr }

; 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: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZN10ClipperLib12IsHorizontalERNS_5TEdgeE(ptr noundef nonnull align 8 dereferenceable(136)) local_unnamed_addr #1

; Function Attrs: mustprogress uwtable
define dso_local noundef ptr @_ZN10ClipperLib11ClipperBase12ProcessBoundEPNS_5TEdgeEb(ptr noundef nonnull align 8 dereferenceable(144) %0, ptr noundef %1, i1 noundef zeroext %2) local_unnamed_addr #2 align 2 {
  %4 = alloca %"struct.ClipperLib::LocalMinimum", align 8
  %5 = getelementptr inbounds i8, ptr %1, i64 76
  %6 = load i32, ptr %5, align 4, !tbaa !5
  %7 = icmp eq i32 %6, -2
  br i1 %7, label %8, label %47

8:                                                ; preds = %3
  br i1 %2, label %.preheader157, label %.preheader160

.preheader157:                                    ; preds = %8, %.preheader157
  %.0120 = phi ptr [ %12, %.preheader157 ], [ %1, %8 ]
  %9 = getelementptr inbounds i8, ptr %.0120, i64 40
  %10 = load i64, ptr %9, align 8, !tbaa !16
  %11 = getelementptr inbounds i8, ptr %.0120, i64 80
  %12 = load ptr, ptr %11, align 8, !tbaa !17
  %13 = getelementptr inbounds i8, ptr %12, i64 8
  %14 = load i64, ptr %13, align 8, !tbaa !18
  %15 = icmp eq i64 %10, %14
  br i1 %15, label %.preheader157, label %.preheader, !llvm.loop !19

.preheader:                                       ; preds = %.preheader157
  %.not147191 = icmp eq ptr %.0120, %1
  br i1 %.not147191, label %.critedge, label %.lr.ph193

.lr.ph193:                                        ; preds = %.preheader, %17
  %.1121192 = phi ptr [ %19, %17 ], [ %.0120, %.preheader ]
  %16 = tail call noundef zeroext i1 @_ZN10ClipperLib12IsHorizontalERNS_5TEdgeE(ptr noundef nonnull align 8 dereferenceable(136) %.1121192)
  br i1 %16, label %17, label %.critedge

17:                                               ; preds = %.lr.ph193
  %18 = getelementptr inbounds i8, ptr %.1121192, i64 88
  %19 = load ptr, ptr %18, align 8, !tbaa !21
  %.not147 = icmp eq ptr %19, %1
  br i1 %.not147, label %.critedge, label %.lr.ph193, !llvm.loop !22

.preheader160:                                    ; preds = %8, %.preheader160
  %.2122 = phi ptr [ %23, %.preheader160 ], [ %1, %8 ]
  %20 = getelementptr inbounds i8, ptr %.2122, i64 40
  %21 = load i64, ptr %20, align 8, !tbaa !16
  %22 = getelementptr inbounds i8, ptr %.2122, i64 88
  %23 = load ptr, ptr %22, align 8, !tbaa !21
  %24 = getelementptr inbounds i8, ptr %23, i64 8
  %25 = load i64, ptr %24, align 8, !tbaa !18
  %26 = icmp eq i64 %21, %25
  br i1 %26, label %.preheader160, label %.preheader158, !llvm.loop !23

.preheader158:                                    ; preds = %.preheader160
  %.not146185 = icmp eq ptr %.2122, %1
  br i1 %.not146185, label %.critedge, label %.lr.ph187

.lr.ph187:                                        ; preds = %.preheader158, %28
  %.3123186 = phi ptr [ %30, %28 ], [ %.2122, %.preheader158 ]
  %27 = tail call noundef zeroext i1 @_ZN10ClipperLib12IsHorizontalERNS_5TEdgeE(ptr noundef nonnull align 8 dereferenceable(136) %.3123186)
  br i1 %27, label %28, label %.critedge

28:                                               ; preds = %.lr.ph187
  %29 = getelementptr inbounds i8, ptr %.3123186, i64 80
  %30 = load ptr, ptr %29, align 8, !tbaa !17
  %.not146 = icmp eq ptr %30, %1
  br i1 %.not146, label %.critedge, label %.lr.ph187, !llvm.loop !24

.critedge:                                        ; preds = %28, %.lr.ph187, %17, %.lr.ph193, %.preheader158, %.preheader
  %.4124 = phi ptr [ %.0120, %.preheader ], [ %.2122, %.preheader158 ], [ %19, %17 ], [ %.1121192, %.lr.ph193 ], [ %30, %28 ], [ %.3123186, %.lr.ph187 ]
  %31 = icmp eq ptr %.4124, %1
  br i1 %31, label %32, label %39

32:                                               ; preds = %.critedge
  br i1 %2, label %33, label %36

33:                                               ; preds = %32
  %34 = getelementptr inbounds i8, ptr %.4124, i64 80
  %35 = load ptr, ptr %34, align 8, !tbaa !17
  br label %common.ret235

36:                                               ; preds = %32
  %37 = getelementptr inbounds i8, ptr %.4124, i64 88
  %38 = load ptr, ptr %37, align 8, !tbaa !21
  br label %common.ret235

common.ret235:                                    ; preds = %36, %33, %170, %39
  %common.ret235.op = phi ptr [ %45, %39 ], [ %.5, %170 ], [ %35, %33 ], [ %38, %36 ]
  ret ptr %common.ret235.op

39:                                               ; preds = %.critedge
  %.5125.in.v = select i1 %2, i64 80, i64 88
  %.5125.in = getelementptr inbounds i8, ptr %1, i64 %.5125.in.v
  %.5125 = load ptr, ptr %.5125.in, align 8, !tbaa !25
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %4) #3
  %40 = getelementptr inbounds i8, ptr %.5125, i64 8
  %41 = load i64, ptr %40, align 8, !tbaa !18
  store i64 %41, ptr %4, align 8, !tbaa !26
  %42 = getelementptr inbounds i8, ptr %4, i64 8
  store ptr null, ptr %42, align 8, !tbaa !28
  %43 = getelementptr inbounds i8, ptr %4, i64 16
  store ptr %.5125, ptr %43, align 8, !tbaa !29
  %44 = getelementptr inbounds i8, ptr %.5125, i64 64
  store i32 0, ptr %44, align 8, !tbaa !30
  %45 = tail call noundef ptr @_ZN10ClipperLib11ClipperBase12ProcessBoundEPNS_5TEdgeEb(ptr noundef nonnull align 8 dereferenceable(144) %0, ptr noundef %.5125, i1 noundef zeroext %2)
  %46 = getelementptr inbounds i8, ptr %0, i64 16
  call void @_ZNSt6vectorIN10ClipperLib12LocalMinimumESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %46, ptr noundef nonnull align 8 dereferenceable(24) %4)
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %4) #3
  br label %common.ret235

47:                                               ; preds = %3
  %48 = tail call noundef zeroext i1 @_ZN10ClipperLib12IsHorizontalERNS_5TEdgeE(ptr noundef nonnull align 8 dereferenceable(136) %1)
  br i1 %48, label %49, label %58

49:                                               ; preds = %47
  %.0.in.v = select i1 %2, i64 88, i64 80
  %.0.in = getelementptr inbounds i8, ptr %1, i64 %.0.in.v
  %.0 = load ptr, ptr %.0.in, align 8, !tbaa !25
  %50 = tail call noundef zeroext i1 @_ZN10ClipperLib12IsHorizontalERNS_5TEdgeE(ptr noundef nonnull align 8 dereferenceable(136) %.0)
  %51 = load i64, ptr %.0, align 8, !tbaa !31
  %52 = load i64, ptr %1, align 8, !tbaa !31
  %.not130 = icmp eq i64 %51, %52
  br i1 %50, label %53, label %57

53:                                               ; preds = %49
  br i1 %.not130, label %58, label %54

54:                                               ; preds = %53
  %55 = getelementptr inbounds i8, ptr %.0, i64 32
  %56 = load i64, ptr %55, align 8, !tbaa !32
  %.not131 = icmp eq i64 %56, %52
  br i1 %.not131, label %58, label %.sink.split

57:                                               ; preds = %49
  br i1 %.not130, label %58, label %.sink.split

.sink.split:                                      ; preds = %57, %54
  tail call void @_ZN10ClipperLib17ReverseHorizontalERNS_5TEdgeE(ptr noundef nonnull align 8 dereferenceable(136) %1)
  br label %58

58:                                               ; preds = %.sink.split, %54, %53, %57, %47
  br i1 %2, label %.preheader162, label %.preheader164

.preheader162:                                    ; preds = %58, %66
  %.1118 = phi ptr [ %62, %66 ], [ %1, %58 ]
  %59 = getelementptr inbounds i8, ptr %.1118, i64 40
  %60 = load i64, ptr %59, align 8, !tbaa !16
  %61 = getelementptr inbounds i8, ptr %.1118, i64 80
  %62 = load ptr, ptr %61, align 8, !tbaa !17
  %63 = getelementptr inbounds i8, ptr %62, i64 8
  %64 = load i64, ptr %63, align 8, !tbaa !18
  %65 = icmp eq i64 %60, %64
  br i1 %65, label %66, label %.critedge4

66:                                               ; preds = %.preheader162
  %67 = getelementptr inbounds i8, ptr %62, i64 76
  %68 = load i32, ptr %67, align 4, !tbaa !5
  %.not139 = icmp eq i32 %68, -2
  br i1 %.not139, label %.critedge4, label %.preheader162, !llvm.loop !33

.critedge4:                                       ; preds = %.preheader162, %66
  %69 = getelementptr inbounds i8, ptr %.1118, i64 80
  %70 = tail call noundef zeroext i1 @_ZN10ClipperLib12IsHorizontalERNS_5TEdgeE(ptr noundef nonnull align 8 dereferenceable(136) %.1118)
  br i1 %70, label %71, label %90

71:                                               ; preds = %.critedge4
  %72 = load ptr, ptr %69, align 8, !tbaa !17
  %73 = getelementptr inbounds i8, ptr %72, i64 76
  %74 = load i32, ptr %73, align 4, !tbaa !5
  %.not140 = icmp eq i32 %74, -2
  br i1 %.not140, label %90, label %.preheader161

.preheader161:                                    ; preds = %71
  %75 = getelementptr inbounds i8, ptr %.1118, i64 88
  %76 = load ptr, ptr %75, align 8, !tbaa !21
  %77 = tail call noundef zeroext i1 @_ZN10ClipperLib12IsHorizontalERNS_5TEdgeE(ptr noundef nonnull align 8 dereferenceable(136) %76)
  br i1 %77, label %.lr.ph176, label %._crit_edge177

.lr.ph176:                                        ; preds = %.preheader161, %.lr.ph176
  %78 = phi ptr [ %80, %.lr.ph176 ], [ %75, %.preheader161 ]
  %79 = load ptr, ptr %78, align 8, !tbaa !21
  %80 = getelementptr inbounds i8, ptr %79, i64 88
  %81 = load ptr, ptr %80, align 8, !tbaa !21
  %82 = tail call noundef zeroext i1 @_ZN10ClipperLib12IsHorizontalERNS_5TEdgeE(ptr noundef nonnull align 8 dereferenceable(136) %81)
  br i1 %82, label %.lr.ph176, label %._crit_edge177, !llvm.loop !34

._crit_edge177:                                   ; preds = %.lr.ph176, %.preheader161
  %.lcssa = phi ptr [ %75, %.preheader161 ], [ %80, %.lr.ph176 ]
  %83 = load ptr, ptr %.lcssa, align 8, !tbaa !21
  %84 = getelementptr inbounds i8, ptr %83, i64 32
  %85 = load i64, ptr %84, align 8, !tbaa !32
  %86 = load ptr, ptr %69, align 8, !tbaa !17
  %87 = getelementptr inbounds i8, ptr %86, i64 32
  %88 = load i64, ptr %87, align 8, !tbaa !32
  %89 = icmp sgt i64 %85, %88
  %spec.select = select i1 %89, ptr %83, ptr %.1118
  br label %90

90:                                               ; preds = %._crit_edge177, %71, %.critedge4
  %.2 = phi ptr [ %.1118, %71 ], [ %.1118, %.critedge4 ], [ %spec.select, %._crit_edge177 ]
  %.not141179 = icmp eq ptr %.2, %1
  br i1 %.not141179, label %._crit_edge183.thread, label %.lr.ph182

._crit_edge183.thread:                            ; preds = %90
  %91 = tail call noundef zeroext i1 @_ZN10ClipperLib12IsHorizontalERNS_5TEdgeE(ptr noundef nonnull align 8 dereferenceable(136) %1)
  br label %113

.lr.ph182:                                        ; preds = %90, %103
  %.6180 = phi ptr [ %104, %103 ], [ %1, %90 ]
  %92 = getelementptr inbounds i8, ptr %.6180, i64 80
  %93 = load ptr, ptr %92, align 8, !tbaa !17
  %94 = getelementptr inbounds i8, ptr %.6180, i64 96
  store ptr %93, ptr %94, align 8, !tbaa !35
  %95 = tail call noundef zeroext i1 @_ZN10ClipperLib12IsHorizontalERNS_5TEdgeE(ptr noundef nonnull align 8 dereferenceable(136) %.6180)
  %.not144 = icmp ne ptr %.6180, %1
  %or.cond.not = and i1 %.not144, %95
  br i1 %or.cond.not, label %96, label %103

96:                                               ; preds = %.lr.ph182
  %97 = load i64, ptr %.6180, align 8, !tbaa !31
  %98 = getelementptr inbounds i8, ptr %.6180, i64 88
  %99 = load ptr, ptr %98, align 8, !tbaa !21
  %100 = getelementptr inbounds i8, ptr %99, i64 32
  %101 = load i64, ptr %100, align 8, !tbaa !32
  %.not145 = icmp eq i64 %97, %101
  br i1 %.not145, label %103, label %102

102:                                              ; preds = %96
  tail call void @_ZN10ClipperLib17ReverseHorizontalERNS_5TEdgeE(ptr noundef nonnull align 8 dereferenceable(136) %.6180)
  br label %103

103:                                              ; preds = %102, %96, %.lr.ph182
  %104 = load ptr, ptr %92, align 8, !tbaa !17
  %.not141 = icmp eq ptr %104, %.2
  br i1 %.not141, label %._crit_edge183, label %.lr.ph182, !llvm.loop !36

._crit_edge183:                                   ; preds = %103
  %105 = tail call noundef zeroext i1 @_ZN10ClipperLib12IsHorizontalERNS_5TEdgeE(ptr noundef nonnull align 8 dereferenceable(136) %104)
  %.not142 = icmp ne ptr %104, %1
  %or.cond150.not = and i1 %.not142, %105
  br i1 %or.cond150.not, label %106, label %113

106:                                              ; preds = %._crit_edge183
  %107 = load i64, ptr %104, align 8, !tbaa !31
  %108 = getelementptr inbounds i8, ptr %104, i64 88
  %109 = load ptr, ptr %108, align 8, !tbaa !21
  %110 = getelementptr inbounds i8, ptr %109, i64 32
  %111 = load i64, ptr %110, align 8, !tbaa !32
  %.not143 = icmp eq i64 %107, %111
  br i1 %.not143, label %113, label %112

112:                                              ; preds = %106
  tail call void @_ZN10ClipperLib17ReverseHorizontalERNS_5TEdgeE(ptr noundef nonnull align 8 dereferenceable(136) %104)
  br label %113

113:                                              ; preds = %._crit_edge183.thread, %112, %106, %._crit_edge183
  %114 = getelementptr inbounds i8, ptr %.2, i64 80
  br label %170

.preheader164:                                    ; preds = %58, %122
  %.3 = phi ptr [ %118, %122 ], [ %1, %58 ]
  %115 = getelementptr inbounds i8, ptr %.3, i64 40
  %116 = load i64, ptr %115, align 8, !tbaa !16
  %117 = getelementptr inbounds i8, ptr %.3, i64 88
  %118 = load ptr, ptr %117, align 8, !tbaa !21
  %119 = getelementptr inbounds i8, ptr %118, i64 8
  %120 = load i64, ptr %119, align 8, !tbaa !18
  %121 = icmp eq i64 %116, %120
  br i1 %121, label %122, label %.critedge6

122:                                              ; preds = %.preheader164
  %123 = getelementptr inbounds i8, ptr %118, i64 76
  %124 = load i32, ptr %123, align 4, !tbaa !5
  %.not132 = icmp eq i32 %124, -2
  br i1 %.not132, label %.critedge6, label %.preheader164, !llvm.loop !37

.critedge6:                                       ; preds = %.preheader164, %122
  %125 = getelementptr inbounds i8, ptr %.3, i64 88
  %126 = tail call noundef zeroext i1 @_ZN10ClipperLib12IsHorizontalERNS_5TEdgeE(ptr noundef nonnull align 8 dereferenceable(136) %.3)
  br i1 %126, label %127, label %145

127:                                              ; preds = %.critedge6
  %128 = load ptr, ptr %125, align 8, !tbaa !21
  %129 = getelementptr inbounds i8, ptr %128, i64 76
  %130 = load i32, ptr %129, align 4, !tbaa !5
  %.not133 = icmp eq i32 %130, -2
  br i1 %.not133, label %145, label %.preheader163

.preheader163:                                    ; preds = %127
  %131 = getelementptr inbounds i8, ptr %.3, i64 80
  %132 = load ptr, ptr %131, align 8, !tbaa !17
  %133 = tail call noundef zeroext i1 @_ZN10ClipperLib12IsHorizontalERNS_5TEdgeE(ptr noundef nonnull align 8 dereferenceable(136) %132)
  br i1 %133, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %.preheader163, %.lr.ph
  %134 = phi ptr [ %136, %.lr.ph ], [ %131, %.preheader163 ]
  %135 = load ptr, ptr %134, align 8, !tbaa !17
  %136 = getelementptr inbounds i8, ptr %135, i64 80
  %137 = load ptr, ptr %136, align 8, !tbaa !17
  %138 = tail call noundef zeroext i1 @_ZN10ClipperLib12IsHorizontalERNS_5TEdgeE(ptr noundef nonnull align 8 dereferenceable(136) %137)
  br i1 %138, label %.lr.ph, label %._crit_edge, !llvm.loop !38

._crit_edge:                                      ; preds = %.lr.ph, %.preheader163
  %.lcssa166 = phi ptr [ %131, %.preheader163 ], [ %136, %.lr.ph ]
  %139 = load ptr, ptr %.lcssa166, align 8, !tbaa !17
  %140 = getelementptr inbounds i8, ptr %139, i64 32
  %141 = load i64, ptr %140, align 8, !tbaa !32
  %142 = load ptr, ptr %125, align 8, !tbaa !21
  %143 = getelementptr inbounds i8, ptr %142, i64 32
  %144 = load i64, ptr %143, align 8, !tbaa !32
  %or.cond151.not = icmp slt i64 %141, %144
  %spec.select156 = select i1 %or.cond151.not, ptr %.3, ptr %139
  br label %145

145:                                              ; preds = %._crit_edge, %127, %.critedge6
  %.4 = phi ptr [ %.3, %127 ], [ %.3, %.critedge6 ], [ %spec.select156, %._crit_edge ]
  %.not134169 = icmp eq ptr %.4, %1
  br i1 %.not134169, label %._crit_edge173.thread, label %.lr.ph172

._crit_edge173.thread:                            ; preds = %145
  %146 = tail call noundef zeroext i1 @_ZN10ClipperLib12IsHorizontalERNS_5TEdgeE(ptr noundef nonnull align 8 dereferenceable(136) %1)
  br label %168

.lr.ph172:                                        ; preds = %145, %158
  %.7170 = phi ptr [ %159, %158 ], [ %1, %145 ]
  %147 = getelementptr inbounds i8, ptr %.7170, i64 88
  %148 = load ptr, ptr %147, align 8, !tbaa !21
  %149 = getelementptr inbounds i8, ptr %.7170, i64 96
  store ptr %148, ptr %149, align 8, !tbaa !35
  %150 = tail call noundef zeroext i1 @_ZN10ClipperLib12IsHorizontalERNS_5TEdgeE(ptr noundef nonnull align 8 dereferenceable(136) %.7170)
  %.not137 = icmp ne ptr %.7170, %1
  %or.cond153.not = and i1 %.not137, %150
  br i1 %or.cond153.not, label %151, label %158

151:                                              ; preds = %.lr.ph172
  %152 = load i64, ptr %.7170, align 8, !tbaa !31
  %153 = getelementptr inbounds i8, ptr %.7170, i64 80
  %154 = load ptr, ptr %153, align 8, !tbaa !17
  %155 = getelementptr inbounds i8, ptr %154, i64 32
  %156 = load i64, ptr %155, align 8, !tbaa !32
  %.not138 = icmp eq i64 %152, %156
  br i1 %.not138, label %158, label %157

157:                                              ; preds = %151
  tail call void @_ZN10ClipperLib17ReverseHorizontalERNS_5TEdgeE(ptr noundef nonnull align 8 dereferenceable(136) %.7170)
  br label %158

158:                                              ; preds = %157, %151, %.lr.ph172
  %159 = load ptr, ptr %147, align 8, !tbaa !21
  %.not134 = icmp eq ptr %159, %.4
  br i1 %.not134, label %._crit_edge173, label %.lr.ph172, !llvm.loop !39

._crit_edge173:                                   ; preds = %158
  %160 = tail call noundef zeroext i1 @_ZN10ClipperLib12IsHorizontalERNS_5TEdgeE(ptr noundef nonnull align 8 dereferenceable(136) %159)
  %.not135 = icmp ne ptr %159, %1
  %or.cond155.not = and i1 %.not135, %160
  br i1 %or.cond155.not, label %161, label %168

161:                                              ; preds = %._crit_edge173
  %162 = load i64, ptr %159, align 8, !tbaa !31
  %163 = getelementptr inbounds i8, ptr %159, i64 80
  %164 = load ptr, ptr %163, align 8, !tbaa !17
  %165 = getelementptr inbounds i8, ptr %164, i64 32
  %166 = load i64, ptr %165, align 8, !tbaa !32
  %.not136 = icmp eq i64 %162, %166
  br i1 %.not136, label %168, label %167

167:                                              ; preds = %161
  tail call void @_ZN10ClipperLib17ReverseHorizontalERNS_5TEdgeE(ptr noundef nonnull align 8 dereferenceable(136) %159)
  br label %168

168:                                              ; preds = %._crit_edge173.thread, %167, %161, %._crit_edge173
  %169 = getelementptr inbounds i8, ptr %.4, i64 88
  br label %170

170:                                              ; preds = %168, %113
  %.5.in = phi ptr [ %114, %113 ], [ %169, %168 ]
  %.5 = load ptr, ptr %.5.in, align 8, !tbaa !25
  br label %common.ret235
}

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

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

attributes #0 = { mustprogress 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 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 = { 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, !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, !8, i64 40}
!17 = !{!6, !15, i64 80}
!18 = !{!6, !8, i64 8}
!19 = distinct !{!19, !20}
!20 = !{!"llvm.loop.mustprogress"}
!21 = !{!6, !15, i64 88}
!22 = distinct !{!22, !20}
!23 = distinct !{!23, !20}
!24 = distinct !{!24, !20}
!25 = !{!15, !15, i64 0}
!26 = !{!27, !8, i64 0}
!27 = !{!"_ZTSN10ClipperLib12LocalMinimumE", !8, i64 0, !15, i64 8, !15, i64 16}
!28 = !{!27, !15, i64 8}
!29 = !{!27, !15, i64 16}
!30 = !{!6, !14, i64 64}
!31 = !{!6, !8, i64 0}
!32 = !{!6, !8, i64 32}
!33 = distinct !{!33, !20}
!34 = distinct !{!34, !20}
!35 = !{!6, !15, i64 96}
!36 = distinct !{!36, !20}
!37 = distinct !{!37, !20}
!38 = distinct !{!38, !20}
!39 = distinct !{!39, !20}


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