; LLVM IR from zeux/meshoptimizer :: demo/main.ll (Z20processDeinterleavedPKc)

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

%"class.std::vector.5" = type { %"struct.std::_Vector_base.6" }
%"struct.std::_Vector_base.6" = type { %"struct.std::_Vector_base<float, std::allocator<float>>::_Vector_impl" }
%"struct.std::_Vector_base<float, std::allocator<float>>::_Vector_impl" = type { %"struct.std::_Vector_base<float, std::allocator<float>>::_Vector_impl_data" }
%"struct.std::_Vector_base<float, std::allocator<float>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::allocator.7" = type { i8 }
%struct.fastObjIndex = type { i32, i32, i32 }
%struct.meshopt_Stream = type { ptr, i64, i64 }
%"class.std::vector.0" = type { %"struct.std::_Vector_base.1" }
%"struct.std::_Vector_base.1" = type { %"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl" }
%"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl" = type { %"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl_data" }
%"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::allocator.2" = type { i8 }
%struct.fastObjMesh = type { i32, ptr, i32, ptr, i32, ptr, i32, ptr, i32, ptr, ptr, i32, ptr, i32, ptr, i32, ptr, i32, ptr, i32, ptr }

@.str = external hidden unnamed_addr constant [34 x i8], align 1
@.str.45 = external hidden unnamed_addr constant [123 x i8], align 1

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef double @_Z9timestampv() #1

declare ptr @fast_obj_read(ptr noundef) #2

declare i32 @printf(ptr noundef, ...) #2

declare i32 @__gxx_personality_v0(...)

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

declare void @fast_obj_destroy(ptr noundef) #2

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

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

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

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

declare void @meshopt_remapIndexBuffer(ptr noundef, ptr noundef, i64 noundef, ptr noundef) #2

declare void @meshopt_remapVertexBuffer(ptr noundef, ptr noundef, i64 noundef, i64 noundef, ptr noundef) #2

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

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

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

declare void @meshopt_optimizeVertexCache(ptr noundef, ptr noundef, i64 noundef, i64 noundef) #2

declare i64 @meshopt_optimizeVertexFetchRemap(ptr noundef, ptr noundef, i64 noundef, i64 noundef) #2

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_Z20processDeinterleavedPKc(ptr noundef %0) #4 personality ptr @__gxx_personality_v0 {
  %2 = alloca ptr, align 8
  %3 = alloca ptr, align 8
  %4 = alloca i32, align 4
  %5 = alloca i64, align 8
  %6 = alloca i32, align 4
  %7 = alloca %"class.std::vector.5", align 8
  %8 = alloca %"class.std::allocator.7", align 1
  %9 = alloca ptr, align 8
  %10 = alloca i32, align 4
  %11 = alloca %"class.std::vector.5", align 8
  %12 = alloca %"class.std::allocator.7", align 1
  %13 = alloca %"class.std::vector.5", align 8
  %14 = alloca %"class.std::allocator.7", align 1
  %15 = alloca i64, align 8
  %16 = alloca i64, align 8
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca %struct.fastObjIndex, align 4
  %20 = alloca double, align 8
  %21 = alloca [3 x %struct.meshopt_Stream], align 16
  %22 = alloca %"class.std::vector.0", align 8
  %23 = alloca %"class.std::allocator.2", align 1
  %24 = alloca i64, align 8
  %25 = alloca %"class.std::vector.0", align 8
  %26 = alloca %"class.std::allocator.2", align 1
  %27 = alloca %"class.std::vector.5", align 8
  %28 = alloca %"class.std::allocator.7", align 1
  %29 = alloca %"class.std::vector.5", align 8
  %30 = alloca %"class.std::allocator.7", align 1
  %31 = alloca %"class.std::vector.5", align 8
  %32 = alloca %"class.std::allocator.7", align 1
  %33 = alloca double, align 8
  %34 = alloca double, align 8
  %35 = alloca %struct.meshopt_Stream, align 8
  %36 = alloca %"class.std::vector.0", align 8
  %37 = alloca %"class.std::allocator.2", align 1
  %38 = alloca double, align 8
  store ptr %0, ptr %2, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %3) #5
  %39 = load ptr, ptr %2, align 8, !tbaa !5
  %40 = call ptr @fast_obj_read(ptr noundef %39)
  store ptr %40, ptr %3, align 8, !tbaa !5
  %41 = load ptr, ptr %3, align 8, !tbaa !5
  %42 = icmp ne ptr %41, null
  br i1 %42, label %46, label %43

43:                                               ; preds = %1
  %44 = load ptr, ptr %2, align 8, !tbaa !5
  %45 = call i32 (ptr, ...) @printf(ptr noundef @.str, ptr noundef %44)
  store i32 1, ptr %4, align 4
  br label %343

46:                                               ; preds = %1
  call void @llvm.lifetime.start.p0(i64 8, ptr %5) #5
  store i64 0, ptr %5, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #5
  store i32 0, ptr %6, align 4, !tbaa !11
  br label %47

47:                                               ; preds = %67, %46
  %48 = load i32, ptr %6, align 4, !tbaa !11
  %49 = load ptr, ptr %3, align 8, !tbaa !5
  %50 = getelementptr inbounds %struct.fastObjMesh, ptr %49, i32 0, i32 8
  %51 = load i32, ptr %50, align 8, !tbaa !13
  %52 = icmp ult i32 %48, %51
  br i1 %52, label %54, label %53

53:                                               ; preds = %47
  store i32 2, ptr %4, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #5
  br label %70

54:                                               ; preds = %47
  %55 = load ptr, ptr %3, align 8, !tbaa !5
  %56 = getelementptr inbounds %struct.fastObjMesh, ptr %55, i32 0, i32 9
  %57 = load ptr, ptr %56, align 8, !tbaa !15
  %58 = load i32, ptr %6, align 4, !tbaa !11
  %59 = zext i32 %58 to i64
  %60 = getelementptr inbounds i32, ptr %57, i64 %59
  %61 = load i32, ptr %60, align 4, !tbaa !11
  %62 = sub i32 %61, 2
  %63 = mul i32 3, %62
  %64 = zext i32 %63 to i64
  %65 = load i64, ptr %5, align 8, !tbaa !9
  %66 = add i64 %65, %64
  store i64 %66, ptr %5, align 8, !tbaa !9
  br label %67

67:                                               ; preds = %54
  %68 = load i32, ptr %6, align 4, !tbaa !11
  %69 = add i32 %68, 1
  store i32 %69, ptr %6, align 4, !tbaa !11
  br label %47, !llvm.loop !16

70:                                               ; preds = %53
  call void @llvm.lifetime.start.p0(i64 24, ptr %7) #5
  %71 = load i64, ptr %5, align 8, !tbaa !9
  %72 = mul i64 %71, 3
  call void @llvm.lifetime.start.p0(i64 1, ptr %8) #5
  call void @_ZNSaIfEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %8) #5
  invoke void @_ZNSt6vectorIfSaIfEEC2EmRKS0_(ptr noundef nonnull align 8 dereferenceable(24) %7, i64 noundef %72, ptr noundef nonnull align 1 dereferenceable(1) %8)
          to label %73 unwind label %87

73:                                               ; preds = %70
  call void @_ZNSt15__new_allocatorIfED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %8) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %8) #5
  call void @llvm.lifetime.start.p0(i64 24, ptr %11) #5
  %74 = load i64, ptr %5, align 8, !tbaa !9
  %75 = mul i64 %74, 3
  call void @llvm.lifetime.start.p0(i64 1, ptr %12) #5
  call void @_ZNSaIfEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %12) #5
  invoke void @_ZNSt6vectorIfSaIfEEC2EmRKS0_(ptr noundef nonnull align 8 dereferenceable(24) %11, i64 noundef %75, ptr noundef nonnull align 1 dereferenceable(1) %12)
          to label %76 unwind label %91

76:                                               ; preds = %73
  call void @_ZNSt15__new_allocatorIfED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %12) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %12) #5
  call void @llvm.lifetime.start.p0(i64 24, ptr %13) #5
  %77 = load i64, ptr %5, align 8, !tbaa !9
  %78 = mul i64 %77, 2
  call void @llvm.lifetime.start.p0(i64 1, ptr %14) #5
  call void @_ZNSaIfEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %14) #5
  invoke void @_ZNSt6vectorIfSaIfEEC2EmRKS0_(ptr noundef nonnull align 8 dereferenceable(24) %13, i64 noundef %78, ptr noundef nonnull align 1 dereferenceable(1) %14)
          to label %79 unwind label %95

79:                                               ; preds = %76
  call void @_ZNSt15__new_allocatorIfED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %14) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %14) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #5
  store i64 0, ptr %15, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #5
  store i64 0, ptr %16, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #5
  store i32 0, ptr %17, align 4, !tbaa !11
  br label %80

80:                                               ; preds = %223, %79
  %81 = load i32, ptr %17, align 4, !tbaa !11
  %82 = load ptr, ptr %3, align 8, !tbaa !5
  %83 = getelementptr inbounds %struct.fastObjMesh, ptr %82, i32 0, i32 8
  %84 = load i32, ptr %83, align 8, !tbaa !13
  %85 = icmp ult i32 %81, %84
  br i1 %85, label %99, label %86

86:                                               ; preds = %80
  store i32 5, ptr %4, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #5
  br label %226

87:                                               ; preds = %70
  %88 = landingpad { ptr, i32 }
          cleanup
  %89 = extractvalue { ptr, i32 } %88, 0
  store ptr %89, ptr %9, align 8
  %90 = extractvalue { ptr, i32 } %88, 1
  store i32 %90, ptr %10, align 4
  call void @_ZNSt15__new_allocatorIfED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %8) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %8) #5
  br label %422

