; LLVM IR from tangjz/acm-icpc :: zoj/4065.ll (Z5solvev)

; 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.Point = type { double, double }
%struct.Line = type { %struct.Point, %struct.Point }
%struct.ConvexPolygon = type { %"class.std::vector.25" }
%"class.std::vector.25" = type { %"struct.std::_Vector_base.26" }
%"struct.std::_Vector_base.26" = type { %"struct.std::_Vector_base<Line, std::allocator<Line>>::_Vector_impl" }
%"struct.std::_Vector_base<Line, std::allocator<Line>>::_Vector_impl" = type { %"struct.std::_Vector_base<Line, std::allocator<Line>>::_Vector_impl_data" }
%"struct.std::_Vector_base<Line, std::allocator<Line>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.30" = type { %"struct.std::_Vector_base.31" }
%"struct.std::_Vector_base.31" = type { %"struct.std::_Vector_base<Point, std::allocator<Point>>::_Vector_impl" }
%"struct.std::_Vector_base<Point, std::allocator<Point>>::_Vector_impl" = type { %"struct.std::_Vector_base<Point, std::allocator<Point>>::_Vector_impl_data" }
%"struct.std::_Vector_base<Point, std::allocator<Point>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::initializer_list" = type { ptr, i64 }
%"class.std::allocator.32" = type { i8 }
%"class.__gnu_cxx::__normal_iterator.35" = type { ptr }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<std::vector<std::pair<std::pair<double, int>, int>>, std::allocator<std::vector<std::pair<std::pair<double, int>, int>>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::vector<std::pair<std::pair<double, int>, int>>, std::allocator<std::vector<std::pair<std::pair<double, int>, int>>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::vector<std::pair<std::pair<double, int>, int>>, std::allocator<std::vector<std::pair<std::pair<double, int>, int>>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::vector<std::pair<std::pair<double, int>, int>>, std::allocator<std::vector<std::pair<std::pair<double, int>, int>>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::allocator" = type { i8 }
%"struct.std::pair.22" = type { %"struct.std::pair", i32, [4 x i8] }
%"struct.std::pair" = type <{ double, i32, [4 x i8] }>
%"class.std::vector.36" = type { %"struct.std::_Vector_base.37" }
%"struct.std::_Vector_base.37" = type { %"struct.std::_Vector_base<std::pair<Line, int>, std::allocator<std::pair<Line, int>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::pair<Line, int>, std::allocator<std::pair<Line, int>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::pair<Line, int>, std::allocator<std::pair<Line, int>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::pair<Line, int>, std::allocator<std::pair<Line, int>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.std::pair.41" = type <{ %struct.Line, i32, [4 x i8] }>
%"struct.std::pair.44" = type <{ %struct.Point, i8, [7 x i8] }>
%"class.__gnu_cxx::__normal_iterator.47" = type { ptr }
%"class.__gnu_cxx::__normal_iterator.48" = type { ptr }

@debug = external dso_local global i8, align 1
@.str.1 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [62 x i8], align 1
@__PRETTY_FUNCTION__._Z5solvev = external hidden unnamed_addr constant [13 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [9 x i8], align 1

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

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

declare i32 @__gxx_personality_v0(...)

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

declare i32 @printf(ptr noundef, ...) #2

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

; Function Attrs: mustprogress uwtable
define dso_local void @_Z5solvev() #0 personality ptr @__gxx_personality_v0 {
  %1 = alloca i32, align 4
  %2 = alloca %struct.Point, align 8
  %3 = alloca %struct.Point, align 8
  %4 = alloca %struct.Line, align 8
  %5 = alloca %struct.ConvexPolygon, align 8
  %6 = alloca ptr, align 8
  %7 = alloca i32, align 4
  %8 = alloca %struct.Line, align 8
  %9 = alloca i8, align 1
  %10 = alloca i8, align 1
  %11 = alloca double, align 8
  %12 = alloca i8, align 1
  %13 = alloca i32, align 4
  %14 = alloca %"class.std::vector.30", align 8
  %15 = alloca %"class.std::initializer_list", align 8
  %16 = alloca [4 x %struct.Point], align 8
  %17 = alloca %"class.std::allocator.32", align 1
  %18 = alloca ptr, align 8
  %19 = alloca %"class.__gnu_cxx::__normal_iterator.35", align 8
  %20 = alloca %"class.__gnu_cxx::__normal_iterator.35", align 8
  %21 = alloca ptr, align 8
  %22 = alloca i32, align 4
  %23 = alloca %"class.std::vector", align 8
  %24 = alloca %"class.std::allocator", align 1
  %25 = alloca i32, align 4
  %26 = alloca i32, align 4
  %27 = alloca %struct.Line, align 8
  %28 = alloca i8, align 1
  %29 = alloca i8, align 1
  %30 = alloca double, align 8
  %31 = alloca %"struct.std::pair.22", align 8
  %32 = alloca %"struct.std::pair", align 8
  %33 = alloca i32, align 4
  %34 = alloca %"struct.std::pair.22", align 8
  %35 = alloca %"struct.std::pair", align 8
  %36 = alloca i32, align 4
  %37 = alloca double, align 8
  %38 = alloca double, align 8
  %39 = alloca i8, align 1
  %40 = alloca i8, align 1
  %41 = alloca i8, align 1
  %42 = alloca %"class.std::vector.30", align 8
  %43 = alloca %"class.std::initializer_list", align 8
  %44 = alloca [2 x %struct.Point], align 8
  %45 = alloca %"class.std::allocator.32", align 1
  %46 = alloca %"class.std::vector.36", align 8
  %47 = alloca i32, align 4
  %48 = alloca ptr, align 8
  %49 = alloca %struct.Point, align 8
  %50 = alloca ptr, align 8
  %51 = alloca %"class.__gnu_cxx::__normal_iterator.35", align 8
  %52 = alloca %"class.__gnu_cxx::__normal_iterator.35", align 8
  %53 = alloca ptr, align 8
  %54 = alloca %"struct.std::pair.41", align 8
  %55 = alloca %struct.Line, align 8
  %56 = alloca %"struct.std::pair.41", align 8
  %57 = alloca %struct.Line, align 8
  %58 = alloca %"struct.std::pair.41", align 8
  %59 = alloca %struct.Line, align 8
  %60 = alloca %"struct.std::pair.41", align 8
  %61 = alloca %struct.Line, align 8
  %62 = alloca %struct.Point, align 8
  %63 = alloca i32, align 4
  %64 = alloca %"class.std::vector.30", align 8
  %65 = alloca [2 x %"class.std::vector.30"], align 16
  %66 = alloca i32, align 4
  %67 = alloca i32, align 4
  %68 = alloca ptr, align 8
  %69 = alloca ptr, align 8
  %70 = alloca %"struct.std::pair.44", align 8
  %71 = alloca i8, align 1
  %72 = alloca i32, align 4
  %73 = alloca i32, align 4
  %74 = alloca %"class.__gnu_cxx::__normal_iterator.47", align 8
  %75 = alloca %"class.__gnu_cxx::__normal_iterator.47", align 8
  %76 = alloca %"class.__gnu_cxx::__normal_iterator.47", align 8
  %77 = alloca %"class.__gnu_cxx::__normal_iterator.47", align 8
  %78 = alloca i32, align 4
  %79 = alloca %"class.__gnu_cxx::__normal_iterator.47", align 8
  %80 = alloca %"class.__gnu_cxx::__normal_iterator.47", align 8
  %81 = alloca %"class.__gnu_cxx::__normal_iterator.47", align 8
  %82 = alloca %"class.__gnu_cxx::__normal_iterator.47", align 8
  %83 = alloca i32, align 4
  %84 = alloca i8, align 1
  %85 = alloca %"class.std::vector", align 8
  %86 = alloca %"class.std::allocator", align 1
  %87 = alloca i32, align 4
  %88 = alloca i32, align 4
  %89 = alloca %struct.Line, align 8
  %90 = alloca i8, align 1
  %91 = alloca double, align 8
  %92 = alloca i8, align 1
  %93 = alloca %"class.std::initializer_list", align 8
  %94 = alloca [2 x %struct.Point], align 8
  %95 = alloca %"class.std::initializer_list", align 8
  %96 = alloca [2 x %struct.Point], align 8
  %97 = alloca ptr, align 8
  %98 = alloca %"class.__gnu_cxx::__normal_iterator.48", align 8
  %99 = alloca %"class.__gnu_cxx::__normal_iterator.48", align 8
  %100 = alloca ptr, align 8
  %101 = alloca i32, align 4
  %102 = alloca %"struct.std::pair.44", align 8
  %103 = alloca i32, align 4
  %104 = alloca i32, align 4
  %105 = alloca i32, align 4
  %106 = alloca ptr, align 8
  %107 = alloca %struct.Point, align 8
  %108 = alloca i8, align 1
  %109 = alloca i32, align 4
  %110 = alloca %struct.Point, align 8
  %111 = alloca %struct.Point, align 8
  %112 = alloca double, align 8
  %113 = alloca %struct.Line, align 8
  %114 = alloca i8, align 1
  %115 = alloca i8, align 1
  %116 = alloca %struct.Line, align 8
  %117 = alloca %"struct.std::pair.44", align 8
  %118 = alloca %struct.Line, align 8
  %119 = alloca i8, align 1
  %120 = alloca %struct.Line, align 8
  %121 = alloca i8, align 1
  %122 = alloca %"struct.std::pair.22", align 8
  %123 = alloca %"struct.std::pair", align 8
  %124 = alloca %"struct.std::pair.22", align 8
  %125 = alloca %"struct.std::pair", align 8
  %126 = alloca [3 x double], align 16
  %127 = alloca i32, align 4
  %128 = alloca double, align 8
  %129 = alloca double, align 8
  %130 = alloca i8, align 1
  call void @llvm.lifetime.start.p0(i64 4, ptr %1) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr %2) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr %3) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %4) #9
  call void @llvm.lifetime.start.p0(i64 24, ptr %5) #9
  call void @_ZN13ConvexPolygonC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %5) #9
  %131 = invoke i32 (ptr, ...) @__isoc99_scanf(ptr noundef @.str.1, ptr noundef %1)
          to label %132 unwind label %164

132:                                              ; preds = %0
  invoke void @_ZN5Point4readEv(ptr noundef nonnull align 8 dereferenceable(16) %2)
          to label %133 unwind label %164

133:                                              ; preds = %132
  invoke void @_ZN5Point4readEv(ptr noundef nonnull align 8 dereferenceable(16) %3)
          to label %134 unwind label %164

134:                                              ; preds = %133
  invoke void @_ZN4Line4readEv(ptr noundef nonnull align 8 dereferenceable(32) %4)
          to label %135 unwind label %164

135:                                              ; preds = %134
  invoke void @_ZN13ConvexPolygon4readEi(ptr noundef nonnull align 8 dereferenceable(24) %5, i32 noundef 3)
          to label %136 unwind label %164

136:                                              ; preds = %135
  call void @llvm.lifetime.start.p0(i64 32, ptr %8) #9
  %137 = getelementptr inbounds %struct.Line, ptr %8, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %137, ptr align 8 %2, i64 16, i1 false), !tbaa.struct !5
  %138 = getelementptr inbounds %struct.Line, ptr %8, i32 0, i32 1
  %139 = invoke { double, double } @_ZNK5PointmiERKS_(ptr noundef nonnull align 8 dereferenceable(16) %3, ptr noundef nonnull align 8 dereferenceable(16) %2)
          to label %140 unwind label %168

140:                                              ; preds = %136
  %141 = getelementptr inbounds { double, double }, ptr %138, i32 0, i32 0
  %142 = extractvalue { double, double } %139, 0
  store double %142, ptr %141, align 8
  %143 = getelementptr inbounds { double, double }, ptr %138, i32 0, i32 1
  %144 = extractvalue { double, double } %139, 1
  store double %144, ptr %143, align 8
  call void @llvm.lifetime.start.p0(i64 1, ptr %9) #9
  store i8 1, ptr %9, align 1, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 1, ptr %10) #9
  %145 = invoke noundef zeroext i1 @_ZNK4Line22hasSegmentIntersectionERKS_RKb(ptr noundef nonnull align 8 dereferenceable(32) %4, ptr noundef nonnull align 8 dereferenceable(32) %8, ptr noundef nonnull align 1 dereferenceable(1) %9)
          to label %146 unwind label %172

146:                                              ; preds = %140
  br i1 %145, label %151, label %147

147:                                              ; preds = %146
  store i8 1, ptr %10, align 1, !tbaa !10
  %148 = invoke noundef zeroext i1 @_ZNK13ConvexPolygon22hasSegmentIntersectionERK4LineRKb(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(32) %8, ptr noundef nonnull align 1 dereferenceable(1) %10)
          to label %149 unwind label %176

149:                                              ; preds = %147
  %150 = xor i1 %148, true
  br label %151

151:                                              ; preds = %149, %146
  %152 = phi i1 [ false, %146 ], [ %150, %149 ]
  call void @llvm.lifetime.end.p0(i64 1, ptr %10) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %9) #9
  br i1 %152, label %153, label %190

153:                                              ; preds = %151
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #9
  %154 = getelementptr inbounds %struct.Line, ptr %8, i32 0, i32 1
  %155 = invoke noundef double @_ZNK5Point3lenEv(ptr noundef nonnull align 8 dereferenceable(16) %154)
          to label %156 unwind label %181

156:                                              ; preds = %153
  %157 = load i32, ptr %1, align 4, !tbaa !12
  %158 = load i32, ptr %1, align 4, !tbaa !12
  %159 = add nsw i32 %157, %158
  %160 = sub nsw i32 %159, 1
  %161 = sitofp i32 %160 to double
  %162 = fmul double %155, %161
  store double %162, ptr %11, align 8, !tbaa !6
  call void @llvm.lifetime.start.p0(i64 1, ptr %12) #9
  store i8 10, ptr %12, align 1, !tbaa !14
  invoke void @_Z7writeDBRKdRKc(ptr noundef nonnull align 8 dereferenceable(8) %11, ptr noundef nonnull align 1 dereferenceable(1) %12)
          to label %163 unwind label %185

163:                                              ; preds = %156
  call void @llvm.lifetime.end.p0(i64 1, ptr %12) #9
  store i32 1, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #9
  br label %1165

164:                                              ; preds = %135, %134, %133, %132, %0
  %165 = landingpad { ptr, i32 }
          cleanup
  %166 = extractvalue { ptr, i32 } %165, 0
  store ptr %166, ptr %6, align 8
  %167 = extractvalue { ptr, i32 } %165, 1
  store i32 %167, ptr %7, align 4
  br label %1188

168:                                              ; preds = %392, %136
  %169 = landingpad { ptr, i32 }
          cleanup
  %170 = extractvalue { ptr, i32 } %169, 0
  store ptr %170, ptr %6, align 8
  %171 = extractvalue { ptr, i32 } %169, 1
  store i32 %171, ptr %7, align 4
  br label %1187

172:                                              ; preds = %140
  %173 = landingpad { ptr, i32 }
          cleanup
  %174 = extractvalue { ptr, i32 } %173, 0
  store ptr %174, ptr %6, align 8
  %175 = extractvalue { ptr, i32 } %173, 1
  store i32 %175, ptr %7, align 4
  br label %180

176:                                              ; preds = %147
  %177 = landingpad { ptr, i32 }
          cleanup
  %178 = extractvalue { ptr, i32 } %177, 0
  store ptr %178, ptr %6, align 8
  %179 = extractvalue { ptr, i32 } %177, 1
  store i32 %179, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %10) #9
  br label %180

180:                                              ; preds = %176, %172
  call void @llvm.lifetime.end.p0(i64 1, ptr %9) #9
  br label %1187

181:                                              ; preds = %153
  %182 = landingpad { ptr, i32 }
          cleanup
  %183 = extractvalue { ptr, i32 } %182, 0
  store ptr %183, ptr %6, align 8
  %184 = extractvalue { ptr, i32 } %182, 1
  store i32 %184, ptr %7, align 4
  br label %189

185:                                              ; preds = %156
  %186 = landingpad { ptr, i32 }
          cleanup
  %187 = extractvalue { ptr, i32 } %186, 0
  store ptr %187, ptr %6, align 8
  %188 = extractvalue { ptr, i32 } %186, 1
  store i32 %188, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %12) #9
  br label %189

189:                                              ; preds = %185, %181
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #9
  br label %1187

190:                                              ; preds = %151
  %191 = load i32, ptr %1, align 4, !tbaa !12
  %192 = icmp eq i32 %191, 1
  br i1 %192, label %193, label %384

193:                                              ; preds = %190
  call void @llvm.lifetime.start.p0(i64 24, ptr %14) #9
  call void @llvm.lifetime.start.p0(i64 64, ptr %16) #9
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %16, ptr align 8 %2, i64 16, i1 false), !tbaa.struct !5
  %194 = getelementptr inbounds %struct.Point, ptr %16, i64 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %194, ptr align 8 %3, i64 16, i1 false), !tbaa.struct !5
  %195 = getelementptr inbounds %struct.Point, ptr %16, i64 2
  %196 = getelementptr inbounds %struct.Line, ptr %4, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %195, ptr align 8 %196, i64 16, i1 false), !tbaa.struct !5
  %197 = getelementptr inbounds %struct.Point, ptr %16, i64 3
  %198 = getelementptr inbounds %struct.Line, ptr %4, i32 0, i32 0
  %199 = getelementptr inbounds %struct.Line, ptr %4, i32 0, i32 1
  %200 = invoke { double, double } @_ZNK5PointplERKS_(ptr noundef nonnull align 8 dereferenceable(16) %198, ptr noundef nonnull align 8 dereferenceable(16) %199)
          to label %201 unwind label %223

201:                                              ; preds = %193
  %202 = getelementptr inbounds { double, double }, ptr %197, i32 0, i32 0
  %203 = extractvalue { double, double } %200, 0
  store double %203, ptr %202, align 8
  %204 = getelementptr inbounds { double, double }, ptr %197, i32 0, i32 1
  %205 = extractvalue { double, double } %200, 1
  store double %205, ptr %204, align 8
  %206 = getelementptr inbounds %"class.std::initializer_list", ptr %15, i32 0, i32 0
  store ptr %16, ptr %206, align 8, !tbaa !15
  %207 = getelementptr inbounds %"class.std::initializer_list", ptr %15, i32 0, i32 1
  store i64 4, ptr %207, align 8, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 1, ptr %17) #9
  call void @_ZNSaI5PointEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %17) #9
  %208 = getelementptr inbounds { ptr, i64 }, ptr %15, i32 0, i32 0
  %209 = load ptr, ptr %208, align 8
  %210 = getelementptr inbounds { ptr, i64 }, ptr %15, i32 0, i32 1
  %211 = load i64, ptr %210, align 8
  invoke void @_ZNSt6vectorI5PointSaIS0_EEC2ESt16initializer_listIS0_ERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %14, ptr %209, i64 %211, ptr noundef nonnull align 1 dereferenceable(1) %17)
          to label %212 unwind label %227

212:                                              ; preds = %201
  call void @_ZNSt15__new_allocatorI5PointED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %17) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %17) #9
  call void @llvm.lifetime.end.p0(i64 64, ptr %16) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #9
  %213 = getelementptr inbounds %struct.ConvexPolygon, ptr %5, i32 0, i32 0
  store ptr %213, ptr %18, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #9
  %214 = load ptr, ptr %18, align 8, !tbaa !20
  %215 = call ptr @_ZNSt6vectorI4LineSaIS0_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %214) #9
  %216 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.35", ptr %19, i32 0, i32 0
  store ptr %215, ptr %216, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #9
  %217 = load ptr, ptr %18, align 8, !tbaa !20
  %218 = call ptr @_ZNSt6vectorI4LineSaIS0_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %217) #9
  %219 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.35", ptr %20, i32 0, i32 0
  store ptr %218, ptr %219, align 8
  br label %220

220:                                              ; preds = %237, %212
  %221 = call noundef zeroext i1 @_ZN9__gnu_cxxneIP4LineSt6vectorIS1_SaIS1_EEEEbRKNS_17__normal_iteratorIT_T0_EESB_(ptr noundef nonnull align 8 dereferenceable(8) %19, ptr noundef nonnull align 8 dereferenceable(8) %20) #9
  br i1 %221, label %232, label %222

222:                                              ; preds = %220
  store i32 2, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #9
  br label %243

223:                                              ; preds = %193
  %224 = landingpad { ptr, i32 }
          cleanup
  %225 = extractvalue { ptr, i32 } %224, 0
  store ptr %225, ptr %6, align 8
  %226 = extractvalue { ptr, i32 } %224, 1
  store i32 %226, ptr %7, align 4
  br label %231

227:                                              ; preds = %201
  %228 = landingpad { ptr, i32 }
          cleanup
  %229 = extractvalue { ptr, i32 } %228, 0
  store ptr %229, ptr %6, align 8
  %230 = extractvalue { ptr, i32 } %228, 1
  store i32 %230, ptr %7, align 4
  call void @_ZNSt15__new_allocatorI5PointED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %17) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %17) #9
  br label %231

231:                                              ; preds = %227, %223
  call void @llvm.lifetime.end.p0(i64 64, ptr %16) #9
  br label %383

232:                                              ; preds = %220
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #9
  %233 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNK9__gnu_cxx17__normal_iteratorIP4LineSt6vectorIS1_SaIS1_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %19) #9
  store ptr %233, ptr %21, align 8, !tbaa !20
  %234 = load ptr, ptr %21, align 8, !tbaa !20
  %235 = getelementptr inbounds %struct.Line, ptr %234, i32 0, i32 0
  invoke void @_ZNSt6vectorI5PointSaIS0_EE9push_backERKS0_(ptr noundef nonnull align 8 dereferenceable(24) %14, ptr noundef nonnull align 8 dereferenceable(16) %235)
          to label %236 unwind label %239

236:                                              ; preds = %232
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #9
  br label %237

237:                                              ; preds = %236
  %238 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIP4LineSt6vectorIS1_SaIS1_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %19) #9
  br label %220

239:                                              ; preds = %232
  %240 = landingpad { ptr, i32 }
          cleanup
  %241 = extractvalue { ptr, i32 } %240, 0
  store ptr %241, ptr %6, align 8
  %242 = extractvalue { ptr, i32 } %240, 1
  store i32 %242, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #9
  br label %382

243:                                              ; preds = %222
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #9
  %244 = call noundef i64 @_ZNKSt6vectorI5PointSaIS0_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %14) #9
  %245 = trunc i64 %244 to i32
  store i32 %245, ptr %22, align 4, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 24, ptr %23) #9
  %246 = load i32, ptr %22, align 4, !tbaa !12
  %247 = sext i32 %246 to i64
  call void @llvm.lifetime.start.p0(i64 1, ptr %24) #9
  call void @_ZNSaISt6vectorISt4pairIS0_IdiEiESaIS2_EEEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %24) #9
  invoke void @_ZNSt6vectorIS_ISt4pairIS0_IdiEiESaIS2_EESaIS4_EEC2EmRKS5_(ptr noundef nonnull align 8 dereferenceable(24) %23, i64 noundef %247, ptr noundef nonnull align 1 dereferenceable(1) %24)
          to label %248 unwind label %254

248:                                              ; preds = %243
  call void @_ZNSt15__new_allocatorISt6vectorISt4pairIS1_IdiEiESaIS3_EEED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %24) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %24) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #9
  store i32 0, ptr %25, align 4, !tbaa !12
  br label %249

249:                                              ; preds = %350, %248
  %250 = load i32, ptr %25, align 4, !tbaa !12
  %251 = load i32, ptr %22, align 4, !tbaa !12
  %252 = icmp slt i32 %250, %251
  br i1 %252, label %258, label %253

253:                                              ; preds = %249
  store i32 4, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #9
  br label %353

254:                                              ; preds = %243
  %255 = landingpad { ptr, i32 }
          cleanup
  %256 = extractvalue { ptr, i32 } %255, 0
  store ptr %256, ptr %6, align 8
  %257 = extractvalue { ptr, i32 } %255, 1
  store i32 %257, ptr %7, align 4
  call void @_ZNSt15__new_allocatorISt6vectorISt4pairIS1_IdiEiESaIS3_EEED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %24) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %24) #9
  br label %381

258:                                              ; preds = %249
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #9
  %259 = load i32, ptr %25, align 4, !tbaa !12
  %260 = add nsw i32 %259, 1
  store i32 %260, ptr %26, align 4, !tbaa !12
  br label %261

261:                                              ; preds = %345, %258
  %262 = load i32, ptr %26, align 4, !tbaa !12
  %263 = load i32, ptr %22, align 4, !tbaa !12
  %264 = icmp slt i32 %262, %263
  br i1 %264, label %266, label %265

265:                                              ; preds = %261
  store i32 7, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #9
  br label %349

266:                                              ; preds = %261
  call void @llvm.lifetime.start.p0(i64 32, ptr %27) #9
  %267 = getelementptr inbounds %struct.Line, ptr %27, i32 0, i32 0
  %268 = load i32, ptr %25, align 4, !tbaa !12
  %269 = sext i32 %268 to i64
  %270 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorI5PointSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %14, i64 noundef %269) #9
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %267, ptr align 8 %270, i64 16, i1 false), !tbaa.struct !5
  %271 = getelementptr inbounds %struct.Line, ptr %27, i32 0, i32 1
  %272 = load i32, ptr %26, align 4, !tbaa !12
  %273 = sext i32 %272 to i64
  %274 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorI5PointSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %14, i64 noundef %273) #9
  %275 = load i32, ptr %25, align 4, !tbaa !12
  %276 = sext i32 %275 to i64
  %277 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorI5PointSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %14, i64 noundef %276) #9
  %278 = invoke { double, double } @_ZNK5PointmiERKS_(ptr noundef nonnull align 8 dereferenceable(16) %274, ptr noundef nonnull align 8 dereferenceable(16) %277)
          to label %279 unwind label %308

279:                                              ; preds = %266
  %280 = getelementptr inbounds { double, double }, ptr %271, i32 0, i32 0
  %281 = extractvalue { double, double } %278, 0
  store double %281, ptr %280, align 8
  %282 = getelementptr inbounds { double, double }, ptr %271, i32 0, i32 1
  %283 = extractvalue { double, double } %278, 1
  store double %283, ptr %282, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %8, ptr align 8 %27, i64 32, i1 false), !tbaa.struct !21
  call void @llvm.lifetime.end.p0(i64 32, ptr %27) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %28) #9
  store i8 1, ptr %28, align 1, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 1, ptr %29) #9
  %284 = invoke noundef zeroext i1 @_ZNK4Line22hasSegmentIntersectionERKS_RKb(ptr noundef nonnull align 8 dereferenceable(32) %4, ptr noundef nonnull align 8 dereferenceable(32) %8, ptr noundef nonnull align 1 dereferenceable(1) %28)
          to label %285 unwind label %312

285:                                              ; preds = %279
  br i1 %284, label %290, label %286

286:                                              ; preds = %285
  store i8 1, ptr %29, align 1, !tbaa !10
  %287 = invoke noundef zeroext i1 @_ZNK13ConvexPolygon22hasSegmentIntersectionERK4LineRKb(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(32) %8, ptr noundef nonnull align 1 dereferenceable(1) %29)
          to label %288 unwind label %316

288:                                              ; preds = %286
  %289 = xor i1 %287, true
  br label %290

290:                                              ; preds = %288, %285
  %291 = phi i1 [ false, %285 ], [ %289, %288 ]
  call void @llvm.lifetime.end.p0(i64 1, ptr %29) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %28) #9
  br i1 %291, label %292, label %344

292:                                              ; preds = %290
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #9
  %293 = getelementptr inbounds %struct.Line, ptr %8, i32 0, i32 1
  %294 = invoke noundef double @_ZNK5Point3lenEv(ptr noundef nonnull align 8 dereferenceable(16) %293)
          to label %295 unwind label %321

295:                                              ; preds = %292
  store double %294, ptr %30, align 8, !tbaa !6
  %296 = load i32, ptr %25, align 4, !tbaa !12
  %297 = sext i32 %296 to i64
  %298 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_ISt4pairIS0_IdiEiESaIS2_EESaIS4_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %23, i64 noundef %297) #9
  call void @llvm.lifetime.start.p0(i64 24, ptr %31) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr %32) #9
  invoke void @_ZNSt4pairIdiEC2IRdRiTnNSt9enable_ifIXaaclsr5_PCCPE22_MoveConstructiblePairIT_T0_EEclsr5_PCCPE30_ImplicitlyMoveConvertiblePairIS5_S6_EEEbE4typeELb1EEEOS5_OS6_(ptr noundef nonnull align 8 dereferenceable(12) %32, ptr noundef nonnull align 8 dereferenceable(8) %30, ptr noundef nonnull align 4 dereferenceable(4) %26)
          to label %299 unwind label %325

299:                                              ; preds = %295
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #9
  store i32 0, ptr %33, align 4, !tbaa !12
  invoke void @_ZNSt4pairIS_IdiEiEC2IS0_iTnNSt9enable_ifIXaaclsr5_PCCPE18_ConstructiblePairIT_T0_EEclsr5_PCCPE26_ImplicitlyConvertiblePairIS4_S5_EEEbE4typeELb1EEERKS0_RKi(ptr noundef nonnull align 8 dereferenceable(20) %31, ptr noundef nonnull align 8 dereferenceable(12) %32, ptr noundef nonnull align 4 dereferenceable(4) %33)
          to label %300 unwind label %329

