; LLVM IR from niessner/Matterport :: code/gaps/pkgs/R3Shapes/R3Mesh.ll (ZN6R3Mesh12CollapseEdgeEP10R3MeshEdgeRK7R3Point)

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

%class.R2Point = type { [2 x double] }
%class.RNRgb = type { [3 x double] }
%class.R3MeshEdge = type { ptr, [2 x ptr], [2 x ptr], double, i32, %class.RNFlags, double, i32, ptr }
%class.RNFlags = type { i64 }
%class.R3MeshVertex = type { ptr, %class.RNArray.0, %class.R3Point, %class.R3Vector, %class.R2Point, %class.RNRgb, double, i32, %class.RNFlags, double, i32, ptr }
%class.RNArray.0 = type { %class.RNVArray }
%class.RNVArray = type { ptr, i32, i32 }
%class.R3Point = type { [3 x double] }
%class.R3Vector = type { [3 x double] }
%class.R3MeshFace = type { ptr, [3 x ptr], [3 x ptr], %class.R3Plane, %class.R3Box, double, i32, i32, i32, i32, %class.RNFlags, double, i32, ptr }
%class.R3Plane = type { %class.R3Vector, double }
%class.R3Box = type { %class.R3Solid, %class.R3Point, %class.R3Point }
%class.R3Solid = type { %class.R3Shape }
%class.R3Shape = type { ptr }

@.str = external hidden unnamed_addr constant [41 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [88 x i8], align 1
@RN_EPSILON = external global double, align 8
@.str.22 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [9 x i8], align 1

declare void @_Z7RNAbortPKcz(ptr noundef, ...) #0

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(24) ptr @_ZNK6R3Mesh14VertexPositionEPK12R3MeshVertex(ptr noundef nonnull align 8 dereferenceable(272), ptr noundef) #2 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(24) ptr @_ZNK6R3Mesh11VertexColorEPK12R3MeshVertex(ptr noundef nonnull align 8 dereferenceable(272), ptr noundef) #2 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(16) ptr @_ZNK6R3Mesh19VertexTextureCoordsEPK12R3MeshVertex(ptr noundef nonnull align 8 dereferenceable(272), ptr noundef) #2 align 2

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef i32 @_ZNK6R3Mesh6NFacesEv(ptr noundef nonnull align 8 dereferenceable(272)) #3 align 2

declare noundef double @_Z10R3DistanceRK7R3PointS1_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24)) #0

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #4

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i32 @_Z12RNIsPositivedd(double noundef, double noundef) #2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef i32 @_ZNK6R3Mesh13VertexValenceEPK12R3MeshVertex(ptr noundef nonnull align 8 dereferenceable(272), ptr noundef) #3 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef ptr @_ZNK6R3Mesh12EdgeOnVertexEPK12R3MeshVertexi(ptr noundef nonnull align 8 dereferenceable(272), ptr noundef, i32 noundef) #3 align 2

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

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

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZNK6R3Mesh14FaceAcrossEdgeEPK10R3MeshEdgePK10R3MeshFace(ptr noundef nonnull align 8 dereferenceable(272), ptr noundef, ptr noundef) #2 align 2

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local noundef ptr @_ZN6R3Mesh12CollapseEdgeEP10R3MeshEdgeRK7R3Point(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef %1, ptr noundef nonnull align 8 dereferenceable(24) %2) unnamed_addr #5 align 2 {
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca [2 x ptr], align 16
  %9 = alloca [2 x ptr], align 16
  %10 = alloca [2 x [2 x ptr]], align 16
  %11 = alloca [2 x [2 x ptr]], align 16
  %12 = alloca [2 x ptr], align 16
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca ptr, align 8
  %16 = alloca ptr, align 8
  %17 = alloca i32, align 4
  %18 = alloca ptr, align 8
  %19 = alloca ptr, align 8
  %20 = alloca i32, align 4
  %21 = alloca ptr, align 8
  %22 = alloca i32, align 4
  %23 = alloca ptr, align 8
  %24 = alloca i32, align 4
  %25 = alloca i32, align 4
  %26 = alloca i32, align 4
  %27 = alloca i32, align 4
  %28 = alloca ptr, align 8
  %29 = alloca i32, align 4
  %30 = alloca ptr, align 8
  %31 = alloca i32, align 4
  %32 = alloca i32, align 4
  %33 = alloca i32, align 4
  %34 = alloca double, align 8
  %35 = alloca double, align 8
  %36 = alloca double, align 8
  %37 = alloca %class.R2Point, align 8
  %38 = alloca %class.R2Point, align 8
  %39 = alloca %class.R2Point, align 8
  %40 = alloca %class.RNRgb, align 8
  %41 = alloca %class.RNRgb, align 8
  %42 = alloca %class.RNRgb, align 8
  store ptr %0, ptr %5, align 8, !tbaa !5
  store ptr %1, ptr %6, align 8, !tbaa !5
  store ptr %2, ptr %7, align 8, !tbaa !5
  %43 = load ptr, ptr %5, align 8
  %44 = call noundef i32 @_ZNK6R3Mesh6NFacesEv(ptr noundef nonnull align 8 dereferenceable(272) %43)
  %45 = icmp sle i32 %44, 4
  br i1 %45, label %46, label %47

46:                                               ; preds = %3
  store ptr null, ptr %4, align 8
  br label %695

47:                                               ; preds = %3
  call void @llvm.lifetime.start.p0(i64 16, ptr %8) #7
  %48 = load ptr, ptr %6, align 8, !tbaa !5
  %49 = getelementptr inbounds %class.R3MeshEdge, ptr %48, i32 0, i32 1
  %50 = getelementptr inbounds [2 x ptr], ptr %49, i64 0, i64 0
  %51 = load ptr, ptr %50, align 8, !tbaa !5
  %52 = getelementptr inbounds [2 x ptr], ptr %8, i64 0, i64 0
  store ptr %51, ptr %52, align 16, !tbaa !5
  %53 = load ptr, ptr %6, align 8, !tbaa !5
  %54 = getelementptr inbounds %class.R3MeshEdge, ptr %53, i32 0, i32 1
  %55 = getelementptr inbounds [2 x ptr], ptr %54, i64 0, i64 1
  %56 = load ptr, ptr %55, align 8, !tbaa !5
  %57 = getelementptr inbounds [2 x ptr], ptr %8, i64 0, i64 1
  store ptr %56, ptr %57, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %9) #7
  %58 = load ptr, ptr %6, align 8, !tbaa !5
  %59 = getelementptr inbounds %class.R3MeshEdge, ptr %58, i32 0, i32 2
  %60 = getelementptr inbounds [2 x ptr], ptr %59, i64 0, i64 0
  %61 = load ptr, ptr %60, align 8, !tbaa !5
  %62 = getelementptr inbounds [2 x ptr], ptr %9, i64 0, i64 0
  store ptr %61, ptr %62, align 16, !tbaa !5
  %63 = load ptr, ptr %6, align 8, !tbaa !5
  %64 = getelementptr inbounds %class.R3MeshEdge, ptr %63, i32 0, i32 2
  %65 = getelementptr inbounds [2 x ptr], ptr %64, i64 0, i64 1
  %66 = load ptr, ptr %65, align 8, !tbaa !5
  %67 = getelementptr inbounds [2 x ptr], ptr %9, i64 0, i64 1
  store ptr %66, ptr %67, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr %10) #7
  call void @llvm.memset.p0.i64(ptr align 16 %10, i8 0, i64 32, i1 false)
  call void @llvm.lifetime.start.p0(i64 32, ptr %11) #7
  call void @llvm.memset.p0.i64(ptr align 16 %11, i8 0, i64 32, i1 false)
  call void @llvm.lifetime.start.p0(i64 16, ptr %12) #7
  call void @llvm.memset.p0.i64(ptr align 16 %12, i8 0, i64 16, i1 false)
  %68 = getelementptr inbounds [2 x ptr], ptr %9, i64 0, i64 0
  %69 = load ptr, ptr %68, align 16, !tbaa !5
  %70 = icmp ne ptr %69, null
  br i1 %70, label %71, label %122

71:                                               ; preds = %47
  %72 = getelementptr inbounds [2 x ptr], ptr %8, i64 0, i64 0
  %73 = load ptr, ptr %72, align 16, !tbaa !5
  %74 = load ptr, ptr %6, align 8, !tbaa !5
  %75 = getelementptr inbounds [2 x ptr], ptr %9, i64 0, i64 0
  %76 = load ptr, ptr %75, align 16, !tbaa !5
  %77 = call noundef ptr @_ZNK6R3Mesh16EdgeAcrossVertexEPK12R3MeshVertexPK10R3MeshEdgePK10R3MeshFace(ptr noundef nonnull align 8 dereferenceable(272) %43, ptr noundef %73, ptr noundef %74, ptr noundef %76)
  %78 = getelementptr inbounds [2 x [2 x ptr]], ptr %10, i64 0, i64 0
  %79 = getelementptr inbounds [2 x ptr], ptr %78, i64 0, i64 0
  store ptr %77, ptr %79, align 16, !tbaa !5
  %80 = getelementptr inbounds [2 x ptr], ptr %8, i64 0, i64 1
  %81 = load ptr, ptr %80, align 8, !tbaa !5
  %82 = load ptr, ptr %6, align 8, !tbaa !5
  %83 = getelementptr inbounds [2 x ptr], ptr %9, i64 0, i64 0
  %84 = load ptr, ptr %83, align 16, !tbaa !5
  %85 = call noundef ptr @_ZNK6R3Mesh16EdgeAcrossVertexEPK12R3MeshVertexPK10R3MeshEdgePK10R3MeshFace(ptr noundef nonnull align 8 dereferenceable(272) %43, ptr noundef %81, ptr noundef %82, ptr noundef %84)
  %86 = getelementptr inbounds [2 x [2 x ptr]], ptr %10, i64 0, i64 0
  %87 = getelementptr inbounds [2 x ptr], ptr %86, i64 0, i64 1
  store ptr %85, ptr %87, align 8, !tbaa !5
  %88 = getelementptr inbounds [2 x [2 x ptr]], ptr %10, i64 0, i64 0
  %89 = getelementptr inbounds [2 x ptr], ptr %88, i64 0, i64 1
  %90 = load ptr, ptr %89, align 8, !tbaa !5
  %91 = getelementptr inbounds [2 x ptr], ptr %8, i64 0, i64 1
  %92 = load ptr, ptr %91, align 8, !tbaa !5
  %93 = call noundef ptr @_ZNK6R3Mesh16VertexAcrossEdgeEPK10R3MeshEdgePK12R3MeshVertex(ptr noundef nonnull align 8 dereferenceable(272) %43, ptr noundef %90, ptr noundef %92)
  %94 = getelementptr inbounds [2 x ptr], ptr %12, i64 0, i64 0
  store ptr %93, ptr %94, align 16, !tbaa !5
  %95 = getelementptr inbounds [2 x ptr], ptr %12, i64 0, i64 0
  %96 = load ptr, ptr %95, align 16, !tbaa !5
  %97 = getelementptr inbounds [2 x [2 x ptr]], ptr %10, i64 0, i64 0
  %98 = getelementptr inbounds [2 x ptr], ptr %97, i64 0, i64 0
  %99 = load ptr, ptr %98, align 16, !tbaa !5
  %100 = getelementptr inbounds [2 x ptr], ptr %8, i64 0, i64 0
  %101 = load ptr, ptr %100, align 16, !tbaa !5
  %102 = call noundef ptr @_ZNK6R3Mesh16VertexAcrossEdgeEPK10R3MeshEdgePK12R3MeshVertex(ptr noundef nonnull align 8 dereferenceable(272) %43, ptr noundef %99, ptr noundef %101)
  %103 = icmp eq ptr %96, %102
  br i1 %103, label %105, label %104

104:                                              ; preds = %71
  call void (ptr, ...) @_Z7RNAbortPKcz(ptr noundef @.str, ptr noundef @.str.22, i32 noundef 1677, ptr noundef @.str.2)
  br label %105