91:                                               ; preds = %73
  %92 = landingpad { ptr, i32 }
          cleanup
  %93 = extractvalue { ptr, i32 } %92, 0
  store ptr %93, ptr %9, align 8
  %94 = extractvalue { ptr, i32 } %92, 1
  store i32 %94, ptr %10, align 4
  call void @_ZNSt15__new_allocatorIfED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %12) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %12) #5
  br label %421

95:                                               ; preds = %76
  %96 = landingpad { ptr, i32 }
          cleanup
  %97 = extractvalue { ptr, i32 } %96, 0
  store ptr %97, ptr %9, align 8
  %98 = extractvalue { ptr, i32 } %96, 1
  store i32 %98, ptr %10, align 4
  call void @_ZNSt15__new_allocatorIfED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %14) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %14) #5
  br label %420

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

100:                                              ; preds = %209, %99
  %101 = load i32, ptr %18, align 4, !tbaa !11
  %102 = load ptr, ptr %3, align 8, !tbaa !5
  %103 = getelementptr inbounds %struct.fastObjMesh, ptr %102, i32 0, i32 9
  %104 = load ptr, ptr %103, align 8, !tbaa !15
  %105 = load i32, ptr %17, align 4, !tbaa !11
  %106 = zext i32 %105 to i64
  %107 = getelementptr inbounds i32, ptr %104, i64 %106
  %108 = load i32, ptr %107, align 4, !tbaa !11
  %109 = icmp ult i32 %101, %108
  br i1 %109, label %111, label %110

110:                                              ; preds = %100
  store i32 8, ptr %4, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #5
  br label %212

111:                                              ; preds = %100
  call void @llvm.lifetime.start.p0(i64 12, ptr %19) #5
  %112 = load ptr, ptr %3, align 8, !tbaa !5
  %113 = getelementptr inbounds %struct.fastObjMesh, ptr %112, i32 0, i32 12
  %114 = load ptr, ptr %113, align 8, !tbaa !18
  %115 = load i64, ptr %16, align 8, !tbaa !9
  %116 = load i32, ptr %18, align 4, !tbaa !11
  %117 = zext i32 %116 to i64
  %118 = add i64 %115, %117
  %119 = getelementptr inbounds %struct.fastObjIndex, ptr %114, i64 %118
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %19, ptr align 4 %119, i64 12, i1 false), !tbaa.struct !19
  %120 = load i32, ptr %18, align 4, !tbaa !11
  %121 = icmp uge i32 %120, 3
  br i1 %121, label %122, label %173

122:                                              ; preds = %111
  %123 = load i64, ptr %15, align 8, !tbaa !9
  %124 = add i64 %123, 0
  %125 = mul i64 %124, 3
  %126 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %7, i64 noundef %125) #5
  %127 = load i64, ptr %15, align 8, !tbaa !9
  %128 = sub i64 %127, 3
  %129 = mul i64 %128, 3
  %130 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %7, i64 noundef %129) #5
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %126, ptr align 4 %130, i64 12, i1 false)
  %131 = load i64, ptr %15, align 8, !tbaa !9
  %132 = add i64 %131, 0
  %133 = mul i64 %132, 3
  %134 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %11, i64 noundef %133) #5
  %135 = load i64, ptr %15, align 8, !tbaa !9
  %136 = sub i64 %135, 3
  %137 = mul i64 %136, 3
  %138 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %11, i64 noundef %137) #5
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %134, ptr align 4 %138, i64 12, i1 false)
  %139 = load i64, ptr %15, align 8, !tbaa !9
  %140 = add i64 %139, 0
  %141 = mul i64 %140, 2
  %142 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %13, i64 noundef %141) #5
  %143 = load i64, ptr %15, align 8, !tbaa !9
  %144 = sub i64 %143, 3
  %145 = mul i64 %144, 2
  %146 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %13, i64 noundef %145) #5
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %142, ptr align 4 %146, i64 8, i1 false)
  %147 = load i64, ptr %15, align 8, !tbaa !9
  %148 = add i64 %147, 1
  %149 = mul i64 %148, 3
  %150 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %7, i64 noundef %149) #5
  %151 = load i64, ptr %15, align 8, !tbaa !9
  %152 = sub i64 %151, 1
  %153 = mul i64 %152, 3
  %154 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %7, i64 noundef %153) #5
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %150, ptr align 4 %154, i64 12, i1 false)
  %155 = load i64, ptr %15, align 8, !tbaa !9
  %156 = add i64 %155, 1
  %157 = mul i64 %156, 3
  %158 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %11, i64 noundef %157) #5
  %159 = load i64, ptr %15, align 8, !tbaa !9
  %160 = sub i64 %159, 1
  %161 = mul i64 %160, 3
  %162 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %11, i64 noundef %161) #5
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %158, ptr align 4 %162, i64 12, i1 false)
  %163 = load i64, ptr %15, align 8, !tbaa !9
  %164 = add i64 %163, 1
  %165 = mul i64 %164, 2
  %166 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %13, i64 noundef %165) #5
  %167 = load i64, ptr %15, align 8, !tbaa !9
  %168 = sub i64 %167, 1
  %169 = mul i64 %168, 2
  %170 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %13, i64 noundef %169) #5
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %166, ptr align 4 %170, i64 8, i1 false)
  %171 = load i64, ptr %15, align 8, !tbaa !9
  %172 = add i64 %171, 2
  store i64 %172, ptr %15, align 8, !tbaa !9
  br label %173

173:                                              ; preds = %122, %111
  %174 = load i64, ptr %15, align 8, !tbaa !9
  %175 = mul i64 %174, 3
  %176 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %7, i64 noundef %175) #5
  %177 = load ptr, ptr %3, align 8, !tbaa !5
  %178 = getelementptr inbounds %struct.fastObjMesh, ptr %177, i32 0, i32 1
  %179 = load ptr, ptr %178, align 8, !tbaa !20
  %180 = getelementptr inbounds %struct.fastObjIndex, ptr %19, i32 0, i32 0
  %181 = load i32, ptr %180, align 4, !tbaa !21
  %182 = mul i32 %181, 3
  %183 = zext i32 %182 to i64
  %184 = getelementptr inbounds float, ptr %179, i64 %183
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %176, ptr align 4 %184, i64 12, i1 false)
  %185 = load i64, ptr %15, align 8, !tbaa !9
  %186 = mul i64 %185, 3
  %187 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %11, i64 noundef %186) #5
  %188 = load ptr, ptr %3, align 8, !tbaa !5
  %189 = getelementptr inbounds %struct.fastObjMesh, ptr %188, i32 0, i32 5
  %190 = load ptr, ptr %189, align 8, !tbaa !23
  %191 = getelementptr inbounds %struct.fastObjIndex, ptr %19, i32 0, i32 2
  %192 = load i32, ptr %191, align 4, !tbaa !24
  %193 = mul i32 %192, 3
  %194 = zext i32 %193 to i64
  %195 = getelementptr inbounds float, ptr %190, i64 %194
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %187, ptr align 4 %195, i64 12, i1 false)
  %196 = load i64, ptr %15, align 8, !tbaa !9
  %197 = mul i64 %196, 2
  %198 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %13, i64 noundef %197) #5
  %199 = load ptr, ptr %3, align 8, !tbaa !5
  %200 = getelementptr inbounds %struct.fastObjMesh, ptr %199, i32 0, i32 3
  %201 = load ptr, ptr %200, align 8, !tbaa !25
  %202 = getelementptr inbounds %struct.fastObjIndex, ptr %19, i32 0, i32 1
  %203 = load i32, ptr %202, align 4, !tbaa !26
  %204 = mul i32 %203, 2
  %205 = zext i32 %204 to i64
  %206 = getelementptr inbounds float, ptr %201, i64 %205
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %198, ptr align 4 %206, i64 8, i1 false)
  %207 = load i64, ptr %15, align 8, !tbaa !9
  %208 = add i64 %207, 1
  store i64 %208, ptr %15, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 12, ptr %19) #5
  br label %209

209:                                              ; preds = %173
  %210 = load i32, ptr %18, align 4, !tbaa !11
  %211 = add i32 %210, 1
  store i32 %211, ptr %18, align 4, !tbaa !11
  br label %100, !llvm.loop !27

212:                                              ; preds = %110
  %213 = load ptr, ptr %3, align 8, !tbaa !5
  %214 = getelementptr inbounds %struct.fastObjMesh, ptr %213, i32 0, i32 9
  %215 = load ptr, ptr %214, align 8, !tbaa !15
  %216 = load i32, ptr %17, align 4, !tbaa !11
  %217 = zext i32 %216 to i64
  %218 = getelementptr inbounds i32, ptr %215, i64 %217
  %219 = load i32, ptr %218, align 4, !tbaa !11
  %220 = zext i32 %219 to i64
  %221 = load i64, ptr %16, align 8, !tbaa !9
  %222 = add i64 %221, %220
  store i64 %222, ptr %16, align 8, !tbaa !9
  br label %223

223:                                              ; preds = %212
  %224 = load i32, ptr %17, align 4, !tbaa !11
  %225 = add i32 %224, 1
  store i32 %225, ptr %17, align 4, !tbaa !11
  br label %80, !llvm.loop !28

226:                                              ; preds = %86
  %227 = load ptr, ptr %3, align 8, !tbaa !5
  invoke void @fast_obj_destroy(ptr noundef %227)
          to label %228 unwind label %346