300:                                              ; preds = %299
  invoke void @_ZNSt6vectorISt4pairIS0_IdiEiESaIS2_EE9push_backEOS2_(ptr noundef nonnull align 8 dereferenceable(24) %298, ptr noundef nonnull align 8 dereferenceable(20) %31)
          to label %301 unwind label %329

301:                                              ; preds = %300
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %32) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr %31) #9
  %302 = load i32, ptr %26, align 4, !tbaa !12
  %303 = sext i32 %302 to i64
  %304 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_ISt4pairIS0_IdiEiESaIS2_EESaIS4_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %23, i64 noundef %303) #9
  call void @llvm.lifetime.start.p0(i64 24, ptr %34) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr %35) #9
  invoke void @_ZNSt4pairIdiEC2IRdRiTnNSt9enable_ifIXaaclsr5_PCCPE22_MoveConstructiblePairIT_T0_EEclsr5_PCCPE30_ImplicitlyMoveConvertiblePairIS5_S6_EEEbE4typeELb1EEEOS5_OS6_(ptr noundef nonnull align 8 dereferenceable(12) %35, ptr noundef nonnull align 8 dereferenceable(8) %30, ptr noundef nonnull align 4 dereferenceable(4) %25)
          to label %305 unwind label %334

305:                                              ; preds = %301
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #9
  store i32 0, ptr %36, align 4, !tbaa !12
  invoke void @_ZNSt4pairIS_IdiEiEC2IS0_iTnNSt9enable_ifIXaaclsr5_PCCPE18_ConstructiblePairIT_T0_EEclsr5_PCCPE26_ImplicitlyConvertiblePairIS4_S5_EEEbE4typeELb1EEERKS0_RKi(ptr noundef nonnull align 8 dereferenceable(20) %34, ptr noundef nonnull align 8 dereferenceable(12) %35, ptr noundef nonnull align 4 dereferenceable(4) %36)
          to label %306 unwind label %338

306:                                              ; preds = %305
  invoke void @_ZNSt6vectorISt4pairIS0_IdiEiESaIS2_EE9push_backEOS2_(ptr noundef nonnull align 8 dereferenceable(24) %304, ptr noundef nonnull align 8 dereferenceable(20) %34)
          to label %307 unwind label %338

307:                                              ; preds = %306
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %35) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr %34) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #9
  br label %344

308:                                              ; preds = %266
  %309 = landingpad { ptr, i32 }
          cleanup
  %310 = extractvalue { ptr, i32 } %309, 0
  store ptr %310, ptr %6, align 8
  %311 = extractvalue { ptr, i32 } %309, 1
  store i32 %311, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %27) #9
  br label %348

312:                                              ; preds = %279
  %313 = landingpad { ptr, i32 }
          cleanup
  %314 = extractvalue { ptr, i32 } %313, 0
  store ptr %314, ptr %6, align 8
  %315 = extractvalue { ptr, i32 } %313, 1
  store i32 %315, ptr %7, align 4
  br label %320

316:                                              ; preds = %286
  %317 = landingpad { ptr, i32 }
          cleanup
  %318 = extractvalue { ptr, i32 } %317, 0
  store ptr %318, ptr %6, align 8
  %319 = extractvalue { ptr, i32 } %317, 1
  store i32 %319, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %29) #9
  br label %320

320:                                              ; preds = %316, %312
  call void @llvm.lifetime.end.p0(i64 1, ptr %28) #9
  br label %348

321:                                              ; preds = %292
  %322 = landingpad { ptr, i32 }
          cleanup
  %323 = extractvalue { ptr, i32 } %322, 0
  store ptr %323, ptr %6, align 8
  %324 = extractvalue { ptr, i32 } %322, 1
  store i32 %324, ptr %7, align 4
  br label %343

325:                                              ; preds = %295
  %326 = landingpad { ptr, i32 }
          cleanup
  %327 = extractvalue { ptr, i32 } %326, 0
  store ptr %327, ptr %6, align 8
  %328 = extractvalue { ptr, i32 } %326, 1
  store i32 %328, ptr %7, align 4
  br label %333

329:                                              ; preds = %300, %299
  %330 = landingpad { ptr, i32 }
          cleanup
  %331 = extractvalue { ptr, i32 } %330, 0
  store ptr %331, ptr %6, align 8
  %332 = extractvalue { ptr, i32 } %330, 1
  store i32 %332, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #9
  br label %333

333:                                              ; preds = %329, %325
  call void @llvm.lifetime.end.p0(i64 16, ptr %32) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr %31) #9
  br label %343

334:                                              ; preds = %301
  %335 = landingpad { ptr, i32 }
          cleanup
  %336 = extractvalue { ptr, i32 } %335, 0
  store ptr %336, ptr %6, align 8
  %337 = extractvalue { ptr, i32 } %335, 1
  store i32 %337, ptr %7, align 4
  br label %342

338:                                              ; preds = %306, %305
  %339 = landingpad { ptr, i32 }
          cleanup
  %340 = extractvalue { ptr, i32 } %339, 0
  store ptr %340, ptr %6, align 8
  %341 = extractvalue { ptr, i32 } %339, 1
  store i32 %341, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #9
  br label %342

342:                                              ; preds = %338, %334
  call void @llvm.lifetime.end.p0(i64 16, ptr %35) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr %34) #9
  br label %343

343:                                              ; preds = %342, %333, %321
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #9
  br label %348

344:                                              ; preds = %307, %290
  br label %345

345:                                              ; preds = %344
  %346 = load i32, ptr %26, align 4, !tbaa !12
  %347 = add nsw i32 %346, 1
  store i32 %347, ptr %26, align 4, !tbaa !12
  br label %261, !llvm.loop !22

348:                                              ; preds = %343, %320, %308
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #9
  br label %380

349:                                              ; preds = %265
  br label %350

350:                                              ; preds = %349
  %351 = load i32, ptr %25, align 4, !tbaa !12
  %352 = add nsw i32 %351, 1
  store i32 %352, ptr %25, align 4, !tbaa !12
  br label %249, !llvm.loop !24

353:                                              ; preds = %253
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #9
  %354 = invoke noundef double @_Z10getMinDistRKSt6vectorIS_ISt4pairIS0_IdiEiESaIS2_EESaIS4_EEiii(ptr noundef nonnull align 8 dereferenceable(24) %23, i32 noundef 0, i32 noundef 1, i32 noundef 0)
          to label %355 unwind label %363

355:                                              ; preds = %353
  store double %354, ptr %37, align 8, !tbaa !6
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #9
  %356 = load double, ptr %37, align 8, !tbaa !6
  %357 = fsub double %356, 1.000000e+10
  store double %357, ptr %38, align 8, !tbaa !6
  %358 = invoke noundef i32 @_Z3sgnRKd(ptr noundef nonnull align 8 dereferenceable(8) %38)
          to label %359 unwind label %367

359:                                              ; preds = %355
  %360 = icmp slt i32 %358, 0
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #9
  br i1 %360, label %361, label %375

361:                                              ; preds = %359
  call void @llvm.lifetime.start.p0(i64 1, ptr %39) #9
  store i8 10, ptr %39, align 1, !tbaa !14
  invoke void @_Z7writeDBRKdRKc(ptr noundef nonnull align 8 dereferenceable(8) %37, ptr noundef nonnull align 1 dereferenceable(1) %39)
          to label %362 unwind label %371

362:                                              ; preds = %361
  call void @llvm.lifetime.end.p0(i64 1, ptr %39) #9
  br label %378

363:                                              ; preds = %375, %353
  %364 = landingpad { ptr, i32 }
          cleanup
  %365 = extractvalue { ptr, i32 } %364, 0
  store ptr %365, ptr %6, align 8
  %366 = extractvalue { ptr, i32 } %364, 1
  store i32 %366, ptr %7, align 4
  br label %379

367:                                              ; preds = %355
  %368 = landingpad { ptr, i32 }
          cleanup
  %369 = extractvalue { ptr, i32 } %368, 0
  store ptr %369, ptr %6, align 8
  %370 = extractvalue { ptr, i32 } %368, 1
  store i32 %370, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #9
  br label %379

371:                                              ; preds = %361
  %372 = landingpad { ptr, i32 }
          cleanup
  %373 = extractvalue { ptr, i32 } %372, 0
  store ptr %373, ptr %6, align 8
  %374 = extractvalue { ptr, i32 } %372, 1
  store i32 %374, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %39) #9
  br label %379

375:                                              ; preds = %359
  %376 = invoke i32 @puts(ptr noundef @.str.2)
          to label %377 unwind label %363

377:                                              ; preds = %375
  br label %378

378:                                              ; preds = %377, %362
  store i32 1, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #9
  call void @_ZNSt6vectorIS_ISt4pairIS0_IdiEiESaIS2_EESaIS4_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %23) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr %23) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #9
  call void @_ZNSt6vectorI5PointSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %14) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr %14) #9
  br label %1165

379:                                              ; preds = %371, %367, %363
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #9
  br label %380

380:                                              ; preds = %379, %348
  call void @_ZNSt6vectorIS_ISt4pairIS0_IdiEiESaIS2_EESaIS4_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %23) #9
  br label %381

381:                                              ; preds = %380, %254
  call void @llvm.lifetime.end.p0(i64 24, ptr %23) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #9
  br label %382

382:                                              ; preds = %381, %239
  call void @_ZNSt6vectorI5PointSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %14) #9
  br label %383

383:                                              ; preds = %382, %231
  call void @llvm.lifetime.end.p0(i64 24, ptr %14) #9
  br label %1187

384:                                              ; preds = %190
  call void @llvm.lifetime.start.p0(i64 1, ptr %40) #9
  store i8 0, ptr %40, align 1, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 1, ptr %41) #9
  %385 = invoke noundef zeroext i1 @_ZNK4Line21containsLeftHalfPlaneERK5PointRKb(ptr noundef nonnull align 8 dereferenceable(32) %4, ptr noundef nonnull align 8 dereferenceable(16) %2, ptr noundef nonnull align 1 dereferenceable(1) %40)
          to label %386 unwind label %395

386:                                              ; preds = %384
  br i1 %385, label %390, label %387

387:                                              ; preds = %386
  store i8 0, ptr %41, align 1, !tbaa !10
  %388 = invoke noundef zeroext i1 @_ZNK4Line21containsLeftHalfPlaneERK5PointRKb(ptr noundef nonnull align 8 dereferenceable(32) %4, ptr noundef nonnull align 8 dereferenceable(16) %3, ptr noundef nonnull align 1 dereferenceable(1) %41)
          to label %389 unwind label %399

389:                                              ; preds = %387
  br label %390

390:                                              ; preds = %389, %386
  %391 = phi i1 [ true, %386 ], [ %388, %389 ]
  call void @llvm.lifetime.end.p0(i64 1, ptr %41) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %40) #9
  br i1 %391, label %392, label %404

392:                                              ; preds = %390
  %393 = invoke i32 @puts(ptr noundef @.str.2)
          to label %394 unwind label %168

394:                                              ; preds = %392
  store i32 1, ptr %13, align 4
  br label %1165

395:                                              ; preds = %384
  %396 = landingpad { ptr, i32 }
          cleanup
  %397 = extractvalue { ptr, i32 } %396, 0
  store ptr %397, ptr %6, align 8
  %398 = extractvalue { ptr, i32 } %396, 1
  store i32 %398, ptr %7, align 4
  br label %403

399:                                              ; preds = %387
  %400 = landingpad { ptr, i32 }
          cleanup
  %401 = extractvalue { ptr, i32 } %400, 0
  store ptr %401, ptr %6, align 8
  %402 = extractvalue { ptr, i32 } %400, 1
  store i32 %402, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %41) #9
  br label %403

403:                                              ; preds = %399, %395
  call void @llvm.lifetime.end.p0(i64 1, ptr %40) #9
  br label %1187

404:                                              ; preds = %390
  call void @llvm.lifetime.start.p0(i64 24, ptr %42) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %44) #9
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %44, ptr align 8 %2, i64 16, i1 false), !tbaa.struct !5
  %405 = getelementptr inbounds %struct.Point, ptr %44, i64 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %405, ptr align 8 %3, i64 16, i1 false), !tbaa.struct !5
  %406 = getelementptr inbounds %"class.std::initializer_list", ptr %43, i32 0, i32 0
  store ptr %44, ptr %406, align 8, !tbaa !15
  %407 = getelementptr inbounds %"class.std::initializer_list", ptr %43, i32 0, i32 1
  store i64 2, ptr %407, align 8, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 1, ptr %45) #9
  call void @_ZNSaI5PointEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %45) #9
  %408 = getelementptr inbounds { ptr, i64 }, ptr %43, i32 0, i32 0
  %409 = load ptr, ptr %408, align 8
  %410 = getelementptr inbounds { ptr, i64 }, ptr %43, i32 0, i32 1
  %411 = load i64, ptr %410, align 8
  invoke void @_ZNSt6vectorI5PointSaIS0_EEC2ESt16initializer_listIS0_ERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %42, ptr %409, i64 %411, ptr noundef nonnull align 1 dereferenceable(1) %45)
          to label %412 unwind label %417

412:                                              ; preds = %404
  call void @_ZNSt15__new_allocatorI5PointED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %45) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %45) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %44) #9
  call void @llvm.lifetime.start.p0(i64 24, ptr %46) #9
  call void @_ZNSt6vectorISt4pairI4LineiESaIS2_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %46) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %47) #9
  store i32 0, ptr %47, align 4, !tbaa !12
  br label %413

413:                                              ; preds = %515, %412
  %414 = load i32, ptr %47, align 4, !tbaa !12
  %415 = icmp slt i32 %414, 2
  br i1 %415, label %421, label %416

416:                                              ; preds = %413
  store i32 10, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #9
  br label %527

417:                                              ; preds = %404
  %418 = landingpad { ptr, i32 }
          cleanup
  %419 = extractvalue { ptr, i32 } %418, 0
  store ptr %419, ptr %6, align 8
  %420 = extractvalue { ptr, i32 } %418, 1
  store i32 %420, ptr %7, align 4
  call void @_ZNSt15__new_allocatorI5PointED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %45) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %45) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %44) #9
  br label %1186

421:                                              ; preds = %413
  call void @llvm.lifetime.start.p0(i64 8, ptr %48) #9
  %422 = load i32, ptr %47, align 4, !tbaa !12
  %423 = sext i32 %422 to i64
  %424 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorI5PointSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %42, i64 noundef %423) #9
  store ptr %424, ptr %48, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 16, ptr %49) #9
  %425 = load ptr, ptr %48, align 8, !tbaa !20
  %426 = invoke { double, double } @_ZNK4Line7reflectERK5Point(ptr noundef nonnull align 8 dereferenceable(32) %4, ptr noundef nonnull align 8 dereferenceable(16) %425)
          to label %427 unwind label %442

427:                                              ; preds = %421
  %428 = getelementptr inbounds { double, double }, ptr %49, i32 0, i32 0
  %429 = extractvalue { double, double } %426, 0
  store double %429, ptr %428, align 8
  %430 = getelementptr inbounds { double, double }, ptr %49, i32 0, i32 1
  %431 = extractvalue { double, double } %426, 1
  store double %431, ptr %430, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %50) #9
  %432 = getelementptr inbounds %struct.ConvexPolygon, ptr %5, i32 0, i32 0
  store ptr %432, ptr %50, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 8, ptr %51) #9
  %433 = load ptr, ptr %50, align 8, !tbaa !20
  %434 = call ptr @_ZNSt6vectorI4LineSaIS0_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %433) #9
  %435 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.35", ptr %51, i32 0, i32 0
  store ptr %434, ptr %435, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %52) #9
  %436 = load ptr, ptr %50, align 8, !tbaa !20
  %437 = call ptr @_ZNSt6vectorI4LineSaIS0_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %436) #9
  %438 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.35", ptr %52, i32 0, i32 0
  store ptr %437, ptr %438, align 8
  br label %439

439:                                              ; preds = %474, %427
  %440 = call noundef zeroext i1 @_ZN9__gnu_cxxneIP4LineSt6vectorIS1_SaIS1_EEEEbRKNS_17__normal_iteratorIT_T0_EESB_(ptr noundef nonnull align 8 dereferenceable(8) %51, ptr noundef nonnull align 8 dereferenceable(8) %52) #9
  br i1 %440, label %446, label %441

441:                                              ; preds = %439
  store i32 13, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #9
  br label %485

442:                                              ; preds = %421
  %443 = landingpad { ptr, i32 }
          cleanup
  %444 = extractvalue { ptr, i32 } %443, 0
  store ptr %444, ptr %6, align 8
  %445 = extractvalue { ptr, i32 } %443, 1
  store i32 %445, ptr %7, align 4
  br label %526

446:                                              ; preds = %439
  call void @llvm.lifetime.start.p0(i64 8, ptr %53) #9
  %447 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNK9__gnu_cxx17__normal_iteratorIP4LineSt6vectorIS1_SaIS1_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %51) #9
  store ptr %447, ptr %53, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 40, ptr %54) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %55) #9
  %448 = getelementptr inbounds %struct.Line, ptr %55, i32 0, i32 0
  %449 = load ptr, ptr %48, align 8, !tbaa !20
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %448, ptr align 8 %449, i64 16, i1 false), !tbaa.struct !5
  %450 = getelementptr inbounds %struct.Line, ptr %55, i32 0, i32 1
  %451 = load ptr, ptr %53, align 8, !tbaa !20
  %452 = getelementptr inbounds %struct.Line, ptr %451, i32 0, i32 0
  %453 = load ptr, ptr %48, align 8, !tbaa !20
  %454 = invoke { double, double } @_ZNK5PointmiERKS_(ptr noundef nonnull align 8 dereferenceable(16) %452, ptr noundef nonnull align 8 dereferenceable(16) %453)
          to label %455 unwind label %476

455:                                              ; preds = %446
  %456 = getelementptr inbounds { double, double }, ptr %450, i32 0, i32 0
  %457 = extractvalue { double, double } %454, 0
  store double %457, ptr %456, align 8
  %458 = getelementptr inbounds { double, double }, ptr %450, i32 0, i32 1
  %459 = extractvalue { double, double } %454, 1
  store double %459, ptr %458, align 8
  invoke void @_ZNSt4pairI4LineiEC2IS0_RiTnNSt9enable_ifIXaaclsr5_PCCPE22_MoveConstructiblePairIT_T0_EEclsr5_PCCPE30_ImplicitlyMoveConvertiblePairIS5_S6_EEEbE4typeELb1EEEOS5_OS6_(ptr noundef nonnull align 8 dereferenceable(36) %54, ptr noundef nonnull align 8 dereferenceable(32) %55, ptr noundef nonnull align 4 dereferenceable(4) %47)
          to label %460 unwind label %476

460:                                              ; preds = %455
  invoke void @_ZNSt6vectorISt4pairI4LineiESaIS2_EE9push_backEOS2_(ptr noundef nonnull align 8 dereferenceable(24) %46, ptr noundef nonnull align 8 dereferenceable(36) %54)
          to label %461 unwind label %476

461:                                              ; preds = %460
  call void @llvm.lifetime.end.p0(i64 32, ptr %55) #9
  call void @llvm.lifetime.end.p0(i64 40, ptr %54) #9
  call void @llvm.lifetime.start.p0(i64 40, ptr %56) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %57) #9
  %462 = getelementptr inbounds %struct.Line, ptr %57, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %462, ptr align 8 %49, i64 16, i1 false), !tbaa.struct !5
  %463 = getelementptr inbounds %struct.Line, ptr %57, i32 0, i32 1
  %464 = load ptr, ptr %53, align 8, !tbaa !20
  %465 = getelementptr inbounds %struct.Line, ptr %464, i32 0, i32 0
  %466 = invoke { double, double } @_ZNK5PointmiERKS_(ptr noundef nonnull align 8 dereferenceable(16) %465, ptr noundef nonnull align 8 dereferenceable(16) %49)
          to label %467 unwind label %480

467:                                              ; preds = %461
  %468 = getelementptr inbounds { double, double }, ptr %463, i32 0, i32 0
  %469 = extractvalue { double, double } %466, 0
  store double %469, ptr %468, align 8
  %470 = getelementptr inbounds { double, double }, ptr %463, i32 0, i32 1
  %471 = extractvalue { double, double } %466, 1
  store double %471, ptr %470, align 8
  invoke void @_ZNSt4pairI4LineiEC2IS0_RiTnNSt9enable_ifIXaaclsr5_PCCPE22_MoveConstructiblePairIT_T0_EEclsr5_PCCPE30_ImplicitlyMoveConvertiblePairIS5_S6_EEEbE4typeELb1EEEOS5_OS6_(ptr noundef nonnull align 8 dereferenceable(36) %56, ptr noundef nonnull align 8 dereferenceable(32) %57, ptr noundef nonnull align 4 dereferenceable(4) %47)
          to label %472 unwind label %480

472:                                              ; preds = %467
  invoke void @_ZNSt6vectorISt4pairI4LineiESaIS2_EE9push_backEOS2_(ptr noundef nonnull align 8 dereferenceable(24) %46, ptr noundef nonnull align 8 dereferenceable(36) %56)
          to label %473 unwind label %480

473:                                              ; preds = %472
  call void @llvm.lifetime.end.p0(i64 32, ptr %57) #9
  call void @llvm.lifetime.end.p0(i64 40, ptr %56) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #9
  br label %474

474:                                              ; preds = %473
  %475 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIP4LineSt6vectorIS1_SaIS1_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %51) #9
  br label %439

476:                                              ; preds = %460, %455, %446
  %477 = landingpad { ptr, i32 }
          cleanup
  %478 = extractvalue { ptr, i32 } %477, 0
  store ptr %478, ptr %6, align 8
  %479 = extractvalue { ptr, i32 } %477, 1
  store i32 %479, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %55) #9
  call void @llvm.lifetime.end.p0(i64 40, ptr %54) #9
  br label %484

480:                                              ; preds = %472, %467, %461
  %481 = landingpad { ptr, i32 }
          cleanup
  %482 = extractvalue { ptr, i32 } %481, 0
  store ptr %482, ptr %6, align 8
  %483 = extractvalue { ptr, i32 } %481, 1
  store i32 %483, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %57) #9
  call void @llvm.lifetime.end.p0(i64 40, ptr %56) #9
  br label %484

484:                                              ; preds = %480, %476
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #9
  br label %526

485:                                              ; preds = %441
  call void @llvm.lifetime.start.p0(i64 40, ptr %58) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %59) #9
  %486 = getelementptr inbounds %struct.Line, ptr %59, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %486, ptr align 8 %49, i64 16, i1 false), !tbaa.struct !5
  %487 = getelementptr inbounds %struct.Line, ptr %59, i32 0, i32 1
  %488 = getelementptr inbounds %struct.Line, ptr %4, i32 0, i32 0
  %489 = invoke { double, double } @_ZNK5PointmiERKS_(ptr noundef nonnull align 8 dereferenceable(16) %488, ptr noundef nonnull align 8 dereferenceable(16) %49)
          to label %490 unwind label %518

490:                                              ; preds = %485
  %491 = getelementptr inbounds { double, double }, ptr %487, i32 0, i32 0
  %492 = extractvalue { double, double } %489, 0
  store double %492, ptr %491, align 8
  %493 = getelementptr inbounds { double, double }, ptr %487, i32 0, i32 1
  %494 = extractvalue { double, double } %489, 1
  store double %494, ptr %493, align 8
  invoke void @_ZNSt4pairI4LineiEC2IS0_RiTnNSt9enable_ifIXaaclsr5_PCCPE22_MoveConstructiblePairIT_T0_EEclsr5_PCCPE30_ImplicitlyMoveConvertiblePairIS5_S6_EEEbE4typeELb1EEEOS5_OS6_(ptr noundef nonnull align 8 dereferenceable(36) %58, ptr noundef nonnull align 8 dereferenceable(32) %59, ptr noundef nonnull align 4 dereferenceable(4) %47)
          to label %495 unwind label %518

495:                                              ; preds = %490
  invoke void @_ZNSt6vectorISt4pairI4LineiESaIS2_EE9push_backEOS2_(ptr noundef nonnull align 8 dereferenceable(24) %46, ptr noundef nonnull align 8 dereferenceable(36) %58)
          to label %496 unwind label %518

496:                                              ; preds = %495
  call void @llvm.lifetime.end.p0(i64 32, ptr %59) #9
  call void @llvm.lifetime.end.p0(i64 40, ptr %58) #9
  call void @llvm.lifetime.start.p0(i64 40, ptr %60) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %61) #9
  %497 = getelementptr inbounds %struct.Line, ptr %61, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %497, ptr align 8 %49, i64 16, i1 false), !tbaa.struct !5
  %498 = getelementptr inbounds %struct.Line, ptr %61, i32 0, i32 1
  call void @llvm.lifetime.start.p0(i64 16, ptr %62) #9
  %499 = getelementptr inbounds %struct.Line, ptr %4, i32 0, i32 0
  %500 = getelementptr inbounds %struct.Line, ptr %4, i32 0, i32 1
  %501 = invoke { double, double } @_ZNK5PointplERKS_(ptr noundef nonnull align 8 dereferenceable(16) %499, ptr noundef nonnull align 8 dereferenceable(16) %500)
          to label %502 unwind label %522

502:                                              ; preds = %496
  %503 = getelementptr inbounds { double, double }, ptr %62, i32 0, i32 0
  %504 = extractvalue { double, double } %501, 0
  store double %504, ptr %503, align 8
  %505 = getelementptr inbounds { double, double }, ptr %62, i32 0, i32 1
  %506 = extractvalue { double, double } %501, 1
  store double %506, ptr %505, align 8
  %507 = invoke { double, double } @_ZNK5PointmiERKS_(ptr noundef nonnull align 8 dereferenceable(16) %62, ptr noundef nonnull align 8 dereferenceable(16) %49)
          to label %508 unwind label %522

508:                                              ; preds = %502
  %509 = getelementptr inbounds { double, double }, ptr %498, i32 0, i32 0
  %510 = extractvalue { double, double } %507, 0
  store double %510, ptr %509, align 8
  %511 = getelementptr inbounds { double, double }, ptr %498, i32 0, i32 1
  %512 = extractvalue { double, double } %507, 1
  store double %512, ptr %511, align 8
  invoke void @_ZNSt4pairI4LineiEC2IS0_RiTnNSt9enable_ifIXaaclsr5_PCCPE22_MoveConstructiblePairIT_T0_EEclsr5_PCCPE30_ImplicitlyMoveConvertiblePairIS5_S6_EEEbE4typeELb1EEEOS5_OS6_(ptr noundef nonnull align 8 dereferenceable(36) %60, ptr noundef nonnull align 8 dereferenceable(32) %61, ptr noundef nonnull align 4 dereferenceable(4) %47)
          to label %513 unwind label %522

513:                                              ; preds = %508
  invoke void @_ZNSt6vectorISt4pairI4LineiESaIS2_EE9push_backEOS2_(ptr noundef nonnull align 8 dereferenceable(24) %46, ptr noundef nonnull align 8 dereferenceable(36) %60)
          to label %514 unwind label %522

514:                                              ; preds = %513
  call void @llvm.lifetime.end.p0(i64 16, ptr %62) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %61) #9
  call void @llvm.lifetime.end.p0(i64 40, ptr %60) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %49) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #9
  br label %515

515:                                              ; preds = %514
  %516 = load i32, ptr %47, align 4, !tbaa !12
  %517 = add nsw i32 %516, 1
  store i32 %517, ptr %47, align 4, !tbaa !12
  br label %413, !llvm.loop !25

518:                                              ; preds = %495, %490, %485
  %519 = landingpad { ptr, i32 }
          cleanup
  %520 = extractvalue { ptr, i32 } %519, 0
  store ptr %520, ptr %6, align 8
  %521 = extractvalue { ptr, i32 } %519, 1
  store i32 %521, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %59) #9
  call void @llvm.lifetime.end.p0(i64 40, ptr %58) #9
  br label %526

522:                                              ; preds = %513, %508, %502, %496
  %523 = landingpad { ptr, i32 }
          cleanup
  %524 = extractvalue { ptr, i32 } %523, 0
  store ptr %524, ptr %6, align 8
  %525 = extractvalue { ptr, i32 } %523, 1
  store i32 %525, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %62) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %61) #9
  call void @llvm.lifetime.end.p0(i64 40, ptr %60) #9
  br label %526

526:                                              ; preds = %522, %518, %484, %442
  call void @llvm.lifetime.end.p0(i64 16, ptr %49) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #9
  br label %1185

527:                                              ; preds = %416
  call void @llvm.lifetime.start.p0(i64 4, ptr %63) #9
  %528 = call noundef i64 @_ZNKSt6vectorISt4pairI4LineiESaIS2_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %46) #9
  %529 = trunc i64 %528 to i32
  store i32 %529, ptr %63, align 4, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 24, ptr %64) #9
  call void @_ZNSt6vectorI5PointSaIS0_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %64) #9
  call void @llvm.lifetime.start.p0(i64 48, ptr %65) #9
  %530 = getelementptr inbounds [2 x %"class.std::vector.30"], ptr %65, i32 0, i32 0
  %531 = getelementptr inbounds %"class.std::vector.30", ptr %530, i64 2
  br label %532