105:                                              ; preds = %104, %71
  %106 = getelementptr inbounds [2 x [2 x ptr]], ptr %10, i64 0, i64 0
  %107 = getelementptr inbounds [2 x ptr], ptr %106, i64 0, i64 0
  %108 = load ptr, ptr %107, align 16, !tbaa !5
  %109 = getelementptr inbounds [2 x ptr], ptr %9, i64 0, i64 0
  %110 = load ptr, ptr %109, align 16, !tbaa !5
  %111 = call noundef ptr @_ZNK6R3Mesh14FaceAcrossEdgeEPK10R3MeshEdgePK10R3MeshFace(ptr noundef nonnull align 8 dereferenceable(272) %43, ptr noundef %108, ptr noundef %110)
  %112 = getelementptr inbounds [2 x [2 x ptr]], ptr %11, i64 0, i64 0
  %113 = getelementptr inbounds [2 x ptr], ptr %112, i64 0, i64 0
  store ptr %111, ptr %113, align 16, !tbaa !5
  %114 = getelementptr inbounds [2 x [2 x ptr]], ptr %10, i64 0, i64 0
  %115 = getelementptr inbounds [2 x ptr], ptr %114, i64 0, i64 1
  %116 = load ptr, ptr %115, align 8, !tbaa !5
  %117 = getelementptr inbounds [2 x ptr], ptr %9, i64 0, i64 0
  %118 = load ptr, ptr %117, align 16, !tbaa !5
  %119 = call noundef ptr @_ZNK6R3Mesh14FaceAcrossEdgeEPK10R3MeshEdgePK10R3MeshFace(ptr noundef nonnull align 8 dereferenceable(272) %43, ptr noundef %116, ptr noundef %118)
  %120 = getelementptr inbounds [2 x [2 x ptr]], ptr %11, i64 0, i64 0
  %121 = getelementptr inbounds [2 x ptr], ptr %120, i64 0, i64 1
  store ptr %119, ptr %121, align 8, !tbaa !5
  br label %122

122:                                              ; preds = %105, %47
  %123 = getelementptr inbounds [2 x ptr], ptr %9, i64 0, i64 1
  %124 = load ptr, ptr %123, align 8, !tbaa !5
  %125 = icmp ne ptr %124, null
  br i1 %125, label %126, label %177

126:                                              ; preds = %122
  %127 = getelementptr inbounds [2 x ptr], ptr %8, i64 0, i64 0
  %128 = load ptr, ptr %127, align 16, !tbaa !5
  %129 = load ptr, ptr %6, align 8, !tbaa !5
  %130 = getelementptr inbounds [2 x ptr], ptr %9, i64 0, i64 1
  %131 = load ptr, ptr %130, align 8, !tbaa !5
  %132 = call noundef ptr @_ZNK6R3Mesh16EdgeAcrossVertexEPK12R3MeshVertexPK10R3MeshEdgePK10R3MeshFace(ptr noundef nonnull align 8 dereferenceable(272) %43, ptr noundef %128, ptr noundef %129, ptr noundef %131)
  %133 = getelementptr inbounds [2 x [2 x ptr]], ptr %10, i64 0, i64 1
  %134 = getelementptr inbounds [2 x ptr], ptr %133, i64 0, i64 0
  store ptr %132, ptr %134, align 16, !tbaa !5
  %135 = getelementptr inbounds [2 x ptr], ptr %8, i64 0, i64 1
  %136 = load ptr, ptr %135, align 8, !tbaa !5
  %137 = load ptr, ptr %6, align 8, !tbaa !5
  %138 = getelementptr inbounds [2 x ptr], ptr %9, i64 0, i64 1
  %139 = load ptr, ptr %138, align 8, !tbaa !5
  %140 = call noundef ptr @_ZNK6R3Mesh16EdgeAcrossVertexEPK12R3MeshVertexPK10R3MeshEdgePK10R3MeshFace(ptr noundef nonnull align 8 dereferenceable(272) %43, ptr noundef %136, ptr noundef %137, ptr noundef %139)
  %141 = getelementptr inbounds [2 x [2 x ptr]], ptr %10, i64 0, i64 1
  %142 = getelementptr inbounds [2 x ptr], ptr %141, i64 0, i64 1
  store ptr %140, ptr %142, align 8, !tbaa !5
  %143 = getelementptr inbounds [2 x [2 x ptr]], ptr %10, i64 0, i64 1
  %144 = getelementptr inbounds [2 x ptr], ptr %143, i64 0, i64 1
  %145 = load ptr, ptr %144, align 8, !tbaa !5
  %146 = getelementptr inbounds [2 x ptr], ptr %8, i64 0, i64 1
  %147 = load ptr, ptr %146, align 8, !tbaa !5
  %148 = call noundef ptr @_ZNK6R3Mesh16VertexAcrossEdgeEPK10R3MeshEdgePK12R3MeshVertex(ptr noundef nonnull align 8 dereferenceable(272) %43, ptr noundef %145, ptr noundef %147)
  %149 = getelementptr inbounds [2 x ptr], ptr %12, i64 0, i64 1
  store ptr %148, ptr %149, align 8, !tbaa !5
  %150 = getelementptr inbounds [2 x ptr], ptr %12, i64 0, i64 1
  %151 = load ptr, ptr %150, align 8, !tbaa !5
  %152 = getelementptr inbounds [2 x [2 x ptr]], ptr %10, i64 0, i64 1
  %153 = getelementptr inbounds [2 x ptr], ptr %152, i64 0, i64 0
  %154 = load ptr, ptr %153, align 16, !tbaa !5
  %155 = getelementptr inbounds [2 x ptr], ptr %8, i64 0, i64 0
  %156 = load ptr, ptr %155, align 16, !tbaa !5
  %157 = call noundef ptr @_ZNK6R3Mesh16VertexAcrossEdgeEPK10R3MeshEdgePK12R3MeshVertex(ptr noundef nonnull align 8 dereferenceable(272) %43, ptr noundef %154, ptr noundef %156)
  %158 = icmp eq ptr %151, %157
  br i1 %158, label %160, label %159

159:                                              ; preds = %126
  call void (ptr, ...) @_Z7RNAbortPKcz(ptr noundef @.str, ptr noundef @.str.23, i32 noundef 1685, ptr noundef @.str.2)
  br label %160

160:                                              ; preds = %159, %126
  %161 = getelementptr inbounds [2 x [2 x ptr]], ptr %10, i64 0, i64 1
  %162 = getelementptr inbounds [2 x ptr], ptr %161, i64 0, i64 0
  %163 = load ptr, ptr %162, align 16, !tbaa !5
  %164 = getelementptr inbounds [2 x ptr], ptr %9, i64 0, i64 1
  %165 = load ptr, ptr %164, align 8, !tbaa !5
  %166 = call noundef ptr @_ZNK6R3Mesh14FaceAcrossEdgeEPK10R3MeshEdgePK10R3MeshFace(ptr noundef nonnull align 8 dereferenceable(272) %43, ptr noundef %163, ptr noundef %165)
  %167 = getelementptr inbounds [2 x [2 x ptr]], ptr %11, i64 0, i64 1
  %168 = getelementptr inbounds [2 x ptr], ptr %167, i64 0, i64 0
  store ptr %166, ptr %168, align 16, !tbaa !5
  %169 = getelementptr inbounds [2 x [2 x ptr]], ptr %10, i64 0, i64 1
  %170 = getelementptr inbounds [2 x ptr], ptr %169, i64 0, i64 1
  %171 = load ptr, ptr %170, align 8, !tbaa !5
  %172 = getelementptr inbounds [2 x ptr], ptr %9, i64 0, i64 1
  %173 = load ptr, ptr %172, align 8, !tbaa !5
  %174 = call noundef ptr @_ZNK6R3Mesh14FaceAcrossEdgeEPK10R3MeshEdgePK10R3MeshFace(ptr noundef nonnull align 8 dereferenceable(272) %43, ptr noundef %171, ptr noundef %173)
  %175 = getelementptr inbounds [2 x [2 x ptr]], ptr %11, i64 0, i64 1
  %176 = getelementptr inbounds [2 x ptr], ptr %175, i64 0, i64 1
  store ptr %174, ptr %176, align 8, !tbaa !5
  br label %177

177:                                              ; preds = %160, %122
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #7
  store i32 0, ptr %13, align 4, !tbaa !9
  br label %178

178:                                              ; preds = %255, %177
  %179 = load i32, ptr %13, align 4, !tbaa !9
  %180 = getelementptr inbounds [2 x ptr], ptr %8, i64 0, i64 0
  %181 = load ptr, ptr %180, align 16, !tbaa !5
  %182 = call noundef i32 @_ZNK6R3Mesh13VertexValenceEPK12R3MeshVertex(ptr noundef nonnull align 8 dereferenceable(272) %43, ptr noundef %181)
  %183 = icmp slt i32 %179, %182
  br i1 %183, label %185, label %184

184:                                              ; preds = %178
  store i32 2, ptr %14, align 4
  br label %258

185:                                              ; preds = %178
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #7
  %186 = getelementptr inbounds [2 x ptr], ptr %8, i64 0, i64 0
  %187 = load ptr, ptr %186, align 16, !tbaa !5
  %188 = load i32, ptr %13, align 4, !tbaa !9
  %189 = call noundef ptr @_ZNK6R3Mesh12EdgeOnVertexEPK12R3MeshVertexi(ptr noundef nonnull align 8 dereferenceable(272) %43, ptr noundef %187, i32 noundef %188)
  store ptr %189, ptr %15, align 8, !tbaa !5
  %190 = load ptr, ptr %15, align 8, !tbaa !5
  %191 = getelementptr inbounds [2 x [2 x ptr]], ptr %10, i64 0, i64 0
  %192 = getelementptr inbounds [2 x ptr], ptr %191, i64 0, i64 0
  %193 = load ptr, ptr %192, align 16, !tbaa !5
  %194 = icmp eq ptr %190, %193
  br i1 %194, label %201, label %195

195:                                              ; preds = %185
  %196 = load ptr, ptr %15, align 8, !tbaa !5
  %197 = getelementptr inbounds [2 x [2 x ptr]], ptr %10, i64 0, i64 1
  %198 = getelementptr inbounds [2 x ptr], ptr %197, i64 0, i64 0
  %199 = load ptr, ptr %198, align 16, !tbaa !5
  %200 = icmp eq ptr %196, %199
  br i1 %200, label %201, label %202

201:                                              ; preds = %195, %185
  store i32 4, ptr %14, align 4
  br label %252

202:                                              ; preds = %195
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #7
  %203 = load ptr, ptr %15, align 8, !tbaa !5
  %204 = getelementptr inbounds [2 x ptr], ptr %8, i64 0, i64 0
  %205 = load ptr, ptr %204, align 16, !tbaa !5
  %206 = call noundef ptr @_ZNK6R3Mesh16VertexAcrossEdgeEPK10R3MeshEdgePK12R3MeshVertex(ptr noundef nonnull align 8 dereferenceable(272) %43, ptr noundef %203, ptr noundef %205)
  store ptr %206, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #7
  store i32 0, ptr %17, align 4, !tbaa !9
  br label %207

207:                                              ; preds = %245, %202
  %208 = load i32, ptr %17, align 4, !tbaa !9
  %209 = getelementptr inbounds [2 x ptr], ptr %8, i64 0, i64 1
  %210 = load ptr, ptr %209, align 8, !tbaa !5
  %211 = call noundef i32 @_ZNK6R3Mesh13VertexValenceEPK12R3MeshVertex(ptr noundef nonnull align 8 dereferenceable(272) %43, ptr noundef %210)
  %212 = icmp slt i32 %208, %211
  br i1 %212, label %214, label %213

213:                                              ; preds = %207
  store i32 5, ptr %14, align 4
  br label %248

214:                                              ; preds = %207
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #7
  %215 = getelementptr inbounds [2 x ptr], ptr %8, i64 0, i64 1
  %216 = load ptr, ptr %215, align 8, !tbaa !5
  %217 = load i32, ptr %17, align 4, !tbaa !9
  %218 = call noundef ptr @_ZNK6R3Mesh12EdgeOnVertexEPK12R3MeshVertexi(ptr noundef nonnull align 8 dereferenceable(272) %43, ptr noundef %216, i32 noundef %217)
  store ptr %218, ptr %18, align 8, !tbaa !5
  %219 = load ptr, ptr %18, align 8, !tbaa !5
  %220 = getelementptr inbounds [2 x [2 x ptr]], ptr %10, i64 0, i64 0
  %221 = getelementptr inbounds [2 x ptr], ptr %220, i64 0, i64 1
  %222 = load ptr, ptr %221, align 8, !tbaa !5
  %223 = icmp eq ptr %219, %222
  br i1 %223, label %230, label %224

224:                                              ; preds = %214
  %225 = load ptr, ptr %18, align 8, !tbaa !5
  %226 = getelementptr inbounds [2 x [2 x ptr]], ptr %10, i64 0, i64 1
  %227 = getelementptr inbounds [2 x ptr], ptr %226, i64 0, i64 1
  %228 = load ptr, ptr %227, align 8, !tbaa !5
  %229 = icmp eq ptr %225, %228
  br i1 %229, label %230, label %231

230:                                              ; preds = %224, %214
  store i32 7, ptr %14, align 4
  br label %242