228:                                              ; preds = %226
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #5
  %229 = call noundef double @_Z9timestampv()
  store double %229, ptr %20, align 8, !tbaa !29
  call void @llvm.lifetime.start.p0(i64 72, ptr %21) #5
  %230 = getelementptr inbounds %struct.meshopt_Stream, ptr %21, i32 0, i32 0
  %231 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %7, i64 noundef 0) #5
  store ptr %231, ptr %230, align 8, !tbaa !31
  %232 = getelementptr inbounds %struct.meshopt_Stream, ptr %21, i32 0, i32 1
  store i64 12, ptr %232, align 8, !tbaa !33
  %233 = getelementptr inbounds %struct.meshopt_Stream, ptr %21, i32 0, i32 2
  store i64 12, ptr %233, align 8, !tbaa !34
  %234 = getelementptr inbounds %struct.meshopt_Stream, ptr %21, i64 1
  %235 = getelementptr inbounds %struct.meshopt_Stream, ptr %234, i32 0, i32 0
  %236 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %11, i64 noundef 0) #5
  store ptr %236, ptr %235, align 8, !tbaa !31
  %237 = getelementptr inbounds %struct.meshopt_Stream, ptr %234, i32 0, i32 1
  store i64 12, ptr %237, align 8, !tbaa !33
  %238 = getelementptr inbounds %struct.meshopt_Stream, ptr %234, i32 0, i32 2
  store i64 12, ptr %238, align 8, !tbaa !34
  %239 = getelementptr inbounds %struct.meshopt_Stream, ptr %21, i64 2
  %240 = getelementptr inbounds %struct.meshopt_Stream, ptr %239, i32 0, i32 0
  %241 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %13, i64 noundef 0) #5
  store ptr %241, ptr %240, align 8, !tbaa !31
  %242 = getelementptr inbounds %struct.meshopt_Stream, ptr %239, i32 0, i32 1
  store i64 8, ptr %242, align 8, !tbaa !33
  %243 = getelementptr inbounds %struct.meshopt_Stream, ptr %239, i32 0, i32 2
  store i64 8, ptr %243, align 8, !tbaa !34
  call void @llvm.lifetime.start.p0(i64 24, ptr %22) #5
  %244 = load i64, ptr %5, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %23) #5
  call void @_ZNSaIjEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %23) #5
  invoke void @_ZNSt6vectorIjSaIjEEC2EmRKS0_(ptr noundef nonnull align 8 dereferenceable(24) %22, i64 noundef %244, ptr noundef nonnull align 1 dereferenceable(1) %23)
          to label %245 unwind label %350

245:                                              ; preds = %228
  call void @_ZNSt15__new_allocatorIjED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %23) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %23) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #5
  %246 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %22, i64 noundef 0) #5
  %247 = load i64, ptr %5, align 8, !tbaa !9
  %248 = load i64, ptr %5, align 8, !tbaa !9
  %249 = getelementptr inbounds [3 x %struct.meshopt_Stream], ptr %21, i64 0, i64 0
  %250 = invoke i64 @meshopt_generateVertexRemapMulti(ptr noundef %246, ptr noundef null, i64 noundef %247, i64 noundef %248, ptr noundef %249, i64 noundef 3)
          to label %251 unwind label %354

251:                                              ; preds = %245
  store i64 %250, ptr %24, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 24, ptr %25) #5
  %252 = load i64, ptr %5, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %26) #5
  call void @_ZNSaIjEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %26) #5
  invoke void @_ZNSt6vectorIjSaIjEEC2EmRKS0_(ptr noundef nonnull align 8 dereferenceable(24) %25, i64 noundef %252, ptr noundef nonnull align 1 dereferenceable(1) %26)
          to label %253 unwind label %358

253:                                              ; preds = %251
  call void @_ZNSt15__new_allocatorIjED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %26) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %26) #5
  %254 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %25, i64 noundef 0) #5
  %255 = load i64, ptr %5, align 8, !tbaa !9
  %256 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %22, i64 noundef 0) #5
  invoke void @meshopt_remapIndexBuffer(ptr noundef %254, ptr noundef null, i64 noundef %255, ptr noundef %256)
          to label %257 unwind label %362

257:                                              ; preds = %253
  call void @llvm.lifetime.start.p0(i64 24, ptr %27) #5
  %258 = load i64, ptr %24, align 8, !tbaa !9
  %259 = mul i64 %258, 3
  call void @llvm.lifetime.start.p0(i64 1, ptr %28) #5
  call void @_ZNSaIfEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %28) #5
  invoke void @_ZNSt6vectorIfSaIfEEC2EmRKS0_(ptr noundef nonnull align 8 dereferenceable(24) %27, i64 noundef %259, ptr noundef nonnull align 1 dereferenceable(1) %28)
          to label %260 unwind label %366

260:                                              ; preds = %257
  call void @_ZNSt15__new_allocatorIfED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %28) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %28) #5
  %261 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %27, i64 noundef 0) #5
  %262 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %7, i64 noundef 0) #5
  %263 = load i64, ptr %5, align 8, !tbaa !9
  %264 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %22, i64 noundef 0) #5
  invoke void @meshopt_remapVertexBuffer(ptr noundef %261, ptr noundef %262, i64 noundef %263, i64 noundef 12, ptr noundef %264)
          to label %265 unwind label %370

265:                                              ; preds = %260
  call void @llvm.lifetime.start.p0(i64 24, ptr %29) #5
  %266 = load i64, ptr %24, align 8, !tbaa !9
  %267 = mul i64 %266, 3
  call void @llvm.lifetime.start.p0(i64 1, ptr %30) #5
  call void @_ZNSaIfEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %30) #5
  invoke void @_ZNSt6vectorIfSaIfEEC2EmRKS0_(ptr noundef nonnull align 8 dereferenceable(24) %29, i64 noundef %267, ptr noundef nonnull align 1 dereferenceable(1) %30)
          to label %268 unwind label %374

268:                                              ; preds = %265
  call void @_ZNSt15__new_allocatorIfED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %30) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %30) #5
  %269 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %29, i64 noundef 0) #5
  %270 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %11, i64 noundef 0) #5
  %271 = load i64, ptr %5, align 8, !tbaa !9
  %272 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %22, i64 noundef 0) #5
  invoke void @meshopt_remapVertexBuffer(ptr noundef %269, ptr noundef %270, i64 noundef %271, i64 noundef 12, ptr noundef %272)
          to label %273 unwind label %378

273:                                              ; preds = %268
  call void @llvm.lifetime.start.p0(i64 24, ptr %31) #5
  %274 = load i64, ptr %24, align 8, !tbaa !9
  %275 = mul i64 %274, 2
  call void @llvm.lifetime.start.p0(i64 1, ptr %32) #5
  call void @_ZNSaIfEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %32) #5
  invoke void @_ZNSt6vectorIfSaIfEEC2EmRKS0_(ptr noundef nonnull align 8 dereferenceable(24) %31, i64 noundef %275, ptr noundef nonnull align 1 dereferenceable(1) %32)
          to label %276 unwind label %382

276:                                              ; preds = %273
  call void @_ZNSt15__new_allocatorIfED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %32) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %32) #5
  %277 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %31, i64 noundef 0) #5
  %278 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %13, i64 noundef 0) #5
  %279 = load i64, ptr %5, align 8, !tbaa !9
  %280 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %22, i64 noundef 0) #5
  invoke void @meshopt_remapVertexBuffer(ptr noundef %277, ptr noundef %278, i64 noundef %279, i64 noundef 8, ptr noundef %280)
          to label %281 unwind label %386

281:                                              ; preds = %276
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #5
  %282 = call noundef double @_Z9timestampv()
  store double %282, ptr %33, align 8, !tbaa !29
  %283 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %25, i64 noundef 0) #5
  %284 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %25, i64 noundef 0) #5
  %285 = load i64, ptr %5, align 8, !tbaa !9
  %286 = load i64, ptr %24, align 8, !tbaa !9
  invoke void @meshopt_optimizeVertexCache(ptr noundef %283, ptr noundef %284, i64 noundef %285, i64 noundef %286)
          to label %287 unwind label %390

287:                                              ; preds = %281
  %288 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %22, i64 noundef 0) #5
  %289 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %25, i64 noundef 0) #5
  %290 = load i64, ptr %5, align 8, !tbaa !9
  %291 = load i64, ptr %24, align 8, !tbaa !9
  %292 = invoke i64 @meshopt_optimizeVertexFetchRemap(ptr noundef %288, ptr noundef %289, i64 noundef %290, i64 noundef %291)
          to label %293 unwind label %390

293:                                              ; preds = %287
  %294 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %27, i64 noundef 0) #5
  %295 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %27, i64 noundef 0) #5
  %296 = load i64, ptr %24, align 8, !tbaa !9
  %297 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %22, i64 noundef 0) #5
  invoke void @meshopt_remapVertexBuffer(ptr noundef %294, ptr noundef %295, i64 noundef %296, i64 noundef 12, ptr noundef %297)
          to label %298 unwind label %390

298:                                              ; preds = %293
  %299 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %29, i64 noundef 0) #5
  %300 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %29, i64 noundef 0) #5
  %301 = load i64, ptr %24, align 8, !tbaa !9
  %302 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %22, i64 noundef 0) #5
  invoke void @meshopt_remapVertexBuffer(ptr noundef %299, ptr noundef %300, i64 noundef %301, i64 noundef 12, ptr noundef %302)
          to label %303 unwind label %390

303:                                              ; preds = %298
  %304 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %31, i64 noundef 0) #5
  %305 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %31, i64 noundef 0) #5
  %306 = load i64, ptr %24, align 8, !tbaa !9
  %307 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %22, i64 noundef 0) #5
  invoke void @meshopt_remapVertexBuffer(ptr noundef %304, ptr noundef %305, i64 noundef %306, i64 noundef 8, ptr noundef %307)
          to label %308 unwind label %390

