; LLVM IR from bldeng/AASolver :: AndersonOpt/external/OpenMesh/Core/Mesh (PolyConnectivity)

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

%"struct.OpenMesh::FaceHandle" = type { %"class.OpenMesh::BaseHandle" }
%"class.OpenMesh::BaseHandle" = type { i32 }
%"struct.OpenMesh::VertexHandle" = type { %"class.OpenMesh::BaseHandle" }
%"struct.OpenMesh::HalfedgeHandle" = type { %"class.OpenMesh::BaseHandle" }
%"struct.std::pair" = type { %"struct.OpenMesh::HalfedgeHandle", %"struct.OpenMesh::HalfedgeHandle" }
%"class.OpenMesh::PolyConnectivity" = type { %"class.OpenMesh::ArrayKernel", %"class.std::vector.20", %"class.std::vector.25" }
%"class.OpenMesh::ArrayKernel" = type { %"class.OpenMesh::BaseKernel", %"class.std::vector.0", %"class.std::vector.5", %"class.std::vector.10", %"struct.OpenMesh::VPropHandleT", %"struct.OpenMesh::HPropHandleT", %"struct.OpenMesh::EPropHandleT", %"struct.OpenMesh::FPropHandleT", i32, i32, i32, i32, %"class.std::vector.15", %"class.std::vector.15", %"class.std::vector.15", %"class.std::vector.15" }
%"class.OpenMesh::BaseKernel" = type { ptr, %"class.OpenMesh::PropertyContainer", %"class.OpenMesh::PropertyContainer", %"class.OpenMesh::PropertyContainer", %"class.OpenMesh::PropertyContainer", %"class.OpenMesh::PropertyContainer" }
%"class.OpenMesh::PropertyContainer" = type { ptr, %"class.std::vector" }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<OpenMesh::BaseProperty *, std::allocator<OpenMesh::BaseProperty *>>::_Vector_impl" }
%"struct.std::_Vector_base<OpenMesh::BaseProperty *, std::allocator<OpenMesh::BaseProperty *>>::_Vector_impl" = type { %"struct.std::_Vector_base<OpenMesh::BaseProperty *, std::allocator<OpenMesh::BaseProperty *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<OpenMesh::BaseProperty *, std::allocator<OpenMesh::BaseProperty *>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.0" = type { %"struct.std::_Vector_base.1" }
%"struct.std::_Vector_base.1" = type { %"struct.std::_Vector_base<OpenMesh::ArrayItems::Vertex, std::allocator<OpenMesh::ArrayItems::Vertex>>::_Vector_impl" }
%"struct.std::_Vector_base<OpenMesh::ArrayItems::Vertex, std::allocator<OpenMesh::ArrayItems::Vertex>>::_Vector_impl" = type { %"struct.std::_Vector_base<OpenMesh::ArrayItems::Vertex, std::allocator<OpenMesh::ArrayItems::Vertex>>::_Vector_impl_data" }
%"struct.std::_Vector_base<OpenMesh::ArrayItems::Vertex, std::allocator<OpenMesh::ArrayItems::Vertex>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.5" = type { %"struct.std::_Vector_base.6" }
%"struct.std::_Vector_base.6" = type { %"struct.std::_Vector_base<OpenMesh::ArrayItems::Edge, std::allocator<OpenMesh::ArrayItems::Edge>>::_Vector_impl" }
%"struct.std::_Vector_base<OpenMesh::ArrayItems::Edge, std::allocator<OpenMesh::ArrayItems::Edge>>::_Vector_impl" = type { %"struct.std::_Vector_base<OpenMesh::ArrayItems::Edge, std::allocator<OpenMesh::ArrayItems::Edge>>::_Vector_impl_data" }
%"struct.std::_Vector_base<OpenMesh::ArrayItems::Edge, std::allocator<OpenMesh::ArrayItems::Edge>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.10" = type { %"struct.std::_Vector_base.11" }
%"struct.std::_Vector_base.11" = type { %"struct.std::_Vector_base<OpenMesh::ArrayItems::Face, std::allocator<OpenMesh::ArrayItems::Face>>::_Vector_impl" }
%"struct.std::_Vector_base<OpenMesh::ArrayItems::Face, std::allocator<OpenMesh::ArrayItems::Face>>::_Vector_impl" = type { %"struct.std::_Vector_base<OpenMesh::ArrayItems::Face, std::allocator<OpenMesh::ArrayItems::Face>>::_Vector_impl_data" }
%"struct.std::_Vector_base<OpenMesh::ArrayItems::Face, std::allocator<OpenMesh::ArrayItems::Face>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.OpenMesh::VPropHandleT" = type { %"struct.OpenMesh::BasePropHandleT" }
%"struct.OpenMesh::BasePropHandleT" = type { %"class.OpenMesh::BaseHandle" }
%"struct.OpenMesh::HPropHandleT" = type { %"struct.OpenMesh::BasePropHandleT" }
%"struct.OpenMesh::EPropHandleT" = type { %"struct.OpenMesh::BasePropHandleT" }
%"struct.OpenMesh::FPropHandleT" = type { %"struct.OpenMesh::BasePropHandleT" }
%"class.std::vector.15" = type { %"struct.std::_Vector_base.16" }
%"struct.std::_Vector_base.16" = type { %"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl" }
%"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl" = type { %"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl_data" }
%"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.20" = type { %"struct.std::_Vector_base.21" }
%"struct.std::_Vector_base.21" = type { %"struct.std::_Vector_base<OpenMesh::PolyConnectivity::AddFaceEdgeInfo, std::allocator<OpenMesh::PolyConnectivity::AddFaceEdgeInfo>>::_Vector_impl" }
%"struct.std::_Vector_base<OpenMesh::PolyConnectivity::AddFaceEdgeInfo, std::allocator<OpenMesh::PolyConnectivity::AddFaceEdgeInfo>>::_Vector_impl" = type { %"struct.std::_Vector_base<OpenMesh::PolyConnectivity::AddFaceEdgeInfo, std::allocator<OpenMesh::PolyConnectivity::AddFaceEdgeInfo>>::_Vector_impl_data" }
%"struct.std::_Vector_base<OpenMesh::PolyConnectivity::AddFaceEdgeInfo, std::allocator<OpenMesh::PolyConnectivity::AddFaceEdgeInfo>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.25" = type { %"struct.std::_Vector_base.26" }
%"struct.std::_Vector_base.26" = type { %"struct.std::_Vector_base<std::pair<OpenMesh::HalfedgeHandle, OpenMesh::HalfedgeHandle>, std::allocator<std::pair<OpenMesh::HalfedgeHandle, OpenMesh::HalfedgeHandle>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::pair<OpenMesh::HalfedgeHandle, OpenMesh::HalfedgeHandle>, std::allocator<std::pair<OpenMesh::HalfedgeHandle, OpenMesh::HalfedgeHandle>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::pair<OpenMesh::HalfedgeHandle, OpenMesh::HalfedgeHandle>, std::allocator<std::pair<OpenMesh::HalfedgeHandle, OpenMesh::HalfedgeHandle>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::pair<OpenMesh::HalfedgeHandle, OpenMesh::HalfedgeHandle>, std::allocator<std::pair<OpenMesh::HalfedgeHandle, OpenMesh::HalfedgeHandle>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.OpenMesh::PolyConnectivity::AddFaceEdgeInfo" = type <{ %"struct.OpenMesh::HalfedgeHandle", i8, i8, [2 x i8] }>

@_ZN8OpenMesh16PolyConnectivity17InvalidFaceHandleE = external dso_local global %"struct.OpenMesh::FaceHandle", align 4
@.str.4 = external hidden unnamed_addr constant [109 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [6 x i8], align 1
@__PRETTY_FUNCTION__._ZN8OpenMesh16PolyConnectivity8add_faceEPKNS_12VertexHandleEm = external hidden unnamed_addr constant [96 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [35 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [46 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [22 x i8], align 1

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN8OpenMesh12VertexHandleC2Ei(ptr noundef nonnull align 4 dereferenceable(4), i32 noundef) unnamed_addr #0 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN8OpenMesh14HalfedgeHandleC2Ei(ptr noundef nonnull align 4 dereferenceable(4), i32 noundef) unnamed_addr #1 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK8OpenMesh10BaseHandle8is_validEv(ptr noundef nonnull align 4 dereferenceable(4)) #1 align 2

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK8OpenMesh10BaseHandleeqERKS0_(ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4)) #1 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK8OpenMesh16PolyConnectivity11is_boundaryENS_12VertexHandleE(ptr noundef nonnull align 8 dereferenceable(416), i32) #0 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK8OpenMesh16PolyConnectivity11is_boundaryENS_14HalfedgeHandleE(ptr noundef nonnull align 8 dereferenceable(416), i32) #0 align 2

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

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

; Function Attrs: mustprogress uwtable
define dso_local i32 @_ZN8OpenMesh16PolyConnectivity8add_faceEPKNS_12VertexHandleEm(ptr noundef nonnull align 8 dereferenceable(416) %0, ptr noundef %1, i64 noundef %2) #0 align 2 {
  %4 = alloca %"struct.OpenMesh::FaceHandle", align 4
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca i64, align 8
  %8 = alloca %"struct.OpenMesh::VertexHandle", align 4
  %9 = alloca i64, align 8
  %10 = alloca i64, align 8
  %11 = alloca i64, align 8
  %12 = alloca %"struct.OpenMesh::HalfedgeHandle", align 4
  %13 = alloca %"struct.OpenMesh::HalfedgeHandle", align 4
  %14 = alloca %"struct.OpenMesh::HalfedgeHandle", align 4
  %15 = alloca %"struct.OpenMesh::HalfedgeHandle", align 4
  %16 = alloca %"struct.OpenMesh::HalfedgeHandle", align 4
  %17 = alloca %"struct.OpenMesh::HalfedgeHandle", align 4
  %18 = alloca %"struct.OpenMesh::HalfedgeHandle", align 4
  %19 = alloca %"struct.OpenMesh::HalfedgeHandle", align 4
  %20 = alloca i64, align 8
  %21 = alloca %"struct.OpenMesh::VertexHandle", align 4
  %22 = alloca i32, align 4
  %23 = alloca %"struct.OpenMesh::HalfedgeHandle", align 4
  %24 = alloca %"struct.OpenMesh::VertexHandle", align 4
  %25 = alloca %"struct.OpenMesh::VertexHandle", align 4
  %26 = alloca %"struct.OpenMesh::HalfedgeHandle", align 4
  %27 = alloca %"struct.OpenMesh::HalfedgeHandle", align 4
  %28 = alloca %"struct.OpenMesh::HalfedgeHandle", align 4
  %29 = alloca %"struct.OpenMesh::HalfedgeHandle", align 4
  %30 = alloca %"struct.OpenMesh::HalfedgeHandle", align 4
  %31 = alloca %"struct.OpenMesh::HalfedgeHandle", align 4
  %32 = alloca %"struct.OpenMesh::HalfedgeHandle", align 4
  %33 = alloca %"struct.OpenMesh::HalfedgeHandle", align 4
  %34 = alloca %"struct.OpenMesh::HalfedgeHandle", align 4
  %35 = alloca %"struct.OpenMesh::HalfedgeHandle", align 4
  %36 = alloca %"struct.OpenMesh::HalfedgeHandle", align 4
  %37 = alloca %"struct.OpenMesh::HalfedgeHandle", align 4
  %38 = alloca %"struct.OpenMesh::HalfedgeHandle", align 4
  %39 = alloca %"struct.OpenMesh::HalfedgeHandle", align 4
  %40 = alloca %"struct.OpenMesh::HalfedgeHandle", align 4
  %41 = alloca %"struct.OpenMesh::HalfedgeHandle", align 4
  %42 = alloca %"struct.OpenMesh::HalfedgeHandle", align 4
  %43 = alloca %"struct.OpenMesh::HalfedgeHandle", align 4
  %44 = alloca %"struct.OpenMesh::HalfedgeHandle", align 4
  %45 = alloca %"struct.std::pair", align 4
  %46 = alloca %"struct.std::pair", align 4
  %47 = alloca %"struct.std::pair", align 4
  %48 = alloca %"struct.OpenMesh::HalfedgeHandle", align 4
  %49 = alloca %"struct.OpenMesh::VertexHandle", align 4
  %50 = alloca %"struct.OpenMesh::VertexHandle", align 4
  %51 = alloca %"struct.OpenMesh::FaceHandle", align 4
  %52 = alloca %"struct.OpenMesh::HalfedgeHandle", align 4
  %53 = alloca i64, align 8
  %54 = alloca %"struct.OpenMesh::HalfedgeHandle", align 4
  %55 = alloca %"struct.OpenMesh::HalfedgeHandle", align 4
  %56 = alloca %"struct.OpenMesh::HalfedgeHandle", align 4
  %57 = alloca %"struct.OpenMesh::HalfedgeHandle", align 4
  %58 = alloca %"struct.OpenMesh::HalfedgeHandle", align 4
  %59 = alloca %"struct.OpenMesh::HalfedgeHandle", align 4
  %60 = alloca %"struct.std::pair", align 4
  %61 = alloca %"struct.OpenMesh::VertexHandle", align 4
  %62 = alloca %"struct.OpenMesh::HalfedgeHandle", align 4
  %63 = alloca %"struct.OpenMesh::HalfedgeHandle", align 4
  %64 = alloca %"struct.OpenMesh::HalfedgeHandle", align 4
  %65 = alloca %"struct.std::pair", align 4
  %66 = alloca %"struct.OpenMesh::VertexHandle", align 4
  %67 = alloca %"struct.OpenMesh::HalfedgeHandle", align 4
  %68 = alloca %"struct.OpenMesh::HalfedgeHandle", align 4
  %69 = alloca %"struct.OpenMesh::VertexHandle", align 4
  %70 = alloca %"struct.OpenMesh::VertexHandle", align 4
  %71 = alloca %"struct.OpenMesh::HalfedgeHandle", align 4
  %72 = alloca %"struct.std::pair", align 4
  %73 = alloca %"struct.OpenMesh::HalfedgeHandle", align 4
  %74 = alloca %"struct.OpenMesh::VertexHandle", align 4
  %75 = alloca %"struct.OpenMesh::HalfedgeHandle", align 4
  %76 = alloca %"struct.OpenMesh::HalfedgeHandle", align 4
  %77 = alloca %"struct.std::pair", align 4
  %78 = alloca %"struct.std::pair", align 4
  %79 = alloca %"struct.std::pair", align 4
  %80 = alloca %"struct.OpenMesh::HalfedgeHandle", align 4
  %81 = alloca %"struct.OpenMesh::VertexHandle", align 4
  %82 = alloca %"struct.OpenMesh::HalfedgeHandle", align 4
  %83 = alloca %"struct.OpenMesh::FaceHandle", align 4
  %84 = alloca %"struct.OpenMesh::HalfedgeHandle", align 4
  %85 = alloca %"struct.OpenMesh::HalfedgeHandle", align 4
  %86 = alloca %"struct.OpenMesh::VertexHandle", align 4
  store ptr %0, ptr %5, align 8, !tbaa !5
  store ptr %1, ptr %6, align 8, !tbaa !5
  store i64 %2, ptr %7, align 8, !tbaa !9
  %87 = load ptr, ptr %5, align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #7
  call void @_ZN8OpenMesh12VertexHandleC2Ei(ptr noundef nonnull align 4 dereferenceable(4) %8, i32 noundef -1)
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #7
  %88 = load i64, ptr %7, align 8, !tbaa !9
  store i64 %88, ptr %11, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #7
  call void @_ZN8OpenMesh14HalfedgeHandleC2Ei(ptr noundef nonnull align 4 dereferenceable(4) %12, i32 noundef -1)
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #7
  call void @_ZN8OpenMesh14HalfedgeHandleC2Ei(ptr noundef nonnull align 4 dereferenceable(4) %13, i32 noundef -1)
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #7
  call void @_ZN8OpenMesh14HalfedgeHandleC2Ei(ptr noundef nonnull align 4 dereferenceable(4) %14, i32 noundef -1)
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #7
  call void @_ZN8OpenMesh14HalfedgeHandleC2Ei(ptr noundef nonnull align 4 dereferenceable(4) %15, i32 noundef -1)
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #7
  call void @_ZN8OpenMesh14HalfedgeHandleC2Ei(ptr noundef nonnull align 4 dereferenceable(4) %16, i32 noundef -1)
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #7
  call void @_ZN8OpenMesh14HalfedgeHandleC2Ei(ptr noundef nonnull align 4 dereferenceable(4) %17, i32 noundef -1)
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #7
  call void @_ZN8OpenMesh14HalfedgeHandleC2Ei(ptr noundef nonnull align 4 dereferenceable(4) %18, i32 noundef -1)
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #7
  call void @_ZN8OpenMesh14HalfedgeHandleC2Ei(ptr noundef nonnull align 4 dereferenceable(4) %19, i32 noundef -1)
  %89 = getelementptr inbounds %"class.OpenMesh::PolyConnectivity", ptr %87, i32 0, i32 1
  %90 = call noundef i64 @_ZNKSt6vectorIN8OpenMesh16PolyConnectivity15AddFaceEdgeInfoESaIS2_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %89) #7
  %91 = load i64, ptr %11, align 8, !tbaa !9
  %92 = icmp ult i64 %90, %91
  br i1 %92, label %93, label %99

93:                                               ; preds = %3
  %94 = getelementptr inbounds %"class.OpenMesh::PolyConnectivity", ptr %87, i32 0, i32 1
  %95 = load i64, ptr %11, align 8, !tbaa !9
  call void @_ZNSt6vectorIN8OpenMesh16PolyConnectivity15AddFaceEdgeInfoESaIS2_EE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24) %94, i64 noundef %95)
  %96 = getelementptr inbounds %"class.OpenMesh::PolyConnectivity", ptr %87, i32 0, i32 2
  %97 = load i64, ptr %11, align 8, !tbaa !9
  %98 = mul i64 6, %97
  call void @_ZNSt6vectorISt4pairIN8OpenMesh14HalfedgeHandleES2_ESaIS3_EE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24) %96, i64 noundef %98)
  br label %99

