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

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

%"struct.ClipperLib::IntPoint" = type { i64, i64 }
%"struct.ClipperLib::DoublePoint" = type { double, double }
%"class.ClipperLib::ClipperOffset" = type { double, double, %"class.std::vector.28", %"class.std::vector", %"class.std::vector", %"class.std::vector.49", double, double, double, double, double, double, %"struct.ClipperLib::IntPoint", %"class.ClipperLib::PolyNode" }
%"class.std::vector.28" = type { %"struct.std::_Vector_base.29" }
%"struct.std::_Vector_base.29" = type { %"struct.std::_Vector_base<std::vector<ClipperLib::IntPoint>, std::allocator<std::vector<ClipperLib::IntPoint>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::vector<ClipperLib::IntPoint>, std::allocator<std::vector<ClipperLib::IntPoint>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::vector<ClipperLib::IntPoint>, std::allocator<std::vector<ClipperLib::IntPoint>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::vector<ClipperLib::IntPoint>, std::allocator<std::vector<ClipperLib::IntPoint>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<ClipperLib::IntPoint, std::allocator<ClipperLib::IntPoint>>::_Vector_impl" }
%"struct.std::_Vector_base<ClipperLib::IntPoint, std::allocator<ClipperLib::IntPoint>>::_Vector_impl" = type { %"struct.std::_Vector_base<ClipperLib::IntPoint, std::allocator<ClipperLib::IntPoint>>::_Vector_impl_data" }
%"struct.std::_Vector_base<ClipperLib::IntPoint, std::allocator<ClipperLib::IntPoint>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.49" = type { %"struct.std::_Vector_base.50" }
%"struct.std::_Vector_base.50" = type { %"struct.std::_Vector_base<ClipperLib::DoublePoint, std::allocator<ClipperLib::DoublePoint>>::_Vector_impl" }
%"struct.std::_Vector_base<ClipperLib::DoublePoint, std::allocator<ClipperLib::DoublePoint>>::_Vector_impl" = type { %"struct.std::_Vector_base<ClipperLib::DoublePoint, std::allocator<ClipperLib::DoublePoint>>::_Vector_impl_data" }
%"struct.std::_Vector_base<ClipperLib::DoublePoint, std::allocator<ClipperLib::DoublePoint>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.ClipperLib::PolyNode" = type { ptr, %"class.std::vector", %"class.std::vector.0", ptr, i32, i8, i32, i32 }
%"class.std::vector.0" = type { %"struct.std::_Vector_base.1" }
%"struct.std::_Vector_base.1" = type { %"struct.std::_Vector_base<ClipperLib::PolyNode *, std::allocator<ClipperLib::PolyNode *>>::_Vector_impl" }
%"struct.std::_Vector_base<ClipperLib::PolyNode *, std::allocator<ClipperLib::PolyNode *>>::_Vector_impl" = type { %"struct.std::_Vector_base<ClipperLib::PolyNode *, std::allocator<ClipperLib::PolyNode *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<ClipperLib::PolyNode *, std::allocator<ClipperLib::PolyNode *>>::_Vector_impl_data" = type { ptr, ptr, ptr }

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK10ClipperLib8PolyNode10ChildCountEv(ptr noundef nonnull align 8 dereferenceable(80)) #1 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) #2

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZN10ClipperLib5RoundEd(double noundef) #4

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local { double, double } @_ZN10ClipperLib13GetUnitNormalERKNS_8IntPointES2_(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(16)) #5

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN10ClipperLib13ClipperOffset8DoOffsetEd(ptr noundef nonnull align 8 dereferenceable(256) %0, double noundef %1) #5 align 2 {
  %3 = alloca ptr, align 8
  %4 = alloca double, align 8
  %5 = alloca i32, align 4
  %6 = alloca ptr, align 8
  %7 = alloca double, align 8
  %8 = alloca double, align 8
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca ptr, align 8
  %12 = alloca i32, align 4
  %13 = alloca double, align 8
  %14 = alloca double, align 8
  %15 = alloca i64, align 8
  %16 = alloca %"struct.ClipperLib::IntPoint", align 8
  %17 = alloca double, align 8
  %18 = alloca double, align 8
  %19 = alloca double, align 8
  %20 = alloca i32, align 4
  %21 = alloca %"struct.ClipperLib::IntPoint", align 8
  %22 = alloca i32, align 4
  %23 = alloca %"struct.ClipperLib::DoublePoint", align 8
  %24 = alloca %"struct.ClipperLib::DoublePoint", align 8
  %25 = alloca %"struct.ClipperLib::DoublePoint", align 8
  %26 = alloca i32, align 4
  %27 = alloca i32, align 4
  %28 = alloca i32, align 4
  %29 = alloca i32, align 4
  %30 = alloca %"struct.ClipperLib::DoublePoint", align 8
  %31 = alloca i32, align 4
  %32 = alloca %"struct.ClipperLib::DoublePoint", align 8
  %33 = alloca %"struct.ClipperLib::DoublePoint", align 8
  %34 = alloca i32, align 4
  %35 = alloca i32, align 4
  %36 = alloca i32, align 4
  %37 = alloca %"struct.ClipperLib::IntPoint", align 8
  %38 = alloca i32, align 4
  %39 = alloca %"struct.ClipperLib::IntPoint", align 8
  %40 = alloca %"struct.ClipperLib::IntPoint", align 8
  %41 = alloca i32, align 4
  %42 = alloca %"struct.ClipperLib::DoublePoint", align 8
  %43 = alloca i32, align 4
  %44 = alloca %"struct.ClipperLib::DoublePoint", align 8
  %45 = alloca %"struct.ClipperLib::DoublePoint", align 8
  %46 = alloca i32, align 4
  %47 = alloca %"struct.ClipperLib::IntPoint", align 8
  %48 = alloca %"struct.ClipperLib::IntPoint", align 8
  store ptr %0, ptr %3, align 8, !tbaa !5
  store double %1, ptr %4, align 8, !tbaa !9
  %49 = load ptr, ptr %3, align 8
  %50 = getelementptr inbounds %"class.ClipperLib::ClipperOffset", ptr %49, i32 0, i32 2
  call void @_ZNSt6vectorIS_IN10ClipperLib8IntPointESaIS1_EESaIS3_EE5clearEv(ptr noundef nonnull align 8 dereferenceable(24) %50) #7
  %51 = load double, ptr %4, align 8, !tbaa !9
  %52 = getelementptr inbounds %"class.ClipperLib::ClipperOffset", ptr %49, i32 0, i32 6
  store double %51, ptr %52, align 8, !tbaa !11
  %53 = load double, ptr %4, align 8, !tbaa !9
  %54 = fcmp ogt double %53, 0xBBC79CA10C924223
  br i1 %54, label %55, label %89

55:                                               ; preds = %2
  %56 = load double, ptr %4, align 8, !tbaa !9
  %57 = fcmp olt double %56, 0x3BC79CA10C924223
  br i1 %57, label %58, label %89

58:                                               ; preds = %55
  %59 = getelementptr inbounds %"class.ClipperLib::ClipperOffset", ptr %49, i32 0, i32 2
  %60 = getelementptr inbounds %"class.ClipperLib::ClipperOffset", ptr %49, i32 0, i32 13
  %61 = call noundef i32 @_ZNK10ClipperLib8PolyNode10ChildCountEv(ptr noundef nonnull align 8 dereferenceable(80) %60)
  %62 = sext i32 %61 to i64
  call void @_ZNSt6vectorIS_IN10ClipperLib8IntPointESaIS1_EESaIS3_EE7reserveEm(ptr noundef nonnull align 8 dereferenceable(24) %59, i64 noundef %62)
  call void @llvm.lifetime.start.p0(i64 4, ptr %5) #7
  store i32 0, ptr %5, align 4, !tbaa !36
  br label %63

63:                                               ; preds = %85, %58
  %64 = load i32, ptr %5, align 4, !tbaa !36
  %65 = getelementptr inbounds %"class.ClipperLib::ClipperOffset", ptr %49, i32 0, i32 13
  %66 = call noundef i32 @_ZNK10ClipperLib8PolyNode10ChildCountEv(ptr noundef nonnull align 8 dereferenceable(80) %65)
  %67 = icmp slt i32 %64, %66
  br i1 %67, label %69, label %68

68:                                               ; preds = %63
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #7
  br label %88

69:                                               ; preds = %63
  call void @llvm.lifetime.start.p0(i64 8, ptr %6) #7
  %70 = getelementptr inbounds %"class.ClipperLib::ClipperOffset", ptr %49, i32 0, i32 13
  %71 = getelementptr inbounds %"class.ClipperLib::PolyNode", ptr %70, i32 0, i32 2
  %72 = load i32, ptr %5, align 4, !tbaa !36
  %73 = sext i32 %72 to i64
  %74 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIPN10ClipperLib8PolyNodeESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %71, i64 noundef %73) #7
  %75 = load ptr, ptr %74, align 8, !tbaa !5
  store ptr %75, ptr %6, align 8, !tbaa !5
  %76 = load ptr, ptr %6, align 8, !tbaa !5
  %77 = getelementptr inbounds %"class.ClipperLib::PolyNode", ptr %76, i32 0, i32 7
  %78 = load i32, ptr %77, align 4, !tbaa !37
  %79 = icmp eq i32 %78, 0
  br i1 %79, label %80, label %84

80:                                               ; preds = %69
  %81 = getelementptr inbounds %"class.ClipperLib::ClipperOffset", ptr %49, i32 0, i32 2
  %82 = load ptr, ptr %6, align 8, !tbaa !5
  %83 = getelementptr inbounds %"class.ClipperLib::PolyNode", ptr %82, i32 0, i32 1
  call void @_ZNSt6vectorIS_IN10ClipperLib8IntPointESaIS1_EESaIS3_EE9push_backERKS3_(ptr noundef nonnull align 8 dereferenceable(24) %81, ptr noundef nonnull align 8 dereferenceable(24) %83)
  br label %84

84:                                               ; preds = %80, %69
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #7
  br label %85

85:                                               ; preds = %84
  %86 = load i32, ptr %5, align 4, !tbaa !36
  %87 = add nsw i32 %86, 1
  store i32 %87, ptr %5, align 4, !tbaa !36
  br label %63, !llvm.loop !38

88:                                               ; preds = %68
  br label %735

89:                                               ; preds = %55, %2
  %90 = getelementptr inbounds %"class.ClipperLib::ClipperOffset", ptr %49, i32 0, i32 0
  %91 = load double, ptr %90, align 8, !tbaa !40
  %92 = fcmp ogt double %91, 2.000000e+00
  br i1 %92, label %93, label %101

93:                                               ; preds = %89
  %94 = getelementptr inbounds %"class.ClipperLib::ClipperOffset", ptr %49, i32 0, i32 0
  %95 = load double, ptr %94, align 8, !tbaa !40
  %96 = getelementptr inbounds %"class.ClipperLib::ClipperOffset", ptr %49, i32 0, i32 0
  %97 = load double, ptr %96, align 8, !tbaa !40
  %98 = fmul double %95, %97
  %99 = fdiv double 2.000000e+00, %98
  %100 = getelementptr inbounds %"class.ClipperLib::ClipperOffset", ptr %49, i32 0, i32 10
  store double %99, ptr %100, align 8, !tbaa !41
  br label %103

101:                                              ; preds = %89
  %102 = getelementptr inbounds %"class.ClipperLib::ClipperOffset", ptr %49, i32 0, i32 10
  store double 5.000000e-01, ptr %102, align 8, !tbaa !41
  br label %103

103:                                              ; preds = %101, %93
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #7
  %104 = getelementptr inbounds %"class.ClipperLib::ClipperOffset", ptr %49, i32 0, i32 1
  %105 = load double, ptr %104, align 8, !tbaa !42
  %106 = fcmp ole double %105, 0.000000e+00
  br i1 %106, label %107, label %108

107:                                              ; preds = %103
  store double 2.500000e-01, ptr %7, align 8, !tbaa !9
  br label %123

108:                                              ; preds = %103
  %109 = getelementptr inbounds %"class.ClipperLib::ClipperOffset", ptr %49, i32 0, i32 1
  %110 = load double, ptr %109, align 8, !tbaa !42
  %111 = load double, ptr %4, align 8, !tbaa !9
  %112 = call double @llvm.fabs.f64(double %111)
  %113 = fmul double %112, 2.500000e-01
  %114 = fcmp ogt double %110, %113
  br i1 %114, label %115, label %119

115:                                              ; preds = %108
  %116 = load double, ptr %4, align 8, !tbaa !9
  %117 = call double @llvm.fabs.f64(double %116)
  %118 = fmul double %117, 2.500000e-01
  store double %118, ptr %7, align 8, !tbaa !9
  br label %122

119:                                              ; preds = %108
  %120 = getelementptr inbounds %"class.ClipperLib::ClipperOffset", ptr %49, i32 0, i32 1
  %121 = load double, ptr %120, align 8, !tbaa !42
  store double %121, ptr %7, align 8, !tbaa !9
  br label %122

122:                                              ; preds = %119, %115
  br label %123

123:                                              ; preds = %122, %107
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #7
  %124 = load double, ptr %7, align 8, !tbaa !9
  %125 = load double, ptr %4, align 8, !tbaa !9
  %126 = call double @llvm.fabs.f64(double %125)
  %127 = fdiv double %124, %126
  %128 = fsub double 1.000000e+00, %127
  %129 = call double @acos(double noundef %128) #7
  %130 = fdiv double 0x400921FB54442D18, %129
  store double %130, ptr %8, align 8, !tbaa !9
  %131 = load double, ptr %8, align 8, !tbaa !9
  %132 = load double, ptr %4, align 8, !tbaa !9
  %133 = call double @llvm.fabs.f64(double %132)
  %134 = fmul double %133, 0x400921FB54442D18
  %135 = fcmp ogt double %131, %134
  br i1 %135, label %136, label %140

136:                                              ; preds = %123
  %137 = load double, ptr %4, align 8, !tbaa !9
  %138 = call double @llvm.fabs.f64(double %137)
  %139 = fmul double %138, 0x400921FB54442D18
  store double %139, ptr %8, align 8, !tbaa !9
  br label %140

140:                                              ; preds = %136, %123
  %141 = load double, ptr %8, align 8, !tbaa !9
  %142 = fdiv double 0x401921FB54442D18, %141
  %143 = call double @sin(double noundef %142) #7
  %144 = getelementptr inbounds %"class.ClipperLib::ClipperOffset", ptr %49, i32 0, i32 8
  store double %143, ptr %144, align 8, !tbaa !43
  %145 = load double, ptr %8, align 8, !tbaa !9
  %146 = fdiv double 0x401921FB54442D18, %145
  %147 = call double @cos(double noundef %146) #7
  %148 = getelementptr inbounds %"class.ClipperLib::ClipperOffset", ptr %49, i32 0, i32 9
  store double %147, ptr %148, align 8, !tbaa !44
  %149 = load double, ptr %8, align 8, !tbaa !9
  %150 = fdiv double %149, 0x401921FB54442D18
  %151 = getelementptr inbounds %"class.ClipperLib::ClipperOffset", ptr %49, i32 0, i32 11
  store double %150, ptr %151, align 8, !tbaa !45
  %152 = load double, ptr %4, align 8, !tbaa !9
  %153 = fcmp olt double %152, 0.000000e+00
  br i1 %153, label %154, label %159

154:                                              ; preds = %140
  %155 = getelementptr inbounds %"class.ClipperLib::ClipperOffset", ptr %49, i32 0, i32 8
  %156 = load double, ptr %155, align 8, !tbaa !43
  %157 = fneg double %156
  %158 = getelementptr inbounds %"class.ClipperLib::ClipperOffset", ptr %49, i32 0, i32 8
  store double %157, ptr %158, align 8, !tbaa !43
  br label %159

159:                                              ; preds = %154, %140
  %160 = getelementptr inbounds %"class.ClipperLib::ClipperOffset", ptr %49, i32 0, i32 2
  %161 = getelementptr inbounds %"class.ClipperLib::ClipperOffset", ptr %49, i32 0, i32 13
  %162 = call noundef i32 @_ZNK10ClipperLib8PolyNode10ChildCountEv(ptr noundef nonnull align 8 dereferenceable(80) %161)
  %163 = mul nsw i32 %162, 2
  %164 = sext i32 %163 to i64
  call void @_ZNSt6vectorIS_IN10ClipperLib8IntPointESaIS1_EESaIS3_EE7reserveEm(ptr noundef nonnull align 8 dereferenceable(24) %160, i64 noundef %164)
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #7
  store i32 0, ptr %9, align 4, !tbaa !36
  br label %165