308:                                              ; preds = %303
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #5
  %309 = call noundef double @_Z9timestampv()
  store double %309, ptr %34, align 8, !tbaa !29
  call void @llvm.lifetime.start.p0(i64 24, ptr %35) #5
  %310 = getelementptr inbounds %struct.meshopt_Stream, ptr %35, i32 0, i32 0
  %311 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %27, i64 noundef 0) #5
  store ptr %311, ptr %310, align 8, !tbaa !31
  %312 = getelementptr inbounds %struct.meshopt_Stream, ptr %35, i32 0, i32 1
  store i64 12, ptr %312, align 8, !tbaa !33
  %313 = getelementptr inbounds %struct.meshopt_Stream, ptr %35, i32 0, i32 2
  store i64 12, ptr %313, align 8, !tbaa !34
  call void @llvm.lifetime.start.p0(i64 24, ptr %36) #5
  %314 = load i64, ptr %5, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %37) #5
  call void @_ZNSaIjEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %37) #5
  invoke void @_ZNSt6vectorIjSaIjEEC2EmRKS0_(ptr noundef nonnull align 8 dereferenceable(24) %36, i64 noundef %314, ptr noundef nonnull align 1 dereferenceable(1) %37)
          to label %315 unwind label %394

315:                                              ; preds = %308
  call void @_ZNSt15__new_allocatorIjED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %37) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %37) #5
  %316 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %36, i64 noundef 0) #5
  %317 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %25, i64 noundef 0) #5
  %318 = load i64, ptr %5, align 8, !tbaa !9
  %319 = load i64, ptr %24, align 8, !tbaa !9
  invoke void @meshopt_generateShadowIndexBufferMulti(ptr noundef %316, ptr noundef %317, i64 noundef %318, i64 noundef %319, ptr noundef %35, i64 noundef 1)
          to label %320 unwind label %398

320:                                              ; preds = %315
  %321 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %36, i64 noundef 0) #5
  %322 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %36, i64 noundef 0) #5
  %323 = load i64, ptr %5, align 8, !tbaa !9
  %324 = load i64, ptr %24, align 8, !tbaa !9
  invoke void @meshopt_optimizeVertexCache(ptr noundef %321, ptr noundef %322, i64 noundef %323, i64 noundef %324)
          to label %325 unwind label %398

325:                                              ; preds = %320
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #5
  %326 = call noundef double @_Z9timestampv()
  store double %326, ptr %38, align 8, !tbaa !29
  %327 = load i64, ptr %24, align 8, !tbaa !9
  %328 = trunc i64 %327 to i32
  %329 = load double, ptr %33, align 8, !tbaa !29
  %330 = load double, ptr %20, align 8, !tbaa !29
  %331 = fsub double %329, %330
  %332 = fmul double %331, 1.000000e+03
  %333 = load double, ptr %34, align 8, !tbaa !29
  %334 = load double, ptr %33, align 8, !tbaa !29
  %335 = fsub double %333, %334
  %336 = fmul double %335, 1.000000e+03
  %337 = load double, ptr %38, align 8, !tbaa !29
  %338 = load double, ptr %34, align 8, !tbaa !29
  %339 = fsub double %337, %338
  %340 = fmul double %339, 1.000000e+03
  %341 = invoke i32 (ptr, ...) @printf(ptr noundef @.str.45, i32 noundef %328, double noundef %332, double noundef %336, double noundef %340)
          to label %342 unwind label %402

342:                                              ; preds = %325
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #5
  call void @_ZNSt6vectorIjSaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %36) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr %36) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr %35) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #5
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %31) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr %31) #5
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %29) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr %29) #5
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %27) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr %27) #5
  call void @_ZNSt6vectorIjSaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %25) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr %25) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #5
  call void @_ZNSt6vectorIjSaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %22) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr %22) #5
  call void @llvm.lifetime.end.p0(i64 72, ptr %21) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #5
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %13) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr %13) #5
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %11) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr %11) #5
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %7) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr %7) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #5
  store i32 0, ptr %4, align 4
  br label %343

343:                                              ; preds = %342, %43
  call void @llvm.lifetime.end.p0(i64 8, ptr %3) #5
  %344 = load i32, ptr %4, align 4
  switch i32 %344, label %428 [
    i32 0, label %345
    i32 1, label %345
  ]

345:                                              ; preds = %343, %343
  ret void

346:                                              ; preds = %226
  %347 = landingpad { ptr, i32 }
          cleanup
  %348 = extractvalue { ptr, i32 } %347, 0
  store ptr %348, ptr %9, align 8
  %349 = extractvalue { ptr, i32 } %347, 1
  store i32 %349, ptr %10, align 4
  br label %419

350:                                              ; preds = %228
  %351 = landingpad { ptr, i32 }
          cleanup
  %352 = extractvalue { ptr, i32 } %351, 0
  store ptr %352, ptr %9, align 8
  %353 = extractvalue { ptr, i32 } %351, 1
  store i32 %353, ptr %10, align 4
  call void @_ZNSt15__new_allocatorIjED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %23) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %23) #5
  br label %418

354:                                              ; preds = %245
  %355 = landingpad { ptr, i32 }
          cleanup
  %356 = extractvalue { ptr, i32 } %355, 0
  store ptr %356, ptr %9, align 8
  %357 = extractvalue { ptr, i32 } %355, 1
  store i32 %357, ptr %10, align 4
  br label %417

358:                                              ; preds = %251
  %359 = landingpad { ptr, i32 }
          cleanup
  %360 = extractvalue { ptr, i32 } %359, 0
  store ptr %360, ptr %9, align 8
  %361 = extractvalue { ptr, i32 } %359, 1
  store i32 %361, ptr %10, align 4
  call void @_ZNSt15__new_allocatorIjED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %26) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %26) #5
  br label %416

362:                                              ; preds = %253
  %363 = landingpad { ptr, i32 }
          cleanup
  %364 = extractvalue { ptr, i32 } %363, 0
  store ptr %364, ptr %9, align 8
  %365 = extractvalue { ptr, i32 } %363, 1
  store i32 %365, ptr %10, align 4
  br label %415

366:                                              ; preds = %257
  %367 = landingpad { ptr, i32 }
          cleanup
  %368 = extractvalue { ptr, i32 } %367, 0
  store ptr %368, ptr %9, align 8
  %369 = extractvalue { ptr, i32 } %367, 1
  store i32 %369, ptr %10, align 4
  call void @_ZNSt15__new_allocatorIfED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %28) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %28) #5
  br label %414

370:                                              ; preds = %260
  %371 = landingpad { ptr, i32 }
          cleanup
  %372 = extractvalue { ptr, i32 } %371, 0
  store ptr %372, ptr %9, align 8
  %373 = extractvalue { ptr, i32 } %371, 1
  store i32 %373, ptr %10, align 4
  br label %413

374:                                              ; preds = %265
  %375 = landingpad { ptr, i32 }
          cleanup
  %376 = extractvalue { ptr, i32 } %375, 0
  store ptr %376, ptr %9, align 8
  %377 = extractvalue { ptr, i32 } %375, 1
  store i32 %377, ptr %10, align 4
  call void @_ZNSt15__new_allocatorIfED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %30) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %30) #5
  br label %412

378:                                              ; preds = %268
  %379 = landingpad { ptr, i32 }
          cleanup
  %380 = extractvalue { ptr, i32 } %379, 0
  store ptr %380, ptr %9, align 8
  %381 = extractvalue { ptr, i32 } %379, 1
  store i32 %381, ptr %10, align 4
  br label %411

382:                                              ; preds = %273
  %383 = landingpad { ptr, i32 }
          cleanup
  %384 = extractvalue { ptr, i32 } %383, 0
  store ptr %384, ptr %9, align 8
  %385 = extractvalue { ptr, i32 } %383, 1
  store i32 %385, ptr %10, align 4
  call void @_ZNSt15__new_allocatorIfED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %32) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %32) #5
  br label %410

386:                                              ; preds = %276
  %387 = landingpad { ptr, i32 }
          cleanup
  %388 = extractvalue { ptr, i32 } %387, 0
  store ptr %388, ptr %9, align 8
  %389 = extractvalue { ptr, i32 } %387, 1
  store i32 %389, ptr %10, align 4
  br label %409

390:                                              ; preds = %303, %298, %293, %287, %281
  %391 = landingpad { ptr, i32 }
          cleanup
  %392 = extractvalue { ptr, i32 } %391, 0
  store ptr %392, ptr %9, align 8
  %393 = extractvalue { ptr, i32 } %391, 1
  store i32 %393, ptr %10, align 4
  br label %408

394:                                              ; preds = %308
  %395 = landingpad { ptr, i32 }
          cleanup
  %396 = extractvalue { ptr, i32 } %395, 0
  store ptr %396, ptr %9, align 8
  %397 = extractvalue { ptr, i32 } %395, 1
  store i32 %397, ptr %10, align 4
  call void @_ZNSt15__new_allocatorIjED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %37) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %37) #5
  br label %407

398:                                              ; preds = %320, %315
  %399 = landingpad { ptr, i32 }
          cleanup
  %400 = extractvalue { ptr, i32 } %399, 0
  store ptr %400, ptr %9, align 8
  %401 = extractvalue { ptr, i32 } %399, 1
  store i32 %401, ptr %10, align 4
  br label %406

402:                                              ; preds = %325
  %403 = landingpad { ptr, i32 }
          cleanup
  %404 = extractvalue { ptr, i32 } %403, 0
  store ptr %404, ptr %9, align 8
  %405 = extractvalue { ptr, i32 } %403, 1
  store i32 %405, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #5
  br label %406

406:                                              ; preds = %402, %398
  call void @_ZNSt6vectorIjSaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %36) #5
  br label %407