532:                                              ; preds = %532, %527
  %533 = phi ptr [ %530, %527 ], [ %534, %532 ]
  call void @_ZNSt6vectorI5PointSaIS0_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %533) #9
  %534 = getelementptr inbounds %"class.std::vector.30", ptr %533, i64 1
  %535 = icmp eq ptr %534, %531
  br i1 %535, label %536, label %532

536:                                              ; preds = %532
  call void @llvm.lifetime.start.p0(i64 4, ptr %66) #9
  store i32 0, ptr %66, align 4, !tbaa !12
  br label %537

537:                                              ; preds = %589, %536
  %538 = load i32, ptr %66, align 4, !tbaa !12
  %539 = load i32, ptr %63, align 4, !tbaa !12
  %540 = icmp slt i32 %538, %539
  br i1 %540, label %542, label %541

541:                                              ; preds = %537
  store i32 15, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %66) #9
  br label %592

542:                                              ; preds = %537
  call void @llvm.lifetime.start.p0(i64 4, ptr %67) #9
  %543 = load i32, ptr %66, align 4, !tbaa !12
  %544 = add nsw i32 %543, 1
  store i32 %544, ptr %67, align 4, !tbaa !12
  br label %545

545:                                              ; preds = %584, %542
  %546 = load i32, ptr %67, align 4, !tbaa !12
  %547 = load i32, ptr %63, align 4, !tbaa !12
  %548 = icmp slt i32 %546, %547
  br i1 %548, label %550, label %549

549:                                              ; preds = %545
  store i32 18, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %67) #9
  br label %588

550:                                              ; preds = %545
  call void @llvm.lifetime.start.p0(i64 8, ptr %68) #9
  %551 = load i32, ptr %66, align 4, !tbaa !12
  %552 = sext i32 %551 to i64
  %553 = call noundef nonnull align 8 dereferenceable(36) ptr @_ZNSt6vectorISt4pairI4LineiESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %46, i64 noundef %552) #9
  %554 = getelementptr inbounds %"struct.std::pair.41", ptr %553, i32 0, i32 0
  store ptr %554, ptr %68, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 8, ptr %69) #9
  %555 = load i32, ptr %67, align 4, !tbaa !12
  %556 = sext i32 %555 to i64
  %557 = call noundef nonnull align 8 dereferenceable(36) ptr @_ZNSt6vectorISt4pairI4LineiESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %46, i64 noundef %556) #9
  %558 = getelementptr inbounds %"struct.std::pair.41", ptr %557, i32 0, i32 0
  store ptr %558, ptr %69, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 24, ptr %70) #9
  %559 = load ptr, ptr %68, align 8, !tbaa !20
  %560 = load ptr, ptr %69, align 8, !tbaa !20
  invoke void @_ZNK4Line9intersectERKS_(ptr dead_on_unwind writable sret(%"struct.std::pair.44") align 8 %70, ptr noundef nonnull align 8 dereferenceable(32) %559, ptr noundef nonnull align 8 dereferenceable(32) %560)
          to label %561 unwind label %575

561:                                              ; preds = %550
  %562 = getelementptr inbounds %"struct.std::pair.44", ptr %70, i32 0, i32 1
  %563 = load i8, ptr %562, align 8, !tbaa !26, !range !29, !noundef !30
  %564 = trunc i8 %563 to i1
  call void @llvm.lifetime.start.p0(i64 1, ptr %71) #9
  br i1 %564, label %565, label %570

565:                                              ; preds = %561
  %566 = getelementptr inbounds %"struct.std::pair.44", ptr %70, i32 0, i32 0
  store i8 0, ptr %71, align 1, !tbaa !10
  %567 = invoke noundef zeroext i1 @_ZNK4Line21containsLeftHalfPlaneERK5PointRKb(ptr noundef nonnull align 8 dereferenceable(32) %4, ptr noundef nonnull align 8 dereferenceable(16) %566, ptr noundef nonnull align 1 dereferenceable(1) %71)
          to label %568 unwind label %579

568:                                              ; preds = %565
  %569 = xor i1 %567, true
  br label %570

570:                                              ; preds = %568, %561
  %571 = phi i1 [ false, %561 ], [ %569, %568 ]
  call void @llvm.lifetime.end.p0(i64 1, ptr %71) #9
  br i1 %571, label %572, label %583

572:                                              ; preds = %570
  %573 = getelementptr inbounds %"struct.std::pair.44", ptr %70, i32 0, i32 0
  invoke void @_ZNSt6vectorI5PointSaIS0_EE9push_backERKS0_(ptr noundef nonnull align 8 dereferenceable(24) %64, ptr noundef nonnull align 8 dereferenceable(16) %573)
          to label %574 unwind label %575

574:                                              ; preds = %572
  br label %583

575:                                              ; preds = %572, %550
  %576 = landingpad { ptr, i32 }
          cleanup
  %577 = extractvalue { ptr, i32 } %576, 0
  store ptr %577, ptr %6, align 8
  %578 = extractvalue { ptr, i32 } %576, 1
  store i32 %578, ptr %7, align 4
  br label %587

579:                                              ; preds = %565
  %580 = landingpad { ptr, i32 }
          cleanup
  %581 = extractvalue { ptr, i32 } %580, 0
  store ptr %581, ptr %6, align 8
  %582 = extractvalue { ptr, i32 } %580, 1
  store i32 %582, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %71) #9
  br label %587

583:                                              ; preds = %574, %570
  call void @llvm.lifetime.end.p0(i64 24, ptr %70) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %69) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %68) #9
  br label %584

584:                                              ; preds = %583
  %585 = load i32, ptr %67, align 4, !tbaa !12
  %586 = add nsw i32 %585, 1
  store i32 %586, ptr %67, align 4, !tbaa !12
  br label %545, !llvm.loop !31

587:                                              ; preds = %579, %575
  call void @llvm.lifetime.end.p0(i64 24, ptr %70) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %69) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %68) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %67) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %66) #9
  br label %1177

588:                                              ; preds = %549
  br label %589

589:                                              ; preds = %588
  %590 = load i32, ptr %66, align 4, !tbaa !12
  %591 = add nsw i32 %590, 1
  store i32 %591, ptr %66, align 4, !tbaa !12
  br label %537, !llvm.loop !32

592:                                              ; preds = %541
  invoke void @_Z13sortAndUniqueI5PointEvRSt6vectorIT_SaIS2_EE(ptr noundef nonnull align 8 dereferenceable(24) %64)
          to label %593 unwind label %639

593:                                              ; preds = %592
  call void @llvm.lifetime.start.p0(i64 4, ptr %72) #9
  %594 = call noundef i64 @_ZNKSt6vectorI5PointSaIS0_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %64) #9
  %595 = trunc i64 %594 to i32
  store i32 %595, ptr %72, align 4, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 4, ptr %73) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %74) #9
  %596 = call ptr @_ZNSt6vectorI5PointSaIS0_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %64) #9
  %597 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.47", ptr %75, i32 0, i32 0
  store ptr %596, ptr %597, align 8
  %598 = call ptr @_ZNSt6vectorI5PointSaIS0_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %64) #9
  %599 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.47", ptr %76, i32 0, i32 0
  store ptr %598, ptr %599, align 8
  %600 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.47", ptr %75, i32 0, i32 0
  %601 = load ptr, ptr %600, align 8
  %602 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.47", ptr %76, i32 0, i32 0
  %603 = load ptr, ptr %602, align 8
  %604 = invoke ptr @_ZSt11lower_boundIN9__gnu_cxx17__normal_iteratorIP5PointSt6vectorIS2_SaIS2_EEEES2_ET_S8_S8_RKT0_(ptr %601, ptr %603, ptr noundef nonnull align 8 dereferenceable(16) %2)
          to label %605 unwind label %643

605:                                              ; preds = %593
  %606 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.47", ptr %74, i32 0, i32 0
  store ptr %604, ptr %606, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %77) #9
  %607 = call ptr @_ZNSt6vectorI5PointSaIS0_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %64) #9
  %608 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.47", ptr %77, i32 0, i32 0
  store ptr %607, ptr %608, align 8
  %609 = call noundef i64 @_ZN9__gnu_cxxmiIP5PointSt6vectorIS1_SaIS1_EEEENS_17__normal_iteratorIT_T0_E15difference_typeERKS9_SC_(ptr noundef nonnull align 8 dereferenceable(8) %74, ptr noundef nonnull align 8 dereferenceable(8) %77) #9
  %610 = trunc i64 %609 to i32
  call void @llvm.lifetime.end.p0(i64 8, ptr %77) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %74) #9
  store i32 %610, ptr %73, align 4, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 4, ptr %78) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %79) #9
  %611 = call ptr @_ZNSt6vectorI5PointSaIS0_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %64) #9
  %612 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.47", ptr %80, i32 0, i32 0
  store ptr %611, ptr %612, align 8
  %613 = call ptr @_ZNSt6vectorI5PointSaIS0_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %64) #9
  %614 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.47", ptr %81, i32 0, i32 0
  store ptr %613, ptr %614, align 8
  %615 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.47", ptr %80, i32 0, i32 0
  %616 = load ptr, ptr %615, align 8
  %617 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.47", ptr %81, i32 0, i32 0
  %618 = load ptr, ptr %617, align 8
  %619 = invoke ptr @_ZSt11lower_boundIN9__gnu_cxx17__normal_iteratorIP5PointSt6vectorIS2_SaIS2_EEEES2_ET_S8_S8_RKT0_(ptr %616, ptr %618, ptr noundef nonnull align 8 dereferenceable(16) %3)
          to label %620 unwind label %647

620:                                              ; preds = %605
  %621 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.47", ptr %79, i32 0, i32 0
  store ptr %619, ptr %621, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %82) #9
  %622 = call ptr @_ZNSt6vectorI5PointSaIS0_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %64) #9
  %623 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.47", ptr %82, i32 0, i32 0
  store ptr %622, ptr %623, align 8
  %624 = call noundef i64 @_ZN9__gnu_cxxmiIP5PointSt6vectorIS1_SaIS1_EEEENS_17__normal_iteratorIT_T0_E15difference_typeERKS9_SC_(ptr noundef nonnull align 8 dereferenceable(8) %79, ptr noundef nonnull align 8 dereferenceable(8) %82) #9
  %625 = trunc i64 %624 to i32
  call void @llvm.lifetime.end.p0(i64 8, ptr %82) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %79) #9
  store i32 %625, ptr %78, align 4, !tbaa !12
  %626 = load i32, ptr %73, align 4, !tbaa !12
  %627 = load i32, ptr %72, align 4, !tbaa !12
  %628 = icmp slt i32 %626, %627
  br i1 %628, label %629, label %635

629:                                              ; preds = %620
  %630 = load i32, ptr %73, align 4, !tbaa !12
  %631 = sext i32 %630 to i64
  %632 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorI5PointSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %64, i64 noundef %631) #9
  %633 = invoke noundef zeroext i1 @_ZNK5PointeqERKS_(ptr noundef nonnull align 8 dereferenceable(16) %632, ptr noundef nonnull align 8 dereferenceable(16) %2)
          to label %634 unwind label %651

634:                                              ; preds = %629
  br label %635

635:                                              ; preds = %634, %620
  %636 = phi i1 [ false, %620 ], [ %633, %634 ]
  br i1 %636, label %637, label %638

637:                                              ; preds = %635
  br label %656

638:                                              ; preds = %635
  call void @__assert_fail(ptr noundef @.str.3, ptr noundef @.str.4, i32 noundef 302, ptr noundef @__PRETTY_FUNCTION__._Z5solvev) #10
  unreachable

639:                                              ; preds = %592
  %640 = landingpad { ptr, i32 }
          cleanup
  %641 = extractvalue { ptr, i32 } %640, 0
  store ptr %641, ptr %6, align 8
  %642 = extractvalue { ptr, i32 } %640, 1
  store i32 %642, ptr %7, align 4
  br label %1177

643:                                              ; preds = %593
  %644 = landingpad { ptr, i32 }
          cleanup
  %645 = extractvalue { ptr, i32 } %644, 0
  store ptr %645, ptr %6, align 8
  %646 = extractvalue { ptr, i32 } %644, 1
  store i32 %646, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %74) #9
  br label %1176

647:                                              ; preds = %605
  %648 = landingpad { ptr, i32 }
          cleanup
  %649 = extractvalue { ptr, i32 } %648, 0
  store ptr %649, ptr %6, align 8
  %650 = extractvalue { ptr, i32 } %648, 1
  store i32 %650, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %79) #9
  br label %1175

651:                                              ; preds = %674, %660, %629
  %652 = landingpad { ptr, i32 }
          cleanup
  %653 = extractvalue { ptr, i32 } %652, 0
  store ptr %653, ptr %6, align 8
  %654 = extractvalue { ptr, i32 } %652, 1
  store i32 %654, ptr %7, align 4
  br label %1175

655:                                              ; No predecessors!
  br label %656

656:                                              ; preds = %655, %637
  %657 = load i32, ptr %78, align 4, !tbaa !12
  %658 = load i32, ptr %72, align 4, !tbaa !12
  %659 = icmp slt i32 %657, %658
  br i1 %659, label %660, label %666

660:                                              ; preds = %656
  %661 = load i32, ptr %78, align 4, !tbaa !12
  %662 = sext i32 %661 to i64
  %663 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorI5PointSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %64, i64 noundef %662) #9
  %664 = invoke noundef zeroext i1 @_ZNK5PointeqERKS_(ptr noundef nonnull align 8 dereferenceable(16) %663, ptr noundef nonnull align 8 dereferenceable(16) %3)
          to label %665 unwind label %651

665:                                              ; preds = %660
  br label %666

666:                                              ; preds = %665, %656
  %667 = phi i1 [ false, %656 ], [ %664, %665 ]
  br i1 %667, label %668, label %669

668:                                              ; preds = %666
  br label %671

669:                                              ; preds = %666
  call void @__assert_fail(ptr noundef @.str.5, ptr noundef @.str.4, i32 noundef 303, ptr noundef @__PRETTY_FUNCTION__._Z5solvev) #10
  unreachable

670:                                              ; No predecessors!
  br label %671

671:                                              ; preds = %670, %668
  %672 = load i8, ptr @debug, align 1, !tbaa !10, !range !29, !noundef !30
  %673 = trunc i8 %672 to i1
  br i1 %673, label %674, label %706

674:                                              ; preds = %671
  %675 = load i32, ptr %72, align 4, !tbaa !12
  %676 = load i32, ptr %73, align 4, !tbaa !12
  %677 = load i32, ptr %78, align 4, !tbaa !12
  %678 = invoke i32 (ptr, ...) @printf(ptr noundef @.str.6, i32 noundef %675, i32 noundef %676, i32 noundef %677)
          to label %679 unwind label %651

679:                                              ; preds = %674
  call void @llvm.lifetime.start.p0(i64 4, ptr %83) #9
  store i32 0, ptr %83, align 4, !tbaa !12
  br label %680

680:                                              ; preds = %693, %679
  %681 = load i32, ptr %83, align 4, !tbaa !12
  %682 = load i32, ptr %72, align 4, !tbaa !12
  %683 = icmp slt i32 %681, %682
  br i1 %683, label %685, label %684

684:                                              ; preds = %680
  store i32 21, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %83) #9
  br label %705

685:                                              ; preds = %680
  %686 = load i32, ptr %83, align 4, !tbaa !12
  %687 = invoke i32 (ptr, ...) @printf(ptr noundef @.str.7, i32 noundef %686)
          to label %688 unwind label %696

688:                                              ; preds = %685
  %689 = load i32, ptr %83, align 4, !tbaa !12
  %690 = sext i32 %689 to i64
  %691 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorI5PointSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %64, i64 noundef %690) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %84) #9
  store i8 10, ptr %84, align 1, !tbaa !14
  invoke void @_ZNK5Point5writeERKc(ptr noundef nonnull align 8 dereferenceable(16) %691, ptr noundef nonnull align 1 dereferenceable(1) %84)
          to label %692 unwind label %700

692:                                              ; preds = %688
  call void @llvm.lifetime.end.p0(i64 1, ptr %84) #9
  br label %693

693:                                              ; preds = %692
  %694 = load i32, ptr %83, align 4, !tbaa !12
  %695 = add nsw i32 %694, 1
  store i32 %695, ptr %83, align 4, !tbaa !12
  br label %680, !llvm.loop !33

696:                                              ; preds = %685
  %697 = landingpad { ptr, i32 }
          cleanup
  %698 = extractvalue { ptr, i32 } %697, 0
  store ptr %698, ptr %6, align 8
  %699 = extractvalue { ptr, i32 } %697, 1
  store i32 %699, ptr %7, align 4
  br label %704

700:                                              ; preds = %688
  %701 = landingpad { ptr, i32 }
          cleanup
  %702 = extractvalue { ptr, i32 } %701, 0
  store ptr %702, ptr %6, align 8
  %703 = extractvalue { ptr, i32 } %701, 1
  store i32 %703, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %84) #9
  br label %704

704:                                              ; preds = %700, %696
  call void @llvm.lifetime.end.p0(i64 4, ptr %83) #9
  br label %1175

705:                                              ; preds = %684
  br label %706

706:                                              ; preds = %705, %671
  call void @llvm.lifetime.start.p0(i64 24, ptr %85) #9
  %707 = load i32, ptr %72, align 4, !tbaa !12
  %708 = sext i32 %707 to i64
  call void @llvm.lifetime.start.p0(i64 1, ptr %86) #9
  call void @_ZNSaISt6vectorISt4pairIS0_IdiEiESaIS2_EEEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %86) #9
  invoke void @_ZNSt6vectorIS_ISt4pairIS0_IdiEiESaIS2_EESaIS4_EEC2EmRKS5_(ptr noundef nonnull align 8 dereferenceable(24) %85, i64 noundef %708, ptr noundef nonnull align 1 dereferenceable(1) %86)
          to label %709 unwind label %715

709:                                              ; preds = %706
  call void @_ZNSt15__new_allocatorISt6vectorISt4pairIS1_IdiEiESaIS3_EEED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %86) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %86) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %87) #9
  store i32 0, ptr %87, align 4, !tbaa !12
  br label %710

710:                                              ; preds = %1098, %709
  %711 = load i32, ptr %87, align 4, !tbaa !12
  %712 = load i32, ptr %72, align 4, !tbaa !12
  %713 = icmp slt i32 %711, %712
  br i1 %713, label %719, label %714

714:                                              ; preds = %710
  store i32 24, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %87) #9
  br label %1101

715:                                              ; preds = %706
  %716 = landingpad { ptr, i32 }
          cleanup
  %717 = extractvalue { ptr, i32 } %716, 0
  store ptr %717, ptr %6, align 8
  %718 = extractvalue { ptr, i32 } %716, 1
  store i32 %718, ptr %7, align 4
  call void @_ZNSt15__new_allocatorISt6vectorISt4pairIS1_IdiEiESaIS3_EEED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %86) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %86) #9
  br label %1174

719:                                              ; preds = %710
  call void @llvm.lifetime.start.p0(i64 4, ptr %88) #9
  %720 = load i32, ptr %87, align 4, !tbaa !12
  %721 = add nsw i32 %720, 1
  store i32 %721, ptr %88, align 4, !tbaa !12
  br label %722

722:                                              ; preds = %1083, %719
  %723 = load i32, ptr %88, align 4, !tbaa !12
  %724 = load i32, ptr %72, align 4, !tbaa !12
  %725 = icmp slt i32 %723, %724
  br i1 %725, label %727, label %726

726:                                              ; preds = %722
  store i32 27, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %88) #9
  br label %1097

727:                                              ; preds = %722
  call void @llvm.lifetime.start.p0(i64 32, ptr %89) #9
  %728 = getelementptr inbounds %struct.Line, ptr %89, i32 0, i32 0
  %729 = load i32, ptr %87, align 4, !tbaa !12
  %730 = sext i32 %729 to i64
  %731 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorI5PointSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %64, i64 noundef %730) #9
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %728, ptr align 8 %731, i64 16, i1 false), !tbaa.struct !5
  %732 = getelementptr inbounds %struct.Line, ptr %89, i32 0, i32 1
  %733 = load i32, ptr %88, align 4, !tbaa !12
  %734 = sext i32 %733 to i64
  %735 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorI5PointSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %64, i64 noundef %734) #9
  %736 = load i32, ptr %87, align 4, !tbaa !12
  %737 = sext i32 %736 to i64
  %738 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorI5PointSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %64, i64 noundef %737) #9
  %739 = invoke { double, double } @_ZNK5PointmiERKS_(ptr noundef nonnull align 8 dereferenceable(16) %735, ptr noundef nonnull align 8 dereferenceable(16) %738)
          to label %740 unwind label %748

740:                                              ; preds = %727
  %741 = getelementptr inbounds { double, double }, ptr %732, i32 0, i32 0
  %742 = extractvalue { double, double } %739, 0
  store double %742, ptr %741, align 8
  %743 = getelementptr inbounds { double, double }, ptr %732, i32 0, i32 1
  %744 = extractvalue { double, double } %739, 1
  store double %744, ptr %743, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %8, ptr align 8 %89, i64 32, i1 false), !tbaa.struct !21
  call void @llvm.lifetime.end.p0(i64 32, ptr %89) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %90) #9
  store i8 1, ptr %90, align 1, !tbaa !10
  %745 = invoke noundef zeroext i1 @_ZNK13ConvexPolygon22hasSegmentIntersectionERK4LineRKb(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(32) %8, ptr noundef nonnull align 1 dereferenceable(1) %90)
          to label %746 unwind label %752

746:                                              ; preds = %740
  call void @llvm.lifetime.end.p0(i64 1, ptr %90) #9
  br i1 %745, label %747, label %756

747:                                              ; preds = %746
  br label %1083

748:                                              ; preds = %727
  %749 = landingpad { ptr, i32 }
          cleanup
  %750 = extractvalue { ptr, i32 } %749, 0
  store ptr %750, ptr %6, align 8
  %751 = extractvalue { ptr, i32 } %749, 1
  store i32 %751, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %89) #9
  br label %1096

752:                                              ; preds = %740
  %753 = landingpad { ptr, i32 }
          cleanup
  %754 = extractvalue { ptr, i32 } %753, 0
  store ptr %754, ptr %6, align 8
  %755 = extractvalue { ptr, i32 } %753, 1
  store i32 %755, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %90) #9
  br label %1096

756:                                              ; preds = %746
  call void @llvm.lifetime.start.p0(i64 8, ptr %91) #9
  %757 = getelementptr inbounds %struct.Line, ptr %8, i32 0, i32 1
  %758 = invoke noundef double @_ZNK5Point3lenEv(ptr noundef nonnull align 8 dereferenceable(16) %757)
          to label %759 unwind label %768

759:                                              ; preds = %756
  store double %758, ptr %91, align 8, !tbaa !6
  %760 = load i8, ptr @debug, align 1, !tbaa !10, !range !29, !noundef !30
  %761 = trunc i8 %760 to i1
  br i1 %761, label %762, label %776

762:                                              ; preds = %759
  %763 = load i32, ptr %87, align 4, !tbaa !12
  %764 = load i32, ptr %88, align 4, !tbaa !12
  %765 = invoke i32 (ptr, ...) @printf(ptr noundef @.str.8, i32 noundef %763, i32 noundef %764)
          to label %766 unwind label %768

766:                                              ; preds = %762
  call void @llvm.lifetime.start.p0(i64 1, ptr %92) #9
  store i8 10, ptr %92, align 1, !tbaa !14
  invoke void @_Z7writeDBRKdRKc(ptr noundef nonnull align 8 dereferenceable(8) %91, ptr noundef nonnull align 1 dereferenceable(1) %92)
          to label %767 unwind label %772

767:                                              ; preds = %766
  call void @llvm.lifetime.end.p0(i64 1, ptr %92) #9
  br label %776

768:                                              ; preds = %856, %854, %762, %756
  %769 = landingpad { ptr, i32 }
          cleanup
  %770 = extractvalue { ptr, i32 } %769, 0
  store ptr %770, ptr %6, align 8
  %771 = extractvalue { ptr, i32 } %769, 1
  store i32 %771, ptr %7, align 4
  br label %1095

772:                                              ; preds = %766
  %773 = landingpad { ptr, i32 }
          cleanup
  %774 = extractvalue { ptr, i32 } %773, 0
  store ptr %774, ptr %6, align 8
  %775 = extractvalue { ptr, i32 } %773, 1
  store i32 %775, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %92) #9
  br label %1095

776:                                              ; preds = %767, %759
  call void @llvm.lifetime.start.p0(i64 32, ptr %94) #9
  %777 = load i32, ptr %87, align 4, !tbaa !12
  %778 = sext i32 %777 to i64
  %779 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorI5PointSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %64, i64 noundef %778) #9
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %94, ptr align 8 %779, i64 16, i1 false), !tbaa.struct !5
  %780 = getelementptr inbounds %struct.Point, ptr %94, i64 1
  %781 = load i32, ptr %88, align 4, !tbaa !12
  %782 = sext i32 %781 to i64
  %783 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorI5PointSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %64, i64 noundef %782) #9
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %780, ptr align 8 %783, i64 16, i1 false), !tbaa.struct !5
  %784 = getelementptr inbounds %"class.std::initializer_list", ptr %93, i32 0, i32 0
  store ptr %94, ptr %784, align 8, !tbaa !15
  %785 = getelementptr inbounds %"class.std::initializer_list", ptr %93, i32 0, i32 1
  store i64 2, ptr %785, align 8, !tbaa !19
  %786 = getelementptr inbounds [2 x %"class.std::vector.30"], ptr %65, i64 0, i64 0
  %787 = getelementptr inbounds { ptr, i64 }, ptr %93, i32 0, i32 0
  %788 = load ptr, ptr %787, align 8
  %789 = getelementptr inbounds { ptr, i64 }, ptr %93, i32 0, i32 1
  %790 = load i64, ptr %789, align 8
  %791 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorI5PointSaIS0_EEaSESt16initializer_listIS0_E(ptr noundef nonnull align 8 dereferenceable(24) %786, ptr %788, i64 %790)
          to label %792 unwind label %818

792:                                              ; preds = %776
  call void @llvm.lifetime.end.p0(i64 32, ptr %94) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %96) #9
  %793 = load i32, ptr %87, align 4, !tbaa !12
  %794 = sext i32 %793 to i64
  %795 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorI5PointSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %64, i64 noundef %794) #9
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %96, ptr align 8 %795, i64 16, i1 false), !tbaa.struct !5
  %796 = getelementptr inbounds %struct.Point, ptr %96, i64 1
  %797 = load i32, ptr %88, align 4, !tbaa !12
  %798 = sext i32 %797 to i64
  %799 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorI5PointSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %64, i64 noundef %798) #9
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %796, ptr align 8 %799, i64 16, i1 false), !tbaa.struct !5
  %800 = getelementptr inbounds %"class.std::initializer_list", ptr %95, i32 0, i32 0
  store ptr %96, ptr %800, align 8, !tbaa !15
  %801 = getelementptr inbounds %"class.std::initializer_list", ptr %95, i32 0, i32 1
  store i64 2, ptr %801, align 8, !tbaa !19
  %802 = getelementptr inbounds [2 x %"class.std::vector.30"], ptr %65, i64 0, i64 1
  %803 = getelementptr inbounds { ptr, i64 }, ptr %95, i32 0, i32 0
  %804 = load ptr, ptr %803, align 8
  %805 = getelementptr inbounds { ptr, i64 }, ptr %95, i32 0, i32 1
  %806 = load i64, ptr %805, align 8
  %807 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorI5PointSaIS0_EEaSESt16initializer_listIS0_E(ptr noundef nonnull align 8 dereferenceable(24) %802, ptr %804, i64 %806)
          to label %808 unwind label %822

808:                                              ; preds = %792
  call void @llvm.lifetime.end.p0(i64 32, ptr %96) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %97) #9
  store ptr %46, ptr %97, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 8, ptr %98) #9
  %809 = load ptr, ptr %97, align 8, !tbaa !20
  %810 = call ptr @_ZNSt6vectorISt4pairI4LineiESaIS2_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %809) #9
  %811 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.48", ptr %98, i32 0, i32 0
  store ptr %810, ptr %811, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %99) #9
  %812 = load ptr, ptr %97, align 8, !tbaa !20
  %813 = call ptr @_ZNSt6vectorISt4pairI4LineiESaIS2_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %812) #9
  %814 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.48", ptr %99, i32 0, i32 0
  store ptr %813, ptr %814, align 8
  br label %815

815:                                              ; preds = %852, %808
  %816 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPSt4pairI4LineiESt6vectorIS3_SaIS3_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %98, ptr noundef nonnull align 8 dereferenceable(8) %99) #9
  br i1 %816, label %826, label %817

817:                                              ; preds = %815
  store i32 30, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %99) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %98) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %97) #9
  br label %854

818:                                              ; preds = %776
  %819 = landingpad { ptr, i32 }
          cleanup
  %820 = extractvalue { ptr, i32 } %819, 0
  store ptr %820, ptr %6, align 8
  %821 = extractvalue { ptr, i32 } %819, 1
  store i32 %821, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %94) #9
  br label %1095

822:                                              ; preds = %792
  %823 = landingpad { ptr, i32 }
          cleanup
  %824 = extractvalue { ptr, i32 } %823, 0
  store ptr %824, ptr %6, align 8
  %825 = extractvalue { ptr, i32 } %823, 1
  store i32 %825, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %96) #9
  br label %1095

