; LLVM IR from Yinxiaoli/iros2015_folding :: src/folding_planner/src (Registration)

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

%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<SPoint2D, std::allocator<SPoint2D>>::_Vector_impl" }
%"struct.std::_Vector_base<SPoint2D, std::allocator<SPoint2D>>::_Vector_impl" = type { %"struct.std::_Vector_base<SPoint2D, std::allocator<SPoint2D>>::_Vector_impl_data" }
%"struct.std::_Vector_base<SPoint2D, std::allocator<SPoint2D>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.89" = type { %"struct.std::_Vector_base.90" }
%"struct.std::_Vector_base.90" = type { %"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl" }
%"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl" = type { %"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl_data" }
%"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.94" = type { %"struct.std::_Vector_base.95" }
%"struct.std::_Vector_base.95" = type { %"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl" }
%"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl" = type { %"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl_data" }
%"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%struct.SPoint2D = type { [2 x double] }
%"class.Eigen::Block.99" = type { %"class.Eigen::BlockImpl.100" }
%"class.Eigen::BlockImpl.100" = type { %"class.Eigen::internal::BlockImpl_dense.101" }
%"class.Eigen::internal::BlockImpl_dense.101" = type { %"class.Eigen::MapBase.base.112", ptr, i64 }
%"class.Eigen::MapBase.base.112" = type { %"class.Eigen::MapBase.base.111" }
%"class.Eigen::MapBase.base.111" = type <{ ptr, [2 x i8] }>
%"class.Eigen::Matrix" = type { %"class.Eigen::PlainObjectBase" }
%"class.Eigen::PlainObjectBase" = type { %"class.Eigen::DenseStorage" }
%"class.Eigen::DenseStorage" = type { %"struct.Eigen::internal::plain_array" }
%"struct.Eigen::internal::plain_array" = type { [2 x double] }
%"class.Eigen::CwiseBinaryOp.113" = type <{ %"class.Eigen::Block.99", %"class.Eigen::Block.99", [8 x i8] }>
%struct.SCurve = type { i8, i32, %"class.Eigen::Matrix.27", %"class.Eigen::Matrix.27", %"class.Eigen::Matrix.37" }
%"class.Eigen::Matrix.27" = type { %"class.Eigen::PlainObjectBase.28" }
%"class.Eigen::PlainObjectBase.28" = type { %"class.Eigen::DenseStorage.36" }
%"class.Eigen::DenseStorage.36" = type { ptr, i64 }
%"class.Eigen::Matrix.37" = type { %"class.Eigen::PlainObjectBase.38" }
%"class.Eigen::PlainObjectBase.38" = type { %"class.Eigen::DenseStorage.46" }
%"class.Eigen::DenseStorage.46" = type { ptr, i64 }
%struct.SVar = type { %"class.Eigen::Matrix.53", %"class.Eigen::Matrix.27" }
%"class.Eigen::Matrix.53" = type { %"class.Eigen::PlainObjectBase.54" }
%"class.Eigen::PlainObjectBase.54" = type { %"class.Eigen::DenseStorage.62" }
%"class.Eigen::DenseStorage.62" = type { ptr, i64 }
%struct.SParameters = type { double, double, double, double, %"struct._BlueTail::_Image::SImage", %struct.SRegion, i32, double, double, double, double, i32, double }
%"struct._BlueTail::_Image::SImage" = type { i32, i32, ptr }
%struct.SRegion = type { double, double, double, double }

@_ZL2PI = external hidden constant double, align 8

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef double @_ZNK5Eigen10MatrixBaseINS_6MatrixIdLi2ELi1ELi0ELi2ELi1EEEE4normEv(ptr noundef nonnull align 1 dereferenceable(1)) #1 align 2

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

; Function Attrs: mustprogress uwtable
define dso_local void @_Z22UpdateCurveSubdivisionPK11SParametersR4SVarS3_P6SCurveR11SSolverVars(ptr noundef %0, ptr noundef nonnull align 8 dereferenceable(32) %1, ptr noundef nonnull align 8 dereferenceable(32) %2, ptr noundef %3, ptr noundef nonnull align 8 dereferenceable(240) %4) #2 personality ptr @__gxx_personality_v0 {
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca i32, align 4
  %12 = alloca %"class.std::vector", align 8
  %13 = alloca %"class.std::vector.89", align 8
  %14 = alloca %"class.std::vector.94", align 8
  %15 = alloca i8, align 1
  %16 = alloca i32, align 4
  %17 = alloca %struct.SPoint2D, align 8
  %18 = alloca %"class.Eigen::Block.99", align 8
  %19 = alloca ptr, align 8
  %20 = alloca i32, align 4
  %21 = alloca %"class.Eigen::Block.99", align 8
  %22 = alloca i32, align 4
  %23 = alloca %"class.Eigen::Matrix", align 16
  %24 = alloca %"class.Eigen::CwiseBinaryOp.113", align 8
  %25 = alloca %"class.Eigen::Block.99", align 8
  %26 = alloca %"class.Eigen::Block.99", align 8
  %27 = alloca %struct.SPoint2D, align 8
  %28 = alloca %"class.Eigen::Block.99", align 8
  %29 = alloca %"class.Eigen::Block.99", align 8
  %30 = alloca %"class.Eigen::Block.99", align 8
  %31 = alloca %"class.Eigen::Block.99", align 8
  %32 = alloca i32, align 4
  %33 = alloca i32, align 4
  %34 = alloca %struct.SPoint2D, align 8
  %35 = alloca %"class.Eigen::Block.99", align 8
  %36 = alloca %"class.Eigen::Block.99", align 8
  %37 = alloca i32, align 4
  %38 = alloca i32, align 4
  %39 = alloca %"class.Eigen::Block.99", align 8
  %40 = alloca %"class.Eigen::Block.99", align 8
  %41 = alloca i32, align 4
  %42 = alloca i32, align 4
  %43 = alloca %"class.Eigen::Matrix", align 16
  %44 = alloca %"class.Eigen::CwiseBinaryOp.113", align 8
  %45 = alloca %"class.Eigen::Block.99", align 8
  %46 = alloca %"class.Eigen::Block.99", align 8
  %47 = alloca i32, align 4
  store ptr %0, ptr %6, align 8, !tbaa !5
  store ptr %1, ptr %7, align 8, !tbaa !5
  store ptr %2, ptr %8, align 8, !tbaa !5
  store ptr %3, ptr %9, align 8, !tbaa !5
  store ptr %4, ptr %10, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #5
  %48 = load ptr, ptr %9, align 8, !tbaa !5
  %49 = getelementptr inbounds %struct.SCurve, ptr %48, i32 0, i32 0
  %50 = load i8, ptr %49, align 8, !tbaa !9, !range !20, !noundef !21
  %51 = trunc i8 %50 to i1
  br i1 %51, label %52, label %56

52:                                               ; preds = %5
  %53 = load ptr, ptr %9, align 8, !tbaa !5
  %54 = getelementptr inbounds %struct.SCurve, ptr %53, i32 0, i32 1
  %55 = load i32, ptr %54, align 4, !tbaa !22
  br label %61

56:                                               ; preds = %5
  %57 = load ptr, ptr %9, align 8, !tbaa !5
  %58 = getelementptr inbounds %struct.SCurve, ptr %57, i32 0, i32 1
  %59 = load i32, ptr %58, align 4, !tbaa !22
  %60 = sub nsw i32 %59, 1
  br label %61

61:                                               ; preds = %56, %52
  %62 = phi i32 [ %55, %52 ], [ %60, %56 ]
  store i32 %62, ptr %11, align 4, !tbaa !23
  call void @llvm.lifetime.start.p0(i64 24, ptr %12) #5
  call void @_ZNSt6vectorI8SPoint2DSaIS0_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %12) #5
  call void @llvm.lifetime.start.p0(i64 24, ptr %13) #5
  call void @_ZNSt6vectorIdSaIdEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %13) #5
  call void @llvm.lifetime.start.p0(i64 24, ptr %14) #5
  call void @_ZNSt6vectorIiSaIiEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %14) #5
  call void @llvm.lifetime.start.p0(i64 1, ptr %15) #5
  store i8 0, ptr %15, align 1, !tbaa !24
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #5
  store i32 0, ptr %16, align 4, !tbaa !23
  br label %63

63:                                               ; preds = %234, %61
  %64 = load i32, ptr %16, align 4, !tbaa !23
  %65 = load i32, ptr %11, align 4, !tbaa !23
  %66 = icmp slt i32 %64, %65
  br i1 %66, label %68, label %67

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

68:                                               ; preds = %63
  call void @llvm.lifetime.start.p0(i64 16, ptr %17) #5
  call void @llvm.lifetime.start.p0(i64 32, ptr %18) #5
  %69 = load ptr, ptr %8, align 8, !tbaa !5
  %70 = getelementptr inbounds %struct.SVar, ptr %69, i32 0, i32 0
  %71 = load i32, ptr %16, align 4, !tbaa !23
  %72 = sext i32 %71 to i64
  invoke void @_ZN5Eigen9DenseBaseINS_6MatrixIdLi2ELin1ELi0ELi2ELin1EEEE3colEl(ptr dead_on_unwind writable sret(%"class.Eigen::Block.99") align 8 %18, ptr noundef nonnull align 1 dereferenceable(1) %70, i64 noundef %72)
          to label %73 unwind label %112

73:                                               ; preds = %68
  %74 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN5Eigen15DenseCoeffsBaseINS_5BlockINS_6MatrixIdLi2ELin1ELi0ELi2ELin1EEELi2ELi1ELb1EEELi1EEclEl(ptr noundef nonnull align 1 dereferenceable(1) %18, i64 noundef 0)
          to label %75 unwind label %112

75:                                               ; preds = %73
  %76 = load double, ptr %74, align 8, !tbaa !25
  %77 = getelementptr inbounds %struct.SPoint2D, ptr %17, i32 0, i32 0
  %78 = getelementptr inbounds [2 x double], ptr %77, i64 0, i64 0
  store double %76, ptr %78, align 8, !tbaa !25
  call void @llvm.lifetime.end.p0(i64 32, ptr %18) #5
  call void @llvm.lifetime.start.p0(i64 32, ptr %21) #5
  %79 = load ptr, ptr %8, align 8, !tbaa !5
  %80 = getelementptr inbounds %struct.SVar, ptr %79, i32 0, i32 0
  %81 = load i32, ptr %16, align 4, !tbaa !23
  %82 = sext i32 %81 to i64
  invoke void @_ZN5Eigen9DenseBaseINS_6MatrixIdLi2ELin1ELi0ELi2ELin1EEEE3colEl(ptr dead_on_unwind writable sret(%"class.Eigen::Block.99") align 8 %21, ptr noundef nonnull align 1 dereferenceable(1) %80, i64 noundef %82)
          to label %83 unwind label %116

83:                                               ; preds = %75
  %84 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN5Eigen15DenseCoeffsBaseINS_5BlockINS_6MatrixIdLi2ELin1ELi0ELi2ELin1EEELi2ELi1ELb1EEELi1EEclEl(ptr noundef nonnull align 1 dereferenceable(1) %21, i64 noundef 1)
          to label %85 unwind label %116

85:                                               ; preds = %83
  %86 = load double, ptr %84, align 8, !tbaa !25
  %87 = getelementptr inbounds %struct.SPoint2D, ptr %17, i32 0, i32 0
  %88 = getelementptr inbounds [2 x double], ptr %87, i64 0, i64 1
  store double %86, ptr %88, align 8, !tbaa !25
  call void @llvm.lifetime.end.p0(i64 32, ptr %21) #5
  invoke void @_ZNSt6vectorI8SPoint2DSaIS0_EE9push_backERKS0_(ptr noundef nonnull align 8 dereferenceable(24) %12, ptr noundef nonnull align 8 dereferenceable(16) %17)
          to label %89 unwind label %120

89:                                               ; preds = %85
  %90 = load ptr, ptr %9, align 8, !tbaa !5
  %91 = getelementptr inbounds %struct.SCurve, ptr %90, i32 0, i32 4
  %92 = load i32, ptr %16, align 4, !tbaa !23
  %93 = sext i32 %92 to i64
  %94 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN5Eigen15DenseCoeffsBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEELi1EEclEl(ptr noundef nonnull align 1 dereferenceable(1) %91, i64 noundef %93)
          to label %95 unwind label %120

95:                                               ; preds = %89
  invoke void @_ZNSt6vectorIiSaIiEE9push_backERKi(ptr noundef nonnull align 8 dereferenceable(24) %14, ptr noundef nonnull align 4 dereferenceable(4) %94)
          to label %96 unwind label %120

96:                                               ; preds = %95
  %97 = load i32, ptr %16, align 4, !tbaa !23
  %98 = icmp ne i32 %97, 0
  br i1 %98, label %104, label %99

99:                                               ; preds = %96
  %100 = load ptr, ptr %9, align 8, !tbaa !5
  %101 = getelementptr inbounds %struct.SCurve, ptr %100, i32 0, i32 0
  %102 = load i8, ptr %101, align 8, !tbaa !9, !range !20, !noundef !21
  %103 = trunc i8 %102 to i1
  br i1 %103, label %104, label %124

104:                                              ; preds = %99, %96
  %105 = load ptr, ptr %9, align 8, !tbaa !5
  %106 = getelementptr inbounds %struct.SCurve, ptr %105, i32 0, i32 2
  %107 = load i32, ptr %16, align 4, !tbaa !23
  %108 = sext i32 %107 to i64
  %109 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN5Eigen15DenseCoeffsBaseINS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEELi1EEclEl(ptr noundef nonnull align 1 dereferenceable(1) %106, i64 noundef %108)
          to label %110 unwind label %120

110:                                              ; preds = %104
  invoke void @_ZNSt6vectorIdSaIdEE9push_backERKd(ptr noundef nonnull align 8 dereferenceable(24) %13, ptr noundef nonnull align 8 dereferenceable(8) %109)
          to label %111 unwind label %120

111:                                              ; preds = %110
  br label %124

112:                                              ; preds = %73, %68
  %113 = landingpad { ptr, i32 }
          cleanup
  %114 = extractvalue { ptr, i32 } %113, 0
  store ptr %114, ptr %19, align 8
  %115 = extractvalue { ptr, i32 } %113, 1
  store i32 %115, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %18) #5
  br label %238

116:                                              ; preds = %83, %75
  %117 = landingpad { ptr, i32 }
          cleanup
  %118 = extractvalue { ptr, i32 } %117, 0
  store ptr %118, ptr %19, align 8
  %119 = extractvalue { ptr, i32 } %117, 1
  store i32 %119, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %21) #5
  br label %238

120:                                              ; preds = %110, %104, %95, %89, %85
  %121 = landingpad { ptr, i32 }
          cleanup
  %122 = extractvalue { ptr, i32 } %121, 0
  store ptr %122, ptr %19, align 8
  %123 = extractvalue { ptr, i32 } %121, 1
  store i32 %123, ptr %20, align 4
  br label %238