99:                                               ; preds = %93, %3
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #7
  store i64 0, ptr %20, align 8, !tbaa !9
  %100 = load i64, ptr %11, align 8, !tbaa !9
  %101 = icmp ugt i64 %100, 2
  br i1 %101, label %102, label %103

102:                                              ; preds = %99
  br label %105

103:                                              ; preds = %99
  call void @__assert_fail(ptr noundef @.str.5, ptr noundef @.str.4, i32 noundef 142, ptr noundef @__PRETTY_FUNCTION__._ZN8OpenMesh16PolyConnectivity8add_faceEPKNS_12VertexHandleEm) #8
  unreachable

104:                                              ; No predecessors!
  br label %105

105:                                              ; preds = %104, %102
  store i64 0, ptr %9, align 8, !tbaa !9
  store i64 1, ptr %10, align 8, !tbaa !9
  br label %106

106:                                              ; preds = %175, %105
  %107 = load i64, ptr %9, align 8, !tbaa !9
  %108 = load i64, ptr %11, align 8, !tbaa !9
  %109 = icmp ult i64 %107, %108
  br i1 %109, label %110, label %183

110:                                              ; preds = %106
  %111 = load ptr, ptr %6, align 8, !tbaa !5
  %112 = load i64, ptr %9, align 8, !tbaa !9
  %113 = getelementptr inbounds %"struct.OpenMesh::VertexHandle", ptr %111, i64 %112
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %21, ptr align 4 %113, i64 4, i1 false)
  %114 = getelementptr inbounds %"struct.OpenMesh::VertexHandle", ptr %21, i32 0, i32 0
  %115 = getelementptr inbounds %"class.OpenMesh::BaseHandle", ptr %114, i32 0, i32 0
  %116 = load i32, ptr %115, align 4
  %117 = call noundef zeroext i1 @_ZNK8OpenMesh16PolyConnectivity11is_boundaryENS_12VertexHandleE(ptr noundef nonnull align 8 dereferenceable(416) %87, i32 %116)
  br i1 %117, label %121, label %118

118:                                              ; preds = %110
  %119 = call noundef nonnull align 8 dereferenceable(224) ptr @_Z5omerrv()
  %120 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %119, ptr noundef @.str.6)
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %4, ptr align 4 @_ZN8OpenMesh16PolyConnectivity17InvalidFaceHandleE, i64 4, i1 false)
  store i32 1, ptr %22, align 4
  br label %668

121:                                              ; preds = %110
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #7
  %122 = load ptr, ptr %6, align 8, !tbaa !5
  %123 = load i64, ptr %9, align 8, !tbaa !9
  %124 = getelementptr inbounds %"struct.OpenMesh::VertexHandle", ptr %122, i64 %123
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %24, ptr align 4 %124, i64 4, i1 false)
  %125 = load ptr, ptr %6, align 8, !tbaa !5
  %126 = load i64, ptr %10, align 8, !tbaa !9
  %127 = getelementptr inbounds %"struct.OpenMesh::VertexHandle", ptr %125, i64 %126
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %25, ptr align 4 %127, i64 4, i1 false)
  %128 = getelementptr inbounds %"struct.OpenMesh::VertexHandle", ptr %24, i32 0, i32 0
  %129 = getelementptr inbounds %"class.OpenMesh::BaseHandle", ptr %128, i32 0, i32 0
  %130 = load i32, ptr %129, align 4
  %131 = getelementptr inbounds %"struct.OpenMesh::VertexHandle", ptr %25, i32 0, i32 0
  %132 = getelementptr inbounds %"class.OpenMesh::BaseHandle", ptr %131, i32 0, i32 0
  %133 = load i32, ptr %132, align 4
  %134 = call i32 @_ZNK8OpenMesh16PolyConnectivity13find_halfedgeENS_12VertexHandleES1_(ptr noundef nonnull align 8 dereferenceable(416) %87, i32 %130, i32 %133)
  %135 = getelementptr inbounds %"struct.OpenMesh::HalfedgeHandle", ptr %23, i32 0, i32 0
  %136 = getelementptr inbounds %"class.OpenMesh::BaseHandle", ptr %135, i32 0, i32 0
  store i32 %134, ptr %136, align 4
  %137 = getelementptr inbounds %"class.OpenMesh::PolyConnectivity", ptr %87, i32 0, i32 1
  %138 = load i64, ptr %9, align 8, !tbaa !9
  %139 = call noundef nonnull align 4 dereferenceable(6) ptr @_ZNSt6vectorIN8OpenMesh16PolyConnectivity15AddFaceEdgeInfoESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %137, i64 noundef %138) #7
  %140 = getelementptr inbounds %"struct.OpenMesh::PolyConnectivity::AddFaceEdgeInfo", ptr %139, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %140, ptr align 4 %23, i64 4, i1 false)
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #7
  %141 = getelementptr inbounds %"class.OpenMesh::PolyConnectivity", ptr %87, i32 0, i32 1
  %142 = load i64, ptr %9, align 8, !tbaa !9
  %143 = call noundef nonnull align 4 dereferenceable(6) ptr @_ZNSt6vectorIN8OpenMesh16PolyConnectivity15AddFaceEdgeInfoESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %141, i64 noundef %142) #7
  %144 = getelementptr inbounds %"struct.OpenMesh::PolyConnectivity::AddFaceEdgeInfo", ptr %143, i32 0, i32 0
  %145 = call noundef zeroext i1 @_ZNK8OpenMesh10BaseHandle8is_validEv(ptr noundef nonnull align 4 dereferenceable(4) %144)
  %146 = xor i1 %145, true
  %147 = getelementptr inbounds %"class.OpenMesh::PolyConnectivity", ptr %87, i32 0, i32 1
  %148 = load i64, ptr %9, align 8, !tbaa !9
  %149 = call noundef nonnull align 4 dereferenceable(6) ptr @_ZNSt6vectorIN8OpenMesh16PolyConnectivity15AddFaceEdgeInfoESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %147, i64 noundef %148) #7
  %150 = getelementptr inbounds %"struct.OpenMesh::PolyConnectivity::AddFaceEdgeInfo", ptr %149, i32 0, i32 1
  %151 = zext i1 %146 to i8
  store i8 %151, ptr %150, align 4, !tbaa !11
  %152 = getelementptr inbounds %"class.OpenMesh::PolyConnectivity", ptr %87, i32 0, i32 1
  %153 = load i64, ptr %9, align 8, !tbaa !9
  %154 = call noundef nonnull align 4 dereferenceable(6) ptr @_ZNSt6vectorIN8OpenMesh16PolyConnectivity15AddFaceEdgeInfoESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %152, i64 noundef %153) #7
  %155 = getelementptr inbounds %"struct.OpenMesh::PolyConnectivity::AddFaceEdgeInfo", ptr %154, i32 0, i32 2
  store i8 0, ptr %155, align 1, !tbaa !17
  %156 = getelementptr inbounds %"class.OpenMesh::PolyConnectivity", ptr %87, i32 0, i32 1
  %157 = load i64, ptr %9, align 8, !tbaa !9
  %158 = call noundef nonnull align 4 dereferenceable(6) ptr @_ZNSt6vectorIN8OpenMesh16PolyConnectivity15AddFaceEdgeInfoESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %156, i64 noundef %157) #7
  %159 = getelementptr inbounds %"struct.OpenMesh::PolyConnectivity::AddFaceEdgeInfo", ptr %158, i32 0, i32 1
  %160 = load i8, ptr %159, align 4, !tbaa !11, !range !18, !noundef !19
  %161 = trunc i8 %160 to i1
  br i1 %161, label %174, label %162

162:                                              ; preds = %121
  %163 = getelementptr inbounds %"class.OpenMesh::PolyConnectivity", ptr %87, i32 0, i32 1
  %164 = load i64, ptr %9, align 8, !tbaa !9
  %165 = call noundef nonnull align 4 dereferenceable(6) ptr @_ZNSt6vectorIN8OpenMesh16PolyConnectivity15AddFaceEdgeInfoESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %163, i64 noundef %164) #7
  %166 = getelementptr inbounds %"struct.OpenMesh::PolyConnectivity::AddFaceEdgeInfo", ptr %165, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %26, ptr align 4 %166, i64 4, i1 false)
  %167 = getelementptr inbounds %"struct.OpenMesh::HalfedgeHandle", ptr %26, i32 0, i32 0
  %168 = getelementptr inbounds %"class.OpenMesh::BaseHandle", ptr %167, i32 0, i32 0
  %169 = load i32, ptr %168, align 4
  %170 = call noundef zeroext i1 @_ZNK8OpenMesh16PolyConnectivity11is_boundaryENS_14HalfedgeHandleE(ptr noundef nonnull align 8 dereferenceable(416) %87, i32 %169)
  br i1 %170, label %174, label %171

171:                                              ; preds = %162
  %172 = call noundef nonnull align 8 dereferenceable(224) ptr @_Z5omerrv()
  %173 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %172, ptr noundef @.str.7)
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %4, ptr align 4 @_ZN8OpenMesh16PolyConnectivity17InvalidFaceHandleE, i64 4, i1 false)
  store i32 1, ptr %22, align 4
  br label %668

174:                                              ; preds = %162, %121
  br label %175

175:                                              ; preds = %174
  %176 = load i64, ptr %9, align 8, !tbaa !9
  %177 = add i64 %176, 1
  store i64 %177, ptr %9, align 8, !tbaa !9
  %178 = load i64, ptr %10, align 8, !tbaa !9
  %179 = add i64 %178, 1
  store i64 %179, ptr %10, align 8, !tbaa !9
  %180 = load i64, ptr %11, align 8, !tbaa !9
  %181 = load i64, ptr %10, align 8, !tbaa !9
  %182 = urem i64 %181, %180
  store i64 %182, ptr %10, align 8, !tbaa !9
  br label %106, !llvm.loop !20

183:                                              ; preds = %106
  store i64 0, ptr %9, align 8, !tbaa !9
  store i64 1, ptr %10, align 8, !tbaa !9
  br label %184

184:                                              ; preds = %340, %183
  %185 = load i64, ptr %9, align 8, !tbaa !9
  %186 = load i64, ptr %11, align 8, !tbaa !9
  %187 = icmp ult i64 %185, %186
  br i1 %187, label %188, label %348

188:                                              ; preds = %184
  %189 = getelementptr inbounds %"class.OpenMesh::PolyConnectivity", ptr %87, i32 0, i32 1
  %190 = load i64, ptr %9, align 8, !tbaa !9
  %191 = call noundef nonnull align 4 dereferenceable(6) ptr @_ZNSt6vectorIN8OpenMesh16PolyConnectivity15AddFaceEdgeInfoESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %189, i64 noundef %190) #7
  %192 = getelementptr inbounds %"struct.OpenMesh::PolyConnectivity::AddFaceEdgeInfo", ptr %191, i32 0, i32 1
  %193 = load i8, ptr %192, align 4, !tbaa !11, !range !18, !noundef !19
  %194 = trunc i8 %193 to i1
  br i1 %194, label %339, label %195

195:                                              ; preds = %188
  %196 = getelementptr inbounds %"class.OpenMesh::PolyConnectivity", ptr %87, i32 0, i32 1
  %197 = load i64, ptr %10, align 8, !tbaa !9
  %198 = call noundef nonnull align 4 dereferenceable(6) ptr @_ZNSt6vectorIN8OpenMesh16PolyConnectivity15AddFaceEdgeInfoESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %196, i64 noundef %197) #7
  %199 = getelementptr inbounds %"struct.OpenMesh::PolyConnectivity::AddFaceEdgeInfo", ptr %198, i32 0, i32 1
  %200 = load i8, ptr %199, align 4, !tbaa !11, !range !18, !noundef !19
  %201 = trunc i8 %200 to i1
  br i1 %201, label %339, label %202

202:                                              ; preds = %195
  %203 = getelementptr inbounds %"class.OpenMesh::PolyConnectivity", ptr %87, i32 0, i32 1
  %204 = load i64, ptr %9, align 8, !tbaa !9
  %205 = call noundef nonnull align 4 dereferenceable(6) ptr @_ZNSt6vectorIN8OpenMesh16PolyConnectivity15AddFaceEdgeInfoESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %203, i64 noundef %204) #7
  %206 = getelementptr inbounds %"struct.OpenMesh::PolyConnectivity::AddFaceEdgeInfo", ptr %205, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %13, ptr align 4 %206, i64 4, i1 false)
  %207 = getelementptr inbounds %"class.OpenMesh::PolyConnectivity", ptr %87, i32 0, i32 1
  %208 = load i64, ptr %10, align 8, !tbaa !9
  %209 = call noundef nonnull align 4 dereferenceable(6) ptr @_ZNSt6vectorIN8OpenMesh16PolyConnectivity15AddFaceEdgeInfoESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %207, i64 noundef %208) #7
  %210 = getelementptr inbounds %"struct.OpenMesh::PolyConnectivity::AddFaceEdgeInfo", ptr %209, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %12, ptr align 4 %210, i64 4, i1 false)
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #7
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %28, ptr align 4 %13, i64 4, i1 false)
  %211 = getelementptr inbounds %"struct.OpenMesh::HalfedgeHandle", ptr %28, i32 0, i32 0
  %212 = getelementptr inbounds %"class.OpenMesh::BaseHandle", ptr %211, i32 0, i32 0
  %213 = load i32, ptr %212, align 4
  %214 = call i32 @_ZNK8OpenMesh11ArrayKernel20next_halfedge_handleENS_14HalfedgeHandleE(ptr noundef nonnull align 8 dereferenceable(368) %87, i32 %213)
  %215 = getelementptr inbounds %"struct.OpenMesh::HalfedgeHandle", ptr %27, i32 0, i32 0
  %216 = getelementptr inbounds %"class.OpenMesh::BaseHandle", ptr %215, i32 0, i32 0
  store i32 %214, ptr %216, align 4
  %217 = call noundef zeroext i1 @_ZNK8OpenMesh10BaseHandleneERKS0_(ptr noundef nonnull align 4 dereferenceable(4) %27, ptr noundef nonnull align 4 dereferenceable(4) %12)
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #7
  br i1 %217, label %218, label %338

218:                                              ; preds = %202
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #7
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %30, ptr align 4 %12, i64 4, i1 false)
  %219 = getelementptr inbounds %"struct.OpenMesh::HalfedgeHandle", ptr %30, i32 0, i32 0
  %220 = getelementptr inbounds %"class.OpenMesh::BaseHandle", ptr %219, i32 0, i32 0
  %221 = load i32, ptr %220, align 4
  %222 = call i32 @_ZNK8OpenMesh11ArrayKernel24opposite_halfedge_handleENS_14HalfedgeHandleE(ptr noundef nonnull align 8 dereferenceable(368) %87, i32 %221)
  %223 = getelementptr inbounds %"struct.OpenMesh::HalfedgeHandle", ptr %29, i32 0, i32 0
  %224 = getelementptr inbounds %"class.OpenMesh::BaseHandle", ptr %223, i32 0, i32 0
  store i32 %222, ptr %224, align 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %15, ptr align 4 %29, i64 4, i1 false)
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #7
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %32, ptr align 4 %13, i64 4, i1 false)
  %225 = getelementptr inbounds %"struct.OpenMesh::HalfedgeHandle", ptr %32, i32 0, i32 0
  %226 = getelementptr inbounds %"class.OpenMesh::BaseHandle", ptr %225, i32 0, i32 0
  %227 = load i32, ptr %226, align 4
  %228 = call i32 @_ZNK8OpenMesh11ArrayKernel24opposite_halfedge_handleENS_14HalfedgeHandleE(ptr noundef nonnull align 8 dereferenceable(368) %87, i32 %227)
  %229 = getelementptr inbounds %"struct.OpenMesh::HalfedgeHandle", ptr %31, i32 0, i32 0
  %230 = getelementptr inbounds %"class.OpenMesh::BaseHandle", ptr %229, i32 0, i32 0
  store i32 %228, ptr %230, align 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %14, ptr align 4 %31, i64 4, i1 false)
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #7
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %17, ptr align 4 %15, i64 4, i1 false)
  br label %231

231:                                              ; preds = %244, %218
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #7
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %35, ptr align 4 %17, i64 4, i1 false)
  %232 = getelementptr inbounds %"struct.OpenMesh::HalfedgeHandle", ptr %35, i32 0, i32 0
  %233 = getelementptr inbounds %"class.OpenMesh::BaseHandle", ptr %232, i32 0, i32 0
  %234 = load i32, ptr %233, align 4
  %235 = call i32 @_ZNK8OpenMesh11ArrayKernel20next_halfedge_handleENS_14HalfedgeHandleE(ptr noundef nonnull align 8 dereferenceable(368) %87, i32 %234)
  %236 = getelementptr inbounds %"struct.OpenMesh::HalfedgeHandle", ptr %34, i32 0, i32 0
  %237 = getelementptr inbounds %"class.OpenMesh::BaseHandle", ptr %236, i32 0, i32 0
  store i32 %235, ptr %237, align 4
  %238 = getelementptr inbounds %"struct.OpenMesh::HalfedgeHandle", ptr %34, i32 0, i32 0
  %239 = getelementptr inbounds %"class.OpenMesh::BaseHandle", ptr %238, i32 0, i32 0
  %240 = load i32, ptr %239, align 4
  %241 = call i32 @_ZNK8OpenMesh11ArrayKernel24opposite_halfedge_handleENS_14HalfedgeHandleE(ptr noundef nonnull align 8 dereferenceable(368) %87, i32 %240)
  %242 = getelementptr inbounds %"struct.OpenMesh::HalfedgeHandle", ptr %33, i32 0, i32 0
  %243 = getelementptr inbounds %"class.OpenMesh::BaseHandle", ptr %242, i32 0, i32 0
  store i32 %241, ptr %243, align 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %17, ptr align 4 %33, i64 4, i1 false)
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #7
  br label %244

