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

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

%struct.PlyProperty = type { ptr, i32, i32, i32, i32, i32, i32, i32 }
%struct.PlyVertex = type { float, float, float, float, float, float, float, float, i8, i8, i8 }
%class.R3Point = type { [3 x double] }
%class.R3Vector = type { [3 x double] }
%class.R2Point = type { [2 x double] }
%class.RNRgb = type { [3 x double] }
%class.RNArray = type { %class.RNVArray }
%class.RNVArray = type { ptr, i32, i32 }
%struct.PlyFace = type { i8, ptr, i32, i32, i32 }
%struct.PlyRangeGrid = type { i8, ptr }
%class.R3MeshVertex = type { ptr, %class.RNArray.0, %class.R3Point, %class.R3Vector, %class.R2Point, %class.RNRgb, double, i32, %class.RNFlags, double, i32, ptr }
%class.RNArray.0 = type { %class.RNVArray }
%class.RNFlags = type { i64 }
%class.R3Mesh = type { ptr, %class.RNArray, %class.RNArray.0, %class.RNArray.1, ptr, ptr, ptr, [128 x i8], %class.R3Box, ptr }
%class.RNArray.1 = type { %class.RNVArray }
%class.R3Box = type { %class.R3Solid, %class.R3Point, %class.R3Point }
%class.R3Solid = type { %class.R3Shape }
%class.R3Shape = type { ptr }

@.str = external hidden unnamed_addr constant [41 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [88 x i8], align 1
@.str.42 = external hidden unnamed_addr constant [5 x i8], align 1
@_ZZN6R3Mesh11ReadPlyFileEPKcE10vert_props = external hidden global [11 x %struct.PlyProperty], align 16
@.str.86 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.87 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.88 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.89 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.90 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.91 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.92 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.93 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.94 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.95 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.96 = external hidden unnamed_addr constant [5 x i8], align 1
@_ZZN6R3Mesh11ReadPlyFileEPKcE10face_props = external hidden global [5 x %struct.PlyProperty], align 16
@.str.97 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.98 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.99 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.100 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.101 = external hidden unnamed_addr constant [12 x i8], align 1
@_ZZN6R3Mesh11ReadPlyFileEPKcE16range_grid_props = external hidden global [1 x %struct.PlyProperty], align 16
@.str.102 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.103 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.104 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.105 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.106 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.107 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.108 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.109 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.110 = external hidden unnamed_addr constant [41 x i8], align 1
@.str.111 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.112 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.113 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.114 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.115 = external hidden unnamed_addr constant [9 x i8], align 1

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

declare i32 @__gxx_personality_v0(...)

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

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

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

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

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

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

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

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

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

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

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

declare void @_ZN7R3PointC1Eddd(ptr noundef nonnull align 8 dereferenceable(24), double noundef, double noundef, double noundef) unnamed_addr #1

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

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

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

declare void @_ZN8R3VectorC1Eddd(ptr noundef nonnull align 8 dereferenceable(24), double noundef, double noundef, double noundef) unnamed_addr #1

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

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

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

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

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

declare void @_Z6RNFailPKcz(ptr noundef, ...) #1

declare noalias ptr @fopen(ptr noundef, ptr noundef) #1

; Function Attrs: nounwind willreturn memory(read)
declare i32 @strcmp(ptr noundef, ptr noundef) #8

declare void @_ZN7R2PointC1Edd(ptr noundef nonnull align 8 dereferenceable(16), double noundef, double noundef) unnamed_addr #1

; Function Attrs: inlinehint mustprogress nounwind willreturn memory(read) uwtable
declare i32 @atoi(ptr noundef nonnull) #9

declare i32 @fclose(ptr noundef) #1

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

; Function Attrs: nounwind
declare ptr @strtok(ptr noundef, ptr noundef) #10

; Function Attrs: mustprogress uwtable
define dso_local noundef i32 @_ZN6R3Mesh11ReadPlyFileEPKc(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef %1) unnamed_addr #0 align 2 personality ptr @__gxx_personality_v0 {
  %3 = alloca i32, align 4
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca ptr, align 8
  %10 = alloca i32, align 4
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca ptr, align 8
  %17 = alloca float, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca ptr, align 8
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca i32, align 4
  %25 = alloca i32, align 4
  %26 = alloca %struct.PlyVertex, align 4
  %27 = alloca %class.R3Point, align 8
  %28 = alloca ptr, align 8
  %29 = alloca %class.R3Vector, align 8
  %30 = alloca %class.R2Point, align 8
  %31 = alloca %class.RNRgb, align 8
  %32 = alloca %class.RNArray, align 8
  %33 = alloca ptr, align 8
  %34 = alloca ptr, align 8
  %35 = alloca ptr, align 8
  %36 = alloca i32, align 4
  %37 = alloca %struct.PlyFace, align 8
  %38 = alloca ptr, align 8
  %39 = alloca i32, align 4
  %40 = alloca ptr, align 8
  %41 = alloca ptr, align 8
  %42 = alloca ptr, align 8
  %43 = alloca i32, align 4
  %44 = alloca ptr, align 8
  %45 = alloca ptr, align 8
  %46 = alloca ptr, align 8
  %47 = alloca ptr, align 8
  %48 = alloca ptr, align 8
  %49 = alloca ptr, align 8
  %50 = alloca ptr, align 8
  %51 = alloca i32, align 4
  %52 = alloca ptr, align 8
  %53 = alloca i32, align 4
  %54 = alloca ptr, align 8
  %55 = alloca ptr, align 8
  %56 = alloca ptr, align 8
  %57 = alloca %struct.PlyRangeGrid, align 8
  %58 = alloca i32, align 4
  %59 = alloca i32, align 4
  %60 = alloca ptr, align 8
  %61 = alloca ptr, align 8
  %62 = alloca ptr, align 8
  %63 = alloca ptr, align 8
  store ptr %0, ptr %4, align 8, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !5
  %64 = load ptr, ptr %4, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %6) #11
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #11
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #11
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #11
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #11
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #11
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #11
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #11
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #11
  store i32 0, ptr %18, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #11
  store i32 0, ptr %19, align 4, !tbaa !9
  %65 = load ptr, ptr %5, align 8, !tbaa !5
  %66 = call noalias ptr @fopen(ptr noundef %65, ptr noundef @.str.102)
  store ptr %66, ptr %6, align 8, !tbaa !5
  %67 = load ptr, ptr %6, align 8, !tbaa !5
  %68 = icmp ne ptr %67, null
  br i1 %68, label %71, label %69

69:                                               ; preds = %2
  %70 = load ptr, ptr %5, align 8, !tbaa !5
  call void (ptr, ...) @_Z6RNFailPKcz(ptr noundef @.str.103, ptr noundef %70)
  store i32 0, ptr %3, align 4
  store i32 1, ptr %20, align 4
  br label %1195

71:                                               ; preds = %2
  %72 = load ptr, ptr %6, align 8, !tbaa !5
  %73 = call ptr @ply_read(ptr noundef %72, ptr noundef %10, ptr noundef %12)
  store ptr %73, ptr %9, align 8, !tbaa !5
  %74 = load ptr, ptr %9, align 8, !tbaa !5
  %75 = icmp ne ptr %74, null
  br i1 %75, label %80, label %76

76:                                               ; preds = %71
  %77 = load ptr, ptr %5, align 8, !tbaa !5
  call void (ptr, ...) @_Z6RNFailPKcz(ptr noundef @.str.104, ptr noundef %77)
  %78 = load ptr, ptr %6, align 8, !tbaa !5
  %79 = call i32 @fclose(ptr noundef %78)
  store i32 0, ptr %3, align 4
  store i32 1, ptr %20, align 4
  br label %1195

80:                                               ; preds = %71
  %81 = load ptr, ptr %9, align 8, !tbaa !5
  call void @ply_get_info(ptr noundef %81, ptr noundef %17, ptr noundef %13)
  store i32 0, ptr %7, align 4, !tbaa !9
  br label %82

82:                                               ; preds = %1190, %80
  %83 = load i32, ptr %7, align 4, !tbaa !9
  %84 = load i32, ptr %10, align 4, !tbaa !9
  %85 = icmp slt i32 %83, %84
  br i1 %85, label %86, label %1193

86:                                               ; preds = %82
  %87 = load ptr, ptr %12, align 8, !tbaa !5
  %88 = load i32, ptr %7, align 4, !tbaa !9
  %89 = sext i32 %88 to i64
  %90 = getelementptr inbounds ptr, ptr %87, i64 %89
  %91 = load ptr, ptr %90, align 8, !tbaa !5
  store ptr %91, ptr %16, align 8, !tbaa !5
  %92 = load ptr, ptr %9, align 8, !tbaa !5
  %93 = load ptr, ptr %16, align 8, !tbaa !5
  %94 = call ptr @ply_get_element_description(ptr noundef %92, ptr noundef %93, ptr noundef %15, ptr noundef %14)
  store ptr %94, ptr %11, align 8, !tbaa !5
  %95 = load ptr, ptr %16, align 8, !tbaa !5
  %96 = call i32 @equal_strings(ptr noundef @.str.105, ptr noundef %95)
  %97 = icmp ne i32 %96, 0
  br i1 %97, label %98, label %403

98:                                               ; preds = %86
  %99 = load i32, ptr %15, align 4, !tbaa !9
  %100 = sext i32 %99 to i64
  %101 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %100, i64 160)
  %102 = extractvalue { i64, i1 } %101, 1
  %103 = extractvalue { i64, i1 } %101, 0
  %104 = call { i64, i1 } @llvm.uadd.with.overflow.i64(i64 %103, i64 8)
  %105 = extractvalue { i64, i1 } %104, 1
  %106 = or i1 %102, %105
  %107 = extractvalue { i64, i1 } %104, 0
  %108 = select i1 %106, i64 -1, i64 %107
  %109 = call noalias noundef nonnull ptr @_Znam(i64 noundef %108) #12
  store i64 %100, ptr %109, align 16
  %110 = getelementptr inbounds i8, ptr %109, i64 8
  %111 = icmp eq i64 %100, 0
  br i1 %111, label %119, label %112

112:                                              ; preds = %98
  %113 = getelementptr inbounds %class.R3MeshVertex, ptr %110, i64 %100
  br label %114

114:                                              ; preds = %116, %112
  %115 = phi ptr [ %110, %112 ], [ %117, %116 ]
  invoke void @_ZN12R3MeshVertexC1Ev(ptr noundef nonnull align 8 dereferenceable(160) %115)
          to label %116 unwind label %140

116:                                              ; preds = %114
  %117 = getelementptr inbounds %class.R3MeshVertex, ptr %115, i64 1
  %118 = icmp eq ptr %117, %113
  br i1 %118, label %119, label %114

119:                                              ; preds = %116, %98
  %120 = getelementptr inbounds %class.R3Mesh, ptr %64, i32 0, i32 4
  store ptr %110, ptr %120, align 8, !tbaa !11
  %121 = getelementptr inbounds %class.R3Mesh, ptr %64, i32 0, i32 1
  %122 = load i32, ptr %15, align 4, !tbaa !9
  call void @_ZN8RNVArray6ResizeEi(ptr noundef nonnull align 8 dereferenceable(16) %121, i32 noundef %122)
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #11
  store i32 0, ptr %23, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #11
  store i32 0, ptr %24, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #11
  store i32 0, ptr %25, align 4, !tbaa !9
  store i32 0, ptr %8, align 4, !tbaa !9
  br label %123

123:                                              ; preds = %326, %119
  %124 = load i32, ptr %8, align 4, !tbaa !9
  %125 = load i32, ptr %14, align 4, !tbaa !9
  %126 = icmp slt i32 %124, %125
  br i1 %126, label %127, label %329

127:                                              ; preds = %123
  %128 = load ptr, ptr %11, align 8, !tbaa !5
  %129 = load i32, ptr %8, align 4, !tbaa !9
  %130 = sext i32 %129 to i64
  %131 = getelementptr inbounds ptr, ptr %128, i64 %130
  %132 = load ptr, ptr %131, align 8, !tbaa !5
  %133 = getelementptr inbounds %struct.PlyProperty, ptr %132, i32 0, i32 0
  %134 = load ptr, ptr %133, align 8, !tbaa !21
  %135 = call i32 @equal_strings(ptr noundef @.str.86, ptr noundef %134)
  %136 = icmp ne i32 %135, 0
  br i1 %136, label %137, label %150

137:                                              ; preds = %127
  %138 = load ptr, ptr %9, align 8, !tbaa !5
  %139 = load ptr, ptr %16, align 8, !tbaa !5
  call void @ply_get_property(ptr noundef %138, ptr noundef %139, ptr noundef @_ZZN6R3Mesh11ReadPlyFileEPKcE10vert_props)
  br label %290

140:                                              ; preds = %114
  %141 = landingpad { ptr, i32 }
          cleanup
  %142 = extractvalue { ptr, i32 } %141, 0
  store ptr %142, ptr %21, align 8
  %143 = extractvalue { ptr, i32 } %141, 1
  store i32 %143, ptr %22, align 4
  %144 = icmp eq ptr %110, %115
  br i1 %144, label %149, label %145

145:                                              ; preds = %145, %140
  %146 = phi ptr [ %115, %140 ], [ %147, %145 ]
  %147 = getelementptr inbounds %class.R3MeshVertex, ptr %146, i64 -1
  call void @_ZN12R3MeshVertexD1Ev(ptr noundef nonnull align 8 dereferenceable(160) %147) #11
  %148 = icmp eq ptr %147, %110
  br i1 %148, label %149, label %145

149:                                              ; preds = %145, %140
  call void @_ZdaPvm(ptr noundef %109, i64 noundef %108) #13
  br label %1197

150:                                              ; preds = %127
  %151 = load ptr, ptr %11, align 8, !tbaa !5
  %152 = load i32, ptr %8, align 4, !tbaa !9
  %153 = sext i32 %152 to i64
  %154 = getelementptr inbounds ptr, ptr %151, i64 %153
  %155 = load ptr, ptr %154, align 8, !tbaa !5
  %156 = getelementptr inbounds %struct.PlyProperty, ptr %155, i32 0, i32 0
  %157 = load ptr, ptr %156, align 8, !tbaa !21
  %158 = call i32 @equal_strings(ptr noundef @.str.87, ptr noundef %157)
  %159 = icmp ne i32 %158, 0
  br i1 %159, label %160, label %163

160:                                              ; preds = %150
  %161 = load ptr, ptr %9, align 8, !tbaa !5
  %162 = load ptr, ptr %16, align 8, !tbaa !5
  call void @ply_get_property(ptr noundef %161, ptr noundef %162, ptr noundef getelementptr inbounds ([11 x %struct.PlyProperty], ptr @_ZZN6R3Mesh11ReadPlyFileEPKcE10vert_props, i64 0, i64 1))
  br label %289

163:                                              ; preds = %150
  %164 = load ptr, ptr %11, align 8, !tbaa !5
  %165 = load i32, ptr %8, align 4, !tbaa !9
  %166 = sext i32 %165 to i64
  %167 = getelementptr inbounds ptr, ptr %164, i64 %166
  %168 = load ptr, ptr %167, align 8, !tbaa !5
  %169 = getelementptr inbounds %struct.PlyProperty, ptr %168, i32 0, i32 0
  %170 = load ptr, ptr %169, align 8, !tbaa !21
  %171 = call i32 @equal_strings(ptr noundef @.str.88, ptr noundef %170)
  %172 = icmp ne i32 %171, 0
  br i1 %172, label %173, label %176

173:                                              ; preds = %163
  %174 = load ptr, ptr %9, align 8, !tbaa !5
  %175 = load ptr, ptr %16, align 8, !tbaa !5
  call void @ply_get_property(ptr noundef %174, ptr noundef %175, ptr noundef getelementptr inbounds ([11 x %struct.PlyProperty], ptr @_ZZN6R3Mesh11ReadPlyFileEPKcE10vert_props, i64 0, i64 2))
  br label %288

176:                                              ; preds = %163
  %177 = load ptr, ptr %11, align 8, !tbaa !5
  %178 = load i32, ptr %8, align 4, !tbaa !9
  %179 = sext i32 %178 to i64
  %180 = getelementptr inbounds ptr, ptr %177, i64 %179
  %181 = load ptr, ptr %180, align 8, !tbaa !5
  %182 = getelementptr inbounds %struct.PlyProperty, ptr %181, i32 0, i32 0
  %183 = load ptr, ptr %182, align 8, !tbaa !21
  %184 = call i32 @equal_strings(ptr noundef @.str.89, ptr noundef %183)
  %185 = icmp ne i32 %184, 0
  br i1 %185, label %186, label %189

186:                                              ; preds = %176
  %187 = load ptr, ptr %9, align 8, !tbaa !5
  %188 = load ptr, ptr %16, align 8, !tbaa !5
  call void @ply_get_property(ptr noundef %187, ptr noundef %188, ptr noundef getelementptr inbounds ([11 x %struct.PlyProperty], ptr @_ZZN6R3Mesh11ReadPlyFileEPKcE10vert_props, i64 0, i64 3))
  br label %287

189:                                              ; preds = %176
  %190 = load ptr, ptr %11, align 8, !tbaa !5
  %191 = load i32, ptr %8, align 4, !tbaa !9
  %192 = sext i32 %191 to i64
  %193 = getelementptr inbounds ptr, ptr %190, i64 %192
  %194 = load ptr, ptr %193, align 8, !tbaa !5
  %195 = getelementptr inbounds %struct.PlyProperty, ptr %194, i32 0, i32 0
  %196 = load ptr, ptr %195, align 8, !tbaa !21
  %197 = call i32 @equal_strings(ptr noundef @.str.90, ptr noundef %196)
  %198 = icmp ne i32 %197, 0
  br i1 %198, label %199, label %202

199:                                              ; preds = %189
  %200 = load ptr, ptr %9, align 8, !tbaa !5
  %201 = load ptr, ptr %16, align 8, !tbaa !5
  call void @ply_get_property(ptr noundef %200, ptr noundef %201, ptr noundef getelementptr inbounds ([11 x %struct.PlyProperty], ptr @_ZZN6R3Mesh11ReadPlyFileEPKcE10vert_props, i64 0, i64 4))
  br label %286

202:                                              ; preds = %189
  %203 = load ptr, ptr %11, align 8, !tbaa !5
  %204 = load i32, ptr %8, align 4, !tbaa !9
  %205 = sext i32 %204 to i64
  %206 = getelementptr inbounds ptr, ptr %203, i64 %205
  %207 = load ptr, ptr %206, align 8, !tbaa !5
  %208 = getelementptr inbounds %struct.PlyProperty, ptr %207, i32 0, i32 0
  %209 = load ptr, ptr %208, align 8, !tbaa !21
  %210 = call i32 @equal_strings(ptr noundef @.str.91, ptr noundef %209)
  %211 = icmp ne i32 %210, 0
  br i1 %211, label %212, label %215

212:                                              ; preds = %202
  %213 = load ptr, ptr %9, align 8, !tbaa !5
  %214 = load ptr, ptr %16, align 8, !tbaa !5
  call void @ply_get_property(ptr noundef %213, ptr noundef %214, ptr noundef getelementptr inbounds ([11 x %struct.PlyProperty], ptr @_ZZN6R3Mesh11ReadPlyFileEPKcE10vert_props, i64 0, i64 5))
  br label %285

215:                                              ; preds = %202
  %216 = load ptr, ptr %11, align 8, !tbaa !5
  %217 = load i32, ptr %8, align 4, !tbaa !9
  %218 = sext i32 %217 to i64
  %219 = getelementptr inbounds ptr, ptr %216, i64 %218
  %220 = load ptr, ptr %219, align 8, !tbaa !5
  %221 = getelementptr inbounds %struct.PlyProperty, ptr %220, i32 0, i32 0
  %222 = load ptr, ptr %221, align 8, !tbaa !21
  %223 = call i32 @equal_strings(ptr noundef @.str.92, ptr noundef %222)
  %224 = icmp ne i32 %223, 0
  br i1 %224, label %225, label %228

225:                                              ; preds = %215
  %226 = load ptr, ptr %9, align 8, !tbaa !5
  %227 = load ptr, ptr %16, align 8, !tbaa !5
  call void @ply_get_property(ptr noundef %226, ptr noundef %227, ptr noundef getelementptr inbounds ([11 x %struct.PlyProperty], ptr @_ZZN6R3Mesh11ReadPlyFileEPKcE10vert_props, i64 0, i64 6))
  br label %284

228:                                              ; preds = %215
  %229 = load ptr, ptr %11, align 8, !tbaa !5
  %230 = load i32, ptr %8, align 4, !tbaa !9
  %231 = sext i32 %230 to i64
  %232 = getelementptr inbounds ptr, ptr %229, i64 %231
  %233 = load ptr, ptr %232, align 8, !tbaa !5
  %234 = getelementptr inbounds %struct.PlyProperty, ptr %233, i32 0, i32 0
  %235 = load ptr, ptr %234, align 8, !tbaa !21
  %236 = call i32 @equal_strings(ptr noundef @.str.93, ptr noundef %235)
  %237 = icmp ne i32 %236, 0
  br i1 %237, label %238, label %241

238:                                              ; preds = %228
  %239 = load ptr, ptr %9, align 8, !tbaa !5
  %240 = load ptr, ptr %16, align 8, !tbaa !5
  call void @ply_get_property(ptr noundef %239, ptr noundef %240, ptr noundef getelementptr inbounds ([11 x %struct.PlyProperty], ptr @_ZZN6R3Mesh11ReadPlyFileEPKcE10vert_props, i64 0, i64 7))
  br label %283

241:                                              ; preds = %228
  %242 = load ptr, ptr %11, align 8, !tbaa !5
  %243 = load i32, ptr %8, align 4, !tbaa !9
  %244 = sext i32 %243 to i64
  %245 = getelementptr inbounds ptr, ptr %242, i64 %244
  %246 = load ptr, ptr %245, align 8, !tbaa !5
  %247 = getelementptr inbounds %struct.PlyProperty, ptr %246, i32 0, i32 0
  %248 = load ptr, ptr %247, align 8, !tbaa !21
  %249 = call i32 @equal_strings(ptr noundef @.str.94, ptr noundef %248)
  %250 = icmp ne i32 %249, 0
  br i1 %250, label %251, label %254

251:                                              ; preds = %241
  %252 = load ptr, ptr %9, align 8, !tbaa !5
  %253 = load ptr, ptr %16, align 8, !tbaa !5
  call void @ply_get_property(ptr noundef %252, ptr noundef %253, ptr noundef getelementptr inbounds ([11 x %struct.PlyProperty], ptr @_ZZN6R3Mesh11ReadPlyFileEPKcE10vert_props, i64 0, i64 8))
  br label %282