124:                                              ; preds = %111, %99
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #5
  %125 = load i32, ptr %16, align 4, !tbaa !23
  %126 = add nsw i32 %125, 1
  %127 = load ptr, ptr %9, align 8, !tbaa !5
  %128 = getelementptr inbounds %struct.SCurve, ptr %127, i32 0, i32 1
  %129 = load i32, ptr %128, align 4, !tbaa !22
  %130 = srem i32 %126, %129
  store i32 %130, ptr %22, align 4, !tbaa !23
  call void @llvm.lifetime.start.p0(i64 16, ptr %23) #5
  call void @llvm.lifetime.start.p0(i64 72, ptr %24) #5
  call void @llvm.lifetime.start.p0(i64 32, ptr %25) #5
  %131 = load ptr, ptr %8, align 8, !tbaa !5
  %132 = getelementptr inbounds %struct.SVar, ptr %131, i32 0, i32 0
  %133 = load i32, ptr %22, align 4, !tbaa !23
  %134 = sext i32 %133 to i64
  invoke void @_ZN5Eigen9DenseBaseINS_6MatrixIdLi2ELin1ELi0ELi2ELin1EEEE3colEl(ptr dead_on_unwind writable sret(%"class.Eigen::Block.99") align 8 %25, ptr noundef nonnull align 1 dereferenceable(1) %132, i64 noundef %134)
          to label %135 unwind label %193

135:                                              ; preds = %124
  call void @llvm.lifetime.start.p0(i64 32, ptr %26) #5
  %136 = load ptr, ptr %8, align 8, !tbaa !5
  %137 = getelementptr inbounds %struct.SVar, ptr %136, i32 0, i32 0
  %138 = load i32, ptr %16, align 4, !tbaa !23
  %139 = sext i32 %138 to i64
  invoke void @_ZN5Eigen9DenseBaseINS_6MatrixIdLi2ELin1ELi0ELi2ELin1EEEE3colEl(ptr dead_on_unwind writable sret(%"class.Eigen::Block.99") align 8 %26, ptr noundef nonnull align 1 dereferenceable(1) %137, i64 noundef %139)
          to label %140 unwind label %197

140:                                              ; preds = %135
  invoke void @_ZNK5Eigen10MatrixBaseINS_5BlockINS_6MatrixIdLi2ELin1ELi0ELi2ELin1EEELi2ELi1ELb1EEEEmiIS4_EEKNS_13CwiseBinaryOpINS_8internal20scalar_difference_opIdEEKS4_KT_EERKNS0_ISC_EE(ptr dead_on_unwind writable sret(%"class.Eigen::CwiseBinaryOp.113") align 8 %24, ptr noundef nonnull align 1 dereferenceable(1) %25, ptr noundef nonnull align 1 dereferenceable(1) %26)
          to label %141 unwind label %197

141:                                              ; preds = %140
  invoke void @_ZN5Eigen6MatrixIdLi2ELi1ELi0ELi2ELi1EEC2INS_13CwiseBinaryOpINS_8internal20scalar_difference_opIdEEKNS_5BlockINS0_IdLi2ELin1ELi0ELi2ELin1EEELi2ELi1ELb1EEESA_EEEERKNS_10MatrixBaseIT_EE(ptr noundef nonnull align 16 dereferenceable(16) %23, ptr noundef nonnull align 1 dereferenceable(1) %24)
          to label %142 unwind label %197

142:                                              ; preds = %141
  call void @llvm.lifetime.end.p0(i64 32, ptr %26) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr %25) #5
  call void @llvm.lifetime.end.p0(i64 72, ptr %24) #5
  %143 = invoke noundef double @_ZNK5Eigen10MatrixBaseINS_6MatrixIdLi2ELi1ELi0ELi2ELi1EEEE4normEv(ptr noundef nonnull align 1 dereferenceable(1) %23)
          to label %144 unwind label %202

144:                                              ; preds = %142
  %145 = load ptr, ptr %6, align 8, !tbaa !5
  %146 = getelementptr inbounds %struct.SParameters, ptr %145, i32 0, i32 12
  %147 = load double, ptr %146, align 8, !tbaa !27
  %148 = fcmp ogt double %143, %147
  br i1 %148, label %149, label %233

149:                                              ; preds = %144
  call void @llvm.lifetime.start.p0(i64 16, ptr %27) #5
  call void @llvm.lifetime.start.p0(i64 32, ptr %28) #5
  %150 = load ptr, ptr %8, align 8, !tbaa !5
  %151 = getelementptr inbounds %struct.SVar, ptr %150, i32 0, i32 0
  %152 = load i32, ptr %22, align 4, !tbaa !23
  %153 = sext i32 %152 to i64
  invoke void @_ZN5Eigen9DenseBaseINS_6MatrixIdLi2ELin1ELi0ELi2ELin1EEEE3colEl(ptr dead_on_unwind writable sret(%"class.Eigen::Block.99") align 8 %28, ptr noundef nonnull align 1 dereferenceable(1) %151, i64 noundef %153)
          to label %154 unwind label %206

154:                                              ; preds = %149
  %155 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN5Eigen15DenseCoeffsBaseINS_5BlockINS_6MatrixIdLi2ELin1ELi0ELi2ELin1EEELi2ELi1ELb1EEELi1EEclEl(ptr noundef nonnull align 1 dereferenceable(1) %28, i64 noundef 0)
          to label %156 unwind label %206

156:                                              ; preds = %154
  %157 = load double, ptr %155, align 8, !tbaa !25
  call void @llvm.lifetime.start.p0(i64 32, ptr %29) #5
  %158 = load ptr, ptr %8, align 8, !tbaa !5
  %159 = getelementptr inbounds %struct.SVar, ptr %158, i32 0, i32 0
  %160 = load i32, ptr %16, align 4, !tbaa !23
  %161 = sext i32 %160 to i64
  invoke void @_ZN5Eigen9DenseBaseINS_6MatrixIdLi2ELin1ELi0ELi2ELin1EEEE3colEl(ptr dead_on_unwind writable sret(%"class.Eigen::Block.99") align 8 %29, ptr noundef nonnull align 1 dereferenceable(1) %159, i64 noundef %161)
          to label %162 unwind label %210

162:                                              ; preds = %156
  %163 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN5Eigen15DenseCoeffsBaseINS_5BlockINS_6MatrixIdLi2ELin1ELi0ELi2ELin1EEELi2ELi1ELb1EEELi1EEclEl(ptr noundef nonnull align 1 dereferenceable(1) %29, i64 noundef 0)
          to label %164 unwind label %210

164:                                              ; preds = %162
  %165 = load double, ptr %163, align 8, !tbaa !25
  %166 = fadd double %157, %165
  %167 = fmul double %166, 5.000000e-01
  %168 = getelementptr inbounds %struct.SPoint2D, ptr %27, i32 0, i32 0
  %169 = getelementptr inbounds [2 x double], ptr %168, i64 0, i64 0
  store double %167, ptr %169, align 8, !tbaa !25
  call void @llvm.lifetime.end.p0(i64 32, ptr %29) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr %28) #5
  call void @llvm.lifetime.start.p0(i64 32, ptr %30) #5
  %170 = load ptr, ptr %8, align 8, !tbaa !5
  %171 = getelementptr inbounds %struct.SVar, ptr %170, i32 0, i32 0
  %172 = load i32, ptr %22, align 4, !tbaa !23
  %173 = sext i32 %172 to i64
  invoke void @_ZN5Eigen9DenseBaseINS_6MatrixIdLi2ELin1ELi0ELi2ELin1EEEE3colEl(ptr dead_on_unwind writable sret(%"class.Eigen::Block.99") align 8 %30, ptr noundef nonnull align 1 dereferenceable(1) %171, i64 noundef %173)
          to label %174 unwind label %215

174:                                              ; preds = %164
  %175 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN5Eigen15DenseCoeffsBaseINS_5BlockINS_6MatrixIdLi2ELin1ELi0ELi2ELin1EEELi2ELi1ELb1EEELi1EEclEl(ptr noundef nonnull align 1 dereferenceable(1) %30, i64 noundef 1)
          to label %176 unwind label %215

176:                                              ; preds = %174
  %177 = load double, ptr %175, align 8, !tbaa !25
  call void @llvm.lifetime.start.p0(i64 32, ptr %31) #5
  %178 = load ptr, ptr %8, align 8, !tbaa !5
  %179 = getelementptr inbounds %struct.SVar, ptr %178, i32 0, i32 0
  %180 = load i32, ptr %16, align 4, !tbaa !23
  %181 = sext i32 %180 to i64
  invoke void @_ZN5Eigen9DenseBaseINS_6MatrixIdLi2ELin1ELi0ELi2ELin1EEEE3colEl(ptr dead_on_unwind writable sret(%"class.Eigen::Block.99") align 8 %31, ptr noundef nonnull align 1 dereferenceable(1) %179, i64 noundef %181)
          to label %182 unwind label %219

182:                                              ; preds = %176
  %183 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN5Eigen15DenseCoeffsBaseINS_5BlockINS_6MatrixIdLi2ELin1ELi0ELi2ELin1EEELi2ELi1ELb1EEELi1EEclEl(ptr noundef nonnull align 1 dereferenceable(1) %31, i64 noundef 1)
          to label %184 unwind label %219

184:                                              ; preds = %182
  %185 = load double, ptr %183, align 8, !tbaa !25
  %186 = fadd double %177, %185
  %187 = fmul double %186, 5.000000e-01
  %188 = getelementptr inbounds %struct.SPoint2D, ptr %27, i32 0, i32 0
  %189 = getelementptr inbounds [2 x double], ptr %188, i64 0, i64 1
  store double %187, ptr %189, align 8, !tbaa !25
  call void @llvm.lifetime.end.p0(i64 32, ptr %31) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr %30) #5
  invoke void @_ZNSt6vectorI8SPoint2DSaIS0_EE9push_backERKS0_(ptr noundef nonnull align 8 dereferenceable(24) %12, ptr noundef nonnull align 8 dereferenceable(16) %27)
          to label %190 unwind label %224

190:                                              ; preds = %184
  invoke void @_ZNSt6vectorIdSaIdEE9push_backERKd(ptr noundef nonnull align 8 dereferenceable(24) %13, ptr noundef nonnull align 8 dereferenceable(8) @_ZL2PI)
          to label %191 unwind label %224

191:                                              ; preds = %190
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #5
  store i32 -1, ptr %32, align 4, !tbaa !23
  invoke void @_ZNSt6vectorIiSaIiEE9push_backEOi(ptr noundef nonnull align 8 dereferenceable(24) %14, ptr noundef nonnull align 4 dereferenceable(4) %32)
          to label %192 unwind label %228

192:                                              ; preds = %191
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #5
  store i8 1, ptr %15, align 1, !tbaa !24
  call void @llvm.lifetime.end.p0(i64 16, ptr %27) #5
  br label %233

193:                                              ; preds = %124
  %194 = landingpad { ptr, i32 }
          cleanup
  %195 = extractvalue { ptr, i32 } %194, 0
  store ptr %195, ptr %19, align 8
  %196 = extractvalue { ptr, i32 } %194, 1
  store i32 %196, ptr %20, align 4
  br label %201

197:                                              ; preds = %141, %140, %135
  %198 = landingpad { ptr, i32 }
          cleanup
  %199 = extractvalue { ptr, i32 } %198, 0
  store ptr %199, ptr %19, align 8
  %200 = extractvalue { ptr, i32 } %198, 1
  store i32 %200, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %26) #5
  br label %201

201:                                              ; preds = %197, %193
  call void @llvm.lifetime.end.p0(i64 32, ptr %25) #5
  call void @llvm.lifetime.end.p0(i64 72, ptr %24) #5
  br label %237

202:                                              ; preds = %142
  %203 = landingpad { ptr, i32 }
          cleanup
  %204 = extractvalue { ptr, i32 } %203, 0
  store ptr %204, ptr %19, align 8
  %205 = extractvalue { ptr, i32 } %203, 1
  store i32 %205, ptr %20, align 4
  br label %237

206:                                              ; preds = %154, %149
  %207 = landingpad { ptr, i32 }
          cleanup
  %208 = extractvalue { ptr, i32 } %207, 0
  store ptr %208, ptr %19, align 8
  %209 = extractvalue { ptr, i32 } %207, 1
  store i32 %209, ptr %20, align 4
  br label %214

210:                                              ; preds = %162, %156
  %211 = landingpad { ptr, i32 }
          cleanup
  %212 = extractvalue { ptr, i32 } %211, 0
  store ptr %212, ptr %19, align 8
  %213 = extractvalue { ptr, i32 } %211, 1
  store i32 %213, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %29) #5
  br label %214

214:                                              ; preds = %210, %206
  call void @llvm.lifetime.end.p0(i64 32, ptr %28) #5
  br label %232

215:                                              ; preds = %174, %164
  %216 = landingpad { ptr, i32 }
          cleanup
  %217 = extractvalue { ptr, i32 } %216, 0
  store ptr %217, ptr %19, align 8
  %218 = extractvalue { ptr, i32 } %216, 1
  store i32 %218, ptr %20, align 4
  br label %223

219:                                              ; preds = %182, %176
  %220 = landingpad { ptr, i32 }
          cleanup
  %221 = extractvalue { ptr, i32 } %220, 0
  store ptr %221, ptr %19, align 8
  %222 = extractvalue { ptr, i32 } %220, 1
  store i32 %222, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %31) #5
  br label %223

223:                                              ; preds = %219, %215
  call void @llvm.lifetime.end.p0(i64 32, ptr %30) #5
  br label %232

224:                                              ; preds = %190, %184
  %225 = landingpad { ptr, i32 }
          cleanup
  %226 = extractvalue { ptr, i32 } %225, 0
  store ptr %226, ptr %19, align 8
  %227 = extractvalue { ptr, i32 } %225, 1
  store i32 %227, ptr %20, align 4
  br label %232

228:                                              ; preds = %191
  %229 = landingpad { ptr, i32 }
          cleanup
  %230 = extractvalue { ptr, i32 } %229, 0
  store ptr %230, ptr %19, align 8
  %231 = extractvalue { ptr, i32 } %229, 1
  store i32 %231, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #5
  br label %232

232:                                              ; preds = %228, %224, %223, %214
  call void @llvm.lifetime.end.p0(i64 16, ptr %27) #5
  br label %237

233:                                              ; preds = %192, %144
  call void @llvm.lifetime.end.p0(i64 16, ptr %23) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %17) #5
  br label %234

234:                                              ; preds = %233
  %235 = load i32, ptr %16, align 4, !tbaa !23
  %236 = add nsw i32 %235, 1
  store i32 %236, ptr %16, align 4, !tbaa !23
  br label %63, !llvm.loop !31

237:                                              ; preds = %232, %202, %201
  call void @llvm.lifetime.end.p0(i64 16, ptr %23) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #5
  br label %238

238:                                              ; preds = %237, %120, %116, %112
  call void @llvm.lifetime.end.p0(i64 16, ptr %17) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #5
  br label %526

239:                                              ; preds = %67
  %240 = load ptr, ptr %9, align 8, !tbaa !5
  %241 = getelementptr inbounds %struct.SCurve, ptr %240, i32 0, i32 0
  %242 = load i8, ptr %241, align 8, !tbaa !9, !range !20, !noundef !21
  %243 = trunc i8 %242 to i1
  br i1 %243, label %290, label %244

244:                                              ; preds = %239
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #5
  %245 = load ptr, ptr %9, align 8, !tbaa !5
  %246 = getelementptr inbounds %struct.SCurve, ptr %245, i32 0, i32 1
  %247 = load i32, ptr %246, align 4, !tbaa !22
  %248 = sub nsw i32 %247, 1
  store i32 %248, ptr %33, align 4, !tbaa !23
  call void @llvm.lifetime.start.p0(i64 16, ptr %34) #5
  call void @llvm.lifetime.start.p0(i64 32, ptr %35) #5
  %249 = load ptr, ptr %8, align 8, !tbaa !5
  %250 = getelementptr inbounds %struct.SVar, ptr %249, i32 0, i32 0
  %251 = load i32, ptr %33, align 4, !tbaa !23
  %252 = sext i32 %251 to i64
  invoke void @_ZN5Eigen9DenseBaseINS_6MatrixIdLi2ELin1ELi0ELi2ELin1EEEE3colEl(ptr dead_on_unwind writable sret(%"class.Eigen::Block.99") align 8 %35, ptr noundef nonnull align 1 dereferenceable(1) %250, i64 noundef %252)
          to label %253 unwind label %277