244:                                              ; preds = %231
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %36, ptr align 4 %17, i64 4, i1 false)
  %245 = getelementptr inbounds %"struct.OpenMesh::HalfedgeHandle", ptr %36, i32 0, i32 0
  %246 = getelementptr inbounds %"class.OpenMesh::BaseHandle", ptr %245, i32 0, i32 0
  %247 = load i32, ptr %246, align 4
  %248 = call noundef zeroext i1 @_ZNK8OpenMesh16PolyConnectivity11is_boundaryENS_14HalfedgeHandleE(ptr noundef nonnull align 8 dereferenceable(416) %87, i32 %247)
  %249 = xor i1 %248, true
  br i1 %249, label %231, label %250, !llvm.loop !22

250:                                              ; preds = %244
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #7
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %38, ptr align 4 %17, i64 4, i1 false)
  %251 = getelementptr inbounds %"struct.OpenMesh::HalfedgeHandle", ptr %38, i32 0, i32 0
  %252 = getelementptr inbounds %"class.OpenMesh::BaseHandle", ptr %251, i32 0, i32 0
  %253 = load i32, ptr %252, align 4
  %254 = call i32 @_ZNK8OpenMesh11ArrayKernel20next_halfedge_handleENS_14HalfedgeHandleE(ptr noundef nonnull align 8 dereferenceable(368) %87, i32 %253)
  %255 = getelementptr inbounds %"struct.OpenMesh::HalfedgeHandle", ptr %37, i32 0, i32 0
  %256 = getelementptr inbounds %"class.OpenMesh::BaseHandle", ptr %255, i32 0, i32 0
  store i32 %254, ptr %256, align 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %16, ptr align 4 %37, i64 4, i1 false)
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #7
  %257 = call noundef zeroext i1 @_ZNK8OpenMesh10BaseHandleeqERKS0_(ptr noundef nonnull align 4 dereferenceable(4) %17, ptr noundef nonnull align 4 dereferenceable(4) %13)
  br i1 %257, label %258, label %261

258:                                              ; preds = %250
  %259 = call noundef nonnull align 8 dereferenceable(224) ptr @_Z5omerrv()
  %260 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %259, ptr noundef @.str.8)
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %4, ptr align 4 @_ZN8OpenMesh16PolyConnectivity17InvalidFaceHandleE, i64 4, i1 false)
  store i32 1, ptr %22, align 4
  br label %668

261:                                              ; preds = %250
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %39, ptr align 4 %17, i64 4, i1 false)
  %262 = getelementptr inbounds %"struct.OpenMesh::HalfedgeHandle", ptr %39, i32 0, i32 0
  %263 = getelementptr inbounds %"class.OpenMesh::BaseHandle", ptr %262, i32 0, i32 0
  %264 = load i32, ptr %263, align 4
  %265 = call noundef zeroext i1 @_ZNK8OpenMesh16PolyConnectivity11is_boundaryENS_14HalfedgeHandleE(ptr noundef nonnull align 8 dereferenceable(416) %87, i32 %264)
  br i1 %265, label %266, label %267

266:                                              ; preds = %261
  br label %269

267:                                              ; preds = %261
  call void @__assert_fail(ptr noundef @.str.9, ptr noundef @.str.4, i32 noundef 197, ptr noundef @__PRETTY_FUNCTION__._ZN8OpenMesh16PolyConnectivity8add_faceEPKNS_12VertexHandleEm) #8
  unreachable

268:                                              ; No predecessors!
  br label %269

269:                                              ; preds = %268, %266
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %40, ptr align 4 %16, i64 4, i1 false)
  %270 = getelementptr inbounds %"struct.OpenMesh::HalfedgeHandle", ptr %40, i32 0, i32 0
  %271 = getelementptr inbounds %"class.OpenMesh::BaseHandle", ptr %270, i32 0, i32 0
  %272 = load i32, ptr %271, align 4
  %273 = call noundef zeroext i1 @_ZNK8OpenMesh16PolyConnectivity11is_boundaryENS_14HalfedgeHandleE(ptr noundef nonnull align 8 dereferenceable(416) %87, i32 %272)
  br i1 %273, label %274, label %275

274:                                              ; preds = %269
  br label %277

275:                                              ; preds = %269
  call void @__assert_fail(ptr noundef @.str.10, ptr noundef @.str.4, i32 noundef 198, ptr noundef @__PRETTY_FUNCTION__._ZN8OpenMesh16PolyConnectivity8add_faceEPKNS_12VertexHandleEm) #8
  unreachable

276:                                              ; No predecessors!
  br label %277

277:                                              ; preds = %276, %274
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #7
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %42, ptr align 4 %13, i64 4, i1 false)
  %278 = getelementptr inbounds %"struct.OpenMesh::HalfedgeHandle", ptr %42, i32 0, i32 0
  %279 = getelementptr inbounds %"class.OpenMesh::BaseHandle", ptr %278, i32 0, i32 0
  %280 = load i32, ptr %279, align 4
  %281 = call i32 @_ZNK8OpenMesh11ArrayKernel20next_halfedge_handleENS_14HalfedgeHandleE(ptr noundef nonnull align 8 dereferenceable(368) %87, i32 %280)
  %282 = getelementptr inbounds %"struct.OpenMesh::HalfedgeHandle", ptr %41, i32 0, i32 0
  %283 = getelementptr inbounds %"class.OpenMesh::BaseHandle", ptr %282, i32 0, i32 0
  store i32 %281, ptr %283, align 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %18, ptr align 4 %41, i64 4, i1 false)
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #7
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %44, ptr align 4 %12, i64 4, i1 false)
  %284 = getelementptr inbounds %"struct.OpenMesh::HalfedgeHandle", ptr %44, i32 0, i32 0
  %285 = getelementptr inbounds %"class.OpenMesh::BaseHandle", ptr %284, i32 0, i32 0
  %286 = load i32, ptr %285, align 4
  %287 = call i32 @_ZNK8OpenMesh11ArrayKernel20prev_halfedge_handleENS_14HalfedgeHandleE(ptr noundef nonnull align 8 dereferenceable(368) %87, i32 %286)
  %288 = getelementptr inbounds %"struct.OpenMesh::HalfedgeHandle", ptr %43, i32 0, i32 0
  %289 = getelementptr inbounds %"class.OpenMesh::BaseHandle", ptr %288, i32 0, i32 0
  store i32 %287, ptr %289, align 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %19, ptr align 4 %43, i64 4, i1 false)
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #7
  %290 = call noundef zeroext i1 @_ZNK8OpenMesh10BaseHandle8is_validEv(ptr noundef nonnull align 4 dereferenceable(4) %17)
  br i1 %290, label %291, label %292

291:                                              ; preds = %277
  br label %294

292:                                              ; preds = %277
  call void @__assert_fail(ptr noundef @.str.11, ptr noundef @.str.4, i32 noundef 204, ptr noundef @__PRETTY_FUNCTION__._ZN8OpenMesh16PolyConnectivity8add_faceEPKNS_12VertexHandleEm) #8
  unreachable

293:                                              ; No predecessors!
  br label %294

294:                                              ; preds = %293, %291
  %295 = call noundef zeroext i1 @_ZNK8OpenMesh10BaseHandle8is_validEv(ptr noundef nonnull align 4 dereferenceable(4) %18)
  br i1 %295, label %296, label %297

296:                                              ; preds = %294
  br label %299

297:                                              ; preds = %294
  call void @__assert_fail(ptr noundef @.str.12, ptr noundef @.str.4, i32 noundef 205, ptr noundef @__PRETTY_FUNCTION__._ZN8OpenMesh16PolyConnectivity8add_faceEPKNS_12VertexHandleEm) #8
  unreachable

298:                                              ; No predecessors!
  br label %299

299:                                              ; preds = %298, %296
  %300 = call noundef zeroext i1 @_ZNK8OpenMesh10BaseHandle8is_validEv(ptr noundef nonnull align 4 dereferenceable(4) %19)
  br i1 %300, label %301, label %302

301:                                              ; preds = %299
  br label %304

302:                                              ; preds = %299
  call void @__assert_fail(ptr noundef @.str.13, ptr noundef @.str.4, i32 noundef 206, ptr noundef @__PRETTY_FUNCTION__._ZN8OpenMesh16PolyConnectivity8add_faceEPKNS_12VertexHandleEm) #8
  unreachable

303:                                              ; No predecessors!
  br label %304

304:                                              ; preds = %303, %301
  %305 = call noundef zeroext i1 @_ZNK8OpenMesh10BaseHandle8is_validEv(ptr noundef nonnull align 4 dereferenceable(4) %16)
  br i1 %305, label %306, label %307

306:                                              ; preds = %304
  br label %309

307:                                              ; preds = %304
  call void @__assert_fail(ptr noundef @.str.14, ptr noundef @.str.4, i32 noundef 207, ptr noundef @__PRETTY_FUNCTION__._ZN8OpenMesh16PolyConnectivity8add_faceEPKNS_12VertexHandleEm) #8
  unreachable

308:                                              ; No predecessors!
  br label %309

309:                                              ; preds = %308, %306
  %310 = call noundef zeroext i1 @_ZNK8OpenMesh10BaseHandle8is_validEv(ptr noundef nonnull align 4 dereferenceable(4) %13)
  br i1 %310, label %311, label %312

311:                                              ; preds = %309
  br label %314

312:                                              ; preds = %309
  call void @__assert_fail(ptr noundef @.str.15, ptr noundef @.str.4, i32 noundef 208, ptr noundef @__PRETTY_FUNCTION__._ZN8OpenMesh16PolyConnectivity8add_faceEPKNS_12VertexHandleEm) #8
  unreachable

313:                                              ; No predecessors!
  br label %314

314:                                              ; preds = %313, %311
  %315 = call noundef zeroext i1 @_ZNK8OpenMesh10BaseHandle8is_validEv(ptr noundef nonnull align 4 dereferenceable(4) %12)
  br i1 %315, label %316, label %317

316:                                              ; preds = %314
  br label %319

317:                                              ; preds = %314
  call void @__assert_fail(ptr noundef @.str.16, ptr noundef @.str.4, i32 noundef 209, ptr noundef @__PRETTY_FUNCTION__._ZN8OpenMesh16PolyConnectivity8add_faceEPKNS_12VertexHandleEm) #8
  unreachable

318:                                              ; No predecessors!
  br label %319

319:                                              ; preds = %318, %316
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #7
  %320 = call i64 @_ZSt9make_pairIRN8OpenMesh14HalfedgeHandleES2_ESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS4_INS5_IT0_E4typeEE6__typeEEOS6_OSB_(ptr noundef nonnull align 4 dereferenceable(4) %17, ptr noundef nonnull align 4 dereferenceable(4) %18)
  store i64 %320, ptr %45, align 4
  %321 = getelementptr inbounds %"class.OpenMesh::PolyConnectivity", ptr %87, i32 0, i32 2
  %322 = load i64, ptr %20, align 8, !tbaa !9
  %323 = add i64 %322, 1
  store i64 %323, ptr %20, align 8, !tbaa !9
  %324 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNSt6vectorISt4pairIN8OpenMesh14HalfedgeHandleES2_ESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %321, i64 noundef %322) #7
  %325 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNSt4pairIN8OpenMesh14HalfedgeHandleES1_EaSEOS2_(ptr noundef nonnull align 4 dereferenceable(8) %324, ptr noundef nonnull align 4 dereferenceable(8) %45) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #7
  %326 = call i64 @_ZSt9make_pairIRN8OpenMesh14HalfedgeHandleES2_ESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS4_INS5_IT0_E4typeEE6__typeEEOS6_OSB_(ptr noundef nonnull align 4 dereferenceable(4) %19, ptr noundef nonnull align 4 dereferenceable(4) %16)
  store i64 %326, ptr %46, align 4
  %327 = getelementptr inbounds %"class.OpenMesh::PolyConnectivity", ptr %87, i32 0, i32 2
  %328 = load i64, ptr %20, align 8, !tbaa !9
  %329 = add i64 %328, 1
  store i64 %329, ptr %20, align 8, !tbaa !9
  %330 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNSt6vectorISt4pairIN8OpenMesh14HalfedgeHandleES2_ESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %327, i64 noundef %328) #7
  %331 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNSt4pairIN8OpenMesh14HalfedgeHandleES1_EaSEOS2_(ptr noundef nonnull align 4 dereferenceable(8) %330, ptr noundef nonnull align 4 dereferenceable(8) %46) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %47) #7
  %332 = call i64 @_ZSt9make_pairIRN8OpenMesh14HalfedgeHandleES2_ESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS4_INS5_IT0_E4typeEE6__typeEEOS6_OSB_(ptr noundef nonnull align 4 dereferenceable(4) %13, ptr noundef nonnull align 4 dereferenceable(4) %12)
  store i64 %332, ptr %47, align 4
  %333 = getelementptr inbounds %"class.OpenMesh::PolyConnectivity", ptr %87, i32 0, i32 2
  %334 = load i64, ptr %20, align 8, !tbaa !9
  %335 = add i64 %334, 1
  store i64 %335, ptr %20, align 8, !tbaa !9
  %336 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNSt6vectorISt4pairIN8OpenMesh14HalfedgeHandleES2_ESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %333, i64 noundef %334) #7
  %337 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNSt4pairIN8OpenMesh14HalfedgeHandleES1_EaSEOS2_(ptr noundef nonnull align 4 dereferenceable(8) %336, ptr noundef nonnull align 4 dereferenceable(8) %47) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #7
  br label %338

338:                                              ; preds = %319, %202
  br label %339

339:                                              ; preds = %338, %195, %188
  br label %340

340:                                              ; preds = %339
  %341 = load i64, ptr %9, align 8, !tbaa !9
  %342 = add i64 %341, 1
  store i64 %342, ptr %9, align 8, !tbaa !9
  %343 = load i64, ptr %10, align 8, !tbaa !9
  %344 = add i64 %343, 1
  store i64 %344, ptr %10, align 8, !tbaa !9
  %345 = load i64, ptr %11, align 8, !tbaa !9
  %346 = load i64, ptr %10, align 8, !tbaa !9
  %347 = urem i64 %346, %345
  store i64 %347, ptr %10, align 8, !tbaa !9
  br label %184, !llvm.loop !23

348:                                              ; preds = %184
  store i64 0, ptr %9, align 8, !tbaa !9
  store i64 1, ptr %10, align 8, !tbaa !9
  br label %349

349:                                              ; preds = %381, %348
  %350 = load i64, ptr %9, align 8, !tbaa !9
  %351 = load i64, ptr %11, align 8, !tbaa !9
  %352 = icmp ult i64 %350, %351
  br i1 %352, label %353, label %389

353:                                              ; preds = %349
  %354 = getelementptr inbounds %"class.OpenMesh::PolyConnectivity", ptr %87, i32 0, i32 1
  %355 = load i64, ptr %9, align 8, !tbaa !9
  %356 = call noundef nonnull align 4 dereferenceable(6) ptr @_ZNSt6vectorIN8OpenMesh16PolyConnectivity15AddFaceEdgeInfoESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %354, i64 noundef %355) #7
  %357 = getelementptr inbounds %"struct.OpenMesh::PolyConnectivity::AddFaceEdgeInfo", ptr %356, i32 0, i32 1
  %358 = load i8, ptr %357, align 4, !tbaa !11, !range !18, !noundef !19
  %359 = trunc i8 %358 to i1
  br i1 %359, label %360, label %380

360:                                              ; preds = %353
  call void @llvm.lifetime.start.p0(i64 4, ptr %48) #7
  %361 = load ptr, ptr %6, align 8, !tbaa !5
  %362 = load i64, ptr %9, align 8, !tbaa !9
  %363 = getelementptr inbounds %"struct.OpenMesh::VertexHandle", ptr %361, i64 %362
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %49, ptr align 4 %363, i64 4, i1 false)
  %364 = load ptr, ptr %6, align 8, !tbaa !5
  %365 = load i64, ptr %10, align 8, !tbaa !9
  %366 = getelementptr inbounds %"struct.OpenMesh::VertexHandle", ptr %364, i64 %365
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %50, ptr align 4 %366, i64 4, i1 false)
  %367 = getelementptr inbounds %"struct.OpenMesh::VertexHandle", ptr %49, i32 0, i32 0
  %368 = getelementptr inbounds %"class.OpenMesh::BaseHandle", ptr %367, i32 0, i32 0
  %369 = load i32, ptr %368, align 4
  %370 = getelementptr inbounds %"struct.OpenMesh::VertexHandle", ptr %50, i32 0, i32 0
  %371 = getelementptr inbounds %"class.OpenMesh::BaseHandle", ptr %370, i32 0, i32 0
  %372 = load i32, ptr %371, align 4
  %373 = call i32 @_ZN8OpenMesh11ArrayKernel8new_edgeENS_12VertexHandleES1_(ptr noundef nonnull align 8 dereferenceable(368) %87, i32 %369, i32 %372)
  %374 = getelementptr inbounds %"struct.OpenMesh::HalfedgeHandle", ptr %48, i32 0, i32 0
  %375 = getelementptr inbounds %"class.OpenMesh::BaseHandle", ptr %374, i32 0, i32 0
  store i32 %373, ptr %375, align 4
  %376 = getelementptr inbounds %"class.OpenMesh::PolyConnectivity", ptr %87, i32 0, i32 1
  %377 = load i64, ptr %9, align 8, !tbaa !9
  %378 = call noundef nonnull align 4 dereferenceable(6) ptr @_ZNSt6vectorIN8OpenMesh16PolyConnectivity15AddFaceEdgeInfoESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %376, i64 noundef %377) #7
  %379 = getelementptr inbounds %"struct.OpenMesh::PolyConnectivity::AddFaceEdgeInfo", ptr %378, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %379, ptr align 4 %48, i64 4, i1 false)
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #7
  br label %380

380:                                              ; preds = %360, %353
  br label %381

