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

; 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.R3Affine = type { %class.R3Transformation, %class.R4Matrix, %class.R4Matrix, %class.RNFlags }
%class.R3Transformation = type { ptr }
%class.R4Matrix = type { [4 x [4 x double]] }
%class.RNFlags = type { i64 }
%class.R3Point = type { [3 x double] }
%class.R3Vector = type { [3 x double] }
%struct.R3MeshGeodesicBeam = type { ptr, ptr, ptr, %class.R3Affine, %class.R3Span, double, double, ptr }
%class.R3Span = type { %class.R3Ray, %class.R3Point, double }
%class.R3Ray = type { %class.R3Line }
%class.R3Line = type { %class.R3Point, %class.R3Vector }
%class.RNHeap.4 = type <{ ptr, i32, i32, i32, i32, ptr, ptr, ptr, i32, [4 x i8] }>
%class.RNArray.6 = type { %class.RNVArray }
%class.RNVArray = type { ptr, i32, i32 }
%class.R3Plane = type { %class.R3Vector, double }

@.str = external hidden unnamed_addr constant [41 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [88 x i8], align 1
@R3identity_affine = external global %class.R3Affine, align 8
@RN_EPSILON = external global double, align 8
@R3null_point = external global %class.R3Point, align 8
@.str.40 = external hidden unnamed_addr constant [53 x i8], align 1
@.str.41 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.42 = external hidden unnamed_addr constant [5 x i8], align 1
@R3posz_vector = external global %class.R3Vector, align 8

declare i32 @__gxx_personality_v0(...)

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

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare { i64, i1 } @llvm.umul.with.overflow.i64(i64, i64) #2

; Function Attrs: nobuiltin allocsize(0)
declare noundef nonnull ptr @_Znam(i64 noundef) #3

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

; 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) #5 align 2

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

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

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

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

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

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

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

; Function Attrs: nobuiltin nounwind
declare void @_ZdlPvm(ptr noundef, i64 noundef) #6

declare void @_ZN7R3PointC1ERKS_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #0

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef double @_ZNK6R3Mesh10EdgeLengthEPK10R3MeshEdge(ptr noundef nonnull align 8 dereferenceable(272), ptr noundef) #1 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) #7

declare void @_ZrmRK8R3VectorS1_(ptr dead_on_unwind writable sret(%class.R3Vector) align 8, ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24)) #0

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef i32 @_Z8RNIsZerodd(double noundef, double noundef) #1

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

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

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

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

declare void @_ZN8R3Affine9TransformERKS_(ptr noundef nonnull align 8 dereferenceable(272), ptr noundef nonnull align 8 dereferenceable(272)) #0

; Function Attrs: nounwind
declare void @_ZN8R3AffineD1Ev(ptr noundef nonnull align 8 dereferenceable(272)) unnamed_addr #8

declare void @_ZngRK8R3Vector(ptr dead_on_unwind writable sret(%class.R3Vector) align 8, ptr noundef nonnull align 8 dereferenceable(24)) #0

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

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

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

declare void @_ZN8R3VectorC1ERKS_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #0

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

declare void @_ZN8R3Vector9NormalizeEv(ptr noundef nonnull align 8 dereferenceable(24)) #0

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef ptr @_ZNK6R3Mesh12VertexOnFaceEPK10R3MeshFacePK10R3MeshEdgei(ptr noundef nonnull align 8 dereferenceable(272), ptr noundef, ptr noundef, i32 noundef) #1 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) #5 align 2

; Function Attrs: nobuiltin nounwind
declare void @_ZdaPv(ptr noundef) #6

declare void @_ZN7R3Point9TransformERK16R3Transformation(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(8)) #0

; Function Attrs: nobuiltin allocsize(0)
declare noundef nonnull ptr @_Znwm(i64 noundef) #3

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

declare void @_ZN7R3PlaneC1ERK7R3PointRK8R3Vector(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #0

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

; Function Attrs: mustprogress uwtable
define dso_local noundef ptr @_ZNK6R3Mesh17GeodesicDistancesEPK12R3MeshVertexd(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef %1, double noundef %2) #9 align 2 personality ptr @__gxx_personality_v0 {
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca double, align 8
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca %struct.R3MeshGeodesicBeam, align 8
  %14 = alloca %class.RNHeap.4, align 8
  %15 = alloca ptr, align 8
  %16 = alloca i32, align 4
  %17 = alloca %class.RNArray.6, align 8
  %18 = alloca i32, align 4
  %19 = alloca ptr, align 8
  %20 = alloca ptr, align 8
  %21 = alloca ptr, align 8
  %22 = alloca ptr, align 8
  %23 = alloca i32, align 4
  %24 = alloca %class.R3Point, align 8
  %25 = alloca %class.R3Vector, align 8
  %26 = alloca %class.R3Vector, align 8
  %27 = alloca %class.R3Plane, align 8
  %28 = alloca %class.R3Point, align 8
  %29 = alloca %class.R3Vector, align 8
  %30 = alloca %class.R3Vector, align 8
  %31 = alloca %class.R3Plane, align 8
  %32 = alloca %class.R3Vector, align 8
  %33 = alloca %class.R3Affine, align 8
  %34 = alloca %class.R3Vector, align 8
  %35 = alloca %class.R3Point, align 8
  %36 = alloca %class.R3Vector, align 8
  %37 = alloca %class.R3Vector, align 8
  %38 = alloca %class.R3Point, align 8
  %39 = alloca i32, align 4
  %40 = alloca ptr, align 8
  %41 = alloca ptr, align 8
  %42 = alloca ptr, align 8
  %43 = alloca ptr, align 8
  %44 = alloca %class.R3Point, align 8
  %45 = alloca %class.R3Point, align 8
  %46 = alloca %class.R3Span, align 8
  %47 = alloca %class.R3Vector, align 8
  %48 = alloca %class.R3Vector, align 8
  %49 = alloca %class.R3Plane, align 8
  %50 = alloca %class.R3Point, align 8
  %51 = alloca double, align 8
  %52 = alloca ptr, align 8
  %53 = alloca i32, align 4
  %54 = alloca ptr, align 8
  %55 = alloca %class.R3Point, align 8
  %56 = alloca double, align 8
  %57 = alloca i32, align 4
  %58 = alloca double, align 8
  %59 = alloca double, align 8
  %60 = alloca double, align 8
  %61 = alloca double, align 8
  %62 = alloca double, align 8
  %63 = alloca i32, align 4
  %64 = alloca ptr, align 8
  %65 = alloca ptr, align 8
  %66 = alloca ptr, align 8
  %67 = alloca ptr, align 8
  %68 = alloca i32, align 4
  store ptr %0, ptr %4, align 8, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !5
  store double %2, ptr %6, align 8, !tbaa !9
  %69 = load ptr, ptr %4, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #11
  %70 = call noundef i32 @_ZNK6R3Mesh9NVerticesEv(ptr noundef nonnull align 8 dereferenceable(272) %69)
  %71 = sext i32 %70 to i64
  %72 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %71, i64 8)
  %73 = extractvalue { i64, i1 } %72, 1
  %74 = extractvalue { i64, i1 } %72, 0
  %75 = select i1 %73, i64 -1, i64 %74
  %76 = call noalias noundef nonnull ptr @_Znam(i64 noundef %75) #12
  store ptr %76, ptr %7, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #11
  %77 = call noundef i32 @_ZNK6R3Mesh6NEdgesEv(ptr noundef nonnull align 8 dereferenceable(272) %69)
  %78 = sext i32 %77 to i64
  %79 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %78, i64 8)
  %80 = extractvalue { i64, i1 } %79, 1
  %81 = extractvalue { i64, i1 } %79, 0
  %82 = select i1 %80, i64 -1, i64 %81
  %83 = call noalias noundef nonnull ptr @_Znam(i64 noundef %82) #12
  store ptr %83, ptr %8, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #11
  %84 = call noundef i32 @_ZNK6R3Mesh6NFacesEv(ptr noundef nonnull align 8 dereferenceable(272) %69)
  %85 = sext i32 %84 to i64
  %86 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %85, i64 8)
  %87 = extractvalue { i64, i1 } %86, 1
  %88 = extractvalue { i64, i1 } %86, 0
  %89 = select i1 %87, i64 -1, i64 %88
  %90 = call noalias noundef nonnull ptr @_Znam(i64 noundef %89) #12
  store ptr %90, ptr %9, align 8, !tbaa !5
  %91 = load ptr, ptr %7, align 8, !tbaa !5
  %92 = icmp ne ptr %91, null
  br i1 %92, label %93, label %99

93:                                               ; preds = %3
  %94 = load ptr, ptr %8, align 8, !tbaa !5
  %95 = icmp ne ptr %94, null
  br i1 %95, label %96, label %99

96:                                               ; preds = %93
  %97 = load ptr, ptr %9, align 8, !tbaa !5
  %98 = icmp ne ptr %97, null
  br i1 %98, label %100, label %99

99:                                               ; preds = %96, %93, %3
  call void (ptr, ...) @_Z7RNAbortPKcz(ptr noundef @.str, ptr noundef @.str.40, i32 noundef 3439, ptr noundef @.str.2)
  br label %100

100:                                              ; preds = %99, %96
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #11
  store i32 0, ptr %10, align 4, !tbaa !11
  br label %101

101:                                              ; preds = %111, %100
  %102 = load i32, ptr %10, align 4, !tbaa !11
  %103 = call noundef i32 @_ZNK6R3Mesh9NVerticesEv(ptr noundef nonnull align 8 dereferenceable(272) %69)
  %104 = icmp slt i32 %102, %103
  br i1 %104, label %106, label %105

105:                                              ; preds = %101
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #11
  br label %114

106:                                              ; preds = %101
  %107 = load ptr, ptr %7, align 8, !tbaa !5
  %108 = load i32, ptr %10, align 4, !tbaa !11
  %109 = sext i32 %108 to i64
  %110 = getelementptr inbounds double, ptr %107, i64 %109
  store double 0x47EFFFFFE0000000, ptr %110, align 8, !tbaa !9
  br label %111

111:                                              ; preds = %106
  %112 = load i32, ptr %10, align 4, !tbaa !11
  %113 = add nsw i32 %112, 1
  store i32 %113, ptr %10, align 4, !tbaa !11
  br label %101, !llvm.loop !13

114:                                              ; preds = %105
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #11
  store i32 0, ptr %11, align 4, !tbaa !11
  br label %115

115:                                              ; preds = %125, %114
  %116 = load i32, ptr %11, align 4, !tbaa !11
  %117 = call noundef i32 @_ZNK6R3Mesh6NEdgesEv(ptr noundef nonnull align 8 dereferenceable(272) %69)
  %118 = icmp slt i32 %116, %117
  br i1 %118, label %120, label %119

119:                                              ; preds = %115
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #11
  br label %128

120:                                              ; preds = %115
  %121 = load ptr, ptr %8, align 8, !tbaa !5
  %122 = load i32, ptr %11, align 4, !tbaa !11
  %123 = sext i32 %122 to i64
  %124 = getelementptr inbounds double, ptr %121, i64 %123
  store double 0x47EFFFFFE0000000, ptr %124, align 8, !tbaa !9
  br label %125

125:                                              ; preds = %120
  %126 = load i32, ptr %11, align 4, !tbaa !11
  %127 = add nsw i32 %126, 1
  store i32 %127, ptr %11, align 4, !tbaa !11
  br label %115, !llvm.loop !15

128:                                              ; preds = %119
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #11
  store i32 0, ptr %12, align 4, !tbaa !11
  br label %129

129:                                              ; preds = %139, %128
  %130 = load i32, ptr %12, align 4, !tbaa !11
  %131 = call noundef i32 @_ZNK6R3Mesh6NFacesEv(ptr noundef nonnull align 8 dereferenceable(272) %69)
  %132 = icmp slt i32 %130, %131
  br i1 %132, label %134, label %133

133:                                              ; preds = %129
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #11
  br label %142

134:                                              ; preds = %129
  %135 = load ptr, ptr %9, align 8, !tbaa !5
  %136 = load i32, ptr %12, align 4, !tbaa !11
  %137 = sext i32 %136 to i64
  %138 = getelementptr inbounds double, ptr %135, i64 %137
  store double 0x47EFFFFFE0000000, ptr %138, align 8, !tbaa !9
  br label %139

139:                                              ; preds = %134
  %140 = load i32, ptr %12, align 4, !tbaa !11
  %141 = add nsw i32 %140, 1
  store i32 %141, ptr %12, align 4, !tbaa !11
  br label %129, !llvm.loop !16

142:                                              ; preds = %133
  %143 = load ptr, ptr %7, align 8, !tbaa !5
  %144 = load ptr, ptr %5, align 8, !tbaa !5
  %145 = call noundef i32 @_ZNK6R3Mesh8VertexIDEPK12R3MeshVertex(ptr noundef nonnull align 8 dereferenceable(272) %69, ptr noundef %144)
  %146 = sext i32 %145 to i64
  %147 = getelementptr inbounds double, ptr %143, i64 %146
  store double 0.000000e+00, ptr %147, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 400, ptr %13) #11
  call void @_ZN18R3MeshGeodesicBeamC2Ev(ptr noundef nonnull align 8 dereferenceable(400) %13)
  call void @llvm.lifetime.start.p0(i64 56, ptr %14) #11
  %148 = getelementptr inbounds %struct.R3MeshGeodesicBeam, ptr %13, i32 0, i32 5
  invoke void @_ZN6RNHeapIP18R3MeshGeodesicBeamEC2ES1_PdPPS1_i(ptr noundef nonnull align 8 dereferenceable(52) %14, ptr noundef %13, ptr noundef %148, ptr noundef null, i32 noundef 1)
          to label %149 unwind label %164

149:                                              ; preds = %142
  call void @llvm.lifetime.start.p0(i64 16, ptr %17) #11
  invoke void @_ZN7RNArrayIP18R3MeshGeodesicBeamEC2Ev(ptr noundef nonnull align 8 dereferenceable(16) %17)
          to label %150 unwind label %168

150:                                              ; preds = %149
  %151 = load ptr, ptr %5, align 8, !tbaa !5
  %152 = load double, ptr %6, align 8, !tbaa !9
  %153 = load ptr, ptr %7, align 8, !tbaa !5
  %154 = load ptr, ptr %8, align 8, !tbaa !5
  %155 = load ptr, ptr %9, align 8, !tbaa !5
  invoke void @_ZL34R3MeshCreateGeodesicBeamsForVertexPK6R3MeshPK12R3MeshVertexddP18R3MeshGeodesicBeamPdS7_S7_R6RNHeapIS6_ER7RNArrayIS6_E(ptr noundef %69, ptr noundef %151, double noundef %152, double noundef 0.000000e+00, ptr noundef null, ptr noundef %153, ptr noundef %154, ptr noundef %155, ptr noundef nonnull align 8 dereferenceable(52) %14, ptr noundef nonnull align 8 dereferenceable(16) %17)
          to label %156 unwind label %172

156:                                              ; preds = %150
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #11
  store i32 0, ptr %18, align 4, !tbaa !11
  br label %157

157:                                              ; preds = %230, %156
  %158 = load i32, ptr %18, align 4, !tbaa !11
  %159 = load ptr, ptr %5, align 8, !tbaa !5
  %160 = invoke noundef i32 @_ZNK6R3Mesh13VertexValenceEPK12R3MeshVertex(ptr noundef nonnull align 8 dereferenceable(272) %69, ptr noundef %159)
          to label %161 unwind label %176

161:                                              ; preds = %157
  %162 = icmp slt i32 %158, %160
  br i1 %162, label %180, label %163

163:                                              ; preds = %161
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #11
  br label %235

164:                                              ; preds = %142
  %165 = landingpad { ptr, i32 }
          cleanup
  %166 = extractvalue { ptr, i32 } %165, 0
  store ptr %166, ptr %15, align 8
  %167 = extractvalue { ptr, i32 } %165, 1
  store i32 %167, ptr %16, align 4
  br label %984

168:                                              ; preds = %149
  %169 = landingpad { ptr, i32 }
          cleanup
  %170 = extractvalue { ptr, i32 } %169, 0
  store ptr %170, ptr %15, align 8
  %171 = extractvalue { ptr, i32 } %169, 1
  store i32 %171, ptr %16, align 4
  br label %983

172:                                              ; preds = %236, %150
  %173 = landingpad { ptr, i32 }
          cleanup
  %174 = extractvalue { ptr, i32 } %173, 0
  store ptr %174, ptr %15, align 8
  %175 = extractvalue { ptr, i32 } %173, 1
  store i32 %175, ptr %16, align 4
  br label %982

176:                                              ; preds = %157
  %177 = landingpad { ptr, i32 }
          cleanup
  %178 = extractvalue { ptr, i32 } %177, 0
  store ptr %178, ptr %15, align 8
  %179 = extractvalue { ptr, i32 } %177, 1
  store i32 %179, ptr %16, align 4
  br label %234

180:                                              ; preds = %161
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #11
  %181 = load ptr, ptr %5, align 8, !tbaa !5
  %182 = load i32, ptr %18, align 4, !tbaa !11
  %183 = invoke noundef ptr @_ZNK6R3Mesh12EdgeOnVertexEPK12R3MeshVertexi(ptr noundef nonnull align 8 dereferenceable(272) %69, ptr noundef %181, i32 noundef %182)
          to label %184 unwind label %221

184:                                              ; preds = %180
  store ptr %183, ptr %19, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #11
  %185 = load ptr, ptr %19, align 8, !tbaa !5
  %186 = load ptr, ptr %5, align 8, !tbaa !5
  %187 = invoke noundef ptr @_ZNK6R3Mesh16VertexAcrossEdgeEPK10R3MeshEdgePK12R3MeshVertex(ptr noundef nonnull align 8 dereferenceable(272) %69, ptr noundef %185, ptr noundef %186)
          to label %188 unwind label %225

188:                                              ; preds = %184
  store ptr %187, ptr %20, align 8, !tbaa !5
  %189 = load ptr, ptr %19, align 8, !tbaa !5
  %190 = invoke noundef double @_ZNK6R3Mesh10EdgeLengthEPK10R3MeshEdge(ptr noundef nonnull align 8 dereferenceable(272) %69, ptr noundef %189)
          to label %191 unwind label %225

191:                                              ; preds = %188
  %192 = load ptr, ptr %8, align 8, !tbaa !5
  %193 = load ptr, ptr %19, align 8, !tbaa !5
  %194 = invoke noundef i32 @_ZNK6R3Mesh6EdgeIDEPK10R3MeshEdge(ptr noundef nonnull align 8 dereferenceable(272) %69, ptr noundef %193)
          to label %195 unwind label %225

195:                                              ; preds = %191
  %196 = sext i32 %194 to i64
  %197 = getelementptr inbounds double, ptr %192, i64 %196
  store double %190, ptr %197, align 8, !tbaa !9
  %198 = load ptr, ptr %19, align 8, !tbaa !5
  %199 = invoke noundef double @_ZNK6R3Mesh10EdgeLengthEPK10R3MeshEdge(ptr noundef nonnull align 8 dereferenceable(272) %69, ptr noundef %198)
          to label %200 unwind label %225

200:                                              ; preds = %195
  %201 = load ptr, ptr %7, align 8, !tbaa !5
  %202 = load ptr, ptr %20, align 8, !tbaa !5
  %203 = invoke noundef i32 @_ZNK6R3Mesh8VertexIDEPK12R3MeshVertex(ptr noundef nonnull align 8 dereferenceable(272) %69, ptr noundef %202)
          to label %204 unwind label %225

204:                                              ; preds = %200
  %205 = sext i32 %203 to i64
  %206 = getelementptr inbounds double, ptr %201, i64 %205
  store double %199, ptr %206, align 8, !tbaa !9
  %207 = load ptr, ptr %20, align 8, !tbaa !5
  %208 = invoke noundef i32 @_ZL30R3MeshVertexIsSaddleOrBoundaryPK6R3MeshPK12R3MeshVertex(ptr noundef %69, ptr noundef %207)
          to label %209 unwind label %225

209:                                              ; preds = %204
  %210 = icmp ne i32 %208, 0
  br i1 %210, label %211, label %229

211:                                              ; preds = %209
  %212 = load ptr, ptr %20, align 8, !tbaa !5
  %213 = load double, ptr %6, align 8, !tbaa !9
  %214 = load ptr, ptr %19, align 8, !tbaa !5
  %215 = invoke noundef double @_ZNK6R3Mesh10EdgeLengthEPK10R3MeshEdge(ptr noundef nonnull align 8 dereferenceable(272) %69, ptr noundef %214)
          to label %216 unwind label %225

216:                                              ; preds = %211
  %217 = load ptr, ptr %7, align 8, !tbaa !5
  %218 = load ptr, ptr %8, align 8, !tbaa !5
  %219 = load ptr, ptr %9, align 8, !tbaa !5
  invoke void @_ZL34R3MeshCreateGeodesicBeamsForVertexPK6R3MeshPK12R3MeshVertexddP18R3MeshGeodesicBeamPdS7_S7_R6RNHeapIS6_ER7RNArrayIS6_E(ptr noundef %69, ptr noundef %212, double noundef %213, double noundef %215, ptr noundef null, ptr noundef %217, ptr noundef %218, ptr noundef %219, ptr noundef nonnull align 8 dereferenceable(52) %14, ptr noundef nonnull align 8 dereferenceable(16) %17)
          to label %220 unwind label %225

220:                                              ; preds = %216
  br label %229

221:                                              ; preds = %180
  %222 = landingpad { ptr, i32 }
          cleanup
  %223 = extractvalue { ptr, i32 } %222, 0
  store ptr %223, ptr %15, align 8
  %224 = extractvalue { ptr, i32 } %222, 1
  store i32 %224, ptr %16, align 4
  br label %233