231:                                              ; preds = %224
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #7
  %232 = load ptr, ptr %18, align 8, !tbaa !5
  %233 = getelementptr inbounds [2 x ptr], ptr %8, i64 0, i64 1
  %234 = load ptr, ptr %233, align 8, !tbaa !5
  %235 = call noundef ptr @_ZNK6R3Mesh16VertexAcrossEdgeEPK10R3MeshEdgePK12R3MeshVertex(ptr noundef nonnull align 8 dereferenceable(272) %43, ptr noundef %232, ptr noundef %234)
  store ptr %235, ptr %19, align 8, !tbaa !5
  %236 = load ptr, ptr %16, align 8, !tbaa !5
  %237 = load ptr, ptr %19, align 8, !tbaa !5
  %238 = icmp eq ptr %236, %237
  br i1 %238, label %239, label %240

239:                                              ; preds = %231
  store ptr null, ptr %4, align 8
  store i32 1, ptr %14, align 4
  br label %241

240:                                              ; preds = %231
  store i32 0, ptr %14, align 4
  br label %241

241:                                              ; preds = %240, %239
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #7
  br label %242

242:                                              ; preds = %241, %230
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #7
  %243 = load i32, ptr %14, align 4
  switch i32 %243, label %248 [
    i32 0, label %244
    i32 7, label %245
  ]

244:                                              ; preds = %242
  br label %245

245:                                              ; preds = %244, %242
  %246 = load i32, ptr %17, align 4, !tbaa !9
  %247 = add nsw i32 %246, 1
  store i32 %247, ptr %17, align 4, !tbaa !9
  br label %207, !llvm.loop !11

248:                                              ; preds = %242, %213
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #7
  %249 = load i32, ptr %14, align 4
  switch i32 %249, label %251 [
    i32 5, label %250
  ]

250:                                              ; preds = %248
  store i32 0, ptr %14, align 4
  br label %251

251:                                              ; preds = %250, %248
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #7
  br label %252

252:                                              ; preds = %251, %201
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #7
  %253 = load i32, ptr %14, align 4
  switch i32 %253, label %258 [
    i32 0, label %254
    i32 4, label %255
  ]

254:                                              ; preds = %252
  br label %255

255:                                              ; preds = %254, %252
  %256 = load i32, ptr %13, align 4, !tbaa !9
  %257 = add nsw i32 %256, 1
  store i32 %257, ptr %13, align 4, !tbaa !9
  br label %178, !llvm.loop !13

258:                                              ; preds = %252, %184
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #7
  %259 = load i32, ptr %14, align 4
  switch i32 %259, label %694 [
    i32 2, label %260
  ]

260:                                              ; preds = %258
  %261 = getelementptr inbounds [2 x ptr], ptr %8, i64 0, i64 0
  %262 = load ptr, ptr %261, align 16, !tbaa !5
  %263 = getelementptr inbounds %class.R3MeshVertex, ptr %262, i32 0, i32 1
  %264 = load ptr, ptr %6, align 8, !tbaa !5
  call void @_ZN7RNArrayIP10R3MeshEdgeE6RemoveES1_(ptr noundef nonnull align 8 dereferenceable(16) %263, ptr noundef %264)
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #7
  store i32 0, ptr %20, align 4, !tbaa !9
  br label %265

265:                                              ; preds = %307, %260
  %266 = load i32, ptr %20, align 4, !tbaa !9
  %267 = getelementptr inbounds [2 x ptr], ptr %8, i64 0, i64 1
  %268 = load ptr, ptr %267, align 8, !tbaa !5
  %269 = getelementptr inbounds %class.R3MeshVertex, ptr %268, i32 0, i32 1
  %270 = call noundef i32 @_ZNK8RNVArray8NEntriesEv(ptr noundef nonnull align 8 dereferenceable(16) %269)
  %271 = icmp slt i32 %266, %270
  br i1 %271, label %273, label %272

272:                                              ; preds = %265
  store i32 8, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #7
  br label %310

273:                                              ; preds = %265
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #7
  %274 = getelementptr inbounds [2 x ptr], ptr %8, i64 0, i64 1
  %275 = load ptr, ptr %274, align 8, !tbaa !5
  %276 = getelementptr inbounds %class.R3MeshVertex, ptr %275, i32 0, i32 1
  %277 = load i32, ptr %20, align 4, !tbaa !9
  %278 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7RNArrayIP10R3MeshEdgeEixEi(ptr noundef nonnull align 8 dereferenceable(16) %276, i32 noundef %277)
  %279 = load ptr, ptr %278, align 8, !tbaa !5
  store ptr %279, ptr %21, align 8, !tbaa !5
  %280 = load ptr, ptr %21, align 8, !tbaa !5
  %281 = load ptr, ptr %6, align 8, !tbaa !5
  %282 = icmp eq ptr %280, %281
  br i1 %282, label %283, label %284

283:                                              ; preds = %273
  store i32 10, ptr %14, align 4
  br label %304

284:                                              ; preds = %273
  %285 = load ptr, ptr %21, align 8, !tbaa !5
  %286 = getelementptr inbounds [2 x [2 x ptr]], ptr %10, i64 0, i64 0
  %287 = getelementptr inbounds [2 x ptr], ptr %286, i64 0, i64 1
  %288 = load ptr, ptr %287, align 8, !tbaa !5
  %289 = icmp eq ptr %285, %288
  br i1 %289, label %290, label %291

290:                                              ; preds = %284
  store i32 10, ptr %14, align 4
  br label %304

291:                                              ; preds = %284
  %292 = load ptr, ptr %21, align 8, !tbaa !5
  %293 = getelementptr inbounds [2 x [2 x ptr]], ptr %10, i64 0, i64 1
  %294 = getelementptr inbounds [2 x ptr], ptr %293, i64 0, i64 1
  %295 = load ptr, ptr %294, align 8, !tbaa !5
  %296 = icmp eq ptr %292, %295
  br i1 %296, label %297, label %298

297:                                              ; preds = %291
  store i32 10, ptr %14, align 4
  br label %304

298:                                              ; preds = %291
  %299 = getelementptr inbounds [2 x ptr], ptr %8, i64 0, i64 0
  %300 = load ptr, ptr %299, align 16, !tbaa !5
  %301 = getelementptr inbounds %class.R3MeshVertex, ptr %300, i32 0, i32 1
  %302 = load ptr, ptr %21, align 8, !tbaa !5
  %303 = call noundef ptr @_ZN7RNArrayIP10R3MeshEdgeE6InsertES1_(ptr noundef nonnull align 8 dereferenceable(16) %301, ptr noundef %302)
  store i32 0, ptr %14, align 4
  br label %304

304:                                              ; preds = %298, %297, %290, %283
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #7
  %305 = load i32, ptr %14, align 4
  switch i32 %305, label %697 [
    i32 0, label %306
    i32 10, label %307
  ]

306:                                              ; preds = %304
  br label %307

307:                                              ; preds = %306, %304
  %308 = load i32, ptr %20, align 4, !tbaa !9
  %309 = add nsw i32 %308, 1
  store i32 %309, ptr %20, align 4, !tbaa !9
  br label %265, !llvm.loop !14

310:                                              ; preds = %272
  %311 = getelementptr inbounds [2 x ptr], ptr %9, i64 0, i64 0
  %312 = load ptr, ptr %311, align 16, !tbaa !5
  %313 = icmp ne ptr %312, null
  br i1 %313, label %314, label %331

314:                                              ; preds = %310
  %315 = getelementptr inbounds [2 x ptr], ptr %12, i64 0, i64 0
  %316 = load ptr, ptr %315, align 16, !tbaa !5
  %317 = icmp ne ptr %316, null
  br i1 %317, label %318, label %323

318:                                              ; preds = %314
  %319 = getelementptr inbounds [2 x [2 x ptr]], ptr %10, i64 0, i64 0
  %320 = getelementptr inbounds [2 x ptr], ptr %319, i64 0, i64 1
  %321 = load ptr, ptr %320, align 8, !tbaa !5
  %322 = icmp ne ptr %321, null
  br i1 %322, label %324, label %323

323:                                              ; preds = %318, %314
  call void (ptr, ...) @_Z7RNAbortPKcz(ptr noundef @.str, ptr noundef @.str.24, i32 noundef 1713, ptr noundef @.str.2)
  br label %324

324:                                              ; preds = %323, %318
  %325 = getelementptr inbounds [2 x ptr], ptr %12, i64 0, i64 0
  %326 = load ptr, ptr %325, align 16, !tbaa !5
  %327 = getelementptr inbounds %class.R3MeshVertex, ptr %326, i32 0, i32 1
  %328 = getelementptr inbounds [2 x [2 x ptr]], ptr %10, i64 0, i64 0
  %329 = getelementptr inbounds [2 x ptr], ptr %328, i64 0, i64 1
  %330 = load ptr, ptr %329, align 8, !tbaa !5
  call void @_ZN7RNArrayIP10R3MeshEdgeE6RemoveES1_(ptr noundef nonnull align 8 dereferenceable(16) %327, ptr noundef %330)
  br label %331

331:                                              ; preds = %324, %310
  %332 = getelementptr inbounds [2 x ptr], ptr %9, i64 0, i64 1
  %333 = load ptr, ptr %332, align 8, !tbaa !5
  %334 = icmp ne ptr %333, null
  br i1 %334, label %335, label %352

335:                                              ; preds = %331
  %336 = getelementptr inbounds [2 x ptr], ptr %12, i64 0, i64 1
  %337 = load ptr, ptr %336, align 8, !tbaa !5
  %338 = icmp ne ptr %337, null
  br i1 %338, label %339, label %344

339:                                              ; preds = %335
  %340 = getelementptr inbounds [2 x [2 x ptr]], ptr %10, i64 0, i64 1
  %341 = getelementptr inbounds [2 x ptr], ptr %340, i64 0, i64 1
  %342 = load ptr, ptr %341, align 8, !tbaa !5
  %343 = icmp ne ptr %342, null
  br i1 %343, label %345, label %344

344:                                              ; preds = %339, %335
  call void (ptr, ...) @_Z7RNAbortPKcz(ptr noundef @.str, ptr noundef @.str.25, i32 noundef 1717, ptr noundef @.str.2)
  br label %345

345:                                              ; preds = %344, %339
  %346 = getelementptr inbounds [2 x ptr], ptr %12, i64 0, i64 1
  %347 = load ptr, ptr %346, align 8, !tbaa !5
  %348 = getelementptr inbounds %class.R3MeshVertex, ptr %347, i32 0, i32 1
  %349 = getelementptr inbounds [2 x [2 x ptr]], ptr %10, i64 0, i64 1
  %350 = getelementptr inbounds [2 x ptr], ptr %349, i64 0, i64 1
  %351 = load ptr, ptr %350, align 8, !tbaa !5
  call void @_ZN7RNArrayIP10R3MeshEdgeE6RemoveES1_(ptr noundef nonnull align 8 dereferenceable(16) %348, ptr noundef %351)
  br label %352

352:                                              ; preds = %345, %331
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #7
  store i32 0, ptr %22, align 4, !tbaa !9
  br label %353

353:                                              ; preds = %395, %352
  %354 = load i32, ptr %22, align 4, !tbaa !9
  %355 = getelementptr inbounds [2 x ptr], ptr %8, i64 0, i64 1
  %356 = load ptr, ptr %355, align 8, !tbaa !5
  %357 = getelementptr inbounds %class.R3MeshVertex, ptr %356, i32 0, i32 1
  %358 = call noundef i32 @_ZNK8RNVArray8NEntriesEv(ptr noundef nonnull align 8 dereferenceable(16) %357)
  %359 = icmp slt i32 %354, %358
  br i1 %359, label %361, label %360

360:                                              ; preds = %353
  store i32 11, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #7
  br label %398

361:                                              ; preds = %353
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #7
  %362 = getelementptr inbounds [2 x ptr], ptr %8, i64 0, i64 1
  %363 = load ptr, ptr %362, align 8, !tbaa !5
  %364 = getelementptr inbounds %class.R3MeshVertex, ptr %363, i32 0, i32 1
  %365 = load i32, ptr %22, align 4, !tbaa !9
  %366 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7RNArrayIP10R3MeshEdgeEixEi(ptr noundef nonnull align 8 dereferenceable(16) %364, i32 noundef %365)
  %367 = load ptr, ptr %366, align 8, !tbaa !5
  store ptr %367, ptr %23, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #7
  store i32 0, ptr %24, align 4, !tbaa !9
  br label %368

368:                                              ; preds = %391, %361
  %369 = load i32, ptr %24, align 4, !tbaa !9
  %370 = icmp slt i32 %369, 2
  br i1 %370, label %372, label %371

371:                                              ; preds = %368
  store i32 14, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #7
  br label %394