254:                                              ; preds = %241
  %255 = load ptr, ptr %11, align 8, !tbaa !5
  %256 = load i32, ptr %8, align 4, !tbaa !9
  %257 = sext i32 %256 to i64
  %258 = getelementptr inbounds ptr, ptr %255, i64 %257
  %259 = load ptr, ptr %258, align 8, !tbaa !5
  %260 = getelementptr inbounds %struct.PlyProperty, ptr %259, i32 0, i32 0
  %261 = load ptr, ptr %260, align 8, !tbaa !21
  %262 = call i32 @equal_strings(ptr noundef @.str.95, ptr noundef %261)
  %263 = icmp ne i32 %262, 0
  br i1 %263, label %264, label %267

264:                                              ; preds = %254
  %265 = load ptr, ptr %9, align 8, !tbaa !5
  %266 = load ptr, ptr %16, align 8, !tbaa !5
  call void @ply_get_property(ptr noundef %265, ptr noundef %266, ptr noundef getelementptr inbounds ([11 x %struct.PlyProperty], ptr @_ZZN6R3Mesh11ReadPlyFileEPKcE10vert_props, i64 0, i64 9))
  br label %281

267:                                              ; preds = %254
  %268 = load ptr, ptr %11, align 8, !tbaa !5
  %269 = load i32, ptr %8, align 4, !tbaa !9
  %270 = sext i32 %269 to i64
  %271 = getelementptr inbounds ptr, ptr %268, i64 %270
  %272 = load ptr, ptr %271, align 8, !tbaa !5
  %273 = getelementptr inbounds %struct.PlyProperty, ptr %272, i32 0, i32 0
  %274 = load ptr, ptr %273, align 8, !tbaa !21
  %275 = call i32 @equal_strings(ptr noundef @.str.96, ptr noundef %274)
  %276 = icmp ne i32 %275, 0
  br i1 %276, label %277, label %280

277:                                              ; preds = %267
  %278 = load ptr, ptr %9, align 8, !tbaa !5
  %279 = load ptr, ptr %16, align 8, !tbaa !5
  call void @ply_get_property(ptr noundef %278, ptr noundef %279, ptr noundef getelementptr inbounds ([11 x %struct.PlyProperty], ptr @_ZZN6R3Mesh11ReadPlyFileEPKcE10vert_props, i64 0, i64 10))
  br label %280

280:                                              ; preds = %277, %267
  br label %281

281:                                              ; preds = %280, %264
  br label %282

282:                                              ; preds = %281, %251
  br label %283

283:                                              ; preds = %282, %238
  br label %284

284:                                              ; preds = %283, %225
  br label %285

285:                                              ; preds = %284, %212
  br label %286

286:                                              ; preds = %285, %199
  br label %287

287:                                              ; preds = %286, %186
  br label %288

288:                                              ; preds = %287, %173
  br label %289

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

290:                                              ; preds = %289, %137
  %291 = load ptr, ptr %11, align 8, !tbaa !5
  %292 = load i32, ptr %8, align 4, !tbaa !9
  %293 = sext i32 %292 to i64
  %294 = getelementptr inbounds ptr, ptr %291, i64 %293
  %295 = load ptr, ptr %294, align 8, !tbaa !5
  %296 = getelementptr inbounds %struct.PlyProperty, ptr %295, i32 0, i32 0
  %297 = load ptr, ptr %296, align 8, !tbaa !21
  %298 = call i32 @equal_strings(ptr noundef @.str.89, ptr noundef %297)
  %299 = icmp ne i32 %298, 0
  br i1 %299, label %300, label %301

300:                                              ; preds = %290
  store i32 1, ptr %23, align 4, !tbaa !9
  br label %325

301:                                              ; preds = %290
  %302 = load ptr, ptr %11, align 8, !tbaa !5
  %303 = load i32, ptr %8, align 4, !tbaa !9
  %304 = sext i32 %303 to i64
  %305 = getelementptr inbounds ptr, ptr %302, i64 %304
  %306 = load ptr, ptr %305, align 8, !tbaa !5
  %307 = getelementptr inbounds %struct.PlyProperty, ptr %306, i32 0, i32 0
  %308 = load ptr, ptr %307, align 8, !tbaa !21
  %309 = call i32 @equal_strings(ptr noundef @.str.92, ptr noundef %308)
  %310 = icmp ne i32 %309, 0
  br i1 %310, label %311, label %312

311:                                              ; preds = %301
  store i32 1, ptr %24, align 4, !tbaa !9
  br label %324

312:                                              ; preds = %301
  %313 = load ptr, ptr %11, align 8, !tbaa !5
  %314 = load i32, ptr %8, align 4, !tbaa !9
  %315 = sext i32 %314 to i64
  %316 = getelementptr inbounds ptr, ptr %313, i64 %315
  %317 = load ptr, ptr %316, align 8, !tbaa !5
  %318 = getelementptr inbounds %struct.PlyProperty, ptr %317, i32 0, i32 0
  %319 = load ptr, ptr %318, align 8, !tbaa !21
  %320 = call i32 @equal_strings(ptr noundef @.str.94, ptr noundef %319)
  %321 = icmp ne i32 %320, 0
  br i1 %321, label %322, label %323

322:                                              ; preds = %312
  store i32 1, ptr %25, align 4, !tbaa !9
  br label %323

323:                                              ; preds = %322, %312
  br label %324

324:                                              ; preds = %323, %311
  br label %325

325:                                              ; preds = %324, %300
  br label %326

326:                                              ; preds = %325
  %327 = load i32, ptr %8, align 4, !tbaa !9
  %328 = add nsw i32 %327, 1
  store i32 %328, ptr %8, align 4, !tbaa !9
  br label %123, !llvm.loop !23

329:                                              ; preds = %123
  store i32 0, ptr %8, align 4, !tbaa !9
  br label %330

330:                                              ; preds = %399, %329
  %331 = load i32, ptr %8, align 4, !tbaa !9
  %332 = load i32, ptr %15, align 4, !tbaa !9
  %333 = icmp slt i32 %331, %332
  br i1 %333, label %334, label %402

334:                                              ; preds = %330
  call void @llvm.lifetime.start.p0(i64 36, ptr %26) #11
  %335 = load ptr, ptr %9, align 8, !tbaa !5
  call void @ply_get_element(ptr noundef %335, ptr noundef %26)
  call void @llvm.lifetime.start.p0(i64 24, ptr %27) #11
  %336 = getelementptr inbounds %struct.PlyVertex, ptr %26, i32 0, i32 0
  %337 = load float, ptr %336, align 4, !tbaa !25
  %338 = fpext float %337 to double
  %339 = getelementptr inbounds %struct.PlyVertex, ptr %26, i32 0, i32 1
  %340 = load float, ptr %339, align 4, !tbaa !28
  %341 = fpext float %340 to double
  %342 = getelementptr inbounds %struct.PlyVertex, ptr %26, i32 0, i32 2
  %343 = load float, ptr %342, align 4, !tbaa !29
  %344 = fpext float %343 to double
  call void @_ZN7R3PointC1Eddd(ptr noundef nonnull align 8 dereferenceable(24) %27, double noundef %338, double noundef %341, double noundef %344)
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #11
  %345 = getelementptr inbounds %class.R3Mesh, ptr %64, i32 0, i32 4
  %346 = load ptr, ptr %345, align 8, !tbaa !11
  %347 = load i32, ptr %8, align 4, !tbaa !9
  %348 = sext i32 %347 to i64
  %349 = getelementptr inbounds %class.R3MeshVertex, ptr %346, i64 %348
  %350 = load ptr, ptr %64, align 8, !tbaa !30
  %351 = getelementptr inbounds ptr, ptr %350, i64 4
  %352 = load ptr, ptr %351, align 8
  %353 = call noundef ptr %352(ptr noundef nonnull align 8 dereferenceable(272) %64, ptr noundef nonnull align 8 dereferenceable(24) %27, ptr noundef %349)
  store ptr %353, ptr %28, align 8, !tbaa !5
  %354 = load i32, ptr %23, align 4, !tbaa !9
  %355 = icmp ne i32 %354, 0
  br i1 %355, label %356, label %367

356:                                              ; preds = %334
  call void @llvm.lifetime.start.p0(i64 24, ptr %29) #11
  %357 = getelementptr inbounds %struct.PlyVertex, ptr %26, i32 0, i32 3
  %358 = load float, ptr %357, align 4, !tbaa !32
  %359 = fpext float %358 to double
  %360 = getelementptr inbounds %struct.PlyVertex, ptr %26, i32 0, i32 4
  %361 = load float, ptr %360, align 4, !tbaa !33
  %362 = fpext float %361 to double
  %363 = getelementptr inbounds %struct.PlyVertex, ptr %26, i32 0, i32 5
  %364 = load float, ptr %363, align 4, !tbaa !34
  %365 = fpext float %364 to double
  call void @_ZN8R3VectorC1Eddd(ptr noundef nonnull align 8 dereferenceable(24) %29, double noundef %359, double noundef %362, double noundef %365)
  %366 = load ptr, ptr %28, align 8, !tbaa !5
  call void @_ZN6R3Mesh15SetVertexNormalEP12R3MeshVertexRK8R3Vector(ptr noundef nonnull align 8 dereferenceable(272) %64, ptr noundef %366, ptr noundef nonnull align 8 dereferenceable(24) %29)
  call void @llvm.lifetime.end.p0(i64 24, ptr %29) #11
  br label %367

367:                                              ; preds = %356, %334
  %368 = load i32, ptr %24, align 4, !tbaa !9
  %369 = icmp ne i32 %368, 0
  br i1 %369, label %370, label %378

370:                                              ; preds = %367
  call void @llvm.lifetime.start.p0(i64 16, ptr %30) #11
  %371 = getelementptr inbounds %struct.PlyVertex, ptr %26, i32 0, i32 6
  %372 = load float, ptr %371, align 4, !tbaa !35
  %373 = fpext float %372 to double
  %374 = getelementptr inbounds %struct.PlyVertex, ptr %26, i32 0, i32 7
  %375 = load float, ptr %374, align 4, !tbaa !36
  %376 = fpext float %375 to double
  call void @_ZN7R2PointC1Edd(ptr noundef nonnull align 8 dereferenceable(16) %30, double noundef %373, double noundef %376)
  %377 = load ptr, ptr %28, align 8, !tbaa !5
  call void @_ZN6R3Mesh22SetVertexTextureCoordsEP12R3MeshVertexRK7R2Point(ptr noundef nonnull align 8 dereferenceable(272) %64, ptr noundef %377, ptr noundef nonnull align 8 dereferenceable(16) %30)
  call void @llvm.lifetime.end.p0(i64 16, ptr %30) #11
  br label %378

378:                                              ; preds = %370, %367
  %379 = load i32, ptr %25, align 4, !tbaa !9
  %380 = icmp ne i32 %379, 0
  br i1 %380, label %381, label %398

381:                                              ; preds = %378
  call void @llvm.lifetime.start.p0(i64 24, ptr %31) #11
  %382 = getelementptr inbounds %struct.PlyVertex, ptr %26, i32 0, i32 8
  %383 = load i8, ptr %382, align 4, !tbaa !37
  %384 = zext i8 %383 to i32
  %385 = sitofp i32 %384 to double
  %386 = fdiv double %385, 2.550000e+02
  %387 = getelementptr inbounds %struct.PlyVertex, ptr %26, i32 0, i32 9
  %388 = load i8, ptr %387, align 1, !tbaa !38
  %389 = zext i8 %388 to i32
  %390 = sitofp i32 %389 to double
  %391 = fdiv double %390, 2.550000e+02
  %392 = getelementptr inbounds %struct.PlyVertex, ptr %26, i32 0, i32 10
  %393 = load i8, ptr %392, align 2, !tbaa !39
  %394 = zext i8 %393 to i32
  %395 = sitofp i32 %394 to double
  %396 = fdiv double %395, 2.550000e+02
  call void @_ZN5RNRgbC1Eddd(ptr noundef nonnull align 8 dereferenceable(24) %31, double noundef %386, double noundef %391, double noundef %396)
  %397 = load ptr, ptr %28, align 8, !tbaa !5
  call void @_ZN6R3Mesh14SetVertexColorEP12R3MeshVertexRK5RNRgb(ptr noundef nonnull align 8 dereferenceable(272) %64, ptr noundef %397, ptr noundef nonnull align 8 dereferenceable(24) %31)
  call void @llvm.lifetime.end.p0(i64 24, ptr %31) #11
  br label %398

398:                                              ; preds = %381, %378
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr %27) #11
  call void @llvm.lifetime.end.p0(i64 36, ptr %26) #11
  br label %399

399:                                              ; preds = %398
  %400 = load i32, ptr %8, align 4, !tbaa !9
  %401 = add nsw i32 %400, 1
  store i32 %401, ptr %8, align 4, !tbaa !9
  br label %330, !llvm.loop !40

402:                                              ; preds = %330
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #11
  br label %1189

403:                                              ; preds = %86
  %404 = load ptr, ptr %16, align 8, !tbaa !5
  %405 = call i32 @equal_strings(ptr noundef @.str.42, ptr noundef %404)
  %406 = icmp ne i32 %405, 0
  br i1 %406, label %407, label %905

407:                                              ; preds = %403
  %408 = getelementptr inbounds %class.R3Mesh, ptr %64, i32 0, i32 3
  %409 = load i32, ptr %15, align 4, !tbaa !9
  call void @_ZN8RNVArray6ResizeEi(ptr noundef nonnull align 8 dereferenceable(16) %408, i32 noundef %409)
  store i32 0, ptr %8, align 4, !tbaa !9
  br label %410

410:                                              ; preds = %484, %407
  %411 = load i32, ptr %8, align 4, !tbaa !9
  %412 = load i32, ptr %14, align 4, !tbaa !9
  %413 = icmp slt i32 %411, %412
  br i1 %413, label %414, label %487

414:                                              ; preds = %410
  %415 = load ptr, ptr %11, align 8, !tbaa !5
  %416 = load i32, ptr %8, align 4, !tbaa !9
  %417 = sext i32 %416 to i64
  %418 = getelementptr inbounds ptr, ptr %415, i64 %417
  %419 = load ptr, ptr %418, align 8, !tbaa !5
  %420 = getelementptr inbounds %struct.PlyProperty, ptr %419, i32 0, i32 0
  %421 = load ptr, ptr %420, align 8, !tbaa !21
  %422 = call i32 @equal_strings(ptr noundef @.str.97, ptr noundef %421)
  %423 = icmp ne i32 %422, 0
  br i1 %423, label %424, label %427

424:                                              ; preds = %414
  %425 = load ptr, ptr %9, align 8, !tbaa !5
  %426 = load ptr, ptr %16, align 8, !tbaa !5
  call void @ply_get_property(ptr noundef %425, ptr noundef %426, ptr noundef @_ZZN6R3Mesh11ReadPlyFileEPKcE10face_props)
  br label %483

427:                                              ; preds = %414
  %428 = load ptr, ptr %11, align 8, !tbaa !5
  %429 = load i32, ptr %8, align 4, !tbaa !9
  %430 = sext i32 %429 to i64
  %431 = getelementptr inbounds ptr, ptr %428, i64 %430
  %432 = load ptr, ptr %431, align 8, !tbaa !5
  %433 = getelementptr inbounds %struct.PlyProperty, ptr %432, i32 0, i32 0
  %434 = load ptr, ptr %433, align 8, !tbaa !21
  %435 = call i32 @equal_strings(ptr noundef @.str.98, ptr noundef %434)
  %436 = icmp ne i32 %435, 0
  br i1 %436, label %437, label %440

437:                                              ; preds = %427
  %438 = load ptr, ptr %9, align 8, !tbaa !5
  %439 = load ptr, ptr %16, align 8, !tbaa !5
  call void @ply_get_property(ptr noundef %438, ptr noundef %439, ptr noundef getelementptr inbounds ([5 x %struct.PlyProperty], ptr @_ZZN6R3Mesh11ReadPlyFileEPKcE10face_props, i64 0, i64 1))
  br label %482

440:                                              ; preds = %427
  %441 = load ptr, ptr %11, align 8, !tbaa !5
  %442 = load i32, ptr %8, align 4, !tbaa !9
  %443 = sext i32 %442 to i64
  %444 = getelementptr inbounds ptr, ptr %441, i64 %443
  %445 = load ptr, ptr %444, align 8, !tbaa !5
  %446 = getelementptr inbounds %struct.PlyProperty, ptr %445, i32 0, i32 0
  %447 = load ptr, ptr %446, align 8, !tbaa !21
  %448 = call i32 @equal_strings(ptr noundef @.str.99, ptr noundef %447)
  %449 = icmp ne i32 %448, 0
  br i1 %449, label %450, label %453

450:                                              ; preds = %440
  %451 = load ptr, ptr %9, align 8, !tbaa !5
  %452 = load ptr, ptr %16, align 8, !tbaa !5
  call void @ply_get_property(ptr noundef %451, ptr noundef %452, ptr noundef getelementptr inbounds ([5 x %struct.PlyProperty], ptr @_ZZN6R3Mesh11ReadPlyFileEPKcE10face_props, i64 0, i64 2))
  br label %481

453:                                              ; preds = %440
  %454 = load ptr, ptr %11, align 8, !tbaa !5
  %455 = load i32, ptr %8, align 4, !tbaa !9
  %456 = sext i32 %455 to i64
  %457 = getelementptr inbounds ptr, ptr %454, i64 %456
  %458 = load ptr, ptr %457, align 8, !tbaa !5
  %459 = getelementptr inbounds %struct.PlyProperty, ptr %458, i32 0, i32 0
  %460 = load ptr, ptr %459, align 8, !tbaa !21
  %461 = call i32 @equal_strings(ptr noundef @.str.100, ptr noundef %460)
  %462 = icmp ne i32 %461, 0
  br i1 %462, label %463, label %466

463:                                              ; preds = %453
  %464 = load ptr, ptr %9, align 8, !tbaa !5
  %465 = load ptr, ptr %16, align 8, !tbaa !5
  call void @ply_get_property(ptr noundef %464, ptr noundef %465, ptr noundef getelementptr inbounds ([5 x %struct.PlyProperty], ptr @_ZZN6R3Mesh11ReadPlyFileEPKcE10face_props, i64 0, i64 3))
  br label %480

466:                                              ; preds = %453
  %467 = load ptr, ptr %11, align 8, !tbaa !5
  %468 = load i32, ptr %8, align 4, !tbaa !9
  %469 = sext i32 %468 to i64
  %470 = getelementptr inbounds ptr, ptr %467, i64 %469
  %471 = load ptr, ptr %470, align 8, !tbaa !5
  %472 = getelementptr inbounds %struct.PlyProperty, ptr %471, i32 0, i32 0
  %473 = load ptr, ptr %472, align 8, !tbaa !21
  %474 = call i32 @equal_strings(ptr noundef @.str.101, ptr noundef %473)
  %475 = icmp ne i32 %474, 0
  br i1 %475, label %476, label %479

476:                                              ; preds = %466
  %477 = load ptr, ptr %9, align 8, !tbaa !5
  %478 = load ptr, ptr %16, align 8, !tbaa !5
  call void @ply_get_property(ptr noundef %477, ptr noundef %478, ptr noundef getelementptr inbounds ([5 x %struct.PlyProperty], ptr @_ZZN6R3Mesh11ReadPlyFileEPKcE10face_props, i64 0, i64 4))
  br label %479

479:                                              ; preds = %476, %466
  br label %480

480:                                              ; preds = %479, %463
  br label %481

481:                                              ; preds = %480, %450
  br label %482

482:                                              ; preds = %481, %437
  br label %483

483:                                              ; preds = %482, %424
  br label %484

484:                                              ; preds = %483
  %485 = load i32, ptr %8, align 4, !tbaa !9
  %486 = add nsw i32 %485, 1
  store i32 %486, ptr %8, align 4, !tbaa !9
  br label %410, !llvm.loop !41

487:                                              ; preds = %410
  call void @llvm.lifetime.start.p0(i64 16, ptr %32) #11
  call void @_ZN7RNArrayIP12R3MeshVertexEC2Ev(ptr noundef nonnull align 8 dereferenceable(16) %32)
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #11
  %488 = load i32, ptr %15, align 4, !tbaa !9
  %489 = sext i32 %488 to i64
  %490 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %489, i64 4)
  %491 = extractvalue { i64, i1 } %490, 1
  %492 = extractvalue { i64, i1 } %490, 0
  %493 = select i1 %491, i64 -1, i64 %492
  %494 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %493) #12
          to label %495 unwind label %539

495:                                              ; preds = %487
  store ptr %494, ptr %33, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #11
  %496 = load i32, ptr %15, align 4, !tbaa !9
  %497 = sext i32 %496 to i64
  %498 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %497, i64 4)
  %499 = extractvalue { i64, i1 } %498, 1
  %500 = extractvalue { i64, i1 } %498, 0
  %501 = select i1 %499, i64 -1, i64 %500
  %502 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %501) #12
          to label %503 unwind label %543

503:                                              ; preds = %495
  store ptr %502, ptr %34, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #11
  %504 = load i32, ptr %15, align 4, !tbaa !9
  %505 = sext i32 %504 to i64
  %506 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %505, i64 4)
  %507 = extractvalue { i64, i1 } %506, 1
  %508 = extractvalue { i64, i1 } %506, 0
  %509 = select i1 %507, i64 -1, i64 %508
  %510 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %509) #12
          to label %511 unwind label %547

511:                                              ; preds = %503
  store ptr %510, ptr %35, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #11
  store i32 0, ptr %36, align 4, !tbaa !9
  store i32 0, ptr %8, align 4, !tbaa !9
  br label %512

512:                                              ; preds = %743, %511
  %513 = load i32, ptr %8, align 4, !tbaa !9
  %514 = load i32, ptr %15, align 4, !tbaa !9
  %515 = icmp slt i32 %513, %514
  br i1 %515, label %516, label %748

516:                                              ; preds = %512
  call void @llvm.lifetime.start.p0(i64 32, ptr %37) #11
  %517 = getelementptr inbounds %struct.PlyFace, ptr %37, i32 0, i32 0
  store i8 0, ptr %517, align 8, !tbaa !42
  %518 = getelementptr inbounds %struct.PlyFace, ptr %37, i32 0, i32 1
  store ptr null, ptr %518, align 8, !tbaa !44
  %519 = getelementptr inbounds %struct.PlyFace, ptr %37, i32 0, i32 2
  store i32 -1, ptr %519, align 8, !tbaa !45
  %520 = getelementptr inbounds %struct.PlyFace, ptr %37, i32 0, i32 3
  store i32 -1, ptr %520, align 4, !tbaa !46
  %521 = getelementptr inbounds %struct.PlyFace, ptr %37, i32 0, i32 4
  store i32 -1, ptr %521, align 8, !tbaa !47
  %522 = load ptr, ptr %9, align 8, !tbaa !5
  invoke void @ply_get_element(ptr noundef %522, ptr noundef %37)
          to label %523 unwind label %551