253:                                              ; preds = %244
  %254 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN5Eigen15DenseCoeffsBaseINS_5BlockINS_6MatrixIdLi2ELin1ELi0ELi2ELin1EEELi2ELi1ELb1EEELi1EEclEl(ptr noundef nonnull align 1 dereferenceable(1) %35, i64 noundef 0)
          to label %255 unwind label %277

255:                                              ; preds = %253
  %256 = load double, ptr %254, align 8, !tbaa !25
  %257 = getelementptr inbounds %struct.SPoint2D, ptr %34, i32 0, i32 0
  %258 = getelementptr inbounds [2 x double], ptr %257, i64 0, i64 0
  store double %256, ptr %258, align 8, !tbaa !25
  call void @llvm.lifetime.end.p0(i64 32, ptr %35) #5
  call void @llvm.lifetime.start.p0(i64 32, ptr %36) #5
  %259 = load ptr, ptr %8, align 8, !tbaa !5
  %260 = getelementptr inbounds %struct.SVar, ptr %259, i32 0, i32 0
  %261 = load i32, ptr %33, align 4, !tbaa !23
  %262 = sext i32 %261 to i64
  invoke void @_ZN5Eigen9DenseBaseINS_6MatrixIdLi2ELin1ELi0ELi2ELin1EEEE3colEl(ptr dead_on_unwind writable sret(%"class.Eigen::Block.99") align 8 %36, ptr noundef nonnull align 1 dereferenceable(1) %260, i64 noundef %262)
          to label %263 unwind label %281

263:                                              ; preds = %255
  %264 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN5Eigen15DenseCoeffsBaseINS_5BlockINS_6MatrixIdLi2ELin1ELi0ELi2ELin1EEELi2ELi1ELb1EEELi1EEclEl(ptr noundef nonnull align 1 dereferenceable(1) %36, i64 noundef 1)
          to label %265 unwind label %281

265:                                              ; preds = %263
  %266 = load double, ptr %264, align 8, !tbaa !25
  %267 = getelementptr inbounds %struct.SPoint2D, ptr %34, i32 0, i32 0
  %268 = getelementptr inbounds [2 x double], ptr %267, i64 0, i64 1
  store double %266, ptr %268, align 8, !tbaa !25
  call void @llvm.lifetime.end.p0(i64 32, ptr %36) #5
  invoke void @_ZNSt6vectorI8SPoint2DSaIS0_EE9push_backERKS0_(ptr noundef nonnull align 8 dereferenceable(24) %12, ptr noundef nonnull align 8 dereferenceable(16) %34)
          to label %269 unwind label %285

269:                                              ; preds = %265
  %270 = load ptr, ptr %9, align 8, !tbaa !5
  %271 = getelementptr inbounds %struct.SCurve, ptr %270, i32 0, i32 4
  %272 = load i32, ptr %33, align 4, !tbaa !23
  %273 = sext i32 %272 to i64
  %274 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN5Eigen15DenseCoeffsBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEELi1EEclEl(ptr noundef nonnull align 1 dereferenceable(1) %271, i64 noundef %273)
          to label %275 unwind label %285

275:                                              ; preds = %269
  invoke void @_ZNSt6vectorIiSaIiEE9push_backERKi(ptr noundef nonnull align 8 dereferenceable(24) %14, ptr noundef nonnull align 4 dereferenceable(4) %274)
          to label %276 unwind label %285

276:                                              ; preds = %275
  call void @llvm.lifetime.end.p0(i64 16, ptr %34) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #5
  br label %290

277:                                              ; preds = %253, %244
  %278 = landingpad { ptr, i32 }
          cleanup
  %279 = extractvalue { ptr, i32 } %278, 0
  store ptr %279, ptr %19, align 8
  %280 = extractvalue { ptr, i32 } %278, 1
  store i32 %280, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %35) #5
  br label %289

281:                                              ; preds = %263, %255
  %282 = landingpad { ptr, i32 }
          cleanup
  %283 = extractvalue { ptr, i32 } %282, 0
  store ptr %283, ptr %19, align 8
  %284 = extractvalue { ptr, i32 } %282, 1
  store i32 %284, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %36) #5
  br label %289

285:                                              ; preds = %275, %269, %265
  %286 = landingpad { ptr, i32 }
          cleanup
  %287 = extractvalue { ptr, i32 } %286, 0
  store ptr %287, ptr %19, align 8
  %288 = extractvalue { ptr, i32 } %286, 1
  store i32 %288, ptr %20, align 4
  br label %289

289:                                              ; preds = %285, %281, %277
  call void @llvm.lifetime.end.p0(i64 16, ptr %34) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #5
  br label %526

290:                                              ; preds = %276, %239
  %291 = call noundef i64 @_ZNKSt6vectorI8SPoint2DSaIS0_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %12) #5
  %292 = trunc i64 %291 to i32
  %293 = load ptr, ptr %9, align 8, !tbaa !5
  %294 = getelementptr inbounds %struct.SCurve, ptr %293, i32 0, i32 1
  store i32 %292, ptr %294, align 4, !tbaa !22
  %295 = load ptr, ptr %9, align 8, !tbaa !5
  %296 = getelementptr inbounds %struct.SCurve, ptr %295, i32 0, i32 0
  %297 = load i8, ptr %296, align 8, !tbaa !9, !range !20, !noundef !21
  %298 = trunc i8 %297 to i1
  br i1 %298, label %299, label %303

299:                                              ; preds = %290
  %300 = load ptr, ptr %9, align 8, !tbaa !5
  %301 = getelementptr inbounds %struct.SCurve, ptr %300, i32 0, i32 1
  %302 = load i32, ptr %301, align 4, !tbaa !22
  br label %308

303:                                              ; preds = %290
  %304 = load ptr, ptr %9, align 8, !tbaa !5
  %305 = getelementptr inbounds %struct.SCurve, ptr %304, i32 0, i32 1
  %306 = load i32, ptr %305, align 4, !tbaa !22
  %307 = sub nsw i32 %306, 1
  br label %308

308:                                              ; preds = %303, %299
  %309 = phi i32 [ %302, %299 ], [ %307, %303 ]
  store i32 %309, ptr %11, align 4, !tbaa !23
  %310 = load ptr, ptr %9, align 8, !tbaa !5
  %311 = getelementptr inbounds %struct.SCurve, ptr %310, i32 0, i32 3
  %312 = load i32, ptr %11, align 4, !tbaa !23
  %313 = sext i32 %312 to i64
  invoke void @_ZN5Eigen15PlainObjectBaseINS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEEE6resizeEl(ptr noundef nonnull align 8 dereferenceable(16) %311, i64 noundef %313)
          to label %314 unwind label %359

314:                                              ; preds = %308
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #5
  %315 = load ptr, ptr %9, align 8, !tbaa !5
  %316 = getelementptr inbounds %struct.SCurve, ptr %315, i32 0, i32 0
  %317 = load i8, ptr %316, align 8, !tbaa !9, !range !20, !noundef !21
  %318 = trunc i8 %317 to i1
  br i1 %318, label %319, label %323

319:                                              ; preds = %314
  %320 = load ptr, ptr %9, align 8, !tbaa !5
  %321 = getelementptr inbounds %struct.SCurve, ptr %320, i32 0, i32 1
  %322 = load i32, ptr %321, align 4, !tbaa !22
  br label %328

323:                                              ; preds = %314
  %324 = load ptr, ptr %9, align 8, !tbaa !5
  %325 = getelementptr inbounds %struct.SCurve, ptr %324, i32 0, i32 1
  %326 = load i32, ptr %325, align 4, !tbaa !22
  %327 = sub nsw i32 %326, 2
  br label %328

328:                                              ; preds = %323, %319
  %329 = phi i32 [ %322, %319 ], [ %327, %323 ]
  store i32 %329, ptr %37, align 4, !tbaa !23
  %330 = load ptr, ptr %9, align 8, !tbaa !5
  %331 = getelementptr inbounds %struct.SCurve, ptr %330, i32 0, i32 2
  %332 = load i32, ptr %37, align 4, !tbaa !23
  %333 = sext i32 %332 to i64
  invoke void @_ZN5Eigen15PlainObjectBaseINS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEEE6resizeEl(ptr noundef nonnull align 8 dereferenceable(16) %331, i64 noundef %333)
          to label %334 unwind label %363

334:                                              ; preds = %328
  %335 = load ptr, ptr %9, align 8, !tbaa !5
  %336 = getelementptr inbounds %struct.SCurve, ptr %335, i32 0, i32 4
  %337 = load ptr, ptr %9, align 8, !tbaa !5
  %338 = getelementptr inbounds %struct.SCurve, ptr %337, i32 0, i32 1
  %339 = load i32, ptr %338, align 4, !tbaa !22
  %340 = sext i32 %339 to i64
  invoke void @_ZN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEE6resizeEl(ptr noundef nonnull align 8 dereferenceable(16) %336, i64 noundef %340)
          to label %341 unwind label %363

341:                                              ; preds = %334
  %342 = load ptr, ptr %8, align 8, !tbaa !5
  %343 = load ptr, ptr %9, align 8, !tbaa !5
  %344 = getelementptr inbounds %struct.SCurve, ptr %343, i32 0, i32 1
  %345 = load i32, ptr %344, align 4, !tbaa !22
  invoke void @_Z6resizeR4SVari(ptr noundef nonnull align 8 dereferenceable(32) %342, i32 noundef %345)
          to label %346 unwind label %363

346:                                              ; preds = %341
  %347 = load ptr, ptr %7, align 8, !tbaa !5
  %348 = load ptr, ptr %9, align 8, !tbaa !5
  %349 = getelementptr inbounds %struct.SCurve, ptr %348, i32 0, i32 1
  %350 = load i32, ptr %349, align 4, !tbaa !22
  invoke void @_Z6resizeR4SVari(ptr noundef nonnull align 8 dereferenceable(32) %347, i32 noundef %350)
          to label %351 unwind label %363

351:                                              ; preds = %346
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #5
  store i32 0, ptr %38, align 4, !tbaa !23
  br label %352

352:                                              ; preds = %410, %351
  %353 = load i32, ptr %38, align 4, !tbaa !23
  %354 = load ptr, ptr %9, align 8, !tbaa !5
  %355 = getelementptr inbounds %struct.SCurve, ptr %354, i32 0, i32 1
  %356 = load i32, ptr %355, align 4, !tbaa !22
  %357 = icmp slt i32 %353, %356
  br i1 %357, label %367, label %358

358:                                              ; preds = %352
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #5
  br label %426

359:                                              ; preds = %308
  %360 = landingpad { ptr, i32 }
          cleanup
  %361 = extractvalue { ptr, i32 } %360, 0
  store ptr %361, ptr %19, align 8
  %362 = extractvalue { ptr, i32 } %360, 1
  store i32 %362, ptr %20, align 4
  br label %526

363:                                              ; preds = %519, %515, %346, %341, %334, %328
  %364 = landingpad { ptr, i32 }
          cleanup
  %365 = extractvalue { ptr, i32 } %364, 0
  store ptr %365, ptr %19, align 8
  %366 = extractvalue { ptr, i32 } %364, 1
  store i32 %366, ptr %20, align 4
  br label %525

367:                                              ; preds = %352
  %368 = load i32, ptr %38, align 4, !tbaa !23
  %369 = sext i32 %368 to i64
  %370 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorI8SPoint2DSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %12, i64 noundef %369) #5
  %371 = getelementptr inbounds %struct.SPoint2D, ptr %370, i32 0, i32 0
  %372 = getelementptr inbounds [2 x double], ptr %371, i64 0, i64 0
  %373 = load double, ptr %372, align 8, !tbaa !25
  call void @llvm.lifetime.start.p0(i64 32, ptr %39) #5
  %374 = load ptr, ptr %8, align 8, !tbaa !5
  %375 = getelementptr inbounds %struct.SVar, ptr %374, i32 0, i32 0
  %376 = load i32, ptr %38, align 4, !tbaa !23
  %377 = sext i32 %376 to i64
  invoke void @_ZN5Eigen9DenseBaseINS_6MatrixIdLi2ELin1ELi0ELi2ELin1EEEE3colEl(ptr dead_on_unwind writable sret(%"class.Eigen::Block.99") align 8 %39, ptr noundef nonnull align 1 dereferenceable(1) %375, i64 noundef %377)
          to label %378 unwind label %413

378:                                              ; preds = %367
  %379 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN5Eigen15DenseCoeffsBaseINS_5BlockINS_6MatrixIdLi2ELin1ELi0ELi2ELin1EEELi2ELi1ELb1EEELi1EEclEl(ptr noundef nonnull align 1 dereferenceable(1) %39, i64 noundef 0)
          to label %380 unwind label %413

380:                                              ; preds = %378
  store double %373, ptr %379, align 8, !tbaa !25
  call void @llvm.lifetime.end.p0(i64 32, ptr %39) #5
  %381 = load i32, ptr %38, align 4, !tbaa !23
  %382 = sext i32 %381 to i64
  %383 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorI8SPoint2DSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %12, i64 noundef %382) #5
  %384 = getelementptr inbounds %struct.SPoint2D, ptr %383, i32 0, i32 0
  %385 = getelementptr inbounds [2 x double], ptr %384, i64 0, i64 1
  %386 = load double, ptr %385, align 8, !tbaa !25
  call void @llvm.lifetime.start.p0(i64 32, ptr %40) #5
  %387 = load ptr, ptr %8, align 8, !tbaa !5
  %388 = getelementptr inbounds %struct.SVar, ptr %387, i32 0, i32 0
  %389 = load i32, ptr %38, align 4, !tbaa !23
  %390 = sext i32 %389 to i64
  invoke void @_ZN5Eigen9DenseBaseINS_6MatrixIdLi2ELin1ELi0ELi2ELin1EEEE3colEl(ptr dead_on_unwind writable sret(%"class.Eigen::Block.99") align 8 %40, ptr noundef nonnull align 1 dereferenceable(1) %388, i64 noundef %390)
          to label %391 unwind label %417

391:                                              ; preds = %380
  %392 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN5Eigen15DenseCoeffsBaseINS_5BlockINS_6MatrixIdLi2ELin1ELi0ELi2ELin1EEELi2ELi1ELb1EEELi1EEclEl(ptr noundef nonnull align 1 dereferenceable(1) %40, i64 noundef 1)
          to label %393 unwind label %417

393:                                              ; preds = %391
  store double %386, ptr %392, align 8, !tbaa !25
  call void @llvm.lifetime.end.p0(i64 32, ptr %40) #5
  %394 = load ptr, ptr %8, align 8, !tbaa !5
  %395 = getelementptr inbounds %struct.SVar, ptr %394, i32 0, i32 1
  %396 = load i32, ptr %38, align 4, !tbaa !23
  %397 = sext i32 %396 to i64
  %398 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN5Eigen15DenseCoeffsBaseINS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEELi1EEclEl(ptr noundef nonnull align 1 dereferenceable(1) %395, i64 noundef %397)
          to label %399 unwind label %421