372:                                              ; preds = %368
  %373 = load ptr, ptr %23, align 8, !tbaa !5
  %374 = getelementptr inbounds %class.R3MeshEdge, ptr %373, i32 0, i32 1
  %375 = load i32, ptr %24, align 4, !tbaa !9
  %376 = sext i32 %375 to i64
  %377 = getelementptr inbounds [2 x ptr], ptr %374, i64 0, i64 %376
  %378 = load ptr, ptr %377, align 8, !tbaa !5
  %379 = getelementptr inbounds [2 x ptr], ptr %8, i64 0, i64 1
  %380 = load ptr, ptr %379, align 8, !tbaa !5
  %381 = icmp eq ptr %378, %380
  br i1 %381, label %382, label %390

382:                                              ; preds = %372
  %383 = getelementptr inbounds [2 x ptr], ptr %8, i64 0, i64 0
  %384 = load ptr, ptr %383, align 16, !tbaa !5
  %385 = load ptr, ptr %23, align 8, !tbaa !5
  %386 = getelementptr inbounds %class.R3MeshEdge, ptr %385, i32 0, i32 1
  %387 = load i32, ptr %24, align 4, !tbaa !9
  %388 = sext i32 %387 to i64
  %389 = getelementptr inbounds [2 x ptr], ptr %386, i64 0, i64 %388
  store ptr %384, ptr %389, align 8, !tbaa !5
  br label %390

390:                                              ; preds = %382, %372
  br label %391

391:                                              ; preds = %390
  %392 = load i32, ptr %24, align 4, !tbaa !9
  %393 = add nsw i32 %392, 1
  store i32 %393, ptr %24, align 4, !tbaa !9
  br label %368, !llvm.loop !15

394:                                              ; preds = %371
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #7
  br label %395

395:                                              ; preds = %394
  %396 = load i32, ptr %22, align 4, !tbaa !9
  %397 = add nsw i32 %396, 1
  store i32 %397, ptr %22, align 4, !tbaa !9
  br label %353, !llvm.loop !16

398:                                              ; preds = %360
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #7
  store i32 0, ptr %25, align 4, !tbaa !9
  br label %399

399:                                              ; preds = %459, %398
  %400 = load i32, ptr %25, align 4, !tbaa !9
  %401 = icmp slt i32 %400, 2
  br i1 %401, label %403, label %402

402:                                              ; preds = %399
  store i32 17, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #7
  br label %462

403:                                              ; preds = %399
  %404 = load i32, ptr %25, align 4, !tbaa !9
  %405 = sext i32 %404 to i64
  %406 = getelementptr inbounds [2 x ptr], ptr %9, i64 0, i64 %405
  %407 = load ptr, ptr %406, align 8, !tbaa !5
  %408 = icmp ne ptr %407, null
  br i1 %408, label %410, label %409

409:                                              ; preds = %403
  br label %459

410:                                              ; preds = %403
  %411 = load i32, ptr %25, align 4, !tbaa !9
  %412 = sext i32 %411 to i64
  %413 = getelementptr inbounds [2 x [2 x ptr]], ptr %10, i64 0, i64 %412
  %414 = getelementptr inbounds [2 x ptr], ptr %413, i64 0, i64 0
  %415 = load ptr, ptr %414, align 16, !tbaa !5
  %416 = icmp ne ptr %415, null
  br i1 %416, label %418, label %417

417:                                              ; preds = %410
  call void (ptr, ...) @_Z7RNAbortPKcz(ptr noundef @.str, ptr noundef @.str.26, i32 noundef 1732, ptr noundef @.str.2)
  br label %418

418:                                              ; preds = %417, %410
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #7
  store i32 0, ptr %26, align 4, !tbaa !9
  br label %419

419:                                              ; preds = %455, %418
  %420 = load i32, ptr %26, align 4, !tbaa !9
  %421 = icmp slt i32 %420, 2
  br i1 %421, label %423, label %422

422:                                              ; preds = %419
  store i32 20, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #7
  br label %458

423:                                              ; preds = %419
  %424 = load i32, ptr %25, align 4, !tbaa !9
  %425 = sext i32 %424 to i64
  %426 = getelementptr inbounds [2 x [2 x ptr]], ptr %10, i64 0, i64 %425
  %427 = getelementptr inbounds [2 x ptr], ptr %426, i64 0, i64 0
  %428 = load ptr, ptr %427, align 16, !tbaa !5
  %429 = getelementptr inbounds %class.R3MeshEdge, ptr %428, i32 0, i32 2
  %430 = load i32, ptr %26, align 4, !tbaa !9
  %431 = sext i32 %430 to i64
  %432 = getelementptr inbounds [2 x ptr], ptr %429, i64 0, i64 %431
  %433 = load ptr, ptr %432, align 8, !tbaa !5
  %434 = load i32, ptr %25, align 4, !tbaa !9
  %435 = sext i32 %434 to i64
  %436 = getelementptr inbounds [2 x ptr], ptr %9, i64 0, i64 %435
  %437 = load ptr, ptr %436, align 8, !tbaa !5
  %438 = icmp eq ptr %433, %437
  br i1 %438, label %439, label %454

439:                                              ; preds = %423
  %440 = load i32, ptr %25, align 4, !tbaa !9
  %441 = sext i32 %440 to i64
  %442 = getelementptr inbounds [2 x [2 x ptr]], ptr %11, i64 0, i64 %441
  %443 = getelementptr inbounds [2 x ptr], ptr %442, i64 0, i64 1
  %444 = load ptr, ptr %443, align 8, !tbaa !5
  %445 = load i32, ptr %25, align 4, !tbaa !9
  %446 = sext i32 %445 to i64
  %447 = getelementptr inbounds [2 x [2 x ptr]], ptr %10, i64 0, i64 %446
  %448 = getelementptr inbounds [2 x ptr], ptr %447, i64 0, i64 0
  %449 = load ptr, ptr %448, align 16, !tbaa !5
  %450 = getelementptr inbounds %class.R3MeshEdge, ptr %449, i32 0, i32 2
  %451 = load i32, ptr %26, align 4, !tbaa !9
  %452 = sext i32 %451 to i64
  %453 = getelementptr inbounds [2 x ptr], ptr %450, i64 0, i64 %452
  store ptr %444, ptr %453, align 8, !tbaa !5
  br label %454

454:                                              ; preds = %439, %423
  br label %455

455:                                              ; preds = %454
  %456 = load i32, ptr %26, align 4, !tbaa !9
  %457 = add nsw i32 %456, 1
  store i32 %457, ptr %26, align 4, !tbaa !9
  br label %419, !llvm.loop !17

458:                                              ; preds = %422
  br label %459

459:                                              ; preds = %458, %409
  %460 = load i32, ptr %25, align 4, !tbaa !9
  %461 = add nsw i32 %460, 1
  store i32 %461, ptr %25, align 4, !tbaa !9
  br label %399, !llvm.loop !18

462:                                              ; preds = %402
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #7
  store i32 0, ptr %27, align 4, !tbaa !9
  br label %463

463:                                              ; preds = %524, %462
  %464 = load i32, ptr %27, align 4, !tbaa !9
  %465 = getelementptr inbounds [2 x ptr], ptr %8, i64 0, i64 1
  %466 = load ptr, ptr %465, align 8, !tbaa !5
  %467 = getelementptr inbounds %class.R3MeshVertex, ptr %466, i32 0, i32 1
  %468 = call noundef i32 @_ZNK8RNVArray8NEntriesEv(ptr noundef nonnull align 8 dereferenceable(16) %467)
  %469 = icmp slt i32 %464, %468
  br i1 %469, label %471, label %470

470:                                              ; preds = %463
  store i32 23, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #7
  br label %527

471:                                              ; preds = %463
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #7
  %472 = getelementptr inbounds [2 x ptr], ptr %8, i64 0, i64 1
  %473 = load ptr, ptr %472, align 8, !tbaa !5
  %474 = getelementptr inbounds %class.R3MeshVertex, ptr %473, i32 0, i32 1
  %475 = load i32, ptr %27, align 4, !tbaa !9
  %476 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7RNArrayIP10R3MeshEdgeEixEi(ptr noundef nonnull align 8 dereferenceable(16) %474, i32 noundef %475)
  %477 = load ptr, ptr %476, align 8, !tbaa !5
  store ptr %477, ptr %28, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #7
  store i32 0, ptr %29, align 4, !tbaa !9
  br label %478

478:                                              ; preds = %520, %471
  %479 = load i32, ptr %29, align 4, !tbaa !9
  %480 = icmp slt i32 %479, 2
  br i1 %480, label %482, label %481

481:                                              ; preds = %478
  store i32 26, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #7
  br label %523

482:                                              ; preds = %478
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #7
  %483 = load ptr, ptr %28, align 8, !tbaa !5
  %484 = getelementptr inbounds %class.R3MeshEdge, ptr %483, i32 0, i32 2
  %485 = load i32, ptr %29, align 4, !tbaa !9
  %486 = sext i32 %485 to i64
  %487 = getelementptr inbounds [2 x ptr], ptr %484, i64 0, i64 %486
  %488 = load ptr, ptr %487, align 8, !tbaa !5
  store ptr %488, ptr %30, align 8, !tbaa !5
  %489 = load ptr, ptr %30, align 8, !tbaa !5
  %490 = icmp ne ptr %489, null
  br i1 %490, label %491, label %519

491:                                              ; preds = %482
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #7
  store i32 0, ptr %31, align 4, !tbaa !9
  br label %492

492:                                              ; preds = %515, %491
  %493 = load i32, ptr %31, align 4, !tbaa !9
  %494 = icmp slt i32 %493, 3
  br i1 %494, label %496, label %495

495:                                              ; preds = %492
  store i32 29, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #7
  br label %518

496:                                              ; preds = %492
  %497 = load ptr, ptr %30, align 8, !tbaa !5
  %498 = getelementptr inbounds %class.R3MeshFace, ptr %497, i32 0, i32 1
  %499 = load i32, ptr %31, align 4, !tbaa !9
  %500 = sext i32 %499 to i64
  %501 = getelementptr inbounds [3 x ptr], ptr %498, i64 0, i64 %500
  %502 = load ptr, ptr %501, align 8, !tbaa !5
  %503 = getelementptr inbounds [2 x ptr], ptr %8, i64 0, i64 1
  %504 = load ptr, ptr %503, align 8, !tbaa !5
  %505 = icmp eq ptr %502, %504
  br i1 %505, label %506, label %514

506:                                              ; preds = %496
  %507 = getelementptr inbounds [2 x ptr], ptr %8, i64 0, i64 0
  %508 = load ptr, ptr %507, align 16, !tbaa !5
  %509 = load ptr, ptr %30, align 8, !tbaa !5
  %510 = getelementptr inbounds %class.R3MeshFace, ptr %509, i32 0, i32 1
  %511 = load i32, ptr %31, align 4, !tbaa !9
  %512 = sext i32 %511 to i64
  %513 = getelementptr inbounds [3 x ptr], ptr %510, i64 0, i64 %512
  store ptr %508, ptr %513, align 8, !tbaa !5
  br label %514

514:                                              ; preds = %506, %496
  br label %515

515:                                              ; preds = %514
  %516 = load i32, ptr %31, align 4, !tbaa !9
  %517 = add nsw i32 %516, 1
  store i32 %517, ptr %31, align 4, !tbaa !9
  br label %492, !llvm.loop !19

518:                                              ; preds = %495
  br label %519

519:                                              ; preds = %518, %482
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #7
  br label %520

520:                                              ; preds = %519
  %521 = load i32, ptr %29, align 4, !tbaa !9
  %522 = add nsw i32 %521, 1
  store i32 %522, ptr %29, align 4, !tbaa !9
  br label %478, !llvm.loop !20

523:                                              ; preds = %481
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #7
  br label %524

524:                                              ; preds = %523
  %525 = load i32, ptr %27, align 4, !tbaa !9
  %526 = add nsw i32 %525, 1
  store i32 %526, ptr %27, align 4, !tbaa !9
  br label %463, !llvm.loop !21

527:                                              ; preds = %470
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #7
  store i32 0, ptr %32, align 4, !tbaa !9
  br label %528

528:                                              ; preds = %589, %527
  %529 = load i32, ptr %32, align 4, !tbaa !9
  %530 = icmp slt i32 %529, 2
  br i1 %530, label %532, label %531

531:                                              ; preds = %528
  store i32 32, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #7
  br label %592

532:                                              ; preds = %528
  %533 = load i32, ptr %32, align 4, !tbaa !9
  %534 = sext i32 %533 to i64
  %535 = getelementptr inbounds [2 x ptr], ptr %9, i64 0, i64 %534
  %536 = load ptr, ptr %535, align 8, !tbaa !5
  %537 = icmp ne ptr %536, null
  br i1 %537, label %539, label %538

538:                                              ; preds = %532
  br label %589