381:                                              ; preds = %380
  %382 = load i64, ptr %9, align 8, !tbaa !9
  %383 = add i64 %382, 1
  store i64 %383, ptr %9, align 8, !tbaa !9
  %384 = load i64, ptr %10, align 8, !tbaa !9
  %385 = add i64 %384, 1
  store i64 %385, ptr %10, align 8, !tbaa !9
  %386 = load i64, ptr %11, align 8, !tbaa !9
  %387 = load i64, ptr %10, align 8, !tbaa !9
  %388 = urem i64 %387, %386
  store i64 %388, ptr %10, align 8, !tbaa !9
  br label %349, !llvm.loop !24

389:                                              ; preds = %349
  %390 = call i32 @_ZN8OpenMesh11ArrayKernel8new_faceEv(ptr noundef nonnull align 8 dereferenceable(368) %87)
  %391 = getelementptr inbounds %"struct.OpenMesh::FaceHandle", ptr %4, i32 0, i32 0
  %392 = getelementptr inbounds %"class.OpenMesh::BaseHandle", ptr %391, i32 0, i32 0
  store i32 %390, ptr %392, align 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %51, ptr align 4 %4, i64 4, i1 false)
  %393 = getelementptr inbounds %"class.OpenMesh::PolyConnectivity", ptr %87, i32 0, i32 1
  %394 = load i64, ptr %11, align 8, !tbaa !9
  %395 = sub i64 %394, 1
  %396 = call noundef nonnull align 4 dereferenceable(6) ptr @_ZNSt6vectorIN8OpenMesh16PolyConnectivity15AddFaceEdgeInfoESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %393, i64 noundef %395) #7
  %397 = getelementptr inbounds %"struct.OpenMesh::PolyConnectivity::AddFaceEdgeInfo", ptr %396, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %52, ptr align 4 %397, i64 4, i1 false)
  %398 = getelementptr inbounds %"struct.OpenMesh::FaceHandle", ptr %51, i32 0, i32 0
  %399 = getelementptr inbounds %"class.OpenMesh::BaseHandle", ptr %398, i32 0, i32 0
  %400 = load i32, ptr %399, align 4
  %401 = getelementptr inbounds %"struct.OpenMesh::HalfedgeHandle", ptr %52, i32 0, i32 0
  %402 = getelementptr inbounds %"class.OpenMesh::BaseHandle", ptr %401, i32 0, i32 0
  %403 = load i32, ptr %402, align 4
  call void @_ZN8OpenMesh11ArrayKernel19set_halfedge_handleENS_10FaceHandleENS_14HalfedgeHandleE(ptr noundef nonnull align 8 dereferenceable(368) %87, i32 %400, i32 %403)
  store i64 0, ptr %9, align 8, !tbaa !9
  store i64 1, ptr %10, align 8, !tbaa !9
  br label %404

404:                                              ; preds = %613, %389
  %405 = load i64, ptr %9, align 8, !tbaa !9
  %406 = load i64, ptr %11, align 8, !tbaa !9
  %407 = icmp ult i64 %405, %406
  br i1 %407, label %408, label %621

408:                                              ; preds = %404
  %409 = load ptr, ptr %6, align 8, !tbaa !5
  %410 = load i64, ptr %10, align 8, !tbaa !9
  %411 = getelementptr inbounds %"struct.OpenMesh::VertexHandle", ptr %409, i64 %410
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %8, ptr align 4 %411, i64 4, i1 false)
  %412 = getelementptr inbounds %"class.OpenMesh::PolyConnectivity", ptr %87, i32 0, i32 1
  %413 = load i64, ptr %9, align 8, !tbaa !9
  %414 = call noundef nonnull align 4 dereferenceable(6) ptr @_ZNSt6vectorIN8OpenMesh16PolyConnectivity15AddFaceEdgeInfoESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %412, i64 noundef %413) #7
  %415 = getelementptr inbounds %"struct.OpenMesh::PolyConnectivity::AddFaceEdgeInfo", ptr %414, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %13, ptr align 4 %415, i64 4, i1 false)
  %416 = getelementptr inbounds %"class.OpenMesh::PolyConnectivity", ptr %87, i32 0, i32 1
  %417 = load i64, ptr %10, align 8, !tbaa !9
  %418 = call noundef nonnull align 4 dereferenceable(6) ptr @_ZNSt6vectorIN8OpenMesh16PolyConnectivity15AddFaceEdgeInfoESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %416, i64 noundef %417) #7
  %419 = getelementptr inbounds %"struct.OpenMesh::PolyConnectivity::AddFaceEdgeInfo", ptr %418, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %12, ptr align 4 %419, i64 4, i1 false)
  %420 = call noundef zeroext i1 @_ZNK8OpenMesh10BaseHandle8is_validEv(ptr noundef nonnull align 4 dereferenceable(4) %13)
  br i1 %420, label %421, label %422

421:                                              ; preds = %408
  br label %424

422:                                              ; preds = %408
  call void @__assert_fail(ptr noundef @.str.15, ptr noundef @.str.4, i32 noundef 235, ptr noundef @__PRETTY_FUNCTION__._ZN8OpenMesh16PolyConnectivity8add_faceEPKNS_12VertexHandleEm) #8
  unreachable

423:                                              ; No predecessors!
  br label %424

424:                                              ; preds = %423, %421
  %425 = call noundef zeroext i1 @_ZNK8OpenMesh10BaseHandle8is_validEv(ptr noundef nonnull align 4 dereferenceable(4) %12)
  br i1 %425, label %426, label %427

426:                                              ; preds = %424
  br label %429

427:                                              ; preds = %424
  call void @__assert_fail(ptr noundef @.str.16, ptr noundef @.str.4, i32 noundef 236, ptr noundef @__PRETTY_FUNCTION__._ZN8OpenMesh16PolyConnectivity8add_faceEPKNS_12VertexHandleEm) #8
  unreachable

428:                                              ; No predecessors!
  br label %429

429:                                              ; preds = %428, %426
  call void @llvm.lifetime.start.p0(i64 8, ptr %53) #7
  store i64 0, ptr %53, align 8, !tbaa !9
  %430 = getelementptr inbounds %"class.OpenMesh::PolyConnectivity", ptr %87, i32 0, i32 1
  %431 = load i64, ptr %9, align 8, !tbaa !9
  %432 = call noundef nonnull align 4 dereferenceable(6) ptr @_ZNSt6vectorIN8OpenMesh16PolyConnectivity15AddFaceEdgeInfoESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %430, i64 noundef %431) #7
  %433 = getelementptr inbounds %"struct.OpenMesh::PolyConnectivity::AddFaceEdgeInfo", ptr %432, i32 0, i32 1
  %434 = load i8, ptr %433, align 4, !tbaa !11, !range !18, !noundef !19
  %435 = trunc i8 %434 to i1
  br i1 %435, label %436, label %439

436:                                              ; preds = %429
  %437 = load i64, ptr %53, align 8, !tbaa !9
  %438 = or i64 %437, 1
  store i64 %438, ptr %53, align 8, !tbaa !9
  br label %439

439:                                              ; preds = %436, %429
  %440 = getelementptr inbounds %"class.OpenMesh::PolyConnectivity", ptr %87, i32 0, i32 1
  %441 = load i64, ptr %10, align 8, !tbaa !9
  %442 = call noundef nonnull align 4 dereferenceable(6) ptr @_ZNSt6vectorIN8OpenMesh16PolyConnectivity15AddFaceEdgeInfoESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %440, i64 noundef %441) #7
  %443 = getelementptr inbounds %"struct.OpenMesh::PolyConnectivity::AddFaceEdgeInfo", ptr %442, i32 0, i32 1
  %444 = load i8, ptr %443, align 4, !tbaa !11, !range !18, !noundef !19
  %445 = trunc i8 %444 to i1
  br i1 %445, label %446, label %449

446:                                              ; preds = %439
  %447 = load i64, ptr %53, align 8, !tbaa !9
  %448 = or i64 %447, 2
  store i64 %448, ptr %53, align 8, !tbaa !9
  br label %449

449:                                              ; preds = %446, %439
  %450 = load i64, ptr %53, align 8, !tbaa !9
  %451 = icmp ne i64 %450, 0
  br i1 %451, label %452, label %589

452:                                              ; preds = %449
  call void @llvm.lifetime.start.p0(i64 4, ptr %54) #7
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %55, ptr align 4 %12, i64 4, i1 false)
  %453 = getelementptr inbounds %"struct.OpenMesh::HalfedgeHandle", ptr %55, i32 0, i32 0
  %454 = getelementptr inbounds %"class.OpenMesh::BaseHandle", ptr %453, i32 0, i32 0
  %455 = load i32, ptr %454, align 4
  %456 = call i32 @_ZNK8OpenMesh11ArrayKernel24opposite_halfedge_handleENS_14HalfedgeHandleE(ptr noundef nonnull align 8 dereferenceable(368) %87, i32 %455)
  %457 = getelementptr inbounds %"struct.OpenMesh::HalfedgeHandle", ptr %54, i32 0, i32 0
  %458 = getelementptr inbounds %"class.OpenMesh::BaseHandle", ptr %457, i32 0, i32 0
  store i32 %456, ptr %458, align 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %15, ptr align 4 %54, i64 4, i1 false)
  call void @llvm.lifetime.end.p0(i64 4, ptr %54) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %56) #7
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %57, ptr align 4 %13, i64 4, i1 false)
  %459 = getelementptr inbounds %"struct.OpenMesh::HalfedgeHandle", ptr %57, i32 0, i32 0
  %460 = getelementptr inbounds %"class.OpenMesh::BaseHandle", ptr %459, i32 0, i32 0
  %461 = load i32, ptr %460, align 4
  %462 = call i32 @_ZNK8OpenMesh11ArrayKernel24opposite_halfedge_handleENS_14HalfedgeHandleE(ptr noundef nonnull align 8 dereferenceable(368) %87, i32 %461)
  %463 = getelementptr inbounds %"struct.OpenMesh::HalfedgeHandle", ptr %56, i32 0, i32 0
  %464 = getelementptr inbounds %"class.OpenMesh::BaseHandle", ptr %463, i32 0, i32 0
  store i32 %462, ptr %464, align 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %14, ptr align 4 %56, i64 4, i1 false)
  call void @llvm.lifetime.end.p0(i64 4, ptr %56) #7
  %465 = call noundef zeroext i1 @_ZNK8OpenMesh10BaseHandle8is_validEv(ptr noundef nonnull align 4 dereferenceable(4) %15)
  br i1 %465, label %466, label %467

466:                                              ; preds = %452
  br label %469

467:                                              ; preds = %452
  call void @__assert_fail(ptr noundef @.str.17, ptr noundef @.str.4, i32 noundef 247, ptr noundef @__PRETTY_FUNCTION__._ZN8OpenMesh16PolyConnectivity8add_faceEPKNS_12VertexHandleEm) #8
  unreachable

468:                                              ; No predecessors!
  br label %469

469:                                              ; preds = %468, %466
  %470 = call noundef zeroext i1 @_ZNK8OpenMesh10BaseHandle8is_validEv(ptr noundef nonnull align 4 dereferenceable(4) %14)
  br i1 %470, label %471, label %472

471:                                              ; preds = %469
  br label %474

472:                                              ; preds = %469
  call void @__assert_fail(ptr noundef @.str.18, ptr noundef @.str.4, i32 noundef 248, ptr noundef @__PRETTY_FUNCTION__._ZN8OpenMesh16PolyConnectivity8add_faceEPKNS_12VertexHandleEm) #8
  unreachable

473:                                              ; No predecessors!
  br label %474

474:                                              ; preds = %473, %471
  %475 = load i64, ptr %53, align 8, !tbaa !9
  switch i64 %475, label %582 [
    i64 1, label %476
    i64 2, label %500
    i64 3, label %524
  ]

476:                                              ; preds = %474
  call void @llvm.lifetime.start.p0(i64 4, ptr %58) #7
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %59, ptr align 4 %12, i64 4, i1 false)
  %477 = getelementptr inbounds %"struct.OpenMesh::HalfedgeHandle", ptr %59, i32 0, i32 0
  %478 = getelementptr inbounds %"class.OpenMesh::BaseHandle", ptr %477, i32 0, i32 0
  %479 = load i32, ptr %478, align 4
  %480 = call i32 @_ZNK8OpenMesh11ArrayKernel20prev_halfedge_handleENS_14HalfedgeHandleE(ptr noundef nonnull align 8 dereferenceable(368) %87, i32 %479)
  %481 = getelementptr inbounds %"struct.OpenMesh::HalfedgeHandle", ptr %58, i32 0, i32 0
  %482 = getelementptr inbounds %"class.OpenMesh::BaseHandle", ptr %481, i32 0, i32 0
  store i32 %480, ptr %482, align 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %17, ptr align 4 %58, i64 4, i1 false)
  call void @llvm.lifetime.end.p0(i64 4, ptr %58) #7
  %483 = call noundef zeroext i1 @_ZNK8OpenMesh10BaseHandle8is_validEv(ptr noundef nonnull align 4 dereferenceable(4) %17)
  br i1 %483, label %484, label %485

484:                                              ; preds = %476
  br label %487

485:                                              ; preds = %476
  call void @__assert_fail(ptr noundef @.str.11, ptr noundef @.str.4, i32 noundef 255, ptr noundef @__PRETTY_FUNCTION__._ZN8OpenMesh16PolyConnectivity8add_faceEPKNS_12VertexHandleEm) #8
  unreachable

486:                                              ; No predecessors!
  br label %487

487:                                              ; preds = %486, %484
  call void @llvm.lifetime.start.p0(i64 8, ptr %60) #7
  %488 = call i64 @_ZSt9make_pairIRN8OpenMesh14HalfedgeHandleES2_ESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS4_INS5_IT0_E4typeEE6__typeEEOS6_OSB_(ptr noundef nonnull align 4 dereferenceable(4) %17, ptr noundef nonnull align 4 dereferenceable(4) %14)
  store i64 %488, ptr %60, align 4
  %489 = getelementptr inbounds %"class.OpenMesh::PolyConnectivity", ptr %87, i32 0, i32 2
  %490 = load i64, ptr %20, align 8, !tbaa !9
  %491 = add i64 %490, 1
  store i64 %491, ptr %20, align 8, !tbaa !9
  %492 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNSt6vectorISt4pairIN8OpenMesh14HalfedgeHandleES2_ESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %489, i64 noundef %490) #7
  %493 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNSt4pairIN8OpenMesh14HalfedgeHandleES1_EaSEOS2_(ptr noundef nonnull align 4 dereferenceable(8) %492, ptr noundef nonnull align 4 dereferenceable(8) %60) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #7
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %61, ptr align 4 %8, i64 4, i1 false)
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %62, ptr align 4 %14, i64 4, i1 false)
  %494 = getelementptr inbounds %"struct.OpenMesh::VertexHandle", ptr %61, i32 0, i32 0
  %495 = getelementptr inbounds %"class.OpenMesh::BaseHandle", ptr %494, i32 0, i32 0
  %496 = load i32, ptr %495, align 4
  %497 = getelementptr inbounds %"struct.OpenMesh::HalfedgeHandle", ptr %62, i32 0, i32 0
  %498 = getelementptr inbounds %"class.OpenMesh::BaseHandle", ptr %497, i32 0, i32 0
  %499 = load i32, ptr %498, align 4
  call void @_ZN8OpenMesh11ArrayKernel19set_halfedge_handleENS_12VertexHandleENS_14HalfedgeHandleE(ptr noundef nonnull align 8 dereferenceable(368) %87, i32 %496, i32 %499)
  br label %582

500:                                              ; preds = %474
  call void @llvm.lifetime.start.p0(i64 4, ptr %63) #7
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %64, ptr align 4 %13, i64 4, i1 false)
  %501 = getelementptr inbounds %"struct.OpenMesh::HalfedgeHandle", ptr %64, i32 0, i32 0
  %502 = getelementptr inbounds %"class.OpenMesh::BaseHandle", ptr %501, i32 0, i32 0
  %503 = load i32, ptr %502, align 4
  %504 = call i32 @_ZNK8OpenMesh11ArrayKernel20next_halfedge_handleENS_14HalfedgeHandleE(ptr noundef nonnull align 8 dereferenceable(368) %87, i32 %503)
  %505 = getelementptr inbounds %"struct.OpenMesh::HalfedgeHandle", ptr %63, i32 0, i32 0
  %506 = getelementptr inbounds %"class.OpenMesh::BaseHandle", ptr %505, i32 0, i32 0
  store i32 %504, ptr %506, align 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %16, ptr align 4 %63, i64 4, i1 false)
  call void @llvm.lifetime.end.p0(i64 4, ptr %63) #7
  %507 = call noundef zeroext i1 @_ZNK8OpenMesh10BaseHandle8is_validEv(ptr noundef nonnull align 4 dereferenceable(4) %16)
  br i1 %507, label %508, label %509

508:                                              ; preds = %500
  br label %511

509:                                              ; preds = %500
  call void @__assert_fail(ptr noundef @.str.14, ptr noundef @.str.4, i32 noundef 262, ptr noundef @__PRETTY_FUNCTION__._ZN8OpenMesh16PolyConnectivity8add_faceEPKNS_12VertexHandleEm) #8
  unreachable

510:                                              ; No predecessors!
  br label %511