165:                                              ; preds = %731, %159
  %166 = load i32, ptr %9, align 4, !tbaa !36
  %167 = getelementptr inbounds %"class.ClipperLib::ClipperOffset", ptr %49, i32 0, i32 13
  %168 = call noundef i32 @_ZNK10ClipperLib8PolyNode10ChildCountEv(ptr noundef nonnull align 8 dereferenceable(80) %167)
  %169 = icmp slt i32 %166, %168
  br i1 %169, label %171, label %170

170:                                              ; preds = %165
  store i32 5, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #7
  br label %734

171:                                              ; preds = %165
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #7
  %172 = getelementptr inbounds %"class.ClipperLib::ClipperOffset", ptr %49, i32 0, i32 13
  %173 = getelementptr inbounds %"class.ClipperLib::PolyNode", ptr %172, i32 0, i32 2
  %174 = load i32, ptr %9, align 4, !tbaa !36
  %175 = sext i32 %174 to i64
  %176 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIPN10ClipperLib8PolyNodeESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %173, i64 noundef %175) #7
  %177 = load ptr, ptr %176, align 8, !tbaa !5
  store ptr %177, ptr %11, align 8, !tbaa !5
  %178 = load ptr, ptr %11, align 8, !tbaa !5
  %179 = getelementptr inbounds %"class.ClipperLib::PolyNode", ptr %178, i32 0, i32 1
  %180 = getelementptr inbounds %"class.ClipperLib::ClipperOffset", ptr %49, i32 0, i32 3
  %181 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIN10ClipperLib8IntPointESaIS1_EEaSERKS3_(ptr noundef nonnull align 8 dereferenceable(24) %180, ptr noundef nonnull align 8 dereferenceable(24) %179)
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #7
  %182 = getelementptr inbounds %"class.ClipperLib::ClipperOffset", ptr %49, i32 0, i32 3
  %183 = call noundef i64 @_ZNKSt6vectorIN10ClipperLib8IntPointESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %182) #7
  %184 = trunc i64 %183 to i32
  store i32 %184, ptr %12, align 4, !tbaa !36
  %185 = load i32, ptr %12, align 4, !tbaa !36
  %186 = icmp eq i32 %185, 0
  br i1 %186, label %198, label %187

187:                                              ; preds = %171
  %188 = load double, ptr %4, align 8, !tbaa !9
  %189 = fcmp ole double %188, 0.000000e+00
  br i1 %189, label %190, label %199

190:                                              ; preds = %187
  %191 = load i32, ptr %12, align 4, !tbaa !36
  %192 = icmp slt i32 %191, 3
  br i1 %192, label %198, label %193

193:                                              ; preds = %190
  %194 = load ptr, ptr %11, align 8, !tbaa !5
  %195 = getelementptr inbounds %"class.ClipperLib::PolyNode", ptr %194, i32 0, i32 7
  %196 = load i32, ptr %195, align 4, !tbaa !37
  %197 = icmp ne i32 %196, 0
  br i1 %197, label %198, label %199

198:                                              ; preds = %193, %190, %171
  store i32 7, ptr %10, align 4
  br label %728

199:                                              ; preds = %193, %187
  %200 = getelementptr inbounds %"class.ClipperLib::ClipperOffset", ptr %49, i32 0, i32 4
  call void @_ZNSt6vectorIN10ClipperLib8IntPointESaIS1_EE5clearEv(ptr noundef nonnull align 8 dereferenceable(24) %200) #7
  %201 = load i32, ptr %12, align 4, !tbaa !36
  %202 = icmp eq i32 %201, 1
  br i1 %202, label %203, label %299

203:                                              ; preds = %199
  %204 = load ptr, ptr %11, align 8, !tbaa !5
  %205 = getelementptr inbounds %"class.ClipperLib::PolyNode", ptr %204, i32 0, i32 6
  %206 = load i32, ptr %205, align 8, !tbaa !46
  %207 = icmp eq i32 %206, 1
  br i1 %207, label %208, label %257

208:                                              ; preds = %203
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #7
  store double 1.000000e+00, ptr %13, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #7
  store double 0.000000e+00, ptr %14, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #7
  store i64 1, ptr %15, align 8, !tbaa !47
  br label %209

209:                                              ; preds = %253, %208
  %210 = load i64, ptr %15, align 8, !tbaa !47
  %211 = sitofp i64 %210 to double
  %212 = load double, ptr %8, align 8, !tbaa !9
  %213 = fcmp ole double %211, %212
  br i1 %213, label %215, label %214

214:                                              ; preds = %209
  store i32 8, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #7
  br label %256

215:                                              ; preds = %209
  %216 = getelementptr inbounds %"class.ClipperLib::ClipperOffset", ptr %49, i32 0, i32 4
  call void @llvm.lifetime.start.p0(i64 16, ptr %16) #7
  %217 = getelementptr inbounds %"class.ClipperLib::ClipperOffset", ptr %49, i32 0, i32 3
  %218 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorIN10ClipperLib8IntPointESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %217, i64 noundef 0) #7
  %219 = getelementptr inbounds %"struct.ClipperLib::IntPoint", ptr %218, i32 0, i32 0
  %220 = load i64, ptr %219, align 8, !tbaa !48
  %221 = sitofp i64 %220 to double
  %222 = load double, ptr %13, align 8, !tbaa !9
  %223 = load double, ptr %4, align 8, !tbaa !9
  %224 = call double @llvm.fmuladd.f64(double %222, double %223, double %221)
  %225 = call noundef i64 @_ZN10ClipperLib5RoundEd(double noundef %224)
  %226 = getelementptr inbounds %"class.ClipperLib::ClipperOffset", ptr %49, i32 0, i32 3
  %227 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorIN10ClipperLib8IntPointESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %226, i64 noundef 0) #7
  %228 = getelementptr inbounds %"struct.ClipperLib::IntPoint", ptr %227, i32 0, i32 1
  %229 = load i64, ptr %228, align 8, !tbaa !49
  %230 = sitofp i64 %229 to double
  %231 = load double, ptr %14, align 8, !tbaa !9
  %232 = load double, ptr %4, align 8, !tbaa !9
  %233 = call double @llvm.fmuladd.f64(double %231, double %232, double %230)
  %234 = call noundef i64 @_ZN10ClipperLib5RoundEd(double noundef %233)
  call void @_ZN10ClipperLib8IntPointC2Exx(ptr noundef nonnull align 8 dereferenceable(16) %16, i64 noundef %225, i64 noundef %234)
  call void @_ZNSt6vectorIN10ClipperLib8IntPointESaIS1_EE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %216, ptr noundef nonnull align 8 dereferenceable(16) %16)
  call void @llvm.lifetime.end.p0(i64 16, ptr %16) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #7
  %235 = load double, ptr %13, align 8, !tbaa !9
  store double %235, ptr %17, align 8, !tbaa !9
  %236 = load double, ptr %13, align 8, !tbaa !9
  %237 = getelementptr inbounds %"class.ClipperLib::ClipperOffset", ptr %49, i32 0, i32 9
  %238 = load double, ptr %237, align 8, !tbaa !44
  %239 = getelementptr inbounds %"class.ClipperLib::ClipperOffset", ptr %49, i32 0, i32 8
  %240 = load double, ptr %239, align 8, !tbaa !43
  %241 = load double, ptr %14, align 8, !tbaa !9
  %242 = fmul double %240, %241
  %243 = fneg double %242
  %244 = call double @llvm.fmuladd.f64(double %236, double %238, double %243)
  store double %244, ptr %13, align 8, !tbaa !9
  %245 = load double, ptr %17, align 8, !tbaa !9
  %246 = getelementptr inbounds %"class.ClipperLib::ClipperOffset", ptr %49, i32 0, i32 8
  %247 = load double, ptr %246, align 8, !tbaa !43
  %248 = load double, ptr %14, align 8, !tbaa !9
  %249 = getelementptr inbounds %"class.ClipperLib::ClipperOffset", ptr %49, i32 0, i32 9
  %250 = load double, ptr %249, align 8, !tbaa !44
  %251 = fmul double %248, %250
  %252 = call double @llvm.fmuladd.f64(double %245, double %247, double %251)
  store double %252, ptr %14, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #7
  br label %253

253:                                              ; preds = %215
  %254 = load i64, ptr %15, align 8, !tbaa !47
  %255 = add nsw i64 %254, 1
  store i64 %255, ptr %15, align 8, !tbaa !47
  br label %209, !llvm.loop !50

256:                                              ; preds = %214
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #7
  br label %296

257:                                              ; preds = %203
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #7
  store double -1.000000e+00, ptr %18, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #7
  store double -1.000000e+00, ptr %19, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #7
  store i32 0, ptr %20, align 4, !tbaa !36
  br label %258

258:                                              ; preds = %292, %257
  %259 = load i32, ptr %20, align 4, !tbaa !36
  %260 = icmp slt i32 %259, 4
  br i1 %260, label %262, label %261

261:                                              ; preds = %258
  store i32 11, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #7
  br label %295

262:                                              ; preds = %258
  %263 = getelementptr inbounds %"class.ClipperLib::ClipperOffset", ptr %49, i32 0, i32 4
  call void @llvm.lifetime.start.p0(i64 16, ptr %21) #7
  %264 = getelementptr inbounds %"class.ClipperLib::ClipperOffset", ptr %49, i32 0, i32 3
  %265 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorIN10ClipperLib8IntPointESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %264, i64 noundef 0) #7
  %266 = getelementptr inbounds %"struct.ClipperLib::IntPoint", ptr %265, i32 0, i32 0
  %267 = load i64, ptr %266, align 8, !tbaa !48
  %268 = sitofp i64 %267 to double
  %269 = load double, ptr %18, align 8, !tbaa !9
  %270 = load double, ptr %4, align 8, !tbaa !9
  %271 = call double @llvm.fmuladd.f64(double %269, double %270, double %268)
  %272 = call noundef i64 @_ZN10ClipperLib5RoundEd(double noundef %271)
  %273 = getelementptr inbounds %"class.ClipperLib::ClipperOffset", ptr %49, i32 0, i32 3
  %274 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorIN10ClipperLib8IntPointESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %273, i64 noundef 0) #7
  %275 = getelementptr inbounds %"struct.ClipperLib::IntPoint", ptr %274, i32 0, i32 1
  %276 = load i64, ptr %275, align 8, !tbaa !49
  %277 = sitofp i64 %276 to double
  %278 = load double, ptr %19, align 8, !tbaa !9
  %279 = load double, ptr %4, align 8, !tbaa !9
  %280 = call double @llvm.fmuladd.f64(double %278, double %279, double %277)
  %281 = call noundef i64 @_ZN10ClipperLib5RoundEd(double noundef %280)
  call void @_ZN10ClipperLib8IntPointC2Exx(ptr noundef nonnull align 8 dereferenceable(16) %21, i64 noundef %272, i64 noundef %281)
  call void @_ZNSt6vectorIN10ClipperLib8IntPointESaIS1_EE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %263, ptr noundef nonnull align 8 dereferenceable(16) %21)
  call void @llvm.lifetime.end.p0(i64 16, ptr %21) #7
  %282 = load double, ptr %18, align 8, !tbaa !9
  %283 = fcmp olt double %282, 0.000000e+00
  br i1 %283, label %284, label %285

284:                                              ; preds = %262
  store double 1.000000e+00, ptr %18, align 8, !tbaa !9
  br label %291

285:                                              ; preds = %262
  %286 = load double, ptr %19, align 8, !tbaa !9
  %287 = fcmp olt double %286, 0.000000e+00
  br i1 %287, label %288, label %289

288:                                              ; preds = %285
  store double 1.000000e+00, ptr %19, align 8, !tbaa !9
  br label %290

289:                                              ; preds = %285
  store double -1.000000e+00, ptr %18, align 8, !tbaa !9
  br label %290

290:                                              ; preds = %289, %288
  br label %291

291:                                              ; preds = %290, %284
  br label %292

292:                                              ; preds = %291
  %293 = load i32, ptr %20, align 4, !tbaa !36
  %294 = add nsw i32 %293, 1
  store i32 %294, ptr %20, align 4, !tbaa !36
  br label %258, !llvm.loop !51

295:                                              ; preds = %261
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #7
  br label %296

296:                                              ; preds = %295, %256
  %297 = getelementptr inbounds %"class.ClipperLib::ClipperOffset", ptr %49, i32 0, i32 2
  %298 = getelementptr inbounds %"class.ClipperLib::ClipperOffset", ptr %49, i32 0, i32 4
  call void @_ZNSt6vectorIS_IN10ClipperLib8IntPointESaIS1_EESaIS3_EE9push_backERKS3_(ptr noundef nonnull align 8 dereferenceable(24) %297, ptr noundef nonnull align 8 dereferenceable(24) %298)
  store i32 7, ptr %10, align 4
  br label %728

299:                                              ; preds = %199
  %300 = getelementptr inbounds %"class.ClipperLib::ClipperOffset", ptr %49, i32 0, i32 5
  call void @_ZNSt6vectorIN10ClipperLib11DoublePointESaIS1_EE5clearEv(ptr noundef nonnull align 8 dereferenceable(24) %300) #7
  %301 = getelementptr inbounds %"class.ClipperLib::ClipperOffset", ptr %49, i32 0, i32 5
  %302 = load i32, ptr %12, align 4, !tbaa !36
  %303 = sext i32 %302 to i64
  call void @_ZNSt6vectorIN10ClipperLib11DoublePointESaIS1_EE7reserveEm(ptr noundef nonnull align 8 dereferenceable(24) %301, i64 noundef %303)
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #7
  store i32 0, ptr %22, align 4, !tbaa !36
  br label %304

304:                                              ; preds = %326, %299
  %305 = load i32, ptr %22, align 4, !tbaa !36
  %306 = load i32, ptr %12, align 4, !tbaa !36
  %307 = sub nsw i32 %306, 1
  %308 = icmp slt i32 %305, %307
  br i1 %308, label %310, label %309

309:                                              ; preds = %304
  store i32 14, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #7
  br label %329

310:                                              ; preds = %304
  %311 = getelementptr inbounds %"class.ClipperLib::ClipperOffset", ptr %49, i32 0, i32 5
  call void @llvm.lifetime.start.p0(i64 16, ptr %23) #7
  %312 = getelementptr inbounds %"class.ClipperLib::ClipperOffset", ptr %49, i32 0, i32 3
  %313 = load i32, ptr %22, align 4, !tbaa !36
  %314 = sext i32 %313 to i64
  %315 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorIN10ClipperLib8IntPointESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %312, i64 noundef %314) #7
  %316 = getelementptr inbounds %"class.ClipperLib::ClipperOffset", ptr %49, i32 0, i32 3
  %317 = load i32, ptr %22, align 4, !tbaa !36
  %318 = add nsw i32 %317, 1
  %319 = sext i32 %318 to i64
  %320 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorIN10ClipperLib8IntPointESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %316, i64 noundef %319) #7
  %321 = call { double, double } @_ZN10ClipperLib13GetUnitNormalERKNS_8IntPointES2_(ptr noundef nonnull align 8 dereferenceable(16) %315, ptr noundef nonnull align 8 dereferenceable(16) %320)
  %322 = getelementptr inbounds { double, double }, ptr %23, i32 0, i32 0
  %323 = extractvalue { double, double } %321, 0
  store double %323, ptr %322, align 8
  %324 = getelementptr inbounds { double, double }, ptr %23, i32 0, i32 1
  %325 = extractvalue { double, double } %321, 1
  store double %325, ptr %324, align 8
  call void @_ZNSt6vectorIN10ClipperLib11DoublePointESaIS1_EE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %311, ptr noundef nonnull align 8 dereferenceable(16) %23)
  call void @llvm.lifetime.end.p0(i64 16, ptr %23) #7
  br label %326

326:                                              ; preds = %310
  %327 = load i32, ptr %22, align 4, !tbaa !36
  %328 = add nsw i32 %327, 1
  store i32 %328, ptr %22, align 4, !tbaa !36
  br label %304, !llvm.loop !52

329:                                              ; preds = %309
  %330 = load ptr, ptr %11, align 8, !tbaa !5
  %331 = getelementptr inbounds %"class.ClipperLib::PolyNode", ptr %330, i32 0, i32 7
  %332 = load i32, ptr %331, align 4, !tbaa !37
  %333 = icmp eq i32 %332, 1
  br i1 %333, label %339, label %334