539:                                              ; preds = %532
  %540 = load i32, ptr %32, align 4, !tbaa !9
  %541 = sext i32 %540 to i64
  %542 = getelementptr inbounds [2 x [2 x ptr]], ptr %11, i64 0, i64 %541
  %543 = getelementptr inbounds [2 x ptr], ptr %542, i64 0, i64 1
  %544 = load ptr, ptr %543, align 8, !tbaa !5
  %545 = icmp ne ptr %544, null
  br i1 %545, label %547, label %546

546:                                              ; preds = %539
  br label %589

547:                                              ; preds = %539
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #7
  store i32 0, ptr %33, align 4, !tbaa !9
  br label %548

548:                                              ; preds = %585, %547
  %549 = load i32, ptr %33, align 4, !tbaa !9
  %550 = icmp slt i32 %549, 3
  br i1 %550, label %552, label %551

551:                                              ; preds = %548
  store i32 35, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #7
  br label %588

552:                                              ; preds = %548
  %553 = load i32, ptr %32, align 4, !tbaa !9
  %554 = sext i32 %553 to i64
  %555 = getelementptr inbounds [2 x [2 x ptr]], ptr %11, i64 0, i64 %554
  %556 = getelementptr inbounds [2 x ptr], ptr %555, i64 0, i64 1
  %557 = load ptr, ptr %556, align 8, !tbaa !5
  %558 = getelementptr inbounds %class.R3MeshFace, ptr %557, i32 0, i32 2
  %559 = load i32, ptr %33, align 4, !tbaa !9
  %560 = sext i32 %559 to i64
  %561 = getelementptr inbounds [3 x ptr], ptr %558, i64 0, i64 %560
  %562 = load ptr, ptr %561, align 8, !tbaa !5
  %563 = load i32, ptr %32, align 4, !tbaa !9
  %564 = sext i32 %563 to i64
  %565 = getelementptr inbounds [2 x [2 x ptr]], ptr %10, i64 0, i64 %564
  %566 = getelementptr inbounds [2 x ptr], ptr %565, i64 0, i64 1
  %567 = load ptr, ptr %566, align 8, !tbaa !5
  %568 = icmp eq ptr %562, %567
  br i1 %568, label %569, label %584

569:                                              ; preds = %552
  %570 = load i32, ptr %32, align 4, !tbaa !9
  %571 = sext i32 %570 to i64
  %572 = getelementptr inbounds [2 x [2 x ptr]], ptr %10, i64 0, i64 %571
  %573 = getelementptr inbounds [2 x ptr], ptr %572, i64 0, i64 0
  %574 = load ptr, ptr %573, align 16, !tbaa !5
  %575 = load i32, ptr %32, align 4, !tbaa !9
  %576 = sext i32 %575 to i64
  %577 = getelementptr inbounds [2 x [2 x ptr]], ptr %11, i64 0, i64 %576
  %578 = getelementptr inbounds [2 x ptr], ptr %577, i64 0, i64 1
  %579 = load ptr, ptr %578, align 8, !tbaa !5
  %580 = getelementptr inbounds %class.R3MeshFace, ptr %579, i32 0, i32 2
  %581 = load i32, ptr %33, align 4, !tbaa !9
  %582 = sext i32 %581 to i64
  %583 = getelementptr inbounds [3 x ptr], ptr %580, i64 0, i64 %582
  store ptr %574, ptr %583, align 8, !tbaa !5
  br label %584

584:                                              ; preds = %569, %552
  br label %585

585:                                              ; preds = %584
  %586 = load i32, ptr %33, align 4, !tbaa !9
  %587 = add nsw i32 %586, 1
  store i32 %587, ptr %33, align 4, !tbaa !9
  br label %548, !llvm.loop !22

588:                                              ; preds = %551
  br label %589

589:                                              ; preds = %588, %546, %538
  %590 = load i32, ptr %32, align 4, !tbaa !9
  %591 = add nsw i32 %590, 1
  store i32 %591, ptr %32, align 4, !tbaa !9
  br label %528, !llvm.loop !23

592:                                              ; preds = %531
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #7
  %593 = load ptr, ptr %7, align 8, !tbaa !5
  %594 = getelementptr inbounds [2 x ptr], ptr %8, i64 0, i64 0
  %595 = load ptr, ptr %594, align 16, !tbaa !5
  %596 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK6R3Mesh14VertexPositionEPK12R3MeshVertex(ptr noundef nonnull align 8 dereferenceable(272) %43, ptr noundef %595)
  %597 = call noundef double @_Z10R3DistanceRK7R3PointS1_(ptr noundef nonnull align 8 dereferenceable(24) %593, ptr noundef nonnull align 8 dereferenceable(24) %596)
  store double %597, ptr %34, align 8, !tbaa !24
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #7
  %598 = load ptr, ptr %7, align 8, !tbaa !5
  %599 = getelementptr inbounds [2 x ptr], ptr %8, i64 0, i64 1
  %600 = load ptr, ptr %599, align 8, !tbaa !5
  %601 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK6R3Mesh14VertexPositionEPK12R3MeshVertex(ptr noundef nonnull align 8 dereferenceable(272) %43, ptr noundef %600)
  %602 = call noundef double @_Z10R3DistanceRK7R3PointS1_(ptr noundef nonnull align 8 dereferenceable(24) %598, ptr noundef nonnull align 8 dereferenceable(24) %601)
  store double %602, ptr %35, align 8, !tbaa !24
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #7
  %603 = load double, ptr %34, align 8, !tbaa !24
  %604 = load double, ptr %35, align 8, !tbaa !24
  %605 = fadd double %603, %604
  store double %605, ptr %36, align 8, !tbaa !24
  %606 = load double, ptr %36, align 8, !tbaa !24
  %607 = load double, ptr @RN_EPSILON, align 8, !tbaa !24
  %608 = call noundef i32 @_Z12RNIsPositivedd(double noundef %606, double noundef %607)
  %609 = icmp ne i32 %608, 0
  br i1 %609, label %610, label %637

610:                                              ; preds = %592
  %611 = load double, ptr %36, align 8, !tbaa !24
  %612 = load double, ptr %34, align 8, !tbaa !24
  %613 = fdiv double %612, %611
  store double %613, ptr %34, align 8, !tbaa !24
  %614 = load double, ptr %36, align 8, !tbaa !24
  %615 = load double, ptr %35, align 8, !tbaa !24
  %616 = fdiv double %615, %614
  store double %616, ptr %35, align 8, !tbaa !24
  %617 = getelementptr inbounds [2 x ptr], ptr %8, i64 0, i64 0
  %618 = load ptr, ptr %617, align 16, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %37) #7
  call void @llvm.lifetime.start.p0(i64 16, ptr %38) #7
  %619 = load double, ptr %35, align 8, !tbaa !24
  %620 = getelementptr inbounds [2 x ptr], ptr %8, i64 0, i64 0
  %621 = load ptr, ptr %620, align 16, !tbaa !5
  %622 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK6R3Mesh19VertexTextureCoordsEPK12R3MeshVertex(ptr noundef nonnull align 8 dereferenceable(272) %43, ptr noundef %621)
  call void @_ZmldRK7R2Point(ptr dead_on_unwind writable sret(%class.R2Point) align 8 %38, double noundef %619, ptr noundef nonnull align 8 dereferenceable(16) %622)
  call void @llvm.lifetime.start.p0(i64 16, ptr %39) #7
  %623 = load double, ptr %34, align 8, !tbaa !24
  %624 = getelementptr inbounds [2 x ptr], ptr %8, i64 0, i64 1
  %625 = load ptr, ptr %624, align 8, !tbaa !5
  %626 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK6R3Mesh19VertexTextureCoordsEPK12R3MeshVertex(ptr noundef nonnull align 8 dereferenceable(272) %43, ptr noundef %625)
  call void @_ZmldRK7R2Point(ptr dead_on_unwind writable sret(%class.R2Point) align 8 %39, double noundef %623, ptr noundef nonnull align 8 dereferenceable(16) %626)
  call void @_ZplRK7R2PointS1_(ptr dead_on_unwind writable sret(%class.R2Point) align 8 %37, ptr noundef nonnull align 8 dereferenceable(16) %38, ptr noundef nonnull align 8 dereferenceable(16) %39)
  call void @_ZN6R3Mesh22SetVertexTextureCoordsEP12R3MeshVertexRK7R2Point(ptr noundef nonnull align 8 dereferenceable(272) %43, ptr noundef %618, ptr noundef nonnull align 8 dereferenceable(16) %37)
  call void @llvm.lifetime.end.p0(i64 16, ptr %39) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr %38) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr %37) #7
  %627 = getelementptr inbounds [2 x ptr], ptr %8, i64 0, i64 0
  %628 = load ptr, ptr %627, align 16, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 24, ptr %40) #7
  call void @llvm.lifetime.start.p0(i64 24, ptr %41) #7
  %629 = load double, ptr %35, align 8, !tbaa !24
  %630 = getelementptr inbounds [2 x ptr], ptr %8, i64 0, i64 0
  %631 = load ptr, ptr %630, align 16, !tbaa !5
  %632 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK6R3Mesh11VertexColorEPK12R3MeshVertex(ptr noundef nonnull align 8 dereferenceable(272) %43, ptr noundef %631)
  call void @_ZmldRK5RNRgb(ptr dead_on_unwind writable sret(%class.RNRgb) align 8 %41, double noundef %629, ptr noundef nonnull align 8 dereferenceable(24) %632)
  call void @llvm.lifetime.start.p0(i64 24, ptr %42) #7
  %633 = load double, ptr %34, align 8, !tbaa !24
  %634 = getelementptr inbounds [2 x ptr], ptr %8, i64 0, i64 1
  %635 = load ptr, ptr %634, align 8, !tbaa !5
  %636 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK6R3Mesh11VertexColorEPK12R3MeshVertex(ptr noundef nonnull align 8 dereferenceable(272) %43, ptr noundef %635)
  call void @_ZmldRK5RNRgb(ptr dead_on_unwind writable sret(%class.RNRgb) align 8 %42, double noundef %633, ptr noundef nonnull align 8 dereferenceable(24) %636)
  call void @_ZplRK5RNRgbS1_(ptr dead_on_unwind writable sret(%class.RNRgb) align 8 %40, ptr noundef nonnull align 8 dereferenceable(24) %41, ptr noundef nonnull align 8 dereferenceable(24) %42)
  call void @_ZN6R3Mesh14SetVertexColorEP12R3MeshVertexRK5RNRgb(ptr noundef nonnull align 8 dereferenceable(272) %43, ptr noundef %628, ptr noundef nonnull align 8 dereferenceable(24) %40)
  call void @llvm.lifetime.end.p0(i64 24, ptr %42) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr %41) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr %40) #7
  br label %637

637:                                              ; preds = %610, %592
  %638 = getelementptr inbounds [2 x ptr], ptr %9, i64 0, i64 0
  %639 = load ptr, ptr %638, align 16, !tbaa !5
  %640 = icmp ne ptr %639, null
  br i1 %640, label %641, label %647

641:                                              ; preds = %637
  %642 = getelementptr inbounds [2 x ptr], ptr %9, i64 0, i64 0
  %643 = load ptr, ptr %642, align 16, !tbaa !5
  %644 = load ptr, ptr %43, align 8, !tbaa !26
  %645 = getelementptr inbounds ptr, ptr %644, i64 72
  %646 = load ptr, ptr %645, align 8
  call void %646(ptr noundef nonnull align 8 dereferenceable(272) %43, ptr noundef %643)
  br label %647

647:                                              ; preds = %641, %637
  %648 = getelementptr inbounds [2 x ptr], ptr %9, i64 0, i64 1
  %649 = load ptr, ptr %648, align 8, !tbaa !5
  %650 = icmp ne ptr %649, null
  br i1 %650, label %651, label %657

651:                                              ; preds = %647
  %652 = getelementptr inbounds [2 x ptr], ptr %9, i64 0, i64 1
  %653 = load ptr, ptr %652, align 8, !tbaa !5
  %654 = load ptr, ptr %43, align 8, !tbaa !26
  %655 = getelementptr inbounds ptr, ptr %654, i64 72
  %656 = load ptr, ptr %655, align 8
  call void %656(ptr noundef nonnull align 8 dereferenceable(272) %43, ptr noundef %653)
  br label %657

657:                                              ; preds = %651, %647
  %658 = getelementptr inbounds [2 x ptr], ptr %9, i64 0, i64 0
  %659 = load ptr, ptr %658, align 16, !tbaa !5
  %660 = icmp ne ptr %659, null
  br i1 %660, label %661, label %668

661:                                              ; preds = %657
  %662 = getelementptr inbounds [2 x [2 x ptr]], ptr %10, i64 0, i64 0
  %663 = getelementptr inbounds [2 x ptr], ptr %662, i64 0, i64 1
  %664 = load ptr, ptr %663, align 8, !tbaa !5
  %665 = load ptr, ptr %43, align 8, !tbaa !26
  %666 = getelementptr inbounds ptr, ptr %665, i64 71
  %667 = load ptr, ptr %666, align 8
  call void %667(ptr noundef nonnull align 8 dereferenceable(272) %43, ptr noundef %664)
  br label %668