511:                                              ; preds = %510, %508
  call void @llvm.lifetime.start.p0(i64 8, ptr %65) #7
  %512 = call i64 @_ZSt9make_pairIRN8OpenMesh14HalfedgeHandleES2_ESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS4_INS5_IT0_E4typeEE6__typeEEOS6_OSB_(ptr noundef nonnull align 4 dereferenceable(4) %15, ptr noundef nonnull align 4 dereferenceable(4) %16)
  store i64 %512, ptr %65, align 4
  %513 = getelementptr inbounds %"class.OpenMesh::PolyConnectivity", ptr %87, i32 0, i32 2
  %514 = load i64, ptr %20, align 8, !tbaa !9
  %515 = add i64 %514, 1
  store i64 %515, ptr %20, align 8, !tbaa !9
  %516 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNSt6vectorISt4pairIN8OpenMesh14HalfedgeHandleES2_ESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %513, i64 noundef %514) #7
  %517 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNSt4pairIN8OpenMesh14HalfedgeHandleES1_EaSEOS2_(ptr noundef nonnull align 4 dereferenceable(8) %516, ptr noundef nonnull align 4 dereferenceable(8) %65) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %65) #7
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %66, ptr align 4 %8, i64 4, i1 false)
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %67, ptr align 4 %16, i64 4, i1 false)
  %518 = getelementptr inbounds %"struct.OpenMesh::VertexHandle", ptr %66, i32 0, i32 0
  %519 = getelementptr inbounds %"class.OpenMesh::BaseHandle", ptr %518, i32 0, i32 0
  %520 = load i32, ptr %519, align 4
  %521 = getelementptr inbounds %"struct.OpenMesh::HalfedgeHandle", ptr %67, i32 0, i32 0
  %522 = getelementptr inbounds %"class.OpenMesh::BaseHandle", ptr %521, i32 0, i32 0
  %523 = load i32, ptr %522, align 4
  call void @_ZN8OpenMesh11ArrayKernel19set_halfedge_handleENS_12VertexHandleENS_14HalfedgeHandleE(ptr noundef nonnull align 8 dereferenceable(368) %87, i32 %520, i32 %523)
  br label %582

524:                                              ; preds = %474
  call void @llvm.lifetime.start.p0(i64 4, ptr %68) #7
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %69, ptr align 4 %8, i64 4, i1 false)
  %525 = getelementptr inbounds %"struct.OpenMesh::VertexHandle", ptr %69, i32 0, i32 0
  %526 = getelementptr inbounds %"class.OpenMesh::BaseHandle", ptr %525, i32 0, i32 0
  %527 = load i32, ptr %526, align 4
  %528 = call i32 @_ZNK8OpenMesh11ArrayKernel15halfedge_handleENS_12VertexHandleE(ptr noundef nonnull align 8 dereferenceable(368) %87, i32 %527)
  %529 = getelementptr inbounds %"struct.OpenMesh::HalfedgeHandle", ptr %68, i32 0, i32 0
  %530 = getelementptr inbounds %"class.OpenMesh::BaseHandle", ptr %529, i32 0, i32 0
  store i32 %528, ptr %530, align 4
  %531 = call noundef zeroext i1 @_ZNK8OpenMesh10BaseHandle8is_validEv(ptr noundef nonnull align 4 dereferenceable(4) %68)
  %532 = xor i1 %531, true
  call void @llvm.lifetime.end.p0(i64 4, ptr %68) #7
  br i1 %532, label %533, label %546

533:                                              ; preds = %524
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %70, ptr align 4 %8, i64 4, i1 false)
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %71, ptr align 4 %14, i64 4, i1 false)
  %534 = getelementptr inbounds %"struct.OpenMesh::VertexHandle", ptr %70, i32 0, i32 0
  %535 = getelementptr inbounds %"class.OpenMesh::BaseHandle", ptr %534, i32 0, i32 0
  %536 = load i32, ptr %535, align 4
  %537 = getelementptr inbounds %"struct.OpenMesh::HalfedgeHandle", ptr %71, i32 0, i32 0
  %538 = getelementptr inbounds %"class.OpenMesh::BaseHandle", ptr %537, i32 0, i32 0
  %539 = load i32, ptr %538, align 4
  call void @_ZN8OpenMesh11ArrayKernel19set_halfedge_handleENS_12VertexHandleENS_14HalfedgeHandleE(ptr noundef nonnull align 8 dereferenceable(368) %87, i32 %536, i32 %539)
  call void @llvm.lifetime.start.p0(i64 8, ptr %72) #7
  %540 = call i64 @_ZSt9make_pairIRN8OpenMesh14HalfedgeHandleES2_ESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS4_INS5_IT0_E4typeEE6__typeEEOS6_OSB_(ptr noundef nonnull align 4 dereferenceable(4) %15, ptr noundef nonnull align 4 dereferenceable(4) %14)
  store i64 %540, ptr %72, align 4
  %541 = getelementptr inbounds %"class.OpenMesh::PolyConnectivity", ptr %87, i32 0, i32 2
  %542 = load i64, ptr %20, align 8, !tbaa !9
  %543 = add i64 %542, 1
  store i64 %543, ptr %20, align 8, !tbaa !9
  %544 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNSt6vectorISt4pairIN8OpenMesh14HalfedgeHandleES2_ESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %541, i64 noundef %542) #7
  %545 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNSt4pairIN8OpenMesh14HalfedgeHandleES1_EaSEOS2_(ptr noundef nonnull align 4 dereferenceable(8) %544, ptr noundef nonnull align 4 dereferenceable(8) %72) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %72) #7
  br label %581

546:                                              ; preds = %524
  call void @llvm.lifetime.start.p0(i64 4, ptr %73) #7
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %74, ptr align 4 %8, i64 4, i1 false)
  %547 = getelementptr inbounds %"struct.OpenMesh::VertexHandle", ptr %74, i32 0, i32 0
  %548 = getelementptr inbounds %"class.OpenMesh::BaseHandle", ptr %547, i32 0, i32 0
  %549 = load i32, ptr %548, align 4
  %550 = call i32 @_ZNK8OpenMesh11ArrayKernel15halfedge_handleENS_12VertexHandleE(ptr noundef nonnull align 8 dereferenceable(368) %87, i32 %549)
  %551 = getelementptr inbounds %"struct.OpenMesh::HalfedgeHandle", ptr %73, i32 0, i32 0
  %552 = getelementptr inbounds %"class.OpenMesh::BaseHandle", ptr %551, i32 0, i32 0
  store i32 %550, ptr %552, align 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %16, ptr align 4 %73, i64 4, i1 false)
  call void @llvm.lifetime.end.p0(i64 4, ptr %73) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %75) #7
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %76, ptr align 4 %16, i64 4, i1 false)
  %553 = getelementptr inbounds %"struct.OpenMesh::HalfedgeHandle", ptr %76, i32 0, i32 0
  %554 = getelementptr inbounds %"class.OpenMesh::BaseHandle", ptr %553, i32 0, i32 0
  %555 = load i32, ptr %554, align 4
  %556 = call i32 @_ZNK8OpenMesh11ArrayKernel20prev_halfedge_handleENS_14HalfedgeHandleE(ptr noundef nonnull align 8 dereferenceable(368) %87, i32 %555)
  %557 = getelementptr inbounds %"struct.OpenMesh::HalfedgeHandle", ptr %75, i32 0, i32 0
  %558 = getelementptr inbounds %"class.OpenMesh::BaseHandle", ptr %557, i32 0, i32 0
  store i32 %556, ptr %558, align 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %17, ptr align 4 %75, i64 4, i1 false)
  call void @llvm.lifetime.end.p0(i64 4, ptr %75) #7
  %559 = call noundef zeroext i1 @_ZNK8OpenMesh10BaseHandle8is_validEv(ptr noundef nonnull align 4 dereferenceable(4) %17)
  br i1 %559, label %560, label %561

560:                                              ; preds = %546
  br label %563

561:                                              ; preds = %546
  call void @__assert_fail(ptr noundef @.str.11, ptr noundef @.str.4, i32 noundef 277, ptr noundef @__PRETTY_FUNCTION__._ZN8OpenMesh16PolyConnectivity8add_faceEPKNS_12VertexHandleEm) #8
  unreachable

562:                                              ; No predecessors!
  br label %563

563:                                              ; preds = %562, %560
  %564 = call noundef zeroext i1 @_ZNK8OpenMesh10BaseHandle8is_validEv(ptr noundef nonnull align 4 dereferenceable(4) %16)
  br i1 %564, label %565, label %566

565:                                              ; preds = %563
  br label %568

566:                                              ; preds = %563
  call void @__assert_fail(ptr noundef @.str.14, ptr noundef @.str.4, i32 noundef 278, ptr noundef @__PRETTY_FUNCTION__._ZN8OpenMesh16PolyConnectivity8add_faceEPKNS_12VertexHandleEm) #8
  unreachable

567:                                              ; No predecessors!
  br label %568

568:                                              ; preds = %567, %565
  call void @llvm.lifetime.start.p0(i64 8, ptr %77) #7
  %569 = call i64 @_ZSt9make_pairIRN8OpenMesh14HalfedgeHandleES2_ESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS4_INS5_IT0_E4typeEE6__typeEEOS6_OSB_(ptr noundef nonnull align 4 dereferenceable(4) %17, ptr noundef nonnull align 4 dereferenceable(4) %14)
  store i64 %569, ptr %77, align 4
  %570 = getelementptr inbounds %"class.OpenMesh::PolyConnectivity", ptr %87, i32 0, i32 2
  %571 = load i64, ptr %20, align 8, !tbaa !9
  %572 = add i64 %571, 1
  store i64 %572, ptr %20, align 8, !tbaa !9
  %573 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNSt6vectorISt4pairIN8OpenMesh14HalfedgeHandleES2_ESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %570, i64 noundef %571) #7
  %574 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNSt4pairIN8OpenMesh14HalfedgeHandleES1_EaSEOS2_(ptr noundef nonnull align 4 dereferenceable(8) %573, ptr noundef nonnull align 4 dereferenceable(8) %77) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %77) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %78) #7
  %575 = call i64 @_ZSt9make_pairIRN8OpenMesh14HalfedgeHandleES2_ESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS4_INS5_IT0_E4typeEE6__typeEEOS6_OSB_(ptr noundef nonnull align 4 dereferenceable(4) %15, ptr noundef nonnull align 4 dereferenceable(4) %16)
  store i64 %575, ptr %78, align 4
  %576 = getelementptr inbounds %"class.OpenMesh::PolyConnectivity", ptr %87, i32 0, i32 2
  %577 = load i64, ptr %20, align 8, !tbaa !9
  %578 = add i64 %577, 1
  store i64 %578, ptr %20, align 8, !tbaa !9
  %579 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNSt6vectorISt4pairIN8OpenMesh14HalfedgeHandleES2_ESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %576, i64 noundef %577) #7
  %580 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNSt4pairIN8OpenMesh14HalfedgeHandleES1_EaSEOS2_(ptr noundef nonnull align 4 dereferenceable(8) %579, ptr noundef nonnull align 4 dereferenceable(8) %78) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %78) #7
  br label %581

581:                                              ; preds = %568, %533
  br label %582

582:                                              ; preds = %581, %511, %487, %474
  call void @llvm.lifetime.start.p0(i64 8, ptr %79) #7
  %583 = call i64 @_ZSt9make_pairIRN8OpenMesh14HalfedgeHandleES2_ESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS4_INS5_IT0_E4typeEE6__typeEEOS6_OSB_(ptr noundef nonnull align 4 dereferenceable(4) %13, ptr noundef nonnull align 4 dereferenceable(4) %12)
  store i64 %583, ptr %79, align 4
  %584 = getelementptr inbounds %"class.OpenMesh::PolyConnectivity", ptr %87, i32 0, i32 2
  %585 = load i64, ptr %20, align 8, !tbaa !9
  %586 = add i64 %585, 1
  store i64 %586, ptr %20, align 8, !tbaa !9
  %587 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNSt6vectorISt4pairIN8OpenMesh14HalfedgeHandleES2_ESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %584, i64 noundef %585) #7
  %588 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNSt4pairIN8OpenMesh14HalfedgeHandleES1_EaSEOS2_(ptr noundef nonnull align 4 dereferenceable(8) %587, ptr noundef nonnull align 4 dereferenceable(8) %79) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %79) #7
  br label %602

589:                                              ; preds = %449
  call void @llvm.lifetime.start.p0(i64 4, ptr %80) #7
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %81, ptr align 4 %8, i64 4, i1 false)
  %590 = getelementptr inbounds %"struct.OpenMesh::VertexHandle", ptr %81, i32 0, i32 0
  %591 = getelementptr inbounds %"class.OpenMesh::BaseHandle", ptr %590, i32 0, i32 0
  %592 = load i32, ptr %591, align 4
  %593 = call i32 @_ZNK8OpenMesh11ArrayKernel15halfedge_handleENS_12VertexHandleE(ptr noundef nonnull align 8 dereferenceable(368) %87, i32 %592)
  %594 = getelementptr inbounds %"struct.OpenMesh::HalfedgeHandle", ptr %80, i32 0, i32 0
  %595 = getelementptr inbounds %"class.OpenMesh::BaseHandle", ptr %594, i32 0, i32 0
  store i32 %593, ptr %595, align 4
  %596 = call noundef zeroext i1 @_ZNK8OpenMesh10BaseHandleeqERKS0_(ptr noundef nonnull align 4 dereferenceable(4) %80, ptr noundef nonnull align 4 dereferenceable(4) %12)
  %597 = getelementptr inbounds %"class.OpenMesh::PolyConnectivity", ptr %87, i32 0, i32 1
  %598 = load i64, ptr %10, align 8, !tbaa !9
  %599 = call noundef nonnull align 4 dereferenceable(6) ptr @_ZNSt6vectorIN8OpenMesh16PolyConnectivity15AddFaceEdgeInfoESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %597, i64 noundef %598) #7
  %600 = getelementptr inbounds %"struct.OpenMesh::PolyConnectivity::AddFaceEdgeInfo", ptr %599, i32 0, i32 2
  %601 = zext i1 %596 to i8
  store i8 %601, ptr %600, align 1, !tbaa !17
  call void @llvm.lifetime.end.p0(i64 4, ptr %80) #7
  br label %602

602:                                              ; preds = %589, %582
  %603 = getelementptr inbounds %"class.OpenMesh::PolyConnectivity", ptr %87, i32 0, i32 1
  %604 = load i64, ptr %9, align 8, !tbaa !9
  %605 = call noundef nonnull align 4 dereferenceable(6) ptr @_ZNSt6vectorIN8OpenMesh16PolyConnectivity15AddFaceEdgeInfoESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %603, i64 noundef %604) #7
  %606 = getelementptr inbounds %"struct.OpenMesh::PolyConnectivity::AddFaceEdgeInfo", ptr %605, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %82, ptr align 4 %606, i64 4, i1 false)
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %83, ptr align 4 %4, i64 4, i1 false)
  %607 = getelementptr inbounds %"struct.OpenMesh::HalfedgeHandle", ptr %82, i32 0, i32 0
  %608 = getelementptr inbounds %"class.OpenMesh::BaseHandle", ptr %607, i32 0, i32 0
  %609 = load i32, ptr %608, align 4
  %610 = getelementptr inbounds %"struct.OpenMesh::FaceHandle", ptr %83, i32 0, i32 0
  %611 = getelementptr inbounds %"class.OpenMesh::BaseHandle", ptr %610, i32 0, i32 0
  %612 = load i32, ptr %611, align 4
  call void @_ZN8OpenMesh11ArrayKernel15set_face_handleENS_14HalfedgeHandleENS_10FaceHandleE(ptr noundef nonnull align 8 dereferenceable(368) %87, i32 %609, i32 %612)
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #7
  br label %613

613:                                              ; preds = %602
  %614 = load i64, ptr %9, align 8, !tbaa !9
  %615 = add i64 %614, 1
  store i64 %615, ptr %9, align 8, !tbaa !9
  %616 = load i64, ptr %10, align 8, !tbaa !9
  %617 = add i64 %616, 1
  store i64 %617, ptr %10, align 8, !tbaa !9
  %618 = load i64, ptr %11, align 8, !tbaa !9
  %619 = load i64, ptr %10, align 8, !tbaa !9
  %620 = urem i64 %619, %618
  store i64 %620, ptr %10, align 8, !tbaa !9
  br label %404, !llvm.loop !25

621:                                              ; preds = %404
  store i64 0, ptr %9, align 8, !tbaa !9
  br label %622

622:                                              ; preds = %641, %621
  %623 = load i64, ptr %9, align 8, !tbaa !9
  %624 = load i64, ptr %20, align 8, !tbaa !9
  %625 = icmp ult i64 %623, %624
  br i1 %625, label %626, label %644

626:                                              ; preds = %622
  %627 = getelementptr inbounds %"class.OpenMesh::PolyConnectivity", ptr %87, i32 0, i32 2
  %628 = load i64, ptr %9, align 8, !tbaa !9
  %629 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNSt6vectorISt4pairIN8OpenMesh14HalfedgeHandleES2_ESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %627, i64 noundef %628) #7
  %630 = getelementptr inbounds %"struct.std::pair", ptr %629, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %84, ptr align 4 %630, i64 4, i1 false)
  %631 = getelementptr inbounds %"class.OpenMesh::PolyConnectivity", ptr %87, i32 0, i32 2
  %632 = load i64, ptr %9, align 8, !tbaa !9
  %633 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNSt6vectorISt4pairIN8OpenMesh14HalfedgeHandleES2_ESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %631, i64 noundef %632) #7
  %634 = getelementptr inbounds %"struct.std::pair", ptr %633, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %85, ptr align 4 %634, i64 4, i1 false)
  %635 = getelementptr inbounds %"struct.OpenMesh::HalfedgeHandle", ptr %84, i32 0, i32 0
  %636 = getelementptr inbounds %"class.OpenMesh::BaseHandle", ptr %635, i32 0, i32 0
  %637 = load i32, ptr %636, align 4
  %638 = getelementptr inbounds %"struct.OpenMesh::HalfedgeHandle", ptr %85, i32 0, i32 0
  %639 = getelementptr inbounds %"class.OpenMesh::BaseHandle", ptr %638, i32 0, i32 0
  %640 = load i32, ptr %639, align 4
  call void @_ZN8OpenMesh11ArrayKernel24set_next_halfedge_handleENS_14HalfedgeHandleES1_(ptr noundef nonnull align 8 dereferenceable(368) %87, i32 %637, i32 %640)
  br label %641

641:                                              ; preds = %626
  %642 = load i64, ptr %9, align 8, !tbaa !9
  %643 = add i64 %642, 1
  store i64 %643, ptr %9, align 8, !tbaa !9
  br label %622, !llvm.loop !26