826:                                              ; preds = %815
  call void @llvm.lifetime.start.p0(i64 8, ptr %100) #9
  %827 = call noundef nonnull align 8 dereferenceable(36) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPSt4pairI4LineiESt6vectorIS3_SaIS3_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %98) #9
  store ptr %827, ptr %100, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr %101) #9
  %828 = load ptr, ptr %100, align 8, !tbaa !20
  %829 = getelementptr inbounds %"struct.std::pair.41", ptr %828, i32 0, i32 1
  %830 = load i32, ptr %829, align 8, !tbaa !34
  store i32 %830, ptr %101, align 4, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 24, ptr %102) #9
  %831 = load ptr, ptr %100, align 8, !tbaa !20
  %832 = getelementptr inbounds %"struct.std::pair.41", ptr %831, i32 0, i32 0
  invoke void @_ZNK4Line9intersectERKS_(ptr dead_on_unwind writable sret(%"struct.std::pair.44") align 8 %102, ptr noundef nonnull align 8 dereferenceable(32) %8, ptr noundef nonnull align 8 dereferenceable(32) %832)
          to label %833 unwind label %847

833:                                              ; preds = %826
  %834 = getelementptr inbounds %"struct.std::pair.44", ptr %102, i32 0, i32 1
  %835 = load i8, ptr %834, align 8, !tbaa !26, !range !29, !noundef !30
  %836 = trunc i8 %835 to i1
  br i1 %836, label %837, label %851

837:                                              ; preds = %833
  %838 = getelementptr inbounds %"struct.std::pair.44", ptr %102, i32 0, i32 0
  %839 = invoke noundef zeroext i1 @_ZNK4Line15containsSegmentERK5Point(ptr noundef nonnull align 8 dereferenceable(32) %8, ptr noundef nonnull align 8 dereferenceable(16) %838)
          to label %840 unwind label %847

840:                                              ; preds = %837
  br i1 %839, label %841, label %851

841:                                              ; preds = %840
  %842 = load i32, ptr %101, align 4, !tbaa !12
  %843 = sext i32 %842 to i64
  %844 = getelementptr inbounds [2 x %"class.std::vector.30"], ptr %65, i64 0, i64 %843
  %845 = getelementptr inbounds %"struct.std::pair.44", ptr %102, i32 0, i32 0
  invoke void @_ZNSt6vectorI5PointSaIS0_EE9push_backERKS0_(ptr noundef nonnull align 8 dereferenceable(24) %844, ptr noundef nonnull align 8 dereferenceable(16) %845)
          to label %846 unwind label %847

846:                                              ; preds = %841
  br label %851

847:                                              ; preds = %841, %837, %826
  %848 = landingpad { ptr, i32 }
          cleanup
  %849 = extractvalue { ptr, i32 } %848, 0
  store ptr %849, ptr %6, align 8
  %850 = extractvalue { ptr, i32 } %848, 1
  store i32 %850, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 24, ptr %102) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %101) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %100) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %99) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %98) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %97) #9
  br label %1095

851:                                              ; preds = %846, %840, %833
  call void @llvm.lifetime.end.p0(i64 24, ptr %102) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %101) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %100) #9
  br label %852

852:                                              ; preds = %851
  %853 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPSt4pairI4LineiESt6vectorIS3_SaIS3_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %98) #9
  br label %815

854:                                              ; preds = %817
  %855 = getelementptr inbounds [2 x %"class.std::vector.30"], ptr %65, i64 0, i64 0
  invoke void @_Z13sortAndUniqueI5PointEvRSt6vectorIT_SaIS2_EE(ptr noundef nonnull align 8 dereferenceable(24) %855)
          to label %856 unwind label %768

856:                                              ; preds = %854
  %857 = getelementptr inbounds [2 x %"class.std::vector.30"], ptr %65, i64 0, i64 1
  invoke void @_Z13sortAndUniqueI5PointEvRSt6vectorIT_SaIS2_EE(ptr noundef nonnull align 8 dereferenceable(24) %857)
          to label %858 unwind label %768

858:                                              ; preds = %856
  call void @llvm.lifetime.start.p0(i64 4, ptr %103) #9
  store i32 0, ptr %103, align 4, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 4, ptr %104) #9
  store i32 0, ptr %104, align 4, !tbaa !12
  br label %859

859:                                              ; preds = %1055, %858
  %860 = load i32, ptr %104, align 4, !tbaa !12
  %861 = icmp slt i32 %860, 2
  br i1 %861, label %863, label %862

862:                                              ; preds = %859
  store i32 32, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %104) #9
  br label %1059

863:                                              ; preds = %859
  call void @llvm.lifetime.start.p0(i64 4, ptr %105) #9
  %864 = load i32, ptr %104, align 4, !tbaa !12
  %865 = sext i32 %864 to i64
  %866 = getelementptr inbounds [2 x %"class.std::vector.30"], ptr %65, i64 0, i64 %865
  %867 = call noundef i64 @_ZNKSt6vectorI5PointSaIS0_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %866) #9
  %868 = trunc i64 %867 to i32
  store i32 %868, ptr %105, align 4, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %106) #9
  %869 = load i32, ptr %104, align 4, !tbaa !12
  %870 = sext i32 %869 to i64
  %871 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorI5PointSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %42, i64 noundef %870) #9
  store ptr %871, ptr %106, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 16, ptr %107) #9
  %872 = load ptr, ptr %106, align 8, !tbaa !20
  %873 = invoke { double, double } @_ZNK4Line7reflectERK5Point(ptr noundef nonnull align 8 dereferenceable(32) %4, ptr noundef nonnull align 8 dereferenceable(16) %872)
          to label %874 unwind label %889

874:                                              ; preds = %863
  %875 = getelementptr inbounds { double, double }, ptr %107, i32 0, i32 0
  %876 = extractvalue { double, double } %873, 0
  store double %876, ptr %875, align 8
  %877 = getelementptr inbounds { double, double }, ptr %107, i32 0, i32 1
  %878 = extractvalue { double, double } %873, 1
  store double %878, ptr %877, align 8
  call void @llvm.lifetime.start.p0(i64 1, ptr %108) #9
  store i8 0, ptr %108, align 1, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 4, ptr %109) #9
  store i32 1, ptr %109, align 4, !tbaa !12
  br label %879

879:                                              ; preds = %1032, %874
  %880 = load i8, ptr %108, align 1, !tbaa !10, !range !29, !noundef !30
  %881 = trunc i8 %880 to i1
  br i1 %881, label %886, label %882

882:                                              ; preds = %879
  %883 = load i32, ptr %109, align 4, !tbaa !12
  %884 = load i32, ptr %105, align 4, !tbaa !12
  %885 = icmp slt i32 %883, %884
  br label %886

886:                                              ; preds = %882, %879
  %887 = phi i1 [ false, %879 ], [ %885, %882 ]
  br i1 %887, label %893, label %888

888:                                              ; preds = %886
  store i32 35, ptr %13, align 4
  br label %1045

889:                                              ; preds = %863
  %890 = landingpad { ptr, i32 }
          cleanup
  %891 = extractvalue { ptr, i32 } %890, 0
  store ptr %891, ptr %6, align 8
  %892 = extractvalue { ptr, i32 } %890, 1
  store i32 %892, ptr %7, align 4
  br label %1058

893:                                              ; preds = %886
  call void @llvm.lifetime.start.p0(i64 16, ptr %110) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr %111) #9
  %894 = load i32, ptr %104, align 4, !tbaa !12
  %895 = sext i32 %894 to i64
  %896 = getelementptr inbounds [2 x %"class.std::vector.30"], ptr %65, i64 0, i64 %895
  %897 = load i32, ptr %109, align 4, !tbaa !12
  %898 = sub nsw i32 %897, 1
  %899 = sext i32 %898 to i64
  %900 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorI5PointSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %896, i64 noundef %899) #9
  %901 = load i32, ptr %104, align 4, !tbaa !12
  %902 = sext i32 %901 to i64
  %903 = getelementptr inbounds [2 x %"class.std::vector.30"], ptr %65, i64 0, i64 %902
  %904 = load i32, ptr %109, align 4, !tbaa !12
  %905 = sext i32 %904 to i64
  %906 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorI5PointSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %903, i64 noundef %905) #9
  %907 = invoke { double, double } @_ZNK5PointplERKS_(ptr noundef nonnull align 8 dereferenceable(16) %900, ptr noundef nonnull align 8 dereferenceable(16) %906)
          to label %908 unwind label %938

908:                                              ; preds = %893
  %909 = getelementptr inbounds { double, double }, ptr %111, i32 0, i32 0
  %910 = extractvalue { double, double } %907, 0
  store double %910, ptr %909, align 8
  %911 = getelementptr inbounds { double, double }, ptr %111, i32 0, i32 1
  %912 = extractvalue { double, double } %907, 1
  store double %912, ptr %911, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %112) #9
  store double 5.000000e-01, ptr %112, align 8, !tbaa !6
  %913 = invoke { double, double } @_ZNK5PointmlERKd(ptr noundef nonnull align 8 dereferenceable(16) %111, ptr noundef nonnull align 8 dereferenceable(8) %112)
          to label %914 unwind label %942

914:                                              ; preds = %908
  %915 = getelementptr inbounds { double, double }, ptr %110, i32 0, i32 0
  %916 = extractvalue { double, double } %913, 0
  store double %916, ptr %915, align 8
  %917 = getelementptr inbounds { double, double }, ptr %110, i32 0, i32 1
  %918 = extractvalue { double, double } %913, 1
  store double %918, ptr %917, align 8
  call void @llvm.lifetime.end.p0(i64 8, ptr %112) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %111) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %113) #9
  %919 = getelementptr inbounds %struct.Line, ptr %113, i32 0, i32 0
  %920 = load ptr, ptr %106, align 8, !tbaa !20
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %919, ptr align 8 %920, i64 16, i1 false), !tbaa.struct !5
  %921 = getelementptr inbounds %struct.Line, ptr %113, i32 0, i32 1
  %922 = load ptr, ptr %106, align 8, !tbaa !20
  %923 = invoke { double, double } @_ZNK5PointmiERKS_(ptr noundef nonnull align 8 dereferenceable(16) %110, ptr noundef nonnull align 8 dereferenceable(16) %922)
          to label %924 unwind label %947

924:                                              ; preds = %914
  %925 = getelementptr inbounds { double, double }, ptr %921, i32 0, i32 0
  %926 = extractvalue { double, double } %923, 0
  store double %926, ptr %925, align 8
  %927 = getelementptr inbounds { double, double }, ptr %921, i32 0, i32 1
  %928 = extractvalue { double, double } %923, 1
  store double %928, ptr %927, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %8, ptr align 8 %113, i64 32, i1 false), !tbaa.struct !21
  call void @llvm.lifetime.end.p0(i64 32, ptr %113) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %114) #9
  store i8 1, ptr %114, align 1, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 1, ptr %115) #9
  %929 = invoke noundef zeroext i1 @_ZNK4Line22hasSegmentIntersectionERKS_RKb(ptr noundef nonnull align 8 dereferenceable(32) %4, ptr noundef nonnull align 8 dereferenceable(32) %8, ptr noundef nonnull align 1 dereferenceable(1) %114)
          to label %930 unwind label %951

930:                                              ; preds = %924
  br i1 %929, label %935, label %931

931:                                              ; preds = %930
  store i8 1, ptr %115, align 1, !tbaa !10
  %932 = invoke noundef zeroext i1 @_ZNK13ConvexPolygon22hasSegmentIntersectionERK4LineRKb(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(32) %8, ptr noundef nonnull align 1 dereferenceable(1) %115)
          to label %933 unwind label %955

933:                                              ; preds = %931
  %934 = xor i1 %932, true
  br label %935

935:                                              ; preds = %933, %930
  %936 = phi i1 [ false, %930 ], [ %934, %933 ]
  call void @llvm.lifetime.end.p0(i64 1, ptr %115) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %114) #9
  br i1 %936, label %937, label %960

937:                                              ; preds = %935
  store i32 37, ptr %13, align 4
  br label %1029

938:                                              ; preds = %893
  %939 = landingpad { ptr, i32 }
          cleanup
  %940 = extractvalue { ptr, i32 } %939, 0
  store ptr %940, ptr %6, align 8
  %941 = extractvalue { ptr, i32 } %939, 1
  store i32 %941, ptr %7, align 4
  br label %946

942:                                              ; preds = %908
  %943 = landingpad { ptr, i32 }
          cleanup
  %944 = extractvalue { ptr, i32 } %943, 0
  store ptr %944, ptr %6, align 8
  %945 = extractvalue { ptr, i32 } %943, 1
  store i32 %945, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %112) #9
  br label %946

946:                                              ; preds = %942, %938
  call void @llvm.lifetime.end.p0(i64 16, ptr %111) #9
  br label %1044

947:                                              ; preds = %914
  %948 = landingpad { ptr, i32 }
          cleanup
  %949 = extractvalue { ptr, i32 } %948, 0
  store ptr %949, ptr %6, align 8
  %950 = extractvalue { ptr, i32 } %948, 1
  store i32 %950, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %113) #9
  br label %1044

951:                                              ; preds = %924
  %952 = landingpad { ptr, i32 }
          cleanup
  %953 = extractvalue { ptr, i32 } %952, 0
  store ptr %953, ptr %6, align 8
  %954 = extractvalue { ptr, i32 } %952, 1
  store i32 %954, ptr %7, align 4
  br label %959

955:                                              ; preds = %931
  %956 = landingpad { ptr, i32 }
          cleanup
  %957 = extractvalue { ptr, i32 } %956, 0
  store ptr %957, ptr %6, align 8
  %958 = extractvalue { ptr, i32 } %956, 1
  store i32 %958, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %115) #9
  br label %959

959:                                              ; preds = %955, %951
  call void @llvm.lifetime.end.p0(i64 1, ptr %114) #9
  br label %1044

960:                                              ; preds = %935
  call void @llvm.lifetime.start.p0(i64 32, ptr %116) #9
  %961 = getelementptr inbounds %struct.Line, ptr %116, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %961, ptr align 8 %107, i64 16, i1 false), !tbaa.struct !5
  %962 = getelementptr inbounds %struct.Line, ptr %116, i32 0, i32 1
  %963 = invoke { double, double } @_ZNK5PointmiERKS_(ptr noundef nonnull align 8 dereferenceable(16) %110, ptr noundef nonnull align 8 dereferenceable(16) %107)
          to label %964 unwind label %978

964:                                              ; preds = %960
  %965 = getelementptr inbounds { double, double }, ptr %962, i32 0, i32 0
  %966 = extractvalue { double, double } %963, 0
  store double %966, ptr %965, align 8
  %967 = getelementptr inbounds { double, double }, ptr %962, i32 0, i32 1
  %968 = extractvalue { double, double } %963, 1
  store double %968, ptr %967, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %8, ptr align 8 %116, i64 32, i1 false), !tbaa.struct !21
  call void @llvm.lifetime.end.p0(i64 32, ptr %116) #9
  call void @llvm.lifetime.start.p0(i64 24, ptr %117) #9
  invoke void @_ZNK4Line9intersectERKS_(ptr dead_on_unwind writable sret(%"struct.std::pair.44") align 8 %117, ptr noundef nonnull align 8 dereferenceable(32) %4, ptr noundef nonnull align 8 dereferenceable(32) %8)
          to label %969 unwind label %982

969:                                              ; preds = %964
  %970 = getelementptr inbounds %"struct.std::pair.44", ptr %117, i32 0, i32 1
  %971 = load i8, ptr %970, align 8, !tbaa !26, !range !29, !noundef !30
  %972 = trunc i8 %971 to i1
  br i1 %972, label %973, label %977

973:                                              ; preds = %969
  %974 = getelementptr inbounds %"struct.std::pair.44", ptr %117, i32 0, i32 0
  %975 = invoke noundef zeroext i1 @_ZNK4Line15containsSegmentERK5Point(ptr noundef nonnull align 8 dereferenceable(32) %4, ptr noundef nonnull align 8 dereferenceable(16) %974)
          to label %976 unwind label %982

976:                                              ; preds = %973
  br i1 %975, label %986, label %977

977:                                              ; preds = %976, %969
  store i8 1, ptr %108, align 1, !tbaa !10
  store i32 35, ptr %13, align 4
  br label %1028

978:                                              ; preds = %960
  %979 = landingpad { ptr, i32 }
          cleanup
  %980 = extractvalue { ptr, i32 } %979, 0
  store ptr %980, ptr %6, align 8
  %981 = extractvalue { ptr, i32 } %979, 1
  store i32 %981, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %116) #9
  br label %1044

982:                                              ; preds = %973, %964
  %983 = landingpad { ptr, i32 }
          cleanup
  %984 = extractvalue { ptr, i32 } %983, 0
  store ptr %984, ptr %6, align 8
  %985 = extractvalue { ptr, i32 } %983, 1
  store i32 %985, ptr %7, align 4
  br label %1043

986:                                              ; preds = %976
  call void @llvm.lifetime.start.p0(i64 32, ptr %118) #9
  %987 = getelementptr inbounds %struct.Line, ptr %118, i32 0, i32 0
  %988 = load ptr, ptr %106, align 8, !tbaa !20
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %987, ptr align 8 %988, i64 16, i1 false), !tbaa.struct !5
  %989 = getelementptr inbounds %struct.Line, ptr %118, i32 0, i32 1
  %990 = getelementptr inbounds %"struct.std::pair.44", ptr %117, i32 0, i32 0
  %991 = load ptr, ptr %106, align 8, !tbaa !20
  %992 = invoke { double, double } @_ZNK5PointmiERKS_(ptr noundef nonnull align 8 dereferenceable(16) %990, ptr noundef nonnull align 8 dereferenceable(16) %991)
          to label %993 unwind label %1001

993:                                              ; preds = %986
  %994 = getelementptr inbounds { double, double }, ptr %989, i32 0, i32 0
  %995 = extractvalue { double, double } %992, 0
  store double %995, ptr %994, align 8
  %996 = getelementptr inbounds { double, double }, ptr %989, i32 0, i32 1
  %997 = extractvalue { double, double } %992, 1
  store double %997, ptr %996, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %8, ptr align 8 %118, i64 32, i1 false), !tbaa.struct !21
  call void @llvm.lifetime.end.p0(i64 32, ptr %118) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %119) #9
  store i8 1, ptr %119, align 1, !tbaa !10
  %998 = invoke noundef zeroext i1 @_ZNK13ConvexPolygon22hasSegmentIntersectionERK4LineRKb(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(32) %8, ptr noundef nonnull align 1 dereferenceable(1) %119)
          to label %999 unwind label %1005

999:                                              ; preds = %993
  call void @llvm.lifetime.end.p0(i64 1, ptr %119) #9
  br i1 %998, label %1000, label %1009

1000:                                             ; preds = %999
  store i8 1, ptr %108, align 1, !tbaa !10
  store i32 35, ptr %13, align 4
  br label %1028

1001:                                             ; preds = %986
  %1002 = landingpad { ptr, i32 }
          cleanup
  %1003 = extractvalue { ptr, i32 } %1002, 0
  store ptr %1003, ptr %6, align 8
  %1004 = extractvalue { ptr, i32 } %1002, 1
  store i32 %1004, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %118) #9
  br label %1043

1005:                                             ; preds = %993
  %1006 = landingpad { ptr, i32 }
          cleanup
  %1007 = extractvalue { ptr, i32 } %1006, 0
  store ptr %1007, ptr %6, align 8
  %1008 = extractvalue { ptr, i32 } %1006, 1
  store i32 %1008, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %119) #9
  br label %1043

1009:                                             ; preds = %999
  call void @llvm.lifetime.start.p0(i64 32, ptr %120) #9
  %1010 = getelementptr inbounds %struct.Line, ptr %120, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %1010, ptr align 8 %110, i64 16, i1 false), !tbaa.struct !5
  %1011 = getelementptr inbounds %struct.Line, ptr %120, i32 0, i32 1
  %1012 = getelementptr inbounds %"struct.std::pair.44", ptr %117, i32 0, i32 0
  %1013 = invoke { double, double } @_ZNK5PointmiERKS_(ptr noundef nonnull align 8 dereferenceable(16) %1012, ptr noundef nonnull align 8 dereferenceable(16) %110)
          to label %1014 unwind label %1035

1014:                                             ; preds = %1009
  %1015 = getelementptr inbounds { double, double }, ptr %1011, i32 0, i32 0
  %1016 = extractvalue { double, double } %1013, 0
  store double %1016, ptr %1015, align 8
  %1017 = getelementptr inbounds { double, double }, ptr %1011, i32 0, i32 1
  %1018 = extractvalue { double, double } %1013, 1
  store double %1018, ptr %1017, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %8, ptr align 8 %120, i64 32, i1 false), !tbaa.struct !21
  call void @llvm.lifetime.end.p0(i64 32, ptr %120) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %121) #9
  store i8 1, ptr %121, align 1, !tbaa !10
  %1019 = invoke noundef zeroext i1 @_ZNK13ConvexPolygon22hasSegmentIntersectionERK4LineRKb(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(32) %8, ptr noundef nonnull align 1 dereferenceable(1) %121)
          to label %1020 unwind label %1039

1020:                                             ; preds = %1014
  %1021 = zext i1 %1019 to i32
  %1022 = load i8, ptr %108, align 1, !tbaa !10, !range !29, !noundef !30
  %1023 = trunc i8 %1022 to i1
  %1024 = zext i1 %1023 to i32
  %1025 = or i32 %1024, %1021
  %1026 = icmp ne i32 %1025, 0
  %1027 = zext i1 %1026 to i8
  store i8 %1027, ptr %108, align 1, !tbaa !10
  call void @llvm.lifetime.end.p0(i64 1, ptr %121) #9
  store i32 0, ptr %13, align 4
  br label %1028

1028:                                             ; preds = %1020, %1000, %977
  call void @llvm.lifetime.end.p0(i64 24, ptr %117) #9
  br label %1029

1029:                                             ; preds = %1028, %937
  call void @llvm.lifetime.end.p0(i64 16, ptr %110) #9
  %1030 = load i32, ptr %13, align 4
  switch i32 %1030, label %1045 [
    i32 0, label %1031
    i32 37, label %1032
  ]

1031:                                             ; preds = %1029
  br label %1032

1032:                                             ; preds = %1031, %1029
  %1033 = load i32, ptr %109, align 4, !tbaa !12
  %1034 = add nsw i32 %1033, 1
  store i32 %1034, ptr %109, align 4, !tbaa !12
  br label %879, !llvm.loop !37

1035:                                             ; preds = %1009
  %1036 = landingpad { ptr, i32 }
          cleanup
  %1037 = extractvalue { ptr, i32 } %1036, 0
  store ptr %1037, ptr %6, align 8
  %1038 = extractvalue { ptr, i32 } %1036, 1
  store i32 %1038, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %120) #9
  br label %1043

1039:                                             ; preds = %1014
  %1040 = landingpad { ptr, i32 }
          cleanup
  %1041 = extractvalue { ptr, i32 } %1040, 0
  store ptr %1041, ptr %6, align 8
  %1042 = extractvalue { ptr, i32 } %1040, 1
  store i32 %1042, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %121) #9
  br label %1043

1043:                                             ; preds = %1039, %1035, %1005, %1001, %982
  call void @llvm.lifetime.end.p0(i64 24, ptr %117) #9
  br label %1044

1044:                                             ; preds = %1043, %978, %959, %947, %946
  call void @llvm.lifetime.end.p0(i64 16, ptr %110) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %109) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %108) #9
  br label %1058

1045:                                             ; preds = %1029, %888
  call void @llvm.lifetime.end.p0(i64 4, ptr %109) #9
  br label %1046

1046:                                             ; preds = %1045
  %1047 = load i8, ptr %108, align 1, !tbaa !10, !range !29, !noundef !30
  %1048 = trunc i8 %1047 to i1
  %1049 = xor i1 %1048, true
  %1050 = zext i1 %1049 to i32
  %1051 = load i32, ptr %104, align 4, !tbaa !12
  %1052 = shl i32 %1050, %1051
  %1053 = load i32, ptr %103, align 4, !tbaa !12
  %1054 = or i32 %1053, %1052
  store i32 %1054, ptr %103, align 4, !tbaa !12
  call void @llvm.lifetime.end.p0(i64 1, ptr %108) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %107) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %106) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %105) #9
  br label %1055

1055:                                             ; preds = %1046
  %1056 = load i32, ptr %104, align 4, !tbaa !12
  %1057 = add nsw i32 %1056, 1
  store i32 %1057, ptr %104, align 4, !tbaa !12
  br label %859, !llvm.loop !38

1058:                                             ; preds = %1044, %889
  call void @llvm.lifetime.end.p0(i64 16, ptr %107) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %106) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %105) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %104) #9
  br label %1094

1059:                                             ; preds = %862
  %1060 = load i8, ptr @debug, align 1, !tbaa !10, !range !29, !noundef !30
  %1061 = trunc i8 %1060 to i1
  br i1 %1061, label %1062, label %1070

1062:                                             ; preds = %1059
  %1063 = load i32, ptr %103, align 4, !tbaa !12
  %1064 = invoke i32 (ptr, ...) @printf(ptr noundef @.str.9, i32 noundef %1063)
          to label %1065 unwind label %1066

1065:                                             ; preds = %1062
  br label %1070

1066:                                             ; preds = %1062
  %1067 = landingpad { ptr, i32 }
          cleanup
  %1068 = extractvalue { ptr, i32 } %1067, 0
  store ptr %1068, ptr %6, align 8
  %1069 = extractvalue { ptr, i32 } %1067, 1
  store i32 %1069, ptr %7, align 4
  br label %1094

1070:                                             ; preds = %1065, %1059
  %1071 = load i32, ptr %87, align 4, !tbaa !12
  %1072 = sext i32 %1071 to i64
  %1073 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_ISt4pairIS0_IdiEiESaIS2_EESaIS4_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %85, i64 noundef %1072) #9
  call void @llvm.lifetime.start.p0(i64 24, ptr %122) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr %123) #9
  invoke void @_ZNSt4pairIdiEC2IRdRiTnNSt9enable_ifIXaaclsr5_PCCPE22_MoveConstructiblePairIT_T0_EEclsr5_PCCPE30_ImplicitlyMoveConvertiblePairIS5_S6_EEEbE4typeELb1EEEOS5_OS6_(ptr noundef nonnull align 8 dereferenceable(12) %123, ptr noundef nonnull align 8 dereferenceable(8) %91, ptr noundef nonnull align 4 dereferenceable(4) %88)
          to label %1074 unwind label %1086

1074:                                             ; preds = %1070
  invoke void @_ZNSt4pairIS_IdiEiEC2IS0_iTnNSt9enable_ifIXaaclsr5_PCCPE18_ConstructiblePairIT_T0_EEclsr5_PCCPE26_ImplicitlyConvertiblePairIS4_S5_EEEbE4typeELb1EEERKS0_RKi(ptr noundef nonnull align 8 dereferenceable(20) %122, ptr noundef nonnull align 8 dereferenceable(12) %123, ptr noundef nonnull align 4 dereferenceable(4) %103)
          to label %1075 unwind label %1086

1075:                                             ; preds = %1074
  invoke void @_ZNSt6vectorISt4pairIS0_IdiEiESaIS2_EE9push_backEOS2_(ptr noundef nonnull align 8 dereferenceable(24) %1073, ptr noundef nonnull align 8 dereferenceable(20) %122)
          to label %1076 unwind label %1086

1076:                                             ; preds = %1075
  call void @llvm.lifetime.end.p0(i64 16, ptr %123) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr %122) #9
  %1077 = load i32, ptr %88, align 4, !tbaa !12
  %1078 = sext i32 %1077 to i64
  %1079 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_ISt4pairIS0_IdiEiESaIS2_EESaIS4_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %85, i64 noundef %1078) #9
  call void @llvm.lifetime.start.p0(i64 24, ptr %124) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr %125) #9
  invoke void @_ZNSt4pairIdiEC2IRdRiTnNSt9enable_ifIXaaclsr5_PCCPE22_MoveConstructiblePairIT_T0_EEclsr5_PCCPE30_ImplicitlyMoveConvertiblePairIS5_S6_EEEbE4typeELb1EEEOS5_OS6_(ptr noundef nonnull align 8 dereferenceable(12) %125, ptr noundef nonnull align 8 dereferenceable(8) %91, ptr noundef nonnull align 4 dereferenceable(4) %87)
          to label %1080 unwind label %1090

1080:                                             ; preds = %1076
  invoke void @_ZNSt4pairIS_IdiEiEC2IS0_iTnNSt9enable_ifIXaaclsr5_PCCPE18_ConstructiblePairIT_T0_EEclsr5_PCCPE26_ImplicitlyConvertiblePairIS4_S5_EEEbE4typeELb1EEERKS0_RKi(ptr noundef nonnull align 8 dereferenceable(20) %124, ptr noundef nonnull align 8 dereferenceable(12) %125, ptr noundef nonnull align 4 dereferenceable(4) %103)
          to label %1081 unwind label %1090

1081:                                             ; preds = %1080
  invoke void @_ZNSt6vectorISt4pairIS0_IdiEiESaIS2_EE9push_backEOS2_(ptr noundef nonnull align 8 dereferenceable(24) %1079, ptr noundef nonnull align 8 dereferenceable(20) %124)
          to label %1082 unwind label %1090

1082:                                             ; preds = %1081
  call void @llvm.lifetime.end.p0(i64 16, ptr %125) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr %124) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %103) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %91) #9
  br label %1083