668:                                              ; preds = %661, %657
  %669 = getelementptr inbounds [2 x ptr], ptr %9, i64 0, i64 1
  %670 = load ptr, ptr %669, align 8, !tbaa !5
  %671 = icmp ne ptr %670, null
  br i1 %671, label %672, label %679

672:                                              ; preds = %668
  %673 = getelementptr inbounds [2 x [2 x ptr]], ptr %10, i64 0, i64 1
  %674 = getelementptr inbounds [2 x ptr], ptr %673, i64 0, i64 1
  %675 = load ptr, ptr %674, align 8, !tbaa !5
  %676 = load ptr, ptr %43, align 8, !tbaa !26
  %677 = getelementptr inbounds ptr, ptr %676, i64 71
  %678 = load ptr, ptr %677, align 8
  call void %678(ptr noundef nonnull align 8 dereferenceable(272) %43, ptr noundef %675)
  br label %679

679:                                              ; preds = %672, %668
  %680 = load ptr, ptr %6, align 8, !tbaa !5
  %681 = load ptr, ptr %43, align 8, !tbaa !26
  %682 = getelementptr inbounds ptr, ptr %681, i64 71
  %683 = load ptr, ptr %682, align 8
  call void %683(ptr noundef nonnull align 8 dereferenceable(272) %43, ptr noundef %680)
  %684 = getelementptr inbounds [2 x ptr], ptr %8, i64 0, i64 1
  %685 = load ptr, ptr %684, align 8, !tbaa !5
  %686 = load ptr, ptr %43, align 8, !tbaa !26
  %687 = getelementptr inbounds ptr, ptr %686, i64 70
  %688 = load ptr, ptr %687, align 8
  call void %688(ptr noundef nonnull align 8 dereferenceable(272) %43, ptr noundef %685)
  %689 = getelementptr inbounds [2 x ptr], ptr %8, i64 0, i64 0
  %690 = load ptr, ptr %689, align 16, !tbaa !5
  %691 = load ptr, ptr %7, align 8, !tbaa !5
  call void @_ZN6R3Mesh17SetVertexPositionEP12R3MeshVertexRK7R3Point(ptr noundef nonnull align 8 dereferenceable(272) %43, ptr noundef %690, ptr noundef nonnull align 8 dereferenceable(24) %691)
  %692 = getelementptr inbounds [2 x ptr], ptr %8, i64 0, i64 0
  %693 = load ptr, ptr %692, align 16, !tbaa !5
  store ptr %693, ptr %4, align 8
  store i32 1, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #7
  br label %694

694:                                              ; preds = %679, %258
  call void @llvm.lifetime.end.p0(i64 16, ptr %12) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %11) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %10) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr %9) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr %8) #7
  br label %695

695:                                              ; preds = %694, %46
  %696 = load ptr, ptr %4, align 8
  ret ptr %696

697:                                              ; preds = %304
  unreachable
}

declare void @_ZplRK7R2PointS1_(ptr dead_on_unwind writable sret(%class.R2Point) align 8, ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(16)) #0

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZmldRK7R2Point(ptr dead_on_unwind noalias writable sret(%class.R2Point) align 8, double noundef, ptr noundef nonnull align 8 dereferenceable(16)) #3

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZplRK5RNRgbS1_(ptr dead_on_unwind noalias writable sret(%class.RNRgb) align 8, ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24)) #3

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZmldRK5RNRgb(ptr dead_on_unwind noalias writable sret(%class.RNRgb) align 8, double noundef, ptr noundef nonnull align 8 dereferenceable(24)) #3

attributes #0 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #5 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { 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 = !{!"int", !7, i64 0}
!11 = distinct !{!11, !12}
!12 = !{!"llvm.loop.mustprogress"}
!13 = distinct !{!13, !12}
!14 = distinct !{!14, !12}
!15 = distinct !{!15, !12}
!16 = distinct !{!16, !12}
!17 = distinct !{!17, !12}
!18 = distinct !{!18, !12}
!19 = distinct !{!19, !12}
!20 = distinct !{!20, !12}
!21 = distinct !{!21, !12}
!22 = distinct !{!22, !12}
!23 = distinct !{!23, !12}
!24 = !{!25, !25, i64 0}
!25 = !{!"double", !7, i64 0}
!26 = !{!27, !27, i64 0}
!27 = !{!"vtable pointer", !8, i64 0}


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

%class.R2Point = type { [2 x double] }
%class.RNRgb = type { [3 x double] }