523:                                              ; preds = %516
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #11
  %524 = getelementptr inbounds %class.R3Mesh, ptr %64, i32 0, i32 1
  %525 = getelementptr inbounds %struct.PlyFace, ptr %37, i32 0, i32 1
  %526 = load ptr, ptr %525, align 8, !tbaa !44
  %527 = getelementptr inbounds i32, ptr %526, i64 0
  %528 = load i32, ptr %527, align 4, !tbaa !9
  %529 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7RNArrayIP12R3MeshVertexEixEi(ptr noundef nonnull align 8 dereferenceable(16) %524, i32 noundef %528)
          to label %530 unwind label %555

530:                                              ; preds = %523
  %531 = load ptr, ptr %529, align 8, !tbaa !5
  store ptr %531, ptr %38, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #11
  store i32 2, ptr %39, align 4, !tbaa !9
  br label %532

532:                                              ; preds = %730, %530
  %533 = load i32, ptr %39, align 4, !tbaa !9
  %534 = getelementptr inbounds %struct.PlyFace, ptr %37, i32 0, i32 0
  %535 = load i8, ptr %534, align 8, !tbaa !42
  %536 = zext i8 %535 to i32
  %537 = icmp slt i32 %533, %536
  br i1 %537, label %559, label %538

538:                                              ; preds = %532
  store i32 17, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #11
  br label %735

539:                                              ; preds = %487
  %540 = landingpad { ptr, i32 }
          cleanup
  %541 = extractvalue { ptr, i32 } %540, 0
  store ptr %541, ptr %21, align 8
  %542 = extractvalue { ptr, i32 } %540, 1
  store i32 %542, ptr %22, align 4
  br label %904

543:                                              ; preds = %495
  %544 = landingpad { ptr, i32 }
          cleanup
  %545 = extractvalue { ptr, i32 } %544, 0
  store ptr %545, ptr %21, align 8
  %546 = extractvalue { ptr, i32 } %544, 1
  store i32 %546, ptr %22, align 4
  br label %903

547:                                              ; preds = %503
  %548 = landingpad { ptr, i32 }
          cleanup
  %549 = extractvalue { ptr, i32 } %548, 0
  store ptr %549, ptr %21, align 8
  %550 = extractvalue { ptr, i32 } %548, 1
  store i32 %550, ptr %22, align 4
  br label %902

551:                                              ; preds = %516
  %552 = landingpad { ptr, i32 }
          cleanup
  %553 = extractvalue { ptr, i32 } %552, 0
  store ptr %553, ptr %21, align 8
  %554 = extractvalue { ptr, i32 } %552, 1
  store i32 %554, ptr %22, align 4
  br label %747

555:                                              ; preds = %523
  %556 = landingpad { ptr, i32 }
          cleanup
  %557 = extractvalue { ptr, i32 } %556, 0
  store ptr %557, ptr %21, align 8
  %558 = extractvalue { ptr, i32 } %556, 1
  store i32 %558, ptr %22, align 4
  br label %746

559:                                              ; preds = %532
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #11
  %560 = getelementptr inbounds %class.R3Mesh, ptr %64, i32 0, i32 1
  %561 = getelementptr inbounds %struct.PlyFace, ptr %37, i32 0, i32 1
  %562 = load ptr, ptr %561, align 8, !tbaa !44
  %563 = load i32, ptr %39, align 4, !tbaa !9
  %564 = sub nsw i32 %563, 1
  %565 = sext i32 %564 to i64
  %566 = getelementptr inbounds i32, ptr %562, i64 %565
  %567 = load i32, ptr %566, align 4, !tbaa !9
  %568 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7RNArrayIP12R3MeshVertexEixEi(ptr noundef nonnull align 8 dereferenceable(16) %560, i32 noundef %567)
          to label %569 unwind label %588

569:                                              ; preds = %559
  %570 = load ptr, ptr %568, align 8, !tbaa !5
  store ptr %570, ptr %40, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #11
  %571 = getelementptr inbounds %class.R3Mesh, ptr %64, i32 0, i32 1
  %572 = getelementptr inbounds %struct.PlyFace, ptr %37, i32 0, i32 1
  %573 = load ptr, ptr %572, align 8, !tbaa !44
  %574 = load i32, ptr %39, align 4, !tbaa !9
  %575 = sext i32 %574 to i64
  %576 = getelementptr inbounds i32, ptr %573, i64 %575
  %577 = load i32, ptr %576, align 4, !tbaa !9
  %578 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7RNArrayIP12R3MeshVertexEixEi(ptr noundef nonnull align 8 dereferenceable(16) %571, i32 noundef %577)
          to label %579 unwind label %592

579:                                              ; preds = %569
  %580 = load ptr, ptr %578, align 8, !tbaa !5
  store ptr %580, ptr %41, align 8, !tbaa !5
  %581 = getelementptr inbounds %struct.PlyFace, ptr %37, i32 0, i32 1
  %582 = load ptr, ptr %581, align 8, !tbaa !44
  %583 = getelementptr inbounds i32, ptr %582, i64 0
  %584 = load i32, ptr %583, align 4, !tbaa !9
  %585 = icmp sge i32 %584, 0
  br i1 %585, label %596, label %586

586:                                              ; preds = %579
  invoke void (ptr, ...) @_Z7RNAbortPKcz(ptr noundef @.str, ptr noundef @.str.106, i32 noundef 4981, ptr noundef @.str.2)
          to label %587 unwind label %592

587:                                              ; preds = %586
  br label %596

588:                                              ; preds = %559
  %589 = landingpad { ptr, i32 }
          cleanup
  %590 = extractvalue { ptr, i32 } %589, 0
  store ptr %590, ptr %21, align 8
  %591 = extractvalue { ptr, i32 } %589, 1
  store i32 %591, ptr %22, align 4
  br label %734

592:                                              ; preds = %653, %642, %640, %628, %626, %617, %615, %605, %586, %569
  %593 = landingpad { ptr, i32 }
          cleanup
  %594 = extractvalue { ptr, i32 } %593, 0
  store ptr %594, ptr %21, align 8
  %595 = extractvalue { ptr, i32 } %593, 1
  store i32 %595, ptr %22, align 4
  br label %733

596:                                              ; preds = %587, %579
  %597 = getelementptr inbounds %struct.PlyFace, ptr %37, i32 0, i32 1
  %598 = load ptr, ptr %597, align 8, !tbaa !44
  %599 = load i32, ptr %39, align 4, !tbaa !9
  %600 = sub nsw i32 %599, 1
  %601 = sext i32 %600 to i64
  %602 = getelementptr inbounds i32, ptr %598, i64 %601
  %603 = load i32, ptr %602, align 4, !tbaa !9
  %604 = icmp sge i32 %603, 0
  br i1 %604, label %607, label %605

605:                                              ; preds = %596
  invoke void (ptr, ...) @_Z7RNAbortPKcz(ptr noundef @.str, ptr noundef @.str.107, i32 noundef 4982, ptr noundef @.str.2)
          to label %606 unwind label %592

606:                                              ; preds = %605
  br label %607

607:                                              ; preds = %606, %596
  %608 = getelementptr inbounds %struct.PlyFace, ptr %37, i32 0, i32 1
  %609 = load ptr, ptr %608, align 8, !tbaa !44
  %610 = load i32, ptr %39, align 4, !tbaa !9
  %611 = sext i32 %610 to i64
  %612 = getelementptr inbounds i32, ptr %609, i64 %611
  %613 = load i32, ptr %612, align 4, !tbaa !9
  %614 = icmp sge i32 %613, 0
  br i1 %614, label %617, label %615

615:                                              ; preds = %607
  invoke void (ptr, ...) @_Z7RNAbortPKcz(ptr noundef @.str, ptr noundef @.str.108, i32 noundef 4983, ptr noundef @.str.2)
          to label %616 unwind label %592

616:                                              ; preds = %615
  br label %617

617:                                              ; preds = %616, %607
  %618 = getelementptr inbounds %struct.PlyFace, ptr %37, i32 0, i32 1
  %619 = load ptr, ptr %618, align 8, !tbaa !44
  %620 = getelementptr inbounds i32, ptr %619, i64 0
  %621 = load i32, ptr %620, align 4, !tbaa !9
  %622 = getelementptr inbounds %class.R3Mesh, ptr %64, i32 0, i32 1
  %623 = invoke noundef i32 @_ZNK8RNVArray8NEntriesEv(ptr noundef nonnull align 8 dereferenceable(16) %622)
          to label %624 unwind label %592

624:                                              ; preds = %617
  %625 = icmp slt i32 %621, %623
  br i1 %625, label %628, label %626

626:                                              ; preds = %624
  invoke void (ptr, ...) @_Z7RNAbortPKcz(ptr noundef @.str, ptr noundef @.str.109, i32 noundef 4984, ptr noundef @.str.2)
          to label %627 unwind label %592

627:                                              ; preds = %626
  br label %628

628:                                              ; preds = %627, %624
  %629 = getelementptr inbounds %struct.PlyFace, ptr %37, i32 0, i32 1
  %630 = load ptr, ptr %629, align 8, !tbaa !44
  %631 = load i32, ptr %39, align 4, !tbaa !9
  %632 = sub nsw i32 %631, 1
  %633 = sext i32 %632 to i64
  %634 = getelementptr inbounds i32, ptr %630, i64 %633
  %635 = load i32, ptr %634, align 4, !tbaa !9
  %636 = getelementptr inbounds %class.R3Mesh, ptr %64, i32 0, i32 1
  %637 = invoke noundef i32 @_ZNK8RNVArray8NEntriesEv(ptr noundef nonnull align 8 dereferenceable(16) %636)
          to label %638 unwind label %592

638:                                              ; preds = %628
  %639 = icmp slt i32 %635, %637
  br i1 %639, label %642, label %640

640:                                              ; preds = %638
  invoke void (ptr, ...) @_Z7RNAbortPKcz(ptr noundef @.str, ptr noundef @.str.110, i32 noundef 4985, ptr noundef @.str.2)
          to label %641 unwind label %592

641:                                              ; preds = %640
  br label %642

642:                                              ; preds = %641, %638
  %643 = getelementptr inbounds %struct.PlyFace, ptr %37, i32 0, i32 1
  %644 = load ptr, ptr %643, align 8, !tbaa !44
  %645 = load i32, ptr %39, align 4, !tbaa !9
  %646 = sext i32 %645 to i64
  %647 = getelementptr inbounds i32, ptr %644, i64 %646
  %648 = load i32, ptr %647, align 4, !tbaa !9
  %649 = getelementptr inbounds %class.R3Mesh, ptr %64, i32 0, i32 1
  %650 = invoke noundef i32 @_ZNK8RNVArray8NEntriesEv(ptr noundef nonnull align 8 dereferenceable(16) %649)
          to label %651 unwind label %592

651:                                              ; preds = %642
  %652 = icmp slt i32 %648, %650
  br i1 %652, label %655, label %653

653:                                              ; preds = %651
  invoke void (ptr, ...) @_Z7RNAbortPKcz(ptr noundef @.str, ptr noundef @.str.111, i32 noundef 4986, ptr noundef @.str.2)
          to label %654 unwind label %592

654:                                              ; preds = %653
  br label %655

655:                                              ; preds = %654, %651
  %656 = load ptr, ptr %38, align 8, !tbaa !5
  %657 = load ptr, ptr %40, align 8, !tbaa !5
  %658 = icmp eq ptr %656, %657
  br i1 %658, label %667, label %659

659:                                              ; preds = %655
  %660 = load ptr, ptr %40, align 8, !tbaa !5
  %661 = load ptr, ptr %41, align 8, !tbaa !5
  %662 = icmp eq ptr %660, %661
  br i1 %662, label %667, label %663

663:                                              ; preds = %659
  %664 = load ptr, ptr %38, align 8, !tbaa !5
  %665 = load ptr, ptr %41, align 8, !tbaa !5
  %666 = icmp eq ptr %664, %665
  br i1 %666, label %667, label %668

667:                                              ; preds = %663, %659, %655
  store i32 19, ptr %20, align 4
  br label %727

668:                                              ; preds = %663
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #11
  %669 = load ptr, ptr %38, align 8, !tbaa !5
  %670 = load ptr, ptr %40, align 8, !tbaa !5
  %671 = load ptr, ptr %41, align 8, !tbaa !5
  %672 = load ptr, ptr %64, align 8, !tbaa !30
  %673 = getelementptr inbounds ptr, ptr %672, i64 9
  %674 = load ptr, ptr %673, align 8
  %675 = invoke noundef ptr %674(ptr noundef nonnull align 8 dereferenceable(272) %64, ptr noundef %669, ptr noundef %670, ptr noundef %671, ptr noundef null)
          to label %676 unwind label %692

676:                                              ; preds = %668
  store ptr %675, ptr %42, align 8, !tbaa !5
  %677 = load ptr, ptr %42, align 8, !tbaa !5
  %678 = icmp ne ptr %677, null
  br i1 %678, label %679, label %696

679:                                              ; preds = %676
  %680 = load ptr, ptr %42, align 8, !tbaa !5
  %681 = getelementptr inbounds %struct.PlyFace, ptr %37, i32 0, i32 2
  %682 = load i32, ptr %681, align 8, !tbaa !45
  invoke void @_ZN6R3Mesh15SetFaceMaterialEP10R3MeshFacei(ptr noundef nonnull align 8 dereferenceable(272) %64, ptr noundef %680, i32 noundef %682)
          to label %683 unwind label %692

683:                                              ; preds = %679
  %684 = load ptr, ptr %42, align 8, !tbaa !5
  %685 = getelementptr inbounds %struct.PlyFace, ptr %37, i32 0, i32 3
  %686 = load i32, ptr %685, align 4, !tbaa !46
  invoke void @_ZN6R3Mesh14SetFaceSegmentEP10R3MeshFacei(ptr noundef nonnull align 8 dereferenceable(272) %64, ptr noundef %684, i32 noundef %686)
          to label %687 unwind label %692

687:                                              ; preds = %683
  %688 = load ptr, ptr %42, align 8, !tbaa !5
  %689 = getelementptr inbounds %struct.PlyFace, ptr %37, i32 0, i32 4
  %690 = load i32, ptr %689, align 8, !tbaa !47
  invoke void @_ZN6R3Mesh15SetFaceCategoryEP10R3MeshFacei(ptr noundef nonnull align 8 dereferenceable(272) %64, ptr noundef %688, i32 noundef %690)
          to label %691 unwind label %692

691:                                              ; preds = %687
  br label %726

692:                                              ; preds = %702, %699, %696, %687, %683, %679, %668
  %693 = landingpad { ptr, i32 }
          cleanup
  %694 = extractvalue { ptr, i32 } %693, 0
  store ptr %694, ptr %21, align 8
  %695 = extractvalue { ptr, i32 } %693, 1
  store i32 %695, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #11
  br label %733

696:                                              ; preds = %676
  %697 = load ptr, ptr %38, align 8, !tbaa !5
  %698 = invoke noundef ptr @_ZN7RNArrayIP12R3MeshVertexE6InsertES1_(ptr noundef nonnull align 8 dereferenceable(16) %32, ptr noundef %697)
          to label %699 unwind label %692

699:                                              ; preds = %696
  %700 = load ptr, ptr %40, align 8, !tbaa !5
  %701 = invoke noundef ptr @_ZN7RNArrayIP12R3MeshVertexE6InsertES1_(ptr noundef nonnull align 8 dereferenceable(16) %32, ptr noundef %700)
          to label %702 unwind label %692

702:                                              ; preds = %699
  %703 = load ptr, ptr %41, align 8, !tbaa !5
  %704 = invoke noundef ptr @_ZN7RNArrayIP12R3MeshVertexE6InsertES1_(ptr noundef nonnull align 8 dereferenceable(16) %32, ptr noundef %703)
          to label %705 unwind label %692

705:                                              ; preds = %702
  %706 = getelementptr inbounds %struct.PlyFace, ptr %37, i32 0, i32 2
  %707 = load i32, ptr %706, align 8, !tbaa !45
  %708 = load ptr, ptr %33, align 8, !tbaa !5
  %709 = load i32, ptr %36, align 4, !tbaa !9
  %710 = sext i32 %709 to i64
  %711 = getelementptr inbounds i32, ptr %708, i64 %710
  store i32 %707, ptr %711, align 4, !tbaa !9
  %712 = getelementptr inbounds %struct.PlyFace, ptr %37, i32 0, i32 3
  %713 = load i32, ptr %712, align 4, !tbaa !46
  %714 = load ptr, ptr %34, align 8, !tbaa !5
  %715 = load i32, ptr %36, align 4, !tbaa !9
  %716 = sext i32 %715 to i64
  %717 = getelementptr inbounds i32, ptr %714, i64 %716
  store i32 %713, ptr %717, align 4, !tbaa !9
  %718 = getelementptr inbounds %struct.PlyFace, ptr %37, i32 0, i32 4
  %719 = load i32, ptr %718, align 8, !tbaa !47
  %720 = load ptr, ptr %35, align 8, !tbaa !5
  %721 = load i32, ptr %36, align 4, !tbaa !9
  %722 = sext i32 %721 to i64
  %723 = getelementptr inbounds i32, ptr %720, i64 %722
  store i32 %719, ptr %723, align 4, !tbaa !9
  %724 = load i32, ptr %36, align 4, !tbaa !9
  %725 = add nsw i32 %724, 1
  store i32 %725, ptr %36, align 4, !tbaa !9
  br label %726

726:                                              ; preds = %705, %691
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #11
  store i32 0, ptr %20, align 4
  br label %727

727:                                              ; preds = %726, %667
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #11
  %728 = load i32, ptr %20, align 4
  switch i32 %728, label %1203 [
    i32 0, label %729
    i32 19, label %730
  ]

729:                                              ; preds = %727
  br label %730

730:                                              ; preds = %729, %727
  %731 = load i32, ptr %39, align 4, !tbaa !9
  %732 = add nsw i32 %731, 1
  store i32 %732, ptr %39, align 4, !tbaa !9
  br label %532, !llvm.loop !48

733:                                              ; preds = %692, %592
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #11
  br label %734

734:                                              ; preds = %733, %588
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #11
  br label %746

735:                                              ; preds = %538
  %736 = getelementptr inbounds %struct.PlyFace, ptr %37, i32 0, i32 1
  %737 = load ptr, ptr %736, align 8, !tbaa !44
  %738 = icmp ne ptr %737, null
  br i1 %738, label %739, label %742

739:                                              ; preds = %735
  %740 = getelementptr inbounds %struct.PlyFace, ptr %37, i32 0, i32 1
  %741 = load ptr, ptr %740, align 8, !tbaa !44
  call void @free(ptr noundef %741) #11
  br label %742

742:                                              ; preds = %739, %735
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #11
  call void @llvm.lifetime.end.p0(i64 32, ptr %37) #11
  br label %743

743:                                              ; preds = %742
  %744 = load i32, ptr %8, align 4, !tbaa !9
  %745 = add nsw i32 %744, 1
  store i32 %745, ptr %8, align 4, !tbaa !9
  br label %512, !llvm.loop !49

746:                                              ; preds = %734, %555
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #11
  br label %747

747:                                              ; preds = %746, %551
  call void @llvm.lifetime.end.p0(i64 32, ptr %37) #11
  br label %901

748:                                              ; preds = %512
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #11
  store i32 0, ptr %43, align 4, !tbaa !9
  br label %749

749:                                              ; preds = %881, %748
  %750 = load i32, ptr %43, align 4, !tbaa !9
  %751 = load i32, ptr %36, align 4, !tbaa !9
  %752 = icmp slt i32 %750, %751
  br i1 %752, label %754, label %753

753:                                              ; preds = %749
  store i32 20, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #11
  br label %888

754:                                              ; preds = %749
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #11
  %755 = load i32, ptr %43, align 4, !tbaa !9
  %756 = mul nsw i32 3, %755
  %757 = add nsw i32 %756, 0
  %758 = invoke noundef ptr @_ZNK7RNArrayIP12R3MeshVertexE3KthEi(ptr noundef nonnull align 8 dereferenceable(16) %32, i32 noundef %757)
          to label %759 unwind label %824

759:                                              ; preds = %754
  store ptr %758, ptr %44, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #11
  %760 = load i32, ptr %43, align 4, !tbaa !9
  %761 = mul nsw i32 3, %760
  %762 = add nsw i32 %761, 1
  %763 = invoke noundef ptr @_ZNK7RNArrayIP12R3MeshVertexE3KthEi(ptr noundef nonnull align 8 dereferenceable(16) %32, i32 noundef %762)
          to label %764 unwind label %828

764:                                              ; preds = %759
  store ptr %763, ptr %45, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #11
  %765 = load i32, ptr %43, align 4, !tbaa !9
  %766 = mul nsw i32 3, %765
  %767 = add nsw i32 %766, 2
  %768 = invoke noundef ptr @_ZNK7RNArrayIP12R3MeshVertexE3KthEi(ptr noundef nonnull align 8 dereferenceable(16) %32, i32 noundef %767)
          to label %769 unwind label %832

769:                                              ; preds = %764
  store ptr %768, ptr %46, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %47) #11
  %770 = load ptr, ptr %44, align 8, !tbaa !5
  %771 = load ptr, ptr %45, align 8, !tbaa !5
  %772 = load ptr, ptr %46, align 8, !tbaa !5
  %773 = load ptr, ptr %64, align 8, !tbaa !30
  %774 = getelementptr inbounds ptr, ptr %773, i64 9
  %775 = load ptr, ptr %774, align 8
  %776 = invoke noundef ptr %775(ptr noundef nonnull align 8 dereferenceable(272) %64, ptr noundef %770, ptr noundef %771, ptr noundef %772, ptr noundef null)
          to label %777 unwind label %836

777:                                              ; preds = %769
  store ptr %776, ptr %47, align 8, !tbaa !5
  %778 = load ptr, ptr %47, align 8, !tbaa !5
  %779 = icmp ne ptr %778, null
  br i1 %779, label %855, label %780