225:                                              ; preds = %216, %211, %204, %200, %195, %191, %188, %184
  %226 = landingpad { ptr, i32 }
          cleanup
  %227 = extractvalue { ptr, i32 } %226, 0
  store ptr %227, ptr %15, align 8
  %228 = extractvalue { ptr, i32 } %226, 1
  store i32 %228, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #11
  br label %233

229:                                              ; preds = %220, %209
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #11
  br label %230

230:                                              ; preds = %229
  %231 = load i32, ptr %18, align 4, !tbaa !11
  %232 = add nsw i32 %231, 1
  store i32 %232, ptr %18, align 4, !tbaa !11
  br label %157, !llvm.loop !17

233:                                              ; preds = %225, %221
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #11
  br label %234

234:                                              ; preds = %233, %176
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #11
  br label %982

235:                                              ; preds = %163
  br label %236

236:                                              ; preds = %936, %934, %235
  %237 = invoke noundef i32 @_ZNK6RNHeapIP18R3MeshGeodesicBeamE7IsEmptyEv(ptr noundef nonnull align 8 dereferenceable(52) %14)
          to label %238 unwind label %172

238:                                              ; preds = %236
  %239 = icmp ne i32 %237, 0
  %240 = xor i1 %239, true
  br i1 %240, label %241, label %950

241:                                              ; preds = %238
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #11
  %242 = invoke noundef ptr @_ZN6RNHeapIP18R3MeshGeodesicBeamE3PopEv(ptr noundef nonnull align 8 dereferenceable(52) %14)
          to label %243 unwind label %248

243:                                              ; preds = %241
  store ptr %242, ptr %21, align 8, !tbaa !5
  %244 = load ptr, ptr %21, align 8, !tbaa !5
  %245 = icmp ne ptr %244, null
  br i1 %245, label %252, label %246

246:                                              ; preds = %243
  invoke void (ptr, ...) @_Z7RNAbortPKcz(ptr noundef @.str, ptr noundef @.str.41, i32 noundef 3466, ptr noundef @.str.2)
          to label %247 unwind label %248

247:                                              ; preds = %246
  br label %252

248:                                              ; preds = %246, %241
  %249 = landingpad { ptr, i32 }
          cleanup
  %250 = extractvalue { ptr, i32 } %249, 0
  store ptr %250, ptr %15, align 8
  %251 = extractvalue { ptr, i32 } %249, 1
  store i32 %251, ptr %16, align 4
  br label %949

252:                                              ; preds = %247, %243
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #11
  %253 = load ptr, ptr %21, align 8, !tbaa !5
  %254 = getelementptr inbounds %struct.R3MeshGeodesicBeam, ptr %253, i32 0, i32 2
  %255 = load ptr, ptr %254, align 8, !tbaa !18
  %256 = load ptr, ptr %21, align 8, !tbaa !5
  %257 = getelementptr inbounds %struct.R3MeshGeodesicBeam, ptr %256, i32 0, i32 1
  %258 = load ptr, ptr %257, align 8, !tbaa !30
  %259 = invoke noundef ptr @_ZNK6R3Mesh14FaceAcrossEdgeEPK10R3MeshEdgePK10R3MeshFace(ptr noundef nonnull align 8 dereferenceable(272) %69, ptr noundef %255, ptr noundef %258)
          to label %260 unwind label %265

260:                                              ; preds = %252
  store ptr %259, ptr %22, align 8, !tbaa !5
  %261 = load ptr, ptr %22, align 8, !tbaa !5
  %262 = icmp ne ptr %261, null
  br i1 %262, label %269, label %263

263:                                              ; preds = %260
  invoke void (ptr, ...) @_Z7RNAbortPKcz(ptr noundef @.str, ptr noundef @.str.42, i32 noundef 3470, ptr noundef @.str.2)
          to label %264 unwind label %265

264:                                              ; preds = %263
  br label %269

265:                                              ; preds = %307, %292, %269, %263, %252
  %266 = landingpad { ptr, i32 }
          cleanup
  %267 = extractvalue { ptr, i32 } %266, 0
  store ptr %267, ptr %15, align 8
  %268 = extractvalue { ptr, i32 } %266, 1
  store i32 %268, ptr %16, align 4
  br label %948

269:                                              ; preds = %264, %260
  %270 = load ptr, ptr %21, align 8, !tbaa !5
  %271 = getelementptr inbounds %struct.R3MeshGeodesicBeam, ptr %270, i32 0, i32 5
  %272 = load double, ptr %271, align 8, !tbaa !31
  %273 = load ptr, ptr %21, align 8, !tbaa !5
  %274 = getelementptr inbounds %struct.R3MeshGeodesicBeam, ptr %273, i32 0, i32 5
  %275 = load double, ptr %274, align 8, !tbaa !31
  %276 = load ptr, ptr %21, align 8, !tbaa !5
  %277 = getelementptr inbounds %struct.R3MeshGeodesicBeam, ptr %276, i32 0, i32 6
  %278 = load double, ptr %277, align 8, !tbaa !32
  %279 = fsub double %275, %278
  %280 = load ptr, ptr %7, align 8, !tbaa !5
  %281 = load ptr, ptr %21, align 8, !tbaa !5
  %282 = getelementptr inbounds %struct.R3MeshGeodesicBeam, ptr %281, i32 0, i32 0
  %283 = load ptr, ptr %282, align 8, !tbaa !33
  %284 = invoke noundef i32 @_ZNK6R3Mesh8VertexIDEPK12R3MeshVertex(ptr noundef nonnull align 8 dereferenceable(272) %69, ptr noundef %283)
          to label %285 unwind label %265

285:                                              ; preds = %269
  %286 = sext i32 %284 to i64
  %287 = getelementptr inbounds double, ptr %280, i64 %286
  %288 = load double, ptr %287, align 8, !tbaa !9
  %289 = fadd double %279, %288
  %290 = fcmp ogt double %272, %289
  br i1 %290, label %291, label %292

291:                                              ; preds = %285
  store i32 14, ptr %23, align 4
  br label %934, !llvm.loop !34

292:                                              ; preds = %285
  %293 = load ptr, ptr %21, align 8, !tbaa !5
  %294 = getelementptr inbounds %struct.R3MeshGeodesicBeam, ptr %293, i32 0, i32 5
  %295 = load double, ptr %294, align 8, !tbaa !31
  %296 = load ptr, ptr %8, align 8, !tbaa !5
  %297 = load ptr, ptr %21, align 8, !tbaa !5
  %298 = getelementptr inbounds %struct.R3MeshGeodesicBeam, ptr %297, i32 0, i32 2
  %299 = load ptr, ptr %298, align 8, !tbaa !18
  %300 = invoke noundef i32 @_ZNK6R3Mesh6EdgeIDEPK10R3MeshEdge(ptr noundef nonnull align 8 dereferenceable(272) %69, ptr noundef %299)
          to label %301 unwind label %265

301:                                              ; preds = %292
  %302 = sext i32 %300 to i64
  %303 = getelementptr inbounds double, ptr %296, i64 %302
  %304 = load double, ptr %303, align 8, !tbaa !9
  %305 = fcmp oge double %295, %304
  br i1 %305, label %306, label %307

306:                                              ; preds = %301
  store i32 14, ptr %23, align 4
  br label %934, !llvm.loop !34

307:                                              ; preds = %301
  %308 = load ptr, ptr %21, align 8, !tbaa !5
  %309 = getelementptr inbounds %struct.R3MeshGeodesicBeam, ptr %308, i32 0, i32 5
  %310 = load double, ptr %309, align 8, !tbaa !31
  %311 = load ptr, ptr %9, align 8, !tbaa !5
  %312 = load ptr, ptr %22, align 8, !tbaa !5
  %313 = invoke noundef i32 @_ZNK6R3Mesh6FaceIDEPK10R3MeshFace(ptr noundef nonnull align 8 dereferenceable(272) %69, ptr noundef %312)
          to label %314 unwind label %265

314:                                              ; preds = %307
  %315 = sext i32 %313 to i64
  %316 = getelementptr inbounds double, ptr %311, i64 %315
  %317 = load double, ptr %316, align 8, !tbaa !9
  %318 = fcmp oge double %310, %317
  br i1 %318, label %319, label %320

319:                                              ; preds = %314
  store i32 14, ptr %23, align 4
  br label %934, !llvm.loop !34

320:                                              ; preds = %314
  call void @llvm.lifetime.start.p0(i64 24, ptr %24) #11
  %321 = load ptr, ptr %21, align 8, !tbaa !5
  %322 = getelementptr inbounds %struct.R3MeshGeodesicBeam, ptr %321, i32 0, i32 4
  %323 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZNK6R3Span5StartEv(ptr noundef nonnull align 8 dereferenceable(80) %322)
          to label %324 unwind label %366

324:                                              ; preds = %320
  invoke void @_ZN7R3PointC1ERKS_(ptr noundef nonnull align 8 dereferenceable(24) %24, ptr noundef nonnull align 8 dereferenceable(24) %323)
          to label %325 unwind label %366

325:                                              ; preds = %324
  call void @llvm.lifetime.start.p0(i64 24, ptr %25) #11
  invoke void @_ZNK7R3Point6VectorEv(ptr dead_on_unwind writable sret(%class.R3Vector) align 8 %25, ptr noundef nonnull align 8 dereferenceable(24) %24)
          to label %326 unwind label %370

326:                                              ; preds = %325
  call void @llvm.lifetime.start.p0(i64 24, ptr %26) #11
  invoke void @_ZrmRK8R3VectorS1_(ptr dead_on_unwind writable sret(%class.R3Vector) align 8 %26, ptr noundef nonnull align 8 dereferenceable(24) %25, ptr noundef nonnull align 8 dereferenceable(24) @R3posz_vector)
          to label %327 unwind label %374

327:                                              ; preds = %326
  invoke void @_ZN8R3Vector9NormalizeEv(ptr noundef nonnull align 8 dereferenceable(24) %26)
          to label %328 unwind label %374

328:                                              ; preds = %327
  call void @llvm.lifetime.start.p0(i64 32, ptr %27) #11
  invoke void @_ZN7R3PlaneC1ERK7R3PointRK8R3Vector(ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef nonnull align 8 dereferenceable(24) %24, ptr noundef nonnull align 8 dereferenceable(24) %26)
          to label %329 unwind label %378

329:                                              ; preds = %328
  call void @llvm.lifetime.start.p0(i64 24, ptr %28) #11
  %330 = load ptr, ptr %21, align 8, !tbaa !5
  %331 = getelementptr inbounds %struct.R3MeshGeodesicBeam, ptr %330, i32 0, i32 4
  %332 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZNK6R3Span3EndEv(ptr noundef nonnull align 8 dereferenceable(80) %331)
          to label %333 unwind label %382

333:                                              ; preds = %329
  invoke void @_ZN7R3PointC1ERKS_(ptr noundef nonnull align 8 dereferenceable(24) %28, ptr noundef nonnull align 8 dereferenceable(24) %332)
          to label %334 unwind label %382

334:                                              ; preds = %333
  call void @llvm.lifetime.start.p0(i64 24, ptr %29) #11
  invoke void @_ZNK7R3Point6VectorEv(ptr dead_on_unwind writable sret(%class.R3Vector) align 8 %29, ptr noundef nonnull align 8 dereferenceable(24) %28)
          to label %335 unwind label %386

335:                                              ; preds = %334
  call void @llvm.lifetime.start.p0(i64 24, ptr %30) #11
  invoke void @_ZrmRK8R3VectorS1_(ptr dead_on_unwind writable sret(%class.R3Vector) align 8 %30, ptr noundef nonnull align 8 dereferenceable(24) @R3posz_vector, ptr noundef nonnull align 8 dereferenceable(24) %29)
          to label %336 unwind label %390

336:                                              ; preds = %335
  invoke void @_ZN8R3Vector9NormalizeEv(ptr noundef nonnull align 8 dereferenceable(24) %30)
          to label %337 unwind label %390

337:                                              ; preds = %336
  call void @llvm.lifetime.start.p0(i64 32, ptr %31) #11
  invoke void @_ZN7R3PlaneC1ERK7R3PointRK8R3Vector(ptr noundef nonnull align 8 dereferenceable(32) %31, ptr noundef nonnull align 8 dereferenceable(24) %28, ptr noundef nonnull align 8 dereferenceable(24) %30)
          to label %338 unwind label %394

338:                                              ; preds = %337
  call void @llvm.lifetime.start.p0(i64 24, ptr %32) #11
  %339 = load ptr, ptr %22, align 8, !tbaa !5
  %340 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZNK6R3Mesh10FaceNormalEPK10R3MeshFace(ptr noundef nonnull align 8 dereferenceable(272) %69, ptr noundef %339)
          to label %341 unwind label %398

341:                                              ; preds = %338
  invoke void @_ZN8R3VectorC1ERKS_(ptr noundef nonnull align 8 dereferenceable(24) %32, ptr noundef nonnull align 8 dereferenceable(24) %340)
          to label %342 unwind label %398

342:                                              ; preds = %341
  %343 = load ptr, ptr %21, align 8, !tbaa !5
  %344 = getelementptr inbounds %struct.R3MeshGeodesicBeam, ptr %343, i32 0, i32 3
  invoke void @_ZN8R3Vector9TransformERK16R3Transformation(ptr noundef nonnull align 8 dereferenceable(24) %32, ptr noundef nonnull align 8 dereferenceable(8) %344)
          to label %345 unwind label %398

345:                                              ; preds = %342
  call void @llvm.lifetime.start.p0(i64 272, ptr %33) #11
  invoke void @_ZN8R3AffineC2ERKS_(ptr noundef nonnull align 8 dereferenceable(272) %33, ptr noundef nonnull align 8 dereferenceable(272) @R3identity_affine)
          to label %346 unwind label %402

346:                                              ; preds = %345
  call void @llvm.lifetime.start.p0(i64 24, ptr %34) #11
  call void @llvm.lifetime.start.p0(i64 24, ptr %35) #11
  %347 = load ptr, ptr %21, align 8, !tbaa !5
  %348 = getelementptr inbounds %struct.R3MeshGeodesicBeam, ptr %347, i32 0, i32 4
  invoke void @_ZNK6R3Span8MidpointEv(ptr dead_on_unwind writable sret(%class.R3Point) align 8 %35, ptr noundef nonnull align 8 dereferenceable(80) %348)
          to label %349 unwind label %406

349:                                              ; preds = %346
  invoke void @_ZNK7R3Point6VectorEv(ptr dead_on_unwind writable sret(%class.R3Vector) align 8 %34, ptr noundef nonnull align 8 dereferenceable(24) %35)
          to label %350 unwind label %406

350:                                              ; preds = %349
  invoke void @_ZN8R3Affine9TranslateERK8R3Vector(ptr noundef nonnull align 8 dereferenceable(272) %33, ptr noundef nonnull align 8 dereferenceable(24) %34)
          to label %351 unwind label %406

351:                                              ; preds = %350
  call void @llvm.lifetime.end.p0(i64 24, ptr %35) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr %34) #11
  invoke void @_ZN8R3Affine6RotateERK8R3VectorS2_(ptr noundef nonnull align 8 dereferenceable(272) %33, ptr noundef nonnull align 8 dereferenceable(24) %32, ptr noundef nonnull align 8 dereferenceable(24) @R3posz_vector)
          to label %352 unwind label %410

352:                                              ; preds = %351
  call void @llvm.lifetime.start.p0(i64 24, ptr %36) #11
  call void @llvm.lifetime.start.p0(i64 24, ptr %37) #11
  call void @llvm.lifetime.start.p0(i64 24, ptr %38) #11
  %353 = load ptr, ptr %21, align 8, !tbaa !5
  %354 = getelementptr inbounds %struct.R3MeshGeodesicBeam, ptr %353, i32 0, i32 4
  invoke void @_ZNK6R3Span8MidpointEv(ptr dead_on_unwind writable sret(%class.R3Point) align 8 %38, ptr noundef nonnull align 8 dereferenceable(80) %354)
          to label %355 unwind label %414

355:                                              ; preds = %352
  invoke void @_ZNK7R3Point6VectorEv(ptr dead_on_unwind writable sret(%class.R3Vector) align 8 %37, ptr noundef nonnull align 8 dereferenceable(24) %38)
          to label %356 unwind label %414

356:                                              ; preds = %355
  invoke void @_ZngRK8R3Vector(ptr dead_on_unwind writable sret(%class.R3Vector) align 8 %36, ptr noundef nonnull align 8 dereferenceable(24) %37)
          to label %357 unwind label %414

357:                                              ; preds = %356
  invoke void @_ZN8R3Affine9TranslateERK8R3Vector(ptr noundef nonnull align 8 dereferenceable(272) %33, ptr noundef nonnull align 8 dereferenceable(24) %36)
          to label %358 unwind label %414

358:                                              ; preds = %357
  call void @llvm.lifetime.end.p0(i64 24, ptr %38) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr %37) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr %36) #11
  %359 = load ptr, ptr %21, align 8, !tbaa !5
  %360 = getelementptr inbounds %struct.R3MeshGeodesicBeam, ptr %359, i32 0, i32 3
  invoke void @_ZN8R3Affine9TransformERKS_(ptr noundef nonnull align 8 dereferenceable(272) %33, ptr noundef nonnull align 8 dereferenceable(272) %360)
          to label %361 unwind label %410

361:                                              ; preds = %358
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #11
  store i32 0, ptr %39, align 4, !tbaa !11
  br label %362

362:                                              ; preds = %640, %361
  %363 = load i32, ptr %39, align 4, !tbaa !11
  %364 = icmp slt i32 %363, 2
  br i1 %364, label %418, label %365

365:                                              ; preds = %362
  store i32 16, ptr %23, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #11
  br label %663

366:                                              ; preds = %324, %320
  %367 = landingpad { ptr, i32 }
          cleanup
  %368 = extractvalue { ptr, i32 } %367, 0
  store ptr %368, ptr %15, align 8
  %369 = extractvalue { ptr, i32 } %367, 1
  store i32 %369, ptr %16, align 4
  br label %947

370:                                              ; preds = %325
  %371 = landingpad { ptr, i32 }
          cleanup
  %372 = extractvalue { ptr, i32 } %371, 0
  store ptr %372, ptr %15, align 8
  %373 = extractvalue { ptr, i32 } %371, 1
  store i32 %373, ptr %16, align 4
  br label %946

374:                                              ; preds = %327, %326
  %375 = landingpad { ptr, i32 }
          cleanup
  %376 = extractvalue { ptr, i32 } %375, 0
  store ptr %376, ptr %15, align 8
  %377 = extractvalue { ptr, i32 } %375, 1
  store i32 %377, ptr %16, align 4
  br label %945

378:                                              ; preds = %328
  %379 = landingpad { ptr, i32 }
          cleanup
  %380 = extractvalue { ptr, i32 } %379, 0
  store ptr %380, ptr %15, align 8
  %381 = extractvalue { ptr, i32 } %379, 1
  store i32 %381, ptr %16, align 4
  br label %944

382:                                              ; preds = %333, %329
  %383 = landingpad { ptr, i32 }
          cleanup
  %384 = extractvalue { ptr, i32 } %383, 0
  store ptr %384, ptr %15, align 8
  %385 = extractvalue { ptr, i32 } %383, 1
  store i32 %385, ptr %16, align 4
  br label %943

386:                                              ; preds = %334
  %387 = landingpad { ptr, i32 }
          cleanup
  %388 = extractvalue { ptr, i32 } %387, 0
  store ptr %388, ptr %15, align 8
  %389 = extractvalue { ptr, i32 } %387, 1
  store i32 %389, ptr %16, align 4
  br label %942

390:                                              ; preds = %336, %335
  %391 = landingpad { ptr, i32 }
          cleanup
  %392 = extractvalue { ptr, i32 } %391, 0
  store ptr %392, ptr %15, align 8
  %393 = extractvalue { ptr, i32 } %391, 1
  store i32 %393, ptr %16, align 4
  br label %941

394:                                              ; preds = %337
  %395 = landingpad { ptr, i32 }
          cleanup
  %396 = extractvalue { ptr, i32 } %395, 0
  store ptr %396, ptr %15, align 8
  %397 = extractvalue { ptr, i32 } %395, 1
  store i32 %397, ptr %16, align 4
  br label %940

398:                                              ; preds = %342, %341, %338
  %399 = landingpad { ptr, i32 }
          cleanup
  %400 = extractvalue { ptr, i32 } %399, 0
  store ptr %400, ptr %15, align 8
  %401 = extractvalue { ptr, i32 } %399, 1
  store i32 %401, ptr %16, align 4
  br label %939

402:                                              ; preds = %345
  %403 = landingpad { ptr, i32 }
          cleanup
  %404 = extractvalue { ptr, i32 } %403, 0
  store ptr %404, ptr %15, align 8
  %405 = extractvalue { ptr, i32 } %403, 1
  store i32 %405, ptr %16, align 4
  br label %938

406:                                              ; preds = %350, %349, %346
  %407 = landingpad { ptr, i32 }
          cleanup
  %408 = extractvalue { ptr, i32 } %407, 0
  store ptr %408, ptr %15, align 8
  %409 = extractvalue { ptr, i32 } %407, 1
  store i32 %409, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 24, ptr %35) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr %34) #11
  br label %937

410:                                              ; preds = %358, %351
  %411 = landingpad { ptr, i32 }
          cleanup
  %412 = extractvalue { ptr, i32 } %411, 0
  store ptr %412, ptr %15, align 8
  %413 = extractvalue { ptr, i32 } %411, 1
  store i32 %413, ptr %16, align 4
  br label %937