399:                                              ; preds = %393
  store double 0.000000e+00, ptr %398, align 8, !tbaa !25
  %400 = load i32, ptr %38, align 4, !tbaa !23
  %401 = sext i32 %400 to i64
  %402 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %14, i64 noundef %401) #5
  %403 = load i32, ptr %402, align 4, !tbaa !23
  %404 = load ptr, ptr %9, align 8, !tbaa !5
  %405 = getelementptr inbounds %struct.SCurve, ptr %404, i32 0, i32 4
  %406 = load i32, ptr %38, align 4, !tbaa !23
  %407 = sext i32 %406 to i64
  %408 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN5Eigen15DenseCoeffsBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEELi1EEclEl(ptr noundef nonnull align 1 dereferenceable(1) %405, i64 noundef %407)
          to label %409 unwind label %421

409:                                              ; preds = %399
  store i32 %403, ptr %408, align 4, !tbaa !23
  br label %410

410:                                              ; preds = %409
  %411 = load i32, ptr %38, align 4, !tbaa !23
  %412 = add nsw i32 %411, 1
  store i32 %412, ptr %38, align 4, !tbaa !23
  br label %352, !llvm.loop !33

413:                                              ; preds = %378, %367
  %414 = landingpad { ptr, i32 }
          cleanup
  %415 = extractvalue { ptr, i32 } %414, 0
  store ptr %415, ptr %19, align 8
  %416 = extractvalue { ptr, i32 } %414, 1
  store i32 %416, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %39) #5
  br label %425

417:                                              ; preds = %391, %380
  %418 = landingpad { ptr, i32 }
          cleanup
  %419 = extractvalue { ptr, i32 } %418, 0
  store ptr %419, ptr %19, align 8
  %420 = extractvalue { ptr, i32 } %418, 1
  store i32 %420, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %40) #5
  br label %425

421:                                              ; preds = %399, %393
  %422 = landingpad { ptr, i32 }
          cleanup
  %423 = extractvalue { ptr, i32 } %422, 0
  store ptr %423, ptr %19, align 8
  %424 = extractvalue { ptr, i32 } %422, 1
  store i32 %424, ptr %20, align 4
  br label %425

425:                                              ; preds = %421, %417, %413
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #5
  br label %525

426:                                              ; preds = %358
  %427 = load ptr, ptr %9, align 8, !tbaa !5
  %428 = getelementptr inbounds %struct.SCurve, ptr %427, i32 0, i32 0
  %429 = load i8, ptr %428, align 8, !tbaa !9, !range !20, !noundef !21
  %430 = trunc i8 %429 to i1
  br i1 %430, label %431, label %435

431:                                              ; preds = %426
  %432 = load ptr, ptr %9, align 8, !tbaa !5
  %433 = getelementptr inbounds %struct.SCurve, ptr %432, i32 0, i32 1
  %434 = load i32, ptr %433, align 4, !tbaa !22
  br label %440

435:                                              ; preds = %426
  %436 = load ptr, ptr %9, align 8, !tbaa !5
  %437 = getelementptr inbounds %struct.SCurve, ptr %436, i32 0, i32 1
  %438 = load i32, ptr %437, align 4, !tbaa !22
  %439 = sub nsw i32 %438, 1
  br label %440

440:                                              ; preds = %435, %431
  %441 = phi i32 [ %434, %431 ], [ %439, %435 ]
  store i32 %441, ptr %11, align 4, !tbaa !23
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #5
  store i32 0, ptr %41, align 4, !tbaa !23
  br label %442

442:                                              ; preds = %474, %440
  %443 = load i32, ptr %41, align 4, !tbaa !23
  %444 = load i32, ptr %11, align 4, !tbaa !23
  %445 = icmp slt i32 %443, %444
  br i1 %445, label %447, label %446

446:                                              ; preds = %442
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #5
  br label %491

447:                                              ; preds = %442
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #5
  %448 = load i32, ptr %41, align 4, !tbaa !23
  %449 = add nsw i32 %448, 1
  %450 = load ptr, ptr %9, align 8, !tbaa !5
  %451 = getelementptr inbounds %struct.SCurve, ptr %450, i32 0, i32 1
  %452 = load i32, ptr %451, align 4, !tbaa !22
  %453 = srem i32 %449, %452
  store i32 %453, ptr %42, align 4, !tbaa !23
  call void @llvm.lifetime.start.p0(i64 16, ptr %43) #5
  call void @llvm.lifetime.start.p0(i64 72, ptr %44) #5
  call void @llvm.lifetime.start.p0(i64 32, ptr %45) #5
  %454 = load ptr, ptr %8, align 8, !tbaa !5
  %455 = getelementptr inbounds %struct.SVar, ptr %454, i32 0, i32 0
  %456 = load i32, ptr %42, align 4, !tbaa !23
  %457 = sext i32 %456 to i64
  invoke void @_ZN5Eigen9DenseBaseINS_6MatrixIdLi2ELin1ELi0ELi2ELin1EEEE3colEl(ptr dead_on_unwind writable sret(%"class.Eigen::Block.99") align 8 %45, ptr noundef nonnull align 1 dereferenceable(1) %455, i64 noundef %457)
          to label %458 unwind label %477

458:                                              ; preds = %447
  call void @llvm.lifetime.start.p0(i64 32, ptr %46) #5
  %459 = load ptr, ptr %8, align 8, !tbaa !5
  %460 = getelementptr inbounds %struct.SVar, ptr %459, i32 0, i32 0
  %461 = load i32, ptr %41, align 4, !tbaa !23
  %462 = sext i32 %461 to i64
  invoke void @_ZN5Eigen9DenseBaseINS_6MatrixIdLi2ELin1ELi0ELi2ELin1EEEE3colEl(ptr dead_on_unwind writable sret(%"class.Eigen::Block.99") align 8 %46, ptr noundef nonnull align 1 dereferenceable(1) %460, i64 noundef %462)
          to label %463 unwind label %481

463:                                              ; preds = %458
  invoke void @_ZNK5Eigen10MatrixBaseINS_5BlockINS_6MatrixIdLi2ELin1ELi0ELi2ELin1EEELi2ELi1ELb1EEEEmiIS4_EEKNS_13CwiseBinaryOpINS_8internal20scalar_difference_opIdEEKS4_KT_EERKNS0_ISC_EE(ptr dead_on_unwind writable sret(%"class.Eigen::CwiseBinaryOp.113") align 8 %44, ptr noundef nonnull align 1 dereferenceable(1) %45, ptr noundef nonnull align 1 dereferenceable(1) %46)
          to label %464 unwind label %481

464:                                              ; preds = %463
  invoke void @_ZN5Eigen6MatrixIdLi2ELi1ELi0ELi2ELi1EEC2INS_13CwiseBinaryOpINS_8internal20scalar_difference_opIdEEKNS_5BlockINS0_IdLi2ELin1ELi0ELi2ELin1EEELi2ELi1ELb1EEESA_EEEERKNS_10MatrixBaseIT_EE(ptr noundef nonnull align 16 dereferenceable(16) %43, ptr noundef nonnull align 1 dereferenceable(1) %44)
          to label %465 unwind label %481

465:                                              ; preds = %464
  call void @llvm.lifetime.end.p0(i64 32, ptr %46) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr %45) #5
  call void @llvm.lifetime.end.p0(i64 72, ptr %44) #5
  %466 = invoke noundef double @_ZNK5Eigen10MatrixBaseINS_6MatrixIdLi2ELi1ELi0ELi2ELi1EEEE4normEv(ptr noundef nonnull align 1 dereferenceable(1) %43)
          to label %467 unwind label %486

467:                                              ; preds = %465
  %468 = load ptr, ptr %9, align 8, !tbaa !5
  %469 = getelementptr inbounds %struct.SCurve, ptr %468, i32 0, i32 3
  %470 = load i32, ptr %41, align 4, !tbaa !23
  %471 = sext i32 %470 to i64
  %472 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN5Eigen15DenseCoeffsBaseINS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEELi1EEclEl(ptr noundef nonnull align 1 dereferenceable(1) %469, i64 noundef %471)
          to label %473 unwind label %486

473:                                              ; preds = %467
  store double %466, ptr %472, align 8, !tbaa !25
  call void @llvm.lifetime.end.p0(i64 16, ptr %43) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #5
  br label %474

474:                                              ; preds = %473
  %475 = load i32, ptr %41, align 4, !tbaa !23
  %476 = add nsw i32 %475, 1
  store i32 %476, ptr %41, align 4, !tbaa !23
  br label %442, !llvm.loop !34

477:                                              ; preds = %447
  %478 = landingpad { ptr, i32 }
          cleanup
  %479 = extractvalue { ptr, i32 } %478, 0
  store ptr %479, ptr %19, align 8
  %480 = extractvalue { ptr, i32 } %478, 1
  store i32 %480, ptr %20, align 4
  br label %485

481:                                              ; preds = %464, %463, %458
  %482 = landingpad { ptr, i32 }
          cleanup
  %483 = extractvalue { ptr, i32 } %482, 0
  store ptr %483, ptr %19, align 8
  %484 = extractvalue { ptr, i32 } %482, 1
  store i32 %484, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %46) #5
  br label %485

485:                                              ; preds = %481, %477
  call void @llvm.lifetime.end.p0(i64 32, ptr %45) #5
  call void @llvm.lifetime.end.p0(i64 72, ptr %44) #5
  br label %490

486:                                              ; preds = %467, %465
  %487 = landingpad { ptr, i32 }
          cleanup
  %488 = extractvalue { ptr, i32 } %487, 0
  store ptr %488, ptr %19, align 8
  %489 = extractvalue { ptr, i32 } %487, 1
  store i32 %489, ptr %20, align 4
  br label %490

490:                                              ; preds = %486, %485
  call void @llvm.lifetime.end.p0(i64 16, ptr %43) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #5
  br label %525

491:                                              ; preds = %446
  call void @llvm.lifetime.start.p0(i64 4, ptr %47) #5
  store i32 0, ptr %47, align 4, !tbaa !23
  br label %492

492:                                              ; preds = %508, %491
  %493 = load i32, ptr %47, align 4, !tbaa !23
  %494 = load i32, ptr %37, align 4, !tbaa !23
  %495 = icmp slt i32 %493, %494
  br i1 %495, label %497, label %496

496:                                              ; preds = %492
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #5
  br label %515

497:                                              ; preds = %492
  %498 = load i32, ptr %47, align 4, !tbaa !23
  %499 = sext i32 %498 to i64
  %500 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIdSaIdEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %13, i64 noundef %499) #5
  %501 = load double, ptr %500, align 8, !tbaa !25
  %502 = load ptr, ptr %9, align 8, !tbaa !5
  %503 = getelementptr inbounds %struct.SCurve, ptr %502, i32 0, i32 2
  %504 = load i32, ptr %47, align 4, !tbaa !23
  %505 = sext i32 %504 to i64
  %506 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN5Eigen15DenseCoeffsBaseINS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEELi1EEclEl(ptr noundef nonnull align 1 dereferenceable(1) %503, i64 noundef %505)
          to label %507 unwind label %511

507:                                              ; preds = %497
  store double %501, ptr %506, align 8, !tbaa !25
  br label %508

508:                                              ; preds = %507
  %509 = load i32, ptr %47, align 4, !tbaa !23
  %510 = add nsw i32 %509, 1
  store i32 %510, ptr %47, align 4, !tbaa !23
  br label %492, !llvm.loop !35

511:                                              ; preds = %497
  %512 = landingpad { ptr, i32 }
          cleanup
  %513 = extractvalue { ptr, i32 } %512, 0
  store ptr %513, ptr %19, align 8
  %514 = extractvalue { ptr, i32 } %512, 1
  store i32 %514, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #5
  br label %525

515:                                              ; preds = %496
  %516 = load ptr, ptr %8, align 8, !tbaa !5
  %517 = load ptr, ptr %7, align 8, !tbaa !5
  %518 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZN4SVaraSERKS_(ptr noundef nonnull align 8 dereferenceable(32) %517, ptr noundef nonnull align 8 dereferenceable(32) %516)
          to label %519 unwind label %363

519:                                              ; preds = %515
  %520 = load ptr, ptr %6, align 8, !tbaa !5
  %521 = load ptr, ptr %9, align 8, !tbaa !5
  %522 = load ptr, ptr %7, align 8, !tbaa !5
  %523 = load ptr, ptr %10, align 8, !tbaa !5
  invoke void @_Z14initSolverVarsPK11SParametersPK6SCurveRK4SVarR11SSolverVarsb(ptr noundef %520, ptr noundef %521, ptr noundef nonnull align 8 dereferenceable(32) %522, ptr noundef nonnull align 8 dereferenceable(240) %523, i1 noundef zeroext true)
          to label %524 unwind label %363

524:                                              ; preds = %519
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %15) #5
  call void @_ZNSt6vectorIiSaIiEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %14) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr %14) #5
  call void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %13) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr %13) #5
  call void @_ZNSt6vectorI8SPoint2DSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %12) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr %12) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #5
  ret void

525:                                              ; preds = %511, %490, %425, %363
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #5
  br label %526

526:                                              ; preds = %525, %359, %289, %238
  call void @llvm.lifetime.end.p0(i64 1, ptr %15) #5
  call void @_ZNSt6vectorIiSaIiEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %14) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr %14) #5
  call void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %13) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr %13) #5
  call void @_ZNSt6vectorI8SPoint2DSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %12) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr %12) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #5
  br label %527

527:                                              ; preds = %526
  %528 = load ptr, ptr %19, align 8
  %529 = load i32, ptr %20, align 4
  %530 = insertvalue { ptr, i32 } poison, ptr %528, 0
  %531 = insertvalue { ptr, i32 } %530, i32 %529, 1
  resume { ptr, i32 } %531
}

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN5Eigen9DenseBaseINS_6MatrixIdLi2ELin1ELi0ELi2ELin1EEEE3colEl(ptr dead_on_unwind noalias writable sret(%"class.Eigen::Block.99") align 8, ptr noundef nonnull align 1 dereferenceable(1), i64 noundef) #1 align 2

declare i32 @__gxx_personality_v0(...)

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZN5Eigen15DenseCoeffsBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEELi1EEclEl(ptr noundef nonnull align 1 dereferenceable(1), i64 noundef) #1 align 2

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZNK5Eigen10MatrixBaseINS_5BlockINS_6MatrixIdLi2ELin1ELi0ELi2ELin1EEELi2ELi1ELb1EEEEmiIS4_EEKNS_13CwiseBinaryOpINS_8internal20scalar_difference_opIdEEKS4_KT_EERKNS0_ISC_EE(ptr dead_on_unwind noalias writable sret(%"class.Eigen::CwiseBinaryOp.113") align 8, ptr noundef nonnull align 1 dereferenceable(1), ptr noundef nonnull align 1 dereferenceable(1)) #1 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN5Eigen6MatrixIdLi2ELi1ELi0ELi2ELi1EEC2INS_13CwiseBinaryOpINS_8internal20scalar_difference_opIdEEKNS_5BlockINS0_IdLi2ELin1ELi0ELi2ELin1EEELi2ELi1ELb1EEESA_EEEERKNS_10MatrixBaseIT_EE(ptr noundef nonnull align 16 dereferenceable(16), ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #1 align 2

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

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

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

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

declare void @_Z6resizeR4SVari(ptr noundef nonnull align 8 dereferenceable(32), i32 noundef) #4

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(32) ptr @_ZN4SVaraSERKS_(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32)) #1 align 2