334:                                              ; preds = %329
  %335 = load ptr, ptr %11, align 8, !tbaa !5
  %336 = getelementptr inbounds %"class.ClipperLib::PolyNode", ptr %335, i32 0, i32 7
  %337 = load i32, ptr %336, align 4, !tbaa !37
  %338 = icmp eq i32 %337, 0
  br i1 %338, label %339, label %353

339:                                              ; preds = %334, %329
  %340 = getelementptr inbounds %"class.ClipperLib::ClipperOffset", ptr %49, i32 0, i32 5
  call void @llvm.lifetime.start.p0(i64 16, ptr %24) #7
  %341 = getelementptr inbounds %"class.ClipperLib::ClipperOffset", ptr %49, i32 0, i32 3
  %342 = load i32, ptr %12, align 4, !tbaa !36
  %343 = sub nsw i32 %342, 1
  %344 = sext i32 %343 to i64
  %345 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorIN10ClipperLib8IntPointESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %341, i64 noundef %344) #7
  %346 = getelementptr inbounds %"class.ClipperLib::ClipperOffset", ptr %49, i32 0, i32 3
  %347 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorIN10ClipperLib8IntPointESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %346, i64 noundef 0) #7
  %348 = call { double, double } @_ZN10ClipperLib13GetUnitNormalERKNS_8IntPointES2_(ptr noundef nonnull align 8 dereferenceable(16) %345, ptr noundef nonnull align 8 dereferenceable(16) %347)
  %349 = getelementptr inbounds { double, double }, ptr %24, i32 0, i32 0
  %350 = extractvalue { double, double } %348, 0
  store double %350, ptr %349, align 8
  %351 = getelementptr inbounds { double, double }, ptr %24, i32 0, i32 1
  %352 = extractvalue { double, double } %348, 1
  store double %352, ptr %351, align 8
  call void @_ZNSt6vectorIN10ClipperLib11DoublePointESaIS1_EE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %340, ptr noundef nonnull align 8 dereferenceable(16) %24)
  call void @llvm.lifetime.end.p0(i64 16, ptr %24) #7
  br label %360

353:                                              ; preds = %334
  %354 = getelementptr inbounds %"class.ClipperLib::ClipperOffset", ptr %49, i32 0, i32 5
  call void @llvm.lifetime.start.p0(i64 16, ptr %25) #7
  %355 = getelementptr inbounds %"class.ClipperLib::ClipperOffset", ptr %49, i32 0, i32 5
  %356 = load i32, ptr %12, align 4, !tbaa !36
  %357 = sub nsw i32 %356, 2
  %358 = sext i32 %357 to i64
  %359 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorIN10ClipperLib11DoublePointESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %355, i64 noundef %358) #7
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %25, ptr align 8 %359, i64 16, i1 false), !tbaa.struct !53
  call void @_ZNSt6vectorIN10ClipperLib11DoublePointESaIS1_EE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %354, ptr noundef nonnull align 8 dereferenceable(16) %25)
  call void @llvm.lifetime.end.p0(i64 16, ptr %25) #7
  br label %360

360:                                              ; preds = %353, %339
  %361 = load ptr, ptr %11, align 8, !tbaa !5
  %362 = getelementptr inbounds %"class.ClipperLib::PolyNode", ptr %361, i32 0, i32 7
  %363 = load i32, ptr %362, align 4, !tbaa !37
  %364 = icmp eq i32 %363, 0
  br i1 %364, label %365, label %384

365:                                              ; preds = %360
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #7
  %366 = load i32, ptr %12, align 4, !tbaa !36
  %367 = sub nsw i32 %366, 1
  store i32 %367, ptr %26, align 4, !tbaa !36
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #7
  store i32 0, ptr %27, align 4, !tbaa !36
  br label %368

368:                                              ; preds = %378, %365
  %369 = load i32, ptr %27, align 4, !tbaa !36
  %370 = load i32, ptr %12, align 4, !tbaa !36
  %371 = icmp slt i32 %369, %370
  br i1 %371, label %373, label %372

372:                                              ; preds = %368
  store i32 17, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #7
  br label %381

373:                                              ; preds = %368
  %374 = load i32, ptr %27, align 4, !tbaa !36
  %375 = load ptr, ptr %11, align 8, !tbaa !5
  %376 = getelementptr inbounds %"class.ClipperLib::PolyNode", ptr %375, i32 0, i32 6
  %377 = load i32, ptr %376, align 8, !tbaa !46
  call void @_ZN10ClipperLib13ClipperOffset11OffsetPointEiRiNS_8JoinTypeE(ptr noundef nonnull align 8 dereferenceable(256) %49, i32 noundef %374, ptr noundef nonnull align 4 dereferenceable(4) %26, i32 noundef %377)
  br label %378

378:                                              ; preds = %373
  %379 = load i32, ptr %27, align 4, !tbaa !36
  %380 = add nsw i32 %379, 1
  store i32 %380, ptr %27, align 4, !tbaa !36
  br label %368, !llvm.loop !54

381:                                              ; preds = %372
  %382 = getelementptr inbounds %"class.ClipperLib::ClipperOffset", ptr %49, i32 0, i32 2
  %383 = getelementptr inbounds %"class.ClipperLib::ClipperOffset", ptr %49, i32 0, i32 4
  call void @_ZNSt6vectorIS_IN10ClipperLib8IntPointESaIS1_EESaIS3_EE9push_backERKS3_(ptr noundef nonnull align 8 dereferenceable(24) %382, ptr noundef nonnull align 8 dereferenceable(24) %383)
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #7
  br label %727

384:                                              ; preds = %360
  %385 = load ptr, ptr %11, align 8, !tbaa !5
  %386 = getelementptr inbounds %"class.ClipperLib::PolyNode", ptr %385, i32 0, i32 7
  %387 = load i32, ptr %386, align 4, !tbaa !37
  %388 = icmp eq i32 %387, 1
  br i1 %388, label %389, label %470

389:                                              ; preds = %384
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #7
  %390 = load i32, ptr %12, align 4, !tbaa !36
  %391 = sub nsw i32 %390, 1
  store i32 %391, ptr %28, align 4, !tbaa !36
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #7
  store i32 0, ptr %29, align 4, !tbaa !36
  br label %392

392:                                              ; preds = %402, %389
  %393 = load i32, ptr %29, align 4, !tbaa !36
  %394 = load i32, ptr %12, align 4, !tbaa !36
  %395 = icmp slt i32 %393, %394
  br i1 %395, label %397, label %396

396:                                              ; preds = %392
  store i32 20, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #7
  br label %405

397:                                              ; preds = %392
  %398 = load i32, ptr %29, align 4, !tbaa !36
  %399 = load ptr, ptr %11, align 8, !tbaa !5
  %400 = getelementptr inbounds %"class.ClipperLib::PolyNode", ptr %399, i32 0, i32 6
  %401 = load i32, ptr %400, align 8, !tbaa !46
  call void @_ZN10ClipperLib13ClipperOffset11OffsetPointEiRiNS_8JoinTypeE(ptr noundef nonnull align 8 dereferenceable(256) %49, i32 noundef %398, ptr noundef nonnull align 4 dereferenceable(4) %28, i32 noundef %401)
  br label %402

402:                                              ; preds = %397
  %403 = load i32, ptr %29, align 4, !tbaa !36
  %404 = add nsw i32 %403, 1
  store i32 %404, ptr %29, align 4, !tbaa !36
  br label %392, !llvm.loop !55

405:                                              ; preds = %396
  %406 = getelementptr inbounds %"class.ClipperLib::ClipperOffset", ptr %49, i32 0, i32 2
  %407 = getelementptr inbounds %"class.ClipperLib::ClipperOffset", ptr %49, i32 0, i32 4
  call void @_ZNSt6vectorIS_IN10ClipperLib8IntPointESaIS1_EESaIS3_EE9push_backERKS3_(ptr noundef nonnull align 8 dereferenceable(24) %406, ptr noundef nonnull align 8 dereferenceable(24) %407)
  %408 = getelementptr inbounds %"class.ClipperLib::ClipperOffset", ptr %49, i32 0, i32 4
  call void @_ZNSt6vectorIN10ClipperLib8IntPointESaIS1_EE5clearEv(ptr noundef nonnull align 8 dereferenceable(24) %408) #7
  call void @llvm.lifetime.start.p0(i64 16, ptr %30) #7
  %409 = getelementptr inbounds %"class.ClipperLib::ClipperOffset", ptr %49, i32 0, i32 5
  %410 = load i32, ptr %12, align 4, !tbaa !36
  %411 = sub nsw i32 %410, 1
  %412 = sext i32 %411 to i64
  %413 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorIN10ClipperLib11DoublePointESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %409, i64 noundef %412) #7
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %30, ptr align 8 %413, i64 16, i1 false), !tbaa.struct !53
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #7
  %414 = load i32, ptr %12, align 4, !tbaa !36
  %415 = sub nsw i32 %414, 1
  store i32 %415, ptr %31, align 4, !tbaa !36
  br label %416

416:                                              ; preds = %441, %405
  %417 = load i32, ptr %31, align 4, !tbaa !36
  %418 = icmp sgt i32 %417, 0
  br i1 %418, label %420, label %419

419:                                              ; preds = %416
  store i32 23, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #7
  br label %444

420:                                              ; preds = %416
  call void @llvm.lifetime.start.p0(i64 16, ptr %32) #7
  %421 = getelementptr inbounds %"class.ClipperLib::ClipperOffset", ptr %49, i32 0, i32 5
  %422 = load i32, ptr %31, align 4, !tbaa !36
  %423 = sub nsw i32 %422, 1
  %424 = sext i32 %423 to i64
  %425 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorIN10ClipperLib11DoublePointESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %421, i64 noundef %424) #7
  %426 = getelementptr inbounds %"struct.ClipperLib::DoublePoint", ptr %425, i32 0, i32 0
  %427 = load double, ptr %426, align 8, !tbaa !56
  %428 = fneg double %427
  %429 = getelementptr inbounds %"class.ClipperLib::ClipperOffset", ptr %49, i32 0, i32 5
  %430 = load i32, ptr %31, align 4, !tbaa !36
  %431 = sub nsw i32 %430, 1
  %432 = sext i32 %431 to i64
  %433 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorIN10ClipperLib11DoublePointESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %429, i64 noundef %432) #7
  %434 = getelementptr inbounds %"struct.ClipperLib::DoublePoint", ptr %433, i32 0, i32 1
  %435 = load double, ptr %434, align 8, !tbaa !58
  %436 = fneg double %435
  call void @_ZN10ClipperLib11DoublePointC2Edd(ptr noundef nonnull align 8 dereferenceable(16) %32, double noundef %428, double noundef %436)
  %437 = getelementptr inbounds %"class.ClipperLib::ClipperOffset", ptr %49, i32 0, i32 5
  %438 = load i32, ptr %31, align 4, !tbaa !36
  %439 = sext i32 %438 to i64
  %440 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorIN10ClipperLib11DoublePointESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %437, i64 noundef %439) #7
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %440, ptr align 8 %32, i64 16, i1 false), !tbaa.struct !53
  call void @llvm.lifetime.end.p0(i64 16, ptr %32) #7
  br label %441

441:                                              ; preds = %420
  %442 = load i32, ptr %31, align 4, !tbaa !36
  %443 = add nsw i32 %442, -1
  store i32 %443, ptr %31, align 4, !tbaa !36
  br label %416, !llvm.loop !59

444:                                              ; preds = %419
  call void @llvm.lifetime.start.p0(i64 16, ptr %33) #7
  %445 = getelementptr inbounds %"struct.ClipperLib::DoublePoint", ptr %30, i32 0, i32 0
  %446 = load double, ptr %445, align 8, !tbaa !56
  %447 = fneg double %446
  %448 = getelementptr inbounds %"struct.ClipperLib::DoublePoint", ptr %30, i32 0, i32 1
  %449 = load double, ptr %448, align 8, !tbaa !58
  %450 = fneg double %449
  call void @_ZN10ClipperLib11DoublePointC2Edd(ptr noundef nonnull align 8 dereferenceable(16) %33, double noundef %447, double noundef %450)
  %451 = getelementptr inbounds %"class.ClipperLib::ClipperOffset", ptr %49, i32 0, i32 5
  %452 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorIN10ClipperLib11DoublePointESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %451, i64 noundef 0) #7
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %452, ptr align 8 %33, i64 16, i1 false), !tbaa.struct !53
  call void @llvm.lifetime.end.p0(i64 16, ptr %33) #7
  store i32 0, ptr %28, align 4, !tbaa !36
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #7
  %453 = load i32, ptr %12, align 4, !tbaa !36
  %454 = sub nsw i32 %453, 1
  store i32 %454, ptr %34, align 4, !tbaa !36
  br label %455

455:                                              ; preds = %464, %444
  %456 = load i32, ptr %34, align 4, !tbaa !36
  %457 = icmp sge i32 %456, 0
  br i1 %457, label %459, label %458

458:                                              ; preds = %455
  store i32 26, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #7
  br label %467

459:                                              ; preds = %455
  %460 = load i32, ptr %34, align 4, !tbaa !36
  %461 = load ptr, ptr %11, align 8, !tbaa !5
  %462 = getelementptr inbounds %"class.ClipperLib::PolyNode", ptr %461, i32 0, i32 6
  %463 = load i32, ptr %462, align 8, !tbaa !46
  call void @_ZN10ClipperLib13ClipperOffset11OffsetPointEiRiNS_8JoinTypeE(ptr noundef nonnull align 8 dereferenceable(256) %49, i32 noundef %460, ptr noundef nonnull align 4 dereferenceable(4) %28, i32 noundef %463)
  br label %464

464:                                              ; preds = %459
  %465 = load i32, ptr %34, align 4, !tbaa !36
  %466 = add nsw i32 %465, -1
  store i32 %466, ptr %34, align 4, !tbaa !36
  br label %455, !llvm.loop !60

467:                                              ; preds = %458
  %468 = getelementptr inbounds %"class.ClipperLib::ClipperOffset", ptr %49, i32 0, i32 2
  %469 = getelementptr inbounds %"class.ClipperLib::ClipperOffset", ptr %49, i32 0, i32 4
  call void @_ZNSt6vectorIS_IN10ClipperLib8IntPointESaIS1_EESaIS3_EE9push_backERKS3_(ptr noundef nonnull align 8 dereferenceable(24) %468, ptr noundef nonnull align 8 dereferenceable(24) %469)
  call void @llvm.lifetime.end.p0(i64 16, ptr %30) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #7
  br label %726

470:                                              ; preds = %384
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #7
  store i32 0, ptr %35, align 4, !tbaa !36
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #7
  store i32 1, ptr %36, align 4, !tbaa !36
  br label %471

471:                                              ; preds = %482, %470
  %472 = load i32, ptr %36, align 4, !tbaa !36
  %473 = load i32, ptr %12, align 4, !tbaa !36
  %474 = sub nsw i32 %473, 1
  %475 = icmp slt i32 %472, %474
  br i1 %475, label %477, label %476

476:                                              ; preds = %471
  store i32 29, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #7
  br label %485

477:                                              ; preds = %471
  %478 = load i32, ptr %36, align 4, !tbaa !36
  %479 = load ptr, ptr %11, align 8, !tbaa !5
  %480 = getelementptr inbounds %"class.ClipperLib::PolyNode", ptr %479, i32 0, i32 6
  %481 = load i32, ptr %480, align 8, !tbaa !46
  call void @_ZN10ClipperLib13ClipperOffset11OffsetPointEiRiNS_8JoinTypeE(ptr noundef nonnull align 8 dereferenceable(256) %49, i32 noundef %478, ptr noundef nonnull align 4 dereferenceable(4) %35, i32 noundef %481)
  br label %482

482:                                              ; preds = %477
  %483 = load i32, ptr %36, align 4, !tbaa !36
  %484 = add nsw i32 %483, 1
  store i32 %484, ptr %36, align 4, !tbaa !36
  br label %471, !llvm.loop !61

485:                                              ; preds = %476
  call void @llvm.lifetime.start.p0(i64 16, ptr %37) #7
  call void @_ZN10ClipperLib8IntPointC2Exx(ptr noundef nonnull align 8 dereferenceable(16) %37, i64 noundef 0, i64 noundef 0)
  %486 = load ptr, ptr %11, align 8, !tbaa !5
  %487 = getelementptr inbounds %"class.ClipperLib::PolyNode", ptr %486, i32 0, i32 7
  %488 = load i32, ptr %487, align 4, !tbaa !37
  %489 = icmp eq i32 %488, 2
  br i1 %489, label %490, label %561