414:                                              ; preds = %357, %356, %355, %352
  %415 = landingpad { ptr, i32 }
          cleanup
  %416 = extractvalue { ptr, i32 } %415, 0
  store ptr %416, ptr %15, align 8
  %417 = extractvalue { ptr, i32 } %415, 1
  store i32 %417, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 24, ptr %38) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr %37) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr %36) #11
  br label %937

418:                                              ; preds = %362
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #11
  %419 = load ptr, ptr %22, align 8, !tbaa !5
  %420 = load ptr, ptr %21, align 8, !tbaa !5
  %421 = getelementptr inbounds %struct.R3MeshGeodesicBeam, ptr %420, i32 0, i32 2
  %422 = load ptr, ptr %421, align 8, !tbaa !18
  %423 = load i32, ptr %39, align 4, !tbaa !11
  %424 = invoke noundef ptr @_ZNK6R3Mesh10EdgeOnFaceEPK10R3MeshFacePK10R3MeshEdgei(ptr noundef nonnull align 8 dereferenceable(272) %69, ptr noundef %419, ptr noundef %422, i32 noundef %423)
          to label %425 unwind label %433

425:                                              ; preds = %418
  store ptr %424, ptr %40, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #11
  %426 = load ptr, ptr %40, align 8, !tbaa !5
  %427 = load ptr, ptr %22, align 8, !tbaa !5
  %428 = invoke noundef ptr @_ZNK6R3Mesh14FaceAcrossEdgeEPK10R3MeshEdgePK10R3MeshFace(ptr noundef nonnull align 8 dereferenceable(272) %69, ptr noundef %426, ptr noundef %427)
          to label %429 unwind label %437

429:                                              ; preds = %425
  store ptr %428, ptr %41, align 8, !tbaa !5
  %430 = load ptr, ptr %41, align 8, !tbaa !5
  %431 = icmp ne ptr %430, null
  br i1 %431, label %441, label %432

432:                                              ; preds = %429
  store i32 18, ptr %23, align 4
  br label %637

433:                                              ; preds = %418
  %434 = landingpad { ptr, i32 }
          cleanup
  %435 = extractvalue { ptr, i32 } %434, 0
  store ptr %435, ptr %15, align 8
  %436 = extractvalue { ptr, i32 } %434, 1
  store i32 %436, ptr %16, align 4
  br label %662

437:                                              ; preds = %454, %441, %425
  %438 = landingpad { ptr, i32 }
          cleanup
  %439 = extractvalue { ptr, i32 } %438, 0
  store ptr %439, ptr %15, align 8
  %440 = extractvalue { ptr, i32 } %438, 1
  store i32 %440, ptr %16, align 4
  br label %661

441:                                              ; preds = %429
  %442 = load ptr, ptr %21, align 8, !tbaa !5
  %443 = getelementptr inbounds %struct.R3MeshGeodesicBeam, ptr %442, i32 0, i32 5
  %444 = load double, ptr %443, align 8, !tbaa !31
  %445 = load ptr, ptr %8, align 8, !tbaa !5
  %446 = load ptr, ptr %40, align 8, !tbaa !5
  %447 = invoke noundef i32 @_ZNK6R3Mesh6EdgeIDEPK10R3MeshEdge(ptr noundef nonnull align 8 dereferenceable(272) %69, ptr noundef %446)
          to label %448 unwind label %437

448:                                              ; preds = %441
  %449 = sext i32 %447 to i64
  %450 = getelementptr inbounds double, ptr %445, i64 %449
  %451 = load double, ptr %450, align 8, !tbaa !9
  %452 = fcmp oge double %444, %451
  br i1 %452, label %453, label %454

453:                                              ; preds = %448
  store i32 18, ptr %23, align 4
  br label %637

454:                                              ; preds = %448
  %455 = load ptr, ptr %21, align 8, !tbaa !5
  %456 = getelementptr inbounds %struct.R3MeshGeodesicBeam, ptr %455, i32 0, i32 5
  %457 = load double, ptr %456, align 8, !tbaa !31
  %458 = load ptr, ptr %9, align 8, !tbaa !5
  %459 = load ptr, ptr %41, align 8, !tbaa !5
  %460 = invoke noundef i32 @_ZNK6R3Mesh6FaceIDEPK10R3MeshFace(ptr noundef nonnull align 8 dereferenceable(272) %69, ptr noundef %459)
          to label %461 unwind label %437

461:                                              ; preds = %454
  %462 = sext i32 %460 to i64
  %463 = getelementptr inbounds double, ptr %458, i64 %462
  %464 = load double, ptr %463, align 8, !tbaa !9
  %465 = fcmp oge double %457, %464
  br i1 %465, label %466, label %467

466:                                              ; preds = %461
  store i32 18, ptr %23, align 4
  br label %637

467:                                              ; preds = %461
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #11
  %468 = load ptr, ptr %22, align 8, !tbaa !5
  %469 = load ptr, ptr %40, align 8, !tbaa !5
  %470 = invoke noundef ptr @_ZNK6R3Mesh12VertexOnFaceEPK10R3MeshFacePK10R3MeshEdgei(ptr noundef nonnull align 8 dereferenceable(272) %69, ptr noundef %468, ptr noundef %469, i32 noundef 0)
          to label %471 unwind label %497

471:                                              ; preds = %467
  store ptr %470, ptr %42, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #11
  %472 = load ptr, ptr %22, align 8, !tbaa !5
  %473 = load ptr, ptr %40, align 8, !tbaa !5
  %474 = invoke noundef ptr @_ZNK6R3Mesh12VertexOnFaceEPK10R3MeshFacePK10R3MeshEdgei(ptr noundef nonnull align 8 dereferenceable(272) %69, ptr noundef %472, ptr noundef %473, i32 noundef 1)
          to label %475 unwind label %501

475:                                              ; preds = %471
  store ptr %474, ptr %43, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 24, ptr %44) #11
  %476 = load ptr, ptr %42, align 8, !tbaa !5
  %477 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZNK6R3Mesh14VertexPositionEPK12R3MeshVertex(ptr noundef nonnull align 8 dereferenceable(272) %69, ptr noundef %476)
          to label %478 unwind label %505

478:                                              ; preds = %475
  invoke void @_ZN7R3PointC1ERKS_(ptr noundef nonnull align 8 dereferenceable(24) %44, ptr noundef nonnull align 8 dereferenceable(24) %477)
          to label %479 unwind label %505

479:                                              ; preds = %478
  call void @llvm.lifetime.start.p0(i64 24, ptr %45) #11
  %480 = load ptr, ptr %43, align 8, !tbaa !5
  %481 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZNK6R3Mesh14VertexPositionEPK12R3MeshVertex(ptr noundef nonnull align 8 dereferenceable(272) %69, ptr noundef %480)
          to label %482 unwind label %509

482:                                              ; preds = %479
  invoke void @_ZN7R3PointC1ERKS_(ptr noundef nonnull align 8 dereferenceable(24) %45, ptr noundef nonnull align 8 dereferenceable(24) %481)
          to label %483 unwind label %509

483:                                              ; preds = %482
  invoke void @_ZN7R3Point9TransformERK16R3Transformation(ptr noundef nonnull align 8 dereferenceable(24) %44, ptr noundef nonnull align 8 dereferenceable(8) %33)
          to label %484 unwind label %509

484:                                              ; preds = %483
  invoke void @_ZN7R3Point9TransformERK16R3Transformation(ptr noundef nonnull align 8 dereferenceable(24) %45, ptr noundef nonnull align 8 dereferenceable(8) %33)
          to label %485 unwind label %509

485:                                              ; preds = %484
  call void @llvm.lifetime.start.p0(i64 80, ptr %46) #11
  invoke void @_ZN6R3SpanC1ERK7R3PointS2_(ptr noundef nonnull align 8 dereferenceable(80) %46, ptr noundef nonnull align 8 dereferenceable(24) %44, ptr noundef nonnull align 8 dereferenceable(24) %45)
          to label %486 unwind label %513

486:                                              ; preds = %485
  call void @llvm.lifetime.start.p0(i64 24, ptr %47) #11
  %487 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZNK6R3Span6VectorEv(ptr noundef nonnull align 8 dereferenceable(80) %46)
          to label %488 unwind label %517

488:                                              ; preds = %486
  invoke void @_ZN8R3VectorC1ERKS_(ptr noundef nonnull align 8 dereferenceable(24) %47, ptr noundef nonnull align 8 dereferenceable(24) %487)
          to label %489 unwind label %517

489:                                              ; preds = %488
  %490 = invoke noundef double @_ZNK8R3Vector6LengthEv(ptr noundef nonnull align 8 dereferenceable(24) %47)
          to label %491 unwind label %517

491:                                              ; preds = %489
  %492 = load double, ptr @RN_EPSILON, align 8, !tbaa !9
  %493 = invoke noundef i32 @_Z8RNIsZerodd(double noundef %490, double noundef %492)
          to label %494 unwind label %517

494:                                              ; preds = %491
  %495 = icmp ne i32 %493, 0
  br i1 %495, label %496, label %521

496:                                              ; preds = %494
  store i32 18, ptr %23, align 4
  br label %636

497:                                              ; preds = %467
  %498 = landingpad { ptr, i32 }
          cleanup
  %499 = extractvalue { ptr, i32 } %498, 0
  store ptr %499, ptr %15, align 8
  %500 = extractvalue { ptr, i32 } %498, 1
  store i32 %500, ptr %16, align 4
  br label %660

501:                                              ; preds = %471
  %502 = landingpad { ptr, i32 }
          cleanup
  %503 = extractvalue { ptr, i32 } %502, 0
  store ptr %503, ptr %15, align 8
  %504 = extractvalue { ptr, i32 } %502, 1
  store i32 %504, ptr %16, align 4
  br label %659

505:                                              ; preds = %478, %475
  %506 = landingpad { ptr, i32 }
          cleanup
  %507 = extractvalue { ptr, i32 } %506, 0
  store ptr %507, ptr %15, align 8
  %508 = extractvalue { ptr, i32 } %506, 1
  store i32 %508, ptr %16, align 4
  br label %658

509:                                              ; preds = %484, %483, %482, %479
  %510 = landingpad { ptr, i32 }
          cleanup
  %511 = extractvalue { ptr, i32 } %510, 0
  store ptr %511, ptr %15, align 8
  %512 = extractvalue { ptr, i32 } %510, 1
  store i32 %512, ptr %16, align 4
  br label %657

513:                                              ; preds = %485
  %514 = landingpad { ptr, i32 }
          cleanup
  %515 = extractvalue { ptr, i32 } %514, 0
  store ptr %515, ptr %15, align 8
  %516 = extractvalue { ptr, i32 } %514, 1
  store i32 %516, ptr %16, align 4
  br label %656

517:                                              ; preds = %491, %489, %488, %486
  %518 = landingpad { ptr, i32 }
          cleanup
  %519 = extractvalue { ptr, i32 } %518, 0
  store ptr %519, ptr %15, align 8
  %520 = extractvalue { ptr, i32 } %518, 1
  store i32 %520, ptr %16, align 4
  br label %655

521:                                              ; preds = %494
  call void @llvm.lifetime.start.p0(i64 24, ptr %48) #11
  invoke void @_ZrmRK8R3VectorS1_(ptr dead_on_unwind writable sret(%class.R3Vector) align 8 %48, ptr noundef nonnull align 8 dereferenceable(24) @R3posz_vector, ptr noundef nonnull align 8 dereferenceable(24) %47)
          to label %522 unwind label %533

522:                                              ; preds = %521
  invoke void @_ZN8R3Vector9NormalizeEv(ptr noundef nonnull align 8 dereferenceable(24) %48)
          to label %523 unwind label %533

523:                                              ; preds = %522
  call void @llvm.lifetime.start.p0(i64 32, ptr %49) #11
  call void @llvm.lifetime.start.p0(i64 24, ptr %50) #11
  invoke void @_ZNK6R3Span8MidpointEv(ptr dead_on_unwind writable sret(%class.R3Point) align 8 %50, ptr noundef nonnull align 8 dereferenceable(80) %46)
          to label %524 unwind label %537

524:                                              ; preds = %523
  invoke void @_ZN7R3PlaneC1ERK7R3PointRK8R3Vector(ptr noundef nonnull align 8 dereferenceable(32) %49, ptr noundef nonnull align 8 dereferenceable(24) %50, ptr noundef nonnull align 8 dereferenceable(24) %48)
          to label %525 unwind label %537

525:                                              ; preds = %524
  call void @llvm.lifetime.end.p0(i64 24, ptr %50) #11
  %526 = invoke noundef double @_Z16R3SignedDistanceRK7R3PlaneRK7R3Point(ptr noundef nonnull align 8 dereferenceable(32) %49, ptr noundef nonnull align 8 dereferenceable(24) @R3null_point)
          to label %527 unwind label %541

527:                                              ; preds = %525
  %528 = load double, ptr @RN_EPSILON, align 8, !tbaa !9
  %529 = invoke noundef i32 @_Z12RNIsPositivedd(double noundef %526, double noundef %528)
          to label %530 unwind label %541

530:                                              ; preds = %527
  %531 = icmp ne i32 %529, 0
  br i1 %531, label %532, label %545

532:                                              ; preds = %530
  store i32 18, ptr %23, align 4
  br label %635

533:                                              ; preds = %522, %521
  %534 = landingpad { ptr, i32 }
          cleanup
  %535 = extractvalue { ptr, i32 } %534, 0
  store ptr %535, ptr %15, align 8
  %536 = extractvalue { ptr, i32 } %534, 1
  store i32 %536, ptr %16, align 4
  br label %654

537:                                              ; preds = %524, %523
  %538 = landingpad { ptr, i32 }
          cleanup
  %539 = extractvalue { ptr, i32 } %538, 0
  store ptr %539, ptr %15, align 8
  %540 = extractvalue { ptr, i32 } %538, 1
  store i32 %540, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 24, ptr %50) #11
  br label %653

541:                                              ; preds = %550, %545, %527, %525
  %542 = landingpad { ptr, i32 }
          cleanup
  %543 = extractvalue { ptr, i32 } %542, 0
  store ptr %543, ptr %15, align 8
  %544 = extractvalue { ptr, i32 } %542, 1
  store i32 %544, ptr %16, align 4
  br label %653

545:                                              ; preds = %530
  %546 = invoke noundef i32 @_ZN6R3Span4ClipERK7R3Plane(ptr noundef nonnull align 8 dereferenceable(80) %46, ptr noundef nonnull align 8 dereferenceable(32) %27)
          to label %547 unwind label %541

547:                                              ; preds = %545
  %548 = icmp ne i32 %546, 0
  br i1 %548, label %550, label %549

549:                                              ; preds = %547
  store i32 18, ptr %23, align 4
  br label %635

550:                                              ; preds = %547
  %551 = invoke noundef i32 @_ZN6R3Span4ClipERK7R3Plane(ptr noundef nonnull align 8 dereferenceable(80) %46, ptr noundef nonnull align 8 dereferenceable(32) %31)
          to label %552 unwind label %541

552:                                              ; preds = %550
  %553 = icmp ne i32 %551, 0
  br i1 %553, label %555, label %554

554:                                              ; preds = %552
  store i32 18, ptr %23, align 4
  br label %635

555:                                              ; preds = %552
  call void @llvm.lifetime.start.p0(i64 8, ptr %51) #11
  %556 = load ptr, ptr %21, align 8, !tbaa !5
  %557 = getelementptr inbounds %struct.R3MeshGeodesicBeam, ptr %556, i32 0, i32 6
  %558 = load double, ptr %557, align 8, !tbaa !32
  %559 = invoke noundef double @_Z10R3DistanceRK7R3PointRK6R3Span(ptr noundef nonnull align 8 dereferenceable(24) @R3null_point, ptr noundef nonnull align 8 dereferenceable(80) %46)
          to label %560 unwind label %569

560:                                              ; preds = %555
  %561 = fadd double %558, %559
  store double %561, ptr %51, align 8, !tbaa !9
  %562 = load double, ptr %6, align 8, !tbaa !9
  %563 = fcmp ogt double %562, 0.000000e+00
  br i1 %563, label %564, label %573

564:                                              ; preds = %560
  %565 = load double, ptr %51, align 8, !tbaa !9
  %566 = load double, ptr %6, align 8, !tbaa !9
  %567 = fcmp ogt double %565, %566
  br i1 %567, label %568, label %573

568:                                              ; preds = %564
  store i32 18, ptr %23, align 4
  br label %634

569:                                              ; preds = %584, %573, %555
  %570 = landingpad { ptr, i32 }
          cleanup
  %571 = extractvalue { ptr, i32 } %570, 0
  store ptr %571, ptr %15, align 8
  %572 = extractvalue { ptr, i32 } %570, 1
  store i32 %572, ptr %16, align 4
  br label %652

573:                                              ; preds = %564, %560
  %574 = load double, ptr %51, align 8, !tbaa !9
  %575 = load ptr, ptr %8, align 8, !tbaa !5
  %576 = load ptr, ptr %40, align 8, !tbaa !5
  %577 = invoke noundef i32 @_ZNK6R3Mesh6EdgeIDEPK10R3MeshEdge(ptr noundef nonnull align 8 dereferenceable(272) %69, ptr noundef %576)
          to label %578 unwind label %569

578:                                              ; preds = %573
  %579 = sext i32 %577 to i64
  %580 = getelementptr inbounds double, ptr %575, i64 %579
  %581 = load double, ptr %580, align 8, !tbaa !9
  %582 = fcmp oge double %574, %581
  br i1 %582, label %583, label %584

583:                                              ; preds = %578
  store i32 18, ptr %23, align 4
  br label %634

584:                                              ; preds = %578
  %585 = load double, ptr %51, align 8, !tbaa !9
  %586 = load ptr, ptr %9, align 8, !tbaa !5
  %587 = load ptr, ptr %41, align 8, !tbaa !5
  %588 = invoke noundef i32 @_ZNK6R3Mesh6FaceIDEPK10R3MeshFace(ptr noundef nonnull align 8 dereferenceable(272) %69, ptr noundef %587)
          to label %589 unwind label %569

589:                                              ; preds = %584
  %590 = sext i32 %588 to i64
  %591 = getelementptr inbounds double, ptr %586, i64 %590
  %592 = load double, ptr %591, align 8, !tbaa !9
  %593 = fcmp oge double %585, %592
  br i1 %593, label %594, label %595

594:                                              ; preds = %589
  store i32 18, ptr %23, align 4
  br label %634

595:                                              ; preds = %589
  call void @llvm.lifetime.start.p0(i64 8, ptr %52) #11
  %596 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef 400) #12
          to label %597 unwind label %643

597:                                              ; preds = %595
  call void @llvm.memset.p0.i64(ptr align 16 %596, i8 0, i64 400, i1 false)
  invoke void @_ZN18R3MeshGeodesicBeamC2Ev(ptr noundef nonnull align 8 dereferenceable(400) %596)
          to label %598 unwind label %647

598:                                              ; preds = %597
  store ptr %596, ptr %52, align 8, !tbaa !5
  %599 = load ptr, ptr %21, align 8, !tbaa !5
  %600 = getelementptr inbounds %struct.R3MeshGeodesicBeam, ptr %599, i32 0, i32 0
  %601 = load ptr, ptr %600, align 8, !tbaa !33
  %602 = load ptr, ptr %52, align 8, !tbaa !5
  %603 = getelementptr inbounds %struct.R3MeshGeodesicBeam, ptr %602, i32 0, i32 0
  store ptr %601, ptr %603, align 8, !tbaa !33
  %604 = load ptr, ptr %22, align 8, !tbaa !5
  %605 = load ptr, ptr %52, align 8, !tbaa !5
  %606 = getelementptr inbounds %struct.R3MeshGeodesicBeam, ptr %605, i32 0, i32 1
  store ptr %604, ptr %606, align 8, !tbaa !30
  %607 = load ptr, ptr %40, align 8, !tbaa !5
  %608 = load ptr, ptr %52, align 8, !tbaa !5
  %609 = getelementptr inbounds %struct.R3MeshGeodesicBeam, ptr %608, i32 0, i32 2
  store ptr %607, ptr %609, align 8, !tbaa !18
  %610 = load ptr, ptr %52, align 8, !tbaa !5
  %611 = getelementptr inbounds %struct.R3MeshGeodesicBeam, ptr %610, i32 0, i32 3
  %612 = invoke noundef nonnull align 8 dereferenceable(272) ptr @_ZN8R3AffineaSERKS_(ptr noundef nonnull align 8 dereferenceable(272) %611, ptr noundef nonnull align 8 dereferenceable(272) %33)
          to label %613 unwind label %643

613:                                              ; preds = %598
  %614 = load ptr, ptr %52, align 8, !tbaa !5
  %615 = getelementptr inbounds %struct.R3MeshGeodesicBeam, ptr %614, i32 0, i32 4
  %616 = invoke noundef nonnull align 8 dereferenceable(80) ptr @_ZN6R3SpanaSERKS_(ptr noundef nonnull align 8 dereferenceable(80) %615, ptr noundef nonnull align 8 dereferenceable(80) %46)
          to label %617 unwind label %643

617:                                              ; preds = %613
  %618 = load double, ptr %51, align 8, !tbaa !9
  %619 = load ptr, ptr %52, align 8, !tbaa !5
  %620 = getelementptr inbounds %struct.R3MeshGeodesicBeam, ptr %619, i32 0, i32 5
  store double %618, ptr %620, align 8, !tbaa !31
  %621 = load ptr, ptr %21, align 8, !tbaa !5
  %622 = getelementptr inbounds %struct.R3MeshGeodesicBeam, ptr %621, i32 0, i32 6
  %623 = load double, ptr %622, align 8, !tbaa !32
  %624 = load ptr, ptr %52, align 8, !tbaa !5
  %625 = getelementptr inbounds %struct.R3MeshGeodesicBeam, ptr %624, i32 0, i32 6
  store double %623, ptr %625, align 8, !tbaa !32
  %626 = load ptr, ptr %21, align 8, !tbaa !5
  %627 = load ptr, ptr %52, align 8, !tbaa !5
  %628 = getelementptr inbounds %struct.R3MeshGeodesicBeam, ptr %627, i32 0, i32 7
  store ptr %626, ptr %628, align 8, !tbaa !35
  %629 = load ptr, ptr %52, align 8, !tbaa !5
  invoke void @_ZN6RNHeapIP18R3MeshGeodesicBeamE4PushES1_(ptr noundef nonnull align 8 dereferenceable(52) %14, ptr noundef %629)
          to label %630 unwind label %643