declare void @_Z14initSolverVarsPK11SParametersPK6SCurveRK4SVarR11SSolverVarsb(ptr noundef, ptr noundef, ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(240), i1 noundef zeroext) #4

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

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !11, i64 0}
!10 = !{!"_ZTS6SCurve", !11, i64 0, !12, i64 4, !13, i64 8, !13, i64 24, !17, i64 40}
!11 = !{!"bool", !7, i64 0}
!12 = !{!"int", !7, i64 0}
!13 = !{!"_ZTSN5Eigen6MatrixIdLin1ELi1ELi0ELin1ELi1EEE", !14, i64 0}
!14 = !{!"_ZTSN5Eigen15PlainObjectBaseINS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEEEE", !15, i64 0}
!15 = !{!"_ZTSN5Eigen12DenseStorageIdLin1ELin1ELi1ELi0EEE", !6, i64 0, !16, i64 8}
!16 = !{!"long", !7, i64 0}
!17 = !{!"_ZTSN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEE", !18, i64 0}
!18 = !{!"_ZTSN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEE", !19, i64 0}
!19 = !{!"_ZTSN5Eigen12DenseStorageIiLin1ELin1ELi1ELi0EEE", !6, i64 0, !16, i64 8}
!20 = !{i8 0, i8 2}
!21 = !{}
!22 = !{!10, !12, i64 4}
!23 = !{!12, !12, i64 0}
!24 = !{!11, !11, i64 0}
!25 = !{!26, !26, i64 0}
!26 = !{!"double", !7, i64 0}
!27 = !{!28, !26, i64 128}
!28 = !{!"_ZTS11SParameters", !26, i64 0, !26, i64 8, !26, i64 16, !26, i64 24, !29, i64 32, !30, i64 48, !12, i64 80, !26, i64 88, !26, i64 96, !26, i64 104, !26, i64 112, !12, i64 120, !26, i64 128}
!29 = !{!"_ZTSN9_BlueTail6_Image6SImageIdLi1EEE", !12, i64 0, !12, i64 4, !6, i64 8}
!30 = !{!"_ZTS7SRegion", !26, i64 0, !26, i64 8, !26, i64 16, !26, i64 24}
!31 = distinct !{!31, !32}
!32 = !{!"llvm.loop.mustprogress"}
!33 = distinct !{!33, !32}
!34 = distinct !{!34, !32}
!35 = distinct !{!35, !32}


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

%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<SPoint2D, std::allocator<SPoint2D>>::_Vector_impl" }
%"struct.std::_Vector_base<SPoint2D, std::allocator<SPoint2D>>::_Vector_impl" = type { %"struct.std::_Vector_base<SPoint2D, std::allocator<SPoint2D>>::_Vector_impl_data" }
%"struct.std::_Vector_base<SPoint2D, std::allocator<SPoint2D>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.89" = type { %"struct.std::_Vector_base.90" }
%"struct.std::_Vector_base.90" = type { %"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl" }
%"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl" = type { %"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl_data" }
%"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.94" = type { %"struct.std::_Vector_base.95" }
%"struct.std::_Vector_base.95" = type { %"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl" }
%"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl" = type { %"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl_data" }
%"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%struct.SPoint2D = type { [2 x double] }
%"class.Eigen::Block.99" = type { %"class.Eigen::BlockImpl.100" }
%"class.Eigen::BlockImpl.100" = type { %"class.Eigen::internal::BlockImpl_dense.101" }
%"class.Eigen::internal::BlockImpl_dense.101" = type { %"class.Eigen::MapBase.base.112", ptr, i64 }
%"class.Eigen::MapBase.base.112" = type { %"class.Eigen::MapBase.base.111" }
%"class.Eigen::MapBase.base.111" = type <{ ptr, [2 x i8] }>
%"class.Eigen::Matrix" = type { %"class.Eigen::PlainObjectBase" }
%"class.Eigen::PlainObjectBase" = type { %"class.Eigen::DenseStorage" }
%"class.Eigen::DenseStorage" = type { %"struct.Eigen::internal::plain_array" }
%"struct.Eigen::internal::plain_array" = type { [2 x double] }
%"class.Eigen::CwiseBinaryOp.113" = type <{ %"class.Eigen::Block.99", %"class.Eigen::Block.99", [8 x i8] }>

@_ZL2PI = external hidden constant double, align 8

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef double @_ZNK5Eigen10MatrixBaseINS_6MatrixIdLi2ELi1ELi0ELi2ELi1EEEE4normEv(ptr noundef nonnull align 1 dereferenceable(1)) local_unnamed_addr #1 align 2

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

; Function Attrs: mustprogress uwtable
define dso_local void @_Z22UpdateCurveSubdivisionPK11SParametersR4SVarS3_P6SCurveR11SSolverVars(ptr noundef %0, ptr noundef nonnull align 8 dereferenceable(32) %1, ptr noundef nonnull align 8 dereferenceable(32) %2, ptr noundef %3, ptr noundef nonnull align 8 dereferenceable(240) %4) local_unnamed_addr #2 personality ptr @__gxx_personality_v0 {
  %6 = alloca %"class.std::vector", align 8
  %7 = alloca %"class.std::vector.89", align 8
  %8 = alloca %"class.std::vector.94", align 8
  %9 = alloca %struct.SPoint2D, align 8
  %10 = alloca %"class.Eigen::Block.99", align 8
  %11 = alloca %"class.Eigen::Block.99", align 8
  %12 = alloca %"class.Eigen::Matrix", align 16
  %13 = alloca %"class.Eigen::CwiseBinaryOp.113", align 8
  %14 = alloca %"class.Eigen::Block.99", align 8
  %15 = alloca %"class.Eigen::Block.99", align 8
  %16 = alloca %struct.SPoint2D, align 8
  %17 = alloca %"class.Eigen::Block.99", align 8
  %18 = alloca %"class.Eigen::Block.99", align 8
  %19 = alloca %"class.Eigen::Block.99", align 8
  %20 = alloca %"class.Eigen::Block.99", align 8
  %21 = alloca i32, align 4
  %22 = alloca %struct.SPoint2D, align 8
  %23 = alloca %"class.Eigen::Block.99", align 8
  %24 = alloca %"class.Eigen::Block.99", align 8
  %25 = alloca %"class.Eigen::Block.99", align 8
  %26 = alloca %"class.Eigen::Block.99", align 8
  %27 = alloca %"class.Eigen::Matrix", align 16
  %28 = alloca %"class.Eigen::CwiseBinaryOp.113", align 8
  %29 = alloca %"class.Eigen::Block.99", align 8
  %30 = alloca %"class.Eigen::Block.99", align 8
  %31 = load i8, ptr %3, align 8, !tbaa !5, !range !19, !noundef !20
  %32 = getelementptr inbounds i8, ptr %3, i64 4
  %33 = load i32, ptr %32, align 4, !tbaa !21
  %34 = xor i8 %31, 1
  %35 = zext nneg i8 %34 to i32
  %36 = sub i32 %33, %35
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %6) #5
  call void @_ZNSt6vectorI8SPoint2DSaIS0_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %6) #5
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %7) #5
  call void @_ZNSt6vectorIdSaIdEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %7) #5
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %8) #5
  call void @_ZNSt6vectorIiSaIiEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %8) #5
  %37 = icmp sgt i32 %36, 0
  br i1 %37, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %5
  %38 = getelementptr inbounds i8, ptr %9, i64 8
  %39 = getelementptr inbounds i8, ptr %3, i64 40
  %40 = getelementptr inbounds i8, ptr %3, i64 8
  %41 = getelementptr inbounds i8, ptr %3, i64 4
  %42 = getelementptr inbounds i8, ptr %0, i64 128
  %43 = getelementptr inbounds i8, ptr %16, i64 8
  %wide.trip.count = zext nneg i32 %36 to i64
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %9) #5
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %10) #5
  invoke void @_ZN5Eigen9DenseBaseINS_6MatrixIdLi2ELin1ELi0ELi2ELin1EEEE3colEl(ptr dead_on_unwind nonnull writable sret(%"class.Eigen::Block.99") align 8 %10, ptr noundef nonnull align 1 dereferenceable(1) %2, i64 noundef 0)
          to label %44 unwind label %.loopexit.split-lp

44:                                               ; preds = %.lr.ph
  %45 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN5Eigen15DenseCoeffsBaseINS_5BlockINS_6MatrixIdLi2ELin1ELi0ELi2ELin1EEELi2ELi1ELb1EEELi1EEclEl(ptr noundef nonnull align 1 dereferenceable(1) %10, i64 noundef 0)
          to label %46 unwind label %.loopexit.split-lp

46:                                               ; preds = %44
  %47 = load double, ptr %45, align 8, !tbaa !22
  store double %47, ptr %9, align 8, !tbaa !22
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %10) #5
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %11) #5
  invoke void @_ZN5Eigen9DenseBaseINS_6MatrixIdLi2ELin1ELi0ELi2ELin1EEEE3colEl(ptr dead_on_unwind nonnull writable sret(%"class.Eigen::Block.99") align 8 %11, ptr noundef nonnull align 1 dereferenceable(1) %2, i64 noundef 0)
          to label %48 unwind label %.loopexit.split-lp153

48:                                               ; preds = %46
  %49 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN5Eigen15DenseCoeffsBaseINS_5BlockINS_6MatrixIdLi2ELin1ELi0ELi2ELin1EEELi2ELi1ELb1EEELi1EEclEl(ptr noundef nonnull align 1 dereferenceable(1) %11, i64 noundef 1)
          to label %50 unwind label %.loopexit.split-lp153

50:                                               ; preds = %48
  %51 = load double, ptr %49, align 8, !tbaa !22
  store double %51, ptr %38, align 8, !tbaa !22
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %11) #5
  invoke void @_ZNSt6vectorI8SPoint2DSaIS0_EE9push_backERKS0_(ptr noundef nonnull align 8 dereferenceable(24) %6, ptr noundef nonnull align 8 dereferenceable(16) %9)
          to label %52 unwind label %.loopexit.split-lp158

52:                                               ; preds = %50
  %53 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN5Eigen15DenseCoeffsBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEELi1EEclEl(ptr noundef nonnull align 1 dereferenceable(1) %39, i64 noundef 0)
          to label %54 unwind label %.loopexit.split-lp158

54:                                               ; preds = %52
  invoke void @_ZNSt6vectorIiSaIiEE9push_backERKi(ptr noundef nonnull align 8 dereferenceable(24) %8, ptr noundef nonnull align 4 dereferenceable(4) %53)
          to label %55 unwind label %.loopexit.split-lp158

55:                                               ; preds = %54
  %56 = load i8, ptr %3, align 8, !tbaa !5, !range !19, !noundef !20
  %57 = trunc nuw i8 %56 to i1
  br i1 %57, label %58, label %61

58:                                               ; preds = %55
  %59 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN5Eigen15DenseCoeffsBaseINS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEELi1EEclEl(ptr noundef nonnull align 1 dereferenceable(1) %40, i64 noundef 0)
          to label %60 unwind label %.loopexit.split-lp158

60:                                               ; preds = %58
  invoke void @_ZNSt6vectorIdSaIdEE9push_backERKd(ptr noundef nonnull align 8 dereferenceable(24) %7, ptr noundef nonnull align 8 dereferenceable(8) %59)
          to label %61 unwind label %.loopexit.split-lp158

61:                                               ; preds = %60, %55
  %62 = load i32, ptr %41, align 4, !tbaa !21
  %63 = srem i32 1, %62
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %12) #5
  call void @llvm.lifetime.start.p0(i64 72, ptr nonnull %13) #5
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %14) #5
  %64 = zext nneg i32 %63 to i64
  invoke void @_ZN5Eigen9DenseBaseINS_6MatrixIdLi2ELin1ELi0ELi2ELin1EEEE3colEl(ptr dead_on_unwind nonnull writable sret(%"class.Eigen::Block.99") align 8 %14, ptr noundef nonnull align 1 dereferenceable(1) %2, i64 noundef %64)
          to label %65 unwind label %.loopexit.split-lp163

65:                                               ; preds = %61
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %15) #5
  invoke void @_ZN5Eigen9DenseBaseINS_6MatrixIdLi2ELin1ELi0ELi2ELin1EEEE3colEl(ptr dead_on_unwind nonnull writable sret(%"class.Eigen::Block.99") align 8 %15, ptr noundef nonnull align 1 dereferenceable(1) %2, i64 noundef 0)
          to label %66 unwind label %.loopexit.split-lp168

66:                                               ; preds = %65
  invoke void @_ZNK5Eigen10MatrixBaseINS_5BlockINS_6MatrixIdLi2ELin1ELi0ELi2ELin1EEELi2ELi1ELb1EEEEmiIS4_EEKNS_13CwiseBinaryOpINS_8internal20scalar_difference_opIdEEKS4_KT_EERKNS0_ISC_EE(ptr dead_on_unwind nonnull writable sret(%"class.Eigen::CwiseBinaryOp.113") align 8 %13, ptr noundef nonnull align 1 dereferenceable(1) %14, ptr noundef nonnull align 1 dereferenceable(1) %15)
          to label %67 unwind label %.loopexit.split-lp168

67:                                               ; preds = %66
  invoke void @_ZN5Eigen6MatrixIdLi2ELi1ELi0ELi2ELi1EEC2INS_13CwiseBinaryOpINS_8internal20scalar_difference_opIdEEKNS_5BlockINS0_IdLi2ELin1ELi0ELi2ELin1EEELi2ELi1ELb1EEESA_EEEERKNS_10MatrixBaseIT_EE(ptr noundef nonnull align 16 dereferenceable(16) %12, ptr noundef nonnull align 1 dereferenceable(1) %13)
          to label %68 unwind label %.loopexit.split-lp168

68:                                               ; preds = %67
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %15) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %14) #5
  call void @llvm.lifetime.end.p0(i64 72, ptr nonnull %13) #5
  %69 = invoke noundef double @_ZNK5Eigen10MatrixBaseINS_6MatrixIdLi2ELi1ELi0ELi2ELi1EEEE4normEv(ptr noundef nonnull align 1 dereferenceable(1) %12)
          to label %70 unwind label %.loopexit.split-lp173

70:                                               ; preds = %68
  %71 = load double, ptr %42, align 8, !tbaa !24
  %72 = fcmp ogt double %69, %71
  br i1 %72, label %73, label %97

73:                                               ; preds = %70
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %16) #5
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %17) #5
  invoke void @_ZN5Eigen9DenseBaseINS_6MatrixIdLi2ELin1ELi0ELi2ELin1EEEE3colEl(ptr dead_on_unwind nonnull writable sret(%"class.Eigen::Block.99") align 8 %17, ptr noundef nonnull align 1 dereferenceable(1) %2, i64 noundef %64)
          to label %74 unwind label %.loopexit.split-lp178

74:                                               ; preds = %73
  %75 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN5Eigen15DenseCoeffsBaseINS_5BlockINS_6MatrixIdLi2ELin1ELi0ELi2ELin1EEELi2ELi1ELb1EEELi1EEclEl(ptr noundef nonnull align 1 dereferenceable(1) %17, i64 noundef 0)
          to label %76 unwind label %.loopexit.split-lp178

76:                                               ; preds = %74
  %77 = load double, ptr %75, align 8, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %18) #5
  invoke void @_ZN5Eigen9DenseBaseINS_6MatrixIdLi2ELin1ELi0ELi2ELin1EEEE3colEl(ptr dead_on_unwind nonnull writable sret(%"class.Eigen::Block.99") align 8 %18, ptr noundef nonnull align 1 dereferenceable(1) %2, i64 noundef 0)
          to label %78 unwind label %.loopexit.split-lp183