490:                                              ; preds = %485
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #7
  %491 = load i32, ptr %12, align 4, !tbaa !36
  %492 = sub nsw i32 %491, 1
  store i32 %492, ptr %38, align 4, !tbaa !36
  call void @llvm.lifetime.start.p0(i64 16, ptr %39) #7
  %493 = getelementptr inbounds %"class.ClipperLib::ClipperOffset", ptr %49, i32 0, i32 3
  %494 = load i32, ptr %38, align 4, !tbaa !36
  %495 = sext i32 %494 to i64
  %496 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorIN10ClipperLib8IntPointESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %493, i64 noundef %495) #7
  %497 = getelementptr inbounds %"struct.ClipperLib::IntPoint", ptr %496, i32 0, i32 0
  %498 = load i64, ptr %497, align 8, !tbaa !48
  %499 = sitofp i64 %498 to double
  %500 = getelementptr inbounds %"class.ClipperLib::ClipperOffset", ptr %49, i32 0, i32 5
  %501 = load i32, ptr %38, align 4, !tbaa !36
  %502 = sext i32 %501 to i64
  %503 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorIN10ClipperLib11DoublePointESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %500, i64 noundef %502) #7
  %504 = getelementptr inbounds %"struct.ClipperLib::DoublePoint", ptr %503, i32 0, i32 0
  %505 = load double, ptr %504, align 8, !tbaa !56
  %506 = load double, ptr %4, align 8, !tbaa !9
  %507 = call double @llvm.fmuladd.f64(double %505, double %506, double %499)
  %508 = call noundef i64 @_ZN10ClipperLib5RoundEd(double noundef %507)
  %509 = getelementptr inbounds %"class.ClipperLib::ClipperOffset", ptr %49, i32 0, i32 3
  %510 = load i32, ptr %38, align 4, !tbaa !36
  %511 = sext i32 %510 to i64
  %512 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorIN10ClipperLib8IntPointESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %509, i64 noundef %511) #7
  %513 = getelementptr inbounds %"struct.ClipperLib::IntPoint", ptr %512, i32 0, i32 1
  %514 = load i64, ptr %513, align 8, !tbaa !49
  %515 = sitofp i64 %514 to double
  %516 = getelementptr inbounds %"class.ClipperLib::ClipperOffset", ptr %49, i32 0, i32 5
  %517 = load i32, ptr %38, align 4, !tbaa !36
  %518 = sext i32 %517 to i64
  %519 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorIN10ClipperLib11DoublePointESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %516, i64 noundef %518) #7
  %520 = getelementptr inbounds %"struct.ClipperLib::DoublePoint", ptr %519, i32 0, i32 1
  %521 = load double, ptr %520, align 8, !tbaa !58
  %522 = load double, ptr %4, align 8, !tbaa !9
  %523 = call double @llvm.fmuladd.f64(double %521, double %522, double %515)
  %524 = call noundef i64 @_ZN10ClipperLib5RoundEd(double noundef %523)
  call void @_ZN10ClipperLib8IntPointC2Exx(ptr noundef nonnull align 8 dereferenceable(16) %39, i64 noundef %508, i64 noundef %524)
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %37, ptr align 8 %39, i64 16, i1 false), !tbaa.struct !62
  call void @llvm.lifetime.end.p0(i64 16, ptr %39) #7
  %525 = getelementptr inbounds %"class.ClipperLib::ClipperOffset", ptr %49, i32 0, i32 4
  call void @_ZNSt6vectorIN10ClipperLib8IntPointESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %525, ptr noundef nonnull align 8 dereferenceable(16) %37)
  call void @llvm.lifetime.start.p0(i64 16, ptr %40) #7
  %526 = getelementptr inbounds %"class.ClipperLib::ClipperOffset", ptr %49, i32 0, i32 3
  %527 = load i32, ptr %38, align 4, !tbaa !36
  %528 = sext i32 %527 to i64
  %529 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorIN10ClipperLib8IntPointESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %526, i64 noundef %528) #7
  %530 = getelementptr inbounds %"struct.ClipperLib::IntPoint", ptr %529, i32 0, i32 0
  %531 = load i64, ptr %530, align 8, !tbaa !48
  %532 = sitofp i64 %531 to double
  %533 = getelementptr inbounds %"class.ClipperLib::ClipperOffset", ptr %49, i32 0, i32 5
  %534 = load i32, ptr %38, align 4, !tbaa !36
  %535 = sext i32 %534 to i64
  %536 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorIN10ClipperLib11DoublePointESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %533, i64 noundef %535) #7
  %537 = getelementptr inbounds %"struct.ClipperLib::DoublePoint", ptr %536, i32 0, i32 0
  %538 = load double, ptr %537, align 8, !tbaa !56
  %539 = load double, ptr %4, align 8, !tbaa !9
  %540 = fneg double %538
  %541 = call double @llvm.fmuladd.f64(double %540, double %539, double %532)
  %542 = call noundef i64 @_ZN10ClipperLib5RoundEd(double noundef %541)
  %543 = getelementptr inbounds %"class.ClipperLib::ClipperOffset", ptr %49, i32 0, i32 3
  %544 = load i32, ptr %38, align 4, !tbaa !36
  %545 = sext i32 %544 to i64
  %546 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorIN10ClipperLib8IntPointESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %543, i64 noundef %545) #7
  %547 = getelementptr inbounds %"struct.ClipperLib::IntPoint", ptr %546, i32 0, i32 1
  %548 = load i64, ptr %547, align 8, !tbaa !49
  %549 = sitofp i64 %548 to double
  %550 = getelementptr inbounds %"class.ClipperLib::ClipperOffset", ptr %49, i32 0, i32 5
  %551 = load i32, ptr %38, align 4, !tbaa !36
  %552 = sext i32 %551 to i64
  %553 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorIN10ClipperLib11DoublePointESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %550, i64 noundef %552) #7
  %554 = getelementptr inbounds %"struct.ClipperLib::DoublePoint", ptr %553, i32 0, i32 1
  %555 = load double, ptr %554, align 8, !tbaa !58
  %556 = load double, ptr %4, align 8, !tbaa !9
  %557 = fneg double %555
  %558 = call double @llvm.fmuladd.f64(double %557, double %556, double %549)
  %559 = call noundef i64 @_ZN10ClipperLib5RoundEd(double noundef %558)
  call void @_ZN10ClipperLib8IntPointC2Exx(ptr noundef nonnull align 8 dereferenceable(16) %40, i64 noundef %542, i64 noundef %559)
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %37, ptr align 8 %40, i64 16, i1 false), !tbaa.struct !62
  call void @llvm.lifetime.end.p0(i64 16, ptr %40) #7
  %560 = getelementptr inbounds %"class.ClipperLib::ClipperOffset", ptr %49, i32 0, i32 4
  call void @_ZNSt6vectorIN10ClipperLib8IntPointESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %560, ptr noundef nonnull align 8 dereferenceable(16) %37)
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #7
  br label %596

561:                                              ; preds = %485
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #7
  %562 = load i32, ptr %12, align 4, !tbaa !36
  %563 = sub nsw i32 %562, 1
  store i32 %563, ptr %41, align 4, !tbaa !36
  %564 = load i32, ptr %12, align 4, !tbaa !36
  %565 = sub nsw i32 %564, 2
  store i32 %565, ptr %35, align 4, !tbaa !36
  %566 = getelementptr inbounds %"class.ClipperLib::ClipperOffset", ptr %49, i32 0, i32 7
  store double 0.000000e+00, ptr %566, align 8, !tbaa !63
  call void @llvm.lifetime.start.p0(i64 16, ptr %42) #7
  %567 = getelementptr inbounds %"class.ClipperLib::ClipperOffset", ptr %49, i32 0, i32 5
  %568 = load i32, ptr %41, align 4, !tbaa !36
  %569 = sext i32 %568 to i64
  %570 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorIN10ClipperLib11DoublePointESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %567, i64 noundef %569) #7
  %571 = getelementptr inbounds %"struct.ClipperLib::DoublePoint", ptr %570, i32 0, i32 0
  %572 = load double, ptr %571, align 8, !tbaa !56
  %573 = fneg double %572
  %574 = getelementptr inbounds %"class.ClipperLib::ClipperOffset", ptr %49, i32 0, i32 5
  %575 = load i32, ptr %41, align 4, !tbaa !36
  %576 = sext i32 %575 to i64
  %577 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorIN10ClipperLib11DoublePointESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %574, i64 noundef %576) #7
  %578 = getelementptr inbounds %"struct.ClipperLib::DoublePoint", ptr %577, i32 0, i32 1
  %579 = load double, ptr %578, align 8, !tbaa !58
  %580 = fneg double %579
  call void @_ZN10ClipperLib11DoublePointC2Edd(ptr noundef nonnull align 8 dereferenceable(16) %42, double noundef %573, double noundef %580)
  %581 = getelementptr inbounds %"class.ClipperLib::ClipperOffset", ptr %49, i32 0, i32 5
  %582 = load i32, ptr %41, align 4, !tbaa !36
  %583 = sext i32 %582 to i64
  %584 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorIN10ClipperLib11DoublePointESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %581, i64 noundef %583) #7
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %584, ptr align 8 %42, i64 16, i1 false), !tbaa.struct !53
  call void @llvm.lifetime.end.p0(i64 16, ptr %42) #7
  %585 = load ptr, ptr %11, align 8, !tbaa !5
  %586 = getelementptr inbounds %"class.ClipperLib::PolyNode", ptr %585, i32 0, i32 7
  %587 = load i32, ptr %586, align 4, !tbaa !37
  %588 = icmp eq i32 %587, 3
  br i1 %588, label %589, label %592

589:                                              ; preds = %561
  %590 = load i32, ptr %41, align 4, !tbaa !36
  %591 = load i32, ptr %35, align 4, !tbaa !36
  call void @_ZN10ClipperLib13ClipperOffset8DoSquareEii(ptr noundef nonnull align 8 dereferenceable(256) %49, i32 noundef %590, i32 noundef %591)
  br label %595

592:                                              ; preds = %561
  %593 = load i32, ptr %41, align 4, !tbaa !36
  %594 = load i32, ptr %35, align 4, !tbaa !36
  call void @_ZN10ClipperLib13ClipperOffset7DoRoundEii(ptr noundef nonnull align 8 dereferenceable(256) %49, i32 noundef %593, i32 noundef %594)
  br label %595

595:                                              ; preds = %592, %589
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #7
  br label %596

596:                                              ; preds = %595, %490
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #7
  %597 = load i32, ptr %12, align 4, !tbaa !36
  %598 = sub nsw i32 %597, 1
  store i32 %598, ptr %43, align 4, !tbaa !36
  br label %599

599:                                              ; preds = %624, %596
  %600 = load i32, ptr %43, align 4, !tbaa !36
  %601 = icmp sgt i32 %600, 0
  br i1 %601, label %603, label %602

602:                                              ; preds = %599
  store i32 32, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #7
  br label %627

603:                                              ; preds = %599
  call void @llvm.lifetime.start.p0(i64 16, ptr %44) #7
  %604 = getelementptr inbounds %"class.ClipperLib::ClipperOffset", ptr %49, i32 0, i32 5
  %605 = load i32, ptr %43, align 4, !tbaa !36
  %606 = sub nsw i32 %605, 1
  %607 = sext i32 %606 to i64
  %608 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorIN10ClipperLib11DoublePointESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %604, i64 noundef %607) #7
  %609 = getelementptr inbounds %"struct.ClipperLib::DoublePoint", ptr %608, i32 0, i32 0
  %610 = load double, ptr %609, align 8, !tbaa !56
  %611 = fneg double %610
  %612 = getelementptr inbounds %"class.ClipperLib::ClipperOffset", ptr %49, i32 0, i32 5
  %613 = load i32, ptr %43, align 4, !tbaa !36
  %614 = sub nsw i32 %613, 1
  %615 = sext i32 %614 to i64
  %616 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorIN10ClipperLib11DoublePointESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %612, i64 noundef %615) #7
  %617 = getelementptr inbounds %"struct.ClipperLib::DoublePoint", ptr %616, i32 0, i32 1
  %618 = load double, ptr %617, align 8, !tbaa !58
  %619 = fneg double %618
  call void @_ZN10ClipperLib11DoublePointC2Edd(ptr noundef nonnull align 8 dereferenceable(16) %44, double noundef %611, double noundef %619)
  %620 = getelementptr inbounds %"class.ClipperLib::ClipperOffset", ptr %49, i32 0, i32 5
  %621 = load i32, ptr %43, align 4, !tbaa !36
  %622 = sext i32 %621 to i64
  %623 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorIN10ClipperLib11DoublePointESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %620, i64 noundef %622) #7
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %623, ptr align 8 %44, i64 16, i1 false), !tbaa.struct !53
  call void @llvm.lifetime.end.p0(i64 16, ptr %44) #7
  br label %624

624:                                              ; preds = %603
  %625 = load i32, ptr %43, align 4, !tbaa !36
  %626 = add nsw i32 %625, -1
  store i32 %626, ptr %43, align 4, !tbaa !36
  br label %599, !llvm.loop !64

627:                                              ; preds = %602
  call void @llvm.lifetime.start.p0(i64 16, ptr %45) #7
  %628 = getelementptr inbounds %"class.ClipperLib::ClipperOffset", ptr %49, i32 0, i32 5
  %629 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorIN10ClipperLib11DoublePointESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %628, i64 noundef 1) #7
  %630 = getelementptr inbounds %"struct.ClipperLib::DoublePoint", ptr %629, i32 0, i32 0
  %631 = load double, ptr %630, align 8, !tbaa !56
  %632 = fneg double %631
  %633 = getelementptr inbounds %"class.ClipperLib::ClipperOffset", ptr %49, i32 0, i32 5
  %634 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorIN10ClipperLib11DoublePointESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %633, i64 noundef 1) #7
  %635 = getelementptr inbounds %"struct.ClipperLib::DoublePoint", ptr %634, i32 0, i32 1
  %636 = load double, ptr %635, align 8, !tbaa !58
  %637 = fneg double %636
  call void @_ZN10ClipperLib11DoublePointC2Edd(ptr noundef nonnull align 8 dereferenceable(16) %45, double noundef %632, double noundef %637)
  %638 = getelementptr inbounds %"class.ClipperLib::ClipperOffset", ptr %49, i32 0, i32 5
  %639 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorIN10ClipperLib11DoublePointESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %638, i64 noundef 0) #7
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %639, ptr align 8 %45, i64 16, i1 false), !tbaa.struct !53
  call void @llvm.lifetime.end.p0(i64 16, ptr %45) #7
  %640 = load i32, ptr %12, align 4, !tbaa !36
  %641 = sub nsw i32 %640, 1
  store i32 %641, ptr %35, align 4, !tbaa !36
  call void @llvm.lifetime.start.p0(i64 4, ptr %46) #7
  %642 = load i32, ptr %35, align 4, !tbaa !36
  %643 = sub nsw i32 %642, 1
  store i32 %643, ptr %46, align 4, !tbaa !36
  br label %644

644:                                              ; preds = %653, %627
  %645 = load i32, ptr %46, align 4, !tbaa !36
  %646 = icmp sgt i32 %645, 0
  br i1 %646, label %648, label %647

647:                                              ; preds = %644
  store i32 35, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #7
  br label %656

648:                                              ; preds = %644
  %649 = load i32, ptr %46, align 4, !tbaa !36
  %650 = load ptr, ptr %11, align 8, !tbaa !5
  %651 = getelementptr inbounds %"class.ClipperLib::PolyNode", ptr %650, i32 0, i32 6
  %652 = load i32, ptr %651, align 8, !tbaa !46
  call void @_ZN10ClipperLib13ClipperOffset11OffsetPointEiRiNS_8JoinTypeE(ptr noundef nonnull align 8 dereferenceable(256) %49, i32 noundef %649, ptr noundef nonnull align 4 dereferenceable(4) %35, i32 noundef %652)
  br label %653

653:                                              ; preds = %648
  %654 = load i32, ptr %46, align 4, !tbaa !36
  %655 = add nsw i32 %654, -1
  store i32 %655, ptr %46, align 4, !tbaa !36
  br label %644, !llvm.loop !65

656:                                              ; preds = %647
  %657 = load ptr, ptr %11, align 8, !tbaa !5
  %658 = getelementptr inbounds %"class.ClipperLib::PolyNode", ptr %657, i32 0, i32 7
  %659 = load i32, ptr %658, align 4, !tbaa !37
  %660 = icmp eq i32 %659, 2
  br i1 %660, label %661, label %714