780:                                              ; preds = %777
  %781 = load ptr, ptr %44, align 8, !tbaa !5
  %782 = load ptr, ptr %46, align 8, !tbaa !5
  %783 = load ptr, ptr %45, align 8, !tbaa !5
  %784 = load ptr, ptr %64, align 8, !tbaa !30
  %785 = getelementptr inbounds ptr, ptr %784, i64 9
  %786 = load ptr, ptr %785, align 8
  %787 = invoke noundef ptr %786(ptr noundef nonnull align 8 dereferenceable(272) %64, ptr noundef %781, ptr noundef %782, ptr noundef %783, ptr noundef null)
          to label %788 unwind label %836

788:                                              ; preds = %780
  store ptr %787, ptr %47, align 8, !tbaa !5
  %789 = load ptr, ptr %47, align 8, !tbaa !5
  %790 = icmp ne ptr %789, null
  br i1 %790, label %854, label %791

791:                                              ; preds = %788
  call void @llvm.lifetime.start.p0(i64 8, ptr %48) #11
  %792 = load ptr, ptr %44, align 8, !tbaa !5
  %793 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZNK6R3Mesh14VertexPositionEPK12R3MeshVertex(ptr noundef nonnull align 8 dereferenceable(272) %64, ptr noundef %792)
          to label %794 unwind label %840

794:                                              ; preds = %791
  %795 = load ptr, ptr %64, align 8, !tbaa !30
  %796 = getelementptr inbounds ptr, ptr %795, i64 4
  %797 = load ptr, ptr %796, align 8
  %798 = invoke noundef ptr %797(ptr noundef nonnull align 8 dereferenceable(272) %64, ptr noundef nonnull align 8 dereferenceable(24) %793, ptr noundef null)
          to label %799 unwind label %840

799:                                              ; preds = %794
  store ptr %798, ptr %48, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %49) #11
  %800 = load ptr, ptr %45, align 8, !tbaa !5
  %801 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZNK6R3Mesh14VertexPositionEPK12R3MeshVertex(ptr noundef nonnull align 8 dereferenceable(272) %64, ptr noundef %800)
          to label %802 unwind label %844

802:                                              ; preds = %799
  %803 = load ptr, ptr %64, align 8, !tbaa !30
  %804 = getelementptr inbounds ptr, ptr %803, i64 4
  %805 = load ptr, ptr %804, align 8
  %806 = invoke noundef ptr %805(ptr noundef nonnull align 8 dereferenceable(272) %64, ptr noundef nonnull align 8 dereferenceable(24) %801, ptr noundef null)
          to label %807 unwind label %844

807:                                              ; preds = %802
  store ptr %806, ptr %49, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %50) #11
  %808 = load ptr, ptr %46, align 8, !tbaa !5
  %809 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZNK6R3Mesh14VertexPositionEPK12R3MeshVertex(ptr noundef nonnull align 8 dereferenceable(272) %64, ptr noundef %808)
          to label %810 unwind label %848

810:                                              ; preds = %807
  %811 = load ptr, ptr %64, align 8, !tbaa !30
  %812 = getelementptr inbounds ptr, ptr %811, i64 4
  %813 = load ptr, ptr %812, align 8
  %814 = invoke noundef ptr %813(ptr noundef nonnull align 8 dereferenceable(272) %64, ptr noundef nonnull align 8 dereferenceable(24) %809, ptr noundef null)
          to label %815 unwind label %848

815:                                              ; preds = %810
  store ptr %814, ptr %50, align 8, !tbaa !5
  %816 = load ptr, ptr %48, align 8, !tbaa !5
  %817 = load ptr, ptr %49, align 8, !tbaa !5
  %818 = load ptr, ptr %50, align 8, !tbaa !5
  %819 = load ptr, ptr %64, align 8, !tbaa !30
  %820 = getelementptr inbounds ptr, ptr %819, i64 9
  %821 = load ptr, ptr %820, align 8
  %822 = invoke noundef ptr %821(ptr noundef nonnull align 8 dereferenceable(272) %64, ptr noundef %816, ptr noundef %817, ptr noundef %818, ptr noundef null)
          to label %823 unwind label %848

823:                                              ; preds = %815
  store ptr %822, ptr %47, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #11
  br label %854

824:                                              ; preds = %754
  %825 = landingpad { ptr, i32 }
          cleanup
  %826 = extractvalue { ptr, i32 } %825, 0
  store ptr %826, ptr %21, align 8
  %827 = extractvalue { ptr, i32 } %825, 1
  store i32 %827, ptr %22, align 4
  br label %887

828:                                              ; preds = %759
  %829 = landingpad { ptr, i32 }
          cleanup
  %830 = extractvalue { ptr, i32 } %829, 0
  store ptr %830, ptr %21, align 8
  %831 = extractvalue { ptr, i32 } %829, 1
  store i32 %831, ptr %22, align 4
  br label %886

832:                                              ; preds = %764
  %833 = landingpad { ptr, i32 }
          cleanup
  %834 = extractvalue { ptr, i32 } %833, 0
  store ptr %834, ptr %21, align 8
  %835 = extractvalue { ptr, i32 } %833, 1
  store i32 %835, ptr %22, align 4
  br label %885

836:                                              ; preds = %872, %865, %858, %780, %769
  %837 = landingpad { ptr, i32 }
          cleanup
  %838 = extractvalue { ptr, i32 } %837, 0
  store ptr %838, ptr %21, align 8
  %839 = extractvalue { ptr, i32 } %837, 1
  store i32 %839, ptr %22, align 4
  br label %884

840:                                              ; preds = %794, %791
  %841 = landingpad { ptr, i32 }
          cleanup
  %842 = extractvalue { ptr, i32 } %841, 0
  store ptr %842, ptr %21, align 8
  %843 = extractvalue { ptr, i32 } %841, 1
  store i32 %843, ptr %22, align 4
  br label %853

844:                                              ; preds = %802, %799
  %845 = landingpad { ptr, i32 }
          cleanup
  %846 = extractvalue { ptr, i32 } %845, 0
  store ptr %846, ptr %21, align 8
  %847 = extractvalue { ptr, i32 } %845, 1
  store i32 %847, ptr %22, align 4
  br label %852

848:                                              ; preds = %815, %810, %807
  %849 = landingpad { ptr, i32 }
          cleanup
  %850 = extractvalue { ptr, i32 } %849, 0
  store ptr %850, ptr %21, align 8
  %851 = extractvalue { ptr, i32 } %849, 1
  store i32 %851, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #11
  br label %852

852:                                              ; preds = %848, %844
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #11
  br label %853

853:                                              ; preds = %852, %840
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #11
  br label %884

854:                                              ; preds = %823, %788
  br label %855

855:                                              ; preds = %854, %777
  %856 = load ptr, ptr %47, align 8, !tbaa !5
  %857 = icmp ne ptr %856, null
  br i1 %857, label %858, label %880

858:                                              ; preds = %855
  %859 = load ptr, ptr %47, align 8, !tbaa !5
  %860 = load ptr, ptr %33, align 8, !tbaa !5
  %861 = load i32, ptr %43, align 4, !tbaa !9
  %862 = sext i32 %861 to i64
  %863 = getelementptr inbounds i32, ptr %860, i64 %862
  %864 = load i32, ptr %863, align 4, !tbaa !9
  invoke void @_ZN6R3Mesh15SetFaceMaterialEP10R3MeshFacei(ptr noundef nonnull align 8 dereferenceable(272) %64, ptr noundef %859, i32 noundef %864)
          to label %865 unwind label %836

865:                                              ; preds = %858
  %866 = load ptr, ptr %47, align 8, !tbaa !5
  %867 = load ptr, ptr %34, align 8, !tbaa !5
  %868 = load i32, ptr %43, align 4, !tbaa !9
  %869 = sext i32 %868 to i64
  %870 = getelementptr inbounds i32, ptr %867, i64 %869
  %871 = load i32, ptr %870, align 4, !tbaa !9
  invoke void @_ZN6R3Mesh14SetFaceSegmentEP10R3MeshFacei(ptr noundef nonnull align 8 dereferenceable(272) %64, ptr noundef %866, i32 noundef %871)
          to label %872 unwind label %836

872:                                              ; preds = %865
  %873 = load ptr, ptr %47, align 8, !tbaa !5
  %874 = load ptr, ptr %35, align 8, !tbaa !5
  %875 = load i32, ptr %43, align 4, !tbaa !9
  %876 = sext i32 %875 to i64
  %877 = getelementptr inbounds i32, ptr %874, i64 %876
  %878 = load i32, ptr %877, align 4, !tbaa !9
  invoke void @_ZN6R3Mesh15SetFaceCategoryEP10R3MeshFacei(ptr noundef nonnull align 8 dereferenceable(272) %64, ptr noundef %873, i32 noundef %878)
          to label %879 unwind label %836

879:                                              ; preds = %872
  br label %880

880:                                              ; preds = %879, %855
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #11
  br label %881

881:                                              ; preds = %880
  %882 = load i32, ptr %43, align 4, !tbaa !9
  %883 = add nsw i32 %882, 1
  store i32 %883, ptr %43, align 4, !tbaa !9
  br label %749, !llvm.loop !50

884:                                              ; preds = %853, %836
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #11
  br label %885

885:                                              ; preds = %884, %832
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #11
  br label %886

886:                                              ; preds = %885, %828
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #11
  br label %887

887:                                              ; preds = %886, %824
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #11
  br label %901

888:                                              ; preds = %753
  %889 = load ptr, ptr %33, align 8, !tbaa !5
  %890 = icmp eq ptr %889, null
  br i1 %890, label %892, label %891

891:                                              ; preds = %888
  call void @_ZdaPv(ptr noundef %889) #13
  br label %892

892:                                              ; preds = %891, %888
  %893 = load ptr, ptr %34, align 8, !tbaa !5
  %894 = icmp eq ptr %893, null
  br i1 %894, label %896, label %895

895:                                              ; preds = %892
  call void @_ZdaPv(ptr noundef %893) #13
  br label %896

896:                                              ; preds = %895, %892
  %897 = load ptr, ptr %35, align 8, !tbaa !5
  %898 = icmp eq ptr %897, null
  br i1 %898, label %900, label %899

899:                                              ; preds = %896
  call void @_ZdaPv(ptr noundef %897) #13
  br label %900

900:                                              ; preds = %899, %896
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #11
  call void @_ZN8RNVArrayD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %32) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr %32) #11
  br label %1188

901:                                              ; preds = %887, %747
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #11
  br label %902

902:                                              ; preds = %901, %547
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #11
  br label %903

903:                                              ; preds = %902, %543
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #11
  br label %904

904:                                              ; preds = %903, %539
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #11
  call void @_ZN8RNVArrayD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %32) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr %32) #11
  br label %1197

905:                                              ; preds = %403
  %906 = load ptr, ptr %16, align 8, !tbaa !5
  %907 = call i32 @equal_strings(ptr noundef @.str.112, ptr noundef %906)
  %908 = icmp ne i32 %907, 0
  br i1 %908, label %909, label %1182

909:                                              ; preds = %905
  call void @llvm.lifetime.start.p0(i64 4, ptr %51) #11
  store i32 0, ptr %51, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %52) #11
  %910 = load ptr, ptr %9, align 8, !tbaa !5
  %911 = call ptr @ply_get_obj_info(ptr noundef %910, ptr noundef %51)
  store ptr %911, ptr %52, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %53) #11
  store i32 0, ptr %53, align 4, !tbaa !9
  br label %912

912:                                              ; preds = %956, %909
  %913 = load i32, ptr %53, align 4, !tbaa !9
  %914 = load i32, ptr %51, align 4, !tbaa !9
  %915 = icmp slt i32 %913, %914
  br i1 %915, label %917, label %916

916:                                              ; preds = %912
  store i32 23, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #11
  br label %959

917:                                              ; preds = %912
  call void @llvm.lifetime.start.p0(i64 8, ptr %54) #11
  %918 = load ptr, ptr %52, align 8, !tbaa !5
  %919 = load i32, ptr %53, align 4, !tbaa !9
  %920 = sext i32 %919 to i64
  %921 = getelementptr inbounds ptr, ptr %918, i64 %920
  %922 = load ptr, ptr %921, align 8, !tbaa !5
  %923 = call noalias ptr @strdup(ptr noundef %922) #11
  store ptr %923, ptr %54, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %55) #11
  %924 = load ptr, ptr %54, align 8, !tbaa !5
  %925 = call ptr @strtok(ptr noundef %924, ptr noundef @.str.113) #11
  store ptr %925, ptr %55, align 8, !tbaa !5
  %926 = load ptr, ptr %55, align 8, !tbaa !5
  %927 = icmp ne ptr %926, null
  br i1 %927, label %928, label %954

928:                                              ; preds = %917
  %929 = load ptr, ptr %55, align 8, !tbaa !5
  %930 = call i32 @strcmp(ptr noundef %929, ptr noundef @.str.114) #14
  %931 = icmp ne i32 %930, 0
  br i1 %931, label %940, label %932

932:                                              ; preds = %928
  %933 = call ptr @strtok(ptr noundef null, ptr noundef @.str.113) #11
  store ptr %933, ptr %55, align 8, !tbaa !5
  %934 = load ptr, ptr %55, align 8, !tbaa !5
  %935 = icmp ne ptr %934, null
  br i1 %935, label %936, label %939

936:                                              ; preds = %932
  %937 = load ptr, ptr %55, align 8, !tbaa !5
  %938 = call i32 @atoi(ptr noundef %937) #14
  store i32 %938, ptr %18, align 4, !tbaa !9
  br label %939

939:                                              ; preds = %936, %932
  br label %953

940:                                              ; preds = %928
  %941 = load ptr, ptr %55, align 8, !tbaa !5
  %942 = call i32 @strcmp(ptr noundef %941, ptr noundef @.str.115) #14
  %943 = icmp ne i32 %942, 0
  br i1 %943, label %952, label %944

944:                                              ; preds = %940
  %945 = call ptr @strtok(ptr noundef null, ptr noundef @.str.113) #11
  store ptr %945, ptr %55, align 8, !tbaa !5
  %946 = load ptr, ptr %55, align 8, !tbaa !5
  %947 = icmp ne ptr %946, null
  br i1 %947, label %948, label %951

948:                                              ; preds = %944
  %949 = load ptr, ptr %55, align 8, !tbaa !5
  %950 = call i32 @atoi(ptr noundef %949) #14
  store i32 %950, ptr %19, align 4, !tbaa !9
  br label %951

951:                                              ; preds = %948, %944
  br label %952

952:                                              ; preds = %951, %940
  br label %953

953:                                              ; preds = %952, %939
  br label %954

954:                                              ; preds = %953, %917
  %955 = load ptr, ptr %54, align 8, !tbaa !5
  call void @free(ptr noundef %955) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #11
  br label %956

956:                                              ; preds = %954
  %957 = load i32, ptr %53, align 4, !tbaa !9
  %958 = add nsw i32 %957, 1
  store i32 %958, ptr %53, align 4, !tbaa !9
  br label %912, !llvm.loop !51

959:                                              ; preds = %916
  %960 = load i32, ptr %19, align 4, !tbaa !9
  %961 = icmp sgt i32 %960, 0
  br i1 %961, label %962, label %1181

962:                                              ; preds = %959
  %963 = load i32, ptr %18, align 4, !tbaa !9
  %964 = icmp sgt i32 %963, 0
  br i1 %964, label %965, label %1181

965:                                              ; preds = %962
  %966 = load i32, ptr %19, align 4, !tbaa !9
  %967 = load i32, ptr %18, align 4, !tbaa !9
  %968 = mul nsw i32 %966, %967
  %969 = load i32, ptr %15, align 4, !tbaa !9
  %970 = icmp eq i32 %968, %969
  br i1 %970, label %971, label %1181

971:                                              ; preds = %965
  call void @llvm.lifetime.start.p0(i64 8, ptr %56) #11
  %972 = load i32, ptr %15, align 4, !tbaa !9
  %973 = sext i32 %972 to i64
  %974 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %973, i64 8)
  %975 = extractvalue { i64, i1 } %974, 1
  %976 = extractvalue { i64, i1 } %974, 0
  %977 = select i1 %975, i64 -1, i64 %976
  %978 = call noalias noundef nonnull ptr @_Znam(i64 noundef %977) #12
  store ptr %978, ptr %56, align 8, !tbaa !5
  store i32 0, ptr %8, align 4, !tbaa !9
  br label %979

979:                                              ; preds = %988, %971
  %980 = load i32, ptr %8, align 4, !tbaa !9
  %981 = load i32, ptr %15, align 4, !tbaa !9
  %982 = icmp slt i32 %980, %981
  br i1 %982, label %983, label %991

983:                                              ; preds = %979
  %984 = load ptr, ptr %56, align 8, !tbaa !5
  %985 = load i32, ptr %8, align 4, !tbaa !9
  %986 = sext i32 %985 to i64
  %987 = getelementptr inbounds ptr, ptr %984, i64 %986
  store ptr null, ptr %987, align 8, !tbaa !5
  br label %988

988:                                              ; preds = %983
  %989 = load i32, ptr %8, align 4, !tbaa !9
  %990 = add nsw i32 %989, 1
  store i32 %990, ptr %8, align 4, !tbaa !9
  br label %979, !llvm.loop !52

991:                                              ; preds = %979
  store i32 0, ptr %8, align 4, !tbaa !9
  br label %992

992:                                              ; preds = %1010, %991
  %993 = load i32, ptr %8, align 4, !tbaa !9
  %994 = load i32, ptr %14, align 4, !tbaa !9
  %995 = icmp slt i32 %993, %994
  br i1 %995, label %996, label %1013

996:                                              ; preds = %992
  %997 = load ptr, ptr %11, align 8, !tbaa !5
  %998 = load i32, ptr %8, align 4, !tbaa !9
  %999 = sext i32 %998 to i64
  %1000 = getelementptr inbounds ptr, ptr %997, i64 %999
  %1001 = load ptr, ptr %1000, align 8, !tbaa !5
  %1002 = getelementptr inbounds %struct.PlyProperty, ptr %1001, i32 0, i32 0
  %1003 = load ptr, ptr %1002, align 8, !tbaa !21
  %1004 = call i32 @equal_strings(ptr noundef @.str.97, ptr noundef %1003)
  %1005 = icmp ne i32 %1004, 0
  br i1 %1005, label %1006, label %1009

1006:                                             ; preds = %996
  %1007 = load ptr, ptr %9, align 8, !tbaa !5
  %1008 = load ptr, ptr %16, align 8, !tbaa !5
  call void @ply_get_property(ptr noundef %1007, ptr noundef %1008, ptr noundef @_ZZN6R3Mesh11ReadPlyFileEPKcE16range_grid_props)
  br label %1009

1009:                                             ; preds = %1006, %996
  br label %1010

1010:                                             ; preds = %1009
  %1011 = load i32, ptr %8, align 4, !tbaa !9
  %1012 = add nsw i32 %1011, 1
  store i32 %1012, ptr %8, align 4, !tbaa !9
  br label %992, !llvm.loop !53

1013:                                             ; preds = %992
  store i32 0, ptr %8, align 4, !tbaa !9
  br label %1014

1014:                                             ; preds = %1049, %1013
  %1015 = load i32, ptr %8, align 4, !tbaa !9
  %1016 = load i32, ptr %15, align 4, !tbaa !9
  %1017 = icmp slt i32 %1015, %1016
  br i1 %1017, label %1018, label %1052

1018:                                             ; preds = %1014
  call void @llvm.lifetime.start.p0(i64 16, ptr %57) #11
  %1019 = getelementptr inbounds %struct.PlyRangeGrid, ptr %57, i32 0, i32 0
  store i8 0, ptr %1019, align 8, !tbaa !54
  %1020 = getelementptr inbounds %struct.PlyRangeGrid, ptr %57, i32 0, i32 1
  store ptr null, ptr %1020, align 8, !tbaa !56
  %1021 = load ptr, ptr %9, align 8, !tbaa !5
  call void @ply_get_element(ptr noundef %1021, ptr noundef %57)
  %1022 = getelementptr inbounds %struct.PlyRangeGrid, ptr %57, i32 0, i32 1
  %1023 = load ptr, ptr %1022, align 8, !tbaa !56
  %1024 = icmp ne ptr %1023, null
  br i1 %1024, label %1026, label %1025

1025:                                             ; preds = %1018
  store i32 34, ptr %20, align 4
  br label %1046

1026:                                             ; preds = %1018
  %1027 = getelementptr inbounds %struct.PlyRangeGrid, ptr %57, i32 0, i32 0
  %1028 = load i8, ptr %1027, align 8, !tbaa !54
  %1029 = zext i8 %1028 to i32
  %1030 = icmp eq i32 %1029, 0
  br i1 %1030, label %1031, label %1032

1031:                                             ; preds = %1026
  store i32 34, ptr %20, align 4
  br label %1046

1032:                                             ; preds = %1026
  %1033 = getelementptr inbounds %class.R3Mesh, ptr %64, i32 0, i32 1
  %1034 = getelementptr inbounds %struct.PlyRangeGrid, ptr %57, i32 0, i32 1
  %1035 = load ptr, ptr %1034, align 8, !tbaa !56
  %1036 = getelementptr inbounds i32, ptr %1035, i64 0
  %1037 = load i32, ptr %1036, align 4, !tbaa !9
  %1038 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7RNArrayIP12R3MeshVertexEixEi(ptr noundef nonnull align 8 dereferenceable(16) %1033, i32 noundef %1037)
  %1039 = load ptr, ptr %1038, align 8, !tbaa !5
  %1040 = load ptr, ptr %56, align 8, !tbaa !5
  %1041 = load i32, ptr %8, align 4, !tbaa !9
  %1042 = sext i32 %1041 to i64
  %1043 = getelementptr inbounds ptr, ptr %1040, i64 %1042
  store ptr %1039, ptr %1043, align 8, !tbaa !5
  %1044 = getelementptr inbounds %struct.PlyRangeGrid, ptr %57, i32 0, i32 1
  %1045 = load ptr, ptr %1044, align 8, !tbaa !56
  call void @free(ptr noundef %1045) #11
  store i32 0, ptr %20, align 4
  br label %1046

1046:                                             ; preds = %1032, %1031, %1025
  call void @llvm.lifetime.end.p0(i64 16, ptr %57) #11
  %1047 = load i32, ptr %20, align 4
  switch i32 %1047, label %1203 [
    i32 0, label %1048
    i32 34, label %1049
  ]

1048:                                             ; preds = %1046
  br label %1049

1049:                                             ; preds = %1048, %1046
  %1050 = load i32, ptr %8, align 4, !tbaa !9
  %1051 = add nsw i32 %1050, 1
  store i32 %1051, ptr %8, align 4, !tbaa !9
  br label %1014, !llvm.loop !57