1083:                                             ; preds = %1082, %747
  %1084 = load i32, ptr %88, align 4, !tbaa !12
  %1085 = add nsw i32 %1084, 1
  store i32 %1085, ptr %88, align 4, !tbaa !12
  br label %722, !llvm.loop !39

1086:                                             ; preds = %1075, %1074, %1070
  %1087 = landingpad { ptr, i32 }
          cleanup
  %1088 = extractvalue { ptr, i32 } %1087, 0
  store ptr %1088, ptr %6, align 8
  %1089 = extractvalue { ptr, i32 } %1087, 1
  store i32 %1089, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %123) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr %122) #9
  br label %1094

1090:                                             ; preds = %1081, %1080, %1076
  %1091 = landingpad { ptr, i32 }
          cleanup
  %1092 = extractvalue { ptr, i32 } %1091, 0
  store ptr %1092, ptr %6, align 8
  %1093 = extractvalue { ptr, i32 } %1091, 1
  store i32 %1093, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %125) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr %124) #9
  br label %1094

1094:                                             ; preds = %1090, %1086, %1066, %1058
  call void @llvm.lifetime.end.p0(i64 4, ptr %103) #9
  br label %1095

1095:                                             ; preds = %1094, %847, %822, %818, %772, %768
  call void @llvm.lifetime.end.p0(i64 8, ptr %91) #9
  br label %1096

1096:                                             ; preds = %1095, %752, %748
  call void @llvm.lifetime.end.p0(i64 4, ptr %88) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %87) #9
  br label %1173

1097:                                             ; preds = %726
  br label %1098

1098:                                             ; preds = %1097
  %1099 = load i32, ptr %87, align 4, !tbaa !12
  %1100 = add nsw i32 %1099, 1
  store i32 %1100, ptr %87, align 4, !tbaa !12
  br label %710, !llvm.loop !40

1101:                                             ; preds = %714
  call void @llvm.lifetime.start.p0(i64 24, ptr %126) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %127) #9
  store i32 0, ptr %127, align 4, !tbaa !12
  br label %1102

1102:                                             ; preds = %1136, %1101
  %1103 = load i32, ptr %127, align 4, !tbaa !12
  %1104 = icmp slt i32 %1103, 3
  br i1 %1104, label %1106, label %1105

1105:                                             ; preds = %1102
  store i32 38, ptr %13, align 4
  br label %1139

1106:                                             ; preds = %1102
  %1107 = load i32, ptr %73, align 4, !tbaa !12
  %1108 = load i32, ptr %78, align 4, !tbaa !12
  %1109 = load i32, ptr %127, align 4, !tbaa !12
  %1110 = add nsw i32 %1109, 1
  %1111 = invoke noundef double @_Z10getMinDistRKSt6vectorIS_ISt4pairIS0_IdiEiESaIS2_EESaIS4_EEiii(ptr noundef nonnull align 8 dereferenceable(24) %85, i32 noundef %1107, i32 noundef %1108, i32 noundef %1110)
          to label %1112 unwind label %1127

1112:                                             ; preds = %1106
  %1113 = load i32, ptr %127, align 4, !tbaa !12
  %1114 = sext i32 %1113 to i64
  %1115 = getelementptr inbounds [3 x double], ptr %126, i64 0, i64 %1114
  store double %1111, ptr %1115, align 8, !tbaa !6
  call void @llvm.lifetime.start.p0(i64 8, ptr %128) #9
  %1116 = load i32, ptr %127, align 4, !tbaa !12
  %1117 = sext i32 %1116 to i64
  %1118 = getelementptr inbounds [3 x double], ptr %126, i64 0, i64 %1117
  %1119 = load double, ptr %1118, align 8, !tbaa !6
  %1120 = fsub double %1119, 1.000000e+10
  store double %1120, ptr %128, align 8, !tbaa !6
  %1121 = invoke noundef i32 @_Z3sgnRKd(ptr noundef nonnull align 8 dereferenceable(8) %128)
          to label %1122 unwind label %1131

1122:                                             ; preds = %1112
  %1123 = icmp sge i32 %1121, 0
  call void @llvm.lifetime.end.p0(i64 8, ptr %128) #9
  br i1 %1123, label %1124, label %1135

1124:                                             ; preds = %1122
  %1125 = invoke i32 @puts(ptr noundef @.str.2)
          to label %1126 unwind label %1127

1126:                                             ; preds = %1124
  store i32 1, ptr %13, align 4
  br label %1139

1127:                                             ; preds = %1124, %1106
  %1128 = landingpad { ptr, i32 }
          cleanup
  %1129 = extractvalue { ptr, i32 } %1128, 0
  store ptr %1129, ptr %6, align 8
  %1130 = extractvalue { ptr, i32 } %1128, 1
  store i32 %1130, ptr %7, align 4
  br label %1141

1131:                                             ; preds = %1112
  %1132 = landingpad { ptr, i32 }
          cleanup
  %1133 = extractvalue { ptr, i32 } %1132, 0
  store ptr %1133, ptr %6, align 8
  %1134 = extractvalue { ptr, i32 } %1132, 1
  store i32 %1134, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %128) #9
  br label %1141

1135:                                             ; preds = %1122
  br label %1136

1136:                                             ; preds = %1135
  %1137 = load i32, ptr %127, align 4, !tbaa !12
  %1138 = add nsw i32 %1137, 1
  store i32 %1138, ptr %127, align 4, !tbaa !12
  br label %1102, !llvm.loop !41

1139:                                             ; preds = %1126, %1105
  call void @llvm.lifetime.end.p0(i64 4, ptr %127) #9
  %1140 = load i32, ptr %13, align 4
  switch i32 %1140, label %1157 [
    i32 38, label %1142
  ]

1141:                                             ; preds = %1131, %1127
  call void @llvm.lifetime.end.p0(i64 4, ptr %127) #9
  br label %1172

1142:                                             ; preds = %1139
  call void @llvm.lifetime.start.p0(i64 8, ptr %129) #9
  %1143 = getelementptr inbounds [3 x double], ptr %126, i64 0, i64 0
  %1144 = load double, ptr %1143, align 16, !tbaa !6
  %1145 = getelementptr inbounds [3 x double], ptr %126, i64 0, i64 1
  %1146 = load double, ptr %1145, align 8, !tbaa !6
  %1147 = fadd double %1144, %1146
  %1148 = load i32, ptr %1, align 4, !tbaa !12
  %1149 = load i32, ptr %1, align 4, !tbaa !12
  %1150 = add nsw i32 %1148, %1149
  %1151 = sub nsw i32 %1150, 3
  %1152 = sitofp i32 %1151 to double
  %1153 = getelementptr inbounds [3 x double], ptr %126, i64 0, i64 2
  %1154 = load double, ptr %1153, align 16, !tbaa !6
  %1155 = call double @llvm.fmuladd.f64(double %1152, double %1154, double %1147)
  store double %1155, ptr %129, align 8, !tbaa !6
  call void @llvm.lifetime.start.p0(i64 1, ptr %130) #9
  store i8 10, ptr %130, align 1, !tbaa !14
  invoke void @_Z7writeDBRKdRKc(ptr noundef nonnull align 8 dereferenceable(8) %129, ptr noundef nonnull align 1 dereferenceable(1) %130)
          to label %1156 unwind label %1168

1156:                                             ; preds = %1142
  call void @llvm.lifetime.end.p0(i64 1, ptr %130) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %129) #9
  store i32 0, ptr %13, align 4
  br label %1157

1157:                                             ; preds = %1156, %1139
  call void @llvm.lifetime.end.p0(i64 24, ptr %126) #9
  call void @_ZNSt6vectorIS_ISt4pairIS0_IdiEiESaIS2_EESaIS4_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %85) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr %85) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %78) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %73) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %72) #9
  %1158 = getelementptr inbounds [2 x %"class.std::vector.30"], ptr %65, i32 0, i32 0
  %1159 = getelementptr inbounds %"class.std::vector.30", ptr %1158, i64 2
  br label %1160

1160:                                             ; preds = %1160, %1157
  %1161 = phi ptr [ %1159, %1157 ], [ %1162, %1160 ]
  %1162 = getelementptr inbounds %"class.std::vector.30", ptr %1161, i64 -1
  call void @_ZNSt6vectorI5PointSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %1162) #9
  %1163 = icmp eq ptr %1162, %1158
  br i1 %1163, label %1164, label %1160

1164:                                             ; preds = %1160
  call void @llvm.lifetime.end.p0(i64 48, ptr %65) #9
  call void @_ZNSt6vectorI5PointSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %64) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr %64) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %63) #9
  call void @_ZNSt6vectorISt4pairI4LineiESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %46) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr %46) #9
  call void @_ZNSt6vectorI5PointSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %42) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr %42) #9
  br label %1165

1165:                                             ; preds = %1164, %394, %378, %163
  call void @llvm.lifetime.end.p0(i64 32, ptr %8) #9
  call void @_ZN13ConvexPolygonD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %5) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr %5) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %4) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %3) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %2) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %1) #9
  %1166 = load i32, ptr %13, align 4
  switch i32 %1166, label %1194 [
    i32 0, label %1167
    i32 1, label %1167
  ]

1167:                                             ; preds = %1165, %1165
  ret void

1168:                                             ; preds = %1142
  %1169 = landingpad { ptr, i32 }
          cleanup
  %1170 = extractvalue { ptr, i32 } %1169, 0
  store ptr %1170, ptr %6, align 8
  %1171 = extractvalue { ptr, i32 } %1169, 1
  store i32 %1171, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %130) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %129) #9
  br label %1172

1172:                                             ; preds = %1168, %1141
  call void @llvm.lifetime.end.p0(i64 24, ptr %126) #9
  br label %1173

1173:                                             ; preds = %1172, %1096
  call void @_ZNSt6vectorIS_ISt4pairIS0_IdiEiESaIS2_EESaIS4_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %85) #9
  br label %1174

1174:                                             ; preds = %1173, %715
  call void @llvm.lifetime.end.p0(i64 24, ptr %85) #9
  br label %1175

1175:                                             ; preds = %1174, %704, %651, %647
  call void @llvm.lifetime.end.p0(i64 4, ptr %78) #9
  br label %1176

1176:                                             ; preds = %1175, %643
  call void @llvm.lifetime.end.p0(i64 4, ptr %73) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %72) #9
  br label %1177

1177:                                             ; preds = %1176, %639, %587
  %1178 = getelementptr inbounds [2 x %"class.std::vector.30"], ptr %65, i32 0, i32 0
  %1179 = getelementptr inbounds %"class.std::vector.30", ptr %1178, i64 2
  br label %1180

1180:                                             ; preds = %1180, %1177
  %1181 = phi ptr [ %1179, %1177 ], [ %1182, %1180 ]
  %1182 = getelementptr inbounds %"class.std::vector.30", ptr %1181, i64 -1
  call void @_ZNSt6vectorI5PointSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %1182) #9
  %1183 = icmp eq ptr %1182, %1178
  br i1 %1183, label %1184, label %1180

1184:                                             ; preds = %1180
  call void @llvm.lifetime.end.p0(i64 48, ptr %65) #9
  call void @_ZNSt6vectorI5PointSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %64) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr %64) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %63) #9
  br label %1185

1185:                                             ; preds = %1184, %526
  call void @_ZNSt6vectorISt4pairI4LineiESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %46) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr %46) #9
  call void @_ZNSt6vectorI5PointSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %42) #9
  br label %1186

1186:                                             ; preds = %1185, %417
  call void @llvm.lifetime.end.p0(i64 24, ptr %42) #9
  br label %1187

1187:                                             ; preds = %1186, %403, %383, %189, %180, %168
  call void @llvm.lifetime.end.p0(i64 32, ptr %8) #9
  br label %1188

1188:                                             ; preds = %1187, %164
  call void @_ZN13ConvexPolygonD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %5) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr %5) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %4) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %3) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %2) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %1) #9
  br label %1189

1189:                                             ; preds = %1188
  %1190 = load ptr, ptr %6, align 8
  %1191 = load i32, ptr %7, align 4
  %1192 = insertvalue { ptr, i32 } poison, ptr %1190, 0
  %1193 = insertvalue { ptr, i32 } %1192, i32 %1191, 1
  resume { ptr, i32 } %1193

1194:                                             ; preds = %1165
  unreachable
}

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

declare i32 @__isoc99_scanf(ptr noundef, ...) #2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN4Line4readEv(ptr noundef nonnull align 8 dereferenceable(32)) #0 align 2

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

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #5

; Function Attrs: mustprogress nounwind uwtable
declare dso_local { double, double } @_ZNK5PointmiERKS_(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(16)) #6 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK4Line22hasSegmentIntersectionERKS_RKb(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(1)) #0 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK13ConvexPolygon22hasSegmentIntersectionERK4LineRKb(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(1)) #0 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef double @_ZNK5Point3lenEv(ptr noundef nonnull align 8 dereferenceable(16)) #0 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local { double, double } @_ZNK5PointplERKS_(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(16)) #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSaI5PointEC2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #6 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt6vectorI5PointSaIS0_EEC2ESt16initializer_listIS0_ERKS1_(ptr noundef nonnull align 8 dereferenceable(24), ptr, i64, ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #0 align 2

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

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

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSaISt6vectorISt4pairIS0_IdiEiESaIS2_EEEC2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #6 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt6vectorIS_ISt4pairIS0_IdiEiESaIS2_EESaIS4_EEC2EmRKS5_(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef, ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #0 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorI5PointSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) #6 align 2

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

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

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

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

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

declare i32 @puts(ptr noundef) #2

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK4Line21containsLeftHalfPlaneERK5PointRKb(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 1 dereferenceable(1)) #6 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local { double, double } @_ZNK4Line7reflectERK5Point(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) #0 align 2

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(36) ptr @_ZNSt6vectorISt4pairI4LineiESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) #6 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNK4Line9intersectERKS_(ptr dead_on_unwind noalias writable sret(%"struct.std::pair.44") align 8, ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32)) #0 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_Z13sortAndUniqueI5PointEvRSt6vectorIT_SaIS2_EE(ptr noundef nonnull align 8 dereferenceable(24)) #3

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local ptr @_ZSt11lower_boundIN9__gnu_cxx17__normal_iteratorIP5PointSt6vectorIS2_SaIS2_EEEES2_ET_S8_S8_RKT0_(ptr, ptr, ptr noundef nonnull align 8 dereferenceable(16)) #3

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK5PointeqERKS_(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(16)) #6 align 2

; Function Attrs: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) #7

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

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK4Line15containsSegmentERK5Point(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) #6 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local { double, double } @_ZNK5PointmlERKd(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(8)) #6 align 2

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare double @llvm.fmuladd.f64(double, double, double) #8

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt15__new_allocatorI5PointED2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt15__new_allocatorISt6vectorISt4pairIS1_IdiEiESaIS3_EEED2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #6 align 2

attributes #0 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { inlinehint mustprogress 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 = { 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 #5 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #6 = { 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 #7 = { noreturn nounwind "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 #8 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #9 = { nounwind }
attributes #10 = { noreturn 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 = !{i64 0, i64 8, !6, i64 8, i64 8, !6}
!6 = !{!7, !7, i64 0}
!7 = !{!"double", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!11, !11, i64 0}
!11 = !{!"bool", !8, i64 0}
!12 = !{!13, !13, i64 0}
!13 = !{!"int", !8, i64 0}
!14 = !{!8, !8, i64 0}
!15 = !{!16, !17, i64 0}
!16 = !{!"_ZTSSt16initializer_listI5PointE", !17, i64 0, !18, i64 8}
!17 = !{!"any pointer", !8, i64 0}
!18 = !{!"long", !8, i64 0}
!19 = !{!16, !18, i64 8}
!20 = !{!17, !17, i64 0}
!21 = !{i64 0, i64 8, !6, i64 8, i64 8, !6, i64 16, i64 8, !6, i64 24, i64 8, !6}
!22 = distinct !{!22, !23}
!23 = !{!"llvm.loop.mustprogress"}
!24 = distinct !{!24, !23}
!25 = distinct !{!25, !23}
!26 = !{!27, !11, i64 16}
!27 = !{!"_ZTSSt4pairI5PointbE", !28, i64 0, !11, i64 16}
!28 = !{!"_ZTS5Point", !7, i64 0, !7, i64 8}
!29 = !{i8 0, i8 2}
!30 = !{}
!31 = distinct !{!31, !23}
!32 = distinct !{!32, !23}
!33 = distinct !{!33, !23}
!34 = !{!35, !13, i64 32}
!35 = !{!"_ZTSSt4pairI4LineiE", !36, i64 0, !13, i64 32}
!36 = !{!"_ZTS4Line", !28, i64 0, !28, i64 16}
!37 = distinct !{!37, !23}
!38 = distinct !{!38, !23}
!39 = distinct !{!39, !23}
!40 = distinct !{!40, !23}
!41 = distinct !{!41, !23}


; 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.Point = type { double, double }
%struct.Line = type { %struct.Point, %struct.Point }
%struct.ConvexPolygon = type { %"class.std::vector.25" }
%"class.std::vector.25" = type { %"struct.std::_Vector_base.26" }
%"struct.std::_Vector_base.26" = type { %"struct.std::_Vector_base<Line, std::allocator<Line>>::_Vector_impl" }
%"struct.std::_Vector_base<Line, std::allocator<Line>>::_Vector_impl" = type { %"struct.std::_Vector_base<Line, std::allocator<Line>>::_Vector_impl_data" }
%"struct.std::_Vector_base<Line, std::allocator<Line>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.30" = type { %"struct.std::_Vector_base.31" }
%"struct.std::_Vector_base.31" = type { %"struct.std::_Vector_base<Point, std::allocator<Point>>::_Vector_impl" }
%"struct.std::_Vector_base<Point, std::allocator<Point>>::_Vector_impl" = type { %"struct.std::_Vector_base<Point, std::allocator<Point>>::_Vector_impl_data" }
%"struct.std::_Vector_base<Point, std::allocator<Point>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::allocator.32" = type { i8 }
%"class.__gnu_cxx::__normal_iterator.35" = type { ptr }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<std::vector<std::pair<std::pair<double, int>, int>>, std::allocator<std::vector<std::pair<std::pair<double, int>, int>>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::vector<std::pair<std::pair<double, int>, int>>, std::allocator<std::vector<std::pair<std::pair<double, int>, int>>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::vector<std::pair<std::pair<double, int>, int>>, std::allocator<std::vector<std::pair<std::pair<double, int>, int>>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::vector<std::pair<std::pair<double, int>, int>>, std::allocator<std::vector<std::pair<std::pair<double, int>, int>>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::allocator" = type { i8 }
%"struct.std::pair.22" = type { %"struct.std::pair", i32, [4 x i8] }
%"struct.std::pair" = type <{ double, i32, [4 x i8] }>
%"class.std::vector.36" = type { %"struct.std::_Vector_base.37" }
%"struct.std::_Vector_base.37" = type { %"struct.std::_Vector_base<std::pair<Line, int>, std::allocator<std::pair<Line, int>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::pair<Line, int>, std::allocator<std::pair<Line, int>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::pair<Line, int>, std::allocator<std::pair<Line, int>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::pair<Line, int>, std::allocator<std::pair<Line, int>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.std::pair.41" = type <{ %struct.Line, i32, [4 x i8] }>
%"struct.std::pair.44" = type <{ %struct.Point, i8, [7 x i8] }>
%"class.__gnu_cxx::__normal_iterator.47" = type { ptr }
%"class.__gnu_cxx::__normal_iterator.48" = type { ptr }

@debug = external dso_local local_unnamed_addr global i8, align 1
@.str.1 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [62 x i8], align 1
@__PRETTY_FUNCTION__._Z5solvev = external hidden unnamed_addr constant [13 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [9 x i8], align 1

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

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

declare i32 @__gxx_personality_v0(...)

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

; Function Attrs: nofree nounwind
declare noundef i32 @printf(ptr nocapture noundef readonly, ...) local_unnamed_addr #2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_Z7writeDBRKdRKc(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 1 dereferenceable(1)) local_unnamed_addr #3

; Function Attrs: mustprogress uwtable
define dso_local void @_Z5solvev() local_unnamed_addr #0 personality ptr @__gxx_personality_v0 {
  %1 = alloca i32, align 4
  %2 = alloca %struct.Point, align 8
  %3 = alloca %struct.Point, align 8
  %4 = alloca %struct.Line, align 8
  %5 = alloca %struct.ConvexPolygon, align 8
  %6 = alloca %struct.Line, align 8
  %7 = alloca i8, align 1
  %8 = alloca i8, align 1
  %9 = alloca double, align 8
  %10 = alloca i8, align 1
  %11 = alloca %"class.std::vector.30", align 8
  %12 = alloca [4 x %struct.Point], align 8
  %13 = alloca %"class.std::allocator.32", align 1
  %14 = alloca %"class.__gnu_cxx::__normal_iterator.35", align 8
  %15 = alloca %"class.__gnu_cxx::__normal_iterator.35", align 8
  %16 = alloca %"class.std::vector", align 8
  %17 = alloca %"class.std::allocator", align 1
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %.sroa.099 = alloca %struct.Point, align 8
  %20 = alloca i8, align 1
  %21 = alloca i8, align 1
  %22 = alloca double, align 8
  %23 = alloca %"struct.std::pair.22", align 8
  %24 = alloca %"struct.std::pair", align 8
  %25 = alloca i32, align 4
  %26 = alloca %"struct.std::pair.22", align 8
  %27 = alloca %"struct.std::pair", align 8
  %28 = alloca i32, align 4
  %29 = alloca double, align 8
  %30 = alloca double, align 8
  %31 = alloca i8, align 1
  %32 = alloca i8, align 1
  %33 = alloca i8, align 1
  %34 = alloca %"class.std::vector.30", align 8
  %35 = alloca [2 x %struct.Point], align 8
  %36 = alloca %"class.std::allocator.32", align 1
  %37 = alloca %"class.std::vector.36", align 8
  %38 = alloca i32, align 4
  %39 = alloca %struct.Point, align 8
  %40 = alloca %"class.__gnu_cxx::__normal_iterator.35", align 8
  %41 = alloca %"class.__gnu_cxx::__normal_iterator.35", align 8
  %42 = alloca %"struct.std::pair.41", align 8
  %43 = alloca %struct.Line, align 8
  %44 = alloca %"struct.std::pair.41", align 8
  %45 = alloca %struct.Line, align 8
  %46 = alloca %"struct.std::pair.41", align 8
  %47 = alloca %struct.Line, align 8
  %48 = alloca %"struct.std::pair.41", align 8
  %49 = alloca %struct.Line, align 8
  %50 = alloca %struct.Point, align 8
  %51 = alloca %"class.std::vector.30", align 8
  %52 = alloca [2 x %"class.std::vector.30"], align 16
  %53 = alloca %"struct.std::pair.44", align 8
  %54 = alloca i8, align 1
  %55 = alloca %"class.__gnu_cxx::__normal_iterator.47", align 8
  %56 = alloca %"class.__gnu_cxx::__normal_iterator.47", align 8
  %57 = alloca %"class.__gnu_cxx::__normal_iterator.47", align 8
  %58 = alloca %"class.__gnu_cxx::__normal_iterator.47", align 8
  %59 = alloca i8, align 1
  %60 = alloca %"class.std::vector", align 8
  %61 = alloca %"class.std::allocator", align 1
  %62 = alloca i32, align 4
  %63 = alloca i32, align 4
  %.sroa.053 = alloca %struct.Point, align 8
  %64 = alloca i8, align 1
  %65 = alloca double, align 8
  %66 = alloca i8, align 1
  %67 = alloca [2 x %struct.Point], align 8
  %68 = alloca [2 x %struct.Point], align 8
  %69 = alloca %"class.__gnu_cxx::__normal_iterator.48", align 8
  %70 = alloca %"class.__gnu_cxx::__normal_iterator.48", align 8
  %71 = alloca %"struct.std::pair.44", align 8
  %72 = alloca i32, align 4
  %73 = alloca %struct.Point, align 8
  %74 = alloca %struct.Point, align 8
  %75 = alloca %struct.Point, align 8
  %76 = alloca double, align 8
  %.sroa.023 = alloca %struct.Point, align 8
  %77 = alloca i8, align 1
  %78 = alloca i8, align 1
  %.sroa.020 = alloca %struct.Point, align 8
  %79 = alloca %"struct.std::pair.44", align 8
  %.sroa.017 = alloca %struct.Point, align 8
  %80 = alloca i8, align 1
  %.sroa.0 = alloca %struct.Point, align 8
  %81 = alloca i8, align 1
  %82 = alloca %"struct.std::pair.22", align 8
  %83 = alloca %"struct.std::pair", align 8
  %84 = alloca %"struct.std::pair.22", align 8
  %85 = alloca %"struct.std::pair", align 8
  %86 = alloca double, align 8
  %87 = alloca double, align 8
  %88 = alloca i8, align 1
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %1) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %2) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %3) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %4) #9
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %5) #9
  call void @_ZN13ConvexPolygonC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %5) #9
  %89 = call i32 (ptr, ...) @__isoc99_scanf(ptr noundef nonnull @.str.1, ptr noundef nonnull %1)
  invoke void @_ZN5Point4readEv(ptr noundef nonnull align 8 dereferenceable(16) %2)
          to label %90 unwind label %113

90:                                               ; preds = %0
  invoke void @_ZN5Point4readEv(ptr noundef nonnull align 8 dereferenceable(16) %3)
          to label %91 unwind label %113

91:                                               ; preds = %90
  invoke void @_ZN4Line4readEv(ptr noundef nonnull align 8 dereferenceable(32) %4)
          to label %92 unwind label %113

92:                                               ; preds = %91
  invoke void @_ZN13ConvexPolygon4readEi(ptr noundef nonnull align 8 dereferenceable(24) %5, i32 noundef 3)
          to label %93 unwind label %113

93:                                               ; preds = %92
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %6) #9
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %6, ptr noundef nonnull align 8 dereferenceable(16) %2, i64 16, i1 false), !tbaa.struct !5
  %94 = getelementptr inbounds i8, ptr %6, i64 16
  %95 = call { double, double } @_ZNK5PointmiERKS_(ptr noundef nonnull align 8 dereferenceable(16) %3, ptr noundef nonnull align 8 dereferenceable(16) %2)
  %96 = extractvalue { double, double } %95, 0
  store double %96, ptr %94, align 8
  %97 = getelementptr inbounds i8, ptr %6, i64 24
  %98 = extractvalue { double, double } %95, 1
  store double %98, ptr %97, align 8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %7) #9
  store i8 1, ptr %7, align 1, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %8) #9
  %99 = invoke noundef zeroext i1 @_ZNK4Line22hasSegmentIntersectionERKS_RKb(ptr noundef nonnull align 8 dereferenceable(32) %4, ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull align 1 dereferenceable(1) %7)
          to label %100 unwind label %115

100:                                              ; preds = %93
  br i1 %99, label %.critedge, label %101

101:                                              ; preds = %100
  store i8 1, ptr %8, align 1, !tbaa !10
  %102 = invoke noundef zeroext i1 @_ZNK13ConvexPolygon22hasSegmentIntersectionERK4LineRKb(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull align 1 dereferenceable(1) %8)
          to label %103 unwind label %117

103:                                              ; preds = %101
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %8) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %7) #9
  br i1 %102, label %125, label %104

104:                                              ; preds = %103
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %9) #9
  %105 = invoke noundef double @_ZNK5Point3lenEv(ptr noundef nonnull align 8 dereferenceable(16) %94)
          to label %106 unwind label %120

106:                                              ; preds = %104
  %107 = load i32, ptr %1, align 4, !tbaa !12
  %108 = shl nsw i32 %107, 1
  %109 = add nsw i32 %108, -1
  %110 = sitofp i32 %109 to double
  %111 = fmul double %105, %110
  store double %111, ptr %9, align 8, !tbaa !6
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %10) #9
  store i8 10, ptr %10, align 1, !tbaa !14
  invoke void @_Z7writeDBRKdRKc(ptr noundef nonnull align 8 dereferenceable(8) %9, ptr noundef nonnull align 1 dereferenceable(1) %10)
          to label %112 unwind label %122

112:                                              ; preds = %106
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %10) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #9
  br label %616

113:                                              ; preds = %92, %91, %90, %0
  %114 = landingpad { ptr, i32 }
          cleanup
  br label %626

115:                                              ; preds = %93
  %116 = landingpad { ptr, i32 }
          cleanup
  br label %119

117:                                              ; preds = %101
  %118 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %8) #9
  br label %119

119:                                              ; preds = %117, %115
  %.pn = phi { ptr, i32 } [ %118, %117 ], [ %116, %115 ]
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %7) #9
  br label %625

120:                                              ; preds = %104
  %121 = landingpad { ptr, i32 }
          cleanup
  br label %124

122:                                              ; preds = %106
  %123 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %10) #9
  br label %124

124:                                              ; preds = %122, %120
  %.pn166 = phi { ptr, i32 } [ %123, %122 ], [ %121, %120 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #9
  br label %625

.critedge:                                        ; preds = %100
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %8) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %7) #9
  br label %125

125:                                              ; preds = %.critedge, %103
  %126 = load i32, ptr %1, align 4, !tbaa !12
  %127 = icmp eq i32 %126, 1
  br i1 %127, label %128, label %220