661:                                              ; preds = %656
  call void @llvm.lifetime.start.p0(i64 16, ptr %47) #7
  %662 = getelementptr inbounds %"class.ClipperLib::ClipperOffset", ptr %49, i32 0, i32 3
  %663 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorIN10ClipperLib8IntPointESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %662, i64 noundef 0) #7
  %664 = getelementptr inbounds %"struct.ClipperLib::IntPoint", ptr %663, i32 0, i32 0
  %665 = load i64, ptr %664, align 8, !tbaa !48
  %666 = sitofp i64 %665 to double
  %667 = getelementptr inbounds %"class.ClipperLib::ClipperOffset", ptr %49, i32 0, i32 5
  %668 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorIN10ClipperLib11DoublePointESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %667, i64 noundef 0) #7
  %669 = getelementptr inbounds %"struct.ClipperLib::DoublePoint", ptr %668, i32 0, i32 0
  %670 = load double, ptr %669, align 8, !tbaa !56
  %671 = load double, ptr %4, align 8, !tbaa !9
  %672 = fneg double %670
  %673 = call double @llvm.fmuladd.f64(double %672, double %671, double %666)
  %674 = call noundef i64 @_ZN10ClipperLib5RoundEd(double noundef %673)
  %675 = getelementptr inbounds %"class.ClipperLib::ClipperOffset", ptr %49, i32 0, i32 3
  %676 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorIN10ClipperLib8IntPointESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %675, i64 noundef 0) #7
  %677 = getelementptr inbounds %"struct.ClipperLib::IntPoint", ptr %676, i32 0, i32 1
  %678 = load i64, ptr %677, align 8, !tbaa !49
  %679 = sitofp i64 %678 to double
  %680 = getelementptr inbounds %"class.ClipperLib::ClipperOffset", ptr %49, i32 0, i32 5
  %681 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorIN10ClipperLib11DoublePointESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %680, i64 noundef 0) #7
  %682 = getelementptr inbounds %"struct.ClipperLib::DoublePoint", ptr %681, i32 0, i32 1
  %683 = load double, ptr %682, align 8, !tbaa !58
  %684 = load double, ptr %4, align 8, !tbaa !9
  %685 = fneg double %683
  %686 = call double @llvm.fmuladd.f64(double %685, double %684, double %679)
  %687 = call noundef i64 @_ZN10ClipperLib5RoundEd(double noundef %686)
  call void @_ZN10ClipperLib8IntPointC2Exx(ptr noundef nonnull align 8 dereferenceable(16) %47, i64 noundef %674, i64 noundef %687)
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %37, ptr align 8 %47, i64 16, i1 false), !tbaa.struct !62
  call void @llvm.lifetime.end.p0(i64 16, ptr %47) #7
  %688 = getelementptr inbounds %"class.ClipperLib::ClipperOffset", ptr %49, i32 0, i32 4
  call void @_ZNSt6vectorIN10ClipperLib8IntPointESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %688, ptr noundef nonnull align 8 dereferenceable(16) %37)
  call void @llvm.lifetime.start.p0(i64 16, ptr %48) #7
  %689 = getelementptr inbounds %"class.ClipperLib::ClipperOffset", ptr %49, i32 0, i32 3
  %690 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorIN10ClipperLib8IntPointESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %689, i64 noundef 0) #7
  %691 = getelementptr inbounds %"struct.ClipperLib::IntPoint", ptr %690, i32 0, i32 0
  %692 = load i64, ptr %691, align 8, !tbaa !48
  %693 = sitofp i64 %692 to double
  %694 = getelementptr inbounds %"class.ClipperLib::ClipperOffset", ptr %49, i32 0, i32 5
  %695 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorIN10ClipperLib11DoublePointESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %694, i64 noundef 0) #7
  %696 = getelementptr inbounds %"struct.ClipperLib::DoublePoint", ptr %695, i32 0, i32 0
  %697 = load double, ptr %696, align 8, !tbaa !56
  %698 = load double, ptr %4, align 8, !tbaa !9
  %699 = call double @llvm.fmuladd.f64(double %697, double %698, double %693)
  %700 = call noundef i64 @_ZN10ClipperLib5RoundEd(double noundef %699)
  %701 = getelementptr inbounds %"class.ClipperLib::ClipperOffset", ptr %49, i32 0, i32 3
  %702 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorIN10ClipperLib8IntPointESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %701, i64 noundef 0) #7
  %703 = getelementptr inbounds %"struct.ClipperLib::IntPoint", ptr %702, i32 0, i32 1
  %704 = load i64, ptr %703, align 8, !tbaa !49
  %705 = sitofp i64 %704 to double
  %706 = getelementptr inbounds %"class.ClipperLib::ClipperOffset", ptr %49, i32 0, i32 5
  %707 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorIN10ClipperLib11DoublePointESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %706, i64 noundef 0) #7
  %708 = getelementptr inbounds %"struct.ClipperLib::DoublePoint", ptr %707, i32 0, i32 1
  %709 = load double, ptr %708, align 8, !tbaa !58
  %710 = load double, ptr %4, align 8, !tbaa !9
  %711 = call double @llvm.fmuladd.f64(double %709, double %710, double %705)
  %712 = call noundef i64 @_ZN10ClipperLib5RoundEd(double noundef %711)
  call void @_ZN10ClipperLib8IntPointC2Exx(ptr noundef nonnull align 8 dereferenceable(16) %48, i64 noundef %700, i64 noundef %712)
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %37, ptr align 8 %48, i64 16, i1 false), !tbaa.struct !62
  call void @llvm.lifetime.end.p0(i64 16, ptr %48) #7
  %713 = getelementptr inbounds %"class.ClipperLib::ClipperOffset", ptr %49, i32 0, i32 4
  call void @_ZNSt6vectorIN10ClipperLib8IntPointESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %713, ptr noundef nonnull align 8 dereferenceable(16) %37)
  br label %723

714:                                              ; preds = %656
  store i32 1, ptr %35, align 4, !tbaa !36
  %715 = getelementptr inbounds %"class.ClipperLib::ClipperOffset", ptr %49, i32 0, i32 7
  store double 0.000000e+00, ptr %715, align 8, !tbaa !63
  %716 = load ptr, ptr %11, align 8, !tbaa !5
  %717 = getelementptr inbounds %"class.ClipperLib::PolyNode", ptr %716, i32 0, i32 7
  %718 = load i32, ptr %717, align 4, !tbaa !37
  %719 = icmp eq i32 %718, 3
  br i1 %719, label %720, label %721

720:                                              ; preds = %714
  call void @_ZN10ClipperLib13ClipperOffset8DoSquareEii(ptr noundef nonnull align 8 dereferenceable(256) %49, i32 noundef 0, i32 noundef 1)
  br label %722

721:                                              ; preds = %714
  call void @_ZN10ClipperLib13ClipperOffset7DoRoundEii(ptr noundef nonnull align 8 dereferenceable(256) %49, i32 noundef 0, i32 noundef 1)
  br label %722

722:                                              ; preds = %721, %720
  br label %723

723:                                              ; preds = %722, %661
  %724 = getelementptr inbounds %"class.ClipperLib::ClipperOffset", ptr %49, i32 0, i32 2
  %725 = getelementptr inbounds %"class.ClipperLib::ClipperOffset", ptr %49, i32 0, i32 4
  call void @_ZNSt6vectorIS_IN10ClipperLib8IntPointESaIS1_EESaIS3_EE9push_backERKS3_(ptr noundef nonnull align 8 dereferenceable(24) %724, ptr noundef nonnull align 8 dereferenceable(24) %725)
  call void @llvm.lifetime.end.p0(i64 16, ptr %37) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #7
  br label %726

726:                                              ; preds = %723, %467
  br label %727

727:                                              ; preds = %726, %381
  store i32 0, ptr %10, align 4
  br label %728

728:                                              ; preds = %727, %296, %198
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #7
  %729 = load i32, ptr %10, align 4
  switch i32 %729, label %736 [
    i32 0, label %730
    i32 7, label %731
  ]

730:                                              ; preds = %728
  br label %731

731:                                              ; preds = %730, %728
  %732 = load i32, ptr %9, align 4, !tbaa !36
  %733 = add nsw i32 %732, 1
  store i32 %733, ptr %9, align 4, !tbaa !36
  br label %165, !llvm.loop !66

734:                                              ; preds = %170
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #7
  br label %735

735:                                              ; preds = %734, %88
  ret void

736:                                              ; preds = %728
  unreachable
}

; Function Attrs: nounwind
declare double @acos(double noundef) #6

; Function Attrs: nounwind
declare double @sin(double noundef) #6