1052:                                             ; preds = %1014
  call void @llvm.lifetime.start.p0(i64 4, ptr %58) #11
  store i32 0, ptr %58, align 4, !tbaa !9
  br label %1053

1053:                                             ; preds = %1173, %1052
  %1054 = load i32, ptr %58, align 4, !tbaa !9
  %1055 = load i32, ptr %18, align 4, !tbaa !9
  %1056 = sub nsw i32 %1055, 1
  %1057 = icmp slt i32 %1054, %1056
  br i1 %1057, label %1059, label %1058

1058:                                             ; preds = %1053
  store i32 35, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %58) #11
  br label %1176

1059:                                             ; preds = %1053
  call void @llvm.lifetime.start.p0(i64 4, ptr %59) #11
  store i32 0, ptr %59, align 4, !tbaa !9
  br label %1060

1060:                                             ; preds = %1169, %1059
  %1061 = load i32, ptr %59, align 4, !tbaa !9
  %1062 = load i32, ptr %19, align 4, !tbaa !9
  %1063 = sub nsw i32 %1062, 1
  %1064 = icmp slt i32 %1061, %1063
  br i1 %1064, label %1066, label %1065

1065:                                             ; preds = %1060
  store i32 38, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %59) #11
  br label %1172

1066:                                             ; preds = %1060
  call void @llvm.lifetime.start.p0(i64 8, ptr %60) #11
  %1067 = load ptr, ptr %56, align 8, !tbaa !5
  %1068 = load i32, ptr %58, align 4, !tbaa !9
  %1069 = load i32, ptr %19, align 4, !tbaa !9
  %1070 = mul nsw i32 %1068, %1069
  %1071 = load i32, ptr %59, align 4, !tbaa !9
  %1072 = add nsw i32 %1070, %1071
  %1073 = sext i32 %1072 to i64
  %1074 = getelementptr inbounds ptr, ptr %1067, i64 %1073
  %1075 = load ptr, ptr %1074, align 8, !tbaa !5
  store ptr %1075, ptr %60, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %61) #11
  %1076 = load ptr, ptr %56, align 8, !tbaa !5
  %1077 = load i32, ptr %58, align 4, !tbaa !9
  %1078 = add nsw i32 %1077, 1
  %1079 = load i32, ptr %19, align 4, !tbaa !9
  %1080 = mul nsw i32 %1078, %1079
  %1081 = load i32, ptr %59, align 4, !tbaa !9
  %1082 = add nsw i32 %1080, %1081
  %1083 = sext i32 %1082 to i64
  %1084 = getelementptr inbounds ptr, ptr %1076, i64 %1083
  %1085 = load ptr, ptr %1084, align 8, !tbaa !5
  store ptr %1085, ptr %61, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %62) #11
  %1086 = load ptr, ptr %56, align 8, !tbaa !5
  %1087 = load i32, ptr %58, align 4, !tbaa !9
  %1088 = load i32, ptr %19, align 4, !tbaa !9
  %1089 = mul nsw i32 %1087, %1088
  %1090 = load i32, ptr %59, align 4, !tbaa !9
  %1091 = add nsw i32 %1090, 1
  %1092 = add nsw i32 %1089, %1091
  %1093 = sext i32 %1092 to i64
  %1094 = getelementptr inbounds ptr, ptr %1086, i64 %1093
  %1095 = load ptr, ptr %1094, align 8, !tbaa !5
  store ptr %1095, ptr %62, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %63) #11
  %1096 = load ptr, ptr %56, align 8, !tbaa !5
  %1097 = load i32, ptr %58, align 4, !tbaa !9
  %1098 = add nsw i32 %1097, 1
  %1099 = load i32, ptr %19, align 4, !tbaa !9
  %1100 = mul nsw i32 %1098, %1099
  %1101 = load i32, ptr %59, align 4, !tbaa !9
  %1102 = add nsw i32 %1101, 1
  %1103 = add nsw i32 %1100, %1102
  %1104 = sext i32 %1103 to i64
  %1105 = getelementptr inbounds ptr, ptr %1096, i64 %1104
  %1106 = load ptr, ptr %1105, align 8, !tbaa !5
  store ptr %1106, ptr %63, align 8, !tbaa !5
  %1107 = load ptr, ptr %60, align 8, !tbaa !5
  %1108 = icmp ne ptr %1107, null
  br i1 %1108, label %1109, label %1152

1109:                                             ; preds = %1066
  %1110 = load ptr, ptr %61, align 8, !tbaa !5
  %1111 = icmp ne ptr %1110, null
  br i1 %1111, label %1112, label %1139

1112:                                             ; preds = %1109
  %1113 = load ptr, ptr %62, align 8, !tbaa !5
  %1114 = icmp ne ptr %1113, null
  br i1 %1114, label %1115, label %1130

1115:                                             ; preds = %1112
  %1116 = load ptr, ptr %63, align 8, !tbaa !5
  %1117 = icmp ne ptr %1116, null
  br i1 %1117, label %1118, label %1125

1118:                                             ; preds = %1115
  %1119 = load ptr, ptr %60, align 8, !tbaa !5
  %1120 = load ptr, ptr %62, align 8, !tbaa !5
  %1121 = load ptr, ptr %63, align 8, !tbaa !5
  call void @_ZL22CreatePlyRangeGridFaceP6R3MeshP12R3MeshVertexS2_S2_d(ptr noundef %64, ptr noundef %1119, ptr noundef %1120, ptr noundef %1121, double noundef 8.000000e+00)
  %1122 = load ptr, ptr %60, align 8, !tbaa !5
  %1123 = load ptr, ptr %63, align 8, !tbaa !5
  %1124 = load ptr, ptr %61, align 8, !tbaa !5
  call void @_ZL22CreatePlyRangeGridFaceP6R3MeshP12R3MeshVertexS2_S2_d(ptr noundef %64, ptr noundef %1122, ptr noundef %1123, ptr noundef %1124, double noundef 8.000000e+00)
  br label %1129

1125:                                             ; preds = %1115
  %1126 = load ptr, ptr %60, align 8, !tbaa !5
  %1127 = load ptr, ptr %62, align 8, !tbaa !5
  %1128 = load ptr, ptr %61, align 8, !tbaa !5
  call void @_ZL22CreatePlyRangeGridFaceP6R3MeshP12R3MeshVertexS2_S2_d(ptr noundef %64, ptr noundef %1126, ptr noundef %1127, ptr noundef %1128, double noundef 8.000000e+00)
  br label %1129

1129:                                             ; preds = %1125, %1118
  br label %1138

1130:                                             ; preds = %1112
  %1131 = load ptr, ptr %63, align 8, !tbaa !5
  %1132 = icmp ne ptr %1131, null
  br i1 %1132, label %1133, label %1137

1133:                                             ; preds = %1130
  %1134 = load ptr, ptr %60, align 8, !tbaa !5
  %1135 = load ptr, ptr %63, align 8, !tbaa !5
  %1136 = load ptr, ptr %61, align 8, !tbaa !5
  call void @_ZL22CreatePlyRangeGridFaceP6R3MeshP12R3MeshVertexS2_S2_d(ptr noundef %64, ptr noundef %1134, ptr noundef %1135, ptr noundef %1136, double noundef 8.000000e+00)
  br label %1137

1137:                                             ; preds = %1133, %1130
  br label %1138

1138:                                             ; preds = %1137, %1129
  br label %1151

1139:                                             ; preds = %1109
  %1140 = load ptr, ptr %62, align 8, !tbaa !5
  %1141 = icmp ne ptr %1140, null
  br i1 %1141, label %1142, label %1150

1142:                                             ; preds = %1139
  %1143 = load ptr, ptr %63, align 8, !tbaa !5
  %1144 = icmp ne ptr %1143, null
  br i1 %1144, label %1145, label %1149

1145:                                             ; preds = %1142
  %1146 = load ptr, ptr %60, align 8, !tbaa !5
  %1147 = load ptr, ptr %62, align 8, !tbaa !5
  %1148 = load ptr, ptr %63, align 8, !tbaa !5
  call void @_ZL22CreatePlyRangeGridFaceP6R3MeshP12R3MeshVertexS2_S2_d(ptr noundef %64, ptr noundef %1146, ptr noundef %1147, ptr noundef %1148, double noundef 8.000000e+00)
  br label %1149

1149:                                             ; preds = %1145, %1142
  br label %1150

1150:                                             ; preds = %1149, %1139
  br label %1151

1151:                                             ; preds = %1150, %1138
  br label %1168

1152:                                             ; preds = %1066
  %1153 = load ptr, ptr %61, align 8, !tbaa !5
  %1154 = icmp ne ptr %1153, null
  br i1 %1154, label %1155, label %1167

1155:                                             ; preds = %1152
  %1156 = load ptr, ptr %62, align 8, !tbaa !5
  %1157 = icmp ne ptr %1156, null
  br i1 %1157, label %1158, label %1166

1158:                                             ; preds = %1155
  %1159 = load ptr, ptr %63, align 8, !tbaa !5
  %1160 = icmp ne ptr %1159, null
  br i1 %1160, label %1161, label %1165

1161:                                             ; preds = %1158
  %1162 = load ptr, ptr %62, align 8, !tbaa !5
  %1163 = load ptr, ptr %63, align 8, !tbaa !5
  %1164 = load ptr, ptr %61, align 8, !tbaa !5
  call void @_ZL22CreatePlyRangeGridFaceP6R3MeshP12R3MeshVertexS2_S2_d(ptr noundef %64, ptr noundef %1162, ptr noundef %1163, ptr noundef %1164, double noundef 8.000000e+00)
  br label %1165

1165:                                             ; preds = %1161, %1158
  br label %1166

1166:                                             ; preds = %1165, %1155
  br label %1167

1167:                                             ; preds = %1166, %1152
  br label %1168

1168:                                             ; preds = %1167, %1151
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %62) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #11
  br label %1169

1169:                                             ; preds = %1168
  %1170 = load i32, ptr %59, align 4, !tbaa !9
  %1171 = add nsw i32 %1170, 1
  store i32 %1171, ptr %59, align 4, !tbaa !9
  br label %1060, !llvm.loop !58

1172:                                             ; preds = %1065
  br label %1173

1173:                                             ; preds = %1172
  %1174 = load i32, ptr %58, align 4, !tbaa !9
  %1175 = add nsw i32 %1174, 1
  store i32 %1175, ptr %58, align 4, !tbaa !9
  br label %1053, !llvm.loop !59

1176:                                             ; preds = %1058
  %1177 = load ptr, ptr %56, align 8, !tbaa !5
  %1178 = icmp eq ptr %1177, null
  br i1 %1178, label %1180, label %1179

1179:                                             ; preds = %1176
  call void @_ZdaPv(ptr noundef %1177) #13
  br label %1180

1180:                                             ; preds = %1179, %1176
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #11
  br label %1181

1181:                                             ; preds = %1180, %965, %962, %959
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #11
  br label %1187

1182:                                             ; preds = %905
  %1183 = load ptr, ptr %9, align 8, !tbaa !5
  %1184 = load ptr, ptr %16, align 8, !tbaa !5
  %1185 = load i32, ptr %15, align 4, !tbaa !9
  %1186 = call ptr @ply_get_other_element(ptr noundef %1183, ptr noundef %1184, i32 noundef %1185)
  br label %1187

1187:                                             ; preds = %1182, %1181
  br label %1188

1188:                                             ; preds = %1187, %900
  br label %1189

1189:                                             ; preds = %1188, %402
  br label %1190

1190:                                             ; preds = %1189
  %1191 = load i32, ptr %7, align 4, !tbaa !9
  %1192 = add nsw i32 %1191, 1
  store i32 %1192, ptr %7, align 4, !tbaa !9
  br label %82, !llvm.loop !60

1193:                                             ; preds = %82
  %1194 = load ptr, ptr %9, align 8, !tbaa !5
  call void @ply_close(ptr noundef %1194)
  store i32 1, ptr %3, align 4
  store i32 1, ptr %20, align 4
  br label %1195

1195:                                             ; preds = %1193, %76, %69
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #11
  %1196 = load i32, ptr %3, align 4
  ret i32 %1196

1197:                                             ; preds = %904, %149
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #11
  br label %1198

1198:                                             ; preds = %1197
  %1199 = load ptr, ptr %21, align 8
  %1200 = load i32, ptr %22, align 4
  %1201 = insertvalue { ptr, i32 } poison, ptr %1199, 0
  %1202 = insertvalue { ptr, i32 } %1201, i32 %1200, 1
  resume { ptr, i32 } %1202

1203:                                             ; preds = %1046, %727
  unreachable
}

declare ptr @ply_read(ptr noundef, ptr noundef, ptr noundef) #1

declare void @ply_get_info(ptr noundef, ptr noundef, ptr noundef) #1

declare ptr @ply_get_element_description(ptr noundef, ptr noundef, ptr noundef, ptr noundef) #1

declare i32 @equal_strings(ptr noundef, ptr noundef) #1

declare void @_ZN8RNVArray6ResizeEi(ptr noundef nonnull align 8 dereferenceable(16), i32 noundef) #1

declare void @ply_get_property(ptr noundef, ptr noundef, ptr noundef) #1

declare void @ply_get_element(ptr noundef, ptr noundef) #1

declare void @_ZN5RNRgbC1Eddd(ptr noundef nonnull align 8 dereferenceable(24), double noundef, double noundef, double noundef) unnamed_addr #1

; Function Attrs: nounwind
declare void @free(ptr noundef) #10

declare ptr @ply_get_obj_info(ptr noundef, ptr noundef) #1

; Function Attrs: nounwind
declare noalias ptr @strdup(ptr noundef) #10

; Function Attrs: mustprogress uwtable
declare hidden void @_ZL22CreatePlyRangeGridFaceP6R3MeshP12R3MeshVertexS2_S2_d(ptr noundef, ptr noundef, ptr noundef, ptr noundef, double noundef) #0

declare ptr @ply_get_other_element(ptr noundef, ptr noundef, i32 noundef) #1

declare void @ply_close(ptr noundef) #1

declare void @_ZN12R3MeshVertexC1Ev(ptr)

declare void @_ZN12R3MeshVertexD1Ev(ptr)

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !6, i64 56}
!12 = !{!"_ZTS6R3Mesh", !13, i64 8, !15, i64 24, !16, i64 40, !6, i64 56, !6, i64 64, !6, i64 72, !7, i64 80, !17, i64 208, !6, i64 264}
!13 = !{!"_ZTS7RNArrayIP12R3MeshVertexE", !14, i64 0}
!14 = !{!"_ZTS8RNVArray", !6, i64 0, !10, i64 8, !10, i64 12}
!15 = !{!"_ZTS7RNArrayIP10R3MeshEdgeE", !14, i64 0}
!16 = !{!"_ZTS7RNArrayIP10R3MeshFaceE", !14, i64 0}
!17 = !{!"_ZTS5R3Box", !18, i64 0, !20, i64 8, !20, i64 32}
!18 = !{!"_ZTS7R3Solid", !19, i64 0}
!19 = !{!"_ZTS7R3Shape"}
!20 = !{!"_ZTS7R3Point", !7, i64 0}
!21 = !{!22, !6, i64 0}
!22 = !{!"_ZTS11PlyProperty", !6, i64 0, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !10, i64 24, !10, i64 28, !10, i64 32}
!23 = distinct !{!23, !24}
!24 = !{!"llvm.loop.mustprogress"}
!25 = !{!26, !27, i64 0}
!26 = !{!"_ZTSZN6R3Mesh11ReadPlyFileEPKcE9PlyVertex", !27, i64 0, !27, i64 4, !27, i64 8, !27, i64 12, !27, i64 16, !27, i64 20, !27, i64 24, !27, i64 28, !7, i64 32, !7, i64 33, !7, i64 34}
!27 = !{!"float", !7, i64 0}
!28 = !{!26, !27, i64 4}
!29 = !{!26, !27, i64 8}
!30 = !{!31, !31, i64 0}
!31 = !{!"vtable pointer", !8, i64 0}
!32 = !{!26, !27, i64 12}
!33 = !{!26, !27, i64 16}
!34 = !{!26, !27, i64 20}
!35 = !{!26, !27, i64 24}
!36 = !{!26, !27, i64 28}
!37 = !{!26, !7, i64 32}
!38 = !{!26, !7, i64 33}
!39 = !{!26, !7, i64 34}
!40 = distinct !{!40, !24}
!41 = distinct !{!41, !24}
!42 = !{!43, !7, i64 0}
!43 = !{!"_ZTSZN6R3Mesh11ReadPlyFileEPKcE7PlyFace", !7, i64 0, !6, i64 8, !10, i64 16, !10, i64 20, !10, i64 24}
!44 = !{!43, !6, i64 8}
!45 = !{!43, !10, i64 16}
!46 = !{!43, !10, i64 20}
!47 = !{!43, !10, i64 24}
!48 = distinct !{!48, !24}
!49 = distinct !{!49, !24}
!50 = distinct !{!50, !24}
!51 = distinct !{!51, !24}
!52 = distinct !{!52, !24}
!53 = distinct !{!53, !24}
!54 = !{!55, !7, i64 0}
!55 = !{!"_ZTSZN6R3Mesh11ReadPlyFileEPKcE12PlyRangeGrid", !7, i64 0, !6, i64 8}
!56 = !{!55, !6, i64 8}
!57 = distinct !{!57, !24}
!58 = distinct !{!58, !24}
!59 = distinct !{!59, !24}
!60 = distinct !{!60, !24}


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

%struct.PlyProperty = type { ptr, i32, i32, i32, i32, i32, i32, i32 }
%struct.PlyVertex = type { float, float, float, float, float, float, float, float, i8, i8, i8 }
%class.R3Point = type { [3 x double] }
%class.R3Vector = type { [3 x double] }
%class.R2Point = type { [2 x double] }
%class.RNRgb = type { [3 x double] }
%class.RNArray = type { %class.RNVArray }
%class.RNVArray = type { ptr, i32, i32 }
%struct.PlyFace = type { i8, ptr, i32, i32, i32 }
%struct.PlyRangeGrid = type { i8, ptr }
%class.R3MeshVertex = type { ptr, %class.RNArray.0, %class.R3Point, %class.R3Vector, %class.R2Point, %class.RNRgb, double, i32, %class.RNFlags, double, i32, ptr }
%class.RNArray.0 = type { %class.RNVArray }
%class.RNFlags = type { i64 }

@.str = external hidden unnamed_addr constant [41 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [88 x i8], align 1
@.str.42 = external hidden unnamed_addr constant [5 x i8], align 1
@_ZZN6R3Mesh11ReadPlyFileEPKcE10vert_props = external hidden global [11 x %struct.PlyProperty], align 16
@.str.86 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.87 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.88 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.89 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.90 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.91 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.92 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.93 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.94 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.95 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.96 = external hidden unnamed_addr constant [5 x i8], align 1
@_ZZN6R3Mesh11ReadPlyFileEPKcE10face_props = external hidden global [5 x %struct.PlyProperty], align 16
@.str.97 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.98 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.99 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.100 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.101 = external hidden unnamed_addr constant [12 x i8], align 1
@_ZZN6R3Mesh11ReadPlyFileEPKcE16range_grid_props = external hidden global [1 x %struct.PlyProperty], align 16
@.str.102 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.103 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.104 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.105 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.106 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.107 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.108 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.109 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.110 = external hidden unnamed_addr constant [41 x i8], align 1
@.str.111 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.112 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.113 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.114 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.115 = external hidden unnamed_addr constant [9 x i8], align 1

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

declare i32 @__gxx_personality_v0(...)

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

; Function Attrs: mustprogress 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) local_unnamed_addr #3

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

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

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

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

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

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

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

declare void @_ZN7R3PointC1Eddd(ptr noundef nonnull align 8 dereferenceable(24), double noundef, double noundef, double noundef) unnamed_addr #1

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

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

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

declare void @_ZN8R3VectorC1Eddd(ptr noundef nonnull align 8 dereferenceable(24), double noundef, double noundef, double noundef) unnamed_addr #1

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

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

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

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

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

declare void @_Z6RNFailPKcz(ptr noundef, ...) local_unnamed_addr #1

; Function Attrs: nofree nounwind
declare noalias noundef ptr @fopen(ptr nocapture noundef readonly, ptr nocapture noundef readonly) local_unnamed_addr #8

; Function Attrs: mustprogress nofree nounwind willreturn memory(argmem: read)
declare i32 @strcmp(ptr nocapture noundef, ptr nocapture noundef) local_unnamed_addr #9

declare void @_ZN7R2PointC1Edd(ptr noundef nonnull align 8 dereferenceable(16), double noundef, double noundef) unnamed_addr #1

; Function Attrs: inlinehint mustprogress nofree nounwind willreturn memory(read) uwtable
declare i32 @atoi(ptr nocapture noundef nonnull) local_unnamed_addr #10

; Function Attrs: nofree nounwind
declare noundef i32 @fclose(ptr nocapture noundef) local_unnamed_addr #8

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

; Function Attrs: mustprogress nofree nounwind willreturn
declare ptr @strtok(ptr noundef, ptr nocapture noundef readonly) local_unnamed_addr #12

; Function Attrs: mustprogress uwtable
define dso_local noundef range(i32 0, 2) i32 @_ZN6R3Mesh11ReadPlyFileEPKc(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef %1) unnamed_addr #0 align 2 personality ptr @__gxx_personality_v0 {
  %3 = alloca i32, align 4
  %4 = alloca ptr, align 8
  %5 = alloca i32, align 4
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca float, align 4
  %9 = alloca %struct.PlyVertex, align 4
  %10 = alloca %class.R3Point, align 8
  %11 = alloca %class.R3Vector, align 8
  %12 = alloca %class.R2Point, align 8
  %13 = alloca %class.RNRgb, align 8
  %14 = alloca %class.RNArray, align 8
  %15 = alloca %struct.PlyFace, align 8
  %16 = alloca i32, align 4
  %17 = alloca %struct.PlyRangeGrid, align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %3) #16
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %4) #16
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %5) #16
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %6) #16
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %7) #16
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %8) #16
  %18 = tail call noalias ptr @fopen(ptr noundef %1, ptr noundef nonnull @.str.102)
  %.not = icmp eq ptr %18, null
  br i1 %.not, label %19, label %20

19:                                               ; preds = %2
  tail call void (ptr, ...) @_Z6RNFailPKcz(ptr noundef nonnull @.str.103, ptr noundef %1)
  br label %496