128:                                              ; preds = %125
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %11) #9
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %12) #9
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %12, ptr noundef nonnull align 8 dereferenceable(16) %2, i64 16, i1 false), !tbaa.struct !5
  %129 = getelementptr inbounds i8, ptr %12, i64 16
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %129, ptr noundef nonnull align 8 dereferenceable(16) %3, i64 16, i1 false), !tbaa.struct !5
  %130 = getelementptr inbounds i8, ptr %12, i64 32
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %130, ptr noundef nonnull align 8 dereferenceable(16) %4, i64 16, i1 false), !tbaa.struct !5
  %131 = getelementptr inbounds i8, ptr %12, i64 48
  %132 = getelementptr inbounds i8, ptr %4, i64 16
  %133 = call { double, double } @_ZNK5PointplERKS_(ptr noundef nonnull align 8 dereferenceable(16) %4, ptr noundef nonnull align 8 dereferenceable(16) %132)
  %134 = extractvalue { double, double } %133, 0
  store double %134, ptr %131, align 8
  %135 = getelementptr inbounds i8, ptr %12, i64 56
  %136 = extractvalue { double, double } %133, 1
  store double %136, ptr %135, align 8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %13) #9
  call void @_ZNSaI5PointEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %13) #9
  invoke void @_ZNSt6vectorI5PointSaIS0_EEC2ESt16initializer_listIS0_ERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %11, ptr nonnull %12, i64 4, ptr noundef nonnull align 1 dereferenceable(1) %13)
          to label %137 unwind label %144

137:                                              ; preds = %128
  call void @_ZNSt15__new_allocatorI5PointED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %13) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %13) #9
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %12) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %14) #9
  %138 = call ptr @_ZNSt6vectorI4LineSaIS0_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %5) #9
  store ptr %138, ptr %14, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %15) #9
  %139 = call ptr @_ZNSt6vectorI4LineSaIS0_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %5) #9
  store ptr %139, ptr %15, align 8
  %140 = call noundef zeroext i1 @_ZN9__gnu_cxxneIP4LineSt6vectorIS1_SaIS1_EEEEbRKNS_17__normal_iteratorIT_T0_EESB_(ptr noundef nonnull align 8 dereferenceable(8) %14, ptr noundef nonnull align 8 dereferenceable(8) %15) #9
  br i1 %140, label %.lr.ph258, label %._crit_edge259

._crit_edge259:                                   ; preds = %147, %137
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #9
  %141 = call noundef i64 @_ZNKSt6vectorI5PointSaIS0_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %11) #9
  %142 = trunc i64 %141 to i32
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %16) #9
  %sext198 = shl i64 %141, 32
  %143 = ashr exact i64 %sext198, 32
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %17) #9
  call void @_ZNSaISt6vectorISt4pairIS0_IdiEiESaIS2_EEEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %17) #9
  invoke void @_ZNSt6vectorIS_ISt4pairIS0_IdiEiESaIS2_EESaIS4_EEC2EmRKS5_(ptr noundef nonnull align 8 dereferenceable(24) %16, i64 noundef %143, ptr noundef nonnull align 1 dereferenceable(1) %17)
          to label %152 unwind label %155

144:                                              ; preds = %128
  %145 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorI5PointED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %13) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %13) #9
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %12) #9
  br label %219

.lr.ph258:                                        ; preds = %137, %147
  %146 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNK9__gnu_cxx17__normal_iteratorIP4LineSt6vectorIS1_SaIS1_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %14) #9
  invoke void @_ZNSt6vectorI5PointSaIS0_EE9push_backERKS0_(ptr noundef nonnull align 8 dereferenceable(24) %11, ptr noundef nonnull align 8 dereferenceable(16) %146)
          to label %147 unwind label %150

147:                                              ; preds = %.lr.ph258
  %148 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIP4LineSt6vectorIS1_SaIS1_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %14) #9
  %149 = call noundef zeroext i1 @_ZN9__gnu_cxxneIP4LineSt6vectorIS1_SaIS1_EEEEbRKNS_17__normal_iteratorIT_T0_EESB_(ptr noundef nonnull align 8 dereferenceable(8) %14, ptr noundef nonnull align 8 dereferenceable(8) %15) #9
  br i1 %149, label %.lr.ph258, label %._crit_edge259

150:                                              ; preds = %.lr.ph258
  %151 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #9
  br label %218

152:                                              ; preds = %._crit_edge259
  call void @_ZNSt15__new_allocatorISt6vectorISt4pairIS1_IdiEiESaIS3_EEED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %17) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %17) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %18) #9
  store i32 0, ptr %18, align 4, !tbaa !12
  %153 = icmp sgt i32 %142, 0
  br i1 %153, label %.lr.ph266, label %._crit_edge267

._crit_edge267:                                   ; preds = %._crit_edge264, %152
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %18) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %29) #9
  %154 = invoke noundef double @_Z10getMinDistRKSt6vectorIS_ISt4pairIS0_IdiEiESaIS2_EESaIS4_EEiii(ptr noundef nonnull align 8 dereferenceable(24) %16, i32 noundef 0, i32 noundef 1, i32 noundef 0)
          to label %202 unwind label %208

155:                                              ; preds = %._crit_edge259
  %156 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorISt6vectorISt4pairIS1_IdiEiESaIS3_EEED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %17) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %17) #9
  br label %217

.lr.ph266:                                        ; preds = %152, %._crit_edge264
  %storemerge202.in260 = phi i32 [ %.pre-phi, %._crit_edge264 ], [ 0, %152 ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %19) #9
  %storemerge202261 = add nsw i32 %storemerge202.in260, 1
  store i32 %storemerge202261, ptr %19, align 4, !tbaa !12
  %157 = icmp slt i32 %storemerge202261, %142
  br i1 %157, label %.lr.ph263, label %._crit_edge264

._crit_edge264.loopexit:                          ; preds = %199
  %.pre314 = load i32, ptr %18, align 4, !tbaa !12
  %.pre315 = add nsw i32 %.pre314, 1
  br label %._crit_edge264

._crit_edge264:                                   ; preds = %._crit_edge264.loopexit, %.lr.ph266
  %.pre-phi = phi i32 [ %.pre315, %._crit_edge264.loopexit ], [ %storemerge202261, %.lr.ph266 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %19) #9
  store i32 %.pre-phi, ptr %18, align 4, !tbaa !12
  %158 = icmp slt i32 %.pre-phi, %142
  br i1 %158, label %.lr.ph266, label %._crit_edge267, !llvm.loop !15

.lr.ph263:                                        ; preds = %.lr.ph266, %199
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %.sroa.099)
  %159 = load i32, ptr %18, align 4, !tbaa !12
  %160 = sext i32 %159 to i64
  %161 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorI5PointSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %11, i64 noundef %160) #9
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %.sroa.099, ptr noundef nonnull align 8 dereferenceable(16) %161, i64 16, i1 false), !tbaa.struct !5
  %162 = load i32, ptr %19, align 4, !tbaa !12
  %163 = sext i32 %162 to i64
  %164 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorI5PointSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %11, i64 noundef %163) #9
  %165 = load i32, ptr %18, align 4, !tbaa !12
  %166 = sext i32 %165 to i64
  %167 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorI5PointSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %11, i64 noundef %166) #9
  %168 = call { double, double } @_ZNK5PointmiERKS_(ptr noundef nonnull align 8 dereferenceable(16) %164, ptr noundef nonnull align 8 dereferenceable(16) %167)
  %169 = extractvalue { double, double } %168, 0
  %170 = extractvalue { double, double } %168, 1
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %6, ptr noundef nonnull align 8 dereferenceable(16) %.sroa.099, i64 16, i1 false), !tbaa.struct !17
  store double %169, ptr %94, align 8, !tbaa !6
  store double %170, ptr %97, align 8, !tbaa !6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %.sroa.099)
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %20) #9
  store i8 1, ptr %20, align 1, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %21) #9
  %171 = invoke noundef zeroext i1 @_ZNK4Line22hasSegmentIntersectionERKS_RKb(ptr noundef nonnull align 8 dereferenceable(32) %4, ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull align 1 dereferenceable(1) %20)
          to label %172 unwind label %187

172:                                              ; preds = %.lr.ph263
  br i1 %171, label %.critedge2, label %173

173:                                              ; preds = %172
  store i8 1, ptr %21, align 1, !tbaa !10
  %174 = invoke noundef zeroext i1 @_ZNK13ConvexPolygon22hasSegmentIntersectionERK4LineRKb(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull align 1 dereferenceable(1) %21)
          to label %175 unwind label %189

175:                                              ; preds = %173
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %21) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %20) #9
  br i1 %174, label %199, label %176

176:                                              ; preds = %175
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %22) #9
  %177 = invoke noundef double @_ZNK5Point3lenEv(ptr noundef nonnull align 8 dereferenceable(16) %94)
          to label %178 unwind label %192

178:                                              ; preds = %176
  store double %177, ptr %22, align 8, !tbaa !6
  %179 = load i32, ptr %18, align 4, !tbaa !12
  %180 = sext i32 %179 to i64
  %181 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_ISt4pairIS0_IdiEiESaIS2_EESaIS4_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %16, i64 noundef %180) #9
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %23) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %24) #9
  call void @_ZNSt4pairIdiEC2IRdRiTnNSt9enable_ifIXaaclsr5_PCCPE22_MoveConstructiblePairIT_T0_EEclsr5_PCCPE30_ImplicitlyMoveConvertiblePairIS5_S6_EEEbE4typeELb1EEEOS5_OS6_(ptr noundef nonnull align 8 dereferenceable(12) %24, ptr noundef nonnull align 8 dereferenceable(8) %22, ptr noundef nonnull align 4 dereferenceable(4) %19)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %25) #9
  store i32 0, ptr %25, align 4, !tbaa !12
  call void @_ZNSt4pairIS_IdiEiEC2IS0_iTnNSt9enable_ifIXaaclsr5_PCCPE18_ConstructiblePairIT_T0_EEclsr5_PCCPE26_ImplicitlyConvertiblePairIS4_S5_EEEbE4typeELb1EEERKS0_RKi(ptr noundef nonnull align 8 dereferenceable(20) %23, ptr noundef nonnull align 8 dereferenceable(12) %24, ptr noundef nonnull align 4 dereferenceable(4) %25)
  invoke void @_ZNSt6vectorISt4pairIS0_IdiEiESaIS2_EE9push_backEOS2_(ptr noundef nonnull align 8 dereferenceable(24) %181, ptr noundef nonnull align 8 dereferenceable(20) %23)
          to label %182 unwind label %194

182:                                              ; preds = %178
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %25) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %24) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %23) #9
  %183 = load i32, ptr %19, align 4, !tbaa !12
  %184 = sext i32 %183 to i64
  %185 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_ISt4pairIS0_IdiEiESaIS2_EESaIS4_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %16, i64 noundef %184) #9
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %26) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %27) #9
  call void @_ZNSt4pairIdiEC2IRdRiTnNSt9enable_ifIXaaclsr5_PCCPE22_MoveConstructiblePairIT_T0_EEclsr5_PCCPE30_ImplicitlyMoveConvertiblePairIS5_S6_EEEbE4typeELb1EEEOS5_OS6_(ptr noundef nonnull align 8 dereferenceable(12) %27, ptr noundef nonnull align 8 dereferenceable(8) %22, ptr noundef nonnull align 4 dereferenceable(4) %18)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %28) #9
  store i32 0, ptr %28, align 4, !tbaa !12
  call void @_ZNSt4pairIS_IdiEiEC2IS0_iTnNSt9enable_ifIXaaclsr5_PCCPE18_ConstructiblePairIT_T0_EEclsr5_PCCPE26_ImplicitlyConvertiblePairIS4_S5_EEEbE4typeELb1EEERKS0_RKi(ptr noundef nonnull align 8 dereferenceable(20) %26, ptr noundef nonnull align 8 dereferenceable(12) %27, ptr noundef nonnull align 4 dereferenceable(4) %28)
  invoke void @_ZNSt6vectorISt4pairIS0_IdiEiESaIS2_EE9push_backEOS2_(ptr noundef nonnull align 8 dereferenceable(24) %185, ptr noundef nonnull align 8 dereferenceable(20) %26)
          to label %186 unwind label %196

186:                                              ; preds = %182
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %28) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %27) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %26) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %22) #9
  br label %199

187:                                              ; preds = %.lr.ph263
  %188 = landingpad { ptr, i32 }
          cleanup
  br label %191

189:                                              ; preds = %173
  %190 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %21) #9
  br label %191

191:                                              ; preds = %189, %187
  %.pn203 = phi { ptr, i32 } [ %190, %189 ], [ %188, %187 ]
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %20) #9
  br label %201

192:                                              ; preds = %176
  %193 = landingpad { ptr, i32 }
          cleanup
  br label %198

194:                                              ; preds = %178
  %195 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %25) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %24) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %23) #9
  br label %198

196:                                              ; preds = %182
  %197 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %28) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %27) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %26) #9
  br label %198

198:                                              ; preds = %196, %194, %192
  %.pn205 = phi { ptr, i32 } [ %197, %196 ], [ %195, %194 ], [ %193, %192 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %22) #9
  br label %201

.critedge2:                                       ; preds = %172
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %21) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %20) #9
  br label %199

199:                                              ; preds = %175, %186, %.critedge2
  %storemerge202.in = load i32, ptr %19, align 4, !tbaa !12
  %storemerge202 = add nsw i32 %storemerge202.in, 1
  store i32 %storemerge202, ptr %19, align 4, !tbaa !12
  %200 = icmp slt i32 %storemerge202, %142
  br i1 %200, label %.lr.ph263, label %._crit_edge264.loopexit, !llvm.loop !18

201:                                              ; preds = %198, %191
  %.pn205.pn = phi { ptr, i32 } [ %.pn205, %198 ], [ %.pn203, %191 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %19) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %18) #9
  br label %216

202:                                              ; preds = %._crit_edge267
  store double %154, ptr %29, align 8, !tbaa !6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %30) #9
  %203 = fadd double %154, -1.000000e+10
  store double %203, ptr %30, align 8, !tbaa !6
  %204 = call noundef i32 @_Z3sgnRKd(ptr noundef nonnull align 8 dereferenceable(8) %30)
  %205 = icmp slt i32 %204, 0
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %30) #9
  br i1 %205, label %206, label %212

206:                                              ; preds = %202
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %31) #9
  store i8 10, ptr %31, align 1, !tbaa !14
  invoke void @_Z7writeDBRKdRKc(ptr noundef nonnull align 8 dereferenceable(8) %29, ptr noundef nonnull align 1 dereferenceable(1) %31)
          to label %207 unwind label %210

207:                                              ; preds = %206
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %31) #9
  br label %214

208:                                              ; preds = %._crit_edge267
  %209 = landingpad { ptr, i32 }
          cleanup
  br label %215

210:                                              ; preds = %206
  %211 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %31) #9
  br label %215

212:                                              ; preds = %202
  %213 = call i32 @puts(ptr noundef nonnull dereferenceable(1) @.str.2)
  br label %214

214:                                              ; preds = %212, %207
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %29) #9
  call void @_ZNSt6vectorIS_ISt4pairIS0_IdiEiESaIS2_EESaIS4_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %16) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %16) #9
  call void @_ZNSt6vectorI5PointSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %11) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %11) #9
  br label %616

215:                                              ; preds = %210, %208
  %.pn200 = phi { ptr, i32 } [ %211, %210 ], [ %209, %208 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %29) #9
  br label %216

216:                                              ; preds = %215, %201
  %.pn205.pn.pn = phi { ptr, i32 } [ %.pn205.pn, %201 ], [ %.pn200, %215 ]
  call void @_ZNSt6vectorIS_ISt4pairIS0_IdiEiESaIS2_EESaIS4_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %16) #9
  br label %217

217:                                              ; preds = %216, %155
  %.pn205.pn.pn.pn = phi { ptr, i32 } [ %.pn205.pn.pn, %216 ], [ %156, %155 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %16) #9
  br label %218

218:                                              ; preds = %217, %150
  %.pn210 = phi { ptr, i32 } [ %151, %150 ], [ %.pn205.pn.pn.pn, %217 ]
  call void @_ZNSt6vectorI5PointSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %11) #9
  br label %219

219:                                              ; preds = %218, %144
  %.pn210.pn = phi { ptr, i32 } [ %.pn210, %218 ], [ %145, %144 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %11) #9
  br label %625

220:                                              ; preds = %125
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %32) #9
  store i8 0, ptr %32, align 1, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %33) #9
  %221 = call noundef zeroext i1 @_ZNK4Line21containsLeftHalfPlaneERK5PointRKb(ptr noundef nonnull align 8 dereferenceable(32) %4, ptr noundef nonnull align 8 dereferenceable(16) %2, ptr noundef nonnull align 1 dereferenceable(1) %32)
  br i1 %221, label %.critedge4, label %222

222:                                              ; preds = %220
  store i8 0, ptr %33, align 1, !tbaa !10
  %223 = call noundef zeroext i1 @_ZNK4Line21containsLeftHalfPlaneERK5PointRKb(ptr noundef nonnull align 8 dereferenceable(32) %4, ptr noundef nonnull align 8 dereferenceable(16) %3, ptr noundef nonnull align 1 dereferenceable(1) %33)
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %33) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %32) #9
  br i1 %223, label %224, label %226

.critedge4:                                       ; preds = %220
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %33) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %32) #9
  br label %224

224:                                              ; preds = %.critedge4, %222
  %225 = call i32 @puts(ptr noundef nonnull dereferenceable(1) @.str.2)
  br label %616

226:                                              ; preds = %222
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %34) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %35) #9
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %35, ptr noundef nonnull align 8 dereferenceable(16) %2, i64 16, i1 false), !tbaa.struct !5
  %227 = getelementptr inbounds i8, ptr %35, i64 16
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %227, ptr noundef nonnull align 8 dereferenceable(16) %3, i64 16, i1 false), !tbaa.struct !5
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %36) #9
  call void @_ZNSaI5PointEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %36) #9
  invoke void @_ZNSt6vectorI5PointSaIS0_EEC2ESt16initializer_listIS0_ERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %34, ptr nonnull %35, i64 2, ptr noundef nonnull align 1 dereferenceable(1) %36)
          to label %228 unwind label %243

228:                                              ; preds = %226
  call void @_ZNSt15__new_allocatorI5PointED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %36) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %36) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %35) #9
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %37) #9
  call void @_ZNSt6vectorISt4pairI4LineiESaIS2_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %37) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %38) #9
  store i32 0, ptr %38, align 4, !tbaa !12
  %229 = getelementptr inbounds i8, ptr %39, i64 8
  %230 = getelementptr inbounds i8, ptr %43, i64 16
  %231 = getelementptr inbounds i8, ptr %43, i64 24
  %232 = getelementptr inbounds i8, ptr %45, i64 16
  %233 = getelementptr inbounds i8, ptr %45, i64 24
  %234 = getelementptr inbounds i8, ptr %47, i64 16
  %235 = getelementptr inbounds i8, ptr %47, i64 24
  %236 = getelementptr inbounds i8, ptr %49, i64 16
  %237 = getelementptr inbounds i8, ptr %4, i64 16
  %238 = getelementptr inbounds i8, ptr %50, i64 8
  %239 = getelementptr inbounds i8, ptr %49, i64 24
  br label %245

.preheader:                                       ; preds = %283
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %38) #9
  %240 = call noundef i64 @_ZNKSt6vectorISt4pairI4LineiESaIS2_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %37) #9
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %51) #9
  call void @_ZNSt6vectorI5PointSaIS0_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %51) #9
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %52) #9
  call void @_ZNSt6vectorI5PointSaIS0_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %52) #9
  %.ptr.1 = getelementptr inbounds i8, ptr %52, i64 24
  call void @_ZNSt6vectorI5PointSaIS0_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %.ptr.1) #9
  %241 = trunc i64 %240 to i32
  %242 = icmp sgt i32 %241, 0
  br i1 %242, label %.lr.ph236, label %._crit_edge237

243:                                              ; preds = %226
  %244 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorI5PointED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %36) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %36) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %35) #9
  br label %624

245:                                              ; preds = %228, %283
  %storemerge231 = phi i32 [ 0, %228 ], [ %285, %283 ]
  %246 = sext i32 %storemerge231 to i64
  %247 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorI5PointSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %34, i64 noundef %246) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %39) #9
  %248 = invoke { double, double } @_ZNK4Line7reflectERK5Point(ptr noundef nonnull align 8 dereferenceable(32) %4, ptr noundef nonnull align 8 dereferenceable(16) %247)
          to label %249 unwind label %258

249:                                              ; preds = %245
  %250 = extractvalue { double, double } %248, 0
  store double %250, ptr %39, align 8
  %251 = extractvalue { double, double } %248, 1
  store double %251, ptr %229, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %40) #9
  %252 = call ptr @_ZNSt6vectorI4LineSaIS0_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %5) #9
  store ptr %252, ptr %40, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %41) #9
  %253 = call ptr @_ZNSt6vectorI4LineSaIS0_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %5) #9
  store ptr %253, ptr %41, align 8
  %254 = call noundef zeroext i1 @_ZN9__gnu_cxxneIP4LineSt6vectorIS1_SaIS1_EEEEbRKNS_17__normal_iteratorIT_T0_EESB_(ptr noundef nonnull align 8 dereferenceable(8) %40, ptr noundef nonnull align 8 dereferenceable(8) %41) #9
  br i1 %254, label %.lr.ph, label %._crit_edge

._crit_edge:                                      ; preds = %268, %249
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %41) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %40) #9
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %46) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %47) #9
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %47, ptr noundef nonnull align 8 dereferenceable(16) %39, i64 16, i1 false), !tbaa.struct !5
  %255 = call { double, double } @_ZNK5PointmiERKS_(ptr noundef nonnull align 8 dereferenceable(16) %4, ptr noundef nonnull align 8 dereferenceable(16) %39)
  %256 = extractvalue { double, double } %255, 0
  store double %256, ptr %234, align 8
  %257 = extractvalue { double, double } %255, 1
  store double %257, ptr %235, align 8
  call void @_ZNSt4pairI4LineiEC2IS0_RiTnNSt9enable_ifIXaaclsr5_PCCPE22_MoveConstructiblePairIT_T0_EEclsr5_PCCPE30_ImplicitlyMoveConvertiblePairIS5_S6_EEEbE4typeELb1EEEOS5_OS6_(ptr noundef nonnull align 8 dereferenceable(36) %46, ptr noundef nonnull align 8 dereferenceable(32) %47, ptr noundef nonnull align 4 dereferenceable(4) %38)
  invoke void @_ZNSt6vectorISt4pairI4LineiESaIS2_EE9push_backEOS2_(ptr noundef nonnull align 8 dereferenceable(24) %37, ptr noundef nonnull align 8 dereferenceable(36) %46)
          to label %276 unwind label %287

258:                                              ; preds = %245
  %259 = landingpad { ptr, i32 }
          cleanup
  br label %291

.lr.ph:                                           ; preds = %249, %268
  %260 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNK9__gnu_cxx17__normal_iteratorIP4LineSt6vectorIS1_SaIS1_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %40) #9
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %42) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %43) #9
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %43, ptr noundef nonnull align 8 dereferenceable(16) %247, i64 16, i1 false), !tbaa.struct !5
  %261 = call { double, double } @_ZNK5PointmiERKS_(ptr noundef nonnull align 8 dereferenceable(16) %260, ptr noundef nonnull align 8 dereferenceable(16) %247)
  %262 = extractvalue { double, double } %261, 0
  store double %262, ptr %230, align 8
  %263 = extractvalue { double, double } %261, 1
  store double %263, ptr %231, align 8
  call void @_ZNSt4pairI4LineiEC2IS0_RiTnNSt9enable_ifIXaaclsr5_PCCPE22_MoveConstructiblePairIT_T0_EEclsr5_PCCPE30_ImplicitlyMoveConvertiblePairIS5_S6_EEEbE4typeELb1EEEOS5_OS6_(ptr noundef nonnull align 8 dereferenceable(36) %42, ptr noundef nonnull align 8 dereferenceable(32) %43, ptr noundef nonnull align 4 dereferenceable(4) %38)
  invoke void @_ZNSt6vectorISt4pairI4LineiESaIS2_EE9push_backEOS2_(ptr noundef nonnull align 8 dereferenceable(24) %37, ptr noundef nonnull align 8 dereferenceable(36) %42)
          to label %264 unwind label %271

264:                                              ; preds = %.lr.ph
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %43) #9
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %42) #9
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %44) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %45) #9
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %45, ptr noundef nonnull align 8 dereferenceable(16) %39, i64 16, i1 false), !tbaa.struct !5
  %265 = call { double, double } @_ZNK5PointmiERKS_(ptr noundef nonnull align 8 dereferenceable(16) %260, ptr noundef nonnull align 8 dereferenceable(16) %39)
  %266 = extractvalue { double, double } %265, 0
  store double %266, ptr %232, align 8
  %267 = extractvalue { double, double } %265, 1
  store double %267, ptr %233, align 8
  call void @_ZNSt4pairI4LineiEC2IS0_RiTnNSt9enable_ifIXaaclsr5_PCCPE22_MoveConstructiblePairIT_T0_EEclsr5_PCCPE30_ImplicitlyMoveConvertiblePairIS5_S6_EEEbE4typeELb1EEEOS5_OS6_(ptr noundef nonnull align 8 dereferenceable(36) %44, ptr noundef nonnull align 8 dereferenceable(32) %45, ptr noundef nonnull align 4 dereferenceable(4) %38)
  invoke void @_ZNSt6vectorISt4pairI4LineiESaIS2_EE9push_backEOS2_(ptr noundef nonnull align 8 dereferenceable(24) %37, ptr noundef nonnull align 8 dereferenceable(36) %44)
          to label %268 unwind label %273

268:                                              ; preds = %264
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %45) #9
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %44) #9
  %269 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIP4LineSt6vectorIS1_SaIS1_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %40) #9
  %270 = call noundef zeroext i1 @_ZN9__gnu_cxxneIP4LineSt6vectorIS1_SaIS1_EEEEbRKNS_17__normal_iteratorIT_T0_EESB_(ptr noundef nonnull align 8 dereferenceable(8) %40, ptr noundef nonnull align 8 dereferenceable(8) %41) #9
  br i1 %270, label %.lr.ph, label %._crit_edge

271:                                              ; preds = %.lr.ph
  %272 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %43) #9
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %42) #9
  br label %275

273:                                              ; preds = %264
  %274 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %45) #9
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %44) #9
  br label %275

275:                                              ; preds = %273, %271
  %.pn193 = phi { ptr, i32 } [ %274, %273 ], [ %272, %271 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %41) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %40) #9
  br label %291

276:                                              ; preds = %._crit_edge
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %47) #9
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %46) #9
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %48) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %49) #9
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %49, ptr noundef nonnull align 8 dereferenceable(16) %39, i64 16, i1 false), !tbaa.struct !5
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %50) #9
  %277 = call { double, double } @_ZNK5PointplERKS_(ptr noundef nonnull align 8 dereferenceable(16) %4, ptr noundef nonnull align 8 dereferenceable(16) %237)
  %278 = extractvalue { double, double } %277, 0
  store double %278, ptr %50, align 8
  %279 = extractvalue { double, double } %277, 1
  store double %279, ptr %238, align 8
  %280 = call { double, double } @_ZNK5PointmiERKS_(ptr noundef nonnull align 8 dereferenceable(16) %50, ptr noundef nonnull align 8 dereferenceable(16) %39)
  %281 = extractvalue { double, double } %280, 0
  store double %281, ptr %236, align 8
  %282 = extractvalue { double, double } %280, 1
  store double %282, ptr %239, align 8
  call void @_ZNSt4pairI4LineiEC2IS0_RiTnNSt9enable_ifIXaaclsr5_PCCPE22_MoveConstructiblePairIT_T0_EEclsr5_PCCPE30_ImplicitlyMoveConvertiblePairIS5_S6_EEEbE4typeELb1EEEOS5_OS6_(ptr noundef nonnull align 8 dereferenceable(36) %48, ptr noundef nonnull align 8 dereferenceable(32) %49, ptr noundef nonnull align 4 dereferenceable(4) %38)
  invoke void @_ZNSt6vectorISt4pairI4LineiESaIS2_EE9push_backEOS2_(ptr noundef nonnull align 8 dereferenceable(24) %37, ptr noundef nonnull align 8 dereferenceable(36) %48)
          to label %283 unwind label %289

283:                                              ; preds = %276
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %50) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %49) #9
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %48) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %39) #9
  %284 = load i32, ptr %38, align 4, !tbaa !12
  %285 = add nsw i32 %284, 1
  store i32 %285, ptr %38, align 4, !tbaa !12
  %286 = icmp slt i32 %284, 1
  br i1 %286, label %245, label %.preheader, !llvm.loop !19

287:                                              ; preds = %._crit_edge
  %288 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %47) #9
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %46) #9
  br label %291

289:                                              ; preds = %276
  %290 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %50) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %49) #9
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %48) #9
  br label %291

291:                                              ; preds = %289, %287, %275, %258
  %.pn193.pn = phi { ptr, i32 } [ %.pn193, %275 ], [ %290, %289 ], [ %288, %287 ], [ %259, %258 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %39) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %38) #9
  br label %623

.lr.ph236:                                        ; preds = %.preheader
  %292 = getelementptr inbounds i8, ptr %53, i64 16
  %293 = and i64 %240, 2147483647
  %wide.trip.count274 = and i64 %240, 2147483647
  br label %294