407:                                              ; preds = %406, %394
  call void @llvm.lifetime.end.p0(i64 24, ptr %36) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr %35) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #5
  br label %408

408:                                              ; preds = %407, %390
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #5
  br label %409

409:                                              ; preds = %408, %386
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %31) #5
  br label %410

410:                                              ; preds = %409, %382
  call void @llvm.lifetime.end.p0(i64 24, ptr %31) #5
  br label %411

411:                                              ; preds = %410, %378
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %29) #5
  br label %412

412:                                              ; preds = %411, %374
  call void @llvm.lifetime.end.p0(i64 24, ptr %29) #5
  br label %413

413:                                              ; preds = %412, %370
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %27) #5
  br label %414

414:                                              ; preds = %413, %366
  call void @llvm.lifetime.end.p0(i64 24, ptr %27) #5
  br label %415

415:                                              ; preds = %414, %362
  call void @_ZNSt6vectorIjSaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %25) #5
  br label %416

416:                                              ; preds = %415, %358
  call void @llvm.lifetime.end.p0(i64 24, ptr %25) #5
  br label %417

417:                                              ; preds = %416, %354
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #5
  call void @_ZNSt6vectorIjSaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %22) #5
  br label %418

418:                                              ; preds = %417, %350
  call void @llvm.lifetime.end.p0(i64 24, ptr %22) #5
  call void @llvm.lifetime.end.p0(i64 72, ptr %21) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #5
  br label %419

419:                                              ; preds = %418, %346
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #5
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %13) #5
  br label %420

420:                                              ; preds = %419, %95
  call void @llvm.lifetime.end.p0(i64 24, ptr %13) #5
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %11) #5
  br label %421

421:                                              ; preds = %420, %91
  call void @llvm.lifetime.end.p0(i64 24, ptr %11) #5
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %7) #5
  br label %422

422:                                              ; preds = %421, %87
  call void @llvm.lifetime.end.p0(i64 24, ptr %7) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %3) #5
  br label %423

423:                                              ; preds = %422
  %424 = load ptr, ptr %9, align 8
  %425 = load i32, ptr %10, align 4
  %426 = insertvalue { ptr, i32 } poison, ptr %424, 0
  %427 = insertvalue { ptr, i32 } %426, i32 %425, 1
  resume { ptr, i32 } %427

428:                                              ; preds = %343
  unreachable
}

declare i64 @meshopt_generateVertexRemapMulti(ptr noundef, ptr noundef, i64 noundef, i64 noundef, ptr noundef, i64 noundef) #2

declare void @meshopt_generateShadowIndexBufferMulti(ptr noundef, ptr noundef, i64 noundef, i64 noundef, ptr noundef, i64 noundef) #2

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"long", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"int", !7, i64 0}
!13 = !{!14, !12, i64 64}
!14 = !{!"_ZTS11fastObjMesh", !12, i64 0, !6, i64 8, !12, i64 16, !6, i64 24, !12, i64 32, !6, i64 40, !12, i64 48, !6, i64 56, !12, i64 64, !6, i64 72, !6, i64 80, !12, i64 88, !6, i64 96, !12, i64 104, !6, i64 112, !12, i64 120, !6, i64 128, !12, i64 136, !6, i64 144, !12, i64 152, !6, i64 160}
!15 = !{!14, !6, i64 72}
!16 = distinct !{!16, !17}
!17 = !{!"llvm.loop.mustprogress"}
!18 = !{!14, !6, i64 96}
!19 = !{i64 0, i64 4, !11, i64 4, i64 4, !11, i64 8, i64 4, !11}
!20 = !{!14, !6, i64 8}
!21 = !{!22, !12, i64 0}
!22 = !{!"_ZTS12fastObjIndex", !12, i64 0, !12, i64 4, !12, i64 8}
!23 = !{!14, !6, i64 40}
!24 = !{!22, !12, i64 8}
!25 = !{!14, !6, i64 24}
!26 = !{!22, !12, i64 4}
!27 = distinct !{!27, !17}
!28 = distinct !{!28, !17}
!29 = !{!30, !30, i64 0}
!30 = !{!"double", !7, i64 0}
!31 = !{!32, !6, i64 0}
!32 = !{!"_ZTS14meshopt_Stream", !6, i64 0, !10, i64 8, !10, i64 16}
!33 = !{!32, !10, i64 8}
!34 = !{!32, !10, i64 16}


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

%"class.std::vector.5" = type { %"struct.std::_Vector_base.6" }
%"struct.std::_Vector_base.6" = type { %"struct.std::_Vector_base<float, std::allocator<float>>::_Vector_impl" }
%"struct.std::_Vector_base<float, std::allocator<float>>::_Vector_impl" = type { %"struct.std::_Vector_base<float, std::allocator<float>>::_Vector_impl_data" }
%"struct.std::_Vector_base<float, std::allocator<float>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::allocator.7" = type { i8 }
%struct.meshopt_Stream = type { ptr, i64, i64 }
%"class.std::vector.0" = type { %"struct.std::_Vector_base.1" }
%"struct.std::_Vector_base.1" = type { %"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl" }
%"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl" = type { %"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl_data" }
%"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::allocator.2" = type { i8 }
%struct.fastObjIndex = type { i32, i32, i32 }

@.str = external hidden unnamed_addr constant [34 x i8], align 1
@.str.45 = external hidden unnamed_addr constant [123 x i8], align 1

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef double @_Z9timestampv() local_unnamed_addr #1

declare ptr @fast_obj_read(ptr noundef) local_unnamed_addr #2

; Function Attrs: nofree nounwind
declare noundef i32 @printf(ptr nocapture noundef readonly, ...) local_unnamed_addr #3

declare i32 @__gxx_personality_v0(...)

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

declare void @fast_obj_destroy(ptr noundef) local_unnamed_addr #2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt6vectorIjSaIjEEC2EmRKS0_(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef, ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #5 align 2

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

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

declare void @meshopt_remapIndexBuffer(ptr noundef, ptr noundef, i64 noundef, ptr noundef) local_unnamed_addr #2

declare void @meshopt_remapVertexBuffer(ptr noundef, ptr noundef, i64 noundef, i64 noundef, ptr noundef) local_unnamed_addr #2

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

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

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

declare void @meshopt_optimizeVertexCache(ptr noundef, ptr noundef, i64 noundef, i64 noundef) local_unnamed_addr #2

declare i64 @meshopt_optimizeVertexFetchRemap(ptr noundef, ptr noundef, i64 noundef, i64 noundef) local_unnamed_addr #2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt6vectorIfSaIfEEC2EmRKS0_(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef, ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
define dso_local void @_Z20processDeinterleavedPKc(ptr noundef %0) local_unnamed_addr #5 personality ptr @__gxx_personality_v0 {
  %2 = alloca %"class.std::vector.5", align 8
  %3 = alloca %"class.std::allocator.7", align 1
  %4 = alloca %"class.std::vector.5", align 8
  %5 = alloca %"class.std::allocator.7", align 1
  %6 = alloca %"class.std::vector.5", align 8
  %7 = alloca %"class.std::allocator.7", align 1
  %8 = alloca [3 x %struct.meshopt_Stream], align 16
  %9 = alloca %"class.std::vector.0", align 8
  %10 = alloca %"class.std::allocator.2", align 1
  %11 = alloca %"class.std::vector.0", align 8
  %12 = alloca %"class.std::allocator.2", align 1
  %13 = alloca %"class.std::vector.5", align 8
  %14 = alloca %"class.std::allocator.7", align 1
  %15 = alloca %"class.std::vector.5", align 8
  %16 = alloca %"class.std::allocator.7", align 1
  %17 = alloca %"class.std::vector.5", align 8
  %18 = alloca %"class.std::allocator.7", align 1
  %19 = alloca %struct.meshopt_Stream, align 8
  %20 = alloca %"class.std::vector.0", align 8
  %21 = alloca %"class.std::allocator.2", align 1
  %22 = tail call ptr @fast_obj_read(ptr noundef %0)
  %.not = icmp eq ptr %22, null
  br i1 %.not, label %28, label %.preheader120

.preheader120:                                    ; preds = %1
  %23 = getelementptr inbounds i8, ptr %22, i64 64
  %24 = load i32, ptr %23, align 8, !tbaa !5
  %.not134 = icmp eq i32 %24, 0
  br i1 %.not134, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %.preheader120
  %25 = getelementptr inbounds i8, ptr %22, i64 72
  %26 = load ptr, ptr %25, align 8, !tbaa !11
  %wide.trip.count = zext i32 %24 to i64
  %xtraiter = and i64 %wide.trip.count, 3
  %27 = icmp ult i32 %24, 4
  br i1 %27, label %._crit_edge.loopexit.unr-lcssa, label %.lr.ph.new

.lr.ph.new:                                       ; preds = %.lr.ph
  %unroll_iter = and i64 %wide.trip.count, 4294967292
  br label %37

28:                                               ; preds = %1
  %29 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str, ptr noundef %0)
  br label %222