20:                                               ; preds = %2
  %21 = call ptr @ply_read(ptr noundef nonnull %18, ptr noundef nonnull %3, ptr noundef nonnull %4)
  %.not339 = icmp eq ptr %21, null
  br i1 %.not339, label %22, label %24

22:                                               ; preds = %20
  call void (ptr, ...) @_Z6RNFailPKcz(ptr noundef nonnull @.str.104, ptr noundef %1)
  %23 = call i32 @fclose(ptr noundef nonnull %18)
  br label %496

24:                                               ; preds = %20
  call void @ply_get_info(ptr noundef nonnull %21, ptr noundef nonnull %8, ptr noundef nonnull %5)
  %25 = load i32, ptr %3, align 4, !tbaa !5
  %26 = icmp sgt i32 %25, 0
  br i1 %26, label %.lr.ph478, label %._crit_edge479

.lr.ph478:                                        ; preds = %24
  %27 = getelementptr inbounds i8, ptr %0, i64 56
  %28 = getelementptr inbounds i8, ptr %0, i64 8
  %29 = getelementptr inbounds i8, ptr %9, i64 4
  %30 = getelementptr inbounds i8, ptr %9, i64 8
  %31 = getelementptr inbounds i8, ptr %9, i64 12
  %32 = getelementptr inbounds i8, ptr %9, i64 16
  %33 = getelementptr inbounds i8, ptr %9, i64 20
  %34 = getelementptr inbounds i8, ptr %9, i64 24
  %35 = getelementptr inbounds i8, ptr %9, i64 28
  %36 = getelementptr inbounds i8, ptr %9, i64 32
  %37 = getelementptr inbounds i8, ptr %9, i64 33
  %38 = getelementptr inbounds i8, ptr %9, i64 34
  %39 = getelementptr inbounds i8, ptr %0, i64 40
  %40 = getelementptr inbounds i8, ptr %15, i64 8
  %41 = getelementptr inbounds i8, ptr %15, i64 16
  %42 = getelementptr inbounds i8, ptr %15, i64 20
  %43 = getelementptr inbounds i8, ptr %15, i64 24
  %44 = getelementptr inbounds i8, ptr %17, i64 8
  br label %45

45:                                               ; preds = %.lr.ph478, %.loopexit419
  %indvars.iv518 = phi i64 [ 0, %.lr.ph478 ], [ %indvars.iv.next519, %.loopexit419 ]
  %.0266475 = phi i32 [ 0, %.lr.ph478 ], [ %.3269, %.loopexit419 ]
  %.0272474 = phi i32 [ 0, %.lr.ph478 ], [ %.3275, %.loopexit419 ]
  %46 = load ptr, ptr %4, align 8, !tbaa !9
  %47 = getelementptr inbounds ptr, ptr %46, i64 %indvars.iv518
  %48 = load ptr, ptr %47, align 8, !tbaa !9
  %49 = call ptr @ply_get_element_description(ptr noundef nonnull %21, ptr noundef %48, ptr noundef nonnull %7, ptr noundef nonnull %6)
  %50 = call i32 @equal_strings(ptr noundef nonnull @.str.105, ptr noundef %48)
  %.not340 = icmp eq i32 %50, 0
  br i1 %.not340, label %176, label %51

51:                                               ; preds = %45
  %52 = load i32, ptr %7, align 4, !tbaa !5
  %53 = sext i32 %52 to i64
  %54 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %53, i64 160)
  %55 = extractvalue { i64, i1 } %54, 1
  %56 = extractvalue { i64, i1 } %54, 0
  %57 = or disjoint i64 %56, 8
  %58 = select i1 %55, i64 -1, i64 %57
  %59 = call noalias noundef nonnull ptr @_Znam(i64 noundef %58) #17
  store i64 %53, ptr %59, align 16
  %.ptr381 = getelementptr inbounds i8, ptr %59, i64 8
  %60 = icmp eq i32 %52, 0
  br i1 %60, label %.loopexit420, label %61

61:                                               ; preds = %51
  %62 = getelementptr inbounds %class.R3MeshVertex, ptr %.ptr381, i64 %53
  br label %63

63:                                               ; preds = %64, %61
  %.idx = phi i64 [ 8, %61 ], [ %.add, %64 ]
  %.ptr.ptr = getelementptr inbounds i8, ptr %59, i64 %.idx
  invoke void @_ZN12R3MeshVertexC1Ev(ptr noundef nonnull align 8 dereferenceable(160) %.ptr.ptr)
          to label %64 unwind label %75

64:                                               ; preds = %63
  %.add = add nuw nsw i64 %.idx, 160
  %.ptr380 = getelementptr inbounds i8, ptr %59, i64 %.add
  %65 = icmp eq ptr %.ptr380, %62
  br i1 %65, label %.loopexit420.loopexit, label %63

.loopexit420.loopexit:                            ; preds = %64
  %.pre = load i32, ptr %7, align 4, !tbaa !5
  br label %.loopexit420

.loopexit420:                                     ; preds = %.loopexit420.loopexit, %51
  %66 = phi i32 [ %.pre, %.loopexit420.loopexit ], [ 0, %51 ]
  store ptr %.ptr381, ptr %27, align 8, !tbaa !11
  call void @_ZN8RNVArray6ResizeEi(ptr noundef nonnull align 8 dereferenceable(16) %28, i32 noundef %66)
  %67 = load i32, ptr %6, align 4, !tbaa !5
  %68 = icmp sgt i32 %67, 0
  br i1 %68, label %.lr.ph, label %.preheader418

.preheader418:                                    ; preds = %131, %.loopexit420
  %.0304.lcssa = phi i32 [ 0, %.loopexit420 ], [ %.1305, %131 ]
  %.0301.lcssa = phi i32 [ 0, %.loopexit420 ], [ %.1302, %131 ]
  %.0299.lcssa = phi i32 [ 0, %.loopexit420 ], [ %.1300, %131 ]
  %69 = load i32, ptr %7, align 4, !tbaa !5
  %70 = icmp sgt i32 %69, 0
  br i1 %70, label %.lr.ph438, label %.loopexit419

.lr.ph438:                                        ; preds = %.preheader418
  %.not388 = icmp eq i32 %.0299.lcssa, 0
  %.not389 = icmp eq i32 %.0301.lcssa, 0
  %.not390 = icmp eq i32 %.0304.lcssa, 0
  br label %135

.lr.ph:                                           ; preds = %.loopexit420, %131
  %indvars.iv = phi i64 [ %indvars.iv.next, %131 ], [ 0, %.loopexit420 ]
  %.0299433 = phi i32 [ %.1300, %131 ], [ 0, %.loopexit420 ]
  %.0301432 = phi i32 [ %.1302, %131 ], [ 0, %.loopexit420 ]
  %.0304431 = phi i32 [ %.1305, %131 ], [ 0, %.loopexit420 ]
  %71 = getelementptr inbounds ptr, ptr %49, i64 %indvars.iv
  %72 = load ptr, ptr %71, align 8, !tbaa !9
  %73 = load ptr, ptr %72, align 8, !tbaa !21
  %74 = call i32 @equal_strings(ptr noundef nonnull @.str.86, ptr noundef %73)
  %.not391 = icmp eq i32 %74, 0
  br i1 %.not391, label %79, label %.sink.split

75:                                               ; preds = %63
  %76 = landingpad { ptr, i32 }
          cleanup
  %77 = icmp eq i64 %.idx, 8
  br i1 %77, label %.loopexit, label %.preheader

.preheader:                                       ; preds = %75, %.preheader
  %.idx382 = phi i64 [ %.add383, %.preheader ], [ %.idx, %75 ]
  %.add383 = add nsw i64 %.idx382, -160
  %.ptr385 = getelementptr inbounds i8, ptr %59, i64 %.add383
  call void @_ZN12R3MeshVertexD1Ev(ptr noundef nonnull align 8 dereferenceable(160) %.ptr385) #16
  %78 = icmp eq i64 %.add383, 8
  br i1 %78, label %.loopexit, label %.preheader

.loopexit:                                        ; preds = %.preheader, %75
  call void @_ZdaPvm(ptr noundef nonnull %59, i64 noundef %58) #18
  br label %497

79:                                               ; preds = %.lr.ph
  %80 = load ptr, ptr %71, align 8, !tbaa !9
  %81 = load ptr, ptr %80, align 8, !tbaa !21
  %82 = call i32 @equal_strings(ptr noundef nonnull @.str.87, ptr noundef %81)
  %.not392 = icmp eq i32 %82, 0
  br i1 %.not392, label %83, label %.sink.split

83:                                               ; preds = %79
  %84 = load ptr, ptr %71, align 8, !tbaa !9
  %85 = load ptr, ptr %84, align 8, !tbaa !21
  %86 = call i32 @equal_strings(ptr noundef nonnull @.str.88, ptr noundef %85)
  %.not393 = icmp eq i32 %86, 0
  br i1 %.not393, label %87, label %.sink.split

87:                                               ; preds = %83
  %88 = load ptr, ptr %71, align 8, !tbaa !9
  %89 = load ptr, ptr %88, align 8, !tbaa !21
  %90 = call i32 @equal_strings(ptr noundef nonnull @.str.89, ptr noundef %89)
  %.not394 = icmp eq i32 %90, 0
  br i1 %.not394, label %91, label %.sink.split

91:                                               ; preds = %87
  %92 = load ptr, ptr %71, align 8, !tbaa !9
  %93 = load ptr, ptr %92, align 8, !tbaa !21
  %94 = call i32 @equal_strings(ptr noundef nonnull @.str.90, ptr noundef %93)
  %.not395 = icmp eq i32 %94, 0
  br i1 %.not395, label %95, label %.sink.split

95:                                               ; preds = %91
  %96 = load ptr, ptr %71, align 8, !tbaa !9
  %97 = load ptr, ptr %96, align 8, !tbaa !21
  %98 = call i32 @equal_strings(ptr noundef nonnull @.str.91, ptr noundef %97)
  %.not396 = icmp eq i32 %98, 0
  br i1 %.not396, label %99, label %.sink.split

99:                                               ; preds = %95
  %100 = load ptr, ptr %71, align 8, !tbaa !9
  %101 = load ptr, ptr %100, align 8, !tbaa !21
  %102 = call i32 @equal_strings(ptr noundef nonnull @.str.92, ptr noundef %101)
  %.not397 = icmp eq i32 %102, 0
  br i1 %.not397, label %103, label %.sink.split

103:                                              ; preds = %99
  %104 = load ptr, ptr %71, align 8, !tbaa !9
  %105 = load ptr, ptr %104, align 8, !tbaa !21
  %106 = call i32 @equal_strings(ptr noundef nonnull @.str.93, ptr noundef %105)
  %.not398 = icmp eq i32 %106, 0
  br i1 %.not398, label %107, label %.sink.split

107:                                              ; preds = %103
  %108 = load ptr, ptr %71, align 8, !tbaa !9
  %109 = load ptr, ptr %108, align 8, !tbaa !21
  %110 = call i32 @equal_strings(ptr noundef nonnull @.str.94, ptr noundef %109)
  %.not399 = icmp eq i32 %110, 0
  br i1 %.not399, label %111, label %.sink.split

111:                                              ; preds = %107
  %112 = load ptr, ptr %71, align 8, !tbaa !9
  %113 = load ptr, ptr %112, align 8, !tbaa !21
  %114 = call i32 @equal_strings(ptr noundef nonnull @.str.95, ptr noundef %113)
  %.not400 = icmp eq i32 %114, 0
  br i1 %.not400, label %115, label %.sink.split

115:                                              ; preds = %111
  %116 = load ptr, ptr %71, align 8, !tbaa !9
  %117 = load ptr, ptr %116, align 8, !tbaa !21
  %118 = call i32 @equal_strings(ptr noundef nonnull @.str.96, ptr noundef %117)
  %.not401 = icmp eq i32 %118, 0
  br i1 %.not401, label %119, label %.sink.split

.sink.split:                                      ; preds = %115, %111, %107, %103, %99, %95, %91, %87, %83, %79, %.lr.ph
  %.sink = phi ptr [ @_ZZN6R3Mesh11ReadPlyFileEPKcE10vert_props, %.lr.ph ], [ getelementptr inbounds (i8, ptr @_ZZN6R3Mesh11ReadPlyFileEPKcE10vert_props, i64 40), %79 ], [ getelementptr inbounds (i8, ptr @_ZZN6R3Mesh11ReadPlyFileEPKcE10vert_props, i64 80), %83 ], [ getelementptr inbounds (i8, ptr @_ZZN6R3Mesh11ReadPlyFileEPKcE10vert_props, i64 120), %87 ], [ getelementptr inbounds (i8, ptr @_ZZN6R3Mesh11ReadPlyFileEPKcE10vert_props, i64 160), %91 ], [ getelementptr inbounds (i8, ptr @_ZZN6R3Mesh11ReadPlyFileEPKcE10vert_props, i64 200), %95 ], [ getelementptr inbounds (i8, ptr @_ZZN6R3Mesh11ReadPlyFileEPKcE10vert_props, i64 240), %99 ], [ getelementptr inbounds (i8, ptr @_ZZN6R3Mesh11ReadPlyFileEPKcE10vert_props, i64 280), %103 ], [ getelementptr inbounds (i8, ptr @_ZZN6R3Mesh11ReadPlyFileEPKcE10vert_props, i64 320), %107 ], [ getelementptr inbounds (i8, ptr @_ZZN6R3Mesh11ReadPlyFileEPKcE10vert_props, i64 360), %111 ], [ getelementptr inbounds (i8, ptr @_ZZN6R3Mesh11ReadPlyFileEPKcE10vert_props, i64 400), %115 ]
  call void @ply_get_property(ptr noundef nonnull %21, ptr noundef %48, ptr noundef nonnull %.sink)
  br label %119

119:                                              ; preds = %.sink.split, %115
  %120 = load ptr, ptr %71, align 8, !tbaa !9
  %121 = load ptr, ptr %120, align 8, !tbaa !21
  %122 = call i32 @equal_strings(ptr noundef nonnull @.str.89, ptr noundef %121)
  %.not402 = icmp eq i32 %122, 0
  br i1 %.not402, label %123, label %131

123:                                              ; preds = %119
  %124 = load ptr, ptr %71, align 8, !tbaa !9
  %125 = load ptr, ptr %124, align 8, !tbaa !21
  %126 = call i32 @equal_strings(ptr noundef nonnull @.str.92, ptr noundef %125)
  %.not403 = icmp eq i32 %126, 0
  br i1 %.not403, label %127, label %131

127:                                              ; preds = %123
  %128 = load ptr, ptr %71, align 8, !tbaa !9
  %129 = load ptr, ptr %128, align 8, !tbaa !21
  %130 = call i32 @equal_strings(ptr noundef nonnull @.str.94, ptr noundef %129)
  %.not404 = icmp eq i32 %130, 0
  %spec.select = select i1 %.not404, i32 %.0304431, i32 1
  br label %131

131:                                              ; preds = %127, %123, %119
  %.1305 = phi i32 [ %.0304431, %119 ], [ %.0304431, %123 ], [ %spec.select, %127 ]
  %.1302 = phi i32 [ %.0301432, %119 ], [ 1, %123 ], [ %.0301432, %127 ]
  %.1300 = phi i32 [ 1, %119 ], [ %.0299433, %123 ], [ %.0299433, %127 ]
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %132 = load i32, ptr %6, align 4, !tbaa !5
  %133 = sext i32 %132 to i64
  %134 = icmp slt i64 %indvars.iv.next, %133
  br i1 %134, label %.lr.ph, label %.preheader418, !llvm.loop !23

135:                                              ; preds = %.lr.ph438, %172
  %indvars.iv484 = phi i64 [ 0, %.lr.ph438 ], [ %indvars.iv.next485, %172 ]
  call void @llvm.lifetime.start.p0(i64 36, ptr nonnull %9) #16
  call void @ply_get_element(ptr noundef nonnull %21, ptr noundef nonnull %9)
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %10) #16
  %136 = load float, ptr %9, align 4, !tbaa !25
  %137 = fpext float %136 to double
  %138 = load float, ptr %29, align 4, !tbaa !28
  %139 = fpext float %138 to double
  %140 = load float, ptr %30, align 4, !tbaa !29
  %141 = fpext float %140 to double
  call void @_ZN7R3PointC1Eddd(ptr noundef nonnull align 8 dereferenceable(24) %10, double noundef %137, double noundef %139, double noundef %141)
  %142 = load ptr, ptr %27, align 8, !tbaa !11
  %143 = getelementptr inbounds %class.R3MeshVertex, ptr %142, i64 %indvars.iv484
  %144 = load ptr, ptr %0, align 8, !tbaa !30
  %145 = getelementptr inbounds i8, ptr %144, i64 32
  %146 = load ptr, ptr %145, align 8
  %147 = call noundef ptr %146(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef nonnull align 8 dereferenceable(24) %10, ptr noundef %143)
  br i1 %.not388, label %155, label %148

148:                                              ; preds = %135
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %11) #16
  %149 = load float, ptr %31, align 4, !tbaa !32
  %150 = fpext float %149 to double
  %151 = load float, ptr %32, align 4, !tbaa !33
  %152 = fpext float %151 to double
  %153 = load float, ptr %33, align 4, !tbaa !34
  %154 = fpext float %153 to double
  call void @_ZN8R3VectorC1Eddd(ptr noundef nonnull align 8 dereferenceable(24) %11, double noundef %150, double noundef %152, double noundef %154)
  call void @_ZN6R3Mesh15SetVertexNormalEP12R3MeshVertexRK8R3Vector(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef %147, ptr noundef nonnull align 8 dereferenceable(24) %11)
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %11) #16
  br label %155

155:                                              ; preds = %148, %135
  br i1 %.not389, label %161, label %156

156:                                              ; preds = %155
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %12) #16
  %157 = load float, ptr %34, align 4, !tbaa !35
  %158 = fpext float %157 to double
  %159 = load float, ptr %35, align 4, !tbaa !36
  %160 = fpext float %159 to double
  call void @_ZN7R2PointC1Edd(ptr noundef nonnull align 8 dereferenceable(16) %12, double noundef %158, double noundef %160)
  call void @_ZN6R3Mesh22SetVertexTextureCoordsEP12R3MeshVertexRK7R2Point(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef %147, ptr noundef nonnull align 8 dereferenceable(16) %12)
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %12) #16
  br label %161

161:                                              ; preds = %156, %155
  br i1 %.not390, label %172, label %162

162:                                              ; preds = %161
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %13) #16
  %163 = load i8, ptr %36, align 4, !tbaa !37
  %164 = uitofp i8 %163 to double
  %165 = fdiv double %164, 2.550000e+02
  %166 = load i8, ptr %37, align 1, !tbaa !38
  %167 = uitofp i8 %166 to double
  %168 = fdiv double %167, 2.550000e+02
  %169 = load i8, ptr %38, align 2, !tbaa !39
  %170 = uitofp i8 %169 to double
  %171 = fdiv double %170, 2.550000e+02
  call void @_ZN5RNRgbC1Eddd(ptr noundef nonnull align 8 dereferenceable(24) %13, double noundef %165, double noundef %168, double noundef %171)
  call void @_ZN6R3Mesh14SetVertexColorEP12R3MeshVertexRK5RNRgb(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef %147, ptr noundef nonnull align 8 dereferenceable(24) %13)
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %13) #16
  br label %172

172:                                              ; preds = %162, %161
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %10) #16
  call void @llvm.lifetime.end.p0(i64 36, ptr nonnull %9) #16
  %indvars.iv.next485 = add nuw nsw i64 %indvars.iv484, 1
  %173 = load i32, ptr %7, align 4, !tbaa !5
  %174 = sext i32 %173 to i64
  %175 = icmp slt i64 %indvars.iv.next485, %174
  br i1 %175, label %135, label %.loopexit419, !llvm.loop !40

176:                                              ; preds = %45
  %177 = call i32 @equal_strings(ptr noundef nonnull @.str.42, ptr noundef %48)
  %.not341 = icmp eq i32 %177, 0
  br i1 %.not341, label %400, label %178

178:                                              ; preds = %176
  %179 = load i32, ptr %7, align 4, !tbaa !5
  call void @_ZN8RNVArray6ResizeEi(ptr noundef nonnull align 8 dereferenceable(16) %39, i32 noundef %179)
  %180 = load i32, ptr %6, align 4, !tbaa !5
  %181 = icmp sgt i32 %180, 0
  br i1 %181, label %.lr.ph440, label %._crit_edge

.lr.ph440:                                        ; preds = %178, %202
  %indvars.iv487 = phi i64 [ %indvars.iv.next488, %202 ], [ 0, %178 ]
  %182 = getelementptr inbounds ptr, ptr %49, i64 %indvars.iv487
  %183 = load ptr, ptr %182, align 8, !tbaa !9
  %184 = load ptr, ptr %183, align 8, !tbaa !21
  %185 = call i32 @equal_strings(ptr noundef nonnull @.str.97, ptr noundef %184)
  %.not375 = icmp eq i32 %185, 0
  br i1 %.not375, label %186, label %.sink.split537

186:                                              ; preds = %.lr.ph440
  %187 = load ptr, ptr %182, align 8, !tbaa !9
  %188 = load ptr, ptr %187, align 8, !tbaa !21
  %189 = call i32 @equal_strings(ptr noundef nonnull @.str.98, ptr noundef %188)
  %.not376 = icmp eq i32 %189, 0
  br i1 %.not376, label %190, label %.sink.split537

190:                                              ; preds = %186
  %191 = load ptr, ptr %182, align 8, !tbaa !9
  %192 = load ptr, ptr %191, align 8, !tbaa !21
  %193 = call i32 @equal_strings(ptr noundef nonnull @.str.99, ptr noundef %192)
  %.not377 = icmp eq i32 %193, 0
  br i1 %.not377, label %194, label %.sink.split537

194:                                              ; preds = %190
  %195 = load ptr, ptr %182, align 8, !tbaa !9
  %196 = load ptr, ptr %195, align 8, !tbaa !21
  %197 = call i32 @equal_strings(ptr noundef nonnull @.str.100, ptr noundef %196)
  %.not378 = icmp eq i32 %197, 0
  br i1 %.not378, label %198, label %.sink.split537

198:                                              ; preds = %194
  %199 = load ptr, ptr %182, align 8, !tbaa !9
  %200 = load ptr, ptr %199, align 8, !tbaa !21
  %201 = call i32 @equal_strings(ptr noundef nonnull @.str.101, ptr noundef %200)
  %.not379 = icmp eq i32 %201, 0
  br i1 %.not379, label %202, label %.sink.split537