; Function Attrs: nounwind
declare double @cos(double noundef) #6

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN10ClipperLib13ClipperOffset11OffsetPointEiRiNS_8JoinTypeE(ptr noundef nonnull align 8 dereferenceable(256), i32 noundef, ptr noundef nonnull align 4 dereferenceable(4), i32 noundef) #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN10ClipperLib13ClipperOffset8DoSquareEii(ptr noundef nonnull align 8 dereferenceable(256), i32 noundef, i32 noundef) #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN10ClipperLib13ClipperOffset7DoRoundEii(ptr noundef nonnull align 8 dereferenceable(256), i32 noundef, i32 noundef) #5 align 2

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
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 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 #6 = { 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 #7 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"double", !7, i64 0}
!11 = !{!12, !10, i64 112}
!12 = !{!"_ZTSN10ClipperLib13ClipperOffsetE", !10, i64 0, !10, i64 8, !13, i64 16, !17, i64 40, !17, i64 64, !21, i64 88, !10, i64 112, !10, i64 120, !10, i64 128, !10, i64 136, !10, i64 144, !10, i64 152, !25, i64 160, !27, i64 176}
!13 = !{!"_ZTSSt6vectorIS_IN10ClipperLib8IntPointESaIS1_EESaIS3_EE", !14, i64 0}
!14 = !{!"_ZTSSt12_Vector_baseISt6vectorIN10ClipperLib8IntPointESaIS2_EESaIS4_EE", !15, i64 0}
!15 = !{!"_ZTSNSt12_Vector_baseISt6vectorIN10ClipperLib8IntPointESaIS2_EESaIS4_EE12_Vector_implE", !16, i64 0}
!16 = !{!"_ZTSNSt12_Vector_baseISt6vectorIN10ClipperLib8IntPointESaIS2_EESaIS4_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!17 = !{!"_ZTSSt6vectorIN10ClipperLib8IntPointESaIS1_EE", !18, i64 0}
!18 = !{!"_ZTSSt12_Vector_baseIN10ClipperLib8IntPointESaIS1_EE", !19, i64 0}
!19 = !{!"_ZTSNSt12_Vector_baseIN10ClipperLib8IntPointESaIS1_EE12_Vector_implE", !20, i64 0}
!20 = !{!"_ZTSNSt12_Vector_baseIN10ClipperLib8IntPointESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!21 = !{!"_ZTSSt6vectorIN10ClipperLib11DoublePointESaIS1_EE", !22, i64 0}
!22 = !{!"_ZTSSt12_Vector_baseIN10ClipperLib11DoublePointESaIS1_EE", !23, i64 0}
!23 = !{!"_ZTSNSt12_Vector_baseIN10ClipperLib11DoublePointESaIS1_EE12_Vector_implE", !24, i64 0}
!24 = !{!"_ZTSNSt12_Vector_baseIN10ClipperLib11DoublePointESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!25 = !{!"_ZTSN10ClipperLib8IntPointE", !26, i64 0, !26, i64 8}
!26 = !{!"long long", !7, i64 0}
!27 = !{!"_ZTSN10ClipperLib8PolyNodeE", !17, i64 8, !28, i64 32, !6, i64 56, !32, i64 64, !33, i64 68, !34, i64 72, !35, i64 76}
!28 = !{!"_ZTSSt6vectorIPN10ClipperLib8PolyNodeESaIS2_EE", !29, i64 0}
!29 = !{!"_ZTSSt12_Vector_baseIPN10ClipperLib8PolyNodeESaIS2_EE", !30, i64 0}
!30 = !{!"_ZTSNSt12_Vector_baseIPN10ClipperLib8PolyNodeESaIS2_EE12_Vector_implE", !31, i64 0}
!31 = !{!"_ZTSNSt12_Vector_baseIPN10ClipperLib8PolyNodeESaIS2_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!32 = !{!"int", !7, i64 0}
!33 = !{!"bool", !7, i64 0}
!34 = !{!"_ZTSN10ClipperLib8JoinTypeE", !7, i64 0}
!35 = !{!"_ZTSN10ClipperLib7EndTypeE", !7, i64 0}
!36 = !{!32, !32, i64 0}
!37 = !{!27, !35, i64 76}
!38 = distinct !{!38, !39}
!39 = !{!"llvm.loop.mustprogress"}
!40 = !{!12, !10, i64 0}
!41 = !{!12, !10, i64 144}
!42 = !{!12, !10, i64 8}
!43 = !{!12, !10, i64 128}
!44 = !{!12, !10, i64 136}
!45 = !{!12, !10, i64 152}
!46 = !{!27, !34, i64 72}
!47 = !{!26, !26, i64 0}
!48 = !{!25, !26, i64 0}
!49 = !{!25, !26, i64 8}
!50 = distinct !{!50, !39}
!51 = distinct !{!51, !39}
!52 = distinct !{!52, !39}
!53 = !{i64 0, i64 8, !9, i64 8, i64 8, !9}
!54 = distinct !{!54, !39}
!55 = distinct !{!55, !39}
!56 = !{!57, !10, i64 0}
!57 = !{!"_ZTSN10ClipperLib11DoublePointE", !10, i64 0, !10, i64 8}
!58 = !{!57, !10, i64 8}
!59 = distinct !{!59, !39}
!60 = distinct !{!60, !39}
!61 = distinct !{!61, !39}
!62 = !{i64 0, i64 8, !47, i64 8, i64 8, !47}
!63 = !{!12, !10, i64 120}
!64 = distinct !{!64, !39}
!65 = distinct !{!65, !39}
!66 = distinct !{!66, !39}


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

%"struct.ClipperLib::IntPoint" = type { i64, i64 }
%"struct.ClipperLib::DoublePoint" = type { double, double }

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK10ClipperLib8PolyNode10ChildCountEv(ptr noundef nonnull align 8 dereferenceable(80)) local_unnamed_addr #1 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) #2

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZN10ClipperLib5RoundEd(double noundef) local_unnamed_addr #4

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN10ClipperLib13ClipperOffset8DoOffsetEd(ptr noundef nonnull align 8 dereferenceable(256) %0, double noundef %1) local_unnamed_addr #5 align 2 {
  %3 = alloca %"struct.ClipperLib::IntPoint", align 8
  %4 = alloca %"struct.ClipperLib::IntPoint", align 8
  %5 = alloca %"struct.ClipperLib::DoublePoint", align 8
  %6 = alloca %"struct.ClipperLib::DoublePoint", align 8
  %7 = alloca %"struct.ClipperLib::DoublePoint", align 8
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca %"struct.ClipperLib::DoublePoint", align 8
  %11 = alloca %"struct.ClipperLib::DoublePoint", align 8
  %12 = alloca i32, align 4
  %13 = alloca %"struct.ClipperLib::IntPoint", align 8
  %14 = alloca %"struct.ClipperLib::IntPoint", align 8
  %15 = alloca %"struct.ClipperLib::IntPoint", align 8
  %16 = alloca %"struct.ClipperLib::DoublePoint", align 8
  %17 = alloca %"struct.ClipperLib::DoublePoint", align 8
  %18 = alloca %"struct.ClipperLib::DoublePoint", align 8
  %19 = alloca %"struct.ClipperLib::IntPoint", align 8
  %20 = alloca %"struct.ClipperLib::IntPoint", align 8
  %21 = getelementptr inbounds i8, ptr %0, i64 16
  tail call void @_ZNSt6vectorIS_IN10ClipperLib8IntPointESaIS1_EESaIS3_EE5clearEv(ptr noundef nonnull align 8 dereferenceable(24) %21) #8
  %22 = getelementptr inbounds i8, ptr %0, i64 112
  store double %1, ptr %22, align 8, !tbaa !5
  %23 = tail call double @llvm.fabs.f64(double %1)
  %or.cond = fcmp olt double %23, 0x3BC79CA10C924223
  br i1 %or.cond, label %24, label %43

24:                                               ; preds = %2
  %25 = getelementptr inbounds i8, ptr %0, i64 176
  %26 = tail call noundef i32 @_ZNK10ClipperLib8PolyNode10ChildCountEv(ptr noundef nonnull align 8 dereferenceable(80) %25)
  %27 = sext i32 %26 to i64
  tail call void @_ZNSt6vectorIS_IN10ClipperLib8IntPointESaIS1_EESaIS3_EE7reserveEm(ptr noundef nonnull align 8 dereferenceable(24) %21, i64 noundef %27)
  %28 = tail call noundef i32 @_ZNK10ClipperLib8PolyNode10ChildCountEv(ptr noundef nonnull align 8 dereferenceable(80) %25)
  %29 = icmp sgt i32 %28, 0
  br i1 %29, label %.lr.ph203, label %.loopexit

.lr.ph203:                                        ; preds = %24
  %30 = getelementptr inbounds i8, ptr %0, i64 208
  br label %31

31:                                               ; preds = %.lr.ph203, %39
  %indvars.iv220 = phi i64 [ 0, %.lr.ph203 ], [ %indvars.iv.next221, %39 ]
  %32 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIPN10ClipperLib8PolyNodeESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %30, i64 noundef %indvars.iv220) #8
  %33 = load ptr, ptr %32, align 8, !tbaa !34
  %34 = getelementptr inbounds i8, ptr %33, i64 76
  %35 = load i32, ptr %34, align 4, !tbaa !35
  %36 = icmp eq i32 %35, 0
  br i1 %36, label %37, label %39

37:                                               ; preds = %31
  %38 = getelementptr inbounds i8, ptr %33, i64 8
  tail call void @_ZNSt6vectorIS_IN10ClipperLib8IntPointESaIS1_EESaIS3_EE9push_backERKS3_(ptr noundef nonnull align 8 dereferenceable(24) %21, ptr noundef nonnull align 8 dereferenceable(24) %38)
  br label %39

39:                                               ; preds = %37, %31
  %indvars.iv.next221 = add nuw nsw i64 %indvars.iv220, 1
  %40 = tail call noundef i32 @_ZNK10ClipperLib8PolyNode10ChildCountEv(ptr noundef nonnull align 8 dereferenceable(80) %25)
  %41 = sext i32 %40 to i64
  %42 = icmp slt i64 %indvars.iv.next221, %41
  br i1 %42, label %31, label %.loopexit, !llvm.loop !36

43:                                               ; preds = %2
  %44 = load double, ptr %0, align 8, !tbaa !38
  %45 = fcmp ogt double %44, 2.000000e+00
  %46 = fmul double %44, %44
  %47 = fdiv double 2.000000e+00, %46
  %.sink = select i1 %45, double %47, double 5.000000e-01
  %48 = getelementptr inbounds i8, ptr %0, i64 144
  store double %.sink, ptr %48, align 8
  %49 = getelementptr inbounds i8, ptr %0, i64 8
  %50 = load double, ptr %49, align 8, !tbaa !39
  %51 = fcmp ugt double %50, 0.000000e+00
  br i1 %51, label %52, label %55

52:                                               ; preds = %43
  %53 = fmul double %23, 2.500000e-01
  %54 = fcmp ogt double %50, %53
  %. = select i1 %54, double %53, double %50
  br label %55

55:                                               ; preds = %52, %43
  %.0132 = phi double [ 2.500000e-01, %43 ], [ %., %52 ]
  %56 = fdiv double %.0132, %23
  %57 = fsub double 1.000000e+00, %56
  %58 = tail call double @acos(double noundef %57) #8
  %59 = fdiv double 0x400921FB54442D18, %58
  %60 = fmul double %23, 0x400921FB54442D18
  %61 = fcmp ogt double %59, %60
  %.0136 = select i1 %61, double %60, double %59
  %62 = fdiv double 0x401921FB54442D18, %.0136
  %63 = tail call double @sin(double noundef %62) #8
  %64 = getelementptr inbounds i8, ptr %0, i64 128
  store double %63, ptr %64, align 8, !tbaa !40
  %65 = tail call double @cos(double noundef %62) #8
  %66 = getelementptr inbounds i8, ptr %0, i64 136
  store double %65, ptr %66, align 8, !tbaa !41
  %67 = fdiv double %.0136, 0x401921FB54442D18
  %68 = getelementptr inbounds i8, ptr %0, i64 152
  store double %67, ptr %68, align 8, !tbaa !42
  %69 = fcmp olt double %1, 0.000000e+00
  br i1 %69, label %70, label %73

70:                                               ; preds = %55
  %71 = load double, ptr %64, align 8, !tbaa !40
  %72 = fneg double %71
  store double %72, ptr %64, align 8, !tbaa !40
  br label %73

73:                                               ; preds = %70, %55
  %74 = getelementptr inbounds i8, ptr %0, i64 176
  %75 = tail call noundef i32 @_ZNK10ClipperLib8PolyNode10ChildCountEv(ptr noundef nonnull align 8 dereferenceable(80) %74)
  %76 = shl nsw i32 %75, 1
  %77 = sext i32 %76 to i64
  tail call void @_ZNSt6vectorIS_IN10ClipperLib8IntPointESaIS1_EESaIS3_EE7reserveEm(ptr noundef nonnull align 8 dereferenceable(24) %21, i64 noundef %77)
  %78 = tail call noundef i32 @_ZNK10ClipperLib8PolyNode10ChildCountEv(ptr noundef nonnull align 8 dereferenceable(80) %74)
  %79 = icmp sgt i32 %78, 0
  br i1 %79, label %.lr.ph200, label %.loopexit

.lr.ph200:                                        ; preds = %73
  %80 = getelementptr inbounds i8, ptr %0, i64 208
  %81 = getelementptr inbounds i8, ptr %0, i64 40
  %82 = fcmp ugt double %1, 0.000000e+00
  %83 = getelementptr inbounds i8, ptr %0, i64 64
  %84 = getelementptr inbounds i8, ptr %0, i64 88
  %85 = getelementptr inbounds i8, ptr %5, i64 8
  %86 = getelementptr inbounds i8, ptr %6, i64 8
  %87 = getelementptr inbounds i8, ptr %0, i64 120
  %88 = fcmp ult double %.0136, 1.000000e+00
  br label %89

89:                                               ; preds = %.lr.ph200, %360
  %indvars.iv217 = phi i64 [ 0, %.lr.ph200 ], [ %indvars.iv.next218, %360 ]
  %90 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIPN10ClipperLib8PolyNodeESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %80, i64 noundef %indvars.iv217) #8
  %91 = load ptr, ptr %90, align 8, !tbaa !34
  %92 = getelementptr inbounds i8, ptr %91, i64 8
  %93 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIN10ClipperLib8IntPointESaIS1_EEaSERKS3_(ptr noundef nonnull align 8 dereferenceable(24) %81, ptr noundef nonnull align 8 dereferenceable(24) %92)
  %94 = call noundef i64 @_ZNKSt6vectorIN10ClipperLib8IntPointESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %81) #8
  %95 = trunc i64 %94 to i32
  %96 = icmp eq i32 %95, 0
  br i1 %96, label %360, label %97

97:                                               ; preds = %89
  br i1 %82, label %103, label %98

98:                                               ; preds = %97
  %99 = icmp slt i32 %95, 3
  br i1 %99, label %360, label %100

100:                                              ; preds = %98
  %101 = getelementptr inbounds i8, ptr %91, i64 76
  %102 = load i32, ptr %101, align 4, !tbaa !35
  %.not = icmp eq i32 %102, 0
  br i1 %.not, label %.thread, label %360

.thread:                                          ; preds = %100
  call void @_ZNSt6vectorIN10ClipperLib8IntPointESaIS1_EE5clearEv(ptr noundef nonnull align 8 dereferenceable(24) %83) #8
  br label %179

103:                                              ; preds = %97
  call void @_ZNSt6vectorIN10ClipperLib8IntPointESaIS1_EE5clearEv(ptr noundef nonnull align 8 dereferenceable(24) %83) #8
  %104 = icmp eq i32 %95, 1
  br i1 %104, label %105, label %179

105:                                              ; preds = %103
  %106 = getelementptr inbounds i8, ptr %91, i64 72
  %107 = load i32, ptr %106, align 8, !tbaa !43
  %108 = icmp eq i32 %107, 1
  br i1 %108, label %.preheader, label %.loopexit158.loopexit204

.preheader:                                       ; preds = %105
  br i1 %88, label %.loopexit158, label %.lr.ph197

.lr.ph197:                                        ; preds = %.preheader, %.lr.ph197
  %.0145196 = phi i64 [ %132, %.lr.ph197 ], [ 1, %.preheader ]
  %109 = phi <2 x double> [ %131, %.lr.ph197 ], [ <double 0.000000e+00, double 1.000000e+00>, %.preheader ]
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %3) #8
  %110 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorIN10ClipperLib8IntPointESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %81, i64 noundef 0) #8
  %111 = load i64, ptr %110, align 8, !tbaa !44
  %112 = sitofp i64 %111 to double
  %113 = extractelement <2 x double> %109, i64 1
  %114 = call double @llvm.fmuladd.f64(double %113, double %1, double %112)
  %115 = call noundef i64 @_ZN10ClipperLib5RoundEd(double noundef %114)
  %116 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorIN10ClipperLib8IntPointESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %81, i64 noundef 0) #8
  %117 = getelementptr inbounds i8, ptr %116, i64 8
  %118 = load i64, ptr %117, align 8, !tbaa !45
  %119 = sitofp i64 %118 to double
  %120 = extractelement <2 x double> %109, i64 0
  %121 = call double @llvm.fmuladd.f64(double %120, double %1, double %119)
  %122 = call noundef i64 @_ZN10ClipperLib5RoundEd(double noundef %121)
  call void @_ZN10ClipperLib8IntPointC2Exx(ptr noundef nonnull align 8 dereferenceable(16) %3, i64 noundef %115, i64 noundef %122)
  call void @_ZNSt6vectorIN10ClipperLib8IntPointESaIS1_EE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %83, ptr noundef nonnull align 8 dereferenceable(16) %3)
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %3) #8
  %123 = load <2 x double>, ptr %64, align 8, !tbaa !46
  %124 = extractelement <2 x double> %123, i64 0
  %125 = fneg double %124
  %126 = shufflevector <2 x double> %109, <2 x double> poison, <2 x i32> zeroinitializer
  %127 = shufflevector <2 x double> %123, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %128 = insertelement <2 x double> %127, double %125, i64 1
  %129 = fmul <2 x double> %126, %128
  %130 = shufflevector <2 x double> %109, <2 x double> poison, <2 x i32> <i32 1, i32 1>
  %131 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %130, <2 x double> %123, <2 x double> %129)
  %132 = add nuw nsw i64 %.0145196, 1
  %133 = uitofp nneg i64 %132 to double
  %134 = fcmp ult double %.0136, %133
  br i1 %134, label %.loopexit158, label %.lr.ph197, !llvm.loop !47

.loopexit158.loopexit204:                         ; preds = %105
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %4) #8
  %135 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorIN10ClipperLib8IntPointESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %81, i64 noundef 0) #8
  %136 = load i64, ptr %135, align 8, !tbaa !44
  %137 = sitofp i64 %136 to double
  %138 = call double @llvm.fmuladd.f64(double %1, double -1.000000e+00, double %137)
  %139 = call noundef i64 @_ZN10ClipperLib5RoundEd(double noundef %138)
  %140 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorIN10ClipperLib8IntPointESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %81, i64 noundef 0) #8
  %141 = getelementptr inbounds i8, ptr %140, i64 8
  %142 = load i64, ptr %141, align 8, !tbaa !45
  %143 = sitofp i64 %142 to double
  %144 = call double @llvm.fmuladd.f64(double %1, double -1.000000e+00, double %143)
  %145 = call noundef i64 @_ZN10ClipperLib5RoundEd(double noundef %144)
  call void @_ZN10ClipperLib8IntPointC2Exx(ptr noundef nonnull align 8 dereferenceable(16) %4, i64 noundef %139, i64 noundef %145)
  call void @_ZNSt6vectorIN10ClipperLib8IntPointESaIS1_EE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %83, ptr noundef nonnull align 8 dereferenceable(16) %4)
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %4) #8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %4) #8
  %146 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorIN10ClipperLib8IntPointESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %81, i64 noundef 0) #8
  %147 = load i64, ptr %146, align 8, !tbaa !44
  %148 = sitofp i64 %147 to double
  %149 = fadd double %148, %1
  %150 = call noundef i64 @_ZN10ClipperLib5RoundEd(double noundef %149)
  %151 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorIN10ClipperLib8IntPointESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %81, i64 noundef 0) #8
  %152 = getelementptr inbounds i8, ptr %151, i64 8
  %153 = load i64, ptr %152, align 8, !tbaa !45
  %154 = sitofp i64 %153 to double
  %155 = call double @llvm.fmuladd.f64(double %1, double -1.000000e+00, double %154)
  %156 = call noundef i64 @_ZN10ClipperLib5RoundEd(double noundef %155)
  call void @_ZN10ClipperLib8IntPointC2Exx(ptr noundef nonnull align 8 dereferenceable(16) %4, i64 noundef %150, i64 noundef %156)
  call void @_ZNSt6vectorIN10ClipperLib8IntPointESaIS1_EE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %83, ptr noundef nonnull align 8 dereferenceable(16) %4)
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %4) #8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %4) #8
  %157 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorIN10ClipperLib8IntPointESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %81, i64 noundef 0) #8
  %158 = load i64, ptr %157, align 8, !tbaa !44
  %159 = sitofp i64 %158 to double
  %160 = fadd double %159, %1
  %161 = call noundef i64 @_ZN10ClipperLib5RoundEd(double noundef %160)
  %162 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorIN10ClipperLib8IntPointESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %81, i64 noundef 0) #8
  %163 = getelementptr inbounds i8, ptr %162, i64 8
  %164 = load i64, ptr %163, align 8, !tbaa !45
  %165 = sitofp i64 %164 to double
  %166 = fadd double %165, %1
  %167 = call noundef i64 @_ZN10ClipperLib5RoundEd(double noundef %166)
  call void @_ZN10ClipperLib8IntPointC2Exx(ptr noundef nonnull align 8 dereferenceable(16) %4, i64 noundef %161, i64 noundef %167)
  call void @_ZNSt6vectorIN10ClipperLib8IntPointESaIS1_EE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %83, ptr noundef nonnull align 8 dereferenceable(16) %4)
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %4) #8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %4) #8
  %168 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorIN10ClipperLib8IntPointESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %81, i64 noundef 0) #8
  %169 = load i64, ptr %168, align 8, !tbaa !44
  %170 = sitofp i64 %169 to double
  %171 = call double @llvm.fmuladd.f64(double %1, double -1.000000e+00, double %170)
  %172 = call noundef i64 @_ZN10ClipperLib5RoundEd(double noundef %171)
  %173 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorIN10ClipperLib8IntPointESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %81, i64 noundef 0) #8
  %174 = getelementptr inbounds i8, ptr %173, i64 8
  %175 = load i64, ptr %174, align 8, !tbaa !45
  %176 = sitofp i64 %175 to double
  %177 = fadd double %176, %1
  %178 = call noundef i64 @_ZN10ClipperLib5RoundEd(double noundef %177)
  call void @_ZN10ClipperLib8IntPointC2Exx(ptr noundef nonnull align 8 dereferenceable(16) %4, i64 noundef %172, i64 noundef %178)
  call void @_ZNSt6vectorIN10ClipperLib8IntPointESaIS1_EE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %83, ptr noundef nonnull align 8 dereferenceable(16) %4)
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %4) #8
  br label %.loopexit158

.loopexit158:                                     ; preds = %.lr.ph197, %.loopexit158.loopexit204, %.preheader
  call void @_ZNSt6vectorIS_IN10ClipperLib8IntPointESaIS1_EESaIS3_EE9push_backERKS3_(ptr noundef nonnull align 8 dereferenceable(24) %21, ptr noundef nonnull align 8 dereferenceable(24) %83)
  br label %360

179:                                              ; preds = %.thread, %103
  call void @_ZNSt6vectorIN10ClipperLib11DoublePointESaIS1_EE5clearEv(ptr noundef nonnull align 8 dereferenceable(24) %84) #8
  %sext = shl i64 %94, 32
  %180 = ashr exact i64 %sext, 32
  call void @_ZNSt6vectorIN10ClipperLib11DoublePointESaIS1_EE7reserveEm(ptr noundef nonnull align 8 dereferenceable(24) %84, i64 noundef %180)
  %181 = add i32 %95, -1
  %182 = icmp sgt i32 %95, 1
  br i1 %182, label %.lr.ph.preheader, label %._crit_edge