._crit_edge.loopexit.unr-lcssa:                   ; preds = %37, %.lr.ph
  %.lcssa159.ph = phi i64 [ poison, %.lr.ph ], [ %61, %37 ]
  %indvars.iv.unr = phi i64 [ 0, %.lr.ph ], [ %indvars.iv.next.3, %37 ]
  %.0123.unr = phi i64 [ 0, %.lr.ph ], [ %61, %37 ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %._crit_edge, label %.epil.preheader

.epil.preheader:                                  ; preds = %._crit_edge.loopexit.unr-lcssa, %.epil.preheader
  %indvars.iv.epil = phi i64 [ %indvars.iv.next.epil, %.epil.preheader ], [ %indvars.iv.unr, %._crit_edge.loopexit.unr-lcssa ]
  %.0123.epil = phi i64 [ %35, %.epil.preheader ], [ %.0123.unr, %._crit_edge.loopexit.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.epil.preheader ], [ 0, %._crit_edge.loopexit.unr-lcssa ]
  %30 = getelementptr inbounds i32, ptr %26, i64 %indvars.iv.epil
  %31 = load i32, ptr %30, align 4, !tbaa !12
  %32 = mul i32 %31, 3
  %33 = add i32 %32, -6
  %34 = zext i32 %33 to i64
  %35 = add i64 %.0123.epil, %34
  %indvars.iv.next.epil = add nuw nsw i64 %indvars.iv.epil, 1
  %epil.iter.next = add i64 %epil.iter, 1
  %epil.iter.cmp.not = icmp eq i64 %epil.iter.next, %xtraiter
  br i1 %epil.iter.cmp.not, label %._crit_edge, label %.epil.preheader, !llvm.loop !13

._crit_edge:                                      ; preds = %._crit_edge.loopexit.unr-lcssa, %.epil.preheader, %.preheader120
  %.0.lcssa = phi i64 [ 0, %.preheader120 ], [ %.lcssa159.ph, %._crit_edge.loopexit.unr-lcssa ], [ %35, %.epil.preheader ]
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %2) #6
  %36 = mul i64 %.0.lcssa, 3
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %3) #6
  call void @_ZNSaIfEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %3) #6
  invoke void @_ZNSt6vectorIfSaIfEEC2EmRKS0_(ptr noundef nonnull align 8 dereferenceable(24) %2, i64 noundef %36, ptr noundef nonnull align 1 dereferenceable(1) %3)
          to label %62 unwind label %76

37:                                               ; preds = %37, %.lr.ph.new
  %indvars.iv = phi i64 [ 0, %.lr.ph.new ], [ %indvars.iv.next.3, %37 ]
  %.0123 = phi i64 [ 0, %.lr.ph.new ], [ %61, %37 ]
  %niter = phi i64 [ 0, %.lr.ph.new ], [ %niter.next.3, %37 ]
  %38 = getelementptr inbounds i32, ptr %26, i64 %indvars.iv
  %39 = load i32, ptr %38, align 4, !tbaa !12
  %40 = mul i32 %39, 3
  %41 = add i32 %40, -6
  %42 = zext i32 %41 to i64
  %43 = add i64 %.0123, %42
  %indvars.iv.next = or disjoint i64 %indvars.iv, 1
  %44 = getelementptr inbounds i32, ptr %26, i64 %indvars.iv.next
  %45 = load i32, ptr %44, align 4, !tbaa !12
  %46 = mul i32 %45, 3
  %47 = add i32 %46, -6
  %48 = zext i32 %47 to i64
  %49 = add i64 %43, %48
  %indvars.iv.next.1 = or disjoint i64 %indvars.iv, 2
  %50 = getelementptr inbounds i32, ptr %26, i64 %indvars.iv.next.1
  %51 = load i32, ptr %50, align 4, !tbaa !12
  %52 = mul i32 %51, 3
  %53 = add i32 %52, -6
  %54 = zext i32 %53 to i64
  %55 = add i64 %49, %54
  %indvars.iv.next.2 = or disjoint i64 %indvars.iv, 3
  %56 = getelementptr inbounds i32, ptr %26, i64 %indvars.iv.next.2
  %57 = load i32, ptr %56, align 4, !tbaa !12
  %58 = mul i32 %57, 3
  %59 = add i32 %58, -6
  %60 = zext i32 %59 to i64
  %61 = add i64 %55, %60
  %indvars.iv.next.3 = add nuw nsw i64 %indvars.iv, 4
  %niter.next.3 = add i64 %niter, 4
  %niter.ncmp.3 = icmp eq i64 %niter.next.3, %unroll_iter
  br i1 %niter.ncmp.3, label %._crit_edge.loopexit.unr-lcssa, label %37, !llvm.loop !15

62:                                               ; preds = %._crit_edge
  call void @_ZNSt15__new_allocatorIfED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %3) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %3) #6
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %4) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %5) #6
  call void @_ZNSaIfEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %5) #6
  invoke void @_ZNSt6vectorIfSaIfEEC2EmRKS0_(ptr noundef nonnull align 8 dereferenceable(24) %4, i64 noundef %36, ptr noundef nonnull align 1 dereferenceable(1) %5)
          to label %63 unwind label %78

63:                                               ; preds = %62
  call void @_ZNSt15__new_allocatorIfED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %5) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %5) #6
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %6) #6
  %64 = shl i64 %.0.lcssa, 1
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %7) #6
  call void @_ZNSaIfEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %7) #6
  invoke void @_ZNSt6vectorIfSaIfEEC2EmRKS0_(ptr noundef nonnull align 8 dereferenceable(24) %6, i64 noundef %64, ptr noundef nonnull align 1 dereferenceable(1) %7)
          to label %65 unwind label %80

65:                                               ; preds = %63
  call void @_ZNSt15__new_allocatorIfED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %7) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %7) #6
  %66 = load i32, ptr %23, align 8, !tbaa !5
  %.not135 = icmp eq i32 %66, 0
  br i1 %.not135, label %._crit_edge133, label %.preheader.lr.ph

.preheader.lr.ph:                                 ; preds = %65
  %67 = getelementptr inbounds i8, ptr %22, i64 72
  %68 = getelementptr inbounds i8, ptr %22, i64 96
  %69 = getelementptr inbounds i8, ptr %22, i64 8
  %70 = getelementptr inbounds i8, ptr %22, i64 40
  %71 = getelementptr inbounds i8, ptr %22, i64 24
  %.pre = load ptr, ptr %67, align 8, !tbaa !11
  br label %.preheader

.preheader:                                       ; preds = %.preheader.lr.ph, %._crit_edge127
  %72 = phi i32 [ %66, %.preheader.lr.ph ], [ %82, %._crit_edge127 ]
  %73 = phi ptr [ %.pre, %.preheader.lr.ph ], [ %83, %._crit_edge127 ]
  %indvars.iv144 = phi i64 [ 0, %.preheader.lr.ph ], [ %indvars.iv.next145, %._crit_edge127 ]
  %.096132 = phi i64 [ 0, %.preheader.lr.ph ], [ %.197.lcssa, %._crit_edge127 ]
  %.099131 = phi i64 [ 0, %.preheader.lr.ph ], [ %85, %._crit_edge127 ]
  %74 = getelementptr inbounds i32, ptr %73, i64 %indvars.iv144
  %75 = load i32, ptr %74, align 4, !tbaa !12
  %.not136 = icmp eq i32 %75, 0
  br i1 %.not136, label %._crit_edge127, label %.lr.ph126

._crit_edge133:                                   ; preds = %._crit_edge127, %65
  invoke void @fast_obj_destroy(ptr noundef nonnull %22)
          to label %144 unwind label %223

76:                                               ; preds = %._crit_edge
  %77 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIfED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %3) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %3) #6
  br label %265

78:                                               ; preds = %62
  %79 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIfED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %5) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %5) #6
  br label %264

80:                                               ; preds = %63
  %81 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIfED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %7) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %7) #6
  br label %263

._crit_edge127.loopexit:                          ; preds = %119
  %.pre147 = load i32, ptr %23, align 8, !tbaa !5
  br label %._crit_edge127

._crit_edge127:                                   ; preds = %.preheader, %._crit_edge127.loopexit
  %82 = phi i32 [ %.pre147, %._crit_edge127.loopexit ], [ %72, %.preheader ]
  %83 = phi ptr [ %139, %._crit_edge127.loopexit ], [ %73, %.preheader ]
  %.197.lcssa = phi i64 [ %138, %._crit_edge127.loopexit ], [ %.096132, %.preheader ]
  %.lcssa = phi i32 [ %141, %._crit_edge127.loopexit ], [ 0, %.preheader ]
  %84 = zext i32 %.lcssa to i64
  %85 = add i64 %.099131, %84
  %indvars.iv.next145 = add nuw nsw i64 %indvars.iv144, 1
  %86 = zext i32 %82 to i64
  %87 = icmp ult i64 %indvars.iv.next145, %86
  br i1 %87, label %.preheader, label %._crit_edge133, !llvm.loop !17

.lr.ph126:                                        ; preds = %.preheader, %119
  %indvars.iv141 = phi i64 [ %indvars.iv.next142, %119 ], [ 0, %.preheader ]
  %.197125 = phi i64 [ %138, %119 ], [ %.096132, %.preheader ]
  %88 = load ptr, ptr %68, align 8, !tbaa !18
  %89 = getelementptr %struct.fastObjIndex, ptr %88, i64 %.099131
  %90 = getelementptr %struct.fastObjIndex, ptr %89, i64 %indvars.iv141
  %.sroa.0.0.copyload = load i32, ptr %90, align 4, !tbaa !12
  %.sroa.4.0..sroa_idx = getelementptr inbounds i8, ptr %90, i64 4
  %.sroa.4.0.copyload = load i32, ptr %.sroa.4.0..sroa_idx, align 4, !tbaa !12
  %.sroa.5.0..sroa_idx = getelementptr inbounds i8, ptr %90, i64 8
  %.sroa.5.0.copyload = load i32, ptr %.sroa.5.0..sroa_idx, align 4, !tbaa !12
  %91 = icmp ugt i64 %indvars.iv141, 2
  br i1 %91, label %92, label %119