@.str = external hidden unnamed_addr constant [41 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [88 x i8], align 1
@RN_EPSILON = external local_unnamed_addr global double, align 8
@.str.22 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [9 x i8], align 1

declare void @_Z7RNAbortPKcz(ptr noundef, ...) local_unnamed_addr #0

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(24) ptr @_ZNK6R3Mesh14VertexPositionEPK12R3MeshVertex(ptr noundef nonnull align 8 dereferenceable(272), ptr noundef) local_unnamed_addr #2 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(24) ptr @_ZNK6R3Mesh11VertexColorEPK12R3MeshVertex(ptr noundef nonnull align 8 dereferenceable(272), ptr noundef) local_unnamed_addr #2 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(16) ptr @_ZNK6R3Mesh19VertexTextureCoordsEPK12R3MeshVertex(ptr noundef nonnull align 8 dereferenceable(272), ptr noundef) local_unnamed_addr #2 align 2

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef i32 @_ZNK6R3Mesh6NFacesEv(ptr noundef nonnull align 8 dereferenceable(272)) local_unnamed_addr #3 align 2

declare noundef double @_Z10R3DistanceRK7R3PointS1_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #0

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i32 @_Z12RNIsPositivedd(double noundef, double noundef) local_unnamed_addr #2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef i32 @_ZNK6R3Mesh13VertexValenceEPK12R3MeshVertex(ptr noundef nonnull align 8 dereferenceable(272), ptr noundef) local_unnamed_addr #3 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef ptr @_ZNK6R3Mesh12EdgeOnVertexEPK12R3MeshVertexi(ptr noundef nonnull align 8 dereferenceable(272), ptr noundef, i32 noundef) local_unnamed_addr #3 align 2

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

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

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZNK6R3Mesh14FaceAcrossEdgeEPK10R3MeshEdgePK10R3MeshFace(ptr noundef nonnull align 8 dereferenceable(272), ptr noundef, ptr noundef) local_unnamed_addr #2 align 2

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local noundef ptr @_ZN6R3Mesh12CollapseEdgeEP10R3MeshEdgeRK7R3Point(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef %1, ptr noundef nonnull align 8 dereferenceable(24) %2) unnamed_addr #4 align 2 {
  %4 = alloca %class.R2Point, align 8
  %5 = alloca %class.R2Point, align 8
  %6 = alloca %class.R2Point, align 8
  %7 = alloca %class.RNRgb, align 8
  %8 = alloca %class.RNRgb, align 8
  %9 = alloca %class.RNRgb, align 8
  %10 = tail call noundef i32 @_ZNK6R3Mesh6NFacesEv(ptr noundef nonnull align 8 dereferenceable(272) %0)
  %11 = icmp slt i32 %10, 5
  br i1 %11, label %.loopexit213, label %12

12:                                               ; preds = %3
  %13 = getelementptr inbounds i8, ptr %1, i64 8
  %14 = load ptr, ptr %13, align 8, !tbaa !5
  %15 = getelementptr inbounds i8, ptr %1, i64 16
  %16 = load ptr, ptr %15, align 8, !tbaa !5
  %17 = getelementptr inbounds i8, ptr %1, i64 24
  %18 = load ptr, ptr %17, align 8, !tbaa !5
  %19 = getelementptr inbounds i8, ptr %1, i64 32
  %20 = load ptr, ptr %19, align 8, !tbaa !5
  %.not = icmp eq ptr %18, null
  br i1 %.not, label %31, label %21

21:                                               ; preds = %12
  %22 = tail call noundef ptr @_ZNK6R3Mesh16EdgeAcrossVertexEPK12R3MeshVertexPK10R3MeshEdgePK10R3MeshFace(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef %14, ptr noundef nonnull %1, ptr noundef nonnull %18)
  %23 = tail call noundef ptr @_ZNK6R3Mesh16EdgeAcrossVertexEPK12R3MeshVertexPK10R3MeshEdgePK10R3MeshFace(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef %16, ptr noundef nonnull %1, ptr noundef nonnull %18)
  %24 = tail call noundef ptr @_ZNK6R3Mesh16VertexAcrossEdgeEPK10R3MeshEdgePK12R3MeshVertex(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef %23, ptr noundef %16)
  %25 = tail call noundef ptr @_ZNK6R3Mesh16VertexAcrossEdgeEPK10R3MeshEdgePK12R3MeshVertex(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef %22, ptr noundef %14)
  %26 = icmp eq ptr %24, %25
  br i1 %26, label %28, label %27

27:                                               ; preds = %21
  tail call void (ptr, ...) @_Z7RNAbortPKcz(ptr noundef nonnull @.str, ptr noundef nonnull @.str.22, i32 noundef 1677, ptr noundef nonnull @.str.2)
  br label %28

28:                                               ; preds = %27, %21
  %29 = tail call noundef ptr @_ZNK6R3Mesh14FaceAcrossEdgeEPK10R3MeshEdgePK10R3MeshFace(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef %22, ptr noundef nonnull %18)
  %30 = tail call noundef ptr @_ZNK6R3Mesh14FaceAcrossEdgeEPK10R3MeshEdgePK10R3MeshFace(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef %23, ptr noundef nonnull %18)
  br label %31

31:                                               ; preds = %28, %12
  %.sroa.0244.0 = phi ptr [ null, %12 ], [ %22, %28 ]
  %.sroa.9249.0 = phi ptr [ null, %12 ], [ %23, %28 ]
  %.sroa.4.0 = phi ptr [ null, %12 ], [ %30, %28 ]
  %.sroa.0.0 = phi ptr [ null, %12 ], [ %24, %28 ]
  %.not171 = icmp eq ptr %20, null
  br i1 %.not171, label %42, label %32

32:                                               ; preds = %31
  %33 = tail call noundef ptr @_ZNK6R3Mesh16EdgeAcrossVertexEPK12R3MeshVertexPK10R3MeshEdgePK10R3MeshFace(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef %14, ptr noundef nonnull %1, ptr noundef nonnull %20)
  %34 = tail call noundef ptr @_ZNK6R3Mesh16EdgeAcrossVertexEPK12R3MeshVertexPK10R3MeshEdgePK10R3MeshFace(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef %16, ptr noundef nonnull %1, ptr noundef nonnull %20)
  %35 = tail call noundef ptr @_ZNK6R3Mesh16VertexAcrossEdgeEPK10R3MeshEdgePK12R3MeshVertex(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef %34, ptr noundef %16)
  %36 = tail call noundef ptr @_ZNK6R3Mesh16VertexAcrossEdgeEPK10R3MeshEdgePK12R3MeshVertex(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef %33, ptr noundef %14)
  %37 = icmp eq ptr %35, %36
  br i1 %37, label %39, label %38

38:                                               ; preds = %32
  tail call void (ptr, ...) @_Z7RNAbortPKcz(ptr noundef nonnull @.str, ptr noundef nonnull @.str.23, i32 noundef 1685, ptr noundef nonnull @.str.2)
  br label %39

39:                                               ; preds = %38, %32
  %40 = tail call noundef ptr @_ZNK6R3Mesh14FaceAcrossEdgeEPK10R3MeshEdgePK10R3MeshFace(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef %33, ptr noundef nonnull %20)
  %41 = tail call noundef ptr @_ZNK6R3Mesh14FaceAcrossEdgeEPK10R3MeshEdgePK10R3MeshFace(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef %34, ptr noundef nonnull %20)
  br label %42

42:                                               ; preds = %39, %31
  %.sroa.15.0 = phi ptr [ null, %31 ], [ %33, %39 ]
  %.sroa.21.0 = phi ptr [ null, %31 ], [ %34, %39 ]
  %.sroa.9.0 = phi ptr [ null, %31 ], [ %41, %39 ]
  %.sroa.7.0 = phi ptr [ null, %31 ], [ %35, %39 ]
  %43 = tail call noundef i32 @_ZNK6R3Mesh13VertexValenceEPK12R3MeshVertex(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef %14)
  %44 = icmp sgt i32 %43, 0
  br i1 %44, label %.lr.ph216, label %._crit_edge

.lr.ph216:                                        ; preds = %42, %.loopexit212
  %.0154215 = phi i32 [ %62, %.loopexit212 ], [ 0, %42 ]
  %45 = tail call noundef ptr @_ZNK6R3Mesh12EdgeOnVertexEPK12R3MeshVertexi(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef %14, i32 noundef %.0154215)
  %46 = icmp eq ptr %45, %.sroa.0244.0
  %47 = icmp eq ptr %45, %.sroa.15.0
  %or.cond186 = or i1 %46, %47
  br i1 %or.cond186, label %.loopexit212, label %48

48:                                               ; preds = %.lr.ph216
  %49 = tail call noundef ptr @_ZNK6R3Mesh16VertexAcrossEdgeEPK10R3MeshEdgePK12R3MeshVertex(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef %45, ptr noundef %14)
  %50 = tail call noundef i32 @_ZNK6R3Mesh13VertexValenceEPK12R3MeshVertex(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef %16)
  %51 = icmp sgt i32 %50, 0
  br i1 %51, label %.lr.ph, label %.loopexit212

.lr.ph:                                           ; preds = %48, %58
  %.0162214 = phi i32 [ %59, %58 ], [ 0, %48 ]
  %52 = tail call noundef ptr @_ZNK6R3Mesh12EdgeOnVertexEPK12R3MeshVertexi(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef %16, i32 noundef %.0162214)
  %53 = icmp eq ptr %52, %.sroa.9249.0
  %54 = icmp eq ptr %52, %.sroa.21.0
  %or.cond189 = or i1 %53, %54
  br i1 %or.cond189, label %58, label %55

55:                                               ; preds = %.lr.ph
  %56 = tail call noundef ptr @_ZNK6R3Mesh16VertexAcrossEdgeEPK10R3MeshEdgePK12R3MeshVertex(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef %52, ptr noundef %16)
  %57 = icmp eq ptr %49, %56
  br i1 %57, label %.loopexit213, label %58

58:                                               ; preds = %55, %.lr.ph
  %59 = add nuw nsw i32 %.0162214, 1
  %60 = tail call noundef i32 @_ZNK6R3Mesh13VertexValenceEPK12R3MeshVertex(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef %16)
  %61 = icmp slt i32 %59, %60
  br i1 %61, label %.lr.ph, label %.loopexit212, !llvm.loop !9

.loopexit212:                                     ; preds = %58, %48, %.lr.ph216
  %62 = add nuw nsw i32 %.0154215, 1
  %63 = tail call noundef i32 @_ZNK6R3Mesh13VertexValenceEPK12R3MeshVertex(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef %14)
  %64 = icmp slt i32 %62, %63
  br i1 %64, label %.lr.ph216, label %._crit_edge, !llvm.loop !11

._crit_edge:                                      ; preds = %.loopexit212, %42
  %65 = getelementptr inbounds i8, ptr %14, i64 8
  tail call void @_ZN7RNArrayIP10R3MeshEdgeE6RemoveES1_(ptr noundef nonnull align 8 dereferenceable(16) %65, ptr noundef %1)
  %66 = getelementptr inbounds i8, ptr %16, i64 8
  %67 = tail call noundef i32 @_ZNK8RNVArray8NEntriesEv(ptr noundef nonnull align 8 dereferenceable(16) %66)
  %68 = icmp sgt i32 %67, 0
  br i1 %68, label %.lr.ph219, label %._crit_edge220

._crit_edge220:                                   ; preds = %76, %._crit_edge
  br i1 %.not, label %86, label %80

.lr.ph219:                                        ; preds = %._crit_edge, %76
  %.0161217 = phi i32 [ %77, %76 ], [ 0, %._crit_edge ]
  %69 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7RNArrayIP10R3MeshEdgeEixEi(ptr noundef nonnull align 8 dereferenceable(16) %66, i32 noundef %.0161217)
  %70 = load ptr, ptr %69, align 8, !tbaa !5
  %71 = icmp eq ptr %70, %1
  %72 = icmp eq ptr %70, %.sroa.9249.0
  %or.cond192 = or i1 %71, %72
  %73 = icmp eq ptr %70, %.sroa.21.0
  %or.cond195 = or i1 %or.cond192, %73
  br i1 %or.cond195, label %76, label %74

74:                                               ; preds = %.lr.ph219
  %75 = tail call noundef ptr @_ZN7RNArrayIP10R3MeshEdgeE6InsertES1_(ptr noundef nonnull align 8 dereferenceable(16) %65, ptr noundef %70)
  br label %76

76:                                               ; preds = %.lr.ph219, %74
  %77 = add nuw nsw i32 %.0161217, 1
  %78 = tail call noundef i32 @_ZNK8RNVArray8NEntriesEv(ptr noundef nonnull align 8 dereferenceable(16) %66)
  %79 = icmp slt i32 %77, %78
  br i1 %79, label %.lr.ph219, label %._crit_edge220, !llvm.loop !12

80:                                               ; preds = %._crit_edge220
  %81 = icmp ne ptr %.sroa.0.0, null
  %82 = icmp ne ptr %.sroa.9249.0, null
  %or.cond = and i1 %81, %82
  br i1 %or.cond, label %84, label %83

83:                                               ; preds = %80
  tail call void (ptr, ...) @_Z7RNAbortPKcz(ptr noundef nonnull @.str, ptr noundef nonnull @.str.24, i32 noundef 1713, ptr noundef nonnull @.str.2)
  br label %84

84:                                               ; preds = %80, %83
  %85 = getelementptr inbounds i8, ptr %.sroa.0.0, i64 8
  tail call void @_ZN7RNArrayIP10R3MeshEdgeE6RemoveES1_(ptr noundef nonnull align 8 dereferenceable(16) %85, ptr noundef %.sroa.9249.0)
  br label %86

86:                                               ; preds = %84, %._crit_edge220
  br i1 %.not171, label %93, label %87

87:                                               ; preds = %86
  %88 = icmp ne ptr %.sroa.7.0, null
  %89 = icmp ne ptr %.sroa.21.0, null
  %or.cond8 = and i1 %88, %89
  br i1 %or.cond8, label %91, label %90

90:                                               ; preds = %87
  tail call void (ptr, ...) @_Z7RNAbortPKcz(ptr noundef nonnull @.str, ptr noundef nonnull @.str.25, i32 noundef 1717, ptr noundef nonnull @.str.2)
  br label %91

91:                                               ; preds = %87, %90
  %92 = getelementptr inbounds i8, ptr %.sroa.7.0, i64 8
  tail call void @_ZN7RNArrayIP10R3MeshEdgeE6RemoveES1_(ptr noundef nonnull align 8 dereferenceable(16) %92, ptr noundef %.sroa.21.0)
  br label %93

93:                                               ; preds = %91, %86
  %94 = tail call noundef i32 @_ZNK8RNVArray8NEntriesEv(ptr noundef nonnull align 8 dereferenceable(16) %66)
  %95 = icmp sgt i32 %94, 0
  br i1 %95, label %.lr.ph224, label %.preheader211

.preheader211:                                    ; preds = %107, %93
  br i1 %.not, label %.loopexit210, label %111

.lr.ph224:                                        ; preds = %93, %107
  %.0155222 = phi i32 [ %108, %107 ], [ 0, %93 ]
  %96 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7RNArrayIP10R3MeshEdgeEixEi(ptr noundef nonnull align 8 dereferenceable(16) %66, i32 noundef %.0155222)
  %97 = load ptr, ptr %96, align 8, !tbaa !5
  %98 = getelementptr inbounds i8, ptr %97, i64 8
  %99 = load ptr, ptr %98, align 8, !tbaa !5
  %100 = icmp eq ptr %99, %16
  br i1 %100, label %101, label %102

101:                                              ; preds = %.lr.ph224
  store ptr %14, ptr %98, align 8, !tbaa !5
  br label %102

102:                                              ; preds = %.lr.ph224, %101
  %103 = getelementptr inbounds i8, ptr %97, i64 16
  %104 = load ptr, ptr %103, align 8, !tbaa !5
  %105 = icmp eq ptr %104, %16
  br i1 %105, label %106, label %107

106:                                              ; preds = %102
  store ptr %14, ptr %103, align 8, !tbaa !5
  br label %107

107:                                              ; preds = %106, %102
  %108 = add nuw nsw i32 %.0155222, 1
  %109 = tail call noundef i32 @_ZNK8RNVArray8NEntriesEv(ptr noundef nonnull align 8 dereferenceable(16) %66)
  %110 = icmp slt i32 %108, %109
  br i1 %110, label %.lr.ph224, label %.preheader211, !llvm.loop !13

111:                                              ; preds = %.preheader211
  %.not183 = icmp eq ptr %.sroa.0244.0, null
  br i1 %.not183, label %112, label %113

112:                                              ; preds = %111
  tail call void (ptr, ...) @_Z7RNAbortPKcz(ptr noundef nonnull @.str, ptr noundef nonnull @.str.26, i32 noundef 1732, ptr noundef nonnull @.str.2)
  br label %113

113:                                              ; preds = %112, %111
  %114 = getelementptr inbounds i8, ptr %.sroa.0244.0, i64 24
  %115 = load ptr, ptr %114, align 8, !tbaa !5
  %116 = icmp eq ptr %115, %18
  br i1 %116, label %117, label %118

117:                                              ; preds = %113
  store ptr %.sroa.4.0, ptr %114, align 8, !tbaa !5
  br label %118

118:                                              ; preds = %113, %117
  %119 = getelementptr inbounds i8, ptr %.sroa.0244.0, i64 32
  %120 = load ptr, ptr %119, align 8, !tbaa !5
  %121 = icmp eq ptr %120, %18
  br i1 %121, label %122, label %.loopexit210

122:                                              ; preds = %118
  store ptr %.sroa.4.0, ptr %119, align 8, !tbaa !5
  br label %.loopexit210

.loopexit210:                                     ; preds = %118, %122, %.preheader211
  br i1 %.not171, label %.loopexit210.1, label %123

123:                                              ; preds = %.loopexit210
  %.not183.1 = icmp eq ptr %.sroa.15.0, null
  br i1 %.not183.1, label %124, label %125

124:                                              ; preds = %123
  tail call void (ptr, ...) @_Z7RNAbortPKcz(ptr noundef nonnull @.str, ptr noundef nonnull @.str.26, i32 noundef 1732, ptr noundef nonnull @.str.2)
  br label %125

125:                                              ; preds = %124, %123
  %126 = getelementptr inbounds i8, ptr %.sroa.15.0, i64 24
  %127 = load ptr, ptr %126, align 8, !tbaa !5
  %128 = icmp eq ptr %127, %20
  br i1 %128, label %129, label %130

129:                                              ; preds = %125
  store ptr %.sroa.9.0, ptr %126, align 8, !tbaa !5
  br label %130

130:                                              ; preds = %129, %125
  %131 = getelementptr inbounds i8, ptr %.sroa.15.0, i64 32
  %132 = load ptr, ptr %131, align 8, !tbaa !5
  %133 = icmp eq ptr %132, %20
  br i1 %133, label %134, label %.loopexit210.1

134:                                              ; preds = %130
  store ptr %.sroa.9.0, ptr %131, align 8, !tbaa !5
  br label %.loopexit210.1

.loopexit210.1:                                   ; preds = %130, %134, %.loopexit210
  %135 = tail call noundef i32 @_ZNK8RNVArray8NEntriesEv(ptr noundef nonnull align 8 dereferenceable(16) %66)
  %136 = icmp sgt i32 %135, 0
  br i1 %136, label %.lr.ph230, label %.preheader206

.preheader206:                                    ; preds = %.loopexit208.1, %.loopexit210.1
  %.not180 = icmp eq ptr %.sroa.4.0, null
  %or.cond268 = or i1 %.not, %.not180
  br i1 %or.cond268, label %.loopexit, label %.preheader

.lr.ph230:                                        ; preds = %.loopexit210.1, %.loopexit208.1
  %.0150229 = phi i32 [ %171, %.loopexit208.1 ], [ 0, %.loopexit210.1 ]
  %137 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7RNArrayIP10R3MeshEdgeEixEi(ptr noundef nonnull align 8 dereferenceable(16) %66, i32 noundef %.0150229)
  %138 = load ptr, ptr %137, align 8, !tbaa !5
  %139 = getelementptr inbounds i8, ptr %138, i64 24
  %140 = load ptr, ptr %139, align 8, !tbaa !5
  %.not181 = icmp eq ptr %140, null
  br i1 %.not181, label %.loopexit208, label %.preheader207

.preheader207:                                    ; preds = %.lr.ph230
  %141 = getelementptr inbounds i8, ptr %140, i64 8
  %142 = load ptr, ptr %141, align 8, !tbaa !5
  %143 = icmp eq ptr %142, %16
  br i1 %143, label %144, label %145

144:                                              ; preds = %.preheader207
  store ptr %14, ptr %141, align 8, !tbaa !5
  br label %145

145:                                              ; preds = %.preheader207, %144
  %146 = getelementptr inbounds i8, ptr %140, i64 16
  %147 = load ptr, ptr %146, align 8, !tbaa !5
  %148 = icmp eq ptr %147, %16
  br i1 %148, label %149, label %150

149:                                              ; preds = %145
  store ptr %14, ptr %146, align 8, !tbaa !5
  br label %150

150:                                              ; preds = %149, %145
  %151 = getelementptr inbounds i8, ptr %140, i64 24
  %152 = load ptr, ptr %151, align 8, !tbaa !5
  %153 = icmp eq ptr %152, %16
  br i1 %153, label %154, label %.loopexit208

154:                                              ; preds = %150
  store ptr %14, ptr %151, align 8, !tbaa !5
  br label %.loopexit208

.loopexit208:                                     ; preds = %150, %154, %.lr.ph230
  %155 = getelementptr inbounds i8, ptr %138, i64 32
  %156 = load ptr, ptr %155, align 8, !tbaa !5
  %.not181.1 = icmp eq ptr %156, null
  br i1 %.not181.1, label %.loopexit208.1, label %.preheader207.1

.preheader207.1:                                  ; preds = %.loopexit208
  %157 = getelementptr inbounds i8, ptr %156, i64 8
  %158 = load ptr, ptr %157, align 8, !tbaa !5
  %159 = icmp eq ptr %158, %16
  br i1 %159, label %160, label %161

160:                                              ; preds = %.preheader207.1
  store ptr %14, ptr %157, align 8, !tbaa !5
  br label %161

161:                                              ; preds = %160, %.preheader207.1
  %162 = getelementptr inbounds i8, ptr %156, i64 16
  %163 = load ptr, ptr %162, align 8, !tbaa !5
  %164 = icmp eq ptr %163, %16
  br i1 %164, label %165, label %166

165:                                              ; preds = %161
  store ptr %14, ptr %162, align 8, !tbaa !5
  br label %166

166:                                              ; preds = %165, %161
  %167 = getelementptr inbounds i8, ptr %156, i64 24
  %168 = load ptr, ptr %167, align 8, !tbaa !5
  %169 = icmp eq ptr %168, %16
  br i1 %169, label %170, label %.loopexit208.1

170:                                              ; preds = %166
  store ptr %14, ptr %167, align 8, !tbaa !5
  br label %.loopexit208.1

.loopexit208.1:                                   ; preds = %166, %170, %.loopexit208
  %171 = add nuw nsw i32 %.0150229, 1
  %172 = tail call noundef i32 @_ZNK8RNVArray8NEntriesEv(ptr noundef nonnull align 8 dereferenceable(16) %66)
  %173 = icmp slt i32 %171, %172
  br i1 %173, label %.lr.ph230, label %.preheader206, !llvm.loop !14

.preheader:                                       ; preds = %.preheader206
  %174 = getelementptr inbounds i8, ptr %.sroa.4.0, i64 32
  %175 = load ptr, ptr %174, align 8, !tbaa !5
  %176 = icmp eq ptr %175, %.sroa.9249.0
  br i1 %176, label %177, label %178

177:                                              ; preds = %.preheader
  store ptr %.sroa.0244.0, ptr %174, align 8, !tbaa !5
  br label %178

178:                                              ; preds = %.preheader, %177
  %179 = getelementptr inbounds i8, ptr %.sroa.4.0, i64 40
  %180 = load ptr, ptr %179, align 8, !tbaa !5
  %181 = icmp eq ptr %180, %.sroa.9249.0
  br i1 %181, label %182, label %183

182:                                              ; preds = %178
  store ptr %.sroa.0244.0, ptr %179, align 8, !tbaa !5
  br label %183

183:                                              ; preds = %182, %178
  %184 = getelementptr inbounds i8, ptr %.sroa.4.0, i64 48
  %185 = load ptr, ptr %184, align 8, !tbaa !5
  %186 = icmp eq ptr %185, %.sroa.9249.0
  br i1 %186, label %187, label %.loopexit

187:                                              ; preds = %183
  store ptr %.sroa.0244.0, ptr %184, align 8, !tbaa !5
  br label %.loopexit

.loopexit:                                        ; preds = %183, %187, %.preheader206
  %.not180.1 = icmp eq ptr %.sroa.9.0, null
  %or.cond269 = or i1 %.not171, %.not180.1
  br i1 %or.cond269, label %.loopexit.1, label %.preheader.1

.preheader.1:                                     ; preds = %.loopexit
  %188 = getelementptr inbounds i8, ptr %.sroa.9.0, i64 32
  %189 = load ptr, ptr %188, align 8, !tbaa !5
  %190 = icmp eq ptr %189, %.sroa.21.0
  br i1 %190, label %191, label %192

191:                                              ; preds = %.preheader.1
  store ptr %.sroa.15.0, ptr %188, align 8, !tbaa !5
  br label %192

192:                                              ; preds = %191, %.preheader.1
  %193 = getelementptr inbounds i8, ptr %.sroa.9.0, i64 40
  %194 = load ptr, ptr %193, align 8, !tbaa !5
  %195 = icmp eq ptr %194, %.sroa.21.0
  br i1 %195, label %196, label %197

196:                                              ; preds = %192
  store ptr %.sroa.15.0, ptr %193, align 8, !tbaa !5
  br label %197

197:                                              ; preds = %196, %192
  %198 = getelementptr inbounds i8, ptr %.sroa.9.0, i64 48
  %199 = load ptr, ptr %198, align 8, !tbaa !5
  %200 = icmp eq ptr %199, %.sroa.21.0
  br i1 %200, label %201, label %.loopexit.1

201:                                              ; preds = %197
  store ptr %.sroa.15.0, ptr %198, align 8, !tbaa !5
  br label %.loopexit.1

.loopexit.1:                                      ; preds = %197, %201, %.loopexit
  %202 = tail call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK6R3Mesh14VertexPositionEPK12R3MeshVertex(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef %14)
  %203 = tail call noundef double @_Z10R3DistanceRK7R3PointS1_(ptr noundef nonnull align 8 dereferenceable(24) %2, ptr noundef nonnull align 8 dereferenceable(24) %202)
  %204 = tail call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK6R3Mesh14VertexPositionEPK12R3MeshVertex(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef %16)
  %205 = tail call noundef double @_Z10R3DistanceRK7R3PointS1_(ptr noundef nonnull align 8 dereferenceable(24) %2, ptr noundef nonnull align 8 dereferenceable(24) %204)
  %206 = fadd double %203, %205
  %207 = load double, ptr @RN_EPSILON, align 8, !tbaa !15
  %208 = tail call noundef i32 @_Z12RNIsPositivedd(double noundef %206, double noundef %207)
  %.not174 = icmp eq i32 %208, 0
  br i1 %.not174, label %216, label %209

209:                                              ; preds = %.loopexit.1
  %210 = fdiv double %203, %206
  %211 = fdiv double %205, %206
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %4) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %5) #6
  %212 = tail call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK6R3Mesh19VertexTextureCoordsEPK12R3MeshVertex(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef %14)
  call void @_ZmldRK7R2Point(ptr dead_on_unwind nonnull writable sret(%class.R2Point) align 8 %5, double noundef %211, ptr noundef nonnull align 8 dereferenceable(16) %212)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %6) #6
  %213 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK6R3Mesh19VertexTextureCoordsEPK12R3MeshVertex(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef %16)
  call void @_ZmldRK7R2Point(ptr dead_on_unwind nonnull writable sret(%class.R2Point) align 8 %6, double noundef %210, ptr noundef nonnull align 8 dereferenceable(16) %213)
  call void @_ZplRK7R2PointS1_(ptr dead_on_unwind nonnull writable sret(%class.R2Point) align 8 %4, ptr noundef nonnull align 8 dereferenceable(16) %5, ptr noundef nonnull align 8 dereferenceable(16) %6)
  call void @_ZN6R3Mesh22SetVertexTextureCoordsEP12R3MeshVertexRK7R2Point(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef %14, ptr noundef nonnull align 8 dereferenceable(16) %4)
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %6) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %5) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %4) #6
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %7) #6
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %8) #6
  %214 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK6R3Mesh11VertexColorEPK12R3MeshVertex(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef %14)
  call void @_ZmldRK5RNRgb(ptr dead_on_unwind nonnull writable sret(%class.RNRgb) align 8 %8, double noundef %211, ptr noundef nonnull align 8 dereferenceable(24) %214)
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %9) #6
  %215 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK6R3Mesh11VertexColorEPK12R3MeshVertex(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef %16)
  call void @_ZmldRK5RNRgb(ptr dead_on_unwind nonnull writable sret(%class.RNRgb) align 8 %9, double noundef %210, ptr noundef nonnull align 8 dereferenceable(24) %215)
  call void @_ZplRK5RNRgbS1_(ptr dead_on_unwind nonnull writable sret(%class.RNRgb) align 8 %7, ptr noundef nonnull align 8 dereferenceable(24) %8, ptr noundef nonnull align 8 dereferenceable(24) %9)
  call void @_ZN6R3Mesh14SetVertexColorEP12R3MeshVertexRK5RNRgb(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef %14, ptr noundef nonnull align 8 dereferenceable(24) %7)
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %9) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %8) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %7) #6
  br label %216