644:                                              ; preds = %622
  store i64 0, ptr %9, align 8, !tbaa !9
  br label %645

645:                                              ; preds = %664, %644
  %646 = load i64, ptr %9, align 8, !tbaa !9
  %647 = load i64, ptr %11, align 8, !tbaa !9
  %648 = icmp ult i64 %646, %647
  br i1 %648, label %649, label %667

649:                                              ; preds = %645
  %650 = getelementptr inbounds %"class.OpenMesh::PolyConnectivity", ptr %87, i32 0, i32 1
  %651 = load i64, ptr %9, align 8, !tbaa !9
  %652 = call noundef nonnull align 4 dereferenceable(6) ptr @_ZNSt6vectorIN8OpenMesh16PolyConnectivity15AddFaceEdgeInfoESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %650, i64 noundef %651) #7
  %653 = getelementptr inbounds %"struct.OpenMesh::PolyConnectivity::AddFaceEdgeInfo", ptr %652, i32 0, i32 2
  %654 = load i8, ptr %653, align 1, !tbaa !17, !range !18, !noundef !19
  %655 = trunc i8 %654 to i1
  br i1 %655, label %656, label %663

656:                                              ; preds = %649
  %657 = load ptr, ptr %6, align 8, !tbaa !5
  %658 = load i64, ptr %9, align 8, !tbaa !9
  %659 = getelementptr inbounds %"struct.OpenMesh::VertexHandle", ptr %657, i64 %658
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %86, ptr align 4 %659, i64 4, i1 false)
  %660 = getelementptr inbounds %"struct.OpenMesh::VertexHandle", ptr %86, i32 0, i32 0
  %661 = getelementptr inbounds %"class.OpenMesh::BaseHandle", ptr %660, i32 0, i32 0
  %662 = load i32, ptr %661, align 4
  call void @_ZN8OpenMesh16PolyConnectivity24adjust_outgoing_halfedgeENS_12VertexHandleE(ptr noundef nonnull align 8 dereferenceable(416) %87, i32 %662)
  br label %663

663:                                              ; preds = %656, %649
  br label %664

664:                                              ; preds = %663
  %665 = load i64, ptr %9, align 8, !tbaa !9
  %666 = add i64 %665, 1
  store i64 %666, ptr %9, align 8, !tbaa !9
  br label %645, !llvm.loop !27

667:                                              ; preds = %645
  store i32 1, ptr %22, align 4
  br label %668

668:                                              ; preds = %667, %258, %171, %118
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #7
  %669 = getelementptr inbounds %"struct.OpenMesh::FaceHandle", ptr %4, i32 0, i32 0
  %670 = getelementptr inbounds %"class.OpenMesh::BaseHandle", ptr %669, i32 0, i32 0
  %671 = load i32, ptr %670, align 4
  ret i32 %671
}

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) #5

declare noundef nonnull align 8 dereferenceable(224) ptr @_Z5omerrv() #6

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK8OpenMesh10BaseHandleneERKS0_(ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4)) #1 align 2

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

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

; Function Attrs: mustprogress uwtable
declare dso_local i64 @_ZSt9make_pairIRN8OpenMesh14HalfedgeHandleES2_ESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS4_INS5_IT0_E4typeEE6__typeEEOS6_OSB_(ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4)) #0

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local i32 @_ZN8OpenMesh11ArrayKernel8new_edgeENS_12VertexHandleES1_(ptr noundef nonnull align 8 dereferenceable(368), i32, i32) #5 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local i32 @_ZN8OpenMesh11ArrayKernel8new_faceEv(ptr noundef nonnull align 8 dereferenceable(368)) #5 align 2

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

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

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"long", !7, i64 0}
!11 = !{!12, !16, i64 4}
!12 = !{!"_ZTSN8OpenMesh16PolyConnectivity15AddFaceEdgeInfoE", !13, i64 0, !16, i64 4, !16, i64 5}
!13 = !{!"_ZTSN8OpenMesh14HalfedgeHandleE", !14, i64 0}
!14 = !{!"_ZTSN8OpenMesh10BaseHandleE", !15, i64 0}
!15 = !{!"int", !7, i64 0}
!16 = !{!"bool", !7, i64 0}
!17 = !{!12, !16, i64 5}
!18 = !{i8 0, i8 2}
!19 = !{}
!20 = distinct !{!20, !21}
!21 = !{!"llvm.loop.mustprogress"}
!22 = distinct !{!22, !21}
!23 = distinct !{!23, !21}
!24 = distinct !{!24, !21}
!25 = distinct !{!25, !21}
!26 = distinct !{!26, !21}
!27 = distinct !{!27, !21}


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

%"struct.OpenMesh::FaceHandle" = type { %"class.OpenMesh::BaseHandle" }
%"class.OpenMesh::BaseHandle" = type { i32 }
%"struct.OpenMesh::VertexHandle" = type { %"class.OpenMesh::BaseHandle" }
%"struct.OpenMesh::HalfedgeHandle" = type { %"class.OpenMesh::BaseHandle" }
%"struct.std::pair" = type { %"struct.OpenMesh::HalfedgeHandle", %"struct.OpenMesh::HalfedgeHandle" }

@_ZN8OpenMesh16PolyConnectivity17InvalidFaceHandleE = external dso_local local_unnamed_addr global %"struct.OpenMesh::FaceHandle", align 4
@.str.4 = external hidden unnamed_addr constant [109 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [6 x i8], align 1
@__PRETTY_FUNCTION__._ZN8OpenMesh16PolyConnectivity8add_faceEPKNS_12VertexHandleEm = external hidden unnamed_addr constant [96 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [35 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [46 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [22 x i8], align 1

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN8OpenMesh12VertexHandleC2Ei(ptr noundef nonnull align 4 dereferenceable(4), i32 noundef) unnamed_addr #0 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN8OpenMesh14HalfedgeHandleC2Ei(ptr noundef nonnull align 4 dereferenceable(4), i32 noundef) unnamed_addr #1 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK8OpenMesh10BaseHandle8is_validEv(ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #1 align 2

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local i32 @_ZN8OpenMesh16PolyConnectivity8add_faceEPKNS_12VertexHandleEm(ptr noundef nonnull align 8 dereferenceable(416) %0, ptr nocapture noundef readonly %1, i64 noundef %2) local_unnamed_addr #0 align 2 {
  %4 = alloca %"struct.OpenMesh::VertexHandle", align 4
  %5 = alloca %"struct.OpenMesh::HalfedgeHandle", align 4
  %6 = alloca %"struct.OpenMesh::HalfedgeHandle", align 4
  %7 = alloca %"struct.OpenMesh::HalfedgeHandle", align 4
  %8 = alloca %"struct.OpenMesh::HalfedgeHandle", align 4
  %9 = alloca %"struct.OpenMesh::HalfedgeHandle", align 4
  %10 = alloca %"struct.OpenMesh::HalfedgeHandle", align 4
  %11 = alloca %"struct.OpenMesh::HalfedgeHandle", align 4
  %12 = alloca %"struct.OpenMesh::HalfedgeHandle", align 4
  %13 = alloca %"struct.OpenMesh::HalfedgeHandle", align 4
  %14 = alloca %"struct.std::pair", align 8
  %15 = alloca %"struct.std::pair", align 8
  %16 = alloca %"struct.std::pair", align 8
  %17 = alloca %"struct.std::pair", align 8
  %18 = alloca %"struct.std::pair", align 8
  %19 = alloca %"struct.OpenMesh::HalfedgeHandle", align 4
  %20 = alloca %"struct.std::pair", align 8
  %21 = alloca %"struct.std::pair", align 8
  %22 = alloca %"struct.std::pair", align 8
  %23 = alloca %"struct.std::pair", align 8
  %24 = alloca %"struct.OpenMesh::HalfedgeHandle", align 4
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %4) #7
  call void @_ZN8OpenMesh12VertexHandleC2Ei(ptr noundef nonnull align 4 dereferenceable(4) %4, i32 noundef -1)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %5) #7
  call void @_ZN8OpenMesh14HalfedgeHandleC2Ei(ptr noundef nonnull align 4 dereferenceable(4) %5, i32 noundef -1)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %6) #7
  call void @_ZN8OpenMesh14HalfedgeHandleC2Ei(ptr noundef nonnull align 4 dereferenceable(4) %6, i32 noundef -1)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %7) #7
  call void @_ZN8OpenMesh14HalfedgeHandleC2Ei(ptr noundef nonnull align 4 dereferenceable(4) %7, i32 noundef -1)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %8) #7
  call void @_ZN8OpenMesh14HalfedgeHandleC2Ei(ptr noundef nonnull align 4 dereferenceable(4) %8, i32 noundef -1)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %9) #7
  call void @_ZN8OpenMesh14HalfedgeHandleC2Ei(ptr noundef nonnull align 4 dereferenceable(4) %9, i32 noundef -1)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %10) #7
  call void @_ZN8OpenMesh14HalfedgeHandleC2Ei(ptr noundef nonnull align 4 dereferenceable(4) %10, i32 noundef -1)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %11) #7
  call void @_ZN8OpenMesh14HalfedgeHandleC2Ei(ptr noundef nonnull align 4 dereferenceable(4) %11, i32 noundef -1)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %12) #7
  call void @_ZN8OpenMesh14HalfedgeHandleC2Ei(ptr noundef nonnull align 4 dereferenceable(4) %12, i32 noundef -1)
  %25 = getelementptr inbounds i8, ptr %0, i64 368
  %26 = call noundef i64 @_ZNKSt6vectorIN8OpenMesh16PolyConnectivity15AddFaceEdgeInfoESaIS2_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %25) #7
  %27 = icmp ult i64 %26, %2
  br i1 %27, label %28, label %31

28:                                               ; preds = %3
  call void @_ZNSt6vectorIN8OpenMesh16PolyConnectivity15AddFaceEdgeInfoESaIS2_EE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24) %25, i64 noundef %2)
  %29 = getelementptr inbounds i8, ptr %0, i64 392
  %30 = mul i64 %2, 6
  call void @_ZNSt6vectorISt4pairIN8OpenMesh14HalfedgeHandleES2_ESaIS3_EE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24) %29, i64 noundef %30)
  br label %31

31:                                               ; preds = %28, %3
  %32 = icmp ugt i64 %2, 2
  br i1 %32, label %.preheader156, label %33

33:                                               ; preds = %31
  call void @__assert_fail(ptr noundef nonnull @.str.5, ptr noundef nonnull @.str.4, i32 noundef 142, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN8OpenMesh16PolyConnectivity8add_faceEPKNS_12VertexHandleEm) #8
  unreachable

.preheader155:                                    ; preds = %56
  %34 = getelementptr inbounds i8, ptr %0, i64 392
  br label %61

.preheader156:                                    ; preds = %31, %56
  %.0176 = phi i64 [ %57, %56 ], [ 0, %31 ]
  %.0140175 = phi i64 [ %60, %56 ], [ 1, %31 ]
  %35 = getelementptr inbounds %"struct.OpenMesh::VertexHandle", ptr %1, i64 %.0176
  %.sroa.054.0.copyload = load i32, ptr %35, align 4
  %36 = call noundef zeroext i1 @_ZNK8OpenMesh16PolyConnectivity11is_boundaryENS_12VertexHandleE(ptr noundef nonnull align 8 dereferenceable(416) %0, i32 %.sroa.054.0.copyload)
  br i1 %36, label %37, label %.loopexit.sink.split

37:                                               ; preds = %.preheader156
  %.sroa.052.0.copyload = load i32, ptr %35, align 4
  %38 = getelementptr inbounds %"struct.OpenMesh::VertexHandle", ptr %1, i64 %.0140175
  %.sroa.051.0.copyload = load i32, ptr %38, align 4
  %39 = call i32 @_ZNK8OpenMesh16PolyConnectivity13find_halfedgeENS_12VertexHandleES1_(ptr noundef nonnull align 8 dereferenceable(416) %0, i32 %.sroa.052.0.copyload, i32 %.sroa.051.0.copyload)
  %40 = call noundef nonnull align 4 dereferenceable(6) ptr @_ZNSt6vectorIN8OpenMesh16PolyConnectivity15AddFaceEdgeInfoESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %25, i64 noundef %.0176) #7
  store i32 %39, ptr %40, align 4
  %41 = call noundef nonnull align 4 dereferenceable(6) ptr @_ZNSt6vectorIN8OpenMesh16PolyConnectivity15AddFaceEdgeInfoESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %25, i64 noundef %.0176) #7
  %42 = call noundef zeroext i1 @_ZNK8OpenMesh10BaseHandle8is_validEv(ptr noundef nonnull align 4 dereferenceable(4) %41)
  %43 = xor i1 %42, true
  %44 = call noundef nonnull align 4 dereferenceable(6) ptr @_ZNSt6vectorIN8OpenMesh16PolyConnectivity15AddFaceEdgeInfoESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %25, i64 noundef %.0176) #7
  %45 = getelementptr inbounds i8, ptr %44, i64 4
  %46 = zext i1 %43 to i8
  store i8 %46, ptr %45, align 4, !tbaa !5
  %47 = call noundef nonnull align 4 dereferenceable(6) ptr @_ZNSt6vectorIN8OpenMesh16PolyConnectivity15AddFaceEdgeInfoESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %25, i64 noundef %.0176) #7
  %48 = getelementptr inbounds i8, ptr %47, i64 5
  store i8 0, ptr %48, align 1, !tbaa !13
  %49 = call noundef nonnull align 4 dereferenceable(6) ptr @_ZNSt6vectorIN8OpenMesh16PolyConnectivity15AddFaceEdgeInfoESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %25, i64 noundef %.0176) #7
  %50 = getelementptr inbounds i8, ptr %49, i64 4
  %51 = load i8, ptr %50, align 4, !tbaa !5, !range !14, !noundef !15
  %52 = trunc nuw i8 %51 to i1
  br i1 %52, label %56, label %53

53:                                               ; preds = %37
  %54 = call noundef nonnull align 4 dereferenceable(6) ptr @_ZNSt6vectorIN8OpenMesh16PolyConnectivity15AddFaceEdgeInfoESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %25, i64 noundef %.0176) #7
  %.sroa.050.0.copyload = load i32, ptr %54, align 4
  %55 = call noundef zeroext i1 @_ZNK8OpenMesh16PolyConnectivity11is_boundaryENS_14HalfedgeHandleE(ptr noundef nonnull align 8 dereferenceable(416) %0, i32 %.sroa.050.0.copyload)
  br i1 %55, label %56, label %.loopexit.sink.split

56:                                               ; preds = %37, %53
  %57 = add nuw i64 %.0176, 1
  %58 = add i64 %.0140175, 1
  %59 = icmp eq i64 %58, %2
  %60 = select i1 %59, i64 0, i64 %58
  %exitcond.not = icmp eq i64 %57, %2
  br i1 %exitcond.not, label %.preheader155, label %.preheader156, !llvm.loop !16

61:                                               ; preds = %.preheader155, %128
  %.1179 = phi i64 [ 0, %.preheader155 ], [ %129, %128 ]
  %.1141178 = phi i64 [ 1, %.preheader155 ], [ %131, %128 ]
  %.0144177 = phi i64 [ 0, %.preheader155 ], [ %.1145, %128 ]
  %62 = call noundef nonnull align 4 dereferenceable(6) ptr @_ZNSt6vectorIN8OpenMesh16PolyConnectivity15AddFaceEdgeInfoESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %25, i64 noundef %.1179) #7
  %63 = getelementptr inbounds i8, ptr %62, i64 4
  %64 = load i8, ptr %63, align 4, !tbaa !5, !range !14, !noundef !15
  %65 = trunc nuw i8 %64 to i1
  br i1 %65, label %128, label %66

66:                                               ; preds = %61
  %67 = call noundef nonnull align 4 dereferenceable(6) ptr @_ZNSt6vectorIN8OpenMesh16PolyConnectivity15AddFaceEdgeInfoESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %25, i64 noundef %.1141178) #7
  %68 = getelementptr inbounds i8, ptr %67, i64 4
  %69 = load i8, ptr %68, align 4, !tbaa !5, !range !14, !noundef !15
  %70 = trunc nuw i8 %69 to i1
  br i1 %70, label %128, label %71

71:                                               ; preds = %66
  %72 = call noundef nonnull align 4 dereferenceable(6) ptr @_ZNSt6vectorIN8OpenMesh16PolyConnectivity15AddFaceEdgeInfoESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %25, i64 noundef %.1179) #7
  %73 = load i32, ptr %72, align 4
  store i32 %73, ptr %6, align 4
  %74 = call noundef nonnull align 4 dereferenceable(6) ptr @_ZNSt6vectorIN8OpenMesh16PolyConnectivity15AddFaceEdgeInfoESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %25, i64 noundef %.1141178) #7
  %75 = load i32, ptr %74, align 4
  store i32 %75, ptr %5, align 4
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %13) #7
  %.sroa.049.0.copyload = load i32, ptr %6, align 4
  %76 = call i32 @_ZNK8OpenMesh11ArrayKernel20next_halfedge_handleENS_14HalfedgeHandleE(ptr noundef nonnull align 8 dereferenceable(368) %0, i32 %.sroa.049.0.copyload)
  store i32 %76, ptr %13, align 4
  %77 = call noundef zeroext i1 @_ZNK8OpenMesh10BaseHandleneERKS0_(ptr noundef nonnull align 4 dereferenceable(4) %13, ptr noundef nonnull align 4 dereferenceable(4) %5)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %13) #7
  br i1 %77, label %78, label %128

78:                                               ; preds = %71
  %.sroa.047.0.copyload = load i32, ptr %5, align 4
  %79 = call i32 @_ZNK8OpenMesh11ArrayKernel24opposite_halfedge_handleENS_14HalfedgeHandleE(ptr noundef nonnull align 8 dereferenceable(368) %0, i32 %.sroa.047.0.copyload)
  store i32 %79, ptr %8, align 4
  %.sroa.045.0.copyload = load i32, ptr %6, align 4
  %80 = call i32 @_ZNK8OpenMesh11ArrayKernel24opposite_halfedge_handleENS_14HalfedgeHandleE(ptr noundef nonnull align 8 dereferenceable(368) %0, i32 %.sroa.045.0.copyload)
  store i32 %80, ptr %7, align 4
  %81 = load i32, ptr %8, align 4
  store i32 %81, ptr %10, align 4
  br label %82