92:                                               ; preds = %.lr.ph126
  %93 = mul i64 %.197125, 3
  %94 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %2, i64 noundef %93) #6
  %95 = add i64 %.197125, -3
  %96 = mul i64 %95, 3
  %97 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %2, i64 noundef %96) #6
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %94, ptr noundef nonnull align 4 dereferenceable(12) %97, i64 12, i1 false)
  %98 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %4, i64 noundef %93) #6
  %99 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %4, i64 noundef %96) #6
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %98, ptr noundef nonnull align 4 dereferenceable(12) %99, i64 12, i1 false)
  %100 = shl i64 %.197125, 1
  %101 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %6, i64 noundef %100) #6
  %102 = shl i64 %95, 1
  %103 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %6, i64 noundef %102) #6
  %104 = load i64, ptr %103, align 4
  store i64 %104, ptr %101, align 4
  %105 = add i64 %.197125, 1
  %106 = mul i64 %105, 3
  %107 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %2, i64 noundef %106) #6
  %108 = add i64 %.197125, -1
  %109 = mul i64 %108, 3
  %110 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %2, i64 noundef %109) #6
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %107, ptr noundef nonnull align 4 dereferenceable(12) %110, i64 12, i1 false)
  %111 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %4, i64 noundef %106) #6
  %112 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %4, i64 noundef %109) #6
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %111, ptr noundef nonnull align 4 dereferenceable(12) %112, i64 12, i1 false)
  %113 = shl i64 %105, 1
  %114 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %6, i64 noundef %113) #6
  %115 = shl i64 %108, 1
  %116 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %6, i64 noundef %115) #6
  %117 = load i64, ptr %116, align 4
  store i64 %117, ptr %114, align 4
  %118 = add i64 %.197125, 2
  br label %119

119:                                              ; preds = %92, %.lr.ph126
  %.298 = phi i64 [ %118, %92 ], [ %.197125, %.lr.ph126 ]
  %120 = mul i64 %.298, 3
  %121 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %2, i64 noundef %120) #6
  %122 = load ptr, ptr %69, align 8, !tbaa !19
  %123 = mul i32 %.sroa.0.0.copyload, 3
  %124 = zext i32 %123 to i64
  %125 = getelementptr inbounds float, ptr %122, i64 %124
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %121, ptr noundef nonnull align 4 dereferenceable(12) %125, i64 12, i1 false)
  %126 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %4, i64 noundef %120) #6
  %127 = load ptr, ptr %70, align 8, !tbaa !20
  %128 = mul i32 %.sroa.5.0.copyload, 3
  %129 = zext i32 %128 to i64
  %130 = getelementptr inbounds float, ptr %127, i64 %129
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %126, ptr noundef nonnull align 4 dereferenceable(12) %130, i64 12, i1 false)
  %131 = shl i64 %.298, 1
  %132 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %6, i64 noundef %131) #6
  %133 = load ptr, ptr %71, align 8, !tbaa !21
  %134 = shl i32 %.sroa.4.0.copyload, 1
  %135 = zext i32 %134 to i64
  %136 = getelementptr inbounds float, ptr %133, i64 %135
  %137 = load i64, ptr %136, align 4
  store i64 %137, ptr %132, align 4
  %138 = add i64 %.298, 1
  %indvars.iv.next142 = add nuw nsw i64 %indvars.iv141, 1
  %139 = load ptr, ptr %67, align 8, !tbaa !11
  %140 = getelementptr inbounds i32, ptr %139, i64 %indvars.iv144
  %141 = load i32, ptr %140, align 4, !tbaa !12
  %142 = zext i32 %141 to i64
  %143 = icmp ult i64 %indvars.iv.next142, %142
  br i1 %143, label %.lr.ph126, label %._crit_edge127.loopexit, !llvm.loop !22

144:                                              ; preds = %._crit_edge133
  %145 = call noundef double @_Z9timestampv()
  call void @llvm.lifetime.start.p0(i64 72, ptr nonnull %8) #6
  %146 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %2, i64 noundef 0) #6
  store ptr %146, ptr %8, align 16, !tbaa !23
  %147 = getelementptr inbounds i8, ptr %8, i64 8
  store i64 12, ptr %147, align 8, !tbaa !26
  %148 = getelementptr inbounds i8, ptr %8, i64 16
  store i64 12, ptr %148, align 16, !tbaa !27
  %149 = getelementptr inbounds i8, ptr %8, i64 24
  %150 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %4, i64 noundef 0) #6
  store ptr %150, ptr %149, align 8, !tbaa !23
  %151 = getelementptr inbounds i8, ptr %8, i64 32
  store i64 12, ptr %151, align 16, !tbaa !26
  %152 = getelementptr inbounds i8, ptr %8, i64 40
  store i64 12, ptr %152, align 8, !tbaa !27
  %153 = getelementptr inbounds i8, ptr %8, i64 48
  %154 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %6, i64 noundef 0) #6
  store ptr %154, ptr %153, align 16, !tbaa !23
  %155 = getelementptr inbounds i8, ptr %8, i64 56
  store i64 8, ptr %155, align 8, !tbaa !26
  %156 = getelementptr inbounds i8, ptr %8, i64 64
  store i64 8, ptr %156, align 16, !tbaa !27
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %9) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %10) #6
  call void @_ZNSaIjEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %10) #6
  invoke void @_ZNSt6vectorIjSaIjEEC2EmRKS0_(ptr noundef nonnull align 8 dereferenceable(24) %9, i64 noundef %.0.lcssa, ptr noundef nonnull align 1 dereferenceable(1) %10)
          to label %157 unwind label %225

157:                                              ; preds = %144
  call void @_ZNSt15__new_allocatorIjED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %10) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %10) #6
  %158 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %9, i64 noundef 0) #6
  %159 = invoke i64 @meshopt_generateVertexRemapMulti(ptr noundef nonnull %158, ptr noundef null, i64 noundef %.0.lcssa, i64 noundef %.0.lcssa, ptr noundef nonnull %8, i64 noundef 3)
          to label %160 unwind label %227

160:                                              ; preds = %157
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %11) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %12) #6
  call void @_ZNSaIjEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %12) #6
  invoke void @_ZNSt6vectorIjSaIjEEC2EmRKS0_(ptr noundef nonnull align 8 dereferenceable(24) %11, i64 noundef %.0.lcssa, ptr noundef nonnull align 1 dereferenceable(1) %12)
          to label %161 unwind label %229

161:                                              ; preds = %160
  call void @_ZNSt15__new_allocatorIjED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %12) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %12) #6
  %162 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %11, i64 noundef 0) #6
  %163 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %9, i64 noundef 0) #6
  invoke void @meshopt_remapIndexBuffer(ptr noundef nonnull %162, ptr noundef null, i64 noundef %.0.lcssa, ptr noundef nonnull %163)
          to label %164 unwind label %231

164:                                              ; preds = %161
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %13) #6
  %165 = mul i64 %159, 3
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %14) #6
  call void @_ZNSaIfEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %14) #6
  invoke void @_ZNSt6vectorIfSaIfEEC2EmRKS0_(ptr noundef nonnull align 8 dereferenceable(24) %13, i64 noundef %165, ptr noundef nonnull align 1 dereferenceable(1) %14)
          to label %166 unwind label %233

166:                                              ; preds = %164
  call void @_ZNSt15__new_allocatorIfED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %14) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %14) #6
  %167 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %13, i64 noundef 0) #6
  %168 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %2, i64 noundef 0) #6
  %169 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %9, i64 noundef 0) #6
  invoke void @meshopt_remapVertexBuffer(ptr noundef nonnull %167, ptr noundef nonnull %168, i64 noundef %.0.lcssa, i64 noundef 12, ptr noundef nonnull %169)
          to label %170 unwind label %235

170:                                              ; preds = %166
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %15) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %16) #6
  call void @_ZNSaIfEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %16) #6
  invoke void @_ZNSt6vectorIfSaIfEEC2EmRKS0_(ptr noundef nonnull align 8 dereferenceable(24) %15, i64 noundef %165, ptr noundef nonnull align 1 dereferenceable(1) %16)
          to label %171 unwind label %237

171:                                              ; preds = %170
  call void @_ZNSt15__new_allocatorIfED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %16) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %16) #6
  %172 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %15, i64 noundef 0) #6
  %173 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %4, i64 noundef 0) #6
  %174 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %9, i64 noundef 0) #6
  invoke void @meshopt_remapVertexBuffer(ptr noundef nonnull %172, ptr noundef nonnull %173, i64 noundef %.0.lcssa, i64 noundef 12, ptr noundef nonnull %174)
          to label %175 unwind label %239

175:                                              ; preds = %171
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %17) #6
  %176 = shl i64 %159, 1
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %18) #6
  call void @_ZNSaIfEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %18) #6
  invoke void @_ZNSt6vectorIfSaIfEEC2EmRKS0_(ptr noundef nonnull align 8 dereferenceable(24) %17, i64 noundef %176, ptr noundef nonnull align 1 dereferenceable(1) %18)
          to label %177 unwind label %241

177:                                              ; preds = %175
  call void @_ZNSt15__new_allocatorIfED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %18) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %18) #6
  %178 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %17, i64 noundef 0) #6
  %179 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %6, i64 noundef 0) #6
  %180 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %9, i64 noundef 0) #6
  invoke void @meshopt_remapVertexBuffer(ptr noundef nonnull %178, ptr noundef nonnull %179, i64 noundef %.0.lcssa, i64 noundef 8, ptr noundef nonnull %180)
          to label %181 unwind label %243

181:                                              ; preds = %177
  %182 = call noundef double @_Z9timestampv()
  %183 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %11, i64 noundef 0) #6
  %184 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %11, i64 noundef 0) #6
  invoke void @meshopt_optimizeVertexCache(ptr noundef nonnull %183, ptr noundef nonnull %184, i64 noundef %.0.lcssa, i64 noundef %159)
          to label %185 unwind label %245