.lr.ph.preheader:                                 ; preds = %179
  %wide.trip.count = zext nneg i32 %181 to i64
  br label %.lr.ph

._crit_edge:                                      ; preds = %.lr.ph, %179
  %183 = getelementptr inbounds i8, ptr %91, i64 76
  %184 = load i32, ptr %183, align 4, !tbaa !35
  %switch = icmp ult i32 %184, 2
  br i1 %switch, label %190, label %197

.lr.ph:                                           ; preds = %.lr.ph.preheader, %.lr.ph
  %indvars.iv = phi i64 [ 0, %.lr.ph.preheader ], [ %indvars.iv.next, %.lr.ph ]
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %5) #8
  %185 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorIN10ClipperLib8IntPointESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %81, i64 noundef %indvars.iv) #8
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %186 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorIN10ClipperLib8IntPointESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %81, i64 noundef %indvars.iv.next) #8
  %187 = call { double, double } @_ZN10ClipperLib13GetUnitNormalERKNS_8IntPointES2_(ptr noundef nonnull align 8 dereferenceable(16) %185, ptr noundef nonnull align 8 dereferenceable(16) %186)
  %188 = extractvalue { double, double } %187, 0
  store double %188, ptr %5, align 8
  %189 = extractvalue { double, double } %187, 1
  store double %189, ptr %85, align 8
  call void @_ZNSt6vectorIN10ClipperLib11DoublePointESaIS1_EE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %84, ptr noundef nonnull align 8 dereferenceable(16) %5)
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %5) #8
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond.not, label %._crit_edge, label %.lr.ph, !llvm.loop !48

190:                                              ; preds = %._crit_edge
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %6) #8
  %191 = sext i32 %181 to i64
  %192 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorIN10ClipperLib8IntPointESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %81, i64 noundef %191) #8
  %193 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorIN10ClipperLib8IntPointESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %81, i64 noundef 0) #8
  %194 = call { double, double } @_ZN10ClipperLib13GetUnitNormalERKNS_8IntPointES2_(ptr noundef nonnull align 8 dereferenceable(16) %192, ptr noundef nonnull align 8 dereferenceable(16) %193)
  %195 = extractvalue { double, double } %194, 0
  store double %195, ptr %6, align 8
  %196 = extractvalue { double, double } %194, 1
  store double %196, ptr %86, align 8
  call void @_ZNSt6vectorIN10ClipperLib11DoublePointESaIS1_EE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %84, ptr noundef nonnull align 8 dereferenceable(16) %6)
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %6) #8
  br label %200

197:                                              ; preds = %._crit_edge
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %7) #8
  %sext157 = add i64 %sext, -8589934592
  %198 = ashr exact i64 %sext157, 32
  %199 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorIN10ClipperLib11DoublePointESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %84, i64 noundef %198) #8
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %7, ptr noundef nonnull align 8 dereferenceable(16) %199, i64 16, i1 false), !tbaa.struct !49
  call void @_ZNSt6vectorIN10ClipperLib11DoublePointESaIS1_EE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %84, ptr noundef nonnull align 8 dereferenceable(16) %7)
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %7) #8
  br label %200

200:                                              ; preds = %197, %190
  %201 = load i32, ptr %183, align 4, !tbaa !35
  switch i32 %201, label %233 [
    i32 0, label %202
    i32 1, label %208
  ]

202:                                              ; preds = %200
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %8) #8
  store i32 %181, ptr %8, align 4, !tbaa !50
  %203 = icmp sgt i32 %95, 0
  br i1 %203, label %.lr.ph177, label %._crit_edge178

.lr.ph177:                                        ; preds = %202
  %204 = getelementptr inbounds i8, ptr %91, i64 72
  br label %205

._crit_edge178:                                   ; preds = %205, %202
  call void @_ZNSt6vectorIS_IN10ClipperLib8IntPointESaIS1_EESaIS3_EE9push_backERKS3_(ptr noundef nonnull align 8 dereferenceable(24) %21, ptr noundef nonnull align 8 dereferenceable(24) %83)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %8) #8
  br label %360

205:                                              ; preds = %.lr.ph177, %205
  %.0139175 = phi i32 [ 0, %.lr.ph177 ], [ %207, %205 ]
  %206 = load i32, ptr %204, align 8, !tbaa !43
  call void @_ZN10ClipperLib13ClipperOffset11OffsetPointEiRiNS_8JoinTypeE(ptr noundef nonnull align 8 dereferenceable(256) %0, i32 noundef %.0139175, ptr noundef nonnull align 4 dereferenceable(4) %8, i32 noundef %206)
  %207 = add nuw nsw i32 %.0139175, 1
  %exitcond211.not = icmp eq i32 %207, %95
  br i1 %exitcond211.not, label %._crit_edge178, label %205, !llvm.loop !51

208:                                              ; preds = %200
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %9) #8
  store i32 %181, ptr %9, align 4, !tbaa !50
  %209 = icmp sgt i32 %95, 0
  br i1 %209, label %.lr.ph165, label %._crit_edge166

.lr.ph165:                                        ; preds = %208
  %210 = getelementptr inbounds i8, ptr %91, i64 72
  br label %214

._crit_edge166:                                   ; preds = %214, %208
  call void @_ZNSt6vectorIS_IN10ClipperLib8IntPointESaIS1_EESaIS3_EE9push_backERKS3_(ptr noundef nonnull align 8 dereferenceable(24) %21, ptr noundef nonnull align 8 dereferenceable(24) %83)
  call void @_ZNSt6vectorIN10ClipperLib8IntPointESaIS1_EE5clearEv(ptr noundef nonnull align 8 dereferenceable(24) %83) #8
  %211 = sext i32 %181 to i64
  %212 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorIN10ClipperLib11DoublePointESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %84, i64 noundef %211) #8
  %.sroa.0.0.copyload = load double, ptr %212, align 8, !tbaa !46
  %.sroa.4.0..sroa_idx = getelementptr inbounds i8, ptr %212, i64 8
  %.sroa.4.0.copyload = load double, ptr %.sroa.4.0..sroa_idx, align 8, !tbaa !46
  br i1 %182, label %.lr.ph169.preheader, label %._crit_edge170

.lr.ph169.preheader:                              ; preds = %._crit_edge166
  %213 = zext nneg i32 %181 to i64
  br label %.lr.ph169

214:                                              ; preds = %.lr.ph165, %214
  %.0138163 = phi i32 [ 0, %.lr.ph165 ], [ %216, %214 ]
  %215 = load i32, ptr %210, align 8, !tbaa !43
  call void @_ZN10ClipperLib13ClipperOffset11OffsetPointEiRiNS_8JoinTypeE(ptr noundef nonnull align 8 dereferenceable(256) %0, i32 noundef %.0138163, ptr noundef nonnull align 4 dereferenceable(4) %9, i32 noundef %215)
  %216 = add nuw nsw i32 %.0138163, 1
  %exitcond207.not = icmp eq i32 %216, %95
  br i1 %exitcond207.not, label %._crit_edge166, label %214, !llvm.loop !52

._crit_edge170:                                   ; preds = %.lr.ph169, %._crit_edge166
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %11) #8
  %217 = fneg double %.sroa.0.0.copyload
  %218 = fneg double %.sroa.4.0.copyload
  call void @_ZN10ClipperLib11DoublePointC2Edd(ptr noundef nonnull align 8 dereferenceable(16) %11, double noundef %217, double noundef %218)
  %219 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorIN10ClipperLib11DoublePointESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %84, i64 noundef 0) #8
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %219, ptr noundef nonnull align 8 dereferenceable(16) %11, i64 16, i1 false), !tbaa.struct !49
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %11) #8
  store i32 0, ptr %9, align 4, !tbaa !50
  br i1 %209, label %.lr.ph173, label %._crit_edge174

.lr.ph173:                                        ; preds = %._crit_edge170
  %220 = getelementptr inbounds i8, ptr %91, i64 72
  br label %230

.lr.ph169:                                        ; preds = %.lr.ph169.preheader, %.lr.ph169
  %indvars.iv208 = phi i64 [ %213, %.lr.ph169.preheader ], [ %indvars.iv.next209, %.lr.ph169 ]
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %10) #8
  %indvars.iv.next209 = add nsw i64 %indvars.iv208, -1
  %221 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorIN10ClipperLib11DoublePointESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %84, i64 noundef %indvars.iv.next209) #8
  %222 = load double, ptr %221, align 8, !tbaa !53
  %223 = fneg double %222
  %224 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorIN10ClipperLib11DoublePointESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %84, i64 noundef %indvars.iv.next209) #8
  %225 = getelementptr inbounds i8, ptr %224, i64 8
  %226 = load double, ptr %225, align 8, !tbaa !55
  %227 = fneg double %226
  call void @_ZN10ClipperLib11DoublePointC2Edd(ptr noundef nonnull align 8 dereferenceable(16) %10, double noundef %223, double noundef %227)
  %228 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorIN10ClipperLib11DoublePointESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %84, i64 noundef %indvars.iv208) #8
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %228, ptr noundef nonnull align 8 dereferenceable(16) %10, i64 16, i1 false), !tbaa.struct !49
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %10) #8
  %229 = icmp ugt i64 %indvars.iv208, 1
  br i1 %229, label %.lr.ph169, label %._crit_edge170, !llvm.loop !56

._crit_edge174:                                   ; preds = %230, %._crit_edge170
  call void @_ZNSt6vectorIS_IN10ClipperLib8IntPointESaIS1_EESaIS3_EE9push_backERKS3_(ptr noundef nonnull align 8 dereferenceable(24) %21, ptr noundef nonnull align 8 dereferenceable(24) %83)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %9) #8
  br label %360

230:                                              ; preds = %.lr.ph173, %230
  %.0134171 = phi i32 [ %181, %.lr.ph173 ], [ %232, %230 ]
  %231 = load i32, ptr %220, align 8, !tbaa !43
  call void @_ZN10ClipperLib13ClipperOffset11OffsetPointEiRiNS_8JoinTypeE(ptr noundef nonnull align 8 dereferenceable(256) %0, i32 noundef %.0134171, ptr noundef nonnull align 4 dereferenceable(4) %9, i32 noundef %231)
  %232 = add nsw i32 %.0134171, -1
  %.not224 = icmp eq i32 %.0134171, 0
  br i1 %.not224, label %._crit_edge174, label %230, !llvm.loop !57

233:                                              ; preds = %200
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %12) #8
  store i32 0, ptr %12, align 4, !tbaa !50
  %234 = icmp sgt i32 %95, 2
  br i1 %234, label %.lr.ph181, label %._crit_edge182

.lr.ph181:                                        ; preds = %233
  %235 = getelementptr inbounds i8, ptr %91, i64 72
  br label %238

._crit_edge182:                                   ; preds = %238, %233
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %13) #8
  call void @_ZN10ClipperLib8IntPointC2Exx(ptr noundef nonnull align 8 dereferenceable(16) %13, i64 noundef 0, i64 noundef 0)
  %236 = load i32, ptr %183, align 4, !tbaa !35
  %237 = icmp eq i32 %236, 2
  br i1 %237, label %241, label %277

238:                                              ; preds = %.lr.ph181, %238
  %.0133179 = phi i32 [ 1, %.lr.ph181 ], [ %240, %238 ]
  %239 = load i32, ptr %235, align 8, !tbaa !43
  call void @_ZN10ClipperLib13ClipperOffset11OffsetPointEiRiNS_8JoinTypeE(ptr noundef nonnull align 8 dereferenceable(256) %0, i32 noundef %.0133179, ptr noundef nonnull align 4 dereferenceable(4) %12, i32 noundef %239)
  %240 = add nuw nsw i32 %.0133179, 1
  %exitcond212.not = icmp eq i32 %240, %181
  br i1 %exitcond212.not, label %._crit_edge182, label %238, !llvm.loop !58

241:                                              ; preds = %._crit_edge182
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %14) #8
  %242 = sext i32 %181 to i64
  %243 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorIN10ClipperLib8IntPointESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %81, i64 noundef %242) #8
  %244 = load i64, ptr %243, align 8, !tbaa !44
  %245 = sitofp i64 %244 to double
  %246 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorIN10ClipperLib11DoublePointESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %84, i64 noundef %242) #8
  %247 = load double, ptr %246, align 8, !tbaa !53
  %248 = call double @llvm.fmuladd.f64(double %247, double %1, double %245)
  %249 = call noundef i64 @_ZN10ClipperLib5RoundEd(double noundef %248)
  %250 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorIN10ClipperLib8IntPointESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %81, i64 noundef %242) #8
  %251 = getelementptr inbounds i8, ptr %250, i64 8
  %252 = load i64, ptr %251, align 8, !tbaa !45
  %253 = sitofp i64 %252 to double
  %254 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorIN10ClipperLib11DoublePointESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %84, i64 noundef %242) #8
  %255 = getelementptr inbounds i8, ptr %254, i64 8
  %256 = load double, ptr %255, align 8, !tbaa !55
  %257 = call double @llvm.fmuladd.f64(double %256, double %1, double %253)
  %258 = call noundef i64 @_ZN10ClipperLib5RoundEd(double noundef %257)
  call void @_ZN10ClipperLib8IntPointC2Exx(ptr noundef nonnull align 8 dereferenceable(16) %14, i64 noundef %249, i64 noundef %258)
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %13, ptr noundef nonnull align 8 dereferenceable(16) %14, i64 16, i1 false), !tbaa.struct !59
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %14) #8
  call void @_ZNSt6vectorIN10ClipperLib8IntPointESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %83, ptr noundef nonnull align 8 dereferenceable(16) %13)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %15) #8
  %259 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorIN10ClipperLib8IntPointESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %81, i64 noundef %242) #8
  %260 = load i64, ptr %259, align 8, !tbaa !44
  %261 = sitofp i64 %260 to double
  %262 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorIN10ClipperLib11DoublePointESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %84, i64 noundef %242) #8
  %263 = load double, ptr %262, align 8, !tbaa !53
  %264 = fneg double %263
  %265 = call double @llvm.fmuladd.f64(double %264, double %1, double %261)
  %266 = call noundef i64 @_ZN10ClipperLib5RoundEd(double noundef %265)
  %267 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorIN10ClipperLib8IntPointESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %81, i64 noundef %242) #8
  %268 = getelementptr inbounds i8, ptr %267, i64 8
  %269 = load i64, ptr %268, align 8, !tbaa !45
  %270 = sitofp i64 %269 to double
  %271 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorIN10ClipperLib11DoublePointESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %84, i64 noundef %242) #8
  %272 = getelementptr inbounds i8, ptr %271, i64 8
  %273 = load double, ptr %272, align 8, !tbaa !55
  %274 = fneg double %273
  %275 = call double @llvm.fmuladd.f64(double %274, double %1, double %270)
  %276 = call noundef i64 @_ZN10ClipperLib5RoundEd(double noundef %275)
  call void @_ZN10ClipperLib8IntPointC2Exx(ptr noundef nonnull align 8 dereferenceable(16) %15, i64 noundef %266, i64 noundef %276)
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %13, ptr noundef nonnull align 8 dereferenceable(16) %15, i64 16, i1 false), !tbaa.struct !59
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %15) #8
  call void @_ZNSt6vectorIN10ClipperLib8IntPointESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %83, ptr noundef nonnull align 8 dereferenceable(16) %13)
  br label %293

277:                                              ; preds = %._crit_edge182
  %278 = add nsw i32 %95, -2
  store i32 %278, ptr %12, align 4, !tbaa !50
  store double 0.000000e+00, ptr %87, align 8, !tbaa !61
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %16) #8
  %279 = sext i32 %181 to i64
  %280 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorIN10ClipperLib11DoublePointESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %84, i64 noundef %279) #8
  %281 = load double, ptr %280, align 8, !tbaa !53
  %282 = fneg double %281
  %283 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorIN10ClipperLib11DoublePointESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %84, i64 noundef %279) #8
  %284 = getelementptr inbounds i8, ptr %283, i64 8
  %285 = load double, ptr %284, align 8, !tbaa !55
  %286 = fneg double %285
  call void @_ZN10ClipperLib11DoublePointC2Edd(ptr noundef nonnull align 8 dereferenceable(16) %16, double noundef %282, double noundef %286)
  %287 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorIN10ClipperLib11DoublePointESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %84, i64 noundef %279) #8
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %287, ptr noundef nonnull align 8 dereferenceable(16) %16, i64 16, i1 false), !tbaa.struct !49
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %16) #8
  %288 = load i32, ptr %183, align 4, !tbaa !35
  %289 = icmp eq i32 %288, 3
  %290 = load i32, ptr %12, align 4, !tbaa !50
  br i1 %289, label %291, label %292