.loopexit224:                                     ; preds = %306, %294
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond275.not = icmp eq i64 %indvars.iv.next272, %wide.trip.count274
  br i1 %exitcond275.not, label %._crit_edge237, label %294, !llvm.loop !20

._crit_edge237:                                   ; preds = %.loopexit224, %.preheader
  invoke void @_Z13sortAndUniqueI5PointEvRSt6vectorIT_SaIS2_EE(ptr noundef nonnull align 8 dereferenceable(24) %51)
          to label %307 unwind label %329

294:                                              ; preds = %.lr.ph236, %.loopexit224
  %indvars.iv271 = phi i64 [ 0, %.lr.ph236 ], [ %indvars.iv.next272, %.loopexit224 ]
  %indvars.iv = phi i64 [ 1, %.lr.ph236 ], [ %indvars.iv.next, %.loopexit224 ]
  %indvars.iv.next272 = add nuw nsw i64 %indvars.iv271, 1
  %295 = icmp ult i64 %indvars.iv.next272, %293
  br i1 %295, label %.lr.ph234, label %.loopexit224

.lr.ph234:                                        ; preds = %294, %306
  %indvars.iv268 = phi i64 [ %indvars.iv.next269, %306 ], [ %indvars.iv, %294 ]
  %296 = call noundef nonnull align 8 dereferenceable(36) ptr @_ZNSt6vectorISt4pairI4LineiESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %37, i64 noundef %indvars.iv271) #9
  %297 = call noundef nonnull align 8 dereferenceable(36) ptr @_ZNSt6vectorISt4pairI4LineiESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %37, i64 noundef %indvars.iv268) #9
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %53) #9
  invoke void @_ZNK4Line9intersectERKS_(ptr dead_on_unwind nonnull writable sret(%"struct.std::pair.44") align 8 %53, ptr noundef nonnull align 8 dereferenceable(32) %296, ptr noundef nonnull align 8 dereferenceable(32) %297)
          to label %298 unwind label %304

298:                                              ; preds = %.lr.ph234
  %299 = load i8, ptr %292, align 8, !tbaa !21, !range !24, !noundef !25
  %300 = trunc nuw i8 %299 to i1
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %54) #9
  br i1 %300, label %301, label %.critedge6

301:                                              ; preds = %298
  store i8 0, ptr %54, align 1, !tbaa !10
  %302 = call noundef zeroext i1 @_ZNK4Line21containsLeftHalfPlaneERK5PointRKb(ptr noundef nonnull align 8 dereferenceable(32) %4, ptr noundef nonnull align 8 dereferenceable(16) %53, ptr noundef nonnull align 1 dereferenceable(1) %54)
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %54) #9
  br i1 %302, label %306, label %303

303:                                              ; preds = %301
  invoke void @_ZNSt6vectorI5PointSaIS0_EE9push_backERKS0_(ptr noundef nonnull align 8 dereferenceable(24) %51, ptr noundef nonnull align 8 dereferenceable(16) %53)
          to label %306 unwind label %304

304:                                              ; preds = %303, %.lr.ph234
  %305 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %53) #9
  br label %621

.critedge6:                                       ; preds = %298
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %54) #9
  br label %306

306:                                              ; preds = %303, %.critedge6, %301
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %53) #9
  %indvars.iv.next269 = add nuw nsw i64 %indvars.iv268, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next269, %wide.trip.count274
  br i1 %exitcond.not, label %.loopexit224, label %.lr.ph234, !llvm.loop !26

307:                                              ; preds = %._crit_edge237
  %308 = call noundef i64 @_ZNKSt6vectorI5PointSaIS0_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %51) #9
  %309 = trunc i64 %308 to i32
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %55) #9
  %310 = call ptr @_ZNSt6vectorI5PointSaIS0_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %51) #9
  %311 = call ptr @_ZNSt6vectorI5PointSaIS0_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %51) #9
  %312 = invoke ptr @_ZSt11lower_boundIN9__gnu_cxx17__normal_iteratorIP5PointSt6vectorIS2_SaIS2_EEEES2_ET_S8_S8_RKT0_(ptr %310, ptr %311, ptr noundef nonnull align 8 dereferenceable(16) %2)
          to label %313 unwind label %331

313:                                              ; preds = %307
  store ptr %312, ptr %55, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %56) #9
  %314 = call ptr @_ZNSt6vectorI5PointSaIS0_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %51) #9
  store ptr %314, ptr %56, align 8
  %315 = call noundef i64 @_ZN9__gnu_cxxmiIP5PointSt6vectorIS1_SaIS1_EEEENS_17__normal_iteratorIT_T0_E15difference_typeERKS9_SC_(ptr noundef nonnull align 8 dereferenceable(8) %55, ptr noundef nonnull align 8 dereferenceable(8) %56) #9
  %316 = trunc i64 %315 to i32
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %56) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %55) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %57) #9
  %317 = call ptr @_ZNSt6vectorI5PointSaIS0_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %51) #9
  %318 = call ptr @_ZNSt6vectorI5PointSaIS0_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %51) #9
  %319 = invoke ptr @_ZSt11lower_boundIN9__gnu_cxx17__normal_iteratorIP5PointSt6vectorIS2_SaIS2_EEEES2_ET_S8_S8_RKT0_(ptr %317, ptr %318, ptr noundef nonnull align 8 dereferenceable(16) %3)
          to label %320 unwind label %333

320:                                              ; preds = %313
  store ptr %319, ptr %57, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %58) #9
  %321 = call ptr @_ZNSt6vectorI5PointSaIS0_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %51) #9
  store ptr %321, ptr %58, align 8
  %322 = call noundef i64 @_ZN9__gnu_cxxmiIP5PointSt6vectorIS1_SaIS1_EEEENS_17__normal_iteratorIT_T0_E15difference_typeERKS9_SC_(ptr noundef nonnull align 8 dereferenceable(8) %57, ptr noundef nonnull align 8 dereferenceable(8) %58) #9
  %323 = trunc i64 %322 to i32
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %58) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %57) #9
  %324 = icmp slt i32 %316, %309
  br i1 %324, label %325, label %.critedge8

325:                                              ; preds = %320
  %sext = shl i64 %315, 32
  %326 = ashr exact i64 %sext, 32
  %327 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorI5PointSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %51, i64 noundef %326) #9
  %328 = call noundef zeroext i1 @_ZNK5PointeqERKS_(ptr noundef nonnull align 8 dereferenceable(16) %327, ptr noundef nonnull align 8 dereferenceable(16) %2)
  br i1 %328, label %335, label %.critedge8

.critedge8:                                       ; preds = %320, %325
  call void @__assert_fail(ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.4, i32 noundef 302, ptr noundef nonnull @__PRETTY_FUNCTION__._Z5solvev) #10
  unreachable

329:                                              ; preds = %._crit_edge237
  %330 = landingpad { ptr, i32 }
          cleanup
  br label %621

331:                                              ; preds = %307
  %332 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %55) #9
  br label %621

333:                                              ; preds = %313
  %334 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %57) #9
  br label %621

335:                                              ; preds = %325
  %336 = icmp slt i32 %323, %309
  br i1 %336, label %337, label %.critedge10

337:                                              ; preds = %335
  %sext169 = shl i64 %322, 32
  %338 = ashr exact i64 %sext169, 32
  %339 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorI5PointSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %51, i64 noundef %338) #9
  %340 = call noundef zeroext i1 @_ZNK5PointeqERKS_(ptr noundef nonnull align 8 dereferenceable(16) %339, ptr noundef nonnull align 8 dereferenceable(16) %3)
  br i1 %340, label %341, label %.critedge10

.critedge10:                                      ; preds = %335, %337
  call void @__assert_fail(ptr noundef nonnull @.str.5, ptr noundef nonnull @.str.4, i32 noundef 303, ptr noundef nonnull @__PRETTY_FUNCTION__._Z5solvev) #10
  unreachable

341:                                              ; preds = %337
  %342 = load i8, ptr @debug, align 1, !tbaa !10, !range !24, !noundef !25
  %343 = trunc nuw i8 %342 to i1
  br i1 %343, label %344, label %.loopexit223

344:                                              ; preds = %341
  %345 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.6, i32 noundef %309, i32 noundef %316, i32 noundef %323)
  %346 = icmp sgt i32 %309, 0
  br i1 %346, label %.lr.ph240.preheader, label %.loopexit223

.lr.ph240.preheader:                              ; preds = %344
  %wide.trip.count279 = and i64 %308, 2147483647
  br label %.lr.ph240

.lr.ph240:                                        ; preds = %.lr.ph240.preheader, %350
  %indvars.iv276 = phi i64 [ 0, %.lr.ph240.preheader ], [ %indvars.iv.next277, %350 ]
  %347 = trunc nuw nsw i64 %indvars.iv276 to i32
  %348 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.7, i32 noundef %347)
  %349 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorI5PointSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %51, i64 noundef %indvars.iv276) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %59) #9
  store i8 10, ptr %59, align 1, !tbaa !14
  invoke void @_ZNK5Point5writeERKc(ptr noundef nonnull align 8 dereferenceable(16) %349, ptr noundef nonnull align 1 dereferenceable(1) %59)
          to label %350 unwind label %351

350:                                              ; preds = %.lr.ph240
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %59) #9
  %indvars.iv.next277 = add nuw nsw i64 %indvars.iv276, 1
  %exitcond280.not = icmp eq i64 %indvars.iv.next277, %wide.trip.count279
  br i1 %exitcond280.not, label %.loopexit223, label %.lr.ph240, !llvm.loop !27

351:                                              ; preds = %.lr.ph240
  %352 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %59) #9
  br label %621

.loopexit223:                                     ; preds = %350, %344, %341
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %60) #9
  %sext170 = shl i64 %308, 32
  %353 = ashr exact i64 %sext170, 32
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %61) #9
  call void @_ZNSaISt6vectorISt4pairIS0_IdiEiESaIS2_EEEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %61) #9
  invoke void @_ZNSt6vectorIS_ISt4pairIS0_IdiEiESaIS2_EESaIS4_EEC2EmRKS5_(ptr noundef nonnull align 8 dereferenceable(24) %60, i64 noundef %353, ptr noundef nonnull align 1 dereferenceable(1) %61)
          to label %354 unwind label %364

354:                                              ; preds = %.loopexit223
  call void @_ZNSt15__new_allocatorISt6vectorISt4pairIS1_IdiEiESaIS3_EEED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %61) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %61) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %62) #9
  store i32 0, ptr %62, align 4, !tbaa !12
  %355 = icmp sgt i32 %309, 0
  br i1 %355, label %.lr.ph255, label %._crit_edge256

.lr.ph255:                                        ; preds = %354
  %356 = getelementptr inbounds i8, ptr %67, i64 16
  %357 = getelementptr inbounds i8, ptr %68, i64 16
  %358 = getelementptr inbounds i8, ptr %71, i64 16
  %359 = getelementptr inbounds i8, ptr %73, i64 8
  %360 = getelementptr inbounds i8, ptr %75, i64 8
  %361 = getelementptr inbounds i8, ptr %74, i64 8
  %362 = getelementptr inbounds i8, ptr %79, i64 16
  br label %366

._crit_edge256:                                   ; preds = %._crit_edge253, %354
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %62) #9
  %363 = invoke noundef double @_Z10getMinDistRKSt6vectorIS_ISt4pairIS0_IdiEiESaIS2_EESaIS4_EEiii(ptr noundef nonnull align 8 dereferenceable(24) %60, i32 noundef %316, i32 noundef %323, i32 noundef 1)
          to label %587 unwind label %605

364:                                              ; preds = %.loopexit223
  %365 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorISt6vectorISt4pairIS1_IdiEiESaIS3_EEED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %61) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %61) #9
  br label %620

366:                                              ; preds = %.lr.ph255, %._crit_edge253
  %storemerge174.in249 = phi i32 [ 0, %.lr.ph255 ], [ %.pre-phi317, %._crit_edge253 ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %63) #9
  %storemerge174250 = add nsw i32 %storemerge174.in249, 1
  store i32 %storemerge174250, ptr %63, align 4, !tbaa !12
  %367 = icmp slt i32 %storemerge174250, %309
  br i1 %367, label %.lr.ph252, label %._crit_edge253

._crit_edge253.loopexit:                          ; preds = %578
  %.pre = load i32, ptr %62, align 4, !tbaa !12
  %.pre316 = add nsw i32 %.pre, 1
  br label %._crit_edge253

._crit_edge253:                                   ; preds = %._crit_edge253.loopexit, %366
  %.pre-phi317 = phi i32 [ %.pre316, %._crit_edge253.loopexit ], [ %storemerge174250, %366 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %63) #9
  store i32 %.pre-phi317, ptr %62, align 4, !tbaa !12
  %368 = icmp slt i32 %.pre-phi317, %309
  br i1 %368, label %366, label %._crit_edge256, !llvm.loop !28

.lr.ph252:                                        ; preds = %366, %578
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %.sroa.053)
  %369 = load i32, ptr %62, align 4, !tbaa !12
  %370 = sext i32 %369 to i64
  %371 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorI5PointSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %51, i64 noundef %370) #9
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %.sroa.053, ptr noundef nonnull align 8 dereferenceable(16) %371, i64 16, i1 false), !tbaa.struct !5
  %372 = load i32, ptr %63, align 4, !tbaa !12
  %373 = sext i32 %372 to i64
  %374 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorI5PointSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %51, i64 noundef %373) #9
  %375 = load i32, ptr %62, align 4, !tbaa !12
  %376 = sext i32 %375 to i64
  %377 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorI5PointSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %51, i64 noundef %376) #9
  %378 = call { double, double } @_ZNK5PointmiERKS_(ptr noundef nonnull align 8 dereferenceable(16) %374, ptr noundef nonnull align 8 dereferenceable(16) %377)
  %379 = extractvalue { double, double } %378, 0
  %380 = extractvalue { double, double } %378, 1
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %6, ptr noundef nonnull align 8 dereferenceable(16) %.sroa.053, i64 16, i1 false), !tbaa.struct !17
  store double %379, ptr %94, align 8, !tbaa !6
  store double %380, ptr %97, align 8, !tbaa !6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %.sroa.053)
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %64) #9
  store i8 1, ptr %64, align 1, !tbaa !10
  %381 = invoke noundef zeroext i1 @_ZNK13ConvexPolygon22hasSegmentIntersectionERK4LineRKb(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull align 1 dereferenceable(1) %64)
          to label %382 unwind label %383

382:                                              ; preds = %.lr.ph252
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %64) #9
  br i1 %381, label %578, label %385

383:                                              ; preds = %.lr.ph252
  %384 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %64) #9
  br label %586

385:                                              ; preds = %382
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %65) #9
  %386 = invoke noundef double @_ZNK5Point3lenEv(ptr noundef nonnull align 8 dereferenceable(16) %94)
          to label %387 unwind label %395

387:                                              ; preds = %385
  store double %386, ptr %65, align 8, !tbaa !6
  %388 = load i8, ptr @debug, align 1, !tbaa !10, !range !24, !noundef !25
  %389 = trunc nuw i8 %388 to i1
  br i1 %389, label %390, label %399

390:                                              ; preds = %387
  %391 = load i32, ptr %62, align 4, !tbaa !12
  %392 = load i32, ptr %63, align 4, !tbaa !12
  %393 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.8, i32 noundef %391, i32 noundef %392)
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %66) #9
  store i8 10, ptr %66, align 1, !tbaa !14
  invoke void @_Z7writeDBRKdRKc(ptr noundef nonnull align 8 dereferenceable(8) %65, ptr noundef nonnull align 1 dereferenceable(1) %66)
          to label %394 unwind label %397

394:                                              ; preds = %390
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %66) #9
  br label %399

395:                                              ; preds = %439, %._crit_edge243, %385
  %396 = landingpad { ptr, i32 }
          cleanup
  br label %585

397:                                              ; preds = %390
  %398 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %66) #9
  br label %585

399:                                              ; preds = %394, %387
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %67) #9
  %400 = load i32, ptr %62, align 4, !tbaa !12
  %401 = sext i32 %400 to i64
  %402 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorI5PointSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %51, i64 noundef %401) #9
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %67, ptr noundef nonnull align 8 dereferenceable(16) %402, i64 16, i1 false), !tbaa.struct !5
  %403 = load i32, ptr %63, align 4, !tbaa !12
  %404 = sext i32 %403 to i64
  %405 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorI5PointSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %51, i64 noundef %404) #9
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %356, ptr noundef nonnull align 8 dereferenceable(16) %405, i64 16, i1 false), !tbaa.struct !5
  %406 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorI5PointSaIS0_EEaSESt16initializer_listIS0_E(ptr noundef nonnull align 8 dereferenceable(24) %52, ptr nonnull %67, i64 2)
          to label %407 unwind label %419

407:                                              ; preds = %399
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %67) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %68) #9
  %408 = load i32, ptr %62, align 4, !tbaa !12
  %409 = sext i32 %408 to i64
  %410 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorI5PointSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %51, i64 noundef %409) #9
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %68, ptr noundef nonnull align 8 dereferenceable(16) %410, i64 16, i1 false), !tbaa.struct !5
  %411 = load i32, ptr %63, align 4, !tbaa !12
  %412 = sext i32 %411 to i64
  %413 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorI5PointSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %51, i64 noundef %412) #9
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %357, ptr noundef nonnull align 8 dereferenceable(16) %413, i64 16, i1 false), !tbaa.struct !5
  %414 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorI5PointSaIS0_EEaSESt16initializer_listIS0_E(ptr noundef nonnull align 8 dereferenceable(24) %.ptr.1, ptr nonnull %68, i64 2)
          to label %415 unwind label %421

415:                                              ; preds = %407
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %68) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %69) #9
  %416 = call ptr @_ZNSt6vectorISt4pairI4LineiESaIS2_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %37) #9
  store ptr %416, ptr %69, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %70) #9
  %417 = call ptr @_ZNSt6vectorISt4pairI4LineiESaIS2_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %37) #9
  store ptr %417, ptr %70, align 8
  %418 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPSt4pairI4LineiESt6vectorIS3_SaIS3_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %69, ptr noundef nonnull align 8 dereferenceable(8) %70) #9
  br i1 %418, label %.lr.ph242, label %._crit_edge243

._crit_edge243:                                   ; preds = %436, %415
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %70) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %69) #9
  invoke void @_Z13sortAndUniqueI5PointEvRSt6vectorIT_SaIS2_EE(ptr noundef nonnull align 8 dereferenceable(24) %52)
          to label %439 unwind label %395

419:                                              ; preds = %399
  %420 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %67) #9
  br label %585

421:                                              ; preds = %407
  %422 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %68) #9
  br label %585

.lr.ph242:                                        ; preds = %415, %436
  %423 = call noundef nonnull align 8 dereferenceable(36) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPSt4pairI4LineiESt6vectorIS3_SaIS3_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %69) #9
  %424 = getelementptr inbounds i8, ptr %423, i64 32
  %425 = load i32, ptr %424, align 8, !tbaa !29
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %71) #9
  invoke void @_ZNK4Line9intersectERKS_(ptr dead_on_unwind nonnull writable sret(%"struct.std::pair.44") align 8 %71, ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull align 8 dereferenceable(32) %423)
          to label %426 unwind label %434

426:                                              ; preds = %.lr.ph242
  %427 = load i8, ptr %358, align 8, !tbaa !21, !range !24, !noundef !25
  %428 = trunc nuw i8 %427 to i1
  br i1 %428, label %429, label %436

429:                                              ; preds = %426
  %430 = call noundef zeroext i1 @_ZNK4Line15containsSegmentERK5Point(ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull align 8 dereferenceable(16) %71)
  br i1 %430, label %431, label %436

431:                                              ; preds = %429
  %432 = sext i32 %425 to i64
  %433 = getelementptr inbounds [2 x %"class.std::vector.30"], ptr %52, i64 0, i64 %432
  invoke void @_ZNSt6vectorI5PointSaIS0_EE9push_backERKS0_(ptr noundef nonnull align 8 dereferenceable(24) %433, ptr noundef nonnull align 8 dereferenceable(16) %71)
          to label %436 unwind label %434

434:                                              ; preds = %431, %.lr.ph242
  %435 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %71) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %70) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %69) #9
  br label %585

436:                                              ; preds = %431, %429, %426
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %71) #9
  %437 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPSt4pairI4LineiESt6vectorIS3_SaIS3_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %69) #9
  %438 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPSt4pairI4LineiESt6vectorIS3_SaIS3_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %69, ptr noundef nonnull align 8 dereferenceable(8) %70) #9
  br i1 %438, label %.lr.ph242, label %._crit_edge243

439:                                              ; preds = %._crit_edge243
  invoke void @_Z13sortAndUniqueI5PointEvRSt6vectorIT_SaIS2_EE(ptr noundef nonnull align 8 dereferenceable(24) %.ptr.1)
          to label %440 unwind label %395

440:                                              ; preds = %439
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %72) #9
  store i32 0, ptr %72, align 4, !tbaa !12
  %441 = call noundef i64 @_ZNKSt6vectorI5PointSaIS0_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %52) #9
  %442 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorI5PointSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %34, i64 noundef 0) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %73) #9
  %443 = invoke { double, double } @_ZNK4Line7reflectERK5Point(ptr noundef nonnull align 8 dereferenceable(32) %4, ptr noundef nonnull align 8 dereferenceable(16) %442)
          to label %444 unwind label %450

444:                                              ; preds = %440
  %445 = trunc i64 %441 to i32
  %446 = extractvalue { double, double } %443, 0
  store double %446, ptr %73, align 8
  %447 = extractvalue { double, double } %443, 1
  store double %447, ptr %359, align 8
  %448 = icmp slt i32 %445, 2
  br i1 %448, label %.loopexit, label %.lr.ph247.preheader

.lr.ph247.preheader:                              ; preds = %444
  %449 = and i64 %441, 2147483647
  br label %.lr.ph247

450:                                              ; preds = %.loopexit, %440
  %451 = landingpad { ptr, i32 }
          cleanup
  br label %566

.lr.ph247:                                        ; preds = %.lr.ph247.preheader, %495
  %indvars.iv281 = phi i64 [ 1, %.lr.ph247.preheader ], [ %indvars.iv.next282, %495 ]
  %.0151245 = phi i8 [ 0, %.lr.ph247.preheader ], [ %.2153219, %495 ]
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %74) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %75) #9
  %452 = add nsw i64 %indvars.iv281, -1
  %453 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorI5PointSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %52, i64 noundef %452) #9
  %454 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorI5PointSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %52, i64 noundef %indvars.iv281) #9
  %455 = call { double, double } @_ZNK5PointplERKS_(ptr noundef nonnull align 8 dereferenceable(16) %453, ptr noundef nonnull align 8 dereferenceable(16) %454)
  %456 = extractvalue { double, double } %455, 0
  store double %456, ptr %75, align 8
  %457 = extractvalue { double, double } %455, 1
  store double %457, ptr %360, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %76) #9
  store double 5.000000e-01, ptr %76, align 8, !tbaa !6
  %458 = call { double, double } @_ZNK5PointmlERKd(ptr noundef nonnull align 8 dereferenceable(16) %75, ptr noundef nonnull align 8 dereferenceable(8) %76)
  %459 = extractvalue { double, double } %458, 0
  store double %459, ptr %74, align 8
  %460 = extractvalue { double, double } %458, 1
  store double %460, ptr %361, align 8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %76) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %75) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %.sroa.023)
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %.sroa.023, ptr noundef nonnull align 8 dereferenceable(16) %442, i64 16, i1 false), !tbaa.struct !5
  %461 = call { double, double } @_ZNK5PointmiERKS_(ptr noundef nonnull align 8 dereferenceable(16) %74, ptr noundef nonnull align 8 dereferenceable(16) %442)
  %462 = extractvalue { double, double } %461, 0
  %463 = extractvalue { double, double } %461, 1
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %6, ptr noundef nonnull align 8 dereferenceable(16) %.sroa.023, i64 16, i1 false), !tbaa.struct !17
  store double %462, ptr %94, align 8, !tbaa !6
  store double %463, ptr %97, align 8, !tbaa !6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %.sroa.023)
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %77) #9
  store i8 1, ptr %77, align 1, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %78) #9
  %464 = invoke noundef zeroext i1 @_ZNK4Line22hasSegmentIntersectionERKS_RKb(ptr noundef nonnull align 8 dereferenceable(32) %4, ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull align 1 dereferenceable(1) %77)
          to label %465 unwind label %.loopexit286

465:                                              ; preds = %.lr.ph247
  br i1 %464, label %.critedge12, label %466

466:                                              ; preds = %465
  store i8 1, ptr %78, align 1, !tbaa !10
  %467 = invoke noundef zeroext i1 @_ZNK13ConvexPolygon22hasSegmentIntersectionERK4LineRKb(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull align 1 dereferenceable(1) %78)
          to label %468 unwind label %.loopexit287

468:                                              ; preds = %466
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %78) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %77) #9
  br i1 %467, label %471, label %.thread

.thread:                                          ; preds = %468
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %74) #9
  br label %495

.loopexit286:                                     ; preds = %.lr.ph247
  %lpad.loopexit = landingpad { ptr, i32 }
          cleanup
  br label %470

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

.loopexit287:                                     ; preds = %466
  %lpad.loopexit289 = landingpad { ptr, i32 }
          cleanup
  br label %469

.loopexit.split-lp288:                            ; preds = %529
  %lpad.loopexit.split-lp290 = landingpad { ptr, i32 }
          cleanup
  br label %469

469:                                              ; preds = %.loopexit.split-lp288, %.loopexit287
  %lpad.phi291 = phi { ptr, i32 } [ %lpad.loopexit289, %.loopexit287 ], [ %lpad.loopexit.split-lp290, %.loopexit.split-lp288 ]
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %78) #9
  br label %470

470:                                              ; preds = %.loopexit286, %.loopexit.split-lp, %469
  %.pn176 = phi { ptr, i32 } [ %lpad.phi291, %469 ], [ %lpad.loopexit, %.loopexit286 ], [ %lpad.loopexit.split-lp, %.loopexit.split-lp ]
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %77) #9
  br label %500

.critedge12:                                      ; preds = %465
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %78) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %77) #9
  br label %471

471:                                              ; preds = %.critedge12, %468
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %.sroa.020)
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %.sroa.020, ptr noundef nonnull align 8 dereferenceable(16) %73, i64 16, i1 false), !tbaa.struct !5
  %472 = call { double, double } @_ZNK5PointmiERKS_(ptr noundef nonnull align 8 dereferenceable(16) %74, ptr noundef nonnull align 8 dereferenceable(16) %73)
  %473 = extractvalue { double, double } %472, 0
  %474 = extractvalue { double, double } %472, 1
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %6, ptr noundef nonnull align 8 dereferenceable(16) %.sroa.020, i64 16, i1 false), !tbaa.struct !17
  store double %473, ptr %94, align 8, !tbaa !6
  store double %474, ptr %97, align 8, !tbaa !6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %.sroa.020)
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %79) #9
  invoke void @_ZNK4Line9intersectERKS_(ptr dead_on_unwind nonnull writable sret(%"struct.std::pair.44") align 8 %79, ptr noundef nonnull align 8 dereferenceable(32) %4, ptr noundef nonnull align 8 dereferenceable(32) %6)
          to label %475 unwind label %.loopexit292

475:                                              ; preds = %471
  %476 = load i8, ptr %362, align 8, !tbaa !21, !range !24, !noundef !25
  %477 = trunc nuw i8 %476 to i1
  br i1 %477, label %478, label %.thread220

478:                                              ; preds = %475
  %479 = call noundef zeroext i1 @_ZNK4Line15containsSegmentERK5Point(ptr noundef nonnull align 8 dereferenceable(32) %4, ptr noundef nonnull align 8 dereferenceable(16) %79)
  br i1 %479, label %480, label %.thread220

.loopexit292:                                     ; preds = %471
  %lpad.loopexit294 = landingpad { ptr, i32 }
          cleanup
  br label %499

.loopexit.split-lp293:                            ; preds = %532
  %lpad.loopexit.split-lp295 = landingpad { ptr, i32 }
          cleanup
  br label %499

480:                                              ; preds = %478
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %.sroa.017)
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %.sroa.017, ptr noundef nonnull align 8 dereferenceable(16) %442, i64 16, i1 false), !tbaa.struct !5
  %481 = call { double, double } @_ZNK5PointmiERKS_(ptr noundef nonnull align 8 dereferenceable(16) %79, ptr noundef nonnull align 8 dereferenceable(16) %442)
  %482 = extractvalue { double, double } %481, 0
  %483 = extractvalue { double, double } %481, 1
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %6, ptr noundef nonnull align 8 dereferenceable(16) %.sroa.017, i64 16, i1 false), !tbaa.struct !17
  store double %482, ptr %94, align 8, !tbaa !6
  store double %483, ptr %97, align 8, !tbaa !6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %.sroa.017)
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %80) #9
  store i8 1, ptr %80, align 1, !tbaa !10
  %484 = invoke noundef zeroext i1 @_ZNK13ConvexPolygon22hasSegmentIntersectionERK4LineRKb(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull align 1 dereferenceable(1) %80)
          to label %485 unwind label %.loopexit297

485:                                              ; preds = %480
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %80) #9
  br i1 %484, label %.thread220, label %487

.loopexit297:                                     ; preds = %480
  %lpad.loopexit299 = landingpad { ptr, i32 }
          cleanup
  br label %486