630:                                              ; preds = %617
  %631 = load ptr, ptr %52, align 8, !tbaa !5
  %632 = invoke noundef ptr @_ZN7RNArrayIP18R3MeshGeodesicBeamE6InsertES1_(ptr noundef nonnull align 8 dereferenceable(16) %17, ptr noundef %631)
          to label %633 unwind label %643

633:                                              ; preds = %630
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #11
  store i32 0, ptr %23, align 4
  br label %634

634:                                              ; preds = %633, %594, %583, %568
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #11
  br label %635

635:                                              ; preds = %634, %554, %549, %532
  call void @llvm.lifetime.end.p0(i64 32, ptr %49) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr %48) #11
  br label %636

636:                                              ; preds = %635, %496
  call void @llvm.lifetime.end.p0(i64 24, ptr %47) #11
  call void @llvm.lifetime.end.p0(i64 80, ptr %46) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr %45) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr %44) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #11
  br label %637

637:                                              ; preds = %636, %466, %453, %432
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #11
  %638 = load i32, ptr %23, align 4
  switch i32 %638, label %990 [
    i32 0, label %639
    i32 18, label %640
  ]

639:                                              ; preds = %637
  br label %640

640:                                              ; preds = %639, %637
  %641 = load i32, ptr %39, align 4, !tbaa !11
  %642 = add nsw i32 %641, 1
  store i32 %642, ptr %39, align 4, !tbaa !11
  br label %362, !llvm.loop !36

643:                                              ; preds = %630, %617, %613, %598, %595
  %644 = landingpad { ptr, i32 }
          cleanup
  %645 = extractvalue { ptr, i32 } %644, 0
  store ptr %645, ptr %15, align 8
  %646 = extractvalue { ptr, i32 } %644, 1
  store i32 %646, ptr %16, align 4
  br label %651

647:                                              ; preds = %597
  %648 = landingpad { ptr, i32 }
          cleanup
  %649 = extractvalue { ptr, i32 } %648, 0
  store ptr %649, ptr %15, align 8
  %650 = extractvalue { ptr, i32 } %648, 1
  store i32 %650, ptr %16, align 4
  call void @_ZdlPvm(ptr noundef %596, i64 noundef 400) #13
  br label %651

651:                                              ; preds = %647, %643
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #11
  br label %652

652:                                              ; preds = %651, %569
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #11
  br label %653

653:                                              ; preds = %652, %541, %537
  call void @llvm.lifetime.end.p0(i64 32, ptr %49) #11
  br label %654

654:                                              ; preds = %653, %533
  call void @llvm.lifetime.end.p0(i64 24, ptr %48) #11
  br label %655

655:                                              ; preds = %654, %517
  call void @llvm.lifetime.end.p0(i64 24, ptr %47) #11
  br label %656

656:                                              ; preds = %655, %513
  call void @llvm.lifetime.end.p0(i64 80, ptr %46) #11
  br label %657

657:                                              ; preds = %656, %509
  call void @llvm.lifetime.end.p0(i64 24, ptr %45) #11
  br label %658

658:                                              ; preds = %657, %505
  call void @llvm.lifetime.end.p0(i64 24, ptr %44) #11
  br label %659

659:                                              ; preds = %658, %501
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #11
  br label %660

660:                                              ; preds = %659, %497
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #11
  br label %661

661:                                              ; preds = %660, %437
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #11
  br label %662

662:                                              ; preds = %661, %433
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #11
  br label %937

663:                                              ; preds = %365
  call void @llvm.lifetime.start.p0(i64 4, ptr %53) #11
  store i32 0, ptr %53, align 4, !tbaa !11
  br label %664

664:                                              ; preds = %927, %663
  %665 = load i32, ptr %53, align 4, !tbaa !11
  %666 = icmp slt i32 %665, 3
  br i1 %666, label %668, label %667

667:                                              ; preds = %664
  store i32 19, ptr %23, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #11
  br label %933

668:                                              ; preds = %664
  call void @llvm.lifetime.start.p0(i64 8, ptr %54) #11
  %669 = load ptr, ptr %22, align 8, !tbaa !5
  %670 = load i32, ptr %53, align 4, !tbaa !11
  %671 = invoke noundef ptr @_ZNK6R3Mesh12VertexOnFaceEPK10R3MeshFacei(ptr noundef nonnull align 8 dereferenceable(272) %69, ptr noundef %669, i32 noundef %670)
          to label %672 unwind label %693

672:                                              ; preds = %668
  store ptr %671, ptr %54, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 24, ptr %55) #11
  %673 = load ptr, ptr %54, align 8, !tbaa !5
  %674 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZNK6R3Mesh14VertexPositionEPK12R3MeshVertex(ptr noundef nonnull align 8 dereferenceable(272) %69, ptr noundef %673)
          to label %675 unwind label %697

675:                                              ; preds = %672
  invoke void @_ZN7R3PointC1ERKS_(ptr noundef nonnull align 8 dereferenceable(24) %55, ptr noundef nonnull align 8 dereferenceable(24) %674)
          to label %676 unwind label %697

676:                                              ; preds = %675
  invoke void @_ZN7R3Point9TransformERK16R3Transformation(ptr noundef nonnull align 8 dereferenceable(24) %55, ptr noundef nonnull align 8 dereferenceable(8) %33)
          to label %677 unwind label %697

677:                                              ; preds = %676
  call void @llvm.lifetime.start.p0(i64 8, ptr %56) #11
  store double 0.000000e+00, ptr %56, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %57) #11
  store i32 0, ptr %57, align 4, !tbaa !11
  %678 = invoke noundef double @_Z16R3SignedDistanceRK7R3PlaneRK7R3Point(ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef nonnull align 8 dereferenceable(24) %55)
          to label %679 unwind label %701

679:                                              ; preds = %677
  %680 = fcmp olt double %678, 0.000000e+00
  br i1 %680, label %681, label %714

681:                                              ; preds = %679
  call void @llvm.lifetime.start.p0(i64 8, ptr %58) #11
  %682 = invoke noundef double @_Z10R3DistanceRK7R3PointS1_(ptr noundef nonnull align 8 dereferenceable(24) @R3null_point, ptr noundef nonnull align 8 dereferenceable(24) %24)
          to label %683 unwind label %705

683:                                              ; preds = %681
  store double %682, ptr %58, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %59) #11
  %684 = invoke noundef double @_Z10R3DistanceRK7R3PointS1_(ptr noundef nonnull align 8 dereferenceable(24) %24, ptr noundef nonnull align 8 dereferenceable(24) %55)
          to label %685 unwind label %709

685:                                              ; preds = %683
  store double %684, ptr %59, align 8, !tbaa !9
  %686 = load ptr, ptr %21, align 8, !tbaa !5
  %687 = getelementptr inbounds %struct.R3MeshGeodesicBeam, ptr %686, i32 0, i32 6
  %688 = load double, ptr %687, align 8, !tbaa !32
  %689 = load double, ptr %58, align 8, !tbaa !9
  %690 = fadd double %688, %689
  %691 = load double, ptr %59, align 8, !tbaa !9
  %692 = fadd double %690, %691
  store double %692, ptr %56, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #11
  br label %747

693:                                              ; preds = %668
  %694 = landingpad { ptr, i32 }
          cleanup
  %695 = extractvalue { ptr, i32 } %694, 0
  store ptr %695, ptr %15, align 8
  %696 = extractvalue { ptr, i32 } %694, 1
  store i32 %696, ptr %16, align 4
  br label %932

697:                                              ; preds = %676, %675, %672
  %698 = landingpad { ptr, i32 }
          cleanup
  %699 = extractvalue { ptr, i32 } %698, 0
  store ptr %699, ptr %15, align 8
  %700 = extractvalue { ptr, i32 } %698, 1
  store i32 %700, ptr %16, align 4
  br label %931

701:                                              ; preds = %747, %739, %714, %677
  %702 = landingpad { ptr, i32 }
          cleanup
  %703 = extractvalue { ptr, i32 } %702, 0
  store ptr %703, ptr %15, align 8
  %704 = extractvalue { ptr, i32 } %702, 1
  store i32 %704, ptr %16, align 4
  br label %930

705:                                              ; preds = %681
  %706 = landingpad { ptr, i32 }
          cleanup
  %707 = extractvalue { ptr, i32 } %706, 0
  store ptr %707, ptr %15, align 8
  %708 = extractvalue { ptr, i32 } %706, 1
  store i32 %708, ptr %16, align 4
  br label %713

709:                                              ; preds = %683
  %710 = landingpad { ptr, i32 }
          cleanup
  %711 = extractvalue { ptr, i32 } %710, 0
  store ptr %711, ptr %15, align 8
  %712 = extractvalue { ptr, i32 } %710, 1
  store i32 %712, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #11
  br label %713

713:                                              ; preds = %709, %705
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #11
  br label %930

714:                                              ; preds = %679
  %715 = invoke noundef double @_Z16R3SignedDistanceRK7R3PlaneRK7R3Point(ptr noundef nonnull align 8 dereferenceable(32) %31, ptr noundef nonnull align 8 dereferenceable(24) %55)
          to label %716 unwind label %701

716:                                              ; preds = %714
  %717 = fcmp olt double %715, 0.000000e+00
  br i1 %717, label %718, label %739

718:                                              ; preds = %716
  call void @llvm.lifetime.start.p0(i64 8, ptr %60) #11
  %719 = invoke noundef double @_Z10R3DistanceRK7R3PointS1_(ptr noundef nonnull align 8 dereferenceable(24) @R3null_point, ptr noundef nonnull align 8 dereferenceable(24) %28)
          to label %720 unwind label %730

720:                                              ; preds = %718
  store double %719, ptr %60, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %61) #11
  %721 = invoke noundef double @_Z10R3DistanceRK7R3PointS1_(ptr noundef nonnull align 8 dereferenceable(24) %28, ptr noundef nonnull align 8 dereferenceable(24) %55)
          to label %722 unwind label %734

722:                                              ; preds = %720
  store double %721, ptr %61, align 8, !tbaa !9
  %723 = load ptr, ptr %21, align 8, !tbaa !5
  %724 = getelementptr inbounds %struct.R3MeshGeodesicBeam, ptr %723, i32 0, i32 6
  %725 = load double, ptr %724, align 8, !tbaa !32
  %726 = load double, ptr %60, align 8, !tbaa !9
  %727 = fadd double %725, %726
  %728 = load double, ptr %61, align 8, !tbaa !9
  %729 = fadd double %727, %728
  store double %729, ptr %56, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #11
  br label %746

730:                                              ; preds = %718
  %731 = landingpad { ptr, i32 }
          cleanup
  %732 = extractvalue { ptr, i32 } %731, 0
  store ptr %732, ptr %15, align 8
  %733 = extractvalue { ptr, i32 } %731, 1
  store i32 %733, ptr %16, align 4
  br label %738

734:                                              ; preds = %720
  %735 = landingpad { ptr, i32 }
          cleanup
  %736 = extractvalue { ptr, i32 } %735, 0
  store ptr %736, ptr %15, align 8
  %737 = extractvalue { ptr, i32 } %735, 1
  store i32 %737, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #11
  br label %738

738:                                              ; preds = %734, %730
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #11
  br label %930

739:                                              ; preds = %716
  %740 = load ptr, ptr %21, align 8, !tbaa !5
  %741 = getelementptr inbounds %struct.R3MeshGeodesicBeam, ptr %740, i32 0, i32 6
  %742 = load double, ptr %741, align 8, !tbaa !32
  %743 = invoke noundef double @_Z10R3DistanceRK7R3PointS1_(ptr noundef nonnull align 8 dereferenceable(24) @R3null_point, ptr noundef nonnull align 8 dereferenceable(24) %55)
          to label %744 unwind label %701

744:                                              ; preds = %739
  %745 = fadd double %742, %743
  store double %745, ptr %56, align 8, !tbaa !9
  store i32 1, ptr %57, align 4, !tbaa !11
  br label %746

746:                                              ; preds = %744, %722
  br label %747

747:                                              ; preds = %746, %685
  %748 = load double, ptr %56, align 8, !tbaa !9
  %749 = load ptr, ptr %7, align 8, !tbaa !5
  %750 = load ptr, ptr %54, align 8, !tbaa !5
  %751 = invoke noundef i32 @_ZNK6R3Mesh8VertexIDEPK12R3MeshVertex(ptr noundef nonnull align 8 dereferenceable(272) %69, ptr noundef %750)
          to label %752 unwind label %701

752:                                              ; preds = %747
  %753 = sext i32 %751 to i64
  %754 = getelementptr inbounds double, ptr %749, i64 %753
  %755 = load double, ptr %754, align 8, !tbaa !9
  %756 = fcmp olt double %748, %755
  br i1 %756, label %757, label %926

757:                                              ; preds = %752
  call void @llvm.lifetime.start.p0(i64 8, ptr %62) #11
  %758 = load ptr, ptr %7, align 8, !tbaa !5
  %759 = load ptr, ptr %54, align 8, !tbaa !5
  %760 = invoke noundef i32 @_ZNK6R3Mesh8VertexIDEPK12R3MeshVertex(ptr noundef nonnull align 8 dereferenceable(272) %69, ptr noundef %759)
          to label %761 unwind label %776

761:                                              ; preds = %757
  %762 = sext i32 %760 to i64
  %763 = getelementptr inbounds double, ptr %758, i64 %762
  %764 = load double, ptr %763, align 8, !tbaa !9
  store double %764, ptr %62, align 8, !tbaa !9
  %765 = load double, ptr %56, align 8, !tbaa !9
  %766 = load ptr, ptr %7, align 8, !tbaa !5
  %767 = load ptr, ptr %54, align 8, !tbaa !5
  %768 = invoke noundef i32 @_ZNK6R3Mesh8VertexIDEPK12R3MeshVertex(ptr noundef nonnull align 8 dereferenceable(272) %69, ptr noundef %767)
          to label %769 unwind label %776

769:                                              ; preds = %761
  %770 = sext i32 %768 to i64
  %771 = getelementptr inbounds double, ptr %766, i64 %770
  store double %765, ptr %771, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %63) #11
  store i32 0, ptr %63, align 4, !tbaa !11
  br label %772

772:                                              ; preds = %829, %769
  %773 = load i32, ptr %63, align 4, !tbaa !11
  %774 = icmp slt i32 %773, 2
  br i1 %774, label %780, label %775

775:                                              ; preds = %772
  store i32 22, ptr %23, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %63) #11
  br label %833

776:                                              ; preds = %913, %908, %901, %892, %833, %761, %757
  %777 = landingpad { ptr, i32 }
          cleanup
  %778 = extractvalue { ptr, i32 } %777, 0
  store ptr %778, ptr %15, align 8
  %779 = extractvalue { ptr, i32 } %777, 1
  store i32 %779, ptr %16, align 4
  br label %925

780:                                              ; preds = %772
  call void @llvm.lifetime.start.p0(i64 8, ptr %64) #11
  %781 = load ptr, ptr %22, align 8, !tbaa !5
  %782 = load ptr, ptr %21, align 8, !tbaa !5
  %783 = getelementptr inbounds %struct.R3MeshGeodesicBeam, ptr %782, i32 0, i32 2
  %784 = load ptr, ptr %783, align 8, !tbaa !18
  %785 = load i32, ptr %63, align 4, !tbaa !11
  %786 = invoke noundef ptr @_ZNK6R3Mesh10EdgeOnFaceEPK10R3MeshFacePK10R3MeshEdgei(ptr noundef nonnull align 8 dereferenceable(272) %69, ptr noundef %781, ptr noundef %784, i32 noundef %785)
          to label %787 unwind label %819

787:                                              ; preds = %780
  store ptr %786, ptr %64, align 8, !tbaa !5
  %788 = load double, ptr %56, align 8, !tbaa !9
  %789 = load ptr, ptr %8, align 8, !tbaa !5
  %790 = load ptr, ptr %64, align 8, !tbaa !5
  %791 = invoke noundef i32 @_ZNK6R3Mesh6EdgeIDEPK10R3MeshEdge(ptr noundef nonnull align 8 dereferenceable(272) %69, ptr noundef %790)
          to label %792 unwind label %819

792:                                              ; preds = %787
  %793 = sext i32 %791 to i64
  %794 = getelementptr inbounds double, ptr %789, i64 %793
  %795 = load double, ptr %794, align 8, !tbaa !9
  %796 = fcmp olt double %788, %795
  br i1 %796, label %797, label %828

797:                                              ; preds = %792
  call void @llvm.lifetime.start.p0(i64 8, ptr %65) #11
  %798 = load ptr, ptr %64, align 8, !tbaa !5
  %799 = load ptr, ptr %54, align 8, !tbaa !5
  %800 = invoke noundef ptr @_ZNK6R3Mesh16VertexAcrossEdgeEPK10R3MeshEdgePK12R3MeshVertex(ptr noundef nonnull align 8 dereferenceable(272) %69, ptr noundef %798, ptr noundef %799)
          to label %801 unwind label %823

801:                                              ; preds = %797
  store ptr %800, ptr %65, align 8, !tbaa !5
  %802 = load double, ptr %56, align 8, !tbaa !9
  %803 = load ptr, ptr %7, align 8, !tbaa !5
  %804 = load ptr, ptr %65, align 8, !tbaa !5
  %805 = invoke noundef i32 @_ZNK6R3Mesh8VertexIDEPK12R3MeshVertex(ptr noundef nonnull align 8 dereferenceable(272) %69, ptr noundef %804)
          to label %806 unwind label %823

806:                                              ; preds = %801
  %807 = sext i32 %805 to i64
  %808 = getelementptr inbounds double, ptr %803, i64 %807
  %809 = load double, ptr %808, align 8, !tbaa !9
  %810 = fcmp ogt double %802, %809
  br i1 %810, label %811, label %827

811:                                              ; preds = %806
  %812 = load double, ptr %56, align 8, !tbaa !9
  %813 = load ptr, ptr %8, align 8, !tbaa !5
  %814 = load ptr, ptr %64, align 8, !tbaa !5
  %815 = invoke noundef i32 @_ZNK6R3Mesh6EdgeIDEPK10R3MeshEdge(ptr noundef nonnull align 8 dereferenceable(272) %69, ptr noundef %814)
          to label %816 unwind label %823

816:                                              ; preds = %811
  %817 = sext i32 %815 to i64
  %818 = getelementptr inbounds double, ptr %813, i64 %817
  store double %812, ptr %818, align 8, !tbaa !9
  br label %827

819:                                              ; preds = %787, %780
  %820 = landingpad { ptr, i32 }
          cleanup
  %821 = extractvalue { ptr, i32 } %820, 0
  store ptr %821, ptr %15, align 8
  %822 = extractvalue { ptr, i32 } %820, 1
  store i32 %822, ptr %16, align 4
  br label %832

823:                                              ; preds = %811, %801, %797
  %824 = landingpad { ptr, i32 }
          cleanup
  %825 = extractvalue { ptr, i32 } %824, 0
  store ptr %825, ptr %15, align 8
  %826 = extractvalue { ptr, i32 } %824, 1
  store i32 %826, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %65) #11
  br label %832

827:                                              ; preds = %816, %806
  call void @llvm.lifetime.end.p0(i64 8, ptr %65) #11
  br label %828

828:                                              ; preds = %827, %792
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #11
  br label %829

829:                                              ; preds = %828
  %830 = load i32, ptr %63, align 4, !tbaa !11
  %831 = add nsw i32 %830, 1
  store i32 %831, ptr %63, align 4, !tbaa !11
  br label %772, !llvm.loop !37

832:                                              ; preds = %823, %819
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %63) #11
  br label %925

833:                                              ; preds = %775
  %834 = load double, ptr %56, align 8, !tbaa !9
  %835 = load ptr, ptr %9, align 8, !tbaa !5
  %836 = load ptr, ptr %22, align 8, !tbaa !5
  %837 = invoke noundef i32 @_ZNK6R3Mesh6FaceIDEPK10R3MeshFace(ptr noundef nonnull align 8 dereferenceable(272) %69, ptr noundef %836)
          to label %838 unwind label %776

838:                                              ; preds = %833
  %839 = sext i32 %837 to i64
  %840 = getelementptr inbounds double, ptr %835, i64 %839
  %841 = load double, ptr %840, align 8, !tbaa !9
  %842 = fcmp olt double %834, %841
  br i1 %842, label %843, label %889

843:                                              ; preds = %838
  call void @llvm.lifetime.start.p0(i64 8, ptr %66) #11
  %844 = load ptr, ptr %22, align 8, !tbaa !5
  %845 = load ptr, ptr %54, align 8, !tbaa !5
  %846 = invoke noundef ptr @_ZNK6R3Mesh12VertexOnFaceEPK10R3MeshFacePK12R3MeshVertexi(ptr noundef nonnull align 8 dereferenceable(272) %69, ptr noundef %844, ptr noundef %845, i32 noundef 0)
          to label %847 unwind label %879