82:                                               ; preds = %82, %78
  %.sroa.042.0.copyload = load i32, ptr %10, align 4
  %83 = call i32 @_ZNK8OpenMesh11ArrayKernel20next_halfedge_handleENS_14HalfedgeHandleE(ptr noundef nonnull align 8 dereferenceable(368) %0, i32 %.sroa.042.0.copyload)
  %84 = call i32 @_ZNK8OpenMesh11ArrayKernel24opposite_halfedge_handleENS_14HalfedgeHandleE(ptr noundef nonnull align 8 dereferenceable(368) %0, i32 %83)
  store i32 %84, ptr %10, align 4
  %85 = call noundef zeroext i1 @_ZNK8OpenMesh16PolyConnectivity11is_boundaryENS_14HalfedgeHandleE(ptr noundef nonnull align 8 dereferenceable(416) %0, i32 %84)
  br i1 %85, label %86, label %82, !llvm.loop !18

86:                                               ; preds = %82
  %.sroa.039.0.copyload = load i32, ptr %10, align 4
  %87 = call i32 @_ZNK8OpenMesh11ArrayKernel20next_halfedge_handleENS_14HalfedgeHandleE(ptr noundef nonnull align 8 dereferenceable(368) %0, i32 %.sroa.039.0.copyload)
  store i32 %87, ptr %9, align 4
  %88 = call noundef zeroext i1 @_ZNK8OpenMesh10BaseHandleeqERKS0_(ptr noundef nonnull align 4 dereferenceable(4) %10, ptr noundef nonnull align 4 dereferenceable(4) %6)
  br i1 %88, label %.loopexit.sink.split, label %89

89:                                               ; preds = %86
  %.sroa.038.0.copyload = load i32, ptr %10, align 4
  %90 = call noundef zeroext i1 @_ZNK8OpenMesh16PolyConnectivity11is_boundaryENS_14HalfedgeHandleE(ptr noundef nonnull align 8 dereferenceable(416) %0, i32 %.sroa.038.0.copyload)
  br i1 %90, label %92, label %91

91:                                               ; preds = %89
  call void @__assert_fail(ptr noundef nonnull @.str.9, ptr noundef nonnull @.str.4, i32 noundef 197, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN8OpenMesh16PolyConnectivity8add_faceEPKNS_12VertexHandleEm) #8
  unreachable

92:                                               ; preds = %89
  %.sroa.037.0.copyload = load i32, ptr %9, align 4
  %93 = call noundef zeroext i1 @_ZNK8OpenMesh16PolyConnectivity11is_boundaryENS_14HalfedgeHandleE(ptr noundef nonnull align 8 dereferenceable(416) %0, i32 %.sroa.037.0.copyload)
  br i1 %93, label %95, label %94

94:                                               ; preds = %92
  call void @__assert_fail(ptr noundef nonnull @.str.10, ptr noundef nonnull @.str.4, i32 noundef 198, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN8OpenMesh16PolyConnectivity8add_faceEPKNS_12VertexHandleEm) #8
  unreachable

95:                                               ; preds = %92
  %.sroa.035.0.copyload = load i32, ptr %6, align 4
  %96 = call i32 @_ZNK8OpenMesh11ArrayKernel20next_halfedge_handleENS_14HalfedgeHandleE(ptr noundef nonnull align 8 dereferenceable(368) %0, i32 %.sroa.035.0.copyload)
  store i32 %96, ptr %11, align 4
  %.sroa.033.0.copyload = load i32, ptr %5, align 4
  %97 = call i32 @_ZNK8OpenMesh11ArrayKernel20prev_halfedge_handleENS_14HalfedgeHandleE(ptr noundef nonnull align 8 dereferenceable(368) %0, i32 %.sroa.033.0.copyload)
  store i32 %97, ptr %12, align 4
  %98 = call noundef zeroext i1 @_ZNK8OpenMesh10BaseHandle8is_validEv(ptr noundef nonnull align 4 dereferenceable(4) %10)
  br i1 %98, label %100, label %99

99:                                               ; preds = %95
  call void @__assert_fail(ptr noundef nonnull @.str.11, ptr noundef nonnull @.str.4, i32 noundef 204, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN8OpenMesh16PolyConnectivity8add_faceEPKNS_12VertexHandleEm) #8
  unreachable

100:                                              ; preds = %95
  %101 = call noundef zeroext i1 @_ZNK8OpenMesh10BaseHandle8is_validEv(ptr noundef nonnull align 4 dereferenceable(4) %11)
  br i1 %101, label %103, label %102

102:                                              ; preds = %100
  call void @__assert_fail(ptr noundef nonnull @.str.12, ptr noundef nonnull @.str.4, i32 noundef 205, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN8OpenMesh16PolyConnectivity8add_faceEPKNS_12VertexHandleEm) #8
  unreachable

103:                                              ; preds = %100
  %104 = call noundef zeroext i1 @_ZNK8OpenMesh10BaseHandle8is_validEv(ptr noundef nonnull align 4 dereferenceable(4) %12)
  br i1 %104, label %106, label %105

105:                                              ; preds = %103
  call void @__assert_fail(ptr noundef nonnull @.str.13, ptr noundef nonnull @.str.4, i32 noundef 206, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN8OpenMesh16PolyConnectivity8add_faceEPKNS_12VertexHandleEm) #8
  unreachable

106:                                              ; preds = %103
  %107 = call noundef zeroext i1 @_ZNK8OpenMesh10BaseHandle8is_validEv(ptr noundef nonnull align 4 dereferenceable(4) %9)
  br i1 %107, label %109, label %108

108:                                              ; preds = %106
  call void @__assert_fail(ptr noundef nonnull @.str.14, ptr noundef nonnull @.str.4, i32 noundef 207, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN8OpenMesh16PolyConnectivity8add_faceEPKNS_12VertexHandleEm) #8
  unreachable

109:                                              ; preds = %106
  %110 = call noundef zeroext i1 @_ZNK8OpenMesh10BaseHandle8is_validEv(ptr noundef nonnull align 4 dereferenceable(4) %6)
  br i1 %110, label %112, label %111

111:                                              ; preds = %109
  call void @__assert_fail(ptr noundef nonnull @.str.15, ptr noundef nonnull @.str.4, i32 noundef 208, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN8OpenMesh16PolyConnectivity8add_faceEPKNS_12VertexHandleEm) #8
  unreachable

112:                                              ; preds = %109
  %113 = call noundef zeroext i1 @_ZNK8OpenMesh10BaseHandle8is_validEv(ptr noundef nonnull align 4 dereferenceable(4) %5)
  br i1 %113, label %115, label %114

114:                                              ; preds = %112
  call void @__assert_fail(ptr noundef nonnull @.str.16, ptr noundef nonnull @.str.4, i32 noundef 209, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN8OpenMesh16PolyConnectivity8add_faceEPKNS_12VertexHandleEm) #8
  unreachable

115:                                              ; preds = %112
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %14) #7
  %116 = call i64 @_ZSt9make_pairIRN8OpenMesh14HalfedgeHandleES2_ESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS4_INS5_IT0_E4typeEE6__typeEEOS6_OSB_(ptr noundef nonnull align 4 dereferenceable(4) %10, ptr noundef nonnull align 4 dereferenceable(4) %11)
  store i64 %116, ptr %14, align 8
  %117 = add i64 %.0144177, 1
  %118 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNSt6vectorISt4pairIN8OpenMesh14HalfedgeHandleES2_ESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %34, i64 noundef %.0144177) #7
  %119 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNSt4pairIN8OpenMesh14HalfedgeHandleES1_EaSEOS2_(ptr noundef nonnull align 4 dereferenceable(8) %118, ptr noundef nonnull align 4 dereferenceable(8) %14) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %15) #7
  %120 = call i64 @_ZSt9make_pairIRN8OpenMesh14HalfedgeHandleES2_ESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS4_INS5_IT0_E4typeEE6__typeEEOS6_OSB_(ptr noundef nonnull align 4 dereferenceable(4) %12, ptr noundef nonnull align 4 dereferenceable(4) %9)
  store i64 %120, ptr %15, align 8
  %121 = add i64 %.0144177, 2
  %122 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNSt6vectorISt4pairIN8OpenMesh14HalfedgeHandleES2_ESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %34, i64 noundef %117) #7
  %123 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNSt4pairIN8OpenMesh14HalfedgeHandleES1_EaSEOS2_(ptr noundef nonnull align 4 dereferenceable(8) %122, ptr noundef nonnull align 4 dereferenceable(8) %15) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %16) #7
  %124 = call i64 @_ZSt9make_pairIRN8OpenMesh14HalfedgeHandleES2_ESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS4_INS5_IT0_E4typeEE6__typeEEOS6_OSB_(ptr noundef nonnull align 4 dereferenceable(4) %6, ptr noundef nonnull align 4 dereferenceable(4) %5)
  store i64 %124, ptr %16, align 8
  %125 = add i64 %.0144177, 3
  %126 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNSt6vectorISt4pairIN8OpenMesh14HalfedgeHandleES2_ESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %34, i64 noundef %121) #7
  %127 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNSt4pairIN8OpenMesh14HalfedgeHandleES1_EaSEOS2_(ptr noundef nonnull align 4 dereferenceable(8) %126, ptr noundef nonnull align 4 dereferenceable(8) %16) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %16) #7
  br label %128

128:                                              ; preds = %61, %66, %115, %71
  %.1145 = phi i64 [ %.0144177, %61 ], [ %.0144177, %66 ], [ %125, %115 ], [ %.0144177, %71 ]
  %129 = add nuw i64 %.1179, 1
  %130 = add i64 %.1141178, 1
  %131 = urem i64 %130, %2
  %exitcond188.not = icmp eq i64 %129, %2
  br i1 %exitcond188.not, label %.preheader154, label %61, !llvm.loop !19

.preheader154:                                    ; preds = %128, %141
  %.2181 = phi i64 [ %142, %141 ], [ 0, %128 ]
  %.2142180 = phi i64 [ %144, %141 ], [ 1, %128 ]
  %132 = call noundef nonnull align 4 dereferenceable(6) ptr @_ZNSt6vectorIN8OpenMesh16PolyConnectivity15AddFaceEdgeInfoESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %25, i64 noundef %.2181) #7
  %133 = getelementptr inbounds i8, ptr %132, i64 4
  %134 = load i8, ptr %133, align 4, !tbaa !5, !range !14, !noundef !15
  %135 = trunc nuw i8 %134 to i1
  br i1 %135, label %136, label %141

136:                                              ; preds = %.preheader154
  %137 = getelementptr inbounds %"struct.OpenMesh::VertexHandle", ptr %1, i64 %.2181
  %.sroa.031.0.copyload = load i32, ptr %137, align 4
  %138 = getelementptr inbounds %"struct.OpenMesh::VertexHandle", ptr %1, i64 %.2142180
  %.sroa.030.0.copyload = load i32, ptr %138, align 4
  %139 = call i32 @_ZN8OpenMesh11ArrayKernel8new_edgeENS_12VertexHandleES1_(ptr noundef nonnull align 8 dereferenceable(368) %0, i32 %.sroa.031.0.copyload, i32 %.sroa.030.0.copyload)
  %140 = call noundef nonnull align 4 dereferenceable(6) ptr @_ZNSt6vectorIN8OpenMesh16PolyConnectivity15AddFaceEdgeInfoESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %25, i64 noundef %.2181) #7
  store i32 %139, ptr %140, align 4
  br label %141

141:                                              ; preds = %.preheader154, %136
  %142 = add nuw i64 %.2181, 1
  %143 = add i64 %.2142180, 1
  %144 = urem i64 %143, %2
  %exitcond189.not = icmp eq i64 %142, %2
  br i1 %exitcond189.not, label %145, label %.preheader154, !llvm.loop !20

145:                                              ; preds = %141
  %146 = call i32 @_ZN8OpenMesh11ArrayKernel8new_faceEv(ptr noundef nonnull align 8 dereferenceable(368) %0)
  %147 = add i64 %2, -1
  %148 = call noundef nonnull align 4 dereferenceable(6) ptr @_ZNSt6vectorIN8OpenMesh16PolyConnectivity15AddFaceEdgeInfoESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %25, i64 noundef %147) #7
  %.sroa.028.0.copyload = load i32, ptr %148, align 4
  call void @_ZN8OpenMesh11ArrayKernel19set_halfedge_handleENS_10FaceHandleENS_14HalfedgeHandleE(ptr noundef nonnull align 8 dereferenceable(368) %0, i32 %146, i32 %.sroa.028.0.copyload)
  br label %149

.preheader153:                                    ; preds = %233
  %.not187 = icmp eq i64 %.4148, 0
  br i1 %.not187, label %.preheader, label %.lr.ph

149:                                              ; preds = %145, %233
  %.3184 = phi i64 [ 0, %145 ], [ %235, %233 ]
  %.3143183 = phi i64 [ 1, %145 ], [ %237, %233 ]
  %.2146182 = phi i64 [ %.1145, %145 ], [ %.4148, %233 ]
  %150 = getelementptr inbounds %"struct.OpenMesh::VertexHandle", ptr %1, i64 %.3143183
  %151 = load i32, ptr %150, align 4
  store i32 %151, ptr %4, align 4
  %152 = call noundef nonnull align 4 dereferenceable(6) ptr @_ZNSt6vectorIN8OpenMesh16PolyConnectivity15AddFaceEdgeInfoESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %25, i64 noundef %.3184) #7
  %153 = load i32, ptr %152, align 4
  store i32 %153, ptr %6, align 4
  %154 = call noundef nonnull align 4 dereferenceable(6) ptr @_ZNSt6vectorIN8OpenMesh16PolyConnectivity15AddFaceEdgeInfoESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %25, i64 noundef %.3143183) #7
  %155 = load i32, ptr %154, align 4
  store i32 %155, ptr %5, align 4
  %156 = call noundef zeroext i1 @_ZNK8OpenMesh10BaseHandle8is_validEv(ptr noundef nonnull align 4 dereferenceable(4) %6)
  br i1 %156, label %158, label %157

157:                                              ; preds = %149
  call void @__assert_fail(ptr noundef nonnull @.str.15, ptr noundef nonnull @.str.4, i32 noundef 235, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN8OpenMesh16PolyConnectivity8add_faceEPKNS_12VertexHandleEm) #8
  unreachable

158:                                              ; preds = %149
  %159 = call noundef zeroext i1 @_ZNK8OpenMesh10BaseHandle8is_validEv(ptr noundef nonnull align 4 dereferenceable(4) %5)
  br i1 %159, label %161, label %160

160:                                              ; preds = %158
  call void @__assert_fail(ptr noundef nonnull @.str.16, ptr noundef nonnull @.str.4, i32 noundef 236, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN8OpenMesh16PolyConnectivity8add_faceEPKNS_12VertexHandleEm) #8
  unreachable

161:                                              ; preds = %158
  %162 = call noundef nonnull align 4 dereferenceable(6) ptr @_ZNSt6vectorIN8OpenMesh16PolyConnectivity15AddFaceEdgeInfoESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %25, i64 noundef %.3184) #7
  %163 = getelementptr inbounds i8, ptr %162, i64 4
  %164 = load i8, ptr %163, align 4, !tbaa !5, !range !14, !noundef !15
  %spec.select = zext nneg i8 %164 to i64
  %165 = call noundef nonnull align 4 dereferenceable(6) ptr @_ZNSt6vectorIN8OpenMesh16PolyConnectivity15AddFaceEdgeInfoESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %25, i64 noundef %.3143183) #7
  %166 = getelementptr inbounds i8, ptr %165, i64 4
  %167 = load i8, ptr %166, align 4, !tbaa !5, !range !14, !noundef !15
  %168 = trunc nuw i8 %167 to i1
  %169 = or disjoint i64 %spec.select, 2
  %.1150 = select i1 %168, i64 %169, i64 %spec.select
  %.not = icmp eq i64 %.1150, 0
  br i1 %.not, label %227, label %170

170:                                              ; preds = %161
  %.sroa.023.0.copyload = load i32, ptr %5, align 4
  %171 = call i32 @_ZNK8OpenMesh11ArrayKernel24opposite_halfedge_handleENS_14HalfedgeHandleE(ptr noundef nonnull align 8 dereferenceable(368) %0, i32 %.sroa.023.0.copyload)
  store i32 %171, ptr %8, align 4
  %.sroa.021.0.copyload = load i32, ptr %6, align 4
  %172 = call i32 @_ZNK8OpenMesh11ArrayKernel24opposite_halfedge_handleENS_14HalfedgeHandleE(ptr noundef nonnull align 8 dereferenceable(368) %0, i32 %.sroa.021.0.copyload)
  store i32 %172, ptr %7, align 4
  %173 = call noundef zeroext i1 @_ZNK8OpenMesh10BaseHandle8is_validEv(ptr noundef nonnull align 4 dereferenceable(4) %8)
  br i1 %173, label %175, label %174

174:                                              ; preds = %170
  call void @__assert_fail(ptr noundef nonnull @.str.17, ptr noundef nonnull @.str.4, i32 noundef 247, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN8OpenMesh16PolyConnectivity8add_faceEPKNS_12VertexHandleEm) #8
  unreachable

175:                                              ; preds = %170
  %176 = call noundef zeroext i1 @_ZNK8OpenMesh10BaseHandle8is_validEv(ptr noundef nonnull align 4 dereferenceable(4) %7)
  br i1 %176, label %178, label %177

177:                                              ; preds = %175
  call void @__assert_fail(ptr noundef nonnull @.str.18, ptr noundef nonnull @.str.4, i32 noundef 248, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN8OpenMesh16PolyConnectivity8add_faceEPKNS_12VertexHandleEm) #8
  unreachable