.sink.split537:                                   ; preds = %198, %194, %190, %186, %.lr.ph440
  %_ZZN6R3Mesh11ReadPlyFileEPKcE10face_props.sink = phi ptr [ @_ZZN6R3Mesh11ReadPlyFileEPKcE10face_props, %.lr.ph440 ], [ getelementptr inbounds (i8, ptr @_ZZN6R3Mesh11ReadPlyFileEPKcE10face_props, i64 40), %186 ], [ getelementptr inbounds (i8, ptr @_ZZN6R3Mesh11ReadPlyFileEPKcE10face_props, i64 80), %190 ], [ getelementptr inbounds (i8, ptr @_ZZN6R3Mesh11ReadPlyFileEPKcE10face_props, i64 120), %194 ], [ getelementptr inbounds (i8, ptr @_ZZN6R3Mesh11ReadPlyFileEPKcE10face_props, i64 160), %198 ]
  call void @ply_get_property(ptr noundef nonnull %21, ptr noundef %48, ptr noundef nonnull %_ZZN6R3Mesh11ReadPlyFileEPKcE10face_props.sink)
  br label %202

202:                                              ; preds = %.sink.split537, %198
  %indvars.iv.next488 = add nuw nsw i64 %indvars.iv487, 1
  %203 = load i32, ptr %6, align 4, !tbaa !5
  %204 = sext i32 %203 to i64
  %205 = icmp slt i64 %indvars.iv.next488, %204
  br i1 %205, label %.lr.ph440, label %._crit_edge, !llvm.loop !41

._crit_edge:                                      ; preds = %202, %178
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %14) #16
  call void @_ZN7RNArrayIP12R3MeshVertexEC2Ev(ptr noundef nonnull align 8 dereferenceable(16) %14)
  %206 = load i32, ptr %7, align 4, !tbaa !5
  %207 = sext i32 %206 to i64
  %208 = icmp slt i32 %206, 0
  %209 = shl nsw i64 %207, 2
  %210 = select i1 %208, i64 -1, i64 %209
  %211 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %210) #17
          to label %212 unwind label %227

212:                                              ; preds = %._crit_edge
  %213 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %210) #17
          to label %214 unwind label %229

214:                                              ; preds = %212
  %215 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %210) #17
          to label %.preheader417 unwind label %231

.preheader417:                                    ; preds = %214
  %216 = icmp sgt i32 %206, 0
  br i1 %216, label %.lr.ph449, label %._crit_edge453

.preheader416:                                    ; preds = %326
  %217 = icmp sgt i32 %.1307.lcssa, 0
  br i1 %217, label %.lr.ph452.preheader, label %._crit_edge453

.lr.ph452.preheader:                              ; preds = %.preheader416
  %wide.trip.count = zext nneg i32 %.1307.lcssa to i64
  br label %.lr.ph452

.lr.ph449:                                        ; preds = %.preheader417, %326
  %.3448 = phi i32 [ %327, %326 ], [ 0, %.preheader417 ]
  %.0306447 = phi i32 [ %.1307.lcssa, %326 ], [ 0, %.preheader417 ]
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %15) #16
  store i8 0, ptr %15, align 8, !tbaa !42
  store ptr null, ptr %40, align 8, !tbaa !44
  store i32 -1, ptr %41, align 8, !tbaa !45
  store i32 -1, ptr %42, align 4, !tbaa !46
  store i32 -1, ptr %43, align 8, !tbaa !47
  invoke void @ply_get_element(ptr noundef nonnull %21, ptr noundef nonnull %15)
          to label %218 unwind label %233

218:                                              ; preds = %.lr.ph449
  %219 = load ptr, ptr %40, align 8, !tbaa !44
  %220 = load i32, ptr %219, align 4, !tbaa !5
  %221 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7RNArrayIP12R3MeshVertexEixEi(ptr noundef nonnull align 8 dereferenceable(16) %28, i32 noundef %220)
          to label %222 unwind label %235

222:                                              ; preds = %218
  %223 = load ptr, ptr %221, align 8, !tbaa !9
  %224 = load i8, ptr %15, align 8, !tbaa !42
  %225 = icmp ugt i8 %224, 2
  br i1 %225, label %.lr.ph444, label %._crit_edge445

._crit_edge445:                                   ; preds = %321, %222
  %.1307.lcssa = phi i32 [ %.0306447, %222 ], [ %.3309, %321 ]
  %226 = load ptr, ptr %40, align 8, !tbaa !44
  %.not364 = icmp eq ptr %226, null
  br i1 %.not364, label %326, label %325

227:                                              ; preds = %._crit_edge
  %228 = landingpad { ptr, i32 }
          cleanup
  br label %399

229:                                              ; preds = %212
  %230 = landingpad { ptr, i32 }
          cleanup
  br label %399

231:                                              ; preds = %214
  %232 = landingpad { ptr, i32 }
          cleanup
  br label %399

233:                                              ; preds = %.lr.ph449
  %234 = landingpad { ptr, i32 }
          cleanup
  br label %330

235:                                              ; preds = %218
  %236 = landingpad { ptr, i32 }
          cleanup
  br label %330

.lr.ph444:                                        ; preds = %222, %321
  %indvars.iv490 = phi i64 [ %indvars.iv.next491, %321 ], [ 2, %222 ]
  %.1307442 = phi i32 [ %.3309, %321 ], [ %.0306447, %222 ]
  %237 = load ptr, ptr %40, align 8, !tbaa !44
  %238 = add nsw i64 %indvars.iv490, -1
  %239 = getelementptr inbounds i32, ptr %237, i64 %238
  %240 = load i32, ptr %239, align 4, !tbaa !5
  %241 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7RNArrayIP12R3MeshVertexEixEi(ptr noundef nonnull align 8 dereferenceable(16) %28, i32 noundef %240)
          to label %242 unwind label %254

242:                                              ; preds = %.lr.ph444
  %243 = load ptr, ptr %241, align 8, !tbaa !9
  %244 = load ptr, ptr %40, align 8, !tbaa !44
  %245 = getelementptr inbounds i32, ptr %244, i64 %indvars.iv490
  %246 = load i32, ptr %245, align 4, !tbaa !5
  %247 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7RNArrayIP12R3MeshVertexEixEi(ptr noundef nonnull align 8 dereferenceable(16) %28, i32 noundef %246)
          to label %248 unwind label %256

248:                                              ; preds = %242
  %249 = load ptr, ptr %247, align 8, !tbaa !9
  %250 = load ptr, ptr %40, align 8, !tbaa !44
  %251 = load i32, ptr %250, align 4, !tbaa !5
  %252 = icmp sgt i32 %251, -1
  br i1 %252, label %258, label %253

253:                                              ; preds = %248
  invoke void (ptr, ...) @_Z7RNAbortPKcz(ptr noundef nonnull @.str, ptr noundef nonnull @.str.106, i32 noundef 4981, ptr noundef nonnull @.str.2)
          to label %._crit_edge521 unwind label %256

._crit_edge521:                                   ; preds = %253
  %.pre522 = load ptr, ptr %40, align 8, !tbaa !44
  br label %258

254:                                              ; preds = %.lr.ph444
  %255 = landingpad { ptr, i32 }
          cleanup
  br label %330

256:                                              ; preds = %289, %282, %275, %269, %263, %253, %242
  %257 = landingpad { ptr, i32 }
          cleanup
  br label %330

258:                                              ; preds = %._crit_edge521, %248
  %259 = phi ptr [ %.pre522, %._crit_edge521 ], [ %250, %248 ]
  %260 = getelementptr inbounds i32, ptr %259, i64 %238
  %261 = load i32, ptr %260, align 4, !tbaa !5
  %262 = icmp sgt i32 %261, -1
  br i1 %262, label %264, label %263

263:                                              ; preds = %258
  invoke void (ptr, ...) @_Z7RNAbortPKcz(ptr noundef nonnull @.str, ptr noundef nonnull @.str.107, i32 noundef 4982, ptr noundef nonnull @.str.2)
          to label %._crit_edge523 unwind label %256

._crit_edge523:                                   ; preds = %263
  %.pre524 = load ptr, ptr %40, align 8, !tbaa !44
  br label %264

264:                                              ; preds = %._crit_edge523, %258
  %265 = phi ptr [ %.pre524, %._crit_edge523 ], [ %259, %258 ]
  %266 = getelementptr inbounds i32, ptr %265, i64 %indvars.iv490
  %267 = load i32, ptr %266, align 4, !tbaa !5
  %268 = icmp sgt i32 %267, -1
  br i1 %268, label %270, label %269

269:                                              ; preds = %264
  invoke void (ptr, ...) @_Z7RNAbortPKcz(ptr noundef nonnull @.str, ptr noundef nonnull @.str.108, i32 noundef 4983, ptr noundef nonnull @.str.2)
          to label %._crit_edge525 unwind label %256

._crit_edge525:                                   ; preds = %269
  %.pre526 = load ptr, ptr %40, align 8, !tbaa !44
  br label %270

270:                                              ; preds = %._crit_edge525, %264
  %271 = phi ptr [ %.pre526, %._crit_edge525 ], [ %265, %264 ]
  %272 = load i32, ptr %271, align 4, !tbaa !5
  %273 = call noundef i32 @_ZNK8RNVArray8NEntriesEv(ptr noundef nonnull align 8 dereferenceable(16) %28)
  %274 = icmp slt i32 %272, %273
  br i1 %274, label %276, label %275

275:                                              ; preds = %270
  invoke void (ptr, ...) @_Z7RNAbortPKcz(ptr noundef nonnull @.str, ptr noundef nonnull @.str.109, i32 noundef 4984, ptr noundef nonnull @.str.2)
          to label %276 unwind label %256

276:                                              ; preds = %275, %270
  %277 = load ptr, ptr %40, align 8, !tbaa !44
  %278 = getelementptr inbounds i32, ptr %277, i64 %238
  %279 = load i32, ptr %278, align 4, !tbaa !5
  %280 = call noundef i32 @_ZNK8RNVArray8NEntriesEv(ptr noundef nonnull align 8 dereferenceable(16) %28)
  %281 = icmp slt i32 %279, %280
  br i1 %281, label %283, label %282

282:                                              ; preds = %276
  invoke void (ptr, ...) @_Z7RNAbortPKcz(ptr noundef nonnull @.str, ptr noundef nonnull @.str.110, i32 noundef 4985, ptr noundef nonnull @.str.2)
          to label %283 unwind label %256

283:                                              ; preds = %282, %276
  %284 = load ptr, ptr %40, align 8, !tbaa !44
  %285 = getelementptr inbounds i32, ptr %284, i64 %indvars.iv490
  %286 = load i32, ptr %285, align 4, !tbaa !5
  %287 = call noundef i32 @_ZNK8RNVArray8NEntriesEv(ptr noundef nonnull align 8 dereferenceable(16) %28)
  %288 = icmp slt i32 %286, %287
  br i1 %288, label %290, label %289

289:                                              ; preds = %283
  invoke void (ptr, ...) @_Z7RNAbortPKcz(ptr noundef nonnull @.str, ptr noundef nonnull @.str.111, i32 noundef 4986, ptr noundef nonnull @.str.2)
          to label %290 unwind label %256

290:                                              ; preds = %289, %283
  %291 = icmp eq ptr %223, %243
  %292 = icmp eq ptr %243, %249
  %or.cond405 = select i1 %291, i1 true, i1 %292
  %293 = icmp eq ptr %223, %249
  %or.cond406 = select i1 %or.cond405, i1 true, i1 %293
  br i1 %or.cond406, label %321, label %294

294:                                              ; preds = %290
  %295 = load ptr, ptr %0, align 8, !tbaa !30
  %296 = getelementptr inbounds i8, ptr %295, i64 72
  %297 = load ptr, ptr %296, align 8
  %298 = invoke noundef ptr %297(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef %223, ptr noundef %243, ptr noundef %249, ptr noundef null)
          to label %299 unwind label %304

299:                                              ; preds = %294
  %.not365 = icmp eq ptr %298, null
  br i1 %.not365, label %306, label %300

300:                                              ; preds = %299
  %301 = load i32, ptr %41, align 8, !tbaa !45
  call void @_ZN6R3Mesh15SetFaceMaterialEP10R3MeshFacei(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef nonnull %298, i32 noundef %301)
  %302 = load i32, ptr %42, align 4, !tbaa !46
  call void @_ZN6R3Mesh14SetFaceSegmentEP10R3MeshFacei(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef nonnull %298, i32 noundef %302)
  %303 = load i32, ptr %43, align 8, !tbaa !47
  call void @_ZN6R3Mesh15SetFaceCategoryEP10R3MeshFacei(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef nonnull %298, i32 noundef %303)
  br label %321

304:                                              ; preds = %310, %308, %306, %294
  %305 = landingpad { ptr, i32 }
          cleanup
  br label %330

306:                                              ; preds = %299
  %307 = invoke noundef ptr @_ZN7RNArrayIP12R3MeshVertexE6InsertES1_(ptr noundef nonnull align 8 dereferenceable(16) %14, ptr noundef %223)
          to label %308 unwind label %304

308:                                              ; preds = %306
  %309 = invoke noundef ptr @_ZN7RNArrayIP12R3MeshVertexE6InsertES1_(ptr noundef nonnull align 8 dereferenceable(16) %14, ptr noundef %243)
          to label %310 unwind label %304

310:                                              ; preds = %308
  %311 = invoke noundef ptr @_ZN7RNArrayIP12R3MeshVertexE6InsertES1_(ptr noundef nonnull align 8 dereferenceable(16) %14, ptr noundef %249)
          to label %312 unwind label %304

312:                                              ; preds = %310
  %313 = load i32, ptr %41, align 8, !tbaa !45
  %314 = sext i32 %.1307442 to i64
  %315 = getelementptr inbounds i32, ptr %211, i64 %314
  store i32 %313, ptr %315, align 4, !tbaa !5
  %316 = load i32, ptr %42, align 4, !tbaa !46
  %317 = getelementptr inbounds i32, ptr %213, i64 %314
  store i32 %316, ptr %317, align 4, !tbaa !5
  %318 = load i32, ptr %43, align 8, !tbaa !47
  %319 = getelementptr inbounds i32, ptr %215, i64 %314
  store i32 %318, ptr %319, align 4, !tbaa !5
  %320 = add nsw i32 %.1307442, 1
  br label %321

321:                                              ; preds = %300, %312, %290
  %.3309 = phi i32 [ %.1307442, %290 ], [ %.1307442, %300 ], [ %320, %312 ]
  %indvars.iv.next491 = add nuw nsw i64 %indvars.iv490, 1
  %322 = load i8, ptr %15, align 8, !tbaa !42
  %323 = zext i8 %322 to i64
  %324 = icmp ult i64 %indvars.iv.next491, %323
  br i1 %324, label %.lr.ph444, label %._crit_edge445, !llvm.loop !48

325:                                              ; preds = %._crit_edge445
  call void @free(ptr noundef nonnull %226) #16
  br label %326

326:                                              ; preds = %325, %._crit_edge445
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %15) #16
  %327 = add nuw nsw i32 %.3448, 1
  %328 = load i32, ptr %7, align 4, !tbaa !5
  %329 = icmp slt i32 %327, %328
  br i1 %329, label %.lr.ph449, label %.preheader416, !llvm.loop !49

330:                                              ; preds = %235, %256, %304, %254, %233
  %.pn366.pn.pn.pn = phi { ptr, i32 } [ %234, %233 ], [ %236, %235 ], [ %255, %254 ], [ %305, %304 ], [ %257, %256 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %15) #16
  br label %399

.lr.ph452:                                        ; preds = %.lr.ph452.preheader, %398
  %indvars.iv493 = phi i64 [ 0, %.lr.ph452.preheader ], [ %indvars.iv.next494, %398 ]
  %331 = mul nuw nsw i64 %indvars.iv493, 3
  %332 = trunc nuw nsw i64 %331 to i32
  %333 = invoke noundef ptr @_ZNK7RNArrayIP12R3MeshVertexE3KthEi(ptr noundef nonnull align 8 dereferenceable(16) %14, i32 noundef %332)
          to label %334 unwind label %377

334:                                              ; preds = %.lr.ph452
  %335 = trunc i64 %331 to i32
  %336 = add i32 %335, 1
  %337 = invoke noundef ptr @_ZNK7RNArrayIP12R3MeshVertexE3KthEi(ptr noundef nonnull align 8 dereferenceable(16) %14, i32 noundef %336)
          to label %338 unwind label %379

338:                                              ; preds = %334
  %339 = trunc i64 %331 to i32
  %340 = add i32 %339, 2
  %341 = invoke noundef ptr @_ZNK7RNArrayIP12R3MeshVertexE3KthEi(ptr noundef nonnull align 8 dereferenceable(16) %14, i32 noundef %340)
          to label %342 unwind label %381

342:                                              ; preds = %338
  %343 = load ptr, ptr %0, align 8, !tbaa !30
  %344 = getelementptr inbounds i8, ptr %343, i64 72
  %345 = load ptr, ptr %344, align 8
  %346 = invoke noundef ptr %345(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef %333, ptr noundef %337, ptr noundef %341, ptr noundef null)
          to label %347 unwind label %383

347:                                              ; preds = %342
  %.not355 = icmp eq ptr %346, null
  br i1 %.not355, label %348, label %.thread

348:                                              ; preds = %347
  %349 = load ptr, ptr %0, align 8, !tbaa !30
  %350 = getelementptr inbounds i8, ptr %349, i64 72
  %351 = load ptr, ptr %350, align 8
  %352 = invoke noundef ptr %351(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef %333, ptr noundef %341, ptr noundef %337, ptr noundef null)
          to label %353 unwind label %383

353:                                              ; preds = %348
  %.not356 = icmp eq ptr %352, null
  br i1 %.not356, label %354, label %.thread

354:                                              ; preds = %353
  %355 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK6R3Mesh14VertexPositionEPK12R3MeshVertex(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef %333)
  %356 = load ptr, ptr %0, align 8, !tbaa !30
  %357 = getelementptr inbounds i8, ptr %356, i64 32
  %358 = load ptr, ptr %357, align 8
  %359 = invoke noundef ptr %358(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef nonnull align 8 dereferenceable(24) %355, ptr noundef null)
          to label %360 unwind label %385

360:                                              ; preds = %354
  %361 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK6R3Mesh14VertexPositionEPK12R3MeshVertex(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef %337)
  %362 = load ptr, ptr %0, align 8, !tbaa !30
  %363 = getelementptr inbounds i8, ptr %362, i64 32
  %364 = load ptr, ptr %363, align 8
  %365 = invoke noundef ptr %364(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef nonnull align 8 dereferenceable(24) %361, ptr noundef null)
          to label %366 unwind label %387

366:                                              ; preds = %360
  %367 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK6R3Mesh14VertexPositionEPK12R3MeshVertex(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef %341)
  %368 = load ptr, ptr %0, align 8, !tbaa !30
  %369 = getelementptr inbounds i8, ptr %368, i64 32
  %370 = load ptr, ptr %369, align 8
  %371 = invoke noundef ptr %370(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef nonnull align 8 dereferenceable(24) %367, ptr noundef null)
          to label %372 unwind label %389

372:                                              ; preds = %366
  %373 = load ptr, ptr %0, align 8, !tbaa !30
  %374 = getelementptr inbounds i8, ptr %373, i64 72
  %375 = load ptr, ptr %374, align 8
  %376 = invoke noundef ptr %375(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef %359, ptr noundef %365, ptr noundef %371, ptr noundef null)
          to label %391 unwind label %389

377:                                              ; preds = %.lr.ph452
  %378 = landingpad { ptr, i32 }
          cleanup
  br label %399

379:                                              ; preds = %334
  %380 = landingpad { ptr, i32 }
          cleanup
  br label %399

381:                                              ; preds = %338
  %382 = landingpad { ptr, i32 }
          cleanup
  br label %399

383:                                              ; preds = %348, %342
  %384 = landingpad { ptr, i32 }
          cleanup
  br label %399

385:                                              ; preds = %354
  %386 = landingpad { ptr, i32 }
          cleanup
  br label %399

387:                                              ; preds = %360
  %388 = landingpad { ptr, i32 }
          cleanup
  br label %399

389:                                              ; preds = %372, %366
  %390 = landingpad { ptr, i32 }
          cleanup
  br label %399

391:                                              ; preds = %372
  %.not363 = icmp eq ptr %376, null
  br i1 %.not363, label %398, label %.thread

.thread:                                          ; preds = %353, %347, %391
  %.0303411 = phi ptr [ %376, %391 ], [ %352, %353 ], [ %346, %347 ]
  %392 = getelementptr inbounds i32, ptr %211, i64 %indvars.iv493
  %393 = load i32, ptr %392, align 4, !tbaa !5
  call void @_ZN6R3Mesh15SetFaceMaterialEP10R3MeshFacei(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef nonnull %.0303411, i32 noundef %393)
  %394 = getelementptr inbounds i32, ptr %213, i64 %indvars.iv493
  %395 = load i32, ptr %394, align 4, !tbaa !5
  call void @_ZN6R3Mesh14SetFaceSegmentEP10R3MeshFacei(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef nonnull %.0303411, i32 noundef %395)
  %396 = getelementptr inbounds i32, ptr %215, i64 %indvars.iv493
  %397 = load i32, ptr %396, align 4, !tbaa !5
  call void @_ZN6R3Mesh15SetFaceCategoryEP10R3MeshFacei(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef nonnull %.0303411, i32 noundef %397)
  br label %398

398:                                              ; preds = %.thread, %391
  %indvars.iv.next494 = add nuw nsw i64 %indvars.iv493, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next494, %wide.trip.count
  br i1 %exitcond.not, label %._crit_edge453, label %.lr.ph452, !llvm.loop !50

._crit_edge453:                                   ; preds = %398, %.preheader417, %.preheader416
  call void @_ZdaPv(ptr noundef nonnull %211) #18
  call void @_ZdaPv(ptr noundef nonnull %213) #18
  call void @_ZdaPv(ptr noundef nonnull %215) #18
  call void @_ZN8RNVArrayD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %14) #16
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %14) #16
  br label %.loopexit419

399:                                              ; preds = %229, %330, %379, %383, %387, %389, %385, %381, %377, %231, %227
  %.pn366.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %228, %227 ], [ %230, %229 ], [ %232, %231 ], [ %.pn366.pn.pn.pn, %330 ], [ %378, %377 ], [ %380, %379 ], [ %382, %381 ], [ %384, %383 ], [ %386, %385 ], [ %390, %389 ], [ %388, %387 ]
  call void @_ZN8RNVArrayD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %14) #16
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %14) #16
  br label %497