847:                                              ; preds = %843
  store ptr %846, ptr %66, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %67) #11
  %848 = load ptr, ptr %22, align 8, !tbaa !5
  %849 = load ptr, ptr %54, align 8, !tbaa !5
  %850 = invoke noundef ptr @_ZNK6R3Mesh12VertexOnFaceEPK10R3MeshFacePK12R3MeshVertexi(ptr noundef nonnull align 8 dereferenceable(272) %69, ptr noundef %848, ptr noundef %849, i32 noundef 1)
          to label %851 unwind label %883

851:                                              ; preds = %847
  store ptr %850, ptr %67, align 8, !tbaa !5
  %852 = load double, ptr %56, align 8, !tbaa !9
  %853 = load ptr, ptr %7, align 8, !tbaa !5
  %854 = load ptr, ptr %66, align 8, !tbaa !5
  %855 = invoke noundef i32 @_ZNK6R3Mesh8VertexIDEPK12R3MeshVertex(ptr noundef nonnull align 8 dereferenceable(272) %69, ptr noundef %854)
          to label %856 unwind label %883

856:                                              ; preds = %851
  %857 = sext i32 %855 to i64
  %858 = getelementptr inbounds double, ptr %853, i64 %857
  %859 = load double, ptr %858, align 8, !tbaa !9
  %860 = fcmp ogt double %852, %859
  br i1 %860, label %861, label %887

861:                                              ; preds = %856
  %862 = load double, ptr %56, align 8, !tbaa !9
  %863 = load ptr, ptr %7, align 8, !tbaa !5
  %864 = load ptr, ptr %67, align 8, !tbaa !5
  %865 = invoke noundef i32 @_ZNK6R3Mesh8VertexIDEPK12R3MeshVertex(ptr noundef nonnull align 8 dereferenceable(272) %69, ptr noundef %864)
          to label %866 unwind label %883

866:                                              ; preds = %861
  %867 = sext i32 %865 to i64
  %868 = getelementptr inbounds double, ptr %863, i64 %867
  %869 = load double, ptr %868, align 8, !tbaa !9
  %870 = fcmp ogt double %862, %869
  br i1 %870, label %871, label %887

871:                                              ; preds = %866
  %872 = load double, ptr %56, align 8, !tbaa !9
  %873 = load ptr, ptr %9, align 8, !tbaa !5
  %874 = load ptr, ptr %22, align 8, !tbaa !5
  %875 = invoke noundef i32 @_ZNK6R3Mesh6FaceIDEPK10R3MeshFace(ptr noundef nonnull align 8 dereferenceable(272) %69, ptr noundef %874)
          to label %876 unwind label %883

876:                                              ; preds = %871
  %877 = sext i32 %875 to i64
  %878 = getelementptr inbounds double, ptr %873, i64 %877
  store double %872, ptr %878, align 8, !tbaa !9
  br label %887

879:                                              ; preds = %843
  %880 = landingpad { ptr, i32 }
          cleanup
  %881 = extractvalue { ptr, i32 } %880, 0
  store ptr %881, ptr %15, align 8
  %882 = extractvalue { ptr, i32 } %880, 1
  store i32 %882, ptr %16, align 4
  br label %888

883:                                              ; preds = %871, %861, %851, %847
  %884 = landingpad { ptr, i32 }
          cleanup
  %885 = extractvalue { ptr, i32 } %884, 0
  store ptr %885, ptr %15, align 8
  %886 = extractvalue { ptr, i32 } %884, 1
  store i32 %886, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %67) #11
  br label %888

887:                                              ; preds = %876, %866, %856
  call void @llvm.lifetime.end.p0(i64 8, ptr %67) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %66) #11
  br label %889

888:                                              ; preds = %883, %879
  call void @llvm.lifetime.end.p0(i64 8, ptr %66) #11
  br label %925

889:                                              ; preds = %887, %838
  %890 = load i32, ptr %57, align 4, !tbaa !11
  %891 = icmp ne i32 %890, 0
  br i1 %891, label %892, label %924

892:                                              ; preds = %889
  %893 = load ptr, ptr %54, align 8, !tbaa !5
  %894 = load ptr, ptr %22, align 8, !tbaa !5
  %895 = load ptr, ptr %21, align 8, !tbaa !5
  %896 = getelementptr inbounds %struct.R3MeshGeodesicBeam, ptr %895, i32 0, i32 2
  %897 = load ptr, ptr %896, align 8, !tbaa !18
  %898 = invoke noundef ptr @_ZNK6R3Mesh16VertexAcrossFaceEPK10R3MeshFacePK10R3MeshEdge(ptr noundef nonnull align 8 dereferenceable(272) %69, ptr noundef %894, ptr noundef %897)
          to label %899 unwind label %776

899:                                              ; preds = %892
  %900 = icmp eq ptr %893, %898
  br i1 %900, label %901, label %924

901:                                              ; preds = %899
  %902 = load double, ptr %56, align 8, !tbaa !9
  %903 = load double, ptr %62, align 8, !tbaa !9
  %904 = load double, ptr @RN_EPSILON, align 8, !tbaa !9
  %905 = invoke noundef i32 @_Z8RNIsLessddd(double noundef %902, double noundef %903, double noundef %904)
          to label %906 unwind label %776

906:                                              ; preds = %901
  %907 = icmp ne i32 %905, 0
  br i1 %907, label %908, label %923

908:                                              ; preds = %906
  %909 = load ptr, ptr %54, align 8, !tbaa !5
  %910 = invoke noundef i32 @_ZL30R3MeshVertexIsSaddleOrBoundaryPK6R3MeshPK12R3MeshVertex(ptr noundef %69, ptr noundef %909)
          to label %911 unwind label %776

911:                                              ; preds = %908
  %912 = icmp ne i32 %910, 0
  br i1 %912, label %913, label %922

913:                                              ; preds = %911
  %914 = load ptr, ptr %54, align 8, !tbaa !5
  %915 = load double, ptr %6, align 8, !tbaa !9
  %916 = load double, ptr %56, align 8, !tbaa !9
  %917 = load ptr, ptr %21, align 8, !tbaa !5
  %918 = load ptr, ptr %7, align 8, !tbaa !5
  %919 = load ptr, ptr %8, align 8, !tbaa !5
  %920 = load ptr, ptr %9, align 8, !tbaa !5
  invoke void @_ZL34R3MeshCreateGeodesicBeamsForVertexPK6R3MeshPK12R3MeshVertexddP18R3MeshGeodesicBeamPdS7_S7_R6RNHeapIS6_ER7RNArrayIS6_E(ptr noundef %69, ptr noundef %914, double noundef %915, double noundef %916, ptr noundef %917, ptr noundef %918, ptr noundef %919, ptr noundef %920, ptr noundef nonnull align 8 dereferenceable(52) %14, ptr noundef nonnull align 8 dereferenceable(16) %17)
          to label %921 unwind label %776

921:                                              ; preds = %913
  br label %922

922:                                              ; preds = %921, %911
  br label %923

923:                                              ; preds = %922, %906
  br label %924

924:                                              ; preds = %923, %899, %889
  call void @llvm.lifetime.end.p0(i64 8, ptr %62) #11
  br label %926

925:                                              ; preds = %888, %832, %776
  call void @llvm.lifetime.end.p0(i64 8, ptr %62) #11
  br label %930

926:                                              ; preds = %924, %752
  call void @llvm.lifetime.end.p0(i64 4, ptr %57) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr %55) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #11
  br label %927

927:                                              ; preds = %926
  %928 = load i32, ptr %53, align 4, !tbaa !11
  %929 = add nsw i32 %928, 1
  store i32 %929, ptr %53, align 4, !tbaa !11
  br label %664, !llvm.loop !38

930:                                              ; preds = %925, %738, %713, %701
  call void @llvm.lifetime.end.p0(i64 4, ptr %57) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #11
  br label %931

931:                                              ; preds = %930, %697
  call void @llvm.lifetime.end.p0(i64 24, ptr %55) #11
  br label %932

932:                                              ; preds = %931, %693
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #11
  br label %937

933:                                              ; preds = %667
  call void @_ZN8R3AffineD1Ev(ptr noundef nonnull align 8 dereferenceable(272) %33) #11
  call void @llvm.lifetime.end.p0(i64 272, ptr %33) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr %32) #11
  call void @llvm.lifetime.end.p0(i64 32, ptr %31) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr %30) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr %29) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr %28) #11
  call void @llvm.lifetime.end.p0(i64 32, ptr %27) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr %26) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr %25) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr %24) #11
  store i32 0, ptr %23, align 4
  br label %934

934:                                              ; preds = %933, %319, %306, %291
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #11
  %935 = load i32, ptr %23, align 4
  switch i32 %935, label %990 [
    i32 0, label %936
    i32 14, label %236
  ]

936:                                              ; preds = %934
  br label %236, !llvm.loop !34

937:                                              ; preds = %932, %662, %414, %410, %406
  call void @_ZN8R3AffineD1Ev(ptr noundef nonnull align 8 dereferenceable(272) %33) #11
  br label %938

938:                                              ; preds = %937, %402
  call void @llvm.lifetime.end.p0(i64 272, ptr %33) #11
  br label %939

939:                                              ; preds = %938, %398
  call void @llvm.lifetime.end.p0(i64 24, ptr %32) #11
  br label %940

940:                                              ; preds = %939, %394
  call void @llvm.lifetime.end.p0(i64 32, ptr %31) #11
  br label %941

941:                                              ; preds = %940, %390
  call void @llvm.lifetime.end.p0(i64 24, ptr %30) #11
  br label %942

942:                                              ; preds = %941, %386
  call void @llvm.lifetime.end.p0(i64 24, ptr %29) #11
  br label %943

943:                                              ; preds = %942, %382
  call void @llvm.lifetime.end.p0(i64 24, ptr %28) #11
  br label %944

944:                                              ; preds = %943, %378
  call void @llvm.lifetime.end.p0(i64 32, ptr %27) #11
  br label %945

945:                                              ; preds = %944, %374
  call void @llvm.lifetime.end.p0(i64 24, ptr %26) #11
  br label %946

946:                                              ; preds = %945, %370
  call void @llvm.lifetime.end.p0(i64 24, ptr %25) #11
  br label %947

947:                                              ; preds = %946, %366
  call void @llvm.lifetime.end.p0(i64 24, ptr %24) #11
  br label %948

948:                                              ; preds = %947, %265
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #11
  br label %949

949:                                              ; preds = %948, %248
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #11
  br label %982

950:                                              ; preds = %238
  call void @llvm.lifetime.start.p0(i64 4, ptr %68) #11
  store i32 0, ptr %68, align 4, !tbaa !11
  br label %951

951:                                              ; preds = %969, %950
  %952 = load i32, ptr %68, align 4, !tbaa !11
  %953 = invoke noundef i32 @_ZNK8RNVArray8NEntriesEv(ptr noundef nonnull align 8 dereferenceable(16) %17)
          to label %954 unwind label %957

954:                                              ; preds = %951
  %955 = icmp slt i32 %952, %953
  br i1 %955, label %961, label %956

956:                                              ; preds = %954
  store i32 25, ptr %23, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %68) #11
  br label %972

957:                                              ; preds = %961, %951
  %958 = landingpad { ptr, i32 }
          cleanup
  %959 = extractvalue { ptr, i32 } %958, 0
  store ptr %959, ptr %15, align 8
  %960 = extractvalue { ptr, i32 } %958, 1
  store i32 %960, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %68) #11
  br label %982

961:                                              ; preds = %954
  %962 = load i32, ptr %68, align 4, !tbaa !11
  %963 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7RNArrayIP18R3MeshGeodesicBeamEixEi(ptr noundef nonnull align 8 dereferenceable(16) %17, i32 noundef %962)
          to label %964 unwind label %957

964:                                              ; preds = %961
  %965 = load ptr, ptr %963, align 8, !tbaa !5
  %966 = icmp eq ptr %965, null
  br i1 %966, label %968, label %967

967:                                              ; preds = %964
  call void @_ZN18R3MeshGeodesicBeamD2Ev(ptr noundef nonnull align 8 dereferenceable(400) %965) #11
  call void @_ZdlPvm(ptr noundef %965, i64 noundef 400) #13
  br label %968

968:                                              ; preds = %967, %964
  br label %969

969:                                              ; preds = %968
  %970 = load i32, ptr %68, align 4, !tbaa !11
  %971 = add nsw i32 %970, 1
  store i32 %971, ptr %68, align 4, !tbaa !11
  br label %951, !llvm.loop !39

972:                                              ; preds = %956
  %973 = load ptr, ptr %8, align 8, !tbaa !5
  %974 = icmp eq ptr %973, null
  br i1 %974, label %976, label %975

975:                                              ; preds = %972
  call void @_ZdaPv(ptr noundef %973) #13
  br label %976

976:                                              ; preds = %975, %972
  %977 = load ptr, ptr %9, align 8, !tbaa !5
  %978 = icmp eq ptr %977, null
  br i1 %978, label %980, label %979

979:                                              ; preds = %976
  call void @_ZdaPv(ptr noundef %977) #13
  br label %980

980:                                              ; preds = %979, %976
  %981 = load ptr, ptr %7, align 8, !tbaa !5
  store i32 1, ptr %23, align 4
  call void @_ZN8RNVArrayD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %17) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr %17) #11
  call void @_ZN6RNHeapIP18R3MeshGeodesicBeamED2Ev(ptr noundef nonnull align 8 dereferenceable(52) %14) #11
  call void @llvm.lifetime.end.p0(i64 56, ptr %14) #11
  call void @_ZN18R3MeshGeodesicBeamD2Ev(ptr noundef nonnull align 8 dereferenceable(400) %13) #11
  call void @llvm.lifetime.end.p0(i64 400, ptr %13) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #11
  ret ptr %981

982:                                              ; preds = %957, %949, %234, %172
  call void @_ZN8RNVArrayD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %17) #11
  br label %983

983:                                              ; preds = %982, %168
  call void @llvm.lifetime.end.p0(i64 16, ptr %17) #11
  call void @_ZN6RNHeapIP18R3MeshGeodesicBeamED2Ev(ptr noundef nonnull align 8 dereferenceable(52) %14) #11
  br label %984

984:                                              ; preds = %983, %164
  call void @llvm.lifetime.end.p0(i64 56, ptr %14) #11
  call void @_ZN18R3MeshGeodesicBeamD2Ev(ptr noundef nonnull align 8 dereferenceable(400) %13) #11
  call void @llvm.lifetime.end.p0(i64 400, ptr %13) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #11
  br label %985

985:                                              ; preds = %984
  %986 = load ptr, ptr %15, align 8
  %987 = load i32, ptr %16, align 4
  %988 = insertvalue { ptr, i32 } poison, ptr %986, 0
  %989 = insertvalue { ptr, i32 } %988, i32 %987, 1
  resume { ptr, i32 } %989

990:                                              ; preds = %934, %637
  unreachable
}

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN18R3MeshGeodesicBeamC2Ev(ptr noundef nonnull align 8 dereferenceable(400)) unnamed_addr #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN6RNHeapIP18R3MeshGeodesicBeamEC2ES1_PdPPS1_i(ptr noundef nonnull align 8 dereferenceable(52), ptr noundef, ptr noundef, ptr noundef, i32 noundef) unnamed_addr #9 align 2

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

; Function Attrs: mustprogress uwtable
declare hidden void @_ZL34R3MeshCreateGeodesicBeamsForVertexPK6R3MeshPK12R3MeshVertexddP18R3MeshGeodesicBeamPdS7_S7_R6RNHeapIS6_ER7RNArrayIS6_E(ptr noundef, ptr noundef, double noundef, double noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef nonnull align 8 dereferenceable(52), ptr noundef nonnull align 8 dereferenceable(16)) #9

; Function Attrs: mustprogress uwtable
declare hidden noundef i32 @_ZL30R3MeshVertexIsSaddleOrBoundaryPK6R3MeshPK12R3MeshVertex(ptr noundef, ptr noundef) #9

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK6RNHeapIP18R3MeshGeodesicBeamE7IsEmptyEv(ptr noundef nonnull align 8 dereferenceable(52)) #10 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef ptr @_ZN6RNHeapIP18R3MeshGeodesicBeamE3PopEv(ptr noundef nonnull align 8 dereferenceable(52)) #9 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(24) ptr @_ZNK6R3Span5StartEv(ptr noundef nonnull align 8 dereferenceable(80)) #1 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(24) ptr @_ZNK6R3Span3EndEv(ptr noundef nonnull align 8 dereferenceable(80)) #5 align 2

declare void @_ZN8R3Vector9TransformERK16R3Transformation(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(8)) #0

declare void @_ZNK6R3Span8MidpointEv(ptr dead_on_unwind writable sret(%class.R3Point) align 8, ptr noundef nonnull align 8 dereferenceable(80)) #0

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