216:                                              ; preds = %209, %.loopexit.1
  br i1 %.not, label %221, label %217

217:                                              ; preds = %216
  %218 = load ptr, ptr %0, align 8, !tbaa !17
  %219 = getelementptr inbounds i8, ptr %218, i64 576
  %220 = load ptr, ptr %219, align 8
  call void %220(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef nonnull %18)
  br label %221

221:                                              ; preds = %217, %216
  br i1 %.not171, label %226, label %222

222:                                              ; preds = %221
  %223 = load ptr, ptr %0, align 8, !tbaa !17
  %224 = getelementptr inbounds i8, ptr %223, i64 576
  %225 = load ptr, ptr %224, align 8
  call void %225(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef nonnull %20)
  br label %226

226:                                              ; preds = %222, %221
  br i1 %.not, label %231, label %227

227:                                              ; preds = %226
  %228 = load ptr, ptr %0, align 8, !tbaa !17
  %229 = getelementptr inbounds i8, ptr %228, i64 568
  %230 = load ptr, ptr %229, align 8
  call void %230(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef %.sroa.9249.0)
  br label %231

231:                                              ; preds = %227, %226
  br i1 %.not171, label %236, label %232

232:                                              ; preds = %231
  %233 = load ptr, ptr %0, align 8, !tbaa !17
  %234 = getelementptr inbounds i8, ptr %233, i64 568
  %235 = load ptr, ptr %234, align 8
  call void %235(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef %.sroa.21.0)
  br label %236

236:                                              ; preds = %232, %231
  %237 = load ptr, ptr %0, align 8, !tbaa !17
  %238 = getelementptr inbounds i8, ptr %237, i64 568
  %239 = load ptr, ptr %238, align 8
  call void %239(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef %1)
  %240 = load ptr, ptr %0, align 8, !tbaa !17
  %241 = getelementptr inbounds i8, ptr %240, i64 560
  %242 = load ptr, ptr %241, align 8
  call void %242(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef %16)
  call void @_ZN6R3Mesh17SetVertexPositionEP12R3MeshVertexRK7R3Point(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef %14, ptr noundef nonnull align 8 dereferenceable(24) %2)
  br label %.loopexit213

.loopexit213:                                     ; preds = %55, %236, %3
  %.8 = phi ptr [ null, %3 ], [ %14, %236 ], [ null, %55 ]
  ret ptr %.8
}

declare void @_ZplRK7R2PointS1_(ptr dead_on_unwind writable sret(%class.R2Point) align 8, ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #0

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZmldRK7R2Point(ptr dead_on_unwind noalias writable sret(%class.R2Point) align 8, double noundef, ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #3

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZplRK5RNRgbS1_(ptr dead_on_unwind noalias writable sret(%class.RNRgb) align 8, ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #3

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZmldRK5RNRgb(ptr dead_on_unwind noalias writable sret(%class.RNRgb) align 8, double noundef, ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #3

attributes #0 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { 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 = { 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 #6 = { 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 = distinct !{!9, !10}
!10 = !{!"llvm.loop.mustprogress"}
!11 = distinct !{!11, !10}
!12 = distinct !{!12, !10}
!13 = distinct !{!13, !10}
!14 = distinct !{!14, !10}
!15 = !{!16, !16, i64 0}
!16 = !{!"double", !7, i64 0}
!17 = !{!18, !18, i64 0}
!18 = !{!"vtable pointer", !8, i64 0}


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