291:                                              ; preds = %277
  call void @_ZN10ClipperLib13ClipperOffset8DoSquareEii(ptr noundef nonnull align 8 dereferenceable(256) %0, i32 noundef %181, i32 noundef %290)
  br label %293

292:                                              ; preds = %277
  call void @_ZN10ClipperLib13ClipperOffset7DoRoundEii(ptr noundef nonnull align 8 dereferenceable(256) %0, i32 noundef %181, i32 noundef %290)
  br label %293

293:                                              ; preds = %291, %292, %241
  br i1 %182, label %.lr.ph185.preheader, label %._crit_edge186

.lr.ph185.preheader:                              ; preds = %293
  %294 = zext nneg i32 %181 to i64
  br label %.lr.ph185

._crit_edge186:                                   ; preds = %.lr.ph185, %293
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %18) #8
  %295 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorIN10ClipperLib11DoublePointESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %84, i64 noundef 1) #8
  %296 = load double, ptr %295, align 8, !tbaa !53
  %297 = fneg double %296
  %298 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorIN10ClipperLib11DoublePointESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %84, i64 noundef 1) #8
  %299 = getelementptr inbounds i8, ptr %298, i64 8
  %300 = load double, ptr %299, align 8, !tbaa !55
  %301 = fneg double %300
  call void @_ZN10ClipperLib11DoublePointC2Edd(ptr noundef nonnull align 8 dereferenceable(16) %18, double noundef %297, double noundef %301)
  %302 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorIN10ClipperLib11DoublePointESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %84, i64 noundef 0) #8
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %302, ptr noundef nonnull align 8 dereferenceable(16) %18, i64 16, i1 false), !tbaa.struct !49
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %18) #8
  store i32 %181, ptr %12, align 4, !tbaa !50
  br i1 %234, label %.lr.ph189, label %._crit_edge190

.lr.ph189:                                        ; preds = %._crit_edge186
  %303 = add nsw i32 %95, -2
  %304 = getelementptr inbounds i8, ptr %91, i64 72
  br label %316

.lr.ph185:                                        ; preds = %.lr.ph185.preheader, %.lr.ph185
  %indvars.iv213 = phi i64 [ %294, %.lr.ph185.preheader ], [ %indvars.iv.next214, %.lr.ph185 ]
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %17) #8
  %indvars.iv.next214 = add nsw i64 %indvars.iv213, -1
  %305 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorIN10ClipperLib11DoublePointESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %84, i64 noundef %indvars.iv.next214) #8
  %306 = load double, ptr %305, align 8, !tbaa !53
  %307 = fneg double %306
  %308 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorIN10ClipperLib11DoublePointESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %84, i64 noundef %indvars.iv.next214) #8
  %309 = getelementptr inbounds i8, ptr %308, i64 8
  %310 = load double, ptr %309, align 8, !tbaa !55
  %311 = fneg double %310
  call void @_ZN10ClipperLib11DoublePointC2Edd(ptr noundef nonnull align 8 dereferenceable(16) %17, double noundef %307, double noundef %311)
  %312 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorIN10ClipperLib11DoublePointESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %84, i64 noundef %indvars.iv213) #8
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %312, ptr noundef nonnull align 8 dereferenceable(16) %17, i64 16, i1 false), !tbaa.struct !49
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %17) #8
  %313 = icmp ugt i64 %indvars.iv213, 1
  br i1 %313, label %.lr.ph185, label %._crit_edge186, !llvm.loop !62

._crit_edge190:                                   ; preds = %316, %._crit_edge186
  %314 = load i32, ptr %183, align 4, !tbaa !35
  %315 = icmp eq i32 %314, 2
  br i1 %315, label %320, label %355

316:                                              ; preds = %.lr.ph189, %316
  %.0187 = phi i32 [ %303, %.lr.ph189 ], [ %318, %316 ]
  %317 = load i32, ptr %304, align 8, !tbaa !43
  call void @_ZN10ClipperLib13ClipperOffset11OffsetPointEiRiNS_8JoinTypeE(ptr noundef nonnull align 8 dereferenceable(256) %0, i32 noundef %.0187, ptr noundef nonnull align 4 dereferenceable(4) %12, i32 noundef %317)
  %318 = add nsw i32 %.0187, -1
  %319 = icmp ugt i32 %.0187, 1
  br i1 %319, label %316, label %._crit_edge190, !llvm.loop !63

320:                                              ; preds = %._crit_edge190
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %19) #8
  %321 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorIN10ClipperLib8IntPointESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %81, i64 noundef 0) #8
  %322 = load i64, ptr %321, align 8, !tbaa !44
  %323 = sitofp i64 %322 to double
  %324 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorIN10ClipperLib11DoublePointESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %84, i64 noundef 0) #8
  %325 = load double, ptr %324, align 8, !tbaa !53
  %326 = fneg double %325
  %327 = call double @llvm.fmuladd.f64(double %326, double %1, double %323)
  %328 = call noundef i64 @_ZN10ClipperLib5RoundEd(double noundef %327)
  %329 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorIN10ClipperLib8IntPointESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %81, i64 noundef 0) #8
  %330 = getelementptr inbounds i8, ptr %329, i64 8
  %331 = load i64, ptr %330, align 8, !tbaa !45
  %332 = sitofp i64 %331 to double
  %333 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorIN10ClipperLib11DoublePointESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %84, i64 noundef 0) #8
  %334 = getelementptr inbounds i8, ptr %333, i64 8
  %335 = load double, ptr %334, align 8, !tbaa !55
  %336 = fneg double %335
  %337 = call double @llvm.fmuladd.f64(double %336, double %1, double %332)
  %338 = call noundef i64 @_ZN10ClipperLib5RoundEd(double noundef %337)
  call void @_ZN10ClipperLib8IntPointC2Exx(ptr noundef nonnull align 8 dereferenceable(16) %19, i64 noundef %328, i64 noundef %338)
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %13, ptr noundef nonnull align 8 dereferenceable(16) %19, i64 16, i1 false), !tbaa.struct !59
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %19) #8
  call void @_ZNSt6vectorIN10ClipperLib8IntPointESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %83, ptr noundef nonnull align 8 dereferenceable(16) %13)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %20) #8
  %339 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorIN10ClipperLib8IntPointESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %81, i64 noundef 0) #8
  %340 = load i64, ptr %339, align 8, !tbaa !44
  %341 = sitofp i64 %340 to double
  %342 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorIN10ClipperLib11DoublePointESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %84, i64 noundef 0) #8
  %343 = load double, ptr %342, align 8, !tbaa !53
  %344 = call double @llvm.fmuladd.f64(double %343, double %1, double %341)
  %345 = call noundef i64 @_ZN10ClipperLib5RoundEd(double noundef %344)
  %346 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorIN10ClipperLib8IntPointESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %81, i64 noundef 0) #8
  %347 = getelementptr inbounds i8, ptr %346, i64 8
  %348 = load i64, ptr %347, align 8, !tbaa !45
  %349 = sitofp i64 %348 to double
  %350 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorIN10ClipperLib11DoublePointESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %84, i64 noundef 0) #8
  %351 = getelementptr inbounds i8, ptr %350, i64 8
  %352 = load double, ptr %351, align 8, !tbaa !55
  %353 = call double @llvm.fmuladd.f64(double %352, double %1, double %349)
  %354 = call noundef i64 @_ZN10ClipperLib5RoundEd(double noundef %353)
  call void @_ZN10ClipperLib8IntPointC2Exx(ptr noundef nonnull align 8 dereferenceable(16) %20, i64 noundef %345, i64 noundef %354)
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %13, ptr noundef nonnull align 8 dereferenceable(16) %20, i64 16, i1 false), !tbaa.struct !59
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %20) #8
  call void @_ZNSt6vectorIN10ClipperLib8IntPointESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %83, ptr noundef nonnull align 8 dereferenceable(16) %13)
  br label %359

355:                                              ; preds = %._crit_edge190
  store i32 1, ptr %12, align 4, !tbaa !50
  store double 0.000000e+00, ptr %87, align 8, !tbaa !61
  %356 = icmp eq i32 %314, 3
  br i1 %356, label %357, label %358

357:                                              ; preds = %355
  call void @_ZN10ClipperLib13ClipperOffset8DoSquareEii(ptr noundef nonnull align 8 dereferenceable(256) %0, i32 noundef 0, i32 noundef 1)
  br label %359

358:                                              ; preds = %355
  call void @_ZN10ClipperLib13ClipperOffset7DoRoundEii(ptr noundef nonnull align 8 dereferenceable(256) %0, i32 noundef 0, i32 noundef 1)
  br label %359

359:                                              ; preds = %357, %358, %320
  call void @_ZNSt6vectorIS_IN10ClipperLib8IntPointESaIS1_EESaIS3_EE9push_backERKS3_(ptr noundef nonnull align 8 dereferenceable(24) %21, ptr noundef nonnull align 8 dereferenceable(24) %83)
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %13) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %12) #8
  br label %360

360:                                              ; preds = %._crit_edge178, %359, %._crit_edge174, %89, %98, %100, %.loopexit158
  %indvars.iv.next218 = add nuw nsw i64 %indvars.iv217, 1
  %361 = call noundef i32 @_ZNK10ClipperLib8PolyNode10ChildCountEv(ptr noundef nonnull align 8 dereferenceable(80) %74)
  %362 = sext i32 %361 to i64
  %363 = icmp slt i64 %indvars.iv.next218, %362
  br i1 %363, label %89, label %.loopexit, !llvm.loop !64

.loopexit:                                        ; preds = %360, %39, %73, %24
  ret void
}

; Function Attrs: mustprogress nofree nounwind willreturn memory(write)
declare double @acos(double noundef) local_unnamed_addr #6

; Function Attrs: mustprogress nofree nounwind willreturn memory(write)
declare double @sin(double noundef) local_unnamed_addr #6

; Function Attrs: mustprogress nofree nounwind willreturn memory(write)
declare double @cos(double noundef) local_unnamed_addr #6

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN10ClipperLib13ClipperOffset11OffsetPointEiRiNS_8JoinTypeE(ptr noundef nonnull align 8 dereferenceable(256), i32 noundef, ptr noundef nonnull align 4 dereferenceable(4), i32 noundef) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN10ClipperLib13ClipperOffset8DoSquareEii(ptr noundef nonnull align 8 dereferenceable(256), i32 noundef, i32 noundef) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN10ClipperLib13ClipperOffset7DoRoundEii(ptr noundef nonnull align 8 dereferenceable(256), i32 noundef, i32 noundef) local_unnamed_addr #5 align 2

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare <2 x double> @llvm.fmuladd.v2f64(<2 x double>, <2 x double>, <2 x double>) #7

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
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 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 #6 = { mustprogress nofree nounwind willreturn memory(write) "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 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #8 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !7, i64 112}
!6 = !{!"_ZTSN10ClipperLib13ClipperOffsetE", !7, i64 0, !7, i64 8, !10, i64 16, !15, i64 40, !15, i64 64, !19, i64 88, !7, i64 112, !7, i64 120, !7, i64 128, !7, i64 136, !7, i64 144, !7, i64 152, !23, i64 160, !25, i64 176}
!7 = !{!"double", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!"_ZTSSt6vectorIS_IN10ClipperLib8IntPointESaIS1_EESaIS3_EE", !11, i64 0}
!11 = !{!"_ZTSSt12_Vector_baseISt6vectorIN10ClipperLib8IntPointESaIS2_EESaIS4_EE", !12, i64 0}
!12 = !{!"_ZTSNSt12_Vector_baseISt6vectorIN10ClipperLib8IntPointESaIS2_EESaIS4_EE12_Vector_implE", !13, i64 0}
!13 = !{!"_ZTSNSt12_Vector_baseISt6vectorIN10ClipperLib8IntPointESaIS2_EESaIS4_EE17_Vector_impl_dataE", !14, i64 0, !14, i64 8, !14, i64 16}
!14 = !{!"any pointer", !8, i64 0}
!15 = !{!"_ZTSSt6vectorIN10ClipperLib8IntPointESaIS1_EE", !16, i64 0}
!16 = !{!"_ZTSSt12_Vector_baseIN10ClipperLib8IntPointESaIS1_EE", !17, i64 0}
!17 = !{!"_ZTSNSt12_Vector_baseIN10ClipperLib8IntPointESaIS1_EE12_Vector_implE", !18, i64 0}
!18 = !{!"_ZTSNSt12_Vector_baseIN10ClipperLib8IntPointESaIS1_EE17_Vector_impl_dataE", !14, i64 0, !14, i64 8, !14, i64 16}
!19 = !{!"_ZTSSt6vectorIN10ClipperLib11DoublePointESaIS1_EE", !20, i64 0}
!20 = !{!"_ZTSSt12_Vector_baseIN10ClipperLib11DoublePointESaIS1_EE", !21, i64 0}
!21 = !{!"_ZTSNSt12_Vector_baseIN10ClipperLib11DoublePointESaIS1_EE12_Vector_implE", !22, i64 0}
!22 = !{!"_ZTSNSt12_Vector_baseIN10ClipperLib11DoublePointESaIS1_EE17_Vector_impl_dataE", !14, i64 0, !14, i64 8, !14, i64 16}
!23 = !{!"_ZTSN10ClipperLib8IntPointE", !24, i64 0, !24, i64 8}
!24 = !{!"long long", !8, i64 0}
!25 = !{!"_ZTSN10ClipperLib8PolyNodeE", !15, i64 8, !26, i64 32, !14, i64 56, !30, i64 64, !31, i64 68, !32, i64 72, !33, i64 76}
!26 = !{!"_ZTSSt6vectorIPN10ClipperLib8PolyNodeESaIS2_EE", !27, i64 0}
!27 = !{!"_ZTSSt12_Vector_baseIPN10ClipperLib8PolyNodeESaIS2_EE", !28, i64 0}
!28 = !{!"_ZTSNSt12_Vector_baseIPN10ClipperLib8PolyNodeESaIS2_EE12_Vector_implE", !29, i64 0}
!29 = !{!"_ZTSNSt12_Vector_baseIPN10ClipperLib8PolyNodeESaIS2_EE17_Vector_impl_dataE", !14, i64 0, !14, i64 8, !14, i64 16}
!30 = !{!"int", !8, i64 0}
!31 = !{!"bool", !8, i64 0}
!32 = !{!"_ZTSN10ClipperLib8JoinTypeE", !8, i64 0}
!33 = !{!"_ZTSN10ClipperLib7EndTypeE", !8, i64 0}
!34 = !{!14, !14, i64 0}
!35 = !{!25, !33, i64 76}
!36 = distinct !{!36, !37}
!37 = !{!"llvm.loop.mustprogress"}
!38 = !{!6, !7, i64 0}
!39 = !{!6, !7, i64 8}
!40 = !{!6, !7, i64 128}
!41 = !{!6, !7, i64 136}
!42 = !{!6, !7, i64 152}
!43 = !{!25, !32, i64 72}
!44 = !{!23, !24, i64 0}
!45 = !{!23, !24, i64 8}
!46 = !{!7, !7, i64 0}
!47 = distinct !{!47, !37}
!48 = distinct !{!48, !37}
!49 = !{i64 0, i64 8, !46, i64 8, i64 8, !46}
!50 = !{!30, !30, i64 0}
!51 = distinct !{!51, !37}
!52 = distinct !{!52, !37}
!53 = !{!54, !7, i64 0}
!54 = !{!"_ZTSN10ClipperLib11DoublePointE", !7, i64 0, !7, i64 8}
!55 = !{!54, !7, i64 8}
!56 = distinct !{!56, !37}
!57 = distinct !{!57, !37}
!58 = distinct !{!58, !37}
!59 = !{i64 0, i64 8, !60, i64 8, i64 8, !60}
!60 = !{!24, !24, i64 0}
!61 = !{!6, !7, i64 120}
!62 = distinct !{!62, !37}
!63 = distinct !{!63, !37}
!64 = distinct !{!64, !37}


; Effective O3 passes: CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,LCSSAPass,LICMPass,LoopInstSimplifyPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,MergedLoadStoreMotionPass,SCCPPass,SLPVectorizerPass,SROAPass,SimplifyCFGPass,TailCallElimPass