178:                                              ; preds = %175
  switch i64 %.1150, label %default.unreachable [
    i64 1, label %179
    i64 2, label %188
    i64 3, label %197
  ]

179:                                              ; preds = %178
  %.sroa.019.0.copyload = load i32, ptr %5, align 4
  %180 = call i32 @_ZNK8OpenMesh11ArrayKernel20prev_halfedge_handleENS_14HalfedgeHandleE(ptr noundef nonnull align 8 dereferenceable(368) %0, i32 %.sroa.019.0.copyload)
  store i32 %180, ptr %10, align 4
  %181 = call noundef zeroext i1 @_ZNK8OpenMesh10BaseHandle8is_validEv(ptr noundef nonnull align 4 dereferenceable(4) %10)
  br i1 %181, label %183, label %182

182:                                              ; preds = %179
  call void @__assert_fail(ptr noundef nonnull @.str.11, ptr noundef nonnull @.str.4, i32 noundef 255, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN8OpenMesh16PolyConnectivity8add_faceEPKNS_12VertexHandleEm) #8
  unreachable

183:                                              ; preds = %179
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %17) #7
  %184 = call i64 @_ZSt9make_pairIRN8OpenMesh14HalfedgeHandleES2_ESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS4_INS5_IT0_E4typeEE6__typeEEOS6_OSB_(ptr noundef nonnull align 4 dereferenceable(4) %10, ptr noundef nonnull align 4 dereferenceable(4) %7)
  store i64 %184, ptr %17, align 8
  %185 = add i64 %.2146182, 1
  %186 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNSt6vectorISt4pairIN8OpenMesh14HalfedgeHandleES2_ESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %34, i64 noundef %.2146182) #7
  %187 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNSt4pairIN8OpenMesh14HalfedgeHandleES1_EaSEOS2_(ptr noundef nonnull align 4 dereferenceable(8) %186, ptr noundef nonnull align 4 dereferenceable(8) %17) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %17) #7
  %.sroa.018.0.copyload = load i32, ptr %4, align 4
  %.sroa.017.0.copyload = load i32, ptr %7, align 4
  call void @_ZN8OpenMesh11ArrayKernel19set_halfedge_handleENS_12VertexHandleENS_14HalfedgeHandleE(ptr noundef nonnull align 8 dereferenceable(368) %0, i32 %.sroa.018.0.copyload, i32 %.sroa.017.0.copyload)
  br label %222

188:                                              ; preds = %178
  %.sroa.015.0.copyload = load i32, ptr %6, align 4
  %189 = call i32 @_ZNK8OpenMesh11ArrayKernel20next_halfedge_handleENS_14HalfedgeHandleE(ptr noundef nonnull align 8 dereferenceable(368) %0, i32 %.sroa.015.0.copyload)
  store i32 %189, ptr %9, align 4
  %190 = call noundef zeroext i1 @_ZNK8OpenMesh10BaseHandle8is_validEv(ptr noundef nonnull align 4 dereferenceable(4) %9)
  br i1 %190, label %192, label %191

191:                                              ; preds = %188
  call void @__assert_fail(ptr noundef nonnull @.str.14, ptr noundef nonnull @.str.4, i32 noundef 262, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN8OpenMesh16PolyConnectivity8add_faceEPKNS_12VertexHandleEm) #8
  unreachable

192:                                              ; preds = %188
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %18) #7
  %193 = call i64 @_ZSt9make_pairIRN8OpenMesh14HalfedgeHandleES2_ESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS4_INS5_IT0_E4typeEE6__typeEEOS6_OSB_(ptr noundef nonnull align 4 dereferenceable(4) %8, ptr noundef nonnull align 4 dereferenceable(4) %9)
  store i64 %193, ptr %18, align 8
  %194 = add i64 %.2146182, 1
  %195 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNSt6vectorISt4pairIN8OpenMesh14HalfedgeHandleES2_ESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %34, i64 noundef %.2146182) #7
  %196 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNSt4pairIN8OpenMesh14HalfedgeHandleES1_EaSEOS2_(ptr noundef nonnull align 4 dereferenceable(8) %195, ptr noundef nonnull align 4 dereferenceable(8) %18) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %18) #7
  %.sroa.014.0.copyload = load i32, ptr %4, align 4
  %.sroa.013.0.copyload = load i32, ptr %9, align 4
  call void @_ZN8OpenMesh11ArrayKernel19set_halfedge_handleENS_12VertexHandleENS_14HalfedgeHandleE(ptr noundef nonnull align 8 dereferenceable(368) %0, i32 %.sroa.014.0.copyload, i32 %.sroa.013.0.copyload)
  br label %222

197:                                              ; preds = %178
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %19) #7
  %.sroa.012.0.copyload = load i32, ptr %4, align 4
  %198 = call i32 @_ZNK8OpenMesh11ArrayKernel15halfedge_handleENS_12VertexHandleE(ptr noundef nonnull align 8 dereferenceable(368) %0, i32 %.sroa.012.0.copyload)
  store i32 %198, ptr %19, align 4
  %199 = call noundef zeroext i1 @_ZNK8OpenMesh10BaseHandle8is_validEv(ptr noundef nonnull align 4 dereferenceable(4) %19)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %19) #7
  %.sroa.08.0.copyload = load i32, ptr %4, align 4
  br i1 %199, label %205, label %200

200:                                              ; preds = %197
  %.sroa.010.0.copyload = load i32, ptr %7, align 4
  call void @_ZN8OpenMesh11ArrayKernel19set_halfedge_handleENS_12VertexHandleENS_14HalfedgeHandleE(ptr noundef nonnull align 8 dereferenceable(368) %0, i32 %.sroa.08.0.copyload, i32 %.sroa.010.0.copyload)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %20) #7
  %201 = call i64 @_ZSt9make_pairIRN8OpenMesh14HalfedgeHandleES2_ESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS4_INS5_IT0_E4typeEE6__typeEEOS6_OSB_(ptr noundef nonnull align 4 dereferenceable(4) %8, ptr noundef nonnull align 4 dereferenceable(4) %7)
  store i64 %201, ptr %20, align 8
  %202 = add i64 %.2146182, 1
  %203 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNSt6vectorISt4pairIN8OpenMesh14HalfedgeHandleES2_ESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %34, i64 noundef %.2146182) #7
  %204 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNSt4pairIN8OpenMesh14HalfedgeHandleES1_EaSEOS2_(ptr noundef nonnull align 4 dereferenceable(8) %203, ptr noundef nonnull align 4 dereferenceable(8) %20) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %20) #7
  br label %222

205:                                              ; preds = %197
  %206 = call i32 @_ZNK8OpenMesh11ArrayKernel15halfedge_handleENS_12VertexHandleE(ptr noundef nonnull align 8 dereferenceable(368) %0, i32 %.sroa.08.0.copyload)
  store i32 %206, ptr %9, align 4
  %207 = call i32 @_ZNK8OpenMesh11ArrayKernel20prev_halfedge_handleENS_14HalfedgeHandleE(ptr noundef nonnull align 8 dereferenceable(368) %0, i32 %206)
  store i32 %207, ptr %10, align 4
  %208 = call noundef zeroext i1 @_ZNK8OpenMesh10BaseHandle8is_validEv(ptr noundef nonnull align 4 dereferenceable(4) %10)
  br i1 %208, label %210, label %209

209:                                              ; preds = %205
  call void @__assert_fail(ptr noundef nonnull @.str.11, ptr noundef nonnull @.str.4, i32 noundef 277, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN8OpenMesh16PolyConnectivity8add_faceEPKNS_12VertexHandleEm) #8
  unreachable

210:                                              ; preds = %205
  %211 = call noundef zeroext i1 @_ZNK8OpenMesh10BaseHandle8is_validEv(ptr noundef nonnull align 4 dereferenceable(4) %9)
  br i1 %211, label %213, label %212

212:                                              ; preds = %210
  call void @__assert_fail(ptr noundef nonnull @.str.14, ptr noundef nonnull @.str.4, i32 noundef 278, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN8OpenMesh16PolyConnectivity8add_faceEPKNS_12VertexHandleEm) #8
  unreachable

213:                                              ; preds = %210
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %21) #7
  %214 = call i64 @_ZSt9make_pairIRN8OpenMesh14HalfedgeHandleES2_ESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS4_INS5_IT0_E4typeEE6__typeEEOS6_OSB_(ptr noundef nonnull align 4 dereferenceable(4) %10, ptr noundef nonnull align 4 dereferenceable(4) %7)
  store i64 %214, ptr %21, align 8
  %215 = add i64 %.2146182, 1
  %216 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNSt6vectorISt4pairIN8OpenMesh14HalfedgeHandleES2_ESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %34, i64 noundef %.2146182) #7
  %217 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNSt4pairIN8OpenMesh14HalfedgeHandleES1_EaSEOS2_(ptr noundef nonnull align 4 dereferenceable(8) %216, ptr noundef nonnull align 4 dereferenceable(8) %21) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %21) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %22) #7
  %218 = call i64 @_ZSt9make_pairIRN8OpenMesh14HalfedgeHandleES2_ESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS4_INS5_IT0_E4typeEE6__typeEEOS6_OSB_(ptr noundef nonnull align 4 dereferenceable(4) %8, ptr noundef nonnull align 4 dereferenceable(4) %9)
  store i64 %218, ptr %22, align 8
  %219 = add i64 %.2146182, 2
  %220 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNSt6vectorISt4pairIN8OpenMesh14HalfedgeHandleES2_ESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %34, i64 noundef %215) #7
  %221 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNSt4pairIN8OpenMesh14HalfedgeHandleES1_EaSEOS2_(ptr noundef nonnull align 4 dereferenceable(8) %220, ptr noundef nonnull align 4 dereferenceable(8) %22) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %22) #7
  br label %222

default.unreachable:                              ; preds = %178
  unreachable

222:                                              ; preds = %200, %213, %192, %183
  %.3147 = phi i64 [ %202, %200 ], [ %219, %213 ], [ %194, %192 ], [ %185, %183 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %23) #7
  %223 = call i64 @_ZSt9make_pairIRN8OpenMesh14HalfedgeHandleES2_ESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS4_INS5_IT0_E4typeEE6__typeEEOS6_OSB_(ptr noundef nonnull align 4 dereferenceable(4) %6, ptr noundef nonnull align 4 dereferenceable(4) %5)
  store i64 %223, ptr %23, align 8
  %224 = add i64 %.3147, 1
  %225 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNSt6vectorISt4pairIN8OpenMesh14HalfedgeHandleES2_ESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %34, i64 noundef %.3147) #7
  %226 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNSt4pairIN8OpenMesh14HalfedgeHandleES1_EaSEOS2_(ptr noundef nonnull align 4 dereferenceable(8) %225, ptr noundef nonnull align 4 dereferenceable(8) %23) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %23) #7
  br label %233

227:                                              ; preds = %161
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %24) #7
  %.sroa.05.0.copyload = load i32, ptr %4, align 4
  %228 = call i32 @_ZNK8OpenMesh11ArrayKernel15halfedge_handleENS_12VertexHandleE(ptr noundef nonnull align 8 dereferenceable(368) %0, i32 %.sroa.05.0.copyload)
  store i32 %228, ptr %24, align 4
  %229 = call noundef zeroext i1 @_ZNK8OpenMesh10BaseHandleeqERKS0_(ptr noundef nonnull align 4 dereferenceable(4) %24, ptr noundef nonnull align 4 dereferenceable(4) %5)
  %230 = call noundef nonnull align 4 dereferenceable(6) ptr @_ZNSt6vectorIN8OpenMesh16PolyConnectivity15AddFaceEdgeInfoESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %25, i64 noundef %.3143183) #7
  %231 = getelementptr inbounds i8, ptr %230, i64 5
  %232 = zext i1 %229 to i8
  store i8 %232, ptr %231, align 1, !tbaa !13
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %24) #7
  br label %233

233:                                              ; preds = %227, %222
  %.4148 = phi i64 [ %224, %222 ], [ %.2146182, %227 ]
  %234 = call noundef nonnull align 4 dereferenceable(6) ptr @_ZNSt6vectorIN8OpenMesh16PolyConnectivity15AddFaceEdgeInfoESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %25, i64 noundef %.3184) #7
  %.sroa.04.0.copyload = load i32, ptr %234, align 4
  call void @_ZN8OpenMesh11ArrayKernel15set_face_handleENS_14HalfedgeHandleENS_10FaceHandleE(ptr noundef nonnull align 8 dereferenceable(368) %0, i32 %.sroa.04.0.copyload, i32 %146)
  %235 = add nuw i64 %.3184, 1
  %236 = add i64 %.3143183, 1
  %237 = urem i64 %236, %2
  %exitcond190.not = icmp eq i64 %235, %2
  br i1 %exitcond190.not, label %.preheader153, label %149, !llvm.loop !21

.preheader:                                       ; preds = %.lr.ph, %.preheader153
  %umax = call i64 @llvm.umax.i64(i64 %2, i64 1)
  br label %242

.lr.ph:                                           ; preds = %.preheader153, %.lr.ph
  %.4185 = phi i64 [ %241, %.lr.ph ], [ 0, %.preheader153 ]
  %238 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNSt6vectorISt4pairIN8OpenMesh14HalfedgeHandleES2_ESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %34, i64 noundef %.4185) #7
  %.sroa.02.0.copyload = load i32, ptr %238, align 4
  %239 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNSt6vectorISt4pairIN8OpenMesh14HalfedgeHandleES2_ESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %34, i64 noundef %.4185) #7
  %240 = getelementptr inbounds i8, ptr %239, i64 4
  %.sroa.01.0.copyload = load i32, ptr %240, align 4
  call void @_ZN8OpenMesh11ArrayKernel24set_next_halfedge_handleENS_14HalfedgeHandleES1_(ptr noundef nonnull align 8 dereferenceable(368) %0, i32 %.sroa.02.0.copyload, i32 %.sroa.01.0.copyload)
  %241 = add nuw i64 %.4185, 1
  %exitcond191.not = icmp eq i64 %241, %.4148
  br i1 %exitcond191.not, label %.preheader, label %.lr.ph, !llvm.loop !22

242:                                              ; preds = %.preheader, %249
  %.5186 = phi i64 [ 0, %.preheader ], [ %250, %249 ]
  %243 = call noundef nonnull align 4 dereferenceable(6) ptr @_ZNSt6vectorIN8OpenMesh16PolyConnectivity15AddFaceEdgeInfoESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %25, i64 noundef %.5186) #7
  %244 = getelementptr inbounds i8, ptr %243, i64 5
  %245 = load i8, ptr %244, align 1, !tbaa !13, !range !14, !noundef !15
  %246 = trunc nuw i8 %245 to i1
  br i1 %246, label %247, label %249

247:                                              ; preds = %242
  %248 = getelementptr inbounds %"struct.OpenMesh::VertexHandle", ptr %1, i64 %.5186
  %.sroa.0.0.copyload = load i32, ptr %248, align 4
  call void @_ZN8OpenMesh16PolyConnectivity24adjust_outgoing_halfedgeENS_12VertexHandleE(ptr noundef nonnull align 8 dereferenceable(416) %0, i32 %.sroa.0.0.copyload)
  br label %249

249:                                              ; preds = %242, %247
  %250 = add nuw i64 %.5186, 1
  %exitcond192.not = icmp eq i64 %250, %umax
  br i1 %exitcond192.not, label %.loopexit, label %242, !llvm.loop !23

.loopexit.sink.split:                             ; preds = %53, %.preheader156, %86
  %.str.8.sink = phi ptr [ @.str.8, %86 ], [ @.str.6, %.preheader156 ], [ @.str.7, %53 ]
  %251 = call noundef nonnull align 8 dereferenceable(224) ptr @_Z5omerrv()
  %252 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %251, ptr noundef nonnull %.str.8.sink)
  %.sroa.0135.0.copyload137 = load i32, ptr @_ZN8OpenMesh16PolyConnectivity17InvalidFaceHandleE, align 4
  br label %.loopexit

.loopexit:                                        ; preds = %249, %.loopexit.sink.split
  %.sroa.0135.0 = phi i32 [ %.sroa.0135.0.copyload137, %.loopexit.sink.split ], [ %146, %249 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %12) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %11) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %10) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %9) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %8) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %7) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %6) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %5) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %4) #7
  ret i32 %.sroa.0135.0
}

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

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

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

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

declare noundef nonnull align 8 dereferenceable(224) ptr @_Z5omerrv() local_unnamed_addr #5

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local i64 @_ZSt9make_pairIRN8OpenMesh14HalfedgeHandleES2_ESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS4_INS5_IT0_E4typeEE6__typeEEOS6_OSB_(ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #0

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local i32 @_ZN8OpenMesh11ArrayKernel8new_edgeENS_12VertexHandleES1_(ptr noundef nonnull align 8 dereferenceable(368), i32, i32) local_unnamed_addr #4 align 2

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

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

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

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

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i64 @llvm.umax.i64(i64, i64) #6

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !12, i64 4}
!6 = !{!"_ZTSN8OpenMesh16PolyConnectivity15AddFaceEdgeInfoE", !7, i64 0, !12, i64 4, !12, i64 5}
!7 = !{!"_ZTSN8OpenMesh14HalfedgeHandleE", !8, i64 0}
!8 = !{!"_ZTSN8OpenMesh10BaseHandleE", !9, i64 0}
!9 = !{!"int", !10, i64 0}
!10 = !{!"omnipotent char", !11, i64 0}
!11 = !{!"Simple C++ TBAA"}
!12 = !{!"bool", !10, i64 0}
!13 = !{!6, !12, i64 5}
!14 = !{i8 0, i8 2}
!15 = !{}
!16 = distinct !{!16, !17}
!17 = !{!"llvm.loop.mustprogress"}
!18 = distinct !{!18, !17}
!19 = distinct !{!19, !17}
!20 = distinct !{!20, !17}
!21 = distinct !{!21, !17}
!22 = distinct !{!22, !17}
!23 = distinct !{!23, !17}


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