185:                                              ; preds = %181
  %186 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %9, i64 noundef 0) #6
  %187 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %11, i64 noundef 0) #6
  %188 = invoke i64 @meshopt_optimizeVertexFetchRemap(ptr noundef nonnull %186, ptr noundef nonnull %187, i64 noundef %.0.lcssa, i64 noundef %159)
          to label %189 unwind label %245

189:                                              ; preds = %185
  %190 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %13, i64 noundef 0) #6
  %191 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %13, i64 noundef 0) #6
  %192 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %9, i64 noundef 0) #6
  invoke void @meshopt_remapVertexBuffer(ptr noundef nonnull %190, ptr noundef nonnull %191, i64 noundef %159, i64 noundef 12, ptr noundef nonnull %192)
          to label %193 unwind label %245

193:                                              ; preds = %189
  %194 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %15, i64 noundef 0) #6
  %195 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %15, i64 noundef 0) #6
  %196 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %9, i64 noundef 0) #6
  invoke void @meshopt_remapVertexBuffer(ptr noundef nonnull %194, ptr noundef nonnull %195, i64 noundef %159, i64 noundef 12, ptr noundef nonnull %196)
          to label %197 unwind label %245

197:                                              ; preds = %193
  %198 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %17, i64 noundef 0) #6
  %199 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %17, i64 noundef 0) #6
  %200 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %9, i64 noundef 0) #6
  invoke void @meshopt_remapVertexBuffer(ptr noundef nonnull %198, ptr noundef nonnull %199, i64 noundef %159, i64 noundef 8, ptr noundef nonnull %200)
          to label %201 unwind label %245

201:                                              ; preds = %197
  %202 = call noundef double @_Z9timestampv()
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %19) #6
  %203 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %13, i64 noundef 0) #6
  store ptr %203, ptr %19, align 8, !tbaa !23
  %204 = getelementptr inbounds i8, ptr %19, i64 8
  store i64 12, ptr %204, align 8, !tbaa !26
  %205 = getelementptr inbounds i8, ptr %19, i64 16
  store i64 12, ptr %205, align 8, !tbaa !27
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %20) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %21) #6
  call void @_ZNSaIjEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %21) #6
  invoke void @_ZNSt6vectorIjSaIjEEC2EmRKS0_(ptr noundef nonnull align 8 dereferenceable(24) %20, i64 noundef %.0.lcssa, ptr noundef nonnull align 1 dereferenceable(1) %21)
          to label %206 unwind label %247

206:                                              ; preds = %201
  call void @_ZNSt15__new_allocatorIjED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %21) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %21) #6
  %207 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %20, i64 noundef 0) #6
  %208 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %11, i64 noundef 0) #6
  invoke void @meshopt_generateShadowIndexBufferMulti(ptr noundef nonnull %207, ptr noundef nonnull %208, i64 noundef %.0.lcssa, i64 noundef %159, ptr noundef nonnull %19, i64 noundef 1)
          to label %209 unwind label %249

209:                                              ; preds = %206
  %210 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %20, i64 noundef 0) #6
  %211 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %20, i64 noundef 0) #6
  invoke void @meshopt_optimizeVertexCache(ptr noundef nonnull %210, ptr noundef nonnull %211, i64 noundef %.0.lcssa, i64 noundef %159)
          to label %212 unwind label %249

212:                                              ; preds = %209
  %213 = call noundef double @_Z9timestampv()
  %214 = trunc i64 %159 to i32
  %215 = fsub double %182, %145
  %216 = fmul double %215, 1.000000e+03
  %217 = fsub double %202, %182
  %218 = fmul double %217, 1.000000e+03
  %219 = fsub double %213, %202
  %220 = fmul double %219, 1.000000e+03
  %221 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.45, i32 noundef %214, double noundef %216, double noundef %218, double noundef %220)
  call void @_ZNSt6vectorIjSaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %20) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %20) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %19) #6
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %17) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %17) #6
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %15) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %15) #6
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %13) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %13) #6
  call void @_ZNSt6vectorIjSaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %11) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %11) #6
  call void @_ZNSt6vectorIjSaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %9) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %9) #6
  call void @llvm.lifetime.end.p0(i64 72, ptr nonnull %8) #6
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %6) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %6) #6
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %4) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %4) #6
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %2) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %2) #6
  br label %222

222:                                              ; preds = %212, %28
  ret void

223:                                              ; preds = %._crit_edge133
  %224 = landingpad { ptr, i32 }
          cleanup
  br label %262

225:                                              ; preds = %144
  %226 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIjED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %10) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %10) #6
  br label %261

227:                                              ; preds = %157
  %228 = landingpad { ptr, i32 }
          cleanup
  br label %260

229:                                              ; preds = %160
  %230 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIjED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %12) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %12) #6
  br label %259

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

233:                                              ; preds = %164
  %234 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIfED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %14) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %14) #6
  br label %257

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

237:                                              ; preds = %170
  %238 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIfED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %16) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %16) #6
  br label %255

239:                                              ; preds = %171
  %240 = landingpad { ptr, i32 }
          cleanup
  br label %254

241:                                              ; preds = %175
  %242 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIfED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %18) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %18) #6
  br label %253

243:                                              ; preds = %177
  %244 = landingpad { ptr, i32 }
          cleanup
  br label %252

245:                                              ; preds = %197, %193, %189, %185, %181
  %246 = landingpad { ptr, i32 }
          cleanup
  br label %252

247:                                              ; preds = %201
  %248 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIjED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %21) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %21) #6
  br label %251

249:                                              ; preds = %209, %206
  %250 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt6vectorIjSaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %20) #6
  br label %251

251:                                              ; preds = %249, %247
  %.pn = phi { ptr, i32 } [ %250, %249 ], [ %248, %247 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %20) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %19) #6
  br label %252

252:                                              ; preds = %245, %251, %243
  %.pn.pn.pn = phi { ptr, i32 } [ %244, %243 ], [ %.pn, %251 ], [ %246, %245 ]
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %17) #6
  br label %253

253:                                              ; preds = %252, %241
  %.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn.pn, %252 ], [ %242, %241 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %17) #6
  br label %254

254:                                              ; preds = %253, %239
  %.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn.pn.pn, %253 ], [ %240, %239 ]
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %15) #6
  br label %255

255:                                              ; preds = %254, %237
  %.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn.pn.pn.pn, %254 ], [ %238, %237 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %15) #6
  br label %256

256:                                              ; preds = %255, %235
  %.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn.pn.pn.pn.pn, %255 ], [ %236, %235 ]
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %13) #6
  br label %257

257:                                              ; preds = %256, %233
  %.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn.pn.pn.pn.pn.pn, %256 ], [ %234, %233 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %13) #6
  br label %258

258:                                              ; preds = %257, %231
  %.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn.pn.pn.pn.pn.pn.pn, %257 ], [ %232, %231 ]
  call void @_ZNSt6vectorIjSaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %11) #6
  br label %259

259:                                              ; preds = %258, %229
  %.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn.pn.pn.pn.pn.pn.pn.pn, %258 ], [ %230, %229 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %11) #6
  br label %260

260:                                              ; preds = %259, %227
  %.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn, %259 ], [ %228, %227 ]
  call void @_ZNSt6vectorIjSaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %9) #6
  br label %261

261:                                              ; preds = %260, %225
  %.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn, %260 ], [ %226, %225 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %9) #6
  call void @llvm.lifetime.end.p0(i64 72, ptr nonnull %8) #6
  br label %262

262:                                              ; preds = %261, %223
  %.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn, %261 ], [ %224, %223 ]
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %6) #6
  br label %263

263:                                              ; preds = %262, %80
  %.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn, %262 ], [ %81, %80 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %6) #6
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %4) #6
  br label %264

264:                                              ; preds = %263, %78
  %.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn, %263 ], [ %79, %78 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %4) #6
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %2) #6
  br label %265

265:                                              ; preds = %264, %76
  %.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn, %264 ], [ %77, %76 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %2) #6
  resume { ptr, i32 } %.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn
}

declare i64 @meshopt_generateVertexRemapMulti(ptr noundef, ptr noundef, i64 noundef, i64 noundef, ptr noundef, i64 noundef) local_unnamed_addr #2

declare void @meshopt_generateShadowIndexBufferMulti(ptr noundef, ptr noundef, i64 noundef, i64 noundef, ptr noundef, i64 noundef) local_unnamed_addr #2

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !7, i64 64}
!6 = !{!"_ZTS11fastObjMesh", !7, i64 0, !10, i64 8, !7, i64 16, !10, i64 24, !7, i64 32, !10, i64 40, !7, i64 48, !10, i64 56, !7, i64 64, !10, i64 72, !10, i64 80, !7, i64 88, !10, i64 96, !7, i64 104, !10, i64 112, !7, i64 120, !10, i64 128, !7, i64 136, !10, i64 144, !7, i64 152, !10, i64 160}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!"any pointer", !8, i64 0}
!11 = !{!6, !10, i64 72}
!12 = !{!7, !7, i64 0}
!13 = distinct !{!13, !14}
!14 = !{!"llvm.loop.unroll.disable"}
!15 = distinct !{!15, !16}
!16 = !{!"llvm.loop.mustprogress"}
!17 = distinct !{!17, !16}
!18 = !{!6, !10, i64 96}
!19 = !{!6, !10, i64 8}
!20 = !{!6, !10, i64 40}
!21 = !{!6, !10, i64 24}
!22 = distinct !{!22, !16}
!23 = !{!24, !10, i64 0}
!24 = !{!"_ZTS14meshopt_Stream", !10, i64 0, !25, i64 8, !25, i64 16}
!25 = !{!"long", !8, i64 0}
!26 = !{!24, !25, i64 8}
!27 = !{!24, !25, i64 16}


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