78:                                               ; preds = %76
  %79 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN5Eigen15DenseCoeffsBaseINS_5BlockINS_6MatrixIdLi2ELin1ELi0ELi2ELin1EEELi2ELi1ELb1EEELi1EEclEl(ptr noundef nonnull align 1 dereferenceable(1) %18, i64 noundef 0)
          to label %80 unwind label %.loopexit.split-lp183

80:                                               ; preds = %78
  %81 = load double, ptr %79, align 8, !tbaa !22
  %82 = fadd double %77, %81
  %83 = fmul double %82, 5.000000e-01
  store double %83, ptr %16, align 8, !tbaa !22
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %18) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %17) #5
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %19) #5
  invoke void @_ZN5Eigen9DenseBaseINS_6MatrixIdLi2ELin1ELi0ELi2ELin1EEEE3colEl(ptr dead_on_unwind nonnull writable sret(%"class.Eigen::Block.99") align 8 %19, ptr noundef nonnull align 1 dereferenceable(1) %2, i64 noundef %64)
          to label %84 unwind label %.loopexit.split-lp188

84:                                               ; preds = %80
  %85 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN5Eigen15DenseCoeffsBaseINS_5BlockINS_6MatrixIdLi2ELin1ELi0ELi2ELin1EEELi2ELi1ELb1EEELi1EEclEl(ptr noundef nonnull align 1 dereferenceable(1) %19, i64 noundef 1)
          to label %86 unwind label %.loopexit.split-lp188

86:                                               ; preds = %84
  %87 = load double, ptr %85, align 8, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %20) #5
  invoke void @_ZN5Eigen9DenseBaseINS_6MatrixIdLi2ELin1ELi0ELi2ELin1EEEE3colEl(ptr dead_on_unwind nonnull writable sret(%"class.Eigen::Block.99") align 8 %20, ptr noundef nonnull align 1 dereferenceable(1) %2, i64 noundef 0)
          to label %88 unwind label %.loopexit.split-lp193

88:                                               ; preds = %86
  %89 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN5Eigen15DenseCoeffsBaseINS_5BlockINS_6MatrixIdLi2ELin1ELi0ELi2ELin1EEELi2ELi1ELb1EEELi1EEclEl(ptr noundef nonnull align 1 dereferenceable(1) %20, i64 noundef 1)
          to label %90 unwind label %.loopexit.split-lp193

90:                                               ; preds = %88
  %91 = load double, ptr %89, align 8, !tbaa !22
  %92 = fadd double %87, %91
  %93 = fmul double %92, 5.000000e-01
  store double %93, ptr %43, align 8, !tbaa !22
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %20) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %19) #5
  invoke void @_ZNSt6vectorI8SPoint2DSaIS0_EE9push_backERKS0_(ptr noundef nonnull align 8 dereferenceable(24) %6, ptr noundef nonnull align 8 dereferenceable(16) %16)
          to label %94 unwind label %.loopexit.split-lp198

94:                                               ; preds = %90
  invoke void @_ZNSt6vectorIdSaIdEE9push_backERKd(ptr noundef nonnull align 8 dereferenceable(24) %7, ptr noundef nonnull align 8 dereferenceable(8) @_ZL2PI)
          to label %95 unwind label %.loopexit.split-lp198

95:                                               ; preds = %94
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %21) #5
  store i32 -1, ptr %21, align 4, !tbaa !28
  invoke void @_ZNSt6vectorIiSaIiEE9push_backEOi(ptr noundef nonnull align 8 dereferenceable(24) %8, ptr noundef nonnull align 4 dereferenceable(4) %21)
          to label %96 unwind label %.loopexit.split-lp203

96:                                               ; preds = %95
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %21) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %16) #5
  br label %97

97:                                               ; preds = %96, %70
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %12) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %9) #5
  %exitcond.peel.not = icmp eq i32 %36, 1
  br i1 %exitcond.peel.not, label %._crit_edge, label %.peel.next

._crit_edge:                                      ; preds = %161, %97, %5
  %98 = load i8, ptr %3, align 8, !tbaa !5, !range !19, !noundef !20
  %99 = trunc nuw i8 %98 to i1
  br i1 %99, label %190, label %164

.peel.next:                                       ; preds = %97, %161
  %indvars.iv = phi i64 [ %indvars.iv.next, %161 ], [ 1, %97 ]
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %9) #5
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %10) #5
  invoke void @_ZN5Eigen9DenseBaseINS_6MatrixIdLi2ELin1ELi0ELi2ELin1EEEE3colEl(ptr dead_on_unwind nonnull writable sret(%"class.Eigen::Block.99") align 8 %10, ptr noundef nonnull align 1 dereferenceable(1) %2, i64 noundef %indvars.iv)
          to label %100 unwind label %.loopexit

100:                                              ; preds = %.peel.next
  %101 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN5Eigen15DenseCoeffsBaseINS_5BlockINS_6MatrixIdLi2ELin1ELi0ELi2ELin1EEELi2ELi1ELb1EEELi1EEclEl(ptr noundef nonnull align 1 dereferenceable(1) %10, i64 noundef 0)
          to label %102 unwind label %.loopexit

102:                                              ; preds = %100
  %103 = load double, ptr %101, align 8, !tbaa !22
  store double %103, ptr %9, align 8, !tbaa !22
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %10) #5
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %11) #5
  invoke void @_ZN5Eigen9DenseBaseINS_6MatrixIdLi2ELin1ELi0ELi2ELin1EEEE3colEl(ptr dead_on_unwind nonnull writable sret(%"class.Eigen::Block.99") align 8 %11, ptr noundef nonnull align 1 dereferenceable(1) %2, i64 noundef %indvars.iv)
          to label %104 unwind label %.loopexit152

104:                                              ; preds = %102
  %105 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN5Eigen15DenseCoeffsBaseINS_5BlockINS_6MatrixIdLi2ELin1ELi0ELi2ELin1EEELi2ELi1ELb1EEELi1EEclEl(ptr noundef nonnull align 1 dereferenceable(1) %11, i64 noundef 1)
          to label %106 unwind label %.loopexit152

106:                                              ; preds = %104
  %107 = load double, ptr %105, align 8, !tbaa !22
  store double %107, ptr %38, align 8, !tbaa !22
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %11) #5
  invoke void @_ZNSt6vectorI8SPoint2DSaIS0_EE9push_backERKS0_(ptr noundef nonnull align 8 dereferenceable(24) %6, ptr noundef nonnull align 8 dereferenceable(16) %9)
          to label %108 unwind label %.loopexit157

108:                                              ; preds = %106
  %109 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN5Eigen15DenseCoeffsBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEELi1EEclEl(ptr noundef nonnull align 1 dereferenceable(1) %39, i64 noundef %indvars.iv)
          to label %110 unwind label %.loopexit157

110:                                              ; preds = %108
  invoke void @_ZNSt6vectorIiSaIiEE9push_backERKi(ptr noundef nonnull align 8 dereferenceable(24) %8, ptr noundef nonnull align 4 dereferenceable(4) %109)
          to label %111 unwind label %.loopexit157

111:                                              ; preds = %110
  %112 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN5Eigen15DenseCoeffsBaseINS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEELi1EEclEl(ptr noundef nonnull align 1 dereferenceable(1) %40, i64 noundef %indvars.iv)
          to label %113 unwind label %.loopexit157

113:                                              ; preds = %111
  invoke void @_ZNSt6vectorIdSaIdEE9push_backERKd(ptr noundef nonnull align 8 dereferenceable(24) %7, ptr noundef nonnull align 8 dereferenceable(8) %112)
          to label %116 unwind label %.loopexit157

.loopexit:                                        ; preds = %.peel.next, %100
  %lpad.loopexit = landingpad { ptr, i32 }
          cleanup
  br label %114

.loopexit.split-lp:                               ; preds = %.lr.ph, %44
  %lpad.loopexit.split-lp = landingpad { ptr, i32 }
          cleanup
  br label %114

114:                                              ; preds = %.loopexit.split-lp, %.loopexit
  %lpad.phi = phi { ptr, i32 } [ %lpad.loopexit, %.loopexit ], [ %lpad.loopexit.split-lp, %.loopexit.split-lp ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %10) #5
  br label %163

.loopexit152:                                     ; preds = %102, %104
  %lpad.loopexit154 = landingpad { ptr, i32 }
          cleanup
  br label %115

.loopexit.split-lp153:                            ; preds = %46, %48
  %lpad.loopexit.split-lp155 = landingpad { ptr, i32 }
          cleanup
  br label %115

115:                                              ; preds = %.loopexit.split-lp153, %.loopexit152
  %lpad.phi156 = phi { ptr, i32 } [ %lpad.loopexit154, %.loopexit152 ], [ %lpad.loopexit.split-lp155, %.loopexit.split-lp153 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %11) #5
  br label %163

.loopexit157:                                     ; preds = %106, %108, %110, %111, %113
  %lpad.loopexit159 = landingpad { ptr, i32 }
          cleanup
  br label %163

.loopexit.split-lp158:                            ; preds = %50, %52, %54, %58, %60
  %lpad.loopexit.split-lp160 = landingpad { ptr, i32 }
          cleanup
  br label %163

116:                                              ; preds = %113
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %117 = load i32, ptr %41, align 4, !tbaa !21
  %118 = trunc nuw nsw i64 %indvars.iv.next to i32
  %119 = srem i32 %118, %117
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %12) #5
  call void @llvm.lifetime.start.p0(i64 72, ptr nonnull %13) #5
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %14) #5
  %120 = zext nneg i32 %119 to i64
  invoke void @_ZN5Eigen9DenseBaseINS_6MatrixIdLi2ELin1ELi0ELi2ELin1EEEE3colEl(ptr dead_on_unwind nonnull writable sret(%"class.Eigen::Block.99") align 8 %14, ptr noundef nonnull align 1 dereferenceable(1) %2, i64 noundef %120)
          to label %121 unwind label %.loopexit162

121:                                              ; preds = %116
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %15) #5
  invoke void @_ZN5Eigen9DenseBaseINS_6MatrixIdLi2ELin1ELi0ELi2ELin1EEEE3colEl(ptr dead_on_unwind nonnull writable sret(%"class.Eigen::Block.99") align 8 %15, ptr noundef nonnull align 1 dereferenceable(1) %2, i64 noundef %indvars.iv)
          to label %122 unwind label %.loopexit167

122:                                              ; preds = %121
  invoke void @_ZNK5Eigen10MatrixBaseINS_5BlockINS_6MatrixIdLi2ELin1ELi0ELi2ELin1EEELi2ELi1ELb1EEEEmiIS4_EEKNS_13CwiseBinaryOpINS_8internal20scalar_difference_opIdEEKS4_KT_EERKNS0_ISC_EE(ptr dead_on_unwind nonnull writable sret(%"class.Eigen::CwiseBinaryOp.113") align 8 %13, ptr noundef nonnull align 1 dereferenceable(1) %14, ptr noundef nonnull align 1 dereferenceable(1) %15)
          to label %123 unwind label %.loopexit167

123:                                              ; preds = %122
  invoke void @_ZN5Eigen6MatrixIdLi2ELi1ELi0ELi2ELi1EEC2INS_13CwiseBinaryOpINS_8internal20scalar_difference_opIdEEKNS_5BlockINS0_IdLi2ELin1ELi0ELi2ELin1EEELi2ELi1ELb1EEESA_EEEERKNS_10MatrixBaseIT_EE(ptr noundef nonnull align 16 dereferenceable(16) %12, ptr noundef nonnull align 1 dereferenceable(1) %13)
          to label %124 unwind label %.loopexit167

124:                                              ; preds = %123
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %15) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %14) #5
  call void @llvm.lifetime.end.p0(i64 72, ptr nonnull %13) #5
  %125 = invoke noundef double @_ZNK5Eigen10MatrixBaseINS_6MatrixIdLi2ELi1ELi0ELi2ELi1EEEE4normEv(ptr noundef nonnull align 1 dereferenceable(1) %12)
          to label %126 unwind label %.loopexit172

126:                                              ; preds = %124
  %127 = load double, ptr %42, align 8, !tbaa !24
  %128 = fcmp ogt double %125, %127
  br i1 %128, label %129, label %161

129:                                              ; preds = %126
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %16) #5
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %17) #5
  invoke void @_ZN5Eigen9DenseBaseINS_6MatrixIdLi2ELin1ELi0ELi2ELin1EEEE3colEl(ptr dead_on_unwind nonnull writable sret(%"class.Eigen::Block.99") align 8 %17, ptr noundef nonnull align 1 dereferenceable(1) %2, i64 noundef %120)
          to label %130 unwind label %.loopexit177

130:                                              ; preds = %129
  %131 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN5Eigen15DenseCoeffsBaseINS_5BlockINS_6MatrixIdLi2ELin1ELi0ELi2ELin1EEELi2ELi1ELb1EEELi1EEclEl(ptr noundef nonnull align 1 dereferenceable(1) %17, i64 noundef 0)
          to label %132 unwind label %.loopexit177

132:                                              ; preds = %130
  %133 = load double, ptr %131, align 8, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %18) #5
  invoke void @_ZN5Eigen9DenseBaseINS_6MatrixIdLi2ELin1ELi0ELi2ELin1EEEE3colEl(ptr dead_on_unwind nonnull writable sret(%"class.Eigen::Block.99") align 8 %18, ptr noundef nonnull align 1 dereferenceable(1) %2, i64 noundef %indvars.iv)
          to label %134 unwind label %.loopexit182

134:                                              ; preds = %132
  %135 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN5Eigen15DenseCoeffsBaseINS_5BlockINS_6MatrixIdLi2ELin1ELi0ELi2ELin1EEELi2ELi1ELb1EEELi1EEclEl(ptr noundef nonnull align 1 dereferenceable(1) %18, i64 noundef 0)
          to label %136 unwind label %.loopexit182

136:                                              ; preds = %134
  %137 = load double, ptr %135, align 8, !tbaa !22
  %138 = fadd double %133, %137
  %139 = fmul double %138, 5.000000e-01
  store double %139, ptr %16, align 8, !tbaa !22
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %18) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %17) #5
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %19) #5
  invoke void @_ZN5Eigen9DenseBaseINS_6MatrixIdLi2ELin1ELi0ELi2ELin1EEEE3colEl(ptr dead_on_unwind nonnull writable sret(%"class.Eigen::Block.99") align 8 %19, ptr noundef nonnull align 1 dereferenceable(1) %2, i64 noundef %120)
          to label %140 unwind label %.loopexit187

140:                                              ; preds = %136
  %141 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN5Eigen15DenseCoeffsBaseINS_5BlockINS_6MatrixIdLi2ELin1ELi0ELi2ELin1EEELi2ELi1ELb1EEELi1EEclEl(ptr noundef nonnull align 1 dereferenceable(1) %19, i64 noundef 1)
          to label %142 unwind label %.loopexit187

142:                                              ; preds = %140
  %143 = load double, ptr %141, align 8, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %20) #5
  invoke void @_ZN5Eigen9DenseBaseINS_6MatrixIdLi2ELin1ELi0ELi2ELin1EEEE3colEl(ptr dead_on_unwind nonnull writable sret(%"class.Eigen::Block.99") align 8 %20, ptr noundef nonnull align 1 dereferenceable(1) %2, i64 noundef %indvars.iv)
          to label %144 unwind label %.loopexit192