400:                                              ; preds = %176
  %401 = call i32 @equal_strings(ptr noundef nonnull @.str.112, ptr noundef %48)
  %.not342 = icmp eq i32 %401, 0
  br i1 %.not342, label %490, label %402

402:                                              ; preds = %400
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %16) #16
  store i32 0, ptr %16, align 4, !tbaa !5
  %403 = call ptr @ply_get_obj_info(ptr noundef nonnull %21, ptr noundef nonnull %16)
  %404 = load i32, ptr %16, align 4, !tbaa !5
  %405 = icmp sgt i32 %404, 0
  br i1 %405, label %.lr.ph458, label %._crit_edge459

._crit_edge459:                                   ; preds = %424, %402
  %.1273.lcssa = phi i32 [ %.0272474, %402 ], [ %.2274, %424 ]
  %.1267.lcssa = phi i32 [ %.0266475, %402 ], [ %.2268, %424 ]
  %406 = icmp sgt i32 %.1273.lcssa, 0
  %407 = icmp sgt i32 %.1267.lcssa, 0
  %or.cond = select i1 %406, i1 %407, i1 false
  br i1 %or.cond, label %428, label %489

.lr.ph458:                                        ; preds = %402, %424
  %indvars.iv496 = phi i64 [ %indvars.iv.next497, %424 ], [ 0, %402 ]
  %.1267456 = phi i32 [ %.2268, %424 ], [ %.0266475, %402 ]
  %.1273455 = phi i32 [ %.2274, %424 ], [ %.0272474, %402 ]
  %408 = getelementptr inbounds ptr, ptr %403, i64 %indvars.iv496
  %409 = load ptr, ptr %408, align 8, !tbaa !9
  %410 = call noalias ptr @strdup(ptr noundef %409) #16
  %411 = call ptr @strtok(ptr noundef %410, ptr noundef nonnull @.str.113) #16
  %.not350 = icmp eq ptr %411, null
  br i1 %.not350, label %424, label %412

412:                                              ; preds = %.lr.ph458
  %413 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %411, ptr noundef nonnull dereferenceable(1) @.str.114) #19
  %.not351 = icmp eq i32 %413, 0
  br i1 %.not351, label %414, label %418

414:                                              ; preds = %412
  %415 = call ptr @strtok(ptr noundef null, ptr noundef nonnull @.str.113) #16
  %.not352 = icmp eq ptr %415, null
  br i1 %.not352, label %424, label %416

416:                                              ; preds = %414
  %417 = call i32 @atoi(ptr nocapture noundef %415) #19
  br label %424

418:                                              ; preds = %412
  %419 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %411, ptr noundef nonnull dereferenceable(1) @.str.115) #19
  %.not353 = icmp eq i32 %419, 0
  br i1 %.not353, label %420, label %424

420:                                              ; preds = %418
  %421 = call ptr @strtok(ptr noundef null, ptr noundef nonnull @.str.113) #16
  %.not354 = icmp eq ptr %421, null
  br i1 %.not354, label %424, label %422

422:                                              ; preds = %420
  %423 = call i32 @atoi(ptr nocapture noundef %421) #19
  br label %424

424:                                              ; preds = %416, %414, %420, %422, %418, %.lr.ph458
  %.2274 = phi i32 [ %.1273455, %418 ], [ %423, %422 ], [ %.1273455, %420 ], [ %.1273455, %416 ], [ %.1273455, %414 ], [ %.1273455, %.lr.ph458 ]
  %.2268 = phi i32 [ %.1267456, %418 ], [ %.1267456, %422 ], [ %.1267456, %420 ], [ %417, %416 ], [ %.1267456, %414 ], [ %.1267456, %.lr.ph458 ]
  call void @free(ptr noundef %410) #16
  %indvars.iv.next497 = add nuw nsw i64 %indvars.iv496, 1
  %425 = load i32, ptr %16, align 4, !tbaa !5
  %426 = sext i32 %425 to i64
  %427 = icmp slt i64 %indvars.iv.next497, %426
  br i1 %427, label %.lr.ph458, label %._crit_edge459, !llvm.loop !51

428:                                              ; preds = %._crit_edge459
  %429 = mul nuw nsw i32 %.1267.lcssa, %.1273.lcssa
  %430 = load i32, ptr %7, align 4, !tbaa !5
  %431 = icmp eq i32 %429, %430
  br i1 %431, label %.preheader415, label %489

.preheader415:                                    ; preds = %428
  %432 = zext nneg i32 %429 to i64
  %433 = shl nuw nsw i64 %432, 3
  %434 = call noalias noundef nonnull ptr @_Znam(i64 noundef %433) #17
  call void @llvm.memset.p0.i64(ptr nonnull align 8 %434, i8 0, i64 %433, i1 false), !tbaa !9
  %435 = load i32, ptr %6, align 4, !tbaa !5
  %436 = icmp sgt i32 %435, 0
  br i1 %436, label %.lr.ph466, label %.lr.ph468.preheader

.preheader414:                                    ; preds = %443
  %.pre527 = load i32, ptr %7, align 4, !tbaa !5
  %437 = icmp sgt i32 %.pre527, 0
  br i1 %437, label %.lr.ph468.preheader, label %.preheader413

.lr.ph468.preheader:                              ; preds = %.preheader415, %.preheader414
  br label %.lr.ph468

.lr.ph466:                                        ; preds = %.preheader415, %443
  %indvars.iv502 = phi i64 [ %indvars.iv.next503, %443 ], [ 0, %.preheader415 ]
  %438 = getelementptr inbounds ptr, ptr %49, i64 %indvars.iv502
  %439 = load ptr, ptr %438, align 8, !tbaa !9
  %440 = load ptr, ptr %439, align 8, !tbaa !21
  %441 = call i32 @equal_strings(ptr noundef nonnull @.str.97, ptr noundef %440)
  %.not349 = icmp eq i32 %441, 0
  br i1 %.not349, label %443, label %442

442:                                              ; preds = %.lr.ph466
  call void @ply_get_property(ptr noundef nonnull %21, ptr noundef %48, ptr noundef nonnull @_ZZN6R3Mesh11ReadPlyFileEPKcE16range_grid_props)
  br label %443

443:                                              ; preds = %.lr.ph466, %442
  %indvars.iv.next503 = add nuw nsw i64 %indvars.iv502, 1
  %444 = load i32, ptr %6, align 4, !tbaa !5
  %445 = sext i32 %444 to i64
  %446 = icmp slt i64 %indvars.iv.next503, %445
  br i1 %446, label %.lr.ph466, label %.preheader414, !llvm.loop !52

.preheader413:                                    ; preds = %485, %.preheader414
  %447 = icmp sgt i32 %.1267.lcssa, 1
  %448 = icmp sgt i32 %.1273.lcssa, 1
  %or.cond540 = and i1 %447, %448
  br i1 %or.cond540, label %.preheader412.us.preheader, label %._crit_edge473

.preheader412.us.preheader:                       ; preds = %.preheader413
  %449 = add nsw i32 %.1267.lcssa, -1
  %450 = add nsw i32 %.1273.lcssa, -1
  %451 = zext nneg i32 %.1273.lcssa to i64
  %wide.trip.count516 = zext nneg i32 %449 to i64
  %wide.trip.count511 = zext i32 %450 to i64
  br label %.preheader412.us

.preheader412.us:                                 ; preds = %.preheader412.us.preheader, %._crit_edge471.us
  %indvars.iv513 = phi i64 [ 0, %.preheader412.us.preheader ], [ %indvars.iv.next514, %._crit_edge471.us ]
  %452 = mul nuw nsw i64 %indvars.iv513, %451
  %indvars.iv.next514 = add nuw nsw i64 %indvars.iv513, 1
  %453 = mul nuw nsw i64 %indvars.iv.next514, %451
  %invariant.gep = getelementptr inbounds ptr, ptr %434, i64 %452
  %invariant.gep531 = getelementptr inbounds ptr, ptr %434, i64 %453
  %invariant.gep533 = getelementptr inbounds ptr, ptr %434, i64 %452
  %invariant.gep535 = getelementptr inbounds ptr, ptr %434, i64 %453
  br label %454

454:                                              ; preds = %.preheader412.us, %475
  %indvars.iv508 = phi i64 [ 0, %.preheader412.us ], [ %indvars.iv.next509, %475 ]
  %gep = getelementptr inbounds ptr, ptr %invariant.gep, i64 %indvars.iv508
  %455 = load ptr, ptr %gep, align 8, !tbaa !9
  %gep532 = getelementptr inbounds ptr, ptr %invariant.gep531, i64 %indvars.iv508
  %456 = load ptr, ptr %gep532, align 8, !tbaa !9
  %indvars.iv.next509 = add nuw nsw i64 %indvars.iv508, 1
  %gep534 = getelementptr inbounds ptr, ptr %invariant.gep533, i64 %indvars.iv.next509
  %457 = load ptr, ptr %gep534, align 8, !tbaa !9
  %gep536 = getelementptr inbounds ptr, ptr %invariant.gep535, i64 %indvars.iv.next509
  %458 = load ptr, ptr %gep536, align 8, !tbaa !9
  %.not343.us = icmp eq ptr %455, null
  br i1 %.not343.us, label %470, label %459

459:                                              ; preds = %454
  %.not344.us = icmp eq ptr %456, null
  br i1 %.not344.us, label %466, label %460

460:                                              ; preds = %459
  %.not345.us = icmp eq ptr %457, null
  %.not346.us = icmp eq ptr %458, null
  br i1 %.not345.us, label %464, label %461

461:                                              ; preds = %460
  br i1 %.not346.us, label %463, label %462

462:                                              ; preds = %461
  call void @_ZL22CreatePlyRangeGridFaceP6R3MeshP12R3MeshVertexS2_S2_d(ptr noundef nonnull %0, ptr noundef nonnull %455, ptr noundef nonnull %457, ptr noundef nonnull %458, double noundef 8.000000e+00)
  call void @_ZL22CreatePlyRangeGridFaceP6R3MeshP12R3MeshVertexS2_S2_d(ptr noundef nonnull %0, ptr noundef nonnull %455, ptr noundef nonnull %458, ptr noundef nonnull %456, double noundef 8.000000e+00)
  br label %475

463:                                              ; preds = %461
  call void @_ZL22CreatePlyRangeGridFaceP6R3MeshP12R3MeshVertexS2_S2_d(ptr noundef nonnull %0, ptr noundef nonnull %455, ptr noundef nonnull %457, ptr noundef nonnull %456, double noundef 8.000000e+00)
  br label %475

464:                                              ; preds = %460
  br i1 %.not346.us, label %475, label %465

465:                                              ; preds = %464
  call void @_ZL22CreatePlyRangeGridFaceP6R3MeshP12R3MeshVertexS2_S2_d(ptr noundef nonnull %0, ptr noundef nonnull %455, ptr noundef nonnull %458, ptr noundef nonnull %456, double noundef 8.000000e+00)
  br label %475

466:                                              ; preds = %459
  %467 = icmp ne ptr %457, null
  %468 = icmp ne ptr %458, null
  %or.cond3.us = select i1 %467, i1 %468, i1 false
  br i1 %or.cond3.us, label %469, label %475

469:                                              ; preds = %466
  call void @_ZL22CreatePlyRangeGridFaceP6R3MeshP12R3MeshVertexS2_S2_d(ptr noundef nonnull %0, ptr noundef nonnull %455, ptr noundef nonnull %457, ptr noundef nonnull %458, double noundef 8.000000e+00)
  br label %475

470:                                              ; preds = %454
  %471 = icmp ne ptr %456, null
  %472 = icmp ne ptr %457, null
  %or.cond5.us = select i1 %471, i1 %472, i1 false
  %473 = icmp ne ptr %458, null
  %or.cond7.us = select i1 %or.cond5.us, i1 %473, i1 false
  br i1 %or.cond7.us, label %474, label %475

474:                                              ; preds = %470
  call void @_ZL22CreatePlyRangeGridFaceP6R3MeshP12R3MeshVertexS2_S2_d(ptr noundef nonnull %0, ptr noundef nonnull %457, ptr noundef nonnull %458, ptr noundef nonnull %456, double noundef 8.000000e+00)
  br label %475

475:                                              ; preds = %474, %470, %469, %466, %465, %464, %463, %462
  %exitcond512.not = icmp eq i64 %indvars.iv.next509, %wide.trip.count511
  br i1 %exitcond512.not, label %._crit_edge471.us, label %454, !llvm.loop !53

._crit_edge471.us:                                ; preds = %475
  %exitcond517.not = icmp eq i64 %indvars.iv.next514, %wide.trip.count516
  br i1 %exitcond517.not, label %._crit_edge473, label %.preheader412.us, !llvm.loop !54

.lr.ph468:                                        ; preds = %.lr.ph468.preheader, %485
  %indvars.iv505 = phi i64 [ %indvars.iv.next506, %485 ], [ 0, %.lr.ph468.preheader ]
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %17) #16
  store i8 0, ptr %17, align 8, !tbaa !55
  store ptr null, ptr %44, align 8, !tbaa !57
  call void @ply_get_element(ptr noundef nonnull %21, ptr noundef nonnull %17)
  %476 = load ptr, ptr %44, align 8, !tbaa !57
  %.not348 = icmp eq ptr %476, null
  %477 = load i8, ptr %17, align 8
  %478 = icmp eq i8 %477, 0
  %or.cond408 = select i1 %.not348, i1 true, i1 %478
  br i1 %or.cond408, label %485, label %479

479:                                              ; preds = %.lr.ph468
  %480 = load i32, ptr %476, align 4, !tbaa !5
  %481 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7RNArrayIP12R3MeshVertexEixEi(ptr noundef nonnull align 8 dereferenceable(16) %28, i32 noundef %480)
  %482 = load ptr, ptr %481, align 8, !tbaa !9
  %483 = getelementptr inbounds ptr, ptr %434, i64 %indvars.iv505
  store ptr %482, ptr %483, align 8, !tbaa !9
  %484 = load ptr, ptr %44, align 8, !tbaa !57
  call void @free(ptr noundef %484) #16
  br label %485

485:                                              ; preds = %.lr.ph468, %479
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %17) #16
  %indvars.iv.next506 = add nuw nsw i64 %indvars.iv505, 1
  %486 = load i32, ptr %7, align 4, !tbaa !5
  %487 = sext i32 %486 to i64
  %488 = icmp slt i64 %indvars.iv.next506, %487
  br i1 %488, label %.lr.ph468, label %.preheader413, !llvm.loop !58

._crit_edge473:                                   ; preds = %._crit_edge471.us, %.preheader413
  call void @_ZdaPv(ptr noundef nonnull %434) #18
  br label %489

489:                                              ; preds = %._crit_edge473, %428, %._crit_edge459
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %16) #16
  br label %.loopexit419

490:                                              ; preds = %400
  %491 = load i32, ptr %7, align 4, !tbaa !5
  %492 = call ptr @ply_get_other_element(ptr noundef nonnull %21, ptr noundef %48, i32 noundef %491)
  br label %.loopexit419

.loopexit419:                                     ; preds = %172, %.preheader418, %489, %490, %._crit_edge453
  %.3275 = phi i32 [ %.0272474, %._crit_edge453 ], [ %.1273.lcssa, %489 ], [ %.0272474, %490 ], [ %.0272474, %.preheader418 ], [ %.0272474, %172 ]
  %.3269 = phi i32 [ %.0266475, %._crit_edge453 ], [ %.1267.lcssa, %489 ], [ %.0266475, %490 ], [ %.0266475, %.preheader418 ], [ %.0266475, %172 ]
  %indvars.iv.next519 = add nuw nsw i64 %indvars.iv518, 1
  %493 = load i32, ptr %3, align 4, !tbaa !5
  %494 = sext i32 %493 to i64
  %495 = icmp slt i64 %indvars.iv.next519, %494
  br i1 %495, label %45, label %._crit_edge479, !llvm.loop !59

._crit_edge479:                                   ; preds = %.loopexit419, %24
  call void @ply_close(ptr noundef nonnull %21)
  br label %496

496:                                              ; preds = %._crit_edge479, %22, %19
  %.0 = phi i32 [ 1, %._crit_edge479 ], [ 0, %22 ], [ 0, %19 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %8) #16
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %7) #16
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %6) #16
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %5) #16
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %4) #16
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %3) #16
  ret i32 %.0

497:                                              ; preds = %399, %.loopexit
  %.pn386 = phi { ptr, i32 } [ %76, %.loopexit ], [ %.pn366.pn.pn.pn.pn.pn.pn.pn, %399 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %8) #16
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %7) #16
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %6) #16
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %5) #16
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %4) #16
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %3) #16
  resume { ptr, i32 } %.pn386
}

declare ptr @ply_read(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #1

declare void @ply_get_info(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #1

declare ptr @ply_get_element_description(ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #1

declare i32 @equal_strings(ptr noundef, ptr noundef) local_unnamed_addr #1

declare void @_ZN8RNVArray6ResizeEi(ptr noundef nonnull align 8 dereferenceable(16), i32 noundef) local_unnamed_addr #1

declare void @ply_get_property(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #1

declare void @ply_get_element(ptr noundef, ptr noundef) local_unnamed_addr #1

declare void @_ZN5RNRgbC1Eddd(ptr noundef nonnull align 8 dereferenceable(24), double noundef, double noundef, double noundef) unnamed_addr #1

; Function Attrs: mustprogress nounwind willreturn allockind("free") memory(argmem: readwrite, inaccessiblemem: readwrite)
declare void @free(ptr allocptr nocapture noundef) local_unnamed_addr #13

declare ptr @ply_get_obj_info(ptr noundef, ptr noundef) local_unnamed_addr #1

; Function Attrs: mustprogress nofree nounwind willreturn memory(argmem: readwrite, inaccessiblemem: readwrite)
declare noalias ptr @strdup(ptr nocapture noundef readonly) local_unnamed_addr #14

; Function Attrs: mustprogress uwtable
declare hidden void @_ZL22CreatePlyRangeGridFaceP6R3MeshP12R3MeshVertexS2_S2_d(ptr noundef, ptr noundef, ptr noundef, ptr noundef, double noundef) local_unnamed_addr #0

declare ptr @ply_get_other_element(ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #1

declare void @ply_close(ptr noundef) local_unnamed_addr #1

declare void @_ZN12R3MeshVertexC1Ev(ptr) local_unnamed_addr

declare void @_ZN12R3MeshVertexD1Ev(ptr) local_unnamed_addr

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

attributes #0 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { mustprogress nocallback nofree 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 = { 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 #5 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #6 = { 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 #7 = { 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 #8 = { nofree 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 nofree nounwind willreturn memory(argmem: read) "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 = { inlinehint mustprogress nofree nounwind willreturn memory(read) 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 "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 #12 = { mustprogress nofree nounwind willreturn "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 #13 = { mustprogress nounwind willreturn allockind("free") memory(argmem: readwrite, inaccessiblemem: readwrite) "alloc-family"="malloc" "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 #14 = { mustprogress nofree nounwind willreturn memory(argmem: readwrite, inaccessiblemem: readwrite) "alloc-family"="malloc" "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 #15 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #16 = { nounwind }
attributes #17 = { builtin allocsize(0) }
attributes #18 = { builtin nounwind }
attributes #19 = { nounwind willreturn memory(read) }

!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 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"any pointer", !7, i64 0}
!11 = !{!12, !10, i64 56}
!12 = !{!"_ZTS6R3Mesh", !13, i64 8, !15, i64 24, !16, i64 40, !10, i64 56, !10, i64 64, !10, i64 72, !7, i64 80, !17, i64 208, !10, i64 264}
!13 = !{!"_ZTS7RNArrayIP12R3MeshVertexE", !14, i64 0}
!14 = !{!"_ZTS8RNVArray", !10, i64 0, !6, i64 8, !6, i64 12}
!15 = !{!"_ZTS7RNArrayIP10R3MeshEdgeE", !14, i64 0}
!16 = !{!"_ZTS7RNArrayIP10R3MeshFaceE", !14, i64 0}
!17 = !{!"_ZTS5R3Box", !18, i64 0, !20, i64 8, !20, i64 32}
!18 = !{!"_ZTS7R3Solid", !19, i64 0}
!19 = !{!"_ZTS7R3Shape"}
!20 = !{!"_ZTS7R3Point", !7, i64 0}
!21 = !{!22, !10, i64 0}
!22 = !{!"_ZTS11PlyProperty", !10, i64 0, !6, i64 8, !6, i64 12, !6, i64 16, !6, i64 20, !6, i64 24, !6, i64 28, !6, i64 32}
!23 = distinct !{!23, !24}
!24 = !{!"llvm.loop.mustprogress"}
!25 = !{!26, !27, i64 0}
!26 = !{!"_ZTSZN6R3Mesh11ReadPlyFileEPKcE9PlyVertex", !27, i64 0, !27, i64 4, !27, i64 8, !27, i64 12, !27, i64 16, !27, i64 20, !27, i64 24, !27, i64 28, !7, i64 32, !7, i64 33, !7, i64 34}
!27 = !{!"float", !7, i64 0}
!28 = !{!26, !27, i64 4}
!29 = !{!26, !27, i64 8}
!30 = !{!31, !31, i64 0}
!31 = !{!"vtable pointer", !8, i64 0}
!32 = !{!26, !27, i64 12}
!33 = !{!26, !27, i64 16}
!34 = !{!26, !27, i64 20}
!35 = !{!26, !27, i64 24}
!36 = !{!26, !27, i64 28}
!37 = !{!26, !7, i64 32}
!38 = !{!26, !7, i64 33}
!39 = !{!26, !7, i64 34}
!40 = distinct !{!40, !24}
!41 = distinct !{!41, !24}
!42 = !{!43, !7, i64 0}
!43 = !{!"_ZTSZN6R3Mesh11ReadPlyFileEPKcE7PlyFace", !7, i64 0, !10, i64 8, !6, i64 16, !6, i64 20, !6, i64 24}
!44 = !{!43, !10, i64 8}
!45 = !{!43, !6, i64 16}
!46 = !{!43, !6, i64 20}
!47 = !{!43, !6, i64 24}
!48 = distinct !{!48, !24}
!49 = distinct !{!49, !24}
!50 = distinct !{!50, !24}
!51 = distinct !{!51, !24}
!52 = distinct !{!52, !24}
!53 = distinct !{!53, !24}
!54 = distinct !{!54, !24}
!55 = !{!56, !7, i64 0}
!56 = !{!"_ZTSZN6R3Mesh11ReadPlyFileEPKcE12PlyRangeGrid", !7, i64 0, !10, i64 8}
!57 = !{!56, !10, i64 8}
!58 = distinct !{!58, !24}
!59 = distinct !{!59, !24}


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