declare void @_ZN6R3SpanC1ERK7R3PointS2_(ptr noundef nonnull align 8 dereferenceable(80), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #0

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(24) ptr @_ZNK6R3Span6VectorEv(ptr noundef nonnull align 8 dereferenceable(80)) #1 align 2

declare noundef i32 @_ZN6R3Span4ClipERK7R3Plane(ptr noundef nonnull align 8 dereferenceable(80), ptr noundef nonnull align 8 dereferenceable(32)) #0

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

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

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

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

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

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN18R3MeshGeodesicBeamD2Ev(ptr noundef nonnull align 8 dereferenceable(400)) unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN6RNHeapIP18R3MeshGeodesicBeamED2Ev(ptr noundef nonnull align 8 dereferenceable(52)) unnamed_addr #10 align 2

; Function Attrs: nounwind
declare void @_ZN8RNVArrayD2Ev(ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #8

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"double", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"int", !7, i64 0}
!13 = distinct !{!13, !14}
!14 = !{!"llvm.loop.mustprogress"}
!15 = distinct !{!15, !14}
!16 = distinct !{!16, !14}
!17 = distinct !{!17, !14}
!18 = !{!19, !6, i64 16}
!19 = !{!"_ZTS18R3MeshGeodesicBeam", !6, i64 0, !6, i64 8, !6, i64 16, !20, i64 24, !25, i64 296, !10, i64 376, !10, i64 384, !6, i64 392}
!20 = !{!"_ZTS8R3Affine", !21, i64 0, !22, i64 8, !22, i64 136, !23, i64 264}
!21 = !{!"_ZTS16R3Transformation"}
!22 = !{!"_ZTS8R4Matrix", !7, i64 0}
!23 = !{!"_ZTS7RNFlags", !24, i64 0}
!24 = !{!"long", !7, i64 0}
!25 = !{!"_ZTS6R3Span", !26, i64 0, !28, i64 48, !10, i64 72}
!26 = !{!"_ZTS5R3Ray", !27, i64 0}
!27 = !{!"_ZTS6R3Line", !28, i64 0, !29, i64 24}
!28 = !{!"_ZTS7R3Point", !7, i64 0}
!29 = !{!"_ZTS8R3Vector", !7, i64 0}
!30 = !{!19, !6, i64 8}
!31 = !{!19, !10, i64 376}
!32 = !{!19, !10, i64 384}
!33 = !{!19, !6, i64 0}
!34 = distinct !{!34, !14}
!35 = !{!19, !6, i64 392}
!36 = distinct !{!36, !14}
!37 = distinct !{!37, !14}
!38 = distinct !{!38, !14}
!39 = distinct !{!39, !14}


; 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.R3Affine = type { %class.R3Transformation, %class.R4Matrix, %class.R4Matrix, %class.RNFlags }
%class.R3Transformation = type { ptr }
%class.R4Matrix = type { [4 x [4 x double]] }
%class.RNFlags = type { i64 }
%class.R3Point = type { [3 x double] }
%class.R3Vector = type { [3 x double] }
%struct.R3MeshGeodesicBeam = type { ptr, ptr, ptr, %class.R3Affine, %class.R3Span, double, double, ptr }
%class.R3Span = type { %class.R3Ray, %class.R3Point, double }
%class.R3Ray = type { %class.R3Line }
%class.R3Line = type { %class.R3Point, %class.R3Vector }
%class.RNHeap.4 = type <{ ptr, i32, i32, i32, i32, ptr, ptr, ptr, i32, [4 x i8] }>
%class.RNArray.6 = type { %class.RNVArray }
%class.RNVArray = type { ptr, i32, i32 }
%class.R3Plane = type { %class.R3Vector, double }

@.str = external hidden unnamed_addr constant [41 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [88 x i8], align 1
@R3identity_affine = external global %class.R3Affine, align 8
@RN_EPSILON = external local_unnamed_addr global double, align 8
@R3null_point = external global %class.R3Point, align 8
@.str.41 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.42 = external hidden unnamed_addr constant [5 x i8], align 1
@R3posz_vector = external global %class.R3Vector, align 8

declare i32 @__gxx_personality_v0(...)

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

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

; Function Attrs: nobuiltin allocsize(0)
declare noundef nonnull ptr @_Znam(i64 noundef) local_unnamed_addr #2

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

; Function Attrs: 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 #4 align 2

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

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

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

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

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

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

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

; Function Attrs: nobuiltin nounwind
declare void @_ZdlPvm(ptr noundef, i64 noundef) local_unnamed_addr #5

declare void @_ZN7R3PointC1ERKS_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #0

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef double @_ZNK6R3Mesh10EdgeLengthEPK10R3MeshEdge(ptr noundef nonnull align 8 dereferenceable(272), ptr noundef) local_unnamed_addr #1 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: mustprogress nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #6

declare void @_ZrmRK8R3VectorS1_(ptr dead_on_unwind writable sret(%class.R3Vector) align 8, ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #0

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef i32 @_Z8RNIsZerodd(double noundef, double noundef) local_unnamed_addr #1

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

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

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

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

declare void @_ZN8R3Affine9TransformERKS_(ptr noundef nonnull align 8 dereferenceable(272), ptr noundef nonnull align 8 dereferenceable(272)) local_unnamed_addr #0

; Function Attrs: nounwind
declare void @_ZN8R3AffineD1Ev(ptr noundef nonnull align 8 dereferenceable(272)) unnamed_addr #7

declare void @_ZngRK8R3Vector(ptr dead_on_unwind writable sret(%class.R3Vector) align 8, ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #0

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

declare void @_ZN8R3VectorC1ERKS_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #0

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

declare void @_ZN8R3Vector9NormalizeEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #0

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef ptr @_ZNK6R3Mesh12VertexOnFaceEPK10R3MeshFacePK10R3MeshEdgei(ptr noundef nonnull align 8 dereferenceable(272), ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #1 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 #4 align 2

; Function Attrs: nobuiltin nounwind
declare void @_ZdaPv(ptr noundef) local_unnamed_addr #5

declare void @_ZN7R3Point9TransformERK16R3Transformation(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #0

; Function Attrs: nobuiltin allocsize(0)
declare noundef nonnull ptr @_Znwm(i64 noundef) local_unnamed_addr #2

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

declare void @_ZN7R3PlaneC1ERK7R3PointRK8R3Vector(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #0

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

; Function Attrs: mustprogress uwtable
define dso_local noundef nonnull ptr @_ZNK6R3Mesh17GeodesicDistancesEPK12R3MeshVertexd(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef %1, double noundef %2) local_unnamed_addr #8 align 2 personality ptr @__gxx_personality_v0 {
  %4 = alloca %struct.R3MeshGeodesicBeam, align 8
  %5 = alloca %class.RNHeap.4, align 8
  %6 = alloca %class.RNArray.6, align 8
  %7 = alloca %class.R3Point, align 8
  %8 = alloca %class.R3Vector, align 8
  %9 = alloca %class.R3Vector, align 8
  %10 = alloca %class.R3Plane, align 8
  %11 = alloca %class.R3Point, align 8
  %12 = alloca %class.R3Vector, align 8
  %13 = alloca %class.R3Vector, align 8
  %14 = alloca %class.R3Plane, align 8
  %15 = alloca %class.R3Vector, align 8
  %16 = alloca %class.R3Affine, align 8
  %17 = alloca %class.R3Vector, align 8
  %18 = alloca %class.R3Point, align 8
  %19 = alloca %class.R3Vector, align 8
  %20 = alloca %class.R3Vector, align 8
  %21 = alloca %class.R3Point, align 8
  %22 = alloca %class.R3Point, align 8
  %23 = alloca %class.R3Point, align 8
  %24 = alloca %class.R3Span, align 8
  %25 = alloca %class.R3Vector, align 8
  %26 = alloca %class.R3Vector, align 8
  %27 = alloca %class.R3Plane, align 8
  %28 = alloca %class.R3Point, align 8
  %29 = alloca %class.R3Point, align 8
  %30 = tail call noundef i32 @_ZNK6R3Mesh9NVerticesEv(ptr noundef nonnull align 8 dereferenceable(272) %0)
  %31 = zext nneg i32 %30 to i64
  %32 = icmp slt i32 %30, 0
  %33 = shl nuw nsw i64 %31, 3
  %34 = select i1 %32, i64 -1, i64 %33
  %35 = tail call noalias noundef nonnull ptr @_Znam(i64 noundef %34) #10
  %36 = tail call noundef i32 @_ZNK6R3Mesh6NEdgesEv(ptr noundef nonnull align 8 dereferenceable(272) %0)
  %37 = zext nneg i32 %36 to i64
  %38 = icmp slt i32 %36, 0
  %39 = shl nuw nsw i64 %37, 3
  %40 = select i1 %38, i64 -1, i64 %39
  %41 = tail call noalias noundef nonnull ptr @_Znam(i64 noundef %40) #10
  %42 = tail call noundef i32 @_ZNK6R3Mesh6NFacesEv(ptr noundef nonnull align 8 dereferenceable(272) %0)
  %43 = zext nneg i32 %42 to i64
  %44 = icmp slt i32 %42, 0
  %45 = shl nuw nsw i64 %43, 3
  %46 = select i1 %44, i64 -1, i64 %45
  %47 = tail call noalias noundef nonnull ptr @_Znam(i64 noundef %46) #10
  %48 = tail call noundef i32 @_ZNK6R3Mesh9NVerticesEv(ptr noundef nonnull align 8 dereferenceable(272) %0)
  %49 = icmp sgt i32 %48, 0
  br i1 %49, label %.lr.ph, label %.preheader291

.preheader291:                                    ; preds = %.lr.ph, %3
  %50 = tail call noundef i32 @_ZNK6R3Mesh6NEdgesEv(ptr noundef nonnull align 8 dereferenceable(272) %0)
  %51 = icmp sgt i32 %50, 0
  br i1 %51, label %.lr.ph294, label %.preheader290

.lr.ph:                                           ; preds = %3, %.lr.ph
  %indvars.iv = phi i64 [ %indvars.iv.next, %.lr.ph ], [ 0, %3 ]
  %52 = getelementptr inbounds double, ptr %35, i64 %indvars.iv
  store double 0x47EFFFFFE0000000, ptr %52, align 8, !tbaa !5
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %53 = tail call noundef i32 @_ZNK6R3Mesh9NVerticesEv(ptr noundef nonnull align 8 dereferenceable(272) %0)
  %54 = sext i32 %53 to i64
  %55 = icmp slt i64 %indvars.iv.next, %54
  br i1 %55, label %.lr.ph, label %.preheader291, !llvm.loop !9

.preheader290:                                    ; preds = %.lr.ph294, %.preheader291
  %56 = tail call noundef i32 @_ZNK6R3Mesh6NFacesEv(ptr noundef nonnull align 8 dereferenceable(272) %0)
  %57 = icmp sgt i32 %56, 0
  br i1 %57, label %.lr.ph296, label %._crit_edge

.lr.ph294:                                        ; preds = %.preheader291, %.lr.ph294
  %indvars.iv306 = phi i64 [ %indvars.iv.next307, %.lr.ph294 ], [ 0, %.preheader291 ]
  %58 = getelementptr inbounds double, ptr %41, i64 %indvars.iv306
  store double 0x47EFFFFFE0000000, ptr %58, align 8, !tbaa !5
  %indvars.iv.next307 = add nuw nsw i64 %indvars.iv306, 1
  %59 = tail call noundef i32 @_ZNK6R3Mesh6NEdgesEv(ptr noundef nonnull align 8 dereferenceable(272) %0)
  %60 = sext i32 %59 to i64
  %61 = icmp slt i64 %indvars.iv.next307, %60
  br i1 %61, label %.lr.ph294, label %.preheader290, !llvm.loop !11

._crit_edge:                                      ; preds = %.lr.ph296, %.preheader290
  %62 = tail call noundef i32 @_ZNK6R3Mesh8VertexIDEPK12R3MeshVertex(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef %1)
  %63 = sext i32 %62 to i64
  %64 = getelementptr inbounds double, ptr %35, i64 %63
  store double 0.000000e+00, ptr %64, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 400, ptr nonnull %4) #11
  call void @_ZN18R3MeshGeodesicBeamC2Ev(ptr noundef nonnull align 8 dereferenceable(400) %4)
  call void @llvm.lifetime.start.p0(i64 56, ptr nonnull %5) #11
  %65 = getelementptr inbounds i8, ptr %4, i64 376
  invoke void @_ZN6RNHeapIP18R3MeshGeodesicBeamEC2ES1_PdPPS1_i(ptr noundef nonnull align 8 dereferenceable(52) %5, ptr noundef nonnull %4, ptr noundef nonnull %65, ptr noundef null, i32 noundef 1)
          to label %70 unwind label %77

.lr.ph296:                                        ; preds = %.preheader290, %.lr.ph296
  %indvars.iv309 = phi i64 [ %indvars.iv.next310, %.lr.ph296 ], [ 0, %.preheader290 ]
  %66 = getelementptr inbounds double, ptr %47, i64 %indvars.iv309
  store double 0x47EFFFFFE0000000, ptr %66, align 8, !tbaa !5
  %indvars.iv.next310 = add nuw nsw i64 %indvars.iv309, 1
  %67 = tail call noundef i32 @_ZNK6R3Mesh6NFacesEv(ptr noundef nonnull align 8 dereferenceable(272) %0)
  %68 = sext i32 %67 to i64
  %69 = icmp slt i64 %indvars.iv.next310, %68
  br i1 %69, label %.lr.ph296, label %._crit_edge, !llvm.loop !12

70:                                               ; preds = %._crit_edge
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %6) #11
  invoke void @_ZN7RNArrayIP18R3MeshGeodesicBeamEC2Ev(ptr noundef nonnull align 8 dereferenceable(16) %6)
          to label %71 unwind label %79

71:                                               ; preds = %70
  invoke void @_ZL34R3MeshCreateGeodesicBeamsForVertexPK6R3MeshPK12R3MeshVertexddP18R3MeshGeodesicBeamPdS7_S7_R6RNHeapIS6_ER7RNArrayIS6_E(ptr noundef nonnull %0, ptr noundef %1, double noundef %2, double noundef 0.000000e+00, ptr noundef null, ptr noundef nonnull %35, ptr noundef nonnull %41, ptr noundef nonnull %47, ptr noundef nonnull align 8 dereferenceable(52) %5, ptr noundef nonnull align 8 dereferenceable(16) %6)
          to label %.preheader289 unwind label %81

.preheader289:                                    ; preds = %71, %109
  %.0226 = phi i32 [ %110, %109 ], [ 0, %71 ]
  %72 = invoke noundef i32 @_ZNK6R3Mesh13VertexValenceEPK12R3MeshVertex(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef %1)
          to label %73 unwind label %83

73:                                               ; preds = %.preheader289
  %74 = icmp slt i32 %.0226, %72
  br i1 %74, label %85, label %.preheader288

.preheader288:                                    ; preds = %73
  %75 = call noundef i32 @_ZNK6RNHeapIP18R3MeshGeodesicBeamE7IsEmptyEv(ptr noundef nonnull align 8 dereferenceable(52) %5)
  %.not300 = icmp eq i32 %75, 0
  br i1 %.not300, label %.lr.ph301, label %.preheader

.lr.ph301:                                        ; preds = %.preheader288
  %76 = fcmp ogt double %2, 0.000000e+00
  br label %113

77:                                               ; preds = %._crit_edge
  %78 = landingpad { ptr, i32 }
          cleanup
  br label %508

79:                                               ; preds = %70
  %80 = landingpad { ptr, i32 }
          cleanup
  br label %507

81:                                               ; preds = %71
  %82 = landingpad { ptr, i32 }
          cleanup
  br label %506

83:                                               ; preds = %.preheader289
  %84 = landingpad { ptr, i32 }
          cleanup
  br label %506

85:                                               ; preds = %73
  %86 = invoke noundef ptr @_ZNK6R3Mesh12EdgeOnVertexEPK12R3MeshVertexi(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef %1, i32 noundef %.0226)
          to label %87 unwind label %105

87:                                               ; preds = %85
  %88 = invoke noundef ptr @_ZNK6R3Mesh16VertexAcrossEdgeEPK10R3MeshEdgePK12R3MeshVertex(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef %86, ptr noundef %1)
          to label %89 unwind label %107

89:                                               ; preds = %87
  %90 = invoke noundef double @_ZNK6R3Mesh10EdgeLengthEPK10R3MeshEdge(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef %86)
          to label %91 unwind label %107

91:                                               ; preds = %89
  %92 = call noundef i32 @_ZNK6R3Mesh6EdgeIDEPK10R3MeshEdge(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef %86)
  %93 = sext i32 %92 to i64
  %94 = getelementptr inbounds double, ptr %41, i64 %93
  store double %90, ptr %94, align 8, !tbaa !5
  %95 = invoke noundef double @_ZNK6R3Mesh10EdgeLengthEPK10R3MeshEdge(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef %86)
          to label %96 unwind label %107

96:                                               ; preds = %91
  %97 = call noundef i32 @_ZNK6R3Mesh8VertexIDEPK12R3MeshVertex(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef %88)
  %98 = sext i32 %97 to i64
  %99 = getelementptr inbounds double, ptr %35, i64 %98
  store double %95, ptr %99, align 8, !tbaa !5
  %100 = invoke noundef i32 @_ZL30R3MeshVertexIsSaddleOrBoundaryPK6R3MeshPK12R3MeshVertex(ptr noundef nonnull %0, ptr noundef %88)
          to label %101 unwind label %107

101:                                              ; preds = %96
  %.not279 = icmp eq i32 %100, 0
  br i1 %.not279, label %109, label %102

102:                                              ; preds = %101
  %103 = invoke noundef double @_ZNK6R3Mesh10EdgeLengthEPK10R3MeshEdge(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef %86)
          to label %104 unwind label %107

104:                                              ; preds = %102
  invoke void @_ZL34R3MeshCreateGeodesicBeamsForVertexPK6R3MeshPK12R3MeshVertexddP18R3MeshGeodesicBeamPdS7_S7_R6RNHeapIS6_ER7RNArrayIS6_E(ptr noundef nonnull %0, ptr noundef %88, double noundef %2, double noundef %103, ptr noundef null, ptr noundef nonnull %35, ptr noundef nonnull %41, ptr noundef nonnull %47, ptr noundef nonnull align 8 dereferenceable(52) %5, ptr noundef nonnull align 8 dereferenceable(16) %6)
          to label %109 unwind label %107

105:                                              ; preds = %85
  %106 = landingpad { ptr, i32 }
          cleanup
  br label %506

107:                                              ; preds = %104, %102, %96, %91, %89, %87
  %108 = landingpad { ptr, i32 }
          cleanup
  br label %506

109:                                              ; preds = %104, %101
  %110 = add nuw nsw i32 %.0226, 1
  br label %.preheader289, !llvm.loop !13

.preheader:                                       ; preds = %482, %.preheader288
  %111 = call noundef i32 @_ZNK8RNVArray8NEntriesEv(ptr noundef nonnull align 8 dereferenceable(16) %6)
  %112 = icmp sgt i32 %111, 0
  br i1 %112, label %.lr.ph303, label %._crit_edge304

113:                                              ; preds = %.lr.ph301, %482
  %114 = invoke noundef ptr @_ZN6RNHeapIP18R3MeshGeodesicBeamE3PopEv(ptr noundef nonnull align 8 dereferenceable(52) %5)
          to label %115 unwind label %117

115:                                              ; preds = %113
  %.not236 = icmp eq ptr %114, null
  br i1 %.not236, label %116, label %119

116:                                              ; preds = %115
  invoke void (ptr, ...) @_Z7RNAbortPKcz(ptr noundef nonnull @.str, ptr noundef nonnull @.str.41, i32 noundef 3466, ptr noundef nonnull @.str.2)
          to label %119 unwind label %117

117:                                              ; preds = %116, %113
  %118 = landingpad { ptr, i32 }
          cleanup
  br label %506

119:                                              ; preds = %116, %115
  %120 = getelementptr inbounds i8, ptr %114, i64 16
  %121 = load ptr, ptr %120, align 8, !tbaa !14
  %122 = getelementptr inbounds i8, ptr %114, i64 8
  %123 = load ptr, ptr %122, align 8, !tbaa !27
  %124 = call noundef ptr @_ZNK6R3Mesh14FaceAcrossEdgeEPK10R3MeshEdgePK10R3MeshFace(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef %121, ptr noundef %123)
  %.not237 = icmp eq ptr %124, null
  br i1 %.not237, label %125, label %128

125:                                              ; preds = %119
  invoke void (ptr, ...) @_Z7RNAbortPKcz(ptr noundef nonnull @.str, ptr noundef nonnull @.str.42, i32 noundef 3470, ptr noundef nonnull @.str.2)
          to label %128 unwind label %126

126:                                              ; preds = %125
  %127 = landingpad { ptr, i32 }
          cleanup
  br label %506

128:                                              ; preds = %125, %119
  %129 = getelementptr inbounds i8, ptr %114, i64 376
  %130 = load double, ptr %129, align 8, !tbaa !28
  %131 = getelementptr inbounds i8, ptr %114, i64 384
  %132 = load double, ptr %131, align 8, !tbaa !29
  %133 = fsub double %130, %132
  %134 = load ptr, ptr %114, align 8, !tbaa !30
  %135 = call noundef i32 @_ZNK6R3Mesh8VertexIDEPK12R3MeshVertex(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef %134)
  %136 = sext i32 %135 to i64
  %137 = getelementptr inbounds double, ptr %35, i64 %136
  %138 = load double, ptr %137, align 8, !tbaa !5
  %139 = fadd double %133, %138
  %140 = fcmp ogt double %130, %139
  br i1 %140, label %482, label %141, !llvm.loop !31

141:                                              ; preds = %128
  %142 = load double, ptr %129, align 8, !tbaa !28
  %143 = load ptr, ptr %120, align 8, !tbaa !14
  %144 = call noundef i32 @_ZNK6R3Mesh6EdgeIDEPK10R3MeshEdge(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef %143)
  %145 = sext i32 %144 to i64
  %146 = getelementptr inbounds double, ptr %41, i64 %145
  %147 = load double, ptr %146, align 8, !tbaa !5
  %148 = fcmp ult double %142, %147
  br i1 %148, label %149, label %482, !llvm.loop !31

149:                                              ; preds = %141
  %150 = load double, ptr %129, align 8, !tbaa !28
  %151 = call noundef i32 @_ZNK6R3Mesh6FaceIDEPK10R3MeshFace(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef %124)
  %152 = sext i32 %151 to i64
  %153 = getelementptr inbounds double, ptr %47, i64 %152
  %154 = load double, ptr %153, align 8, !tbaa !5
  %155 = fcmp ult double %150, %154
  br i1 %155, label %156, label %482, !llvm.loop !31

156:                                              ; preds = %149
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %7) #11
  %157 = getelementptr inbounds i8, ptr %114, i64 296
  %158 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZNK6R3Span5StartEv(ptr noundef nonnull align 8 dereferenceable(80) %157)
          to label %159 unwind label %185

159:                                              ; preds = %156
  invoke void @_ZN7R3PointC1ERKS_(ptr noundef nonnull align 8 dereferenceable(24) %7, ptr noundef nonnull align 8 dereferenceable(24) %158)
          to label %160 unwind label %185

160:                                              ; preds = %159
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %8) #11
  invoke void @_ZNK7R3Point6VectorEv(ptr dead_on_unwind nonnull writable sret(%class.R3Vector) align 8 %8, ptr noundef nonnull align 8 dereferenceable(24) %7)
          to label %161 unwind label %187

161:                                              ; preds = %160
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %9) #11
  invoke void @_ZrmRK8R3VectorS1_(ptr dead_on_unwind nonnull writable sret(%class.R3Vector) align 8 %9, ptr noundef nonnull align 8 dereferenceable(24) %8, ptr noundef nonnull align 8 dereferenceable(24) @R3posz_vector)
          to label %162 unwind label %189

162:                                              ; preds = %161
  invoke void @_ZN8R3Vector9NormalizeEv(ptr noundef nonnull align 8 dereferenceable(24) %9)
          to label %163 unwind label %189

163:                                              ; preds = %162
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %10) #11
  invoke void @_ZN7R3PlaneC1ERK7R3PointRK8R3Vector(ptr noundef nonnull align 8 dereferenceable(32) %10, ptr noundef nonnull align 8 dereferenceable(24) %7, ptr noundef nonnull align 8 dereferenceable(24) %9)
          to label %164 unwind label %191

164:                                              ; preds = %163
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %11) #11
  %165 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK6R3Span3EndEv(ptr noundef nonnull align 8 dereferenceable(80) %157)
  invoke void @_ZN7R3PointC1ERKS_(ptr noundef nonnull align 8 dereferenceable(24) %11, ptr noundef nonnull align 8 dereferenceable(24) %165)
          to label %166 unwind label %193

166:                                              ; preds = %164
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %12) #11
  invoke void @_ZNK7R3Point6VectorEv(ptr dead_on_unwind nonnull writable sret(%class.R3Vector) align 8 %12, ptr noundef nonnull align 8 dereferenceable(24) %11)
          to label %167 unwind label %195

167:                                              ; preds = %166
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %13) #11
  invoke void @_ZrmRK8R3VectorS1_(ptr dead_on_unwind nonnull writable sret(%class.R3Vector) align 8 %13, ptr noundef nonnull align 8 dereferenceable(24) @R3posz_vector, ptr noundef nonnull align 8 dereferenceable(24) %12)
          to label %168 unwind label %197

168:                                              ; preds = %167
  invoke void @_ZN8R3Vector9NormalizeEv(ptr noundef nonnull align 8 dereferenceable(24) %13)
          to label %169 unwind label %197

169:                                              ; preds = %168
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %14) #11
  invoke void @_ZN7R3PlaneC1ERK7R3PointRK8R3Vector(ptr noundef nonnull align 8 dereferenceable(32) %14, ptr noundef nonnull align 8 dereferenceable(24) %11, ptr noundef nonnull align 8 dereferenceable(24) %13)
          to label %170 unwind label %199

170:                                              ; preds = %169
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %15) #11
  %171 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZNK6R3Mesh10FaceNormalEPK10R3MeshFace(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef %124)
          to label %172 unwind label %201

172:                                              ; preds = %170
  invoke void @_ZN8R3VectorC1ERKS_(ptr noundef nonnull align 8 dereferenceable(24) %15, ptr noundef nonnull align 8 dereferenceable(24) %171)
          to label %173 unwind label %201

173:                                              ; preds = %172
  %174 = getelementptr inbounds i8, ptr %114, i64 24
  invoke void @_ZN8R3Vector9TransformERK16R3Transformation(ptr noundef nonnull align 8 dereferenceable(24) %15, ptr noundef nonnull align 8 dereferenceable(8) %174)
          to label %175 unwind label %201