144:                                              ; preds = %142
  %145 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN5Eigen15DenseCoeffsBaseINS_5BlockINS_6MatrixIdLi2ELin1ELi0ELi2ELin1EEELi2ELi1ELb1EEELi1EEclEl(ptr noundef nonnull align 1 dereferenceable(1) %20, i64 noundef 1)
          to label %146 unwind label %.loopexit192

146:                                              ; preds = %144
  %147 = load double, ptr %145, align 8, !tbaa !22
  %148 = fadd double %143, %147
  %149 = fmul double %148, 5.000000e-01
  store double %149, ptr %43, align 8, !tbaa !22
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %20) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %19) #5
  invoke void @_ZNSt6vectorI8SPoint2DSaIS0_EE9push_backERKS0_(ptr noundef nonnull align 8 dereferenceable(24) %6, ptr noundef nonnull align 8 dereferenceable(16) %16)
          to label %150 unwind label %.loopexit197

150:                                              ; preds = %146
  invoke void @_ZNSt6vectorIdSaIdEE9push_backERKd(ptr noundef nonnull align 8 dereferenceable(24) %7, ptr noundef nonnull align 8 dereferenceable(8) @_ZL2PI)
          to label %151 unwind label %.loopexit197

151:                                              ; preds = %150
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %21) #5
  store i32 -1, ptr %21, align 4, !tbaa !28
  invoke void @_ZNSt6vectorIiSaIiEE9push_backEOi(ptr noundef nonnull align 8 dereferenceable(24) %8, ptr noundef nonnull align 4 dereferenceable(4) %21)
          to label %152 unwind label %.loopexit202

152:                                              ; preds = %151
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %21) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %16) #5
  br label %161

.loopexit162:                                     ; preds = %116
  %lpad.loopexit164 = landingpad { ptr, i32 }
          cleanup
  br label %154

.loopexit.split-lp163:                            ; preds = %61
  %lpad.loopexit.split-lp165 = landingpad { ptr, i32 }
          cleanup
  br label %154

.loopexit167:                                     ; preds = %121, %122, %123
  %lpad.loopexit169 = landingpad { ptr, i32 }
          cleanup
  br label %153

.loopexit.split-lp168:                            ; preds = %65, %66, %67
  %lpad.loopexit.split-lp170 = landingpad { ptr, i32 }
          cleanup
  br label %153

153:                                              ; preds = %.loopexit.split-lp168, %.loopexit167
  %lpad.phi171 = phi { ptr, i32 } [ %lpad.loopexit169, %.loopexit167 ], [ %lpad.loopexit.split-lp170, %.loopexit.split-lp168 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %15) #5
  br label %154

154:                                              ; preds = %.loopexit162, %.loopexit.split-lp163, %153
  %.pn122 = phi { ptr, i32 } [ %lpad.phi171, %153 ], [ %lpad.loopexit164, %.loopexit162 ], [ %lpad.loopexit.split-lp165, %.loopexit.split-lp163 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %14) #5
  call void @llvm.lifetime.end.p0(i64 72, ptr nonnull %13) #5
  br label %162

.loopexit172:                                     ; preds = %124
  %lpad.loopexit174 = landingpad { ptr, i32 }
          cleanup
  br label %162

.loopexit.split-lp173:                            ; preds = %68
  %lpad.loopexit.split-lp175 = landingpad { ptr, i32 }
          cleanup
  br label %162

.loopexit177:                                     ; preds = %129, %130
  %lpad.loopexit179 = landingpad { ptr, i32 }
          cleanup
  br label %156

.loopexit.split-lp178:                            ; preds = %73, %74
  %lpad.loopexit.split-lp180 = landingpad { ptr, i32 }
          cleanup
  br label %156

.loopexit182:                                     ; preds = %132, %134
  %lpad.loopexit184 = landingpad { ptr, i32 }
          cleanup
  br label %155

.loopexit.split-lp183:                            ; preds = %76, %78
  %lpad.loopexit.split-lp185 = landingpad { ptr, i32 }
          cleanup
  br label %155

155:                                              ; preds = %.loopexit.split-lp183, %.loopexit182
  %lpad.phi186 = phi { ptr, i32 } [ %lpad.loopexit184, %.loopexit182 ], [ %lpad.loopexit.split-lp185, %.loopexit.split-lp183 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %18) #5
  br label %156

156:                                              ; preds = %.loopexit177, %.loopexit.split-lp178, %155
  %.pn124 = phi { ptr, i32 } [ %lpad.phi186, %155 ], [ %lpad.loopexit179, %.loopexit177 ], [ %lpad.loopexit.split-lp180, %.loopexit.split-lp178 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %17) #5
  br label %160

.loopexit187:                                     ; preds = %136, %140
  %lpad.loopexit189 = landingpad { ptr, i32 }
          cleanup
  br label %158

.loopexit.split-lp188:                            ; preds = %80, %84
  %lpad.loopexit.split-lp190 = landingpad { ptr, i32 }
          cleanup
  br label %158

.loopexit192:                                     ; preds = %142, %144
  %lpad.loopexit194 = landingpad { ptr, i32 }
          cleanup
  br label %157

.loopexit.split-lp193:                            ; preds = %86, %88
  %lpad.loopexit.split-lp195 = landingpad { ptr, i32 }
          cleanup
  br label %157

157:                                              ; preds = %.loopexit.split-lp193, %.loopexit192
  %lpad.phi196 = phi { ptr, i32 } [ %lpad.loopexit194, %.loopexit192 ], [ %lpad.loopexit.split-lp195, %.loopexit.split-lp193 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %20) #5
  br label %158

158:                                              ; preds = %.loopexit187, %.loopexit.split-lp188, %157
  %.pn126 = phi { ptr, i32 } [ %lpad.phi196, %157 ], [ %lpad.loopexit189, %.loopexit187 ], [ %lpad.loopexit.split-lp190, %.loopexit.split-lp188 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %19) #5
  br label %160

.loopexit197:                                     ; preds = %146, %150
  %lpad.loopexit199 = landingpad { ptr, i32 }
          cleanup
  br label %160

.loopexit.split-lp198:                            ; preds = %90, %94
  %lpad.loopexit.split-lp200 = landingpad { ptr, i32 }
          cleanup
  br label %160

.loopexit202:                                     ; preds = %151
  %lpad.loopexit204 = landingpad { ptr, i32 }
          cleanup
  br label %159

.loopexit.split-lp203:                            ; preds = %95
  %lpad.loopexit.split-lp205 = landingpad { ptr, i32 }
          cleanup
  br label %159

159:                                              ; preds = %.loopexit.split-lp203, %.loopexit202
  %lpad.phi206 = phi { ptr, i32 } [ %lpad.loopexit204, %.loopexit202 ], [ %lpad.loopexit.split-lp205, %.loopexit.split-lp203 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %21) #5
  br label %160

160:                                              ; preds = %.loopexit197, %.loopexit.split-lp198, %159, %158, %156
  %.pn128 = phi { ptr, i32 } [ %lpad.phi206, %159 ], [ %.pn126, %158 ], [ %.pn124, %156 ], [ %lpad.loopexit199, %.loopexit197 ], [ %lpad.loopexit.split-lp200, %.loopexit.split-lp198 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %16) #5
  br label %162

161:                                              ; preds = %152, %126
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %12) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %9) #5
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond.not, label %._crit_edge, label %.peel.next, !llvm.loop !29

162:                                              ; preds = %.loopexit172, %.loopexit.split-lp173, %160, %154
  %.pn128.pn = phi { ptr, i32 } [ %.pn128, %160 ], [ %.pn122, %154 ], [ %lpad.loopexit174, %.loopexit172 ], [ %lpad.loopexit.split-lp175, %.loopexit.split-lp173 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %12) #5
  br label %163

163:                                              ; preds = %.loopexit157, %.loopexit.split-lp158, %162, %115, %114
  %.pn128.pn.pn = phi { ptr, i32 } [ %.pn128.pn, %162 ], [ %lpad.phi156, %115 ], [ %lpad.phi, %114 ], [ %lpad.loopexit159, %.loopexit157 ], [ %lpad.loopexit.split-lp160, %.loopexit.split-lp158 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %9) #5
  br label %285

164:                                              ; preds = %._crit_edge
  %165 = getelementptr inbounds i8, ptr %3, i64 4
  %166 = load i32, ptr %165, align 4, !tbaa !21
  %167 = add nsw i32 %166, -1
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %22) #5
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %23) #5
  %168 = sext i32 %167 to i64
  invoke void @_ZN5Eigen9DenseBaseINS_6MatrixIdLi2ELin1ELi0ELi2ELin1EEEE3colEl(ptr dead_on_unwind nonnull writable sret(%"class.Eigen::Block.99") align 8 %23, ptr noundef nonnull align 1 dereferenceable(1) %2, i64 noundef %168)
          to label %169 unwind label %183

169:                                              ; preds = %164
  %170 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN5Eigen15DenseCoeffsBaseINS_5BlockINS_6MatrixIdLi2ELin1ELi0ELi2ELin1EEELi2ELi1ELb1EEELi1EEclEl(ptr noundef nonnull align 1 dereferenceable(1) %23, i64 noundef 0)
          to label %171 unwind label %183

171:                                              ; preds = %169
  %172 = load double, ptr %170, align 8, !tbaa !22
  store double %172, ptr %22, align 8, !tbaa !22
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %23) #5
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %24) #5
  invoke void @_ZN5Eigen9DenseBaseINS_6MatrixIdLi2ELin1ELi0ELi2ELin1EEEE3colEl(ptr dead_on_unwind nonnull writable sret(%"class.Eigen::Block.99") align 8 %24, ptr noundef nonnull align 1 dereferenceable(1) %2, i64 noundef %168)
          to label %173 unwind label %185

173:                                              ; preds = %171
  %174 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN5Eigen15DenseCoeffsBaseINS_5BlockINS_6MatrixIdLi2ELin1ELi0ELi2ELin1EEELi2ELi1ELb1EEELi1EEclEl(ptr noundef nonnull align 1 dereferenceable(1) %24, i64 noundef 1)
          to label %175 unwind label %185

175:                                              ; preds = %173
  %176 = load double, ptr %174, align 8, !tbaa !22
  %177 = getelementptr inbounds i8, ptr %22, i64 8
  store double %176, ptr %177, align 8, !tbaa !22
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %24) #5
  invoke void @_ZNSt6vectorI8SPoint2DSaIS0_EE9push_backERKS0_(ptr noundef nonnull align 8 dereferenceable(24) %6, ptr noundef nonnull align 8 dereferenceable(16) %22)
          to label %178 unwind label %187

178:                                              ; preds = %175
  %179 = getelementptr inbounds i8, ptr %3, i64 40
  %180 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN5Eigen15DenseCoeffsBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEELi1EEclEl(ptr noundef nonnull align 1 dereferenceable(1) %179, i64 noundef %168)
          to label %181 unwind label %187

181:                                              ; preds = %178
  invoke void @_ZNSt6vectorIiSaIiEE9push_backERKi(ptr noundef nonnull align 8 dereferenceable(24) %8, ptr noundef nonnull align 4 dereferenceable(4) %180)
          to label %182 unwind label %187

182:                                              ; preds = %181
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %22) #5
  br label %190

183:                                              ; preds = %169, %164
  %184 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %23) #5
  br label %189

185:                                              ; preds = %173, %171
  %186 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %24) #5
  br label %189

187:                                              ; preds = %181, %178, %175
  %188 = landingpad { ptr, i32 }
          cleanup
  br label %189

189:                                              ; preds = %187, %185, %183
  %.pn = phi { ptr, i32 } [ %188, %187 ], [ %186, %185 ], [ %184, %183 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %22) #5
  br label %285

190:                                              ; preds = %182, %._crit_edge
  %191 = call noundef i64 @_ZNKSt6vectorI8SPoint2DSaIS0_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %6) #5
  %192 = trunc i64 %191 to i32
  %193 = getelementptr inbounds i8, ptr %3, i64 4
  store i32 %192, ptr %193, align 4, !tbaa !21
  %194 = load i8, ptr %3, align 8, !tbaa !5, !range !19, !noundef !20
  %195 = xor i8 %194, 1
  %196 = zext nneg i8 %195 to i64
  %197 = sub i64 %191, %196
  %198 = getelementptr inbounds i8, ptr %3, i64 24
  %sext = shl i64 %197, 32
  %199 = ashr exact i64 %sext, 32
  invoke void @_ZN5Eigen15PlainObjectBaseINS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEEE6resizeEl(ptr noundef nonnull align 8 dereferenceable(16) %198, i64 noundef %199)
          to label %200 unwind label %224

200:                                              ; preds = %190
  %201 = load i8, ptr %3, align 8, !tbaa !5, !range !19, !noundef !20
  %202 = trunc nuw i8 %201 to i1
  %203 = load i32, ptr %193, align 4, !tbaa !21
  %204 = add nsw i32 %203, -2
  %205 = select i1 %202, i32 %203, i32 %204
  %206 = getelementptr inbounds i8, ptr %3, i64 8
  %207 = sext i32 %205 to i64
  invoke void @_ZN5Eigen15PlainObjectBaseINS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEEE6resizeEl(ptr noundef nonnull align 8 dereferenceable(16) %206, i64 noundef %207)
          to label %208 unwind label %226

208:                                              ; preds = %200
  %209 = getelementptr inbounds i8, ptr %3, i64 40
  %210 = load i32, ptr %193, align 4, !tbaa !21
  %211 = sext i32 %210 to i64
  invoke void @_ZN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEE6resizeEl(ptr noundef nonnull align 8 dereferenceable(16) %209, i64 noundef %211)
          to label %212 unwind label %226

212:                                              ; preds = %208
  %213 = load i32, ptr %193, align 4, !tbaa !21
  invoke void @_Z6resizeR4SVari(ptr noundef nonnull align 8 dereferenceable(32) %2, i32 noundef %213)
          to label %214 unwind label %226

214:                                              ; preds = %212
  %215 = load i32, ptr %193, align 4, !tbaa !21
  invoke void @_Z6resizeR4SVari(ptr noundef nonnull align 8 dereferenceable(32) %1, i32 noundef %215)
          to label %.preheader135 unwind label %226

.preheader135:                                    ; preds = %214
  %216 = load i32, ptr %193, align 4, !tbaa !21
  %217 = icmp sgt i32 %216, 0
  br i1 %217, label %.lr.ph141, label %._crit_edge142

.lr.ph141:                                        ; preds = %.preheader135
  %218 = getelementptr inbounds i8, ptr %2, i64 16
  br label %228

._crit_edge142:                                   ; preds = %245, %.preheader135
  %.lcssa = phi i32 [ %216, %.preheader135 ], [ %246, %245 ]
  %219 = load i8, ptr %3, align 8, !tbaa !5, !range !19, !noundef !20
  %220 = xor i8 %219, 1
  %221 = zext nneg i8 %220 to i32
  %222 = sub i32 %.lcssa, %221
  %223 = icmp sgt i32 %222, 0
  br i1 %223, label %.lr.ph145.preheader, label %.preheader

.lr.ph145.preheader:                              ; preds = %._crit_edge142
  %wide.trip.count213 = zext nneg i32 %222 to i64
  br label %.lr.ph145

224:                                              ; preds = %190
  %225 = landingpad { ptr, i32 }
          cleanup
  br label %285

226:                                              ; preds = %283, %._crit_edge148, %214, %212, %208, %200
  %227 = landingpad { ptr, i32 }
          cleanup
  br label %285