.loopexit.split-lp298:                            ; preds = %541
  %lpad.loopexit.split-lp300 = landingpad { ptr, i32 }
          cleanup
  br label %486

486:                                              ; preds = %.loopexit.split-lp298, %.loopexit297
  %lpad.phi301 = phi { ptr, i32 } [ %lpad.loopexit299, %.loopexit297 ], [ %lpad.loopexit.split-lp300, %.loopexit.split-lp298 ]
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %80) #9
  br label %499

487:                                              ; preds = %485
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %.sroa.0)
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %.sroa.0, ptr noundef nonnull align 8 dereferenceable(16) %74, i64 16, i1 false), !tbaa.struct !5
  %488 = call { double, double } @_ZNK5PointmiERKS_(ptr noundef nonnull align 8 dereferenceable(16) %79, ptr noundef nonnull align 8 dereferenceable(16) %74)
  %489 = extractvalue { double, double } %488, 0
  %490 = extractvalue { double, double } %488, 1
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %6, ptr noundef nonnull align 8 dereferenceable(16) %.sroa.0, i64 16, i1 false), !tbaa.struct !17
  store double %489, ptr %94, align 8, !tbaa !6
  store double %490, ptr %97, align 8, !tbaa !6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %.sroa.0)
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %81) #9
  store i8 1, ptr %81, align 1, !tbaa !10
  %491 = invoke noundef zeroext i1 @_ZNK13ConvexPolygon22hasSegmentIntersectionERK4LineRKb(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull align 1 dereferenceable(1) %81)
          to label %492 unwind label %.loopexit302

.thread220:                                       ; preds = %478, %475, %485
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %79) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %74) #9
  br label %.loopexit

492:                                              ; preds = %487
  %493 = zext i1 %491 to i8
  %494 = or i8 %.0151245, %493
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %81) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %79) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %74) #9
  br label %495

495:                                              ; preds = %492, %.thread
  %.2153219 = phi i8 [ %.0151245, %.thread ], [ %494, %492 ]
  %indvars.iv.next282 = add nuw nsw i64 %indvars.iv281, 1
  %496 = trunc i8 %.2153219 to i1
  %497 = icmp uge i64 %indvars.iv.next282, %449
  %.not175 = select i1 %496, i1 true, i1 %497
  br i1 %.not175, label %.loopexit, label %.lr.ph247, !llvm.loop !32

.loopexit302:                                     ; preds = %487
  %lpad.loopexit304 = landingpad { ptr, i32 }
          cleanup
  br label %498

.loopexit.split-lp303:                            ; preds = %547
  %lpad.loopexit.split-lp305 = landingpad { ptr, i32 }
          cleanup
  br label %498

498:                                              ; preds = %.loopexit.split-lp303, %.loopexit302
  %lpad.phi306 = phi { ptr, i32 } [ %lpad.loopexit304, %.loopexit302 ], [ %lpad.loopexit.split-lp305, %.loopexit.split-lp303 ]
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %81) #9
  br label %499

499:                                              ; preds = %.loopexit292, %.loopexit.split-lp293, %498, %486
  %.pn178 = phi { ptr, i32 } [ %lpad.phi306, %498 ], [ %lpad.phi301, %486 ], [ %lpad.loopexit294, %.loopexit292 ], [ %lpad.loopexit.split-lp295, %.loopexit.split-lp293 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %79) #9
  br label %500

500:                                              ; preds = %499, %470
  %.pn178.pn = phi { ptr, i32 } [ %.pn178, %499 ], [ %.pn176, %470 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %74) #9
  br label %566

.loopexit:                                        ; preds = %495, %444, %.thread220
  %.3154 = phi i8 [ 1, %.thread220 ], [ 0, %444 ], [ %.2153219, %495 ]
  %501 = and i8 %.3154, 1
  %502 = xor i8 %501, 1
  %503 = zext nneg i8 %502 to i32
  %504 = load i32, ptr %72, align 4, !tbaa !12
  %505 = or i32 %504, %503
  store i32 %505, ptr %72, align 4, !tbaa !12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %73) #9
  %506 = call noundef i64 @_ZNKSt6vectorI5PointSaIS0_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %.ptr.1) #9
  %507 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorI5PointSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %34, i64 noundef 1) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %73) #9
  %508 = invoke { double, double } @_ZNK4Line7reflectERK5Point(ptr noundef nonnull align 8 dereferenceable(32) %4, ptr noundef nonnull align 8 dereferenceable(16) %507)
          to label %509 unwind label %450

509:                                              ; preds = %.loopexit
  %510 = trunc i64 %506 to i32
  %511 = extractvalue { double, double } %508, 0
  store double %511, ptr %73, align 8
  %512 = extractvalue { double, double } %508, 1
  store double %512, ptr %359, align 8
  %513 = icmp slt i32 %510, 2
  br i1 %513, label %.loopexit.1, label %.lr.ph247.preheader.1

.lr.ph247.preheader.1:                            ; preds = %509
  %514 = and i64 %506, 2147483647
  br label %.lr.ph247.1

.lr.ph247.1:                                      ; preds = %555, %.lr.ph247.preheader.1
  %indvars.iv281.1 = phi i64 [ 1, %.lr.ph247.preheader.1 ], [ %indvars.iv.next282.1, %555 ]
  %.0151245.1 = phi i8 [ 0, %.lr.ph247.preheader.1 ], [ %.2153219.1, %555 ]
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %74) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %75) #9
  %515 = add nsw i64 %indvars.iv281.1, -1
  %516 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorI5PointSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %.ptr.1, i64 noundef %515) #9
  %517 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorI5PointSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %.ptr.1, i64 noundef %indvars.iv281.1) #9
  %518 = call { double, double } @_ZNK5PointplERKS_(ptr noundef nonnull align 8 dereferenceable(16) %516, ptr noundef nonnull align 8 dereferenceable(16) %517)
  %519 = extractvalue { double, double } %518, 0
  store double %519, ptr %75, align 8
  %520 = extractvalue { double, double } %518, 1
  store double %520, ptr %360, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %76) #9
  store double 5.000000e-01, ptr %76, align 8, !tbaa !6
  %521 = call { double, double } @_ZNK5PointmlERKd(ptr noundef nonnull align 8 dereferenceable(16) %75, ptr noundef nonnull align 8 dereferenceable(8) %76)
  %522 = extractvalue { double, double } %521, 0
  store double %522, ptr %74, align 8
  %523 = extractvalue { double, double } %521, 1
  store double %523, ptr %361, align 8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %76) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %75) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %.sroa.023)
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %.sroa.023, ptr noundef nonnull align 8 dereferenceable(16) %507, i64 16, i1 false), !tbaa.struct !5
  %524 = call { double, double } @_ZNK5PointmiERKS_(ptr noundef nonnull align 8 dereferenceable(16) %74, ptr noundef nonnull align 8 dereferenceable(16) %507)
  %525 = extractvalue { double, double } %524, 0
  %526 = extractvalue { double, double } %524, 1
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %6, ptr noundef nonnull align 8 dereferenceable(16) %.sroa.023, i64 16, i1 false), !tbaa.struct !17
  store double %525, ptr %94, align 8, !tbaa !6
  store double %526, ptr %97, align 8, !tbaa !6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %.sroa.023)
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %77) #9
  store i8 1, ptr %77, align 1, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %78) #9
  %527 = invoke noundef zeroext i1 @_ZNK4Line22hasSegmentIntersectionERKS_RKb(ptr noundef nonnull align 8 dereferenceable(32) %4, ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull align 1 dereferenceable(1) %77)
          to label %528 unwind label %.loopexit.split-lp

528:                                              ; preds = %.lr.ph247.1
  br i1 %527, label %.critedge12.1, label %529

529:                                              ; preds = %528
  store i8 1, ptr %78, align 1, !tbaa !10
  %530 = invoke noundef zeroext i1 @_ZNK13ConvexPolygon22hasSegmentIntersectionERK4LineRKb(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull align 1 dereferenceable(1) %78)
          to label %531 unwind label %.loopexit.split-lp288

531:                                              ; preds = %529
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %78) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %77) #9
  br i1 %530, label %532, label %.thread.1

.thread.1:                                        ; preds = %531
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %74) #9
  br label %555

.critedge12.1:                                    ; preds = %528
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %78) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %77) #9
  br label %532

532:                                              ; preds = %.critedge12.1, %531
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %.sroa.020)
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %.sroa.020, ptr noundef nonnull align 8 dereferenceable(16) %73, i64 16, i1 false), !tbaa.struct !5
  %533 = call { double, double } @_ZNK5PointmiERKS_(ptr noundef nonnull align 8 dereferenceable(16) %74, ptr noundef nonnull align 8 dereferenceable(16) %73)
  %534 = extractvalue { double, double } %533, 0
  %535 = extractvalue { double, double } %533, 1
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %6, ptr noundef nonnull align 8 dereferenceable(16) %.sroa.020, i64 16, i1 false), !tbaa.struct !17
  store double %534, ptr %94, align 8, !tbaa !6
  store double %535, ptr %97, align 8, !tbaa !6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %.sroa.020)
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %79) #9
  invoke void @_ZNK4Line9intersectERKS_(ptr dead_on_unwind nonnull writable sret(%"struct.std::pair.44") align 8 %79, ptr noundef nonnull align 8 dereferenceable(32) %4, ptr noundef nonnull align 8 dereferenceable(32) %6)
          to label %536 unwind label %.loopexit.split-lp293

536:                                              ; preds = %532
  %537 = load i8, ptr %362, align 8, !tbaa !21, !range !24, !noundef !25
  %538 = trunc nuw i8 %537 to i1
  br i1 %538, label %539, label %.thread220.1

539:                                              ; preds = %536
  %540 = call noundef zeroext i1 @_ZNK4Line15containsSegmentERK5Point(ptr noundef nonnull align 8 dereferenceable(32) %4, ptr noundef nonnull align 8 dereferenceable(16) %79)
  br i1 %540, label %541, label %.thread220.1

541:                                              ; preds = %539
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %.sroa.017)
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %.sroa.017, ptr noundef nonnull align 8 dereferenceable(16) %507, i64 16, i1 false), !tbaa.struct !5
  %542 = call { double, double } @_ZNK5PointmiERKS_(ptr noundef nonnull align 8 dereferenceable(16) %79, ptr noundef nonnull align 8 dereferenceable(16) %507)
  %543 = extractvalue { double, double } %542, 0
  %544 = extractvalue { double, double } %542, 1
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %6, ptr noundef nonnull align 8 dereferenceable(16) %.sroa.017, i64 16, i1 false), !tbaa.struct !17
  store double %543, ptr %94, align 8, !tbaa !6
  store double %544, ptr %97, align 8, !tbaa !6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %.sroa.017)
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %80) #9
  store i8 1, ptr %80, align 1, !tbaa !10
  %545 = invoke noundef zeroext i1 @_ZNK13ConvexPolygon22hasSegmentIntersectionERK4LineRKb(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull align 1 dereferenceable(1) %80)
          to label %546 unwind label %.loopexit.split-lp298

546:                                              ; preds = %541
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %80) #9
  br i1 %545, label %.thread220.1, label %547

547:                                              ; preds = %546
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %.sroa.0)
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %.sroa.0, ptr noundef nonnull align 8 dereferenceable(16) %74, i64 16, i1 false), !tbaa.struct !5
  %548 = call { double, double } @_ZNK5PointmiERKS_(ptr noundef nonnull align 8 dereferenceable(16) %79, ptr noundef nonnull align 8 dereferenceable(16) %74)
  %549 = extractvalue { double, double } %548, 0
  %550 = extractvalue { double, double } %548, 1
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %6, ptr noundef nonnull align 8 dereferenceable(16) %.sroa.0, i64 16, i1 false), !tbaa.struct !17
  store double %549, ptr %94, align 8, !tbaa !6
  store double %550, ptr %97, align 8, !tbaa !6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %.sroa.0)
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %81) #9
  store i8 1, ptr %81, align 1, !tbaa !10
  %551 = invoke noundef zeroext i1 @_ZNK13ConvexPolygon22hasSegmentIntersectionERK4LineRKb(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull align 1 dereferenceable(1) %81)
          to label %552 unwind label %.loopexit.split-lp303

552:                                              ; preds = %547
  %553 = zext i1 %551 to i8
  %554 = or i8 %.0151245.1, %553
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %81) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %79) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %74) #9
  br label %555

555:                                              ; preds = %552, %.thread.1
  %.2153219.1 = phi i8 [ %.0151245.1, %.thread.1 ], [ %554, %552 ]
  %indvars.iv.next282.1 = add nuw nsw i64 %indvars.iv281.1, 1
  %556 = trunc i8 %.2153219.1 to i1
  %557 = icmp uge i64 %indvars.iv.next282.1, %514
  %.not175.1 = select i1 %556, i1 true, i1 %557
  br i1 %.not175.1, label %.loopexit.1, label %.lr.ph247.1, !llvm.loop !32

.thread220.1:                                     ; preds = %546, %539, %536
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %79) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %74) #9
  br label %.loopexit.1

.loopexit.1:                                      ; preds = %555, %.thread220.1, %509
  %.3154.1 = phi i8 [ 1, %.thread220.1 ], [ 0, %509 ], [ %.2153219.1, %555 ]
  %558 = shl i8 %.3154.1, 1
  %559 = and i8 %558, 2
  %560 = xor i8 %559, 2
  %561 = zext nneg i8 %560 to i32
  %562 = load i32, ptr %72, align 4, !tbaa !12
  %563 = or i32 %562, %561
  store i32 %563, ptr %72, align 4, !tbaa !12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %73) #9
  %564 = load i8, ptr @debug, align 1, !tbaa !10, !range !24, !noundef !25
  %565 = trunc nuw i8 %564 to i1
  br i1 %565, label %567, label %569

566:                                              ; preds = %500, %450
  %.pn178.pn.pn = phi { ptr, i32 } [ %.pn178.pn, %500 ], [ %451, %450 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %73) #9
  br label %584

567:                                              ; preds = %.loopexit.1
  %568 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.9, i32 noundef %563)
  br label %569

569:                                              ; preds = %567, %.loopexit.1
  %570 = load i32, ptr %62, align 4, !tbaa !12
  %571 = sext i32 %570 to i64
  %572 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_ISt4pairIS0_IdiEiESaIS2_EESaIS4_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %60, i64 noundef %571) #9
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %82) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %83) #9
  call void @_ZNSt4pairIdiEC2IRdRiTnNSt9enable_ifIXaaclsr5_PCCPE22_MoveConstructiblePairIT_T0_EEclsr5_PCCPE30_ImplicitlyMoveConvertiblePairIS5_S6_EEEbE4typeELb1EEEOS5_OS6_(ptr noundef nonnull align 8 dereferenceable(12) %83, ptr noundef nonnull align 8 dereferenceable(8) %65, ptr noundef nonnull align 4 dereferenceable(4) %63)
  call void @_ZNSt4pairIS_IdiEiEC2IS0_iTnNSt9enable_ifIXaaclsr5_PCCPE18_ConstructiblePairIT_T0_EEclsr5_PCCPE26_ImplicitlyConvertiblePairIS4_S5_EEEbE4typeELb1EEERKS0_RKi(ptr noundef nonnull align 8 dereferenceable(20) %82, ptr noundef nonnull align 8 dereferenceable(12) %83, ptr noundef nonnull align 4 dereferenceable(4) %72)
  invoke void @_ZNSt6vectorISt4pairIS0_IdiEiESaIS2_EE9push_backEOS2_(ptr noundef nonnull align 8 dereferenceable(24) %572, ptr noundef nonnull align 8 dereferenceable(20) %82)
          to label %573 unwind label %580

573:                                              ; preds = %569
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %83) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %82) #9
  %574 = load i32, ptr %63, align 4, !tbaa !12
  %575 = sext i32 %574 to i64
  %576 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_ISt4pairIS0_IdiEiESaIS2_EESaIS4_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %60, i64 noundef %575) #9
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %84) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %85) #9
  call void @_ZNSt4pairIdiEC2IRdRiTnNSt9enable_ifIXaaclsr5_PCCPE22_MoveConstructiblePairIT_T0_EEclsr5_PCCPE30_ImplicitlyMoveConvertiblePairIS5_S6_EEEbE4typeELb1EEEOS5_OS6_(ptr noundef nonnull align 8 dereferenceable(12) %85, ptr noundef nonnull align 8 dereferenceable(8) %65, ptr noundef nonnull align 4 dereferenceable(4) %62)
  call void @_ZNSt4pairIS_IdiEiEC2IS0_iTnNSt9enable_ifIXaaclsr5_PCCPE18_ConstructiblePairIT_T0_EEclsr5_PCCPE26_ImplicitlyConvertiblePairIS4_S5_EEEbE4typeELb1EEERKS0_RKi(ptr noundef nonnull align 8 dereferenceable(20) %84, ptr noundef nonnull align 8 dereferenceable(12) %85, ptr noundef nonnull align 4 dereferenceable(4) %72)
  invoke void @_ZNSt6vectorISt4pairIS0_IdiEiESaIS2_EE9push_backEOS2_(ptr noundef nonnull align 8 dereferenceable(24) %576, ptr noundef nonnull align 8 dereferenceable(20) %84)
          to label %577 unwind label %582

577:                                              ; preds = %573
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %85) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %84) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %72) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %65) #9
  br label %578

578:                                              ; preds = %382, %577
  %storemerge174.in = load i32, ptr %63, align 4, !tbaa !12
  %storemerge174 = add nsw i32 %storemerge174.in, 1
  store i32 %storemerge174, ptr %63, align 4, !tbaa !12
  %579 = icmp slt i32 %storemerge174, %309
  br i1 %579, label %.lr.ph252, label %._crit_edge253.loopexit, !llvm.loop !33

580:                                              ; preds = %569
  %581 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %83) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %82) #9
  br label %584

582:                                              ; preds = %573
  %583 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %85) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %84) #9
  br label %584

584:                                              ; preds = %582, %580, %566
  %.pn178.pn.pn.pn = phi { ptr, i32 } [ %.pn178.pn.pn, %566 ], [ %583, %582 ], [ %581, %580 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %72) #9
  br label %585

585:                                              ; preds = %584, %434, %421, %419, %397, %395
  %.pn183 = phi { ptr, i32 } [ %435, %434 ], [ %.pn178.pn.pn.pn, %584 ], [ %396, %395 ], [ %422, %421 ], [ %420, %419 ], [ %398, %397 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %65) #9
  br label %586

586:                                              ; preds = %585, %383
  %.pn183.pn = phi { ptr, i32 } [ %.pn183, %585 ], [ %384, %383 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %63) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %62) #9
  br label %619

587:                                              ; preds = %._crit_edge256
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %86) #9
  %588 = fadd double %363, -1.000000e+10
  store double %588, ptr %86, align 8, !tbaa !6
  %589 = call noundef i32 @_Z3sgnRKd(ptr noundef nonnull align 8 dereferenceable(8) %86)
  %590 = icmp sgt i32 %589, -1
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %86) #9
  br i1 %590, label %603, label %591, !llvm.loop !34

591:                                              ; preds = %587
  %592 = invoke noundef double @_Z10getMinDistRKSt6vectorIS_ISt4pairIS0_IdiEiESaIS2_EESaIS4_EEiii(ptr noundef nonnull align 8 dereferenceable(24) %60, i32 noundef %316, i32 noundef %323, i32 noundef 2)
          to label %593 unwind label %605

593:                                              ; preds = %591
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %86) #9
  %594 = fadd double %592, -1.000000e+10
  store double %594, ptr %86, align 8, !tbaa !6
  %595 = call noundef i32 @_Z3sgnRKd(ptr noundef nonnull align 8 dereferenceable(8) %86)
  %596 = icmp sgt i32 %595, -1
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %86) #9
  br i1 %596, label %603, label %597, !llvm.loop !34

597:                                              ; preds = %593
  %598 = invoke noundef double @_Z10getMinDistRKSt6vectorIS_ISt4pairIS0_IdiEiESaIS2_EESaIS4_EEiii(ptr noundef nonnull align 8 dereferenceable(24) %60, i32 noundef %316, i32 noundef %323, i32 noundef 3)
          to label %599 unwind label %605

599:                                              ; preds = %597
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %86) #9
  %600 = fadd double %598, -1.000000e+10
  store double %600, ptr %86, align 8, !tbaa !6
  %601 = call noundef i32 @_Z3sgnRKd(ptr noundef nonnull align 8 dereferenceable(8) %86)
  %602 = icmp sgt i32 %601, -1
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %86) #9
  br i1 %602, label %603, label %.critedge216, !llvm.loop !34

603:                                              ; preds = %599, %593, %587
  %604 = call i32 @puts(ptr noundef nonnull dereferenceable(1) @.str.2)
  br label %614

605:                                              ; preds = %597, %591, %._crit_edge256
  %606 = landingpad { ptr, i32 }
          cleanup
  br label %619

.critedge216:                                     ; preds = %599
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %87) #9
  %607 = fadd double %363, %592
  %608 = load i32, ptr %1, align 4, !tbaa !12
  %609 = shl nsw i32 %608, 1
  %610 = add nsw i32 %609, -3
  %611 = sitofp i32 %610 to double
  %612 = call double @llvm.fmuladd.f64(double %611, double %598, double %607)
  store double %612, ptr %87, align 8, !tbaa !6
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %88) #9
  store i8 10, ptr %88, align 1, !tbaa !14
  invoke void @_Z7writeDBRKdRKc(ptr noundef nonnull align 8 dereferenceable(8) %87, ptr noundef nonnull align 1 dereferenceable(1) %88)
          to label %613 unwind label %617

613:                                              ; preds = %.critedge216
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %88) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %87) #9
  br label %614

614:                                              ; preds = %603, %613
  call void @_ZNSt6vectorIS_ISt4pairIS0_IdiEiESaIS2_EESaIS4_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %60) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %60) #9
  %615 = getelementptr inbounds i8, ptr %52, i64 24
  call void @_ZNSt6vectorI5PointSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %615) #9
  call void @_ZNSt6vectorI5PointSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %52) #9
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %52) #9
  call void @_ZNSt6vectorI5PointSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %51) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %51) #9
  call void @_ZNSt6vectorISt4pairI4LineiESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %37) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %37) #9
  call void @_ZNSt6vectorI5PointSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %34) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %34) #9
  br label %616

616:                                              ; preds = %614, %224, %214, %112
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %6) #9
  call void @_ZN13ConvexPolygonD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %5) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %5) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %4) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %3) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %2) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %1) #9
  ret void

617:                                              ; preds = %.critedge216
  %618 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %88) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %87) #9
  br label %619

619:                                              ; preds = %605, %617, %586
  %.pn183.pn.pn = phi { ptr, i32 } [ %.pn183.pn, %586 ], [ %618, %617 ], [ %606, %605 ]
  call void @_ZNSt6vectorIS_ISt4pairIS0_IdiEiESaIS2_EESaIS4_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %60) #9
  br label %620

620:                                              ; preds = %619, %364
  %.pn183.pn.pn.pn = phi { ptr, i32 } [ %.pn183.pn.pn, %619 ], [ %365, %364 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %60) #9
  br label %621

621:                                              ; preds = %331, %620, %351, %333, %329, %304
  %.pn191 = phi { ptr, i32 } [ %305, %304 ], [ %330, %329 ], [ %332, %331 ], [ %352, %351 ], [ %.pn183.pn.pn.pn, %620 ], [ %334, %333 ]
  %622 = getelementptr inbounds i8, ptr %52, i64 24
  call void @_ZNSt6vectorI5PointSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %622) #9
  call void @_ZNSt6vectorI5PointSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %52) #9
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %52) #9
  call void @_ZNSt6vectorI5PointSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %51) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %51) #9
  br label %623

623:                                              ; preds = %621, %291
  %.pn193.pn.pn = phi { ptr, i32 } [ %.pn193.pn, %291 ], [ %.pn191, %621 ]
  call void @_ZNSt6vectorISt4pairI4LineiESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %37) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %37) #9
  call void @_ZNSt6vectorI5PointSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %34) #9
  br label %624

624:                                              ; preds = %623, %243
  %.pn193.pn.pn.pn = phi { ptr, i32 } [ %.pn193.pn.pn, %623 ], [ %244, %243 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %34) #9
  br label %625

625:                                              ; preds = %624, %219, %124, %119
  %.pn210.pn.pn = phi { ptr, i32 } [ %.pn210.pn, %219 ], [ %.pn193.pn.pn.pn, %624 ], [ %.pn166, %124 ], [ %.pn, %119 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %6) #9
  br label %626

626:                                              ; preds = %625, %113
  %.pn210.pn.pn.pn = phi { ptr, i32 } [ %.pn210.pn.pn, %625 ], [ %114, %113 ]
  call void @_ZN13ConvexPolygonD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %5) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %5) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %4) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %3) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %2) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %1) #9
  resume { ptr, i32 } %.pn210.pn.pn.pn
}

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

; Function Attrs: nofree nounwind
declare noundef i32 @__isoc99_scanf(ptr nocapture noundef readonly, ...) local_unnamed_addr #2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN5Point4readEv(ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #0 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN4Line4readEv(ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #0 align 2

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

; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #5

; Function Attrs: mustprogress nounwind uwtable
declare dso_local { double, double } @_ZNK5PointmiERKS_(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #6 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK4Line22hasSegmentIntersectionERKS_RKb(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(1)) local_unnamed_addr #0 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK13ConvexPolygon22hasSegmentIntersectionERK4LineRKb(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(1)) local_unnamed_addr #0 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef double @_ZNK5Point3lenEv(ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #0 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local { double, double } @_ZNK5PointplERKS_(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSaI5PointEC2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #6 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt6vectorI5PointSaIS0_EEC2ESt16initializer_listIS0_ERKS1_(ptr noundef nonnull align 8 dereferenceable(24), ptr, i64, ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #0 align 2

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

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

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSaISt6vectorISt4pairIS0_IdiEiESaIS2_EEEC2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #6 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt6vectorIS_ISt4pairIS0_IdiEiESaIS2_EESaIS4_EEC2EmRKS5_(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef, ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #0 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorI5PointSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) local_unnamed_addr #6 align 2

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

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i32 @_Z3sgnRKd(ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #4

; Function Attrs: nofree nounwind
declare noundef i32 @puts(ptr nocapture noundef readonly) local_unnamed_addr #2

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK4Line21containsLeftHalfPlaneERK5PointRKb(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 1 dereferenceable(1)) local_unnamed_addr #6 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local { double, double } @_ZNK4Line7reflectERK5Point(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #0 align 2

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(36) ptr @_ZNSt6vectorISt4pairI4LineiESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) local_unnamed_addr #6 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNK4Line9intersectERKS_(ptr dead_on_unwind noalias writable sret(%"struct.std::pair.44") align 8, ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #0 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_Z13sortAndUniqueI5PointEvRSt6vectorIT_SaIS2_EE(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #3

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZN9__gnu_cxxmiIP5PointSt6vectorIS1_SaIS1_EEEENS_17__normal_iteratorIT_T0_E15difference_typeERKS9_SC_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #4

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local ptr @_ZSt11lower_boundIN9__gnu_cxx17__normal_iteratorIP5PointSt6vectorIS2_SaIS2_EEEES2_ET_S8_S8_RKT0_(ptr, ptr, ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #3

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

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

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

; Function Attrs: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) local_unnamed_addr #7

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local { double, double } @_ZNK5PointmlERKd(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #6 align 2

; Function Attrs: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare double @llvm.fmuladd.f64(double, double, double) #8

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt15__new_allocatorI5PointED2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt15__new_allocatorISt6vectorISt4pairIS1_IdiEiESaIS3_EEED2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #6 align 2

attributes #0 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { nofree nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { inlinehint mustprogress 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 = { 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 #5 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #6 = { 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 #7 = { noreturn nounwind "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 #8 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #9 = { nounwind }
attributes #10 = { noreturn 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 = !{i64 0, i64 8, !6, i64 8, i64 8, !6}
!6 = !{!7, !7, i64 0}
!7 = !{!"double", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!11, !11, i64 0}
!11 = !{!"bool", !8, i64 0}
!12 = !{!13, !13, i64 0}
!13 = !{!"int", !8, i64 0}
!14 = !{!8, !8, i64 0}
!15 = distinct !{!15, !16}
!16 = !{!"llvm.loop.mustprogress"}
!17 = !{i64 0, i64 8, !6, i64 8, i64 8, !6, i64 16, i64 8, !6, i64 24, i64 8, !6}
!18 = distinct !{!18, !16}
!19 = distinct !{!19, !16}
!20 = distinct !{!20, !16}
!21 = !{!22, !11, i64 16}
!22 = !{!"_ZTSSt4pairI5PointbE", !23, i64 0, !11, i64 16}
!23 = !{!"_ZTS5Point", !7, i64 0, !7, i64 8}
!24 = !{i8 0, i8 2}
!25 = !{}
!26 = distinct !{!26, !16}
!27 = distinct !{!27, !16}
!28 = distinct !{!28, !16}
!29 = !{!30, !13, i64 32}
!30 = !{!"_ZTSSt4pairI4LineiE", !31, i64 0, !13, i64 32}
!31 = !{!"_ZTS4Line", !23, i64 0, !23, i64 16}
!32 = distinct !{!32, !16}
!33 = distinct !{!33, !16}
!34 = distinct !{!34, !16}


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