175:                                              ; preds = %173
  call void @llvm.lifetime.start.p0(i64 272, ptr nonnull %16) #11
  invoke void @_ZN8R3AffineC2ERKS_(ptr noundef nonnull align 8 dereferenceable(272) %16, ptr noundef nonnull align 8 dereferenceable(272) @R3identity_affine)
          to label %176 unwind label %203

176:                                              ; preds = %175
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %17) #11
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %18) #11
  invoke void @_ZNK6R3Span8MidpointEv(ptr dead_on_unwind nonnull writable sret(%class.R3Point) align 8 %18, ptr noundef nonnull align 8 dereferenceable(80) %157)
          to label %177 unwind label %205

177:                                              ; preds = %176
  invoke void @_ZNK7R3Point6VectorEv(ptr dead_on_unwind nonnull writable sret(%class.R3Vector) align 8 %17, ptr noundef nonnull align 8 dereferenceable(24) %18)
          to label %178 unwind label %205

178:                                              ; preds = %177
  invoke void @_ZN8R3Affine9TranslateERK8R3Vector(ptr noundef nonnull align 8 dereferenceable(272) %16, ptr noundef nonnull align 8 dereferenceable(24) %17)
          to label %179 unwind label %205

179:                                              ; preds = %178
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %18) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %17) #11
  invoke void @_ZN8R3Affine6RotateERK8R3VectorS2_(ptr noundef nonnull align 8 dereferenceable(272) %16, ptr noundef nonnull align 8 dereferenceable(24) %15, ptr noundef nonnull align 8 dereferenceable(24) @R3posz_vector)
          to label %180 unwind label %207

180:                                              ; preds = %179
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %19) #11
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %20) #11
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %21) #11
  invoke void @_ZNK6R3Span8MidpointEv(ptr dead_on_unwind nonnull writable sret(%class.R3Point) align 8 %21, ptr noundef nonnull align 8 dereferenceable(80) %157)
          to label %181 unwind label %209

181:                                              ; preds = %180
  invoke void @_ZNK7R3Point6VectorEv(ptr dead_on_unwind nonnull writable sret(%class.R3Vector) align 8 %20, ptr noundef nonnull align 8 dereferenceable(24) %21)
          to label %182 unwind label %209

182:                                              ; preds = %181
  invoke void @_ZngRK8R3Vector(ptr dead_on_unwind nonnull writable sret(%class.R3Vector) align 8 %19, ptr noundef nonnull align 8 dereferenceable(24) %20)
          to label %183 unwind label %209

183:                                              ; preds = %182
  invoke void @_ZN8R3Affine9TranslateERK8R3Vector(ptr noundef nonnull align 8 dereferenceable(272) %16, ptr noundef nonnull align 8 dereferenceable(24) %19)
          to label %184 unwind label %209

184:                                              ; preds = %183
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %21) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %20) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %19) #11
  invoke void @_ZN8R3Affine9TransformERKS_(ptr noundef nonnull align 8 dereferenceable(272) %16, ptr noundef nonnull align 8 dereferenceable(272) %174)
          to label %.preheader287 unwind label %207

185:                                              ; preds = %159, %156
  %186 = landingpad { ptr, i32 }
          cleanup
  br label %494

187:                                              ; preds = %160
  %188 = landingpad { ptr, i32 }
          cleanup
  br label %493

189:                                              ; preds = %162, %161
  %190 = landingpad { ptr, i32 }
          cleanup
  br label %492

191:                                              ; preds = %163
  %192 = landingpad { ptr, i32 }
          cleanup
  br label %491

193:                                              ; preds = %164
  %194 = landingpad { ptr, i32 }
          cleanup
  br label %490

195:                                              ; preds = %166
  %196 = landingpad { ptr, i32 }
          cleanup
  br label %489

197:                                              ; preds = %168, %167
  %198 = landingpad { ptr, i32 }
          cleanup
  br label %488

199:                                              ; preds = %169
  %200 = landingpad { ptr, i32 }
          cleanup
  br label %487

201:                                              ; preds = %173, %172, %170
  %202 = landingpad { ptr, i32 }
          cleanup
  br label %486

203:                                              ; preds = %175
  %204 = landingpad { ptr, i32 }
          cleanup
  br label %485

205:                                              ; preds = %178, %177, %176
  %206 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %18) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %17) #11
  br label %484

207:                                              ; preds = %184, %179
  %208 = landingpad { ptr, i32 }
          cleanup
  br label %484

209:                                              ; preds = %183, %182, %181, %180
  %210 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %21) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %20) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %19) #11
  br label %484

.preheader287:                                    ; preds = %184, %323
  %211 = phi i1 [ false, %323 ], [ true, %184 ]
  %.0227297 = phi i32 [ 1, %323 ], [ 0, %184 ]
  %212 = load ptr, ptr %120, align 8, !tbaa !14
  %213 = call noundef ptr @_ZNK6R3Mesh10EdgeOnFaceEPK10R3MeshFacePK10R3MeshEdgei(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef %124, ptr noundef %212, i32 noundef %.0227297)
  %214 = call noundef ptr @_ZNK6R3Mesh14FaceAcrossEdgeEPK10R3MeshEdgePK10R3MeshFace(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef %213, ptr noundef %124)
  %.not250 = icmp eq ptr %214, null
  br i1 %.not250, label %323, label %215

215:                                              ; preds = %.preheader287
  %216 = load double, ptr %129, align 8, !tbaa !28
  %217 = call noundef i32 @_ZNK6R3Mesh6EdgeIDEPK10R3MeshEdge(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef %213)
  %218 = sext i32 %217 to i64
  %219 = getelementptr inbounds double, ptr %41, i64 %218
  %220 = load double, ptr %219, align 8, !tbaa !5
  %221 = fcmp ult double %216, %220
  br i1 %221, label %222, label %323

222:                                              ; preds = %215
  %223 = load double, ptr %129, align 8, !tbaa !28
  %224 = call noundef i32 @_ZNK6R3Mesh6FaceIDEPK10R3MeshFace(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef nonnull %214)
  %225 = sext i32 %224 to i64
  %226 = getelementptr inbounds double, ptr %47, i64 %225
  %227 = load double, ptr %226, align 8, !tbaa !5
  %228 = fcmp ult double %223, %227
  br i1 %228, label %229, label %323

229:                                              ; preds = %222
  %230 = invoke noundef ptr @_ZNK6R3Mesh12VertexOnFaceEPK10R3MeshFacePK10R3MeshEdgei(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef %124, ptr noundef %213, i32 noundef 0)
          to label %231 unwind label %249

231:                                              ; preds = %229
  %232 = invoke noundef ptr @_ZNK6R3Mesh12VertexOnFaceEPK10R3MeshFacePK10R3MeshEdgei(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef %124, ptr noundef %213, i32 noundef 1)
          to label %233 unwind label %251

233:                                              ; preds = %231
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %22) #11
  %234 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK6R3Mesh14VertexPositionEPK12R3MeshVertex(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef %230)
  invoke void @_ZN7R3PointC1ERKS_(ptr noundef nonnull align 8 dereferenceable(24) %22, ptr noundef nonnull align 8 dereferenceable(24) %234)
          to label %235 unwind label %253

235:                                              ; preds = %233
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %23) #11
  %236 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK6R3Mesh14VertexPositionEPK12R3MeshVertex(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef %232)
  invoke void @_ZN7R3PointC1ERKS_(ptr noundef nonnull align 8 dereferenceable(24) %23, ptr noundef nonnull align 8 dereferenceable(24) %236)
          to label %237 unwind label %255

237:                                              ; preds = %235
  invoke void @_ZN7R3Point9TransformERK16R3Transformation(ptr noundef nonnull align 8 dereferenceable(24) %22, ptr noundef nonnull align 8 dereferenceable(8) %16)
          to label %238 unwind label %255

238:                                              ; preds = %237
  invoke void @_ZN7R3Point9TransformERK16R3Transformation(ptr noundef nonnull align 8 dereferenceable(24) %23, ptr noundef nonnull align 8 dereferenceable(8) %16)
          to label %239 unwind label %255

239:                                              ; preds = %238
  call void @llvm.lifetime.start.p0(i64 80, ptr nonnull %24) #11
  invoke void @_ZN6R3SpanC1ERK7R3PointS2_(ptr noundef nonnull align 8 dereferenceable(80) %24, ptr noundef nonnull align 8 dereferenceable(24) %22, ptr noundef nonnull align 8 dereferenceable(24) %23)
          to label %240 unwind label %257

240:                                              ; preds = %239
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %25) #11
  %241 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZNK6R3Span6VectorEv(ptr noundef nonnull align 8 dereferenceable(80) %24)
          to label %242 unwind label %259

242:                                              ; preds = %240
  invoke void @_ZN8R3VectorC1ERKS_(ptr noundef nonnull align 8 dereferenceable(24) %25, ptr noundef nonnull align 8 dereferenceable(24) %241)
          to label %243 unwind label %259

243:                                              ; preds = %242
  %244 = invoke noundef double @_ZNK8R3Vector6LengthEv(ptr noundef nonnull align 8 dereferenceable(24) %25)
          to label %245 unwind label %259

245:                                              ; preds = %243
  %246 = load double, ptr @RN_EPSILON, align 8, !tbaa !5
  %247 = invoke noundef i32 @_Z8RNIsZerodd(double noundef %244, double noundef %246)
          to label %248 unwind label %259

248:                                              ; preds = %245
  %.not251 = icmp eq i32 %247, 0
  br i1 %.not251, label %261, label %322

249:                                              ; preds = %229
  %250 = landingpad { ptr, i32 }
          cleanup
  br label %484

251:                                              ; preds = %231
  %252 = landingpad { ptr, i32 }
          cleanup
  br label %484

253:                                              ; preds = %233
  %254 = landingpad { ptr, i32 }
          cleanup
  br label %333

255:                                              ; preds = %238, %237, %235
  %256 = landingpad { ptr, i32 }
          cleanup
  br label %332

257:                                              ; preds = %239
  %258 = landingpad { ptr, i32 }
          cleanup
  br label %331

259:                                              ; preds = %245, %243, %242, %240
  %260 = landingpad { ptr, i32 }
          cleanup
  br label %330

261:                                              ; preds = %248
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %26) #11
  invoke void @_ZrmRK8R3VectorS1_(ptr dead_on_unwind nonnull writable sret(%class.R3Vector) align 8 %26, ptr noundef nonnull align 8 dereferenceable(24) @R3posz_vector, ptr noundef nonnull align 8 dereferenceable(24) %25)
          to label %262 unwind label %270

262:                                              ; preds = %261
  invoke void @_ZN8R3Vector9NormalizeEv(ptr noundef nonnull align 8 dereferenceable(24) %26)
          to label %263 unwind label %270

263:                                              ; preds = %262
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %27) #11
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %28) #11
  invoke void @_ZNK6R3Span8MidpointEv(ptr dead_on_unwind nonnull writable sret(%class.R3Point) align 8 %28, ptr noundef nonnull align 8 dereferenceable(80) %24)
          to label %264 unwind label %272

264:                                              ; preds = %263
  invoke void @_ZN7R3PlaneC1ERK7R3PointRK8R3Vector(ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef nonnull align 8 dereferenceable(24) %28, ptr noundef nonnull align 8 dereferenceable(24) %26)
          to label %265 unwind label %272

265:                                              ; preds = %264
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %28) #11
  %266 = invoke noundef double @_Z16R3SignedDistanceRK7R3PlaneRK7R3Point(ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef nonnull align 8 dereferenceable(24) @R3null_point)
          to label %267 unwind label %274

267:                                              ; preds = %265
  %268 = load double, ptr @RN_EPSILON, align 8, !tbaa !5
  %269 = call noundef i32 @_Z12RNIsPositivedd(double noundef %266, double noundef %268)
  %.not252 = icmp eq i32 %269, 0
  br i1 %.not252, label %276, label %321

270:                                              ; preds = %262, %261
  %271 = landingpad { ptr, i32 }
          cleanup
  br label %329

272:                                              ; preds = %264, %263
  %273 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %28) #11
  br label %328

274:                                              ; preds = %279, %276, %265
  %275 = landingpad { ptr, i32 }
          cleanup
  br label %328

276:                                              ; preds = %267
  %277 = invoke noundef i32 @_ZN6R3Span4ClipERK7R3Plane(ptr noundef nonnull align 8 dereferenceable(80) %24, ptr noundef nonnull align 8 dereferenceable(32) %10)
          to label %278 unwind label %274

278:                                              ; preds = %276
  %.not253 = icmp eq i32 %277, 0
  br i1 %.not253, label %321, label %279

279:                                              ; preds = %278
  %280 = invoke noundef i32 @_ZN6R3Span4ClipERK7R3Plane(ptr noundef nonnull align 8 dereferenceable(80) %24, ptr noundef nonnull align 8 dereferenceable(32) %14)
          to label %281 unwind label %274

281:                                              ; preds = %279
  %.not254 = icmp eq i32 %280, 0
  br i1 %.not254, label %321, label %282

282:                                              ; preds = %281
  %283 = load double, ptr %131, align 8, !tbaa !29
  %284 = invoke noundef double @_Z10R3DistanceRK7R3PointRK6R3Span(ptr noundef nonnull align 8 dereferenceable(24) @R3null_point, ptr noundef nonnull align 8 dereferenceable(80) %24)
          to label %285 unwind label %288

285:                                              ; preds = %282
  %286 = fadd double %283, %284
  %287 = fcmp ogt double %286, %2
  %or.cond = select i1 %76, i1 %287, i1 false
  br i1 %or.cond, label %321, label %290

288:                                              ; preds = %282
  %289 = landingpad { ptr, i32 }
          cleanup
  br label %328

290:                                              ; preds = %285
  %291 = call noundef i32 @_ZNK6R3Mesh6EdgeIDEPK10R3MeshEdge(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef %213)
  %292 = sext i32 %291 to i64
  %293 = getelementptr inbounds double, ptr %41, i64 %292
  %294 = load double, ptr %293, align 8, !tbaa !5
  %295 = fcmp ult double %286, %294
  br i1 %295, label %296, label %321

296:                                              ; preds = %290
  %297 = call noundef i32 @_ZNK6R3Mesh6FaceIDEPK10R3MeshFace(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef nonnull %214)
  %298 = sext i32 %297 to i64
  %299 = getelementptr inbounds double, ptr %47, i64 %298
  %300 = load double, ptr %299, align 8, !tbaa !5
  %301 = fcmp ult double %286, %300
  br i1 %301, label %302, label %321

302:                                              ; preds = %296
  %303 = invoke noalias noundef nonnull dereferenceable(400) ptr @_Znwm(i64 noundef 400) #10
          to label %304 unwind label %324

304:                                              ; preds = %302
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(400) %303, i8 0, i64 400, i1 false)
  invoke void @_ZN18R3MeshGeodesicBeamC2Ev(ptr noundef nonnull align 8 dereferenceable(400) %303)
          to label %305 unwind label %326

305:                                              ; preds = %304
  %306 = load ptr, ptr %114, align 8, !tbaa !30
  store ptr %306, ptr %303, align 8, !tbaa !30
  %307 = getelementptr inbounds i8, ptr %303, i64 8
  store ptr %124, ptr %307, align 8, !tbaa !27
  %308 = getelementptr inbounds i8, ptr %303, i64 16
  store ptr %213, ptr %308, align 8, !tbaa !14
  %309 = getelementptr inbounds i8, ptr %303, i64 24
  %310 = invoke noundef nonnull align 8 dereferenceable(272) ptr @_ZN8R3AffineaSERKS_(ptr noundef nonnull align 8 dereferenceable(272) %309, ptr noundef nonnull align 8 dereferenceable(272) %16)
          to label %311 unwind label %324

311:                                              ; preds = %305
  %312 = getelementptr inbounds i8, ptr %303, i64 296
  %313 = invoke noundef nonnull align 8 dereferenceable(80) ptr @_ZN6R3SpanaSERKS_(ptr noundef nonnull align 8 dereferenceable(80) %312, ptr noundef nonnull align 8 dereferenceable(80) %24)
          to label %314 unwind label %324

314:                                              ; preds = %311
  %315 = getelementptr inbounds i8, ptr %303, i64 376
  store double %286, ptr %315, align 8, !tbaa !28
  %316 = load double, ptr %131, align 8, !tbaa !29
  %317 = getelementptr inbounds i8, ptr %303, i64 384
  store double %316, ptr %317, align 8, !tbaa !29
  %318 = getelementptr inbounds i8, ptr %303, i64 392
  store ptr %114, ptr %318, align 8, !tbaa !32
  invoke void @_ZN6RNHeapIP18R3MeshGeodesicBeamE4PushES1_(ptr noundef nonnull align 8 dereferenceable(52) %5, ptr noundef nonnull %303)
          to label %319 unwind label %324

319:                                              ; preds = %314
  %320 = invoke noundef ptr @_ZN7RNArrayIP18R3MeshGeodesicBeamE6InsertES1_(ptr noundef nonnull align 8 dereferenceable(16) %6, ptr noundef nonnull %303)
          to label %321 unwind label %324

321:                                              ; preds = %285, %290, %296, %319, %281, %278, %267
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %27) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %26) #11
  br label %322

322:                                              ; preds = %248, %321
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %25) #11
  call void @llvm.lifetime.end.p0(i64 80, ptr nonnull %24) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %23) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %22) #11
  br label %323

323:                                              ; preds = %222, %215, %.preheader287, %322
  br i1 %211, label %.preheader287, label %.preheader286, !llvm.loop !33

324:                                              ; preds = %319, %314, %311, %305, %302
  %325 = landingpad { ptr, i32 }
          cleanup
  br label %328

326:                                              ; preds = %304
  %327 = landingpad { ptr, i32 }
          cleanup
  call void @_ZdlPvm(ptr noundef nonnull %303, i64 noundef 400) #12
  br label %328

328:                                              ; preds = %288, %326, %324, %274, %272
  %.pn255.pn.pn = phi { ptr, i32 } [ %275, %274 ], [ %273, %272 ], [ %289, %288 ], [ %325, %324 ], [ %327, %326 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %27) #11
  br label %329

329:                                              ; preds = %328, %270
  %.pn255.pn.pn.pn = phi { ptr, i32 } [ %.pn255.pn.pn, %328 ], [ %271, %270 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %26) #11
  br label %330

330:                                              ; preds = %329, %259
  %.pn255.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn255.pn.pn.pn, %329 ], [ %260, %259 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %25) #11
  br label %331

331:                                              ; preds = %330, %257
  %.pn255.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn255.pn.pn.pn.pn, %330 ], [ %258, %257 ]
  call void @llvm.lifetime.end.p0(i64 80, ptr nonnull %24) #11
  br label %332

332:                                              ; preds = %331, %255
  %.pn255.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn255.pn.pn.pn.pn.pn, %331 ], [ %256, %255 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %23) #11
  br label %333

333:                                              ; preds = %332, %253
  %.pn255.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn255.pn.pn.pn.pn.pn.pn, %332 ], [ %254, %253 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %22) #11
  br label %484

334:                                              ; preds = %479
  call void @_ZN8R3AffineD1Ev(ptr noundef nonnull align 8 dereferenceable(272) %16) #11
  call void @llvm.lifetime.end.p0(i64 272, ptr nonnull %16) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %15) #11
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %14) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %13) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %12) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %11) #11
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %10) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %9) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %8) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %7) #11
  br label %482

.preheader286:                                    ; preds = %323, %479
  %.0228299 = phi i32 [ %480, %479 ], [ 0, %323 ]
  %335 = call noundef ptr @_ZNK6R3Mesh12VertexOnFaceEPK10R3MeshFacei(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef %124, i32 noundef %.0228299)
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %29) #11
  %336 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK6R3Mesh14VertexPositionEPK12R3MeshVertex(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef %335)
  invoke void @_ZN7R3PointC1ERKS_(ptr noundef nonnull align 8 dereferenceable(24) %29, ptr noundef nonnull align 8 dereferenceable(24) %336)
          to label %337 unwind label %350

337:                                              ; preds = %.preheader286
  invoke void @_ZN7R3Point9TransformERK16R3Transformation(ptr noundef nonnull align 8 dereferenceable(24) %29, ptr noundef nonnull align 8 dereferenceable(8) %16)
          to label %338 unwind label %350

338:                                              ; preds = %337
  %339 = invoke noundef double @_Z16R3SignedDistanceRK7R3PlaneRK7R3Point(ptr noundef nonnull align 8 dereferenceable(32) %10, ptr noundef nonnull align 8 dereferenceable(24) %29)
          to label %340 unwind label %352

340:                                              ; preds = %338
  %341 = fcmp olt double %339, 0.000000e+00
  br i1 %341, label %342, label %358

342:                                              ; preds = %340
  %343 = invoke noundef double @_Z10R3DistanceRK7R3PointS1_(ptr noundef nonnull align 8 dereferenceable(24) @R3null_point, ptr noundef nonnull align 8 dereferenceable(24) %7)
          to label %344 unwind label %354

344:                                              ; preds = %342
  %345 = invoke noundef double @_Z10R3DistanceRK7R3PointS1_(ptr noundef nonnull align 8 dereferenceable(24) %7, ptr noundef nonnull align 8 dereferenceable(24) %29)
          to label %346 unwind label %356

346:                                              ; preds = %344
  %347 = load double, ptr %131, align 8, !tbaa !29
  %348 = fadd double %343, %347
  %349 = fadd double %345, %348
  br label %379

350:                                              ; preds = %337, %.preheader286
  %351 = landingpad { ptr, i32 }
          cleanup
  br label %481

352:                                              ; preds = %374, %358, %338
  %353 = landingpad { ptr, i32 }
          cleanup
  br label %481