228:                                              ; preds = %.lr.ph141, %245
  %indvars.iv207 = phi i64 [ 0, %.lr.ph141 ], [ %indvars.iv.next208, %245 ]
  %229 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorI8SPoint2DSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %6, i64 noundef %indvars.iv207) #5
  %230 = load double, ptr %229, align 8, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %25) #5
  invoke void @_ZN5Eigen9DenseBaseINS_6MatrixIdLi2ELin1ELi0ELi2ELin1EEEE3colEl(ptr dead_on_unwind nonnull writable sret(%"class.Eigen::Block.99") align 8 %25, ptr noundef nonnull align 1 dereferenceable(1) %2, i64 noundef %indvars.iv207)
          to label %231 unwind label %249

231:                                              ; preds = %228
  %232 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN5Eigen15DenseCoeffsBaseINS_5BlockINS_6MatrixIdLi2ELin1ELi0ELi2ELin1EEELi2ELi1ELb1EEELi1EEclEl(ptr noundef nonnull align 1 dereferenceable(1) %25, i64 noundef 0)
          to label %233 unwind label %249

233:                                              ; preds = %231
  store double %230, ptr %232, align 8, !tbaa !22
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %25) #5
  %234 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorI8SPoint2DSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %6, i64 noundef %indvars.iv207) #5
  %235 = getelementptr inbounds i8, ptr %234, i64 8
  %236 = load double, ptr %235, align 8, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %26) #5
  invoke void @_ZN5Eigen9DenseBaseINS_6MatrixIdLi2ELin1ELi0ELi2ELin1EEEE3colEl(ptr dead_on_unwind nonnull writable sret(%"class.Eigen::Block.99") align 8 %26, ptr noundef nonnull align 1 dereferenceable(1) %2, i64 noundef %indvars.iv207)
          to label %237 unwind label %251

237:                                              ; preds = %233
  %238 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN5Eigen15DenseCoeffsBaseINS_5BlockINS_6MatrixIdLi2ELin1ELi0ELi2ELin1EEELi2ELi1ELb1EEELi1EEclEl(ptr noundef nonnull align 1 dereferenceable(1) %26, i64 noundef 1)
          to label %239 unwind label %251

239:                                              ; preds = %237
  store double %236, ptr %238, align 8, !tbaa !22
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %26) #5
  %240 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN5Eigen15DenseCoeffsBaseINS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEELi1EEclEl(ptr noundef nonnull align 1 dereferenceable(1) %218, i64 noundef %indvars.iv207)
          to label %241 unwind label %253

241:                                              ; preds = %239
  store double 0.000000e+00, ptr %240, align 8, !tbaa !22
  %242 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %8, i64 noundef %indvars.iv207) #5
  %243 = load i32, ptr %242, align 4, !tbaa !28
  %244 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN5Eigen15DenseCoeffsBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEELi1EEclEl(ptr noundef nonnull align 1 dereferenceable(1) %209, i64 noundef %indvars.iv207)
          to label %245 unwind label %253

245:                                              ; preds = %241
  store i32 %243, ptr %244, align 4, !tbaa !28
  %indvars.iv.next208 = add nuw nsw i64 %indvars.iv207, 1
  %246 = load i32, ptr %193, align 4, !tbaa !21
  %247 = sext i32 %246 to i64
  %248 = icmp slt i64 %indvars.iv.next208, %247
  br i1 %248, label %228, label %._crit_edge142, !llvm.loop !32

249:                                              ; preds = %231, %228
  %250 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %25) #5
  br label %285

251:                                              ; preds = %237, %233
  %252 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %26) #5
  br label %285

253:                                              ; preds = %241, %239
  %254 = landingpad { ptr, i32 }
          cleanup
  br label %285

.preheader:                                       ; preds = %267, %._crit_edge142
  %255 = icmp sgt i32 %205, 0
  br i1 %255, label %.lr.ph147.preheader, label %._crit_edge148

.lr.ph147.preheader:                              ; preds = %.preheader
  %wide.trip.count218 = zext nneg i32 %205 to i64
  br label %.lr.ph147

.lr.ph145:                                        ; preds = %.lr.ph145.preheader, %267
  %indvars.iv210 = phi i64 [ 0, %.lr.ph145.preheader ], [ %indvars.iv.next211, %267 ]
  %indvars.iv.next211 = add nuw nsw i64 %indvars.iv210, 1
  %256 = load i32, ptr %193, align 4, !tbaa !21
  %257 = trunc nuw nsw i64 %indvars.iv.next211 to i32
  %258 = srem i32 %257, %256
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %27) #5
  call void @llvm.lifetime.start.p0(i64 72, ptr nonnull %28) #5
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %29) #5
  %259 = zext nneg i32 %258 to i64
  invoke void @_ZN5Eigen9DenseBaseINS_6MatrixIdLi2ELin1ELi0ELi2ELin1EEEE3colEl(ptr dead_on_unwind nonnull writable sret(%"class.Eigen::Block.99") align 8 %29, ptr noundef nonnull align 1 dereferenceable(1) %2, i64 noundef %259)
          to label %260 unwind label %268

260:                                              ; preds = %.lr.ph145
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %30) #5
  invoke void @_ZN5Eigen9DenseBaseINS_6MatrixIdLi2ELin1ELi0ELi2ELin1EEEE3colEl(ptr dead_on_unwind nonnull writable sret(%"class.Eigen::Block.99") align 8 %30, ptr noundef nonnull align 1 dereferenceable(1) %2, i64 noundef %indvars.iv210)
          to label %261 unwind label %270

261:                                              ; preds = %260
  invoke void @_ZNK5Eigen10MatrixBaseINS_5BlockINS_6MatrixIdLi2ELin1ELi0ELi2ELin1EEELi2ELi1ELb1EEEEmiIS4_EEKNS_13CwiseBinaryOpINS_8internal20scalar_difference_opIdEEKS4_KT_EERKNS0_ISC_EE(ptr dead_on_unwind nonnull writable sret(%"class.Eigen::CwiseBinaryOp.113") align 8 %28, ptr noundef nonnull align 1 dereferenceable(1) %29, ptr noundef nonnull align 1 dereferenceable(1) %30)
          to label %262 unwind label %270

262:                                              ; preds = %261
  invoke void @_ZN5Eigen6MatrixIdLi2ELi1ELi0ELi2ELi1EEC2INS_13CwiseBinaryOpINS_8internal20scalar_difference_opIdEEKNS_5BlockINS0_IdLi2ELin1ELi0ELi2ELin1EEELi2ELi1ELb1EEESA_EEEERKNS_10MatrixBaseIT_EE(ptr noundef nonnull align 16 dereferenceable(16) %27, ptr noundef nonnull align 1 dereferenceable(1) %28)
          to label %263 unwind label %270

263:                                              ; preds = %262
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %30) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %29) #5
  call void @llvm.lifetime.end.p0(i64 72, ptr nonnull %28) #5
  %264 = invoke noundef double @_ZNK5Eigen10MatrixBaseINS_6MatrixIdLi2ELi1ELi0ELi2ELi1EEEE4normEv(ptr noundef nonnull align 1 dereferenceable(1) %27)
          to label %265 unwind label %273

265:                                              ; preds = %263
  %266 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN5Eigen15DenseCoeffsBaseINS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEELi1EEclEl(ptr noundef nonnull align 1 dereferenceable(1) %198, i64 noundef %indvars.iv210)
          to label %267 unwind label %273

267:                                              ; preds = %265
  store double %264, ptr %266, align 8, !tbaa !22
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %27) #5
  %exitcond214.not = icmp eq i64 %indvars.iv.next211, %wide.trip.count213
  br i1 %exitcond214.not, label %.preheader, label %.lr.ph145, !llvm.loop !33

268:                                              ; preds = %.lr.ph145
  %269 = landingpad { ptr, i32 }
          cleanup
  br label %272

270:                                              ; preds = %262, %261, %260
  %271 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %30) #5
  br label %272

272:                                              ; preds = %270, %268
  %.pn115 = phi { ptr, i32 } [ %271, %270 ], [ %269, %268 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %29) #5
  call void @llvm.lifetime.end.p0(i64 72, ptr nonnull %28) #5
  br label %275

273:                                              ; preds = %265, %263
  %274 = landingpad { ptr, i32 }
          cleanup
  br label %275

275:                                              ; preds = %273, %272
  %.pn117 = phi { ptr, i32 } [ %274, %273 ], [ %.pn115, %272 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %27) #5
  br label %285

._crit_edge148:                                   ; preds = %280, %.preheader
  %276 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZN4SVaraSERKS_(ptr noundef nonnull align 8 dereferenceable(32) %1, ptr noundef nonnull align 8 dereferenceable(32) %2)
          to label %283 unwind label %226

.lr.ph147:                                        ; preds = %.lr.ph147.preheader, %280
  %indvars.iv215 = phi i64 [ 0, %.lr.ph147.preheader ], [ %indvars.iv.next216, %280 ]
  %277 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIdSaIdEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %7, i64 noundef %indvars.iv215) #5
  %278 = load double, ptr %277, align 8, !tbaa !22
  %279 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN5Eigen15DenseCoeffsBaseINS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEELi1EEclEl(ptr noundef nonnull align 1 dereferenceable(1) %206, i64 noundef %indvars.iv215)
          to label %280 unwind label %281

280:                                              ; preds = %.lr.ph147
  store double %278, ptr %279, align 8, !tbaa !22
  %indvars.iv.next216 = add nuw nsw i64 %indvars.iv215, 1
  %exitcond219.not = icmp eq i64 %indvars.iv.next216, %wide.trip.count218
  br i1 %exitcond219.not, label %._crit_edge148, label %.lr.ph147, !llvm.loop !34

281:                                              ; preds = %.lr.ph147
  %282 = landingpad { ptr, i32 }
          cleanup
  br label %285

283:                                              ; preds = %._crit_edge148
  invoke void @_Z14initSolverVarsPK11SParametersPK6SCurveRK4SVarR11SSolverVarsb(ptr noundef %0, ptr noundef nonnull %3, ptr noundef nonnull align 8 dereferenceable(32) %1, ptr noundef nonnull align 8 dereferenceable(240) %4, i1 noundef zeroext true)
          to label %284 unwind label %226

284:                                              ; preds = %283
  call void @_ZNSt6vectorIiSaIiEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %8) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %8) #5
  call void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %7) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %7) #5
  call void @_ZNSt6vectorI8SPoint2DSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %6) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %6) #5
  ret void

285:                                              ; preds = %226, %275, %281, %253, %251, %249, %224, %189, %163
  %.pn128.pn.pn.pn = phi { ptr, i32 } [ %.pn128.pn.pn, %163 ], [ %225, %224 ], [ %.pn, %189 ], [ %.pn117, %275 ], [ %282, %281 ], [ %227, %226 ], [ %254, %253 ], [ %252, %251 ], [ %250, %249 ]
  call void @_ZNSt6vectorIiSaIiEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %8) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %8) #5
  call void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %7) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %7) #5
  call void @_ZNSt6vectorI8SPoint2DSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %6) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %6) #5
  resume { ptr, i32 } %.pn128.pn.pn.pn
}

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN5Eigen9DenseBaseINS_6MatrixIdLi2ELin1ELi0ELi2ELin1EEEE3colEl(ptr dead_on_unwind noalias writable sret(%"class.Eigen::Block.99") align 8, ptr noundef nonnull align 1 dereferenceable(1), i64 noundef) local_unnamed_addr #1 align 2

declare i32 @__gxx_personality_v0(...)

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZN5Eigen15DenseCoeffsBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEELi1EEclEl(ptr noundef nonnull align 1 dereferenceable(1), i64 noundef) local_unnamed_addr #1 align 2

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZNK5Eigen10MatrixBaseINS_5BlockINS_6MatrixIdLi2ELin1ELi0ELi2ELin1EEELi2ELi1ELb1EEEEmiIS4_EEKNS_13CwiseBinaryOpINS_8internal20scalar_difference_opIdEEKS4_KT_EERKNS0_ISC_EE(ptr dead_on_unwind noalias writable sret(%"class.Eigen::CwiseBinaryOp.113") align 8, ptr noundef nonnull align 1 dereferenceable(1), ptr noundef nonnull align 1 dereferenceable(1)) local_unnamed_addr #1 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN5Eigen6MatrixIdLi2ELi1ELi0ELi2ELi1EEC2INS_13CwiseBinaryOpINS_8internal20scalar_difference_opIdEEKNS_5BlockINS0_IdLi2ELin1ELi0ELi2ELin1EEELi2ELi1ELb1EEESA_EEEERKNS_10MatrixBaseIT_EE(ptr noundef nonnull align 16 dereferenceable(16), ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #1 align 2

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

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

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

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

declare void @_Z6resizeR4SVari(ptr noundef nonnull align 8 dereferenceable(32), i32 noundef) local_unnamed_addr #4

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(32) ptr @_ZN4SVaraSERKS_(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #1 align 2

declare void @_Z14initSolverVarsPK11SParametersPK6SCurveRK4SVarR11SSolverVarsb(ptr noundef, ptr noundef, ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(240), i1 noundef zeroext) local_unnamed_addr #4

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

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !7, i64 0}
!6 = !{!"_ZTS6SCurve", !7, i64 0, !10, i64 4, !11, i64 8, !11, i64 24, !16, i64 40}
!7 = !{!"bool", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!"int", !8, i64 0}
!11 = !{!"_ZTSN5Eigen6MatrixIdLin1ELi1ELi0ELin1ELi1EEE", !12, i64 0}
!12 = !{!"_ZTSN5Eigen15PlainObjectBaseINS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEEEE", !13, i64 0}
!13 = !{!"_ZTSN5Eigen12DenseStorageIdLin1ELin1ELi1ELi0EEE", !14, i64 0, !15, i64 8}
!14 = !{!"any pointer", !8, i64 0}
!15 = !{!"long", !8, i64 0}
!16 = !{!"_ZTSN5Eigen6MatrixIiLin1ELi1ELi0ELin1ELi1EEE", !17, i64 0}
!17 = !{!"_ZTSN5Eigen15PlainObjectBaseINS_6MatrixIiLin1ELi1ELi0ELin1ELi1EEEEE", !18, i64 0}
!18 = !{!"_ZTSN5Eigen12DenseStorageIiLin1ELin1ELi1ELi0EEE", !14, i64 0, !15, i64 8}
!19 = !{i8 0, i8 2}
!20 = !{}
!21 = !{!6, !10, i64 4}
!22 = !{!23, !23, i64 0}
!23 = !{!"double", !8, i64 0}
!24 = !{!25, !23, i64 128}
!25 = !{!"_ZTS11SParameters", !23, i64 0, !23, i64 8, !23, i64 16, !23, i64 24, !26, i64 32, !27, i64 48, !10, i64 80, !23, i64 88, !23, i64 96, !23, i64 104, !23, i64 112, !10, i64 120, !23, i64 128}
!26 = !{!"_ZTSN9_BlueTail6_Image6SImageIdLi1EEE", !10, i64 0, !10, i64 4, !14, i64 8}
!27 = !{!"_ZTS7SRegion", !23, i64 0, !23, i64 8, !23, i64 16, !23, i64 24}
!28 = !{!10, !10, i64 0}
!29 = distinct !{!29, !30, !31}
!30 = !{!"llvm.loop.mustprogress"}
!31 = !{!"llvm.loop.peeled.count", i32 1}
!32 = distinct !{!32, !30}
!33 = distinct !{!33, !30}
!34 = distinct !{!34, !30}


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