354:                                              ; preds = %342
  %355 = landingpad { ptr, i32 }
          cleanup
  br label %481

356:                                              ; preds = %344
  %357 = landingpad { ptr, i32 }
          cleanup
  br label %481

358:                                              ; preds = %340
  %359 = invoke noundef double @_Z16R3SignedDistanceRK7R3PlaneRK7R3Point(ptr noundef nonnull align 8 dereferenceable(32) %14, ptr noundef nonnull align 8 dereferenceable(24) %29)
          to label %360 unwind label %352

360:                                              ; preds = %358
  %361 = fcmp olt double %359, 0.000000e+00
  br i1 %361, label %362, label %374

362:                                              ; preds = %360
  %363 = invoke noundef double @_Z10R3DistanceRK7R3PointS1_(ptr noundef nonnull align 8 dereferenceable(24) @R3null_point, ptr noundef nonnull align 8 dereferenceable(24) %11)
          to label %364 unwind label %370

364:                                              ; preds = %362
  %365 = invoke noundef double @_Z10R3DistanceRK7R3PointS1_(ptr noundef nonnull align 8 dereferenceable(24) %11, ptr noundef nonnull align 8 dereferenceable(24) %29)
          to label %366 unwind label %372

366:                                              ; preds = %364
  %367 = load double, ptr %131, align 8, !tbaa !29
  %368 = fadd double %363, %367
  %369 = fadd double %365, %368
  br label %379

370:                                              ; preds = %362
  %371 = landingpad { ptr, i32 }
          cleanup
  br label %481

372:                                              ; preds = %364
  %373 = landingpad { ptr, i32 }
          cleanup
  br label %481

374:                                              ; preds = %360
  %375 = load double, ptr %131, align 8, !tbaa !29
  %376 = invoke noundef double @_Z10R3DistanceRK7R3PointS1_(ptr noundef nonnull align 8 dereferenceable(24) @R3null_point, ptr noundef nonnull align 8 dereferenceable(24) %29)
          to label %377 unwind label %352

377:                                              ; preds = %374
  %378 = fadd double %375, %376
  br label %379

379:                                              ; preds = %366, %377, %346
  %.0230 = phi double [ %349, %346 ], [ %369, %366 ], [ %378, %377 ]
  %.not243 = phi i1 [ true, %346 ], [ true, %366 ], [ false, %377 ]
  %380 = call noundef i32 @_ZNK6R3Mesh8VertexIDEPK12R3MeshVertex(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef %335)
  %381 = sext i32 %380 to i64
  %382 = getelementptr inbounds double, ptr %35, i64 %381
  %383 = load double, ptr %382, align 8, !tbaa !5
  %384 = fcmp olt double %.0230, %383
  br i1 %384, label %385, label %479

385:                                              ; preds = %379
  %386 = call noundef i32 @_ZNK6R3Mesh8VertexIDEPK12R3MeshVertex(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef %335)
  %387 = sext i32 %386 to i64
  %388 = getelementptr inbounds double, ptr %35, i64 %387
  %389 = load double, ptr %388, align 8, !tbaa !5
  %390 = call noundef i32 @_ZNK6R3Mesh8VertexIDEPK12R3MeshVertex(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef %335)
  %391 = sext i32 %390 to i64
  %392 = getelementptr inbounds double, ptr %35, i64 %391
  store double %.0230, ptr %392, align 8, !tbaa !5
  %393 = load ptr, ptr %120, align 8, !tbaa !14
  %394 = call noundef ptr @_ZNK6R3Mesh10EdgeOnFaceEPK10R3MeshFacePK10R3MeshEdgei(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef %124, ptr noundef %393, i32 noundef 0)
  %395 = call noundef i32 @_ZNK6R3Mesh6EdgeIDEPK10R3MeshEdge(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef %394)
  %396 = sext i32 %395 to i64
  %397 = getelementptr inbounds double, ptr %41, i64 %396
  %398 = load double, ptr %397, align 8, !tbaa !5
  %399 = fcmp olt double %.0230, %398
  br i1 %399, label %402, label %416

400:                                              ; preds = %478, %475, %467
  %401 = landingpad { ptr, i32 }
          cleanup
  br label %481

402:                                              ; preds = %385
  %403 = invoke noundef ptr @_ZNK6R3Mesh16VertexAcrossEdgeEPK10R3MeshEdgePK12R3MeshVertex(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef %394, ptr noundef %335)
          to label %404 unwind label %414

404:                                              ; preds = %402
  %405 = call noundef i32 @_ZNK6R3Mesh8VertexIDEPK12R3MeshVertex(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef %403)
  %406 = sext i32 %405 to i64
  %407 = getelementptr inbounds double, ptr %35, i64 %406
  %408 = load double, ptr %407, align 8, !tbaa !5
  %409 = fcmp ogt double %.0230, %408
  br i1 %409, label %410, label %416

410:                                              ; preds = %404
  %411 = call noundef i32 @_ZNK6R3Mesh6EdgeIDEPK10R3MeshEdge(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef %394)
  %412 = sext i32 %411 to i64
  %413 = getelementptr inbounds double, ptr %41, i64 %412
  store double %.0230, ptr %413, align 8, !tbaa !5
  br label %416

414:                                              ; preds = %424, %402
  %415 = landingpad { ptr, i32 }
          cleanup
  br label %481

416:                                              ; preds = %404, %410, %385
  %417 = load ptr, ptr %120, align 8, !tbaa !14
  %418 = call noundef ptr @_ZNK6R3Mesh10EdgeOnFaceEPK10R3MeshFacePK10R3MeshEdgei(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef %124, ptr noundef %417, i32 noundef 1)
  %419 = call noundef i32 @_ZNK6R3Mesh6EdgeIDEPK10R3MeshEdge(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef %418)
  %420 = sext i32 %419 to i64
  %421 = getelementptr inbounds double, ptr %41, i64 %420
  %422 = load double, ptr %421, align 8, !tbaa !5
  %423 = fcmp olt double %.0230, %422
  br i1 %423, label %424, label %436

424:                                              ; preds = %416
  %425 = invoke noundef ptr @_ZNK6R3Mesh16VertexAcrossEdgeEPK10R3MeshEdgePK12R3MeshVertex(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef %418, ptr noundef %335)
          to label %426 unwind label %414

426:                                              ; preds = %424
  %427 = call noundef i32 @_ZNK6R3Mesh8VertexIDEPK12R3MeshVertex(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef %425)
  %428 = sext i32 %427 to i64
  %429 = getelementptr inbounds double, ptr %35, i64 %428
  %430 = load double, ptr %429, align 8, !tbaa !5
  %431 = fcmp ogt double %.0230, %430
  br i1 %431, label %432, label %436

432:                                              ; preds = %426
  %433 = call noundef i32 @_ZNK6R3Mesh6EdgeIDEPK10R3MeshEdge(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef %418)
  %434 = sext i32 %433 to i64
  %435 = getelementptr inbounds double, ptr %41, i64 %434
  store double %.0230, ptr %435, align 8, !tbaa !5
  br label %436

436:                                              ; preds = %432, %426, %416
  %437 = call noundef i32 @_ZNK6R3Mesh6FaceIDEPK10R3MeshFace(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef %124)
  %438 = sext i32 %437 to i64
  %439 = getelementptr inbounds double, ptr %47, i64 %438
  %440 = load double, ptr %439, align 8, !tbaa !5
  %441 = fcmp olt double %.0230, %440
  br i1 %441, label %442, label %466

442:                                              ; preds = %436
  %443 = invoke noundef ptr @_ZNK6R3Mesh12VertexOnFaceEPK10R3MeshFacePK12R3MeshVertexi(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef %124, ptr noundef %335, i32 noundef 0)
          to label %444 unwind label %462

444:                                              ; preds = %442
  %445 = invoke noundef ptr @_ZNK6R3Mesh12VertexOnFaceEPK10R3MeshFacePK12R3MeshVertexi(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef %124, ptr noundef %335, i32 noundef 1)
          to label %446 unwind label %464

446:                                              ; preds = %444
  %447 = call noundef i32 @_ZNK6R3Mesh8VertexIDEPK12R3MeshVertex(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef %443)
  %448 = sext i32 %447 to i64
  %449 = getelementptr inbounds double, ptr %35, i64 %448
  %450 = load double, ptr %449, align 8, !tbaa !5
  %451 = fcmp ogt double %.0230, %450
  br i1 %451, label %452, label %466

452:                                              ; preds = %446
  %453 = call noundef i32 @_ZNK6R3Mesh8VertexIDEPK12R3MeshVertex(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef %445)
  %454 = sext i32 %453 to i64
  %455 = getelementptr inbounds double, ptr %35, i64 %454
  %456 = load double, ptr %455, align 8, !tbaa !5
  %457 = fcmp ogt double %.0230, %456
  br i1 %457, label %458, label %466

458:                                              ; preds = %452
  %459 = call noundef i32 @_ZNK6R3Mesh6FaceIDEPK10R3MeshFace(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef %124)
  %460 = sext i32 %459 to i64
  %461 = getelementptr inbounds double, ptr %47, i64 %460
  store double %.0230, ptr %461, align 8, !tbaa !5
  br label %466

462:                                              ; preds = %442
  %463 = landingpad { ptr, i32 }
          cleanup
  br label %481

464:                                              ; preds = %444
  %465 = landingpad { ptr, i32 }
          cleanup
  br label %481

466:                                              ; preds = %446, %452, %458, %436
  br i1 %.not243, label %479, label %467

467:                                              ; preds = %466
  %468 = load ptr, ptr %120, align 8, !tbaa !14
  %469 = invoke noundef ptr @_ZNK6R3Mesh16VertexAcrossFaceEPK10R3MeshFacePK10R3MeshEdge(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef %124, ptr noundef %468)
          to label %470 unwind label %400

470:                                              ; preds = %467
  %471 = icmp eq ptr %335, %469
  br i1 %471, label %472, label %479

472:                                              ; preds = %470
  %473 = load double, ptr @RN_EPSILON, align 8, !tbaa !5
  %474 = call noundef i32 @_Z8RNIsLessddd(double noundef %.0230, double noundef %389, double noundef %473)
  %.not244 = icmp eq i32 %474, 0
  br i1 %.not244, label %479, label %475

475:                                              ; preds = %472
  %476 = invoke noundef i32 @_ZL30R3MeshVertexIsSaddleOrBoundaryPK6R3MeshPK12R3MeshVertex(ptr noundef nonnull %0, ptr noundef %335)
          to label %477 unwind label %400

477:                                              ; preds = %475
  %.not245 = icmp eq i32 %476, 0
  br i1 %.not245, label %479, label %478

478:                                              ; preds = %477
  invoke void @_ZL34R3MeshCreateGeodesicBeamsForVertexPK6R3MeshPK12R3MeshVertexddP18R3MeshGeodesicBeamPdS7_S7_R6RNHeapIS6_ER7RNArrayIS6_E(ptr noundef nonnull %0, ptr noundef %335, double noundef %2, double noundef %.0230, ptr noundef nonnull %114, ptr noundef nonnull %35, ptr noundef nonnull %41, ptr noundef nonnull %47, ptr noundef nonnull align 8 dereferenceable(52) %5, ptr noundef nonnull align 8 dereferenceable(16) %6)
          to label %479 unwind label %400

479:                                              ; preds = %466, %470, %477, %478, %472, %379
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %29) #11
  %480 = add nuw nsw i32 %.0228299, 1
  %exitcond.not = icmp eq i32 %480, 3
  br i1 %exitcond.not, label %334, label %.preheader286, !llvm.loop !34

481:                                              ; preds = %352, %356, %354, %372, %370, %462, %464, %414, %400, %350
  %.pn246.pn.pn = phi { ptr, i32 } [ %351, %350 ], [ %353, %352 ], [ %357, %356 ], [ %355, %354 ], [ %373, %372 ], [ %371, %370 ], [ %415, %414 ], [ %401, %400 ], [ %465, %464 ], [ %463, %462 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %29) #11
  br label %484

482:                                              ; preds = %149, %141, %128, %334
  %483 = call noundef i32 @_ZNK6RNHeapIP18R3MeshGeodesicBeamE7IsEmptyEv(ptr noundef nonnull align 8 dereferenceable(52) %5)
  %.not = icmp eq i32 %483, 0
  br i1 %.not, label %113, label %.preheader

484:                                              ; preds = %249, %333, %251, %481, %209, %207, %205
  %.pn255.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn246.pn.pn, %481 ], [ %208, %207 ], [ %210, %209 ], [ %206, %205 ], [ %250, %249 ], [ %.pn255.pn.pn.pn.pn.pn.pn.pn, %333 ], [ %252, %251 ]
  call void @_ZN8R3AffineD1Ev(ptr noundef nonnull align 8 dereferenceable(272) %16) #11
  br label %485

485:                                              ; preds = %484, %203
  %.pn255.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn255.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn, %484 ], [ %204, %203 ]
  call void @llvm.lifetime.end.p0(i64 272, ptr nonnull %16) #11
  br label %486

486:                                              ; preds = %485, %201
  %.pn255.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn255.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn, %485 ], [ %202, %201 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %15) #11
  br label %487

487:                                              ; preds = %486, %199
  %.pn255.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn255.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn, %486 ], [ %200, %199 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %14) #11
  br label %488

488:                                              ; preds = %487, %197
  %.pn255.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn255.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn, %487 ], [ %198, %197 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %13) #11
  br label %489

489:                                              ; preds = %488, %195
  %.pn255.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn255.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn, %488 ], [ %196, %195 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %12) #11
  br label %490

490:                                              ; preds = %489, %193
  %.pn255.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn255.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn, %489 ], [ %194, %193 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %11) #11
  br label %491

491:                                              ; preds = %490, %191
  %.pn255.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn255.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn, %490 ], [ %192, %191 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %10) #11
  br label %492

492:                                              ; preds = %491, %189
  %.pn255.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn255.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn, %491 ], [ %190, %189 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %9) #11
  br label %493

493:                                              ; preds = %492, %187
  %.pn255.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn255.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn, %492 ], [ %188, %187 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %8) #11
  br label %494

494:                                              ; preds = %493, %185
  %.pn255.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn255.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn, %493 ], [ %186, %185 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %7) #11
  br label %506

495:                                              ; preds = %.lr.ph303
  %496 = landingpad { ptr, i32 }
          cleanup
  br label %506

.lr.ph303:                                        ; preds = %.preheader, %502
  %.0302 = phi i32 [ %503, %502 ], [ 0, %.preheader ]
  %497 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7RNArrayIP18R3MeshGeodesicBeamEixEi(ptr noundef nonnull align 8 dereferenceable(16) %6, i32 noundef %.0302)
          to label %498 unwind label %495

498:                                              ; preds = %.lr.ph303
  %499 = load ptr, ptr %497, align 8, !tbaa !35
  %500 = icmp eq ptr %499, null
  br i1 %500, label %502, label %501

501:                                              ; preds = %498
  call void @_ZN18R3MeshGeodesicBeamD2Ev(ptr noundef nonnull align 8 dereferenceable(400) %499) #11
  call void @_ZdlPvm(ptr noundef nonnull %499, i64 noundef 400) #12
  br label %502

502:                                              ; preds = %498, %501
  %503 = add nuw nsw i32 %.0302, 1
  %504 = call noundef i32 @_ZNK8RNVArray8NEntriesEv(ptr noundef nonnull align 8 dereferenceable(16) %6)
  %505 = icmp slt i32 %503, %504
  br i1 %505, label %.lr.ph303, label %._crit_edge304, !llvm.loop !36

._crit_edge304:                                   ; preds = %502, %.preheader
  call void @_ZdaPv(ptr noundef nonnull %41) #12
  call void @_ZdaPv(ptr noundef nonnull %47) #12
  call void @_ZN8RNVArrayD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %6) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %6) #11
  call void @_ZN6RNHeapIP18R3MeshGeodesicBeamED2Ev(ptr noundef nonnull align 8 dereferenceable(52) %5) #11
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %5) #11
  call void @_ZN18R3MeshGeodesicBeamD2Ev(ptr noundef nonnull align 8 dereferenceable(400) %4) #11
  call void @llvm.lifetime.end.p0(i64 400, ptr nonnull %4) #11
  ret ptr %35

506:                                              ; preds = %117, %494, %126, %83, %107, %105, %495, %81
  %.pn280.pn.pn = phi { ptr, i32 } [ %496, %495 ], [ %82, %81 ], [ %84, %83 ], [ %108, %107 ], [ %106, %105 ], [ %118, %117 ], [ %.pn255.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn, %494 ], [ %127, %126 ]
  call void @_ZN8RNVArrayD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %6) #11
  br label %507

507:                                              ; preds = %506, %79
  %.pn280.pn.pn.pn = phi { ptr, i32 } [ %.pn280.pn.pn, %506 ], [ %80, %79 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %6) #11
  call void @_ZN6RNHeapIP18R3MeshGeodesicBeamED2Ev(ptr noundef nonnull align 8 dereferenceable(52) %5) #11
  br label %508

508:                                              ; preds = %507, %77
  %.pn280.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn280.pn.pn.pn, %507 ], [ %78, %77 ]
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %5) #11
  call void @_ZN18R3MeshGeodesicBeamD2Ev(ptr noundef nonnull align 8 dereferenceable(400) %4) #11
  call void @llvm.lifetime.end.p0(i64 400, ptr nonnull %4) #11
  resume { ptr, i32 } %.pn280.pn.pn.pn.pn
}

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN18R3MeshGeodesicBeamC2Ev(ptr noundef nonnull align 8 dereferenceable(400)) unnamed_addr #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN6RNHeapIP18R3MeshGeodesicBeamEC2ES1_PdPPS1_i(ptr noundef nonnull align 8 dereferenceable(52), ptr noundef, ptr noundef, ptr noundef, i32 noundef) unnamed_addr #8 align 2

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

; Function Attrs: mustprogress uwtable
declare hidden void @_ZL34R3MeshCreateGeodesicBeamsForVertexPK6R3MeshPK12R3MeshVertexddP18R3MeshGeodesicBeamPdS7_S7_R6RNHeapIS6_ER7RNArrayIS6_E(ptr noundef, ptr noundef, double noundef, double noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef nonnull align 8 dereferenceable(52), ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #8

; Function Attrs: mustprogress uwtable
declare hidden noundef i32 @_ZL30R3MeshVertexIsSaddleOrBoundaryPK6R3MeshPK12R3MeshVertex(ptr noundef, ptr noundef) local_unnamed_addr #8

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK6RNHeapIP18R3MeshGeodesicBeamE7IsEmptyEv(ptr noundef nonnull align 8 dereferenceable(52)) local_unnamed_addr #9 align 2

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(24) ptr @_ZNK6R3Span5StartEv(ptr noundef nonnull align 8 dereferenceable(80)) local_unnamed_addr #1 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(24) ptr @_ZNK6R3Span3EndEv(ptr noundef nonnull align 8 dereferenceable(80)) local_unnamed_addr #4 align 2

declare void @_ZN8R3Vector9TransformERK16R3Transformation(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #0

declare void @_ZNK6R3Span8MidpointEv(ptr dead_on_unwind writable sret(%class.R3Point) align 8, ptr noundef nonnull align 8 dereferenceable(80)) local_unnamed_addr #0

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

declare void @_ZN6R3SpanC1ERK7R3PointS2_(ptr noundef nonnull align 8 dereferenceable(80), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #0

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(24) ptr @_ZNK6R3Span6VectorEv(ptr noundef nonnull align 8 dereferenceable(80)) local_unnamed_addr #1 align 2

declare noundef i32 @_ZN6R3Span4ClipERK7R3Plane(ptr noundef nonnull align 8 dereferenceable(80), ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #0

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN6RNHeapIP18R3MeshGeodesicBeamED2Ev(ptr noundef nonnull align 8 dereferenceable(52)) unnamed_addr #9 align 2

; Function Attrs: nounwind
declare void @_ZN8RNVArrayD2Ev(ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #7

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 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { nobuiltin allocsize(0) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #4 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { nobuiltin nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #7 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #8 = { mustprogress 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 #9 = { 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 #10 = { builtin allocsize(0) }
attributes #11 = { nounwind }
attributes #12 = { builtin 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 = !{!"double", !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 = !{!15, !16, i64 16}
!15 = !{!"_ZTS18R3MeshGeodesicBeam", !16, i64 0, !16, i64 8, !16, i64 16, !17, i64 24, !22, i64 296, !6, i64 376, !6, i64 384, !16, i64 392}
!16 = !{!"any pointer", !7, i64 0}
!17 = !{!"_ZTS8R3Affine", !18, i64 0, !19, i64 8, !19, i64 136, !20, i64 264}
!18 = !{!"_ZTS16R3Transformation"}
!19 = !{!"_ZTS8R4Matrix", !7, i64 0}
!20 = !{!"_ZTS7RNFlags", !21, i64 0}
!21 = !{!"long", !7, i64 0}
!22 = !{!"_ZTS6R3Span", !23, i64 0, !25, i64 48, !6, i64 72}
!23 = !{!"_ZTS5R3Ray", !24, i64 0}
!24 = !{!"_ZTS6R3Line", !25, i64 0, !26, i64 24}
!25 = !{!"_ZTS7R3Point", !7, i64 0}
!26 = !{!"_ZTS8R3Vector", !7, i64 0}
!27 = !{!15, !16, i64 8}
!28 = !{!15, !6, i64 376}
!29 = !{!15, !6, i64 384}
!30 = !{!15, !16, i64 0}
!31 = distinct !{!31, !10}
!32 = !{!15, !16, i64 392}
!33 = distinct !{!33, !10}
!34 = distinct !{!34, !10}
!35 = !{!16, !16, i64 0}
!36 = distinct !{!36, !10}


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