; LLVM IR from Angelo1211/SoftwareRenderer :: src/mesh.ll (ZN4Mesh17buildTangentSpaceEv)

; 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.8" = type { %"struct.std::_Vector_base.9" }
%"struct.std::_Vector_base.9" = type { %"struct.std::_Vector_base<std::vector<Vector3<float>>, std::allocator<std::vector<Vector3<float>>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::vector<Vector3<float>>, std::allocator<std::vector<Vector3<float>>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::vector<Vector3<float>>, std::allocator<std::vector<Vector3<float>>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::vector<Vector3<float>>, std::allocator<std::vector<Vector3<float>>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::allocator.10" = type { i8 }
%struct.Vector3 = type { %union.anon, float }
%union.anon = type { [3 x float] }
%struct.Vector3.5 = type { %union.anon.6, i32 }
%union.anon.6 = type { [3 x i32] }
%struct.Mesh = type { i32, %"class.std::vector", %"class.std::vector", %"class.std::vector", %"class.std::vector", %"class.std::vector", i32, %"class.std::vector", %"class.std::vector.0", %"class.std::vector.0", %"class.std::vector.0" }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<Vector3<float>, std::allocator<Vector3<float>>>::_Vector_impl" }
%"struct.std::_Vector_base<Vector3<float>, std::allocator<Vector3<float>>>::_Vector_impl" = type { %"struct.std::_Vector_base<Vector3<float>, std::allocator<Vector3<float>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<Vector3<float>, std::allocator<Vector3<float>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.0" = type { %"struct.std::_Vector_base.1" }
%"struct.std::_Vector_base.1" = type { %"struct.std::_Vector_base<Vector3<int>, std::allocator<Vector3<int>>>::_Vector_impl" }
%"struct.std::_Vector_base<Vector3<int>, std::allocator<Vector3<int>>>::_Vector_impl" = type { %"struct.std::_Vector_base<Vector3<int>, std::allocator<Vector3<int>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<Vector3<int>, std::allocator<Vector3<int>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%struct.anon = type { float, float, float }

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

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

; 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 nonnull align 4 dereferenceable(16) ptr @_ZNSt6vectorI7Vector3IiESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) #1 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local { <2 x float>, <2 x float> } @_ZNK7Vector3IfEmiERKS0_(ptr noundef nonnull align 4 dereferenceable(16), ptr noundef nonnull align 4 dereferenceable(16)) #3 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local { <2 x float>, <2 x float> } @_ZNK7Vector3IfE12crossProductERKS0_(ptr noundef nonnull align 4 dereferenceable(16), ptr noundef nonnull align 4 dereferenceable(16)) #3 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 4 dereferenceable(16) ptr @_ZN7Vector3IfE10normalizedEv(ptr noundef nonnull align 4 dereferenceable(16)) #3 align 2

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN4Mesh17buildTangentSpaceEv(ptr noundef nonnull align 8 dereferenceable(232) %0) #4 align 2 personality ptr @__gxx_personality_v0 {
  %2 = alloca ptr, align 8
  %3 = alloca %"class.std::vector.8", align 8
  %4 = alloca %"class.std::allocator.10", align 1
  %5 = alloca ptr, align 8
  %6 = alloca i32, align 4
  %7 = alloca %"class.std::vector.8", align 8
  %8 = alloca %"class.std::allocator.10", align 1
  %9 = alloca %struct.Vector3, align 4
  %10 = alloca %struct.Vector3, align 4
  %11 = alloca i32, align 4
  %12 = alloca %struct.Vector3.5, align 4
  %13 = alloca %struct.Vector3.5, align 4
  %14 = alloca %struct.Vector3, align 4
  %15 = alloca %struct.Vector3, align 4
  %16 = alloca %struct.Vector3, align 4
  %17 = alloca %struct.Vector3, align 4
  %18 = alloca %struct.Vector3, align 4
  %19 = alloca %struct.Vector3, align 4
  %20 = alloca %struct.Vector3, align 4
  %21 = alloca float, align 4
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca i32, align 4
  %25 = alloca %struct.Vector3, align 4
  %26 = alloca %struct.Vector3, align 4
  %27 = alloca float, align 4
  %28 = alloca %struct.Vector3, align 4
  %29 = alloca %struct.Vector3, align 4
  %30 = alloca float, align 4
  %31 = alloca i32, align 4
  %32 = alloca %struct.Vector3.5, align 4
  %33 = alloca %struct.Vector3.5, align 4
  %34 = alloca %struct.Vector3, align 4
  %35 = alloca %struct.Vector3, align 4
  %36 = alloca %struct.Vector3, align 4
  %37 = alloca %struct.Vector3, align 4
  %38 = alloca %struct.Vector3, align 4
  %39 = alloca %struct.Vector3, align 4
  %40 = alloca %struct.Vector3, align 4
  %41 = alloca %struct.Vector3, align 4
  %42 = alloca %struct.Vector3, align 4
  %43 = alloca %struct.Vector3, align 4
  %44 = alloca %struct.Vector3, align 4
  %45 = alloca float, align 4
  %46 = alloca %struct.Vector3, align 4
  %47 = alloca %struct.Vector3, align 4
  %48 = alloca float, align 4
  %49 = alloca %struct.Vector3, align 4
  %50 = alloca %struct.Vector3, align 4
  %51 = alloca float, align 4
  %52 = alloca %struct.Vector3, align 4
  %53 = alloca %struct.Vector3, align 4
  %54 = alloca float, align 4
  %55 = alloca %struct.Vector3, align 4
  %56 = alloca %struct.Vector3, align 4
  %57 = alloca float, align 4
  %58 = alloca %struct.Vector3, align 4
  %59 = alloca %struct.Vector3, align 4
  %60 = alloca float, align 4
  store ptr %0, ptr %2, align 8, !tbaa !5
  %61 = load ptr, ptr %2, align 8
  call void @llvm.lifetime.start.p0(i64 24, ptr %3) #6
  %62 = getelementptr inbounds %struct.Mesh, ptr %61, i32 0, i32 0
  %63 = load i32, ptr %62, align 8, !tbaa !9
  %64 = sext i32 %63 to i64
  call void @llvm.lifetime.start.p0(i64 1, ptr %4) #6
  call void @_ZNSaISt6vectorI7Vector3IfESaIS1_EEEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %4) #6
  invoke void @_ZNSt6vectorIS_I7Vector3IfESaIS1_EESaIS3_EEC2EmRKS4_(ptr noundef nonnull align 8 dereferenceable(24) %3, i64 noundef %64, ptr noundef nonnull align 1 dereferenceable(1) %4)
          to label %65 unwind label %78

65:                                               ; preds = %1
  call void @_ZNSt15__new_allocatorISt6vectorI7Vector3IfESaIS2_EEED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %4) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %4) #6
  call void @llvm.lifetime.start.p0(i64 24, ptr %7) #6
  %66 = getelementptr inbounds %struct.Mesh, ptr %61, i32 0, i32 0
  %67 = load i32, ptr %66, align 8, !tbaa !9
  %68 = sext i32 %67 to i64
  call void @llvm.lifetime.start.p0(i64 1, ptr %8) #6
  call void @_ZNSaISt6vectorI7Vector3IfESaIS1_EEEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %8) #6
  invoke void @_ZNSt6vectorIS_I7Vector3IfESaIS1_EESaIS3_EEC2EmRKS4_(ptr noundef nonnull align 8 dereferenceable(24) %7, i64 noundef %68, ptr noundef nonnull align 1 dereferenceable(1) %8)
          to label %69 unwind label %82

69:                                               ; preds = %65
  call void @_ZNSt15__new_allocatorISt6vectorI7Vector3IfESaIS2_EEED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %8) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %8) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr %9) #6
  invoke void @_ZN7Vector3IfEC2Ev(ptr noundef nonnull align 4 dereferenceable(16) %9)
          to label %70 unwind label %86

70:                                               ; preds = %69
  call void @llvm.lifetime.start.p0(i64 16, ptr %10) #6
  invoke void @_ZN7Vector3IfEC2Ev(ptr noundef nonnull align 4 dereferenceable(16) %10)
          to label %71 unwind label %90

71:                                               ; preds = %70
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #6
  store i32 0, ptr %11, align 4, !tbaa !20
  br label %72

72:                                               ; preds = %339, %71
  %73 = load i32, ptr %11, align 4, !tbaa !20
  %74 = getelementptr inbounds %struct.Mesh, ptr %61, i32 0, i32 6
  %75 = load i32, ptr %74, align 8, !tbaa !21
  %76 = icmp slt i32 %73, %75
  br i1 %76, label %94, label %77

77:                                               ; preds = %72
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #6
  br label %366

78:                                               ; preds = %1
  %79 = landingpad { ptr, i32 }
          cleanup
  %80 = extractvalue { ptr, i32 } %79, 0
  store ptr %80, ptr %5, align 8
  %81 = extractvalue { ptr, i32 } %79, 1
  store i32 %81, ptr %6, align 4
  call void @_ZNSt15__new_allocatorISt6vectorI7Vector3IfESaIS2_EEED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %4) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %4) #6
  br label %726

82:                                               ; preds = %65
  %83 = landingpad { ptr, i32 }
          cleanup
  %84 = extractvalue { ptr, i32 } %83, 0
  store ptr %84, ptr %5, align 8
  %85 = extractvalue { ptr, i32 } %83, 1
  store i32 %85, ptr %6, align 4
  call void @_ZNSt15__new_allocatorISt6vectorI7Vector3IfESaIS2_EEED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %8) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %8) #6
  br label %725

86:                                               ; preds = %69
  %87 = landingpad { ptr, i32 }
          cleanup
  %88 = extractvalue { ptr, i32 } %87, 0
  store ptr %88, ptr %5, align 8
  %89 = extractvalue { ptr, i32 } %87, 1
  store i32 %89, ptr %6, align 4
  br label %724

90:                                               ; preds = %70
  %91 = landingpad { ptr, i32 }
          cleanup
  %92 = extractvalue { ptr, i32 } %91, 0
  store ptr %92, ptr %5, align 8
  %93 = extractvalue { ptr, i32 } %91, 1
  store i32 %93, ptr %6, align 4
  br label %723

94:                                               ; preds = %72
  call void @llvm.lifetime.start.p0(i64 16, ptr %12) #6
  %95 = getelementptr inbounds %struct.Mesh, ptr %61, i32 0, i32 8
  %96 = load i32, ptr %11, align 4, !tbaa !20
  %97 = sext i32 %96 to i64
  %98 = call noundef nonnull align 4 dereferenceable(16) ptr @_ZNSt6vectorI7Vector3IiESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %95, i64 noundef %97) #6
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %12, ptr align 4 %98, i64 16, i1 false), !tbaa.struct !22
  call void @llvm.lifetime.start.p0(i64 16, ptr %13) #6
  %99 = getelementptr inbounds %struct.Mesh, ptr %61, i32 0, i32 9
  %100 = load i32, ptr %11, align 4, !tbaa !20
  %101 = sext i32 %100 to i64
  %102 = call noundef nonnull align 4 dereferenceable(16) ptr @_ZNSt6vectorI7Vector3IiESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %99, i64 noundef %101) #6
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %13, ptr align 4 %102, i64 16, i1 false), !tbaa.struct !22
  call void @llvm.lifetime.start.p0(i64 16, ptr %14) #6
  %103 = getelementptr inbounds %struct.Mesh, ptr %61, i32 0, i32 1
  %104 = getelementptr inbounds %struct.Vector3.5, ptr %12, i32 0, i32 0
  %105 = getelementptr inbounds [3 x i32], ptr %104, i64 0, i64 0
  %106 = load i32, ptr %105, align 4, !tbaa !23
  %107 = sext i32 %106 to i64
  %108 = call noundef nonnull align 4 dereferenceable(16) ptr @_ZNSt6vectorI7Vector3IfESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %103, i64 noundef %107) #6
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %14, ptr align 4 %108, i64 16, i1 false), !tbaa.struct !24
  call void @llvm.lifetime.start.p0(i64 16, ptr %15) #6
  %109 = getelementptr inbounds %struct.Mesh, ptr %61, i32 0, i32 1
  %110 = getelementptr inbounds %struct.Vector3.5, ptr %12, i32 0, i32 0
  %111 = getelementptr inbounds [3 x i32], ptr %110, i64 0, i64 1
  %112 = load i32, ptr %111, align 4, !tbaa !23
  %113 = sext i32 %112 to i64
  %114 = call noundef nonnull align 4 dereferenceable(16) ptr @_ZNSt6vectorI7Vector3IfESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %109, i64 noundef %113) #6
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %15, ptr align 4 %114, i64 16, i1 false), !tbaa.struct !24
  call void @llvm.lifetime.start.p0(i64 16, ptr %16) #6
  %115 = getelementptr inbounds %struct.Mesh, ptr %61, i32 0, i32 1
  %116 = getelementptr inbounds %struct.Vector3.5, ptr %12, i32 0, i32 0
  %117 = getelementptr inbounds [3 x i32], ptr %116, i64 0, i64 2
  %118 = load i32, ptr %117, align 4, !tbaa !23
  %119 = sext i32 %118 to i64
  %120 = call noundef nonnull align 4 dereferenceable(16) ptr @_ZNSt6vectorI7Vector3IfESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %115, i64 noundef %119) #6
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %16, ptr align 4 %120, i64 16, i1 false), !tbaa.struct !24
  call void @llvm.lifetime.start.p0(i64 16, ptr %17) #6
  %121 = invoke { <2 x float>, <2 x float> } @_ZNK7Vector3IfEmiERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %15, ptr noundef nonnull align 4 dereferenceable(16) %14)
          to label %122 unwind label %342

122:                                              ; preds = %94
  %123 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %17, i32 0, i32 0
  %124 = extractvalue { <2 x float>, <2 x float> } %121, 0
  store <2 x float> %124, ptr %123, align 4
  %125 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %17, i32 0, i32 1
  %126 = extractvalue { <2 x float>, <2 x float> } %121, 1
  store <2 x float> %126, ptr %125, align 4
  call void @llvm.lifetime.start.p0(i64 16, ptr %18) #6
  %127 = invoke { <2 x float>, <2 x float> } @_ZNK7Vector3IfEmiERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %16, ptr noundef nonnull align 4 dereferenceable(16) %14)
          to label %128 unwind label %346

128:                                              ; preds = %122
  %129 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %18, i32 0, i32 0
  %130 = extractvalue { <2 x float>, <2 x float> } %127, 0
  store <2 x float> %130, ptr %129, align 4
  %131 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %18, i32 0, i32 1
  %132 = extractvalue { <2 x float>, <2 x float> } %127, 1
  store <2 x float> %132, ptr %131, align 4
  call void @llvm.lifetime.start.p0(i64 16, ptr %19) #6
  %133 = getelementptr inbounds %struct.Mesh, ptr %61, i32 0, i32 3
  %134 = getelementptr inbounds %struct.Vector3.5, ptr %13, i32 0, i32 0
  %135 = getelementptr inbounds [3 x i32], ptr %134, i64 0, i64 1
  %136 = load i32, ptr %135, align 4, !tbaa !23
  %137 = sext i32 %136 to i64
  %138 = call noundef nonnull align 4 dereferenceable(16) ptr @_ZNSt6vectorI7Vector3IfESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %133, i64 noundef %137) #6
  %139 = getelementptr inbounds %struct.Mesh, ptr %61, i32 0, i32 3
  %140 = getelementptr inbounds %struct.Vector3.5, ptr %13, i32 0, i32 0
  %141 = getelementptr inbounds [3 x i32], ptr %140, i64 0, i64 0
  %142 = load i32, ptr %141, align 4, !tbaa !23
  %143 = sext i32 %142 to i64
  %144 = call noundef nonnull align 4 dereferenceable(16) ptr @_ZNSt6vectorI7Vector3IfESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %139, i64 noundef %143) #6
  %145 = invoke { <2 x float>, <2 x float> } @_ZNK7Vector3IfEmiERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %138, ptr noundef nonnull align 4 dereferenceable(16) %144)
          to label %146 unwind label %350

146:                                              ; preds = %128
  %147 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %19, i32 0, i32 0
  %148 = extractvalue { <2 x float>, <2 x float> } %145, 0
  store <2 x float> %148, ptr %147, align 4
  %149 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %19, i32 0, i32 1
  %150 = extractvalue { <2 x float>, <2 x float> } %145, 1
  store <2 x float> %150, ptr %149, align 4
  call void @llvm.lifetime.start.p0(i64 16, ptr %20) #6
  %151 = getelementptr inbounds %struct.Mesh, ptr %61, i32 0, i32 3
  %152 = getelementptr inbounds %struct.Vector3.5, ptr %13, i32 0, i32 0
  %153 = getelementptr inbounds [3 x i32], ptr %152, i64 0, i64 2
  %154 = load i32, ptr %153, align 4, !tbaa !23
  %155 = sext i32 %154 to i64
  %156 = call noundef nonnull align 4 dereferenceable(16) ptr @_ZNSt6vectorI7Vector3IfESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %151, i64 noundef %155) #6
  %157 = getelementptr inbounds %struct.Mesh, ptr %61, i32 0, i32 3
  %158 = getelementptr inbounds %struct.Vector3.5, ptr %13, i32 0, i32 0
  %159 = getelementptr inbounds [3 x i32], ptr %158, i64 0, i64 0
  %160 = load i32, ptr %159, align 4, !tbaa !23
  %161 = sext i32 %160 to i64
  %162 = call noundef nonnull align 4 dereferenceable(16) ptr @_ZNSt6vectorI7Vector3IfESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %157, i64 noundef %161) #6
  %163 = invoke { <2 x float>, <2 x float> } @_ZNK7Vector3IfEmiERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %156, ptr noundef nonnull align 4 dereferenceable(16) %162)
          to label %164 unwind label %354

164:                                              ; preds = %146
  %165 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %20, i32 0, i32 0
  %166 = extractvalue { <2 x float>, <2 x float> } %163, 0
  store <2 x float> %166, ptr %165, align 4
  %167 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %20, i32 0, i32 1
  %168 = extractvalue { <2 x float>, <2 x float> } %163, 1
  store <2 x float> %168, ptr %167, align 4
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #6
  %169 = getelementptr inbounds %struct.Vector3, ptr %19, i32 0, i32 0
  %170 = getelementptr inbounds %struct.anon, ptr %169, i32 0, i32 0
  %171 = load float, ptr %170, align 4, !tbaa !23
  %172 = getelementptr inbounds %struct.Vector3, ptr %20, i32 0, i32 0
  %173 = getelementptr inbounds %struct.anon, ptr %172, i32 0, i32 1
  %174 = load float, ptr %173, align 4, !tbaa !23
  %175 = getelementptr inbounds %struct.Vector3, ptr %20, i32 0, i32 0
  %176 = getelementptr inbounds %struct.anon, ptr %175, i32 0, i32 0
  %177 = load float, ptr %176, align 4, !tbaa !23
  %178 = getelementptr inbounds %struct.Vector3, ptr %19, i32 0, i32 0
  %179 = getelementptr inbounds %struct.anon, ptr %178, i32 0, i32 1
  %180 = load float, ptr %179, align 4, !tbaa !23
  %181 = fmul float %177, %180
  %182 = fneg float %181
  %183 = call float @llvm.fmuladd.f32(float %171, float %174, float %182)
  %184 = fdiv float 1.000000e+00, %183
  store float %184, ptr %21, align 4, !tbaa !25
  %185 = load float, ptr %21, align 4, !tbaa !25
  %186 = getelementptr inbounds %struct.Vector3, ptr %20, i32 0, i32 0
  %187 = getelementptr inbounds %struct.anon, ptr %186, i32 0, i32 1
  %188 = load float, ptr %187, align 4, !tbaa !23
  %189 = getelementptr inbounds %struct.Vector3, ptr %17, i32 0, i32 0
  %190 = getelementptr inbounds %struct.anon, ptr %189, i32 0, i32 0
  %191 = load float, ptr %190, align 4, !tbaa !23
  %192 = getelementptr inbounds %struct.Vector3, ptr %19, i32 0, i32 0
  %193 = getelementptr inbounds %struct.anon, ptr %192, i32 0, i32 1
  %194 = load float, ptr %193, align 4, !tbaa !23
  %195 = getelementptr inbounds %struct.Vector3, ptr %18, i32 0, i32 0
  %196 = getelementptr inbounds %struct.anon, ptr %195, i32 0, i32 0
  %197 = load float, ptr %196, align 4, !tbaa !23
  %198 = fmul float %194, %197
  %199 = fneg float %198
  %200 = call float @llvm.fmuladd.f32(float %188, float %191, float %199)
  %201 = fmul float %185, %200
  %202 = getelementptr inbounds %struct.Vector3, ptr %9, i32 0, i32 0
  %203 = getelementptr inbounds %struct.anon, ptr %202, i32 0, i32 0
  store float %201, ptr %203, align 4, !tbaa !23
  %204 = load float, ptr %21, align 4, !tbaa !25
  %205 = getelementptr inbounds %struct.Vector3, ptr %20, i32 0, i32 0
  %206 = getelementptr inbounds %struct.anon, ptr %205, i32 0, i32 1
  %207 = load float, ptr %206, align 4, !tbaa !23
  %208 = getelementptr inbounds %struct.Vector3, ptr %17, i32 0, i32 0
  %209 = getelementptr inbounds %struct.anon, ptr %208, i32 0, i32 1
  %210 = load float, ptr %209, align 4, !tbaa !23
  %211 = getelementptr inbounds %struct.Vector3, ptr %19, i32 0, i32 0
  %212 = getelementptr inbounds %struct.anon, ptr %211, i32 0, i32 1
  %213 = load float, ptr %212, align 4, !tbaa !23
  %214 = getelementptr inbounds %struct.Vector3, ptr %18, i32 0, i32 0
  %215 = getelementptr inbounds %struct.anon, ptr %214, i32 0, i32 1
  %216 = load float, ptr %215, align 4, !tbaa !23
  %217 = fmul float %213, %216
  %218 = fneg float %217
  %219 = call float @llvm.fmuladd.f32(float %207, float %210, float %218)
  %220 = fmul float %204, %219
  %221 = getelementptr inbounds %struct.Vector3, ptr %9, i32 0, i32 0
  %222 = getelementptr inbounds %struct.anon, ptr %221, i32 0, i32 1
  store float %220, ptr %222, align 4, !tbaa !23
  %223 = load float, ptr %21, align 4, !tbaa !25
  %224 = getelementptr inbounds %struct.Vector3, ptr %20, i32 0, i32 0
  %225 = getelementptr inbounds %struct.anon, ptr %224, i32 0, i32 1
  %226 = load float, ptr %225, align 4, !tbaa !23
  %227 = getelementptr inbounds %struct.Vector3, ptr %17, i32 0, i32 0
  %228 = getelementptr inbounds %struct.anon, ptr %227, i32 0, i32 2
  %229 = load float, ptr %228, align 4, !tbaa !23
  %230 = getelementptr inbounds %struct.Vector3, ptr %19, i32 0, i32 0
  %231 = getelementptr inbounds %struct.anon, ptr %230, i32 0, i32 1
  %232 = load float, ptr %231, align 4, !tbaa !23
  %233 = getelementptr inbounds %struct.Vector3, ptr %18, i32 0, i32 0
  %234 = getelementptr inbounds %struct.anon, ptr %233, i32 0, i32 2
  %235 = load float, ptr %234, align 4, !tbaa !23
  %236 = fmul float %232, %235
  %237 = fneg float %236
  %238 = call float @llvm.fmuladd.f32(float %226, float %229, float %237)
  %239 = fmul float %223, %238
  %240 = getelementptr inbounds %struct.Vector3, ptr %9, i32 0, i32 0
  %241 = getelementptr inbounds %struct.anon, ptr %240, i32 0, i32 2
  store float %239, ptr %241, align 4, !tbaa !23
  %242 = invoke noundef nonnull align 4 dereferenceable(16) ptr @_ZN7Vector3IfE10normalizedEv(ptr noundef nonnull align 4 dereferenceable(16) %9)
          to label %243 unwind label %358

243:                                              ; preds = %164
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %9, ptr align 4 %242, i64 16, i1 false), !tbaa.struct !24
  %244 = load float, ptr %21, align 4, !tbaa !25
  %245 = getelementptr inbounds %struct.Vector3, ptr %20, i32 0, i32 0
  %246 = getelementptr inbounds %struct.anon, ptr %245, i32 0, i32 0
  %247 = load float, ptr %246, align 4, !tbaa !23
  %248 = fneg float %247
  %249 = getelementptr inbounds %struct.Vector3, ptr %17, i32 0, i32 0
  %250 = getelementptr inbounds %struct.anon, ptr %249, i32 0, i32 0
  %251 = load float, ptr %250, align 4, !tbaa !23
  %252 = getelementptr inbounds %struct.Vector3, ptr %19, i32 0, i32 0
  %253 = getelementptr inbounds %struct.anon, ptr %252, i32 0, i32 0
  %254 = load float, ptr %253, align 4, !tbaa !23
  %255 = getelementptr inbounds %struct.Vector3, ptr %18, i32 0, i32 0
  %256 = getelementptr inbounds %struct.anon, ptr %255, i32 0, i32 0
  %257 = load float, ptr %256, align 4, !tbaa !23
  %258 = fmul float %254, %257
  %259 = call float @llvm.fmuladd.f32(float %248, float %251, float %258)
  %260 = fmul float %244, %259
  %261 = getelementptr inbounds %struct.Vector3, ptr %10, i32 0, i32 0
  %262 = getelementptr inbounds %struct.anon, ptr %261, i32 0, i32 0
  store float %260, ptr %262, align 4, !tbaa !23
  %263 = load float, ptr %21, align 4, !tbaa !25
  %264 = getelementptr inbounds %struct.Vector3, ptr %20, i32 0, i32 0
  %265 = getelementptr inbounds %struct.anon, ptr %264, i32 0, i32 0
  %266 = load float, ptr %265, align 4, !tbaa !23
  %267 = fneg float %266
  %268 = getelementptr inbounds %struct.Vector3, ptr %17, i32 0, i32 0
  %269 = getelementptr inbounds %struct.anon, ptr %268, i32 0, i32 1
  %270 = load float, ptr %269, align 4, !tbaa !23
  %271 = getelementptr inbounds %struct.Vector3, ptr %19, i32 0, i32 0
  %272 = getelementptr inbounds %struct.anon, ptr %271, i32 0, i32 0
  %273 = load float, ptr %272, align 4, !tbaa !23
  %274 = getelementptr inbounds %struct.Vector3, ptr %18, i32 0, i32 0
  %275 = getelementptr inbounds %struct.anon, ptr %274, i32 0, i32 1
  %276 = load float, ptr %275, align 4, !tbaa !23
  %277 = fmul float %273, %276
  %278 = call float @llvm.fmuladd.f32(float %267, float %270, float %277)
  %279 = fmul float %263, %278
  %280 = getelementptr inbounds %struct.Vector3, ptr %10, i32 0, i32 0
  %281 = getelementptr inbounds %struct.anon, ptr %280, i32 0, i32 1
  store float %279, ptr %281, align 4, !tbaa !23
  %282 = load float, ptr %21, align 4, !tbaa !25
  %283 = getelementptr inbounds %struct.Vector3, ptr %20, i32 0, i32 0
  %284 = getelementptr inbounds %struct.anon, ptr %283, i32 0, i32 0
  %285 = load float, ptr %284, align 4, !tbaa !23
  %286 = fneg float %285
  %287 = getelementptr inbounds %struct.Vector3, ptr %17, i32 0, i32 0
  %288 = getelementptr inbounds %struct.anon, ptr %287, i32 0, i32 2
  %289 = load float, ptr %288, align 4, !tbaa !23
  %290 = getelementptr inbounds %struct.Vector3, ptr %19, i32 0, i32 0
  %291 = getelementptr inbounds %struct.anon, ptr %290, i32 0, i32 0
  %292 = load float, ptr %291, align 4, !tbaa !23
  %293 = getelementptr inbounds %struct.Vector3, ptr %18, i32 0, i32 0
  %294 = getelementptr inbounds %struct.anon, ptr %293, i32 0, i32 2
  %295 = load float, ptr %294, align 4, !tbaa !23
  %296 = fmul float %292, %295
  %297 = call float @llvm.fmuladd.f32(float %286, float %289, float %296)
  %298 = fmul float %282, %297
  %299 = getelementptr inbounds %struct.Vector3, ptr %10, i32 0, i32 0
  %300 = getelementptr inbounds %struct.anon, ptr %299, i32 0, i32 2
  store float %298, ptr %300, align 4, !tbaa !23
  %301 = invoke noundef nonnull align 4 dereferenceable(16) ptr @_ZN7Vector3IfE10normalizedEv(ptr noundef nonnull align 4 dereferenceable(16) %10)
          to label %302 unwind label %358

302:                                              ; preds = %243
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %10, ptr align 4 %301, i64 16, i1 false), !tbaa.struct !24
  %303 = getelementptr inbounds %struct.Vector3.5, ptr %12, i32 0, i32 0
  %304 = getelementptr inbounds [3 x i32], ptr %303, i64 0, i64 0
  %305 = load i32, ptr %304, align 4, !tbaa !23
  %306 = sext i32 %305 to i64
  %307 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_I7Vector3IfESaIS1_EESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %3, i64 noundef %306) #6
  invoke void @_ZNSt6vectorI7Vector3IfESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %307, ptr noundef nonnull align 4 dereferenceable(16) %9)
          to label %308 unwind label %358

308:                                              ; preds = %302
  %309 = getelementptr inbounds %struct.Vector3.5, ptr %12, i32 0, i32 0
  %310 = getelementptr inbounds [3 x i32], ptr %309, i64 0, i64 1
  %311 = load i32, ptr %310, align 4, !tbaa !23
  %312 = sext i32 %311 to i64
  %313 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_I7Vector3IfESaIS1_EESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %3, i64 noundef %312) #6
  invoke void @_ZNSt6vectorI7Vector3IfESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %313, ptr noundef nonnull align 4 dereferenceable(16) %9)
          to label %314 unwind label %358

314:                                              ; preds = %308
  %315 = getelementptr inbounds %struct.Vector3.5, ptr %12, i32 0, i32 0
  %316 = getelementptr inbounds [3 x i32], ptr %315, i64 0, i64 2
  %317 = load i32, ptr %316, align 4, !tbaa !23
  %318 = sext i32 %317 to i64
  %319 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_I7Vector3IfESaIS1_EESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %3, i64 noundef %318) #6
  invoke void @_ZNSt6vectorI7Vector3IfESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %319, ptr noundef nonnull align 4 dereferenceable(16) %9)
          to label %320 unwind label %358

320:                                              ; preds = %314
  %321 = getelementptr inbounds %struct.Vector3.5, ptr %12, i32 0, i32 0
  %322 = getelementptr inbounds [3 x i32], ptr %321, i64 0, i64 0
  %323 = load i32, ptr %322, align 4, !tbaa !23
  %324 = sext i32 %323 to i64
  %325 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_I7Vector3IfESaIS1_EESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %7, i64 noundef %324) #6
  invoke void @_ZNSt6vectorI7Vector3IfESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %325, ptr noundef nonnull align 4 dereferenceable(16) %10)
          to label %326 unwind label %358

326:                                              ; preds = %320
  %327 = getelementptr inbounds %struct.Vector3.5, ptr %12, i32 0, i32 0
  %328 = getelementptr inbounds [3 x i32], ptr %327, i64 0, i64 1
  %329 = load i32, ptr %328, align 4, !tbaa !23
  %330 = sext i32 %329 to i64
  %331 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_I7Vector3IfESaIS1_EESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %7, i64 noundef %330) #6
  invoke void @_ZNSt6vectorI7Vector3IfESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %331, ptr noundef nonnull align 4 dereferenceable(16) %10)
          to label %332 unwind label %358

332:                                              ; preds = %326
  %333 = getelementptr inbounds %struct.Vector3.5, ptr %12, i32 0, i32 0
  %334 = getelementptr inbounds [3 x i32], ptr %333, i64 0, i64 2
  %335 = load i32, ptr %334, align 4, !tbaa !23
  %336 = sext i32 %335 to i64
  %337 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_I7Vector3IfESaIS1_EESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %7, i64 noundef %336) #6
  invoke void @_ZNSt6vectorI7Vector3IfESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %337, ptr noundef nonnull align 4 dereferenceable(16) %10)
          to label %338 unwind label %358

338:                                              ; preds = %332
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %20) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %19) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %18) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %17) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %16) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %15) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %14) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %13) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %12) #6
  br label %339

339:                                              ; preds = %338
  %340 = load i32, ptr %11, align 4, !tbaa !20
  %341 = add nsw i32 %340, 1
  store i32 %341, ptr %11, align 4, !tbaa !20
  br label %72, !llvm.loop !27

342:                                              ; preds = %94
  %343 = landingpad { ptr, i32 }
          cleanup
  %344 = extractvalue { ptr, i32 } %343, 0
  store ptr %344, ptr %5, align 8
  %345 = extractvalue { ptr, i32 } %343, 1
  store i32 %345, ptr %6, align 4
  br label %365

346:                                              ; preds = %122
  %347 = landingpad { ptr, i32 }
          cleanup
  %348 = extractvalue { ptr, i32 } %347, 0
  store ptr %348, ptr %5, align 8
  %349 = extractvalue { ptr, i32 } %347, 1
  store i32 %349, ptr %6, align 4
  br label %364

350:                                              ; preds = %128
  %351 = landingpad { ptr, i32 }
          cleanup
  %352 = extractvalue { ptr, i32 } %351, 0
  store ptr %352, ptr %5, align 8
  %353 = extractvalue { ptr, i32 } %351, 1
  store i32 %353, ptr %6, align 4
  br label %363

354:                                              ; preds = %146
  %355 = landingpad { ptr, i32 }
          cleanup
  %356 = extractvalue { ptr, i32 } %355, 0
  store ptr %356, ptr %5, align 8
  %357 = extractvalue { ptr, i32 } %355, 1
  store i32 %357, ptr %6, align 4
  br label %362

358:                                              ; preds = %332, %326, %320, %314, %308, %302, %243, %164
  %359 = landingpad { ptr, i32 }
          cleanup
  %360 = extractvalue { ptr, i32 } %359, 0
  store ptr %360, ptr %5, align 8
  %361 = extractvalue { ptr, i32 } %359, 1
  store i32 %361, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #6
  br label %362

362:                                              ; preds = %358, %354
  call void @llvm.lifetime.end.p0(i64 16, ptr %20) #6
  br label %363

363:                                              ; preds = %362, %350
  call void @llvm.lifetime.end.p0(i64 16, ptr %19) #6
  br label %364

364:                                              ; preds = %363, %346
  call void @llvm.lifetime.end.p0(i64 16, ptr %18) #6
  br label %365

365:                                              ; preds = %364, %342
  call void @llvm.lifetime.end.p0(i64 16, ptr %17) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %16) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %15) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %14) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %13) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %12) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #6
  br label %723

366:                                              ; preds = %77
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #6
  store i32 0, ptr %22, align 4, !tbaa !20
  br label %367

367:                                              ; preds = %486, %366
  %368 = load i32, ptr %22, align 4, !tbaa !20
  %369 = getelementptr inbounds %struct.Mesh, ptr %61, i32 0, i32 0
  %370 = load i32, ptr %369, align 8, !tbaa !9
  %371 = icmp slt i32 %368, %370
  br i1 %371, label %373, label %372

372:                                              ; preds = %367
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #6
  br label %495

373:                                              ; preds = %367
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #6
  store i32 0, ptr %23, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #6
  store i32 0, ptr %24, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 16, ptr %25) #6
  invoke void @_ZN7Vector3IfEC2Ef(ptr noundef nonnull align 4 dereferenceable(16) %25, float noundef 0.000000e+00)
          to label %374 unwind label %408

374:                                              ; preds = %373
  br label %375

375:                                              ; preds = %412, %374
  %376 = load i32, ptr %22, align 4, !tbaa !20
  %377 = sext i32 %376 to i64
  %378 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_I7Vector3IfESaIS1_EESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %3, i64 noundef %377) #6
  %379 = call noundef zeroext i1 @_ZNKSt6vectorI7Vector3IfESaIS1_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %378) #6
  %380 = xor i1 %379, true
  br i1 %380, label %381, label %416

381:                                              ; preds = %375
  %382 = load i32, ptr %23, align 4, !tbaa !20
  %383 = add nsw i32 %382, 1
  store i32 %383, ptr %23, align 4, !tbaa !20
  %384 = load i32, ptr %22, align 4, !tbaa !20
  %385 = sext i32 %384 to i64
  %386 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_I7Vector3IfESaIS1_EESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %3, i64 noundef %385) #6
  %387 = call noundef nonnull align 4 dereferenceable(16) ptr @_ZNSt6vectorI7Vector3IfESaIS1_EE4backEv(ptr noundef nonnull align 8 dereferenceable(24) %386) #6
  invoke void @_ZN7Vector3IfEpLERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %25, ptr noundef nonnull align 4 dereferenceable(16) %387)
          to label %388 unwind label %408

388:                                              ; preds = %381
  %389 = getelementptr inbounds %struct.Vector3, ptr %25, i32 0, i32 0
  %390 = getelementptr inbounds %struct.anon, ptr %389, i32 0, i32 0
  %391 = load float, ptr %390, align 4, !tbaa !23
  %392 = fcmp oeq float %391, 0.000000e+00
  br i1 %392, label %393, label %412

393:                                              ; preds = %388
  %394 = getelementptr inbounds %struct.Vector3, ptr %25, i32 0, i32 0
  %395 = getelementptr inbounds %struct.anon, ptr %394, i32 0, i32 1
  %396 = load float, ptr %395, align 4, !tbaa !23
  %397 = fcmp oeq float %396, 0.000000e+00
  br i1 %397, label %398, label %412

398:                                              ; preds = %393
  %399 = getelementptr inbounds %struct.Vector3, ptr %25, i32 0, i32 0
  %400 = getelementptr inbounds %struct.anon, ptr %399, i32 0, i32 2
  %401 = load float, ptr %400, align 4, !tbaa !23
  %402 = fcmp oeq float %401, 0.000000e+00
  br i1 %402, label %403, label %412

403:                                              ; preds = %398
  %404 = load i32, ptr %22, align 4, !tbaa !20
  %405 = sext i32 %404 to i64
  %406 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_I7Vector3IfESaIS1_EESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %3, i64 noundef %405) #6
  %407 = call noundef nonnull align 4 dereferenceable(16) ptr @_ZNSt6vectorI7Vector3IfESaIS1_EE4backEv(ptr noundef nonnull align 8 dereferenceable(24) %406) #6
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %25, ptr align 4 %407, i64 16, i1 false), !tbaa.struct !24
  br label %412

408:                                              ; preds = %421, %381, %373
  %409 = landingpad { ptr, i32 }
          cleanup
  %410 = extractvalue { ptr, i32 } %409, 0
  store ptr %410, ptr %5, align 8
  %411 = extractvalue { ptr, i32 } %409, 1
  store i32 %411, ptr %6, align 4
  br label %494

412:                                              ; preds = %403, %398, %393, %388
  %413 = load i32, ptr %22, align 4, !tbaa !20
  %414 = sext i32 %413 to i64
  %415 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_I7Vector3IfESaIS1_EESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %3, i64 noundef %414) #6
  call void @_ZNSt6vectorI7Vector3IfESaIS1_EE8pop_backEv(ptr noundef nonnull align 8 dereferenceable(24) %415) #6
  br label %375, !llvm.loop !29

416:                                              ; preds = %375
  call void @llvm.lifetime.start.p0(i64 16, ptr %26) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #6
  %417 = load i32, ptr %23, align 4, !tbaa !20
  %418 = sitofp i32 %417 to float
  %419 = fdiv float 1.000000e+00, %418
  store float %419, ptr %27, align 4, !tbaa !25
  %420 = invoke { <2 x float>, <2 x float> } @_ZNK7Vector3IfEmlERKf(ptr noundef nonnull align 4 dereferenceable(16) %25, ptr noundef nonnull align 4 dereferenceable(4) %27)
          to label %421 unwind label %462

421:                                              ; preds = %416
  %422 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %26, i32 0, i32 0
  %423 = extractvalue { <2 x float>, <2 x float> } %420, 0
  store <2 x float> %423, ptr %422, align 4
  %424 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %26, i32 0, i32 1
  %425 = extractvalue { <2 x float>, <2 x float> } %420, 1
  store <2 x float> %425, ptr %424, align 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %25, ptr align 4 %26, i64 16, i1 false), !tbaa.struct !24
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %26) #6
  %426 = getelementptr inbounds %struct.Mesh, ptr %61, i32 0, i32 4
  invoke void @_ZNSt6vectorI7Vector3IfESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %426, ptr noundef nonnull align 4 dereferenceable(16) %25)
          to label %427 unwind label %408

427:                                              ; preds = %421
  call void @llvm.lifetime.start.p0(i64 16, ptr %28) #6
  invoke void @_ZN7Vector3IfEC2Ef(ptr noundef nonnull align 4 dereferenceable(16) %28, float noundef 0.000000e+00)
          to label %428 unwind label %466

428:                                              ; preds = %427
  br label %429

429:                                              ; preds = %470, %428
  %430 = load i32, ptr %22, align 4, !tbaa !20
  %431 = sext i32 %430 to i64
  %432 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_I7Vector3IfESaIS1_EESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %7, i64 noundef %431) #6
  %433 = call noundef zeroext i1 @_ZNKSt6vectorI7Vector3IfESaIS1_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %432) #6
  %434 = xor i1 %433, true
  br i1 %434, label %435, label %474

435:                                              ; preds = %429
  %436 = load i32, ptr %24, align 4, !tbaa !20
  %437 = add nsw i32 %436, 1
  store i32 %437, ptr %24, align 4, !tbaa !20
  %438 = load i32, ptr %22, align 4, !tbaa !20
  %439 = sext i32 %438 to i64
  %440 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_I7Vector3IfESaIS1_EESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %7, i64 noundef %439) #6
  %441 = call noundef nonnull align 4 dereferenceable(16) ptr @_ZNSt6vectorI7Vector3IfESaIS1_EE4backEv(ptr noundef nonnull align 8 dereferenceable(24) %440) #6
  invoke void @_ZN7Vector3IfEpLERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %28, ptr noundef nonnull align 4 dereferenceable(16) %441)
          to label %442 unwind label %466

442:                                              ; preds = %435
  %443 = getelementptr inbounds %struct.Vector3, ptr %28, i32 0, i32 0
  %444 = getelementptr inbounds %struct.anon, ptr %443, i32 0, i32 0
  %445 = load float, ptr %444, align 4, !tbaa !23
  %446 = fcmp oeq float %445, 0.000000e+00
  br i1 %446, label %447, label %470

447:                                              ; preds = %442
  %448 = getelementptr inbounds %struct.Vector3, ptr %28, i32 0, i32 0
  %449 = getelementptr inbounds %struct.anon, ptr %448, i32 0, i32 1
  %450 = load float, ptr %449, align 4, !tbaa !23
  %451 = fcmp oeq float %450, 0.000000e+00
  br i1 %451, label %452, label %470

452:                                              ; preds = %447
  %453 = getelementptr inbounds %struct.Vector3, ptr %28, i32 0, i32 0
  %454 = getelementptr inbounds %struct.anon, ptr %453, i32 0, i32 2
  %455 = load float, ptr %454, align 4, !tbaa !23
  %456 = fcmp oeq float %455, 0.000000e+00
  br i1 %456, label %457, label %470

457:                                              ; preds = %452
  %458 = load i32, ptr %22, align 4, !tbaa !20
  %459 = sext i32 %458 to i64
  %460 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_I7Vector3IfESaIS1_EESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %7, i64 noundef %459) #6
  %461 = call noundef nonnull align 4 dereferenceable(16) ptr @_ZNSt6vectorI7Vector3IfESaIS1_EE4backEv(ptr noundef nonnull align 8 dereferenceable(24) %460) #6
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %28, ptr align 4 %461, i64 16, i1 false), !tbaa.struct !24
  br label %470

462:                                              ; preds = %416
  %463 = landingpad { ptr, i32 }
          cleanup
  %464 = extractvalue { ptr, i32 } %463, 0
  store ptr %464, ptr %5, align 8
  %465 = extractvalue { ptr, i32 } %463, 1
  store i32 %465, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %26) #6
  br label %494

466:                                              ; preds = %479, %435, %427
  %467 = landingpad { ptr, i32 }
          cleanup
  %468 = extractvalue { ptr, i32 } %467, 0
  store ptr %468, ptr %5, align 8
  %469 = extractvalue { ptr, i32 } %467, 1
  store i32 %469, ptr %6, align 4
  br label %493

470:                                              ; preds = %457, %452, %447, %442
  %471 = load i32, ptr %22, align 4, !tbaa !20
  %472 = sext i32 %471 to i64
  %473 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_I7Vector3IfESaIS1_EESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %7, i64 noundef %472) #6
  call void @_ZNSt6vectorI7Vector3IfESaIS1_EE8pop_backEv(ptr noundef nonnull align 8 dereferenceable(24) %473) #6
  br label %429, !llvm.loop !30

474:                                              ; preds = %429
  call void @llvm.lifetime.start.p0(i64 16, ptr %29) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #6
  %475 = load i32, ptr %24, align 4, !tbaa !20
  %476 = sitofp i32 %475 to float
  %477 = fdiv float 1.000000e+00, %476
  store float %477, ptr %30, align 4, !tbaa !25
  %478 = invoke { <2 x float>, <2 x float> } @_ZNK7Vector3IfEmlERKf(ptr noundef nonnull align 4 dereferenceable(16) %28, ptr noundef nonnull align 4 dereferenceable(4) %30)
          to label %479 unwind label %489

479:                                              ; preds = %474
  %480 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %29, i32 0, i32 0
  %481 = extractvalue { <2 x float>, <2 x float> } %478, 0
  store <2 x float> %481, ptr %480, align 4
  %482 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %29, i32 0, i32 1
  %483 = extractvalue { <2 x float>, <2 x float> } %478, 1
  store <2 x float> %483, ptr %482, align 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %28, ptr align 4 %29, i64 16, i1 false), !tbaa.struct !24
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %29) #6
  %484 = getelementptr inbounds %struct.Mesh, ptr %61, i32 0, i32 5
  invoke void @_ZNSt6vectorI7Vector3IfESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %484, ptr noundef nonnull align 4 dereferenceable(16) %28)
          to label %485 unwind label %466

485:                                              ; preds = %479
  call void @llvm.lifetime.end.p0(i64 16, ptr %28) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %25) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #6
  br label %486

486:                                              ; preds = %485
  %487 = load i32, ptr %22, align 4, !tbaa !20
  %488 = add nsw i32 %487, 1
  store i32 %488, ptr %22, align 4, !tbaa !20
  br label %367, !llvm.loop !31

489:                                              ; preds = %474
  %490 = landingpad { ptr, i32 }
          cleanup
  %491 = extractvalue { ptr, i32 } %490, 0
  store ptr %491, ptr %5, align 8
  %492 = extractvalue { ptr, i32 } %490, 1
  store i32 %492, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %29) #6
  br label %493

493:                                              ; preds = %489, %466
  call void @llvm.lifetime.end.p0(i64 16, ptr %28) #6
  br label %494

494:                                              ; preds = %493, %462, %408
  call void @llvm.lifetime.end.p0(i64 16, ptr %25) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #6
  br label %723

495:                                              ; preds = %372
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #6
  store i32 0, ptr %31, align 4, !tbaa !20
  br label %496

496:                                              ; preds = %718, %495
  %497 = load i32, ptr %31, align 4, !tbaa !20
  %498 = getelementptr inbounds %struct.Mesh, ptr %61, i32 0, i32 6
  %499 = load i32, ptr %498, align 8, !tbaa !21
  %500 = icmp slt i32 %497, %499
  br i1 %500, label %502, label %501

501:                                              ; preds = %496
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #6
  br label %722

502:                                              ; preds = %496
  call void @llvm.lifetime.start.p0(i64 16, ptr %32) #6
  %503 = getelementptr inbounds %struct.Mesh, ptr %61, i32 0, i32 8
  %504 = load i32, ptr %31, align 4, !tbaa !20
  %505 = sext i32 %504 to i64
  %506 = call noundef nonnull align 4 dereferenceable(16) ptr @_ZNSt6vectorI7Vector3IiESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %503, i64 noundef %505) #6
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %32, ptr align 4 %506, i64 16, i1 false), !tbaa.struct !22
  call void @llvm.lifetime.start.p0(i64 16, ptr %33) #6
  %507 = getelementptr inbounds %struct.Mesh, ptr %61, i32 0, i32 10
  %508 = load i32, ptr %31, align 4, !tbaa !20
  %509 = sext i32 %508 to i64
  %510 = call noundef nonnull align 4 dereferenceable(16) ptr @_ZNSt6vectorI7Vector3IiESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %507, i64 noundef %509) #6
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %33, ptr align 4 %510, i64 16, i1 false), !tbaa.struct !22
  call void @llvm.lifetime.start.p0(i64 16, ptr %34) #6
  %511 = getelementptr inbounds %struct.Mesh, ptr %61, i32 0, i32 4
  %512 = getelementptr inbounds %struct.Vector3.5, ptr %32, i32 0, i32 0
  %513 = getelementptr inbounds [3 x i32], ptr %512, i64 0, i64 0
  %514 = load i32, ptr %513, align 4, !tbaa !23
  %515 = sext i32 %514 to i64
  %516 = call noundef nonnull align 4 dereferenceable(16) ptr @_ZNSt6vectorI7Vector3IfESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %511, i64 noundef %515) #6
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %34, ptr align 4 %516, i64 16, i1 false), !tbaa.struct !24
  call void @llvm.lifetime.start.p0(i64 16, ptr %35) #6
  %517 = getelementptr inbounds %struct.Mesh, ptr %61, i32 0, i32 4
  %518 = getelementptr inbounds %struct.Vector3.5, ptr %32, i32 0, i32 0
  %519 = getelementptr inbounds [3 x i32], ptr %518, i64 0, i64 1
  %520 = load i32, ptr %519, align 4, !tbaa !23
  %521 = sext i32 %520 to i64
  %522 = call noundef nonnull align 4 dereferenceable(16) ptr @_ZNSt6vectorI7Vector3IfESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %517, i64 noundef %521) #6
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %35, ptr align 4 %522, i64 16, i1 false), !tbaa.struct !24
  call void @llvm.lifetime.start.p0(i64 16, ptr %36) #6
  %523 = getelementptr inbounds %struct.Mesh, ptr %61, i32 0, i32 4
  %524 = getelementptr inbounds %struct.Vector3.5, ptr %32, i32 0, i32 0
  %525 = getelementptr inbounds [3 x i32], ptr %524, i64 0, i64 2
  %526 = load i32, ptr %525, align 4, !tbaa !23
  %527 = sext i32 %526 to i64
  %528 = call noundef nonnull align 4 dereferenceable(16) ptr @_ZNSt6vectorI7Vector3IfESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %523, i64 noundef %527) #6
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %36, ptr align 4 %528, i64 16, i1 false), !tbaa.struct !24
  call void @llvm.lifetime.start.p0(i64 16, ptr %37) #6
  %529 = getelementptr inbounds %struct.Mesh, ptr %61, i32 0, i32 2
  %530 = getelementptr inbounds %struct.Vector3.5, ptr %33, i32 0, i32 0
  %531 = getelementptr inbounds [3 x i32], ptr %530, i64 0, i64 0
  %532 = load i32, ptr %531, align 4, !tbaa !23
  %533 = sext i32 %532 to i64
  %534 = call noundef nonnull align 4 dereferenceable(16) ptr @_ZNSt6vectorI7Vector3IfESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %529, i64 noundef %533) #6
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %37, ptr align 4 %534, i64 16, i1 false), !tbaa.struct !24
  call void @llvm.lifetime.start.p0(i64 16, ptr %38) #6
  %535 = getelementptr inbounds %struct.Mesh, ptr %61, i32 0, i32 2
  %536 = getelementptr inbounds %struct.Vector3.5, ptr %33, i32 0, i32 0
  %537 = getelementptr inbounds [3 x i32], ptr %536, i64 0, i64 1
  %538 = load i32, ptr %537, align 4, !tbaa !23
  %539 = sext i32 %538 to i64
  %540 = call noundef nonnull align 4 dereferenceable(16) ptr @_ZNSt6vectorI7Vector3IfESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %535, i64 noundef %539) #6
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %38, ptr align 4 %540, i64 16, i1 false), !tbaa.struct !24
  call void @llvm.lifetime.start.p0(i64 16, ptr %39) #6
  %541 = getelementptr inbounds %struct.Mesh, ptr %61, i32 0, i32 2
  %542 = getelementptr inbounds %struct.Vector3.5, ptr %33, i32 0, i32 0
  %543 = getelementptr inbounds [3 x i32], ptr %542, i64 0, i64 2
  %544 = load i32, ptr %543, align 4, !tbaa !23
  %545 = sext i32 %544 to i64
  %546 = call noundef nonnull align 4 dereferenceable(16) ptr @_ZNSt6vectorI7Vector3IfESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %541, i64 noundef %545) #6
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %39, ptr align 4 %546, i64 16, i1 false), !tbaa.struct !24
  call void @llvm.lifetime.start.p0(i64 16, ptr %40) #6
  %547 = getelementptr inbounds %struct.Mesh, ptr %61, i32 0, i32 5
  %548 = getelementptr inbounds %struct.Vector3.5, ptr %32, i32 0, i32 0
  %549 = getelementptr inbounds [3 x i32], ptr %548, i64 0, i64 0
  %550 = load i32, ptr %549, align 4, !tbaa !23
  %551 = sext i32 %550 to i64
  %552 = call noundef nonnull align 4 dereferenceable(16) ptr @_ZNSt6vectorI7Vector3IfESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %547, i64 noundef %551) #6
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %40, ptr align 4 %552, i64 16, i1 false), !tbaa.struct !24
  call void @llvm.lifetime.start.p0(i64 16, ptr %41) #6
  %553 = getelementptr inbounds %struct.Mesh, ptr %61, i32 0, i32 5
  %554 = getelementptr inbounds %struct.Vector3.5, ptr %32, i32 0, i32 0
  %555 = getelementptr inbounds [3 x i32], ptr %554, i64 0, i64 1
  %556 = load i32, ptr %555, align 4, !tbaa !23
  %557 = sext i32 %556 to i64
  %558 = call noundef nonnull align 4 dereferenceable(16) ptr @_ZNSt6vectorI7Vector3IfESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %553, i64 noundef %557) #6
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %41, ptr align 4 %558, i64 16, i1 false), !tbaa.struct !24
  call void @llvm.lifetime.start.p0(i64 16, ptr %42) #6
  %559 = getelementptr inbounds %struct.Mesh, ptr %61, i32 0, i32 5
  %560 = getelementptr inbounds %struct.Vector3.5, ptr %32, i32 0, i32 0
  %561 = getelementptr inbounds [3 x i32], ptr %560, i64 0, i64 2
  %562 = load i32, ptr %561, align 4, !tbaa !23
  %563 = sext i32 %562 to i64
  %564 = call noundef nonnull align 4 dereferenceable(16) ptr @_ZNSt6vectorI7Vector3IfESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %559, i64 noundef %563) #6
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %42, ptr align 4 %564, i64 16, i1 false), !tbaa.struct !24
  call void @llvm.lifetime.start.p0(i64 16, ptr %43) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr %44) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %45) #6
  %565 = invoke noundef float @_ZNK7Vector3IfE10dotProductERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %34, ptr noundef nonnull align 4 dereferenceable(16) %37)
          to label %566 unwind label %629

566:                                              ; preds = %502
  store float %565, ptr %45, align 4, !tbaa !25
  %567 = invoke { <2 x float>, <2 x float> } @_ZNK7Vector3IfEmlERKf(ptr noundef nonnull align 4 dereferenceable(16) %37, ptr noundef nonnull align 4 dereferenceable(4) %45)
          to label %568 unwind label %629

568:                                              ; preds = %566
  %569 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %44, i32 0, i32 0
  %570 = extractvalue { <2 x float>, <2 x float> } %567, 0
  store <2 x float> %570, ptr %569, align 4
  %571 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %44, i32 0, i32 1
  %572 = extractvalue { <2 x float>, <2 x float> } %567, 1
  store <2 x float> %572, ptr %571, align 4
  %573 = invoke { <2 x float>, <2 x float> } @_ZNK7Vector3IfEmiERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %34, ptr noundef nonnull align 4 dereferenceable(16) %44)
          to label %574 unwind label %629

574:                                              ; preds = %568
  %575 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %43, i32 0, i32 0
  %576 = extractvalue { <2 x float>, <2 x float> } %573, 0
  store <2 x float> %576, ptr %575, align 4
  %577 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %43, i32 0, i32 1
  %578 = extractvalue { <2 x float>, <2 x float> } %573, 1
  store <2 x float> %578, ptr %577, align 4
  %579 = invoke noundef nonnull align 4 dereferenceable(16) ptr @_ZN7Vector3IfE10normalizedEv(ptr noundef nonnull align 4 dereferenceable(16) %43)
          to label %580 unwind label %629

580:                                              ; preds = %574
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %34, ptr align 4 %579, i64 16, i1 false), !tbaa.struct !24
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %44) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %43) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr %46) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr %47) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %48) #6
  %581 = invoke noundef float @_ZNK7Vector3IfE10dotProductERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %35, ptr noundef nonnull align 4 dereferenceable(16) %38)
          to label %582 unwind label %633

582:                                              ; preds = %580
  store float %581, ptr %48, align 4, !tbaa !25
  %583 = invoke { <2 x float>, <2 x float> } @_ZNK7Vector3IfEmlERKf(ptr noundef nonnull align 4 dereferenceable(16) %38, ptr noundef nonnull align 4 dereferenceable(4) %48)
          to label %584 unwind label %633

584:                                              ; preds = %582
  %585 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %47, i32 0, i32 0
  %586 = extractvalue { <2 x float>, <2 x float> } %583, 0
  store <2 x float> %586, ptr %585, align 4
  %587 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %47, i32 0, i32 1
  %588 = extractvalue { <2 x float>, <2 x float> } %583, 1
  store <2 x float> %588, ptr %587, align 4
  %589 = invoke { <2 x float>, <2 x float> } @_ZNK7Vector3IfEmiERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %35, ptr noundef nonnull align 4 dereferenceable(16) %47)
          to label %590 unwind label %633

590:                                              ; preds = %584
  %591 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %46, i32 0, i32 0
  %592 = extractvalue { <2 x float>, <2 x float> } %589, 0
  store <2 x float> %592, ptr %591, align 4
  %593 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %46, i32 0, i32 1
  %594 = extractvalue { <2 x float>, <2 x float> } %589, 1
  store <2 x float> %594, ptr %593, align 4
  %595 = invoke noundef nonnull align 4 dereferenceable(16) ptr @_ZN7Vector3IfE10normalizedEv(ptr noundef nonnull align 4 dereferenceable(16) %46)
          to label %596 unwind label %633

596:                                              ; preds = %590
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %35, ptr align 4 %595, i64 16, i1 false), !tbaa.struct !24
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %47) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %46) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr %49) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr %50) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %51) #6
  %597 = invoke noundef float @_ZNK7Vector3IfE10dotProductERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %36, ptr noundef nonnull align 4 dereferenceable(16) %39)
          to label %598 unwind label %637

598:                                              ; preds = %596
  store float %597, ptr %51, align 4, !tbaa !25
  %599 = invoke { <2 x float>, <2 x float> } @_ZNK7Vector3IfEmlERKf(ptr noundef nonnull align 4 dereferenceable(16) %39, ptr noundef nonnull align 4 dereferenceable(4) %51)
          to label %600 unwind label %637

600:                                              ; preds = %598
  %601 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %50, i32 0, i32 0
  %602 = extractvalue { <2 x float>, <2 x float> } %599, 0
  store <2 x float> %602, ptr %601, align 4
  %603 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %50, i32 0, i32 1
  %604 = extractvalue { <2 x float>, <2 x float> } %599, 1
  store <2 x float> %604, ptr %603, align 4
  %605 = invoke { <2 x float>, <2 x float> } @_ZNK7Vector3IfEmiERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %36, ptr noundef nonnull align 4 dereferenceable(16) %50)
          to label %606 unwind label %637

606:                                              ; preds = %600
  %607 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %49, i32 0, i32 0
  %608 = extractvalue { <2 x float>, <2 x float> } %605, 0
  store <2 x float> %608, ptr %607, align 4
  %609 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %49, i32 0, i32 1
  %610 = extractvalue { <2 x float>, <2 x float> } %605, 1
  store <2 x float> %610, ptr %609, align 4
  %611 = invoke noundef nonnull align 4 dereferenceable(16) ptr @_ZN7Vector3IfE10normalizedEv(ptr noundef nonnull align 4 dereferenceable(16) %49)
          to label %612 unwind label %637

612:                                              ; preds = %606
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %36, ptr align 4 %611, i64 16, i1 false), !tbaa.struct !24
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %50) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %49) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr %52) #6
  %613 = invoke { <2 x float>, <2 x float> } @_ZNK7Vector3IfE12crossProductERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %37, ptr noundef nonnull align 4 dereferenceable(16) %34)
          to label %614 unwind label %641

614:                                              ; preds = %612
  %615 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %52, i32 0, i32 0
  %616 = extractvalue { <2 x float>, <2 x float> } %613, 0
  store <2 x float> %616, ptr %615, align 4
  %617 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %52, i32 0, i32 1
  %618 = extractvalue { <2 x float>, <2 x float> } %613, 1
  store <2 x float> %618, ptr %617, align 4
  %619 = invoke noundef float @_ZNK7Vector3IfE10dotProductERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %40, ptr noundef nonnull align 4 dereferenceable(16) %52)
          to label %620 unwind label %641

620:                                              ; preds = %614
  %621 = fcmp olt float %619, 0.000000e+00
  call void @llvm.lifetime.end.p0(i64 16, ptr %52) #6
  br i1 %621, label %622, label %649

622:                                              ; preds = %620
  call void @llvm.lifetime.start.p0(i64 16, ptr %53) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %54) #6
  store float -1.000000e+00, ptr %54, align 4, !tbaa !25
  %623 = invoke { <2 x float>, <2 x float> } @_ZNK7Vector3IfEmlERKf(ptr noundef nonnull align 4 dereferenceable(16) %34, ptr noundef nonnull align 4 dereferenceable(4) %54)
          to label %624 unwind label %645

624:                                              ; preds = %622
  %625 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %53, i32 0, i32 0
  %626 = extractvalue { <2 x float>, <2 x float> } %623, 0
  store <2 x float> %626, ptr %625, align 4
  %627 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %53, i32 0, i32 1
  %628 = extractvalue { <2 x float>, <2 x float> } %623, 1
  store <2 x float> %628, ptr %627, align 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %34, ptr align 4 %53, i64 16, i1 false), !tbaa.struct !24
  call void @llvm.lifetime.end.p0(i64 4, ptr %54) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %53) #6
  br label %649

629:                                              ; preds = %574, %568, %566, %502
  %630 = landingpad { ptr, i32 }
          cleanup
  %631 = extractvalue { ptr, i32 } %630, 0
  store ptr %631, ptr %5, align 8
  %632 = extractvalue { ptr, i32 } %630, 1
  store i32 %632, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %44) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %43) #6
  br label %721

633:                                              ; preds = %590, %584, %582, %580
  %634 = landingpad { ptr, i32 }
          cleanup
  %635 = extractvalue { ptr, i32 } %634, 0
  store ptr %635, ptr %5, align 8
  %636 = extractvalue { ptr, i32 } %634, 1
  store i32 %636, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %47) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %46) #6
  br label %721

637:                                              ; preds = %606, %600, %598, %596
  %638 = landingpad { ptr, i32 }
          cleanup
  %639 = extractvalue { ptr, i32 } %638, 0
  store ptr %639, ptr %5, align 8
  %640 = extractvalue { ptr, i32 } %638, 1
  store i32 %640, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %50) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %49) #6
  br label %721

641:                                              ; preds = %614, %612
  %642 = landingpad { ptr, i32 }
          cleanup
  %643 = extractvalue { ptr, i32 } %642, 0
  store ptr %643, ptr %5, align 8
  %644 = extractvalue { ptr, i32 } %642, 1
  store i32 %644, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %52) #6
  br label %721

645:                                              ; preds = %622
  %646 = landingpad { ptr, i32 }
          cleanup
  %647 = extractvalue { ptr, i32 } %646, 0
  store ptr %647, ptr %5, align 8
  %648 = extractvalue { ptr, i32 } %646, 1
  store i32 %648, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %54) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %53) #6
  br label %721

649:                                              ; preds = %624, %620
  call void @llvm.lifetime.start.p0(i64 16, ptr %55) #6
  %650 = invoke { <2 x float>, <2 x float> } @_ZNK7Vector3IfE12crossProductERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %38, ptr noundef nonnull align 4 dereferenceable(16) %35)
          to label %651 unwind label %666

651:                                              ; preds = %649
  %652 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %55, i32 0, i32 0
  %653 = extractvalue { <2 x float>, <2 x float> } %650, 0
  store <2 x float> %653, ptr %652, align 4
  %654 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %55, i32 0, i32 1
  %655 = extractvalue { <2 x float>, <2 x float> } %650, 1
  store <2 x float> %655, ptr %654, align 4
  %656 = invoke noundef float @_ZNK7Vector3IfE10dotProductERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %41, ptr noundef nonnull align 4 dereferenceable(16) %55)
          to label %657 unwind label %666

657:                                              ; preds = %651
  %658 = fcmp olt float %656, 0.000000e+00
  call void @llvm.lifetime.end.p0(i64 16, ptr %55) #6
  br i1 %658, label %659, label %674

659:                                              ; preds = %657
  call void @llvm.lifetime.start.p0(i64 16, ptr %56) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %57) #6
  store float -1.000000e+00, ptr %57, align 4, !tbaa !25
  %660 = invoke { <2 x float>, <2 x float> } @_ZNK7Vector3IfEmlERKf(ptr noundef nonnull align 4 dereferenceable(16) %35, ptr noundef nonnull align 4 dereferenceable(4) %57)
          to label %661 unwind label %670

661:                                              ; preds = %659
  %662 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %56, i32 0, i32 0
  %663 = extractvalue { <2 x float>, <2 x float> } %660, 0
  store <2 x float> %663, ptr %662, align 4
  %664 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %56, i32 0, i32 1
  %665 = extractvalue { <2 x float>, <2 x float> } %660, 1
  store <2 x float> %665, ptr %664, align 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %35, ptr align 4 %56, i64 16, i1 false), !tbaa.struct !24
  call void @llvm.lifetime.end.p0(i64 4, ptr %57) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %56) #6
  br label %674

666:                                              ; preds = %651, %649
  %667 = landingpad { ptr, i32 }
          cleanup
  %668 = extractvalue { ptr, i32 } %667, 0
  store ptr %668, ptr %5, align 8
  %669 = extractvalue { ptr, i32 } %667, 1
  store i32 %669, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %55) #6
  br label %721

670:                                              ; preds = %659
  %671 = landingpad { ptr, i32 }
          cleanup
  %672 = extractvalue { ptr, i32 } %671, 0
  store ptr %672, ptr %5, align 8
  %673 = extractvalue { ptr, i32 } %671, 1
  store i32 %673, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %57) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %56) #6
  br label %721

674:                                              ; preds = %661, %657
  call void @llvm.lifetime.start.p0(i64 16, ptr %58) #6
  %675 = invoke { <2 x float>, <2 x float> } @_ZNK7Vector3IfE12crossProductERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %39, ptr noundef nonnull align 4 dereferenceable(16) %36)
          to label %676 unwind label %691

676:                                              ; preds = %674
  %677 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %58, i32 0, i32 0
  %678 = extractvalue { <2 x float>, <2 x float> } %675, 0
  store <2 x float> %678, ptr %677, align 4
  %679 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %58, i32 0, i32 1
  %680 = extractvalue { <2 x float>, <2 x float> } %675, 1
  store <2 x float> %680, ptr %679, align 4
  %681 = invoke noundef float @_ZNK7Vector3IfE10dotProductERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %42, ptr noundef nonnull align 4 dereferenceable(16) %58)
          to label %682 unwind label %691

682:                                              ; preds = %676
  %683 = fcmp olt float %681, 0.000000e+00
  call void @llvm.lifetime.end.p0(i64 16, ptr %58) #6
  br i1 %683, label %684, label %699

684:                                              ; preds = %682
  call void @llvm.lifetime.start.p0(i64 16, ptr %59) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %60) #6
  store float -1.000000e+00, ptr %60, align 4, !tbaa !25
  %685 = invoke { <2 x float>, <2 x float> } @_ZNK7Vector3IfEmlERKf(ptr noundef nonnull align 4 dereferenceable(16) %36, ptr noundef nonnull align 4 dereferenceable(4) %60)
          to label %686 unwind label %695

686:                                              ; preds = %684
  %687 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %59, i32 0, i32 0
  %688 = extractvalue { <2 x float>, <2 x float> } %685, 0
  store <2 x float> %688, ptr %687, align 4
  %689 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %59, i32 0, i32 1
  %690 = extractvalue { <2 x float>, <2 x float> } %685, 1
  store <2 x float> %690, ptr %689, align 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %36, ptr align 4 %59, i64 16, i1 false), !tbaa.struct !24
  call void @llvm.lifetime.end.p0(i64 4, ptr %60) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %59) #6
  br label %699

691:                                              ; preds = %676, %674
  %692 = landingpad { ptr, i32 }
          cleanup
  %693 = extractvalue { ptr, i32 } %692, 0
  store ptr %693, ptr %5, align 8
  %694 = extractvalue { ptr, i32 } %692, 1
  store i32 %694, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %58) #6
  br label %721

695:                                              ; preds = %684
  %696 = landingpad { ptr, i32 }
          cleanup
  %697 = extractvalue { ptr, i32 } %696, 0
  store ptr %697, ptr %5, align 8
  %698 = extractvalue { ptr, i32 } %696, 1
  store i32 %698, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %60) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %59) #6
  br label %721

699:                                              ; preds = %686, %682
  %700 = getelementptr inbounds %struct.Mesh, ptr %61, i32 0, i32 4
  %701 = getelementptr inbounds %struct.Vector3.5, ptr %32, i32 0, i32 0
  %702 = getelementptr inbounds [3 x i32], ptr %701, i64 0, i64 0
  %703 = load i32, ptr %702, align 4, !tbaa !23
  %704 = sext i32 %703 to i64
  %705 = call noundef nonnull align 4 dereferenceable(16) ptr @_ZNSt6vectorI7Vector3IfESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %700, i64 noundef %704) #6
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %705, ptr align 4 %34, i64 16, i1 false), !tbaa.struct !24
  %706 = getelementptr inbounds %struct.Mesh, ptr %61, i32 0, i32 4
  %707 = getelementptr inbounds %struct.Vector3.5, ptr %32, i32 0, i32 0
  %708 = getelementptr inbounds [3 x i32], ptr %707, i64 0, i64 1
  %709 = load i32, ptr %708, align 4, !tbaa !23
  %710 = sext i32 %709 to i64
  %711 = call noundef nonnull align 4 dereferenceable(16) ptr @_ZNSt6vectorI7Vector3IfESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %706, i64 noundef %710) #6
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %711, ptr align 4 %35, i64 16, i1 false), !tbaa.struct !24
  %712 = getelementptr inbounds %struct.Mesh, ptr %61, i32 0, i32 4
  %713 = getelementptr inbounds %struct.Vector3.5, ptr %32, i32 0, i32 0
  %714 = getelementptr inbounds [3 x i32], ptr %713, i64 0, i64 2
  %715 = load i32, ptr %714, align 4, !tbaa !23
  %716 = sext i32 %715 to i64
  %717 = call noundef nonnull align 4 dereferenceable(16) ptr @_ZNSt6vectorI7Vector3IfESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %712, i64 noundef %716) #6
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %717, ptr align 4 %36, i64 16, i1 false), !tbaa.struct !24
  call void @llvm.lifetime.end.p0(i64 16, ptr %42) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %41) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %40) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %39) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %38) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %37) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %36) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %35) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %34) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %33) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %32) #6
  br label %718

718:                                              ; preds = %699
  %719 = load i32, ptr %31, align 4, !tbaa !20
  %720 = add nsw i32 %719, 1
  store i32 %720, ptr %31, align 4, !tbaa !20
  br label %496, !llvm.loop !32

721:                                              ; preds = %695, %691, %670, %666, %645, %641, %637, %633, %629
  call void @llvm.lifetime.end.p0(i64 16, ptr %42) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %41) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %40) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %39) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %38) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %37) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %36) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %35) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %34) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %33) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %32) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #6
  br label %723

722:                                              ; preds = %501
  call void @llvm.lifetime.end.p0(i64 16, ptr %10) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %9) #6
  call void @_ZNSt6vectorIS_I7Vector3IfESaIS1_EESaIS3_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %7) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr %7) #6
  call void @_ZNSt6vectorIS_I7Vector3IfESaIS1_EESaIS3_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %3) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr %3) #6
  ret void

723:                                              ; preds = %721, %494, %365, %90
  call void @llvm.lifetime.end.p0(i64 16, ptr %10) #6
  br label %724

724:                                              ; preds = %723, %86
  call void @llvm.lifetime.end.p0(i64 16, ptr %9) #6
  call void @_ZNSt6vectorIS_I7Vector3IfESaIS1_EESaIS3_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %7) #6
  br label %725

725:                                              ; preds = %724, %82
  call void @llvm.lifetime.end.p0(i64 24, ptr %7) #6
  call void @_ZNSt6vectorIS_I7Vector3IfESaIS1_EESaIS3_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %3) #6
  br label %726

726:                                              ; preds = %725, %78
  call void @llvm.lifetime.end.p0(i64 24, ptr %3) #6
  br label %727

727:                                              ; preds = %726
  %728 = load ptr, ptr %5, align 8
  %729 = load i32, ptr %6, align 4
  %730 = insertvalue { ptr, i32 } poison, ptr %728, 0
  %731 = insertvalue { ptr, i32 } %730, i32 %729, 1
  resume { ptr, i32 } %731
}

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

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

declare i32 @__gxx_personality_v0(...)

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare float @llvm.fmuladd.f32(float, float, float) #5

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local { <2 x float>, <2 x float> } @_ZNK7Vector3IfEmlERKf(ptr noundef nonnull align 4 dereferenceable(16), ptr noundef nonnull align 4 dereferenceable(4)) #3 align 2

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !11, i64 0}
!10 = !{!"_ZTS4Mesh", !11, i64 0, !12, i64 8, !12, i64 32, !12, i64 56, !12, i64 80, !12, i64 104, !11, i64 128, !12, i64 136, !16, i64 160, !16, i64 184, !16, i64 208}
!11 = !{!"int", !7, i64 0}
!12 = !{!"_ZTSSt6vectorI7Vector3IfESaIS1_EE", !13, i64 0}
!13 = !{!"_ZTSSt12_Vector_baseI7Vector3IfESaIS1_EE", !14, i64 0}
!14 = !{!"_ZTSNSt12_Vector_baseI7Vector3IfESaIS1_EE12_Vector_implE", !15, i64 0}
!15 = !{!"_ZTSNSt12_Vector_baseI7Vector3IfESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!16 = !{!"_ZTSSt6vectorI7Vector3IiESaIS1_EE", !17, i64 0}
!17 = !{!"_ZTSSt12_Vector_baseI7Vector3IiESaIS1_EE", !18, i64 0}
!18 = !{!"_ZTSNSt12_Vector_baseI7Vector3IiESaIS1_EE12_Vector_implE", !19, i64 0}
!19 = !{!"_ZTSNSt12_Vector_baseI7Vector3IiESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!20 = !{!11, !11, i64 0}
!21 = !{!10, !11, i64 128}
!22 = !{i64 0, i64 12, !23, i64 12, i64 4, !20}
!23 = !{!7, !7, i64 0}
!24 = !{i64 0, i64 12, !23, i64 12, i64 4, !25}
!25 = !{!26, !26, i64 0}
!26 = !{!"float", !7, i64 0}
!27 = distinct !{!27, !28}
!28 = !{!"llvm.loop.mustprogress"}
!29 = distinct !{!29, !28}
!30 = distinct !{!30, !28}
!31 = distinct !{!31, !28}
!32 = distinct !{!32, !28}


; 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.8" = type { %"struct.std::_Vector_base.9" }
%"struct.std::_Vector_base.9" = type { %"struct.std::_Vector_base<std::vector<Vector3<float>>, std::allocator<std::vector<Vector3<float>>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::vector<Vector3<float>>, std::allocator<std::vector<Vector3<float>>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::vector<Vector3<float>>, std::allocator<std::vector<Vector3<float>>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::vector<Vector3<float>>, std::allocator<std::vector<Vector3<float>>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::allocator.10" = type { i8 }
%struct.Vector3 = type { %union.anon, float }
%union.anon = type { [3 x float] }

; 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 nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(16) ptr @_ZNSt6vectorI7Vector3IfESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) local_unnamed_addr #1 align 2

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local { <2 x float>, <2 x float> } @_ZNK7Vector3IfEmiERKS0_(ptr noundef nonnull align 4 dereferenceable(16), ptr noundef nonnull align 4 dereferenceable(16)) local_unnamed_addr #3 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local { <2 x float>, <2 x float> } @_ZNK7Vector3IfE12crossProductERKS0_(ptr noundef nonnull align 4 dereferenceable(16), ptr noundef nonnull align 4 dereferenceable(16)) local_unnamed_addr #3 align 2

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN4Mesh17buildTangentSpaceEv(ptr noundef nonnull align 8 dereferenceable(232) %0) local_unnamed_addr #4 align 2 personality ptr @__gxx_personality_v0 {
  %2 = alloca %"class.std::vector.8", align 8
  %3 = alloca %"class.std::allocator.10", align 1
  %4 = alloca %"class.std::vector.8", align 8
  %5 = alloca %"class.std::allocator.10", align 1
  %6 = alloca %struct.Vector3, align 8
  %7 = alloca %struct.Vector3, align 8
  %8 = alloca %struct.Vector3, align 4
  %9 = alloca %struct.Vector3, align 4
  %10 = alloca %struct.Vector3, align 4
  %11 = alloca %struct.Vector3, align 8
  %12 = alloca float, align 4
  %13 = alloca %struct.Vector3, align 8
  %14 = alloca float, align 4
  %15 = alloca %struct.Vector3, align 8
  %16 = alloca %struct.Vector3, align 8
  %17 = alloca %struct.Vector3, align 8
  %18 = alloca %struct.Vector3, align 4
  %19 = alloca %struct.Vector3, align 4
  %20 = alloca %struct.Vector3, align 4
  %21 = alloca %struct.Vector3, align 4
  %22 = alloca %struct.Vector3, align 4
  %23 = alloca %struct.Vector3, align 4
  %24 = alloca %struct.Vector3, align 8
  %25 = alloca %struct.Vector3, align 8
  %26 = alloca float, align 4
  %27 = alloca %struct.Vector3, align 8
  %28 = alloca %struct.Vector3, align 8
  %29 = alloca float, align 4
  %30 = alloca %struct.Vector3, align 8
  %31 = alloca %struct.Vector3, align 8
  %32 = alloca float, align 4
  %33 = alloca %struct.Vector3, align 8
  %34 = alloca float, align 4
  %35 = alloca %struct.Vector3, align 8
  %36 = alloca float, align 4
  %37 = alloca %struct.Vector3, align 8
  %38 = alloca float, align 4
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %2) #7
  %39 = load i32, ptr %0, align 8, !tbaa !5
  %40 = sext i32 %39 to i64
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %3) #7
  call void @_ZNSaISt6vectorI7Vector3IfESaIS1_EEEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %3) #7
  invoke void @_ZNSt6vectorIS_I7Vector3IfESaIS1_EESaIS3_EEC2EmRKS4_(ptr noundef nonnull align 8 dereferenceable(24) %2, i64 noundef %40, ptr noundef nonnull align 1 dereferenceable(1) %3)
          to label %41 unwind label %63

41:                                               ; preds = %1
  call void @_ZNSt15__new_allocatorISt6vectorI7Vector3IfESaIS2_EEED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %3) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %3) #7
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %4) #7
  %42 = load i32, ptr %0, align 8, !tbaa !5
  %43 = sext i32 %42 to i64
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %5) #7
  call void @_ZNSaISt6vectorI7Vector3IfESaIS1_EEEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %5) #7
  invoke void @_ZNSt6vectorIS_I7Vector3IfESaIS1_EESaIS3_EEC2EmRKS4_(ptr noundef nonnull align 8 dereferenceable(24) %4, i64 noundef %43, ptr noundef nonnull align 1 dereferenceable(1) %5)
          to label %44 unwind label %65

44:                                               ; preds = %41
  call void @_ZNSt15__new_allocatorISt6vectorI7Vector3IfESaIS2_EEED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %5) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %5) #7
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %6) #7
  call void @_ZN7Vector3IfEC2Ev(ptr noundef nonnull align 4 dereferenceable(16) %6)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %7) #7
  call void @_ZN7Vector3IfEC2Ev(ptr noundef nonnull align 4 dereferenceable(16) %7)
  %45 = getelementptr inbounds i8, ptr %0, i64 128
  %46 = load i32, ptr %45, align 8, !tbaa !19
  %47 = icmp sgt i32 %46, 0
  br i1 %47, label %.lr.ph, label %.preheader147

.lr.ph:                                           ; preds = %44
  %48 = getelementptr inbounds i8, ptr %0, i64 160
  %49 = getelementptr inbounds i8, ptr %0, i64 184
  %50 = getelementptr inbounds i8, ptr %0, i64 8
  %51 = getelementptr inbounds i8, ptr %0, i64 56
  %52 = getelementptr inbounds i8, ptr %6, i64 8
  %53 = getelementptr inbounds i8, ptr %7, i64 8
  br label %67

.preheader147:                                    ; preds = %138, %44
  %54 = phi i32 [ %46, %44 ], [ %139, %138 ]
  %55 = load i32, ptr %0, align 8, !tbaa !5
  %56 = icmp sgt i32 %55, 0
  br i1 %56, label %.lr.ph164, label %.preheader

.lr.ph164:                                        ; preds = %.preheader147
  %57 = getelementptr inbounds i8, ptr %11, i64 4
  %58 = getelementptr inbounds i8, ptr %11, i64 8
  %59 = getelementptr inbounds i8, ptr %0, i64 80
  %60 = getelementptr inbounds i8, ptr %13, i64 4
  %61 = getelementptr inbounds i8, ptr %13, i64 8
  %62 = getelementptr inbounds i8, ptr %0, i64 104
  br label %169

63:                                               ; preds = %1
  %64 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorISt6vectorI7Vector3IfESaIS2_EEED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %3) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %3) #7
  br label %347

65:                                               ; preds = %41
  %66 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorISt6vectorI7Vector3IfESaIS2_EEED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %5) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %5) #7
  br label %346

67:                                               ; preds = %.lr.ph, %138
  %indvars.iv = phi i64 [ 0, %.lr.ph ], [ %indvars.iv.next, %138 ]
  %68 = call noundef nonnull align 4 dereferenceable(16) ptr @_ZNSt6vectorI7Vector3IiESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %48, i64 noundef %indvars.iv) #7
  %.sroa.0103.0.copyload = load i32, ptr %68, align 4
  %.sroa.7106.0..sroa_idx = getelementptr inbounds i8, ptr %68, i64 4
  %.sroa.7106.0.copyload = load i32, ptr %.sroa.7106.0..sroa_idx, align 4
  %.sroa.10109.0..sroa_idx = getelementptr inbounds i8, ptr %68, i64 8
  %.sroa.10109.0.copyload = load i32, ptr %.sroa.10109.0..sroa_idx, align 4, !tbaa !20
  %69 = call noundef nonnull align 4 dereferenceable(16) ptr @_ZNSt6vectorI7Vector3IiESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %49, i64 noundef %indvars.iv) #7
  %.sroa.098.0.copyload = load i32, ptr %69, align 4
  %.sroa.6100.0..sroa_idx = getelementptr inbounds i8, ptr %69, i64 4
  %.sroa.6100.0.copyload = load i32, ptr %.sroa.6100.0..sroa_idx, align 4
  %.sroa.7101.0..sroa_idx = getelementptr inbounds i8, ptr %69, i64 8
  %.sroa.7101.0.copyload = load i32, ptr %.sroa.7101.0..sroa_idx, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %8) #7
  %70 = sext i32 %.sroa.0103.0.copyload to i64
  %71 = call noundef nonnull align 4 dereferenceable(16) ptr @_ZNSt6vectorI7Vector3IfESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %50, i64 noundef %70) #7
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(16) %8, ptr noundef nonnull align 4 dereferenceable(16) %71, i64 16, i1 false), !tbaa.struct !21
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %9) #7
  %72 = sext i32 %.sroa.7106.0.copyload to i64
  %73 = call noundef nonnull align 4 dereferenceable(16) ptr @_ZNSt6vectorI7Vector3IfESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %50, i64 noundef %72) #7
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(16) %9, ptr noundef nonnull align 4 dereferenceable(16) %73, i64 16, i1 false), !tbaa.struct !21
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %10) #7
  %74 = sext i32 %.sroa.10109.0.copyload to i64
  %75 = call noundef nonnull align 4 dereferenceable(16) ptr @_ZNSt6vectorI7Vector3IfESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %50, i64 noundef %74) #7
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(16) %10, ptr noundef nonnull align 4 dereferenceable(16) %75, i64 16, i1 false), !tbaa.struct !21
  %76 = invoke { <2 x float>, <2 x float> } @_ZNK7Vector3IfEmiERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %9, ptr noundef nonnull align 4 dereferenceable(16) %8)
          to label %77 unwind label %142

77:                                               ; preds = %67
  %78 = extractvalue { <2 x float>, <2 x float> } %76, 0
  %79 = extractvalue { <2 x float>, <2 x float> } %76, 1
  %80 = invoke { <2 x float>, <2 x float> } @_ZNK7Vector3IfEmiERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %10, ptr noundef nonnull align 4 dereferenceable(16) %8)
          to label %81 unwind label %144

81:                                               ; preds = %77
  %82 = extractvalue { <2 x float>, <2 x float> } %80, 0
  %83 = extractvalue { <2 x float>, <2 x float> } %80, 1
  %84 = sext i32 %.sroa.6100.0.copyload to i64
  %85 = call noundef nonnull align 4 dereferenceable(16) ptr @_ZNSt6vectorI7Vector3IfESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %51, i64 noundef %84) #7
  %86 = sext i32 %.sroa.098.0.copyload to i64
  %87 = call noundef nonnull align 4 dereferenceable(16) ptr @_ZNSt6vectorI7Vector3IfESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %51, i64 noundef %86) #7
  %88 = invoke { <2 x float>, <2 x float> } @_ZNK7Vector3IfEmiERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %85, ptr noundef nonnull align 4 dereferenceable(16) %87)
          to label %89 unwind label %146

89:                                               ; preds = %81
  %90 = sext i32 %.sroa.7101.0.copyload to i64
  %91 = call noundef nonnull align 4 dereferenceable(16) ptr @_ZNSt6vectorI7Vector3IfESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %51, i64 noundef %90) #7
  %92 = call noundef nonnull align 4 dereferenceable(16) ptr @_ZNSt6vectorI7Vector3IfESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %51, i64 noundef %86) #7
  %93 = invoke { <2 x float>, <2 x float> } @_ZNK7Vector3IfEmiERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %91, ptr noundef nonnull align 4 dereferenceable(16) %92)
          to label %94 unwind label %148

94:                                               ; preds = %89
  %95 = extractvalue { <2 x float>, <2 x float> } %88, 0
  %96 = extractvalue { <2 x float>, <2 x float> } %93, 0
  %.sroa.069.0.vec.extract = extractelement <2 x float> %95, i64 0
  %.sroa.056.4.vec.extract = extractelement <2 x float> %96, i64 1
  %.sroa.056.0.vec.extract = extractelement <2 x float> %96, i64 0
  %.sroa.069.4.vec.extract = extractelement <2 x float> %95, i64 1
  %97 = fneg float %.sroa.056.0.vec.extract
  %98 = fmul float %.sroa.069.4.vec.extract, %97
  %99 = call float @llvm.fmuladd.f32(float %.sroa.069.0.vec.extract, float %.sroa.056.4.vec.extract, float %98)
  %100 = fdiv float 1.000000e+00, %99
  %101 = fneg float %.sroa.069.4.vec.extract
  %102 = insertelement <2 x float> poison, float %101, i64 0
  %103 = shufflevector <2 x float> %102, <2 x float> poison, <2 x i32> zeroinitializer
  %104 = fmul <2 x float> %82, %103
  %105 = shufflevector <2 x float> %96, <2 x float> poison, <2 x i32> <i32 1, i32 1>
  %106 = call <2 x float> @llvm.fmuladd.v2f32(<2 x float> %105, <2 x float> %78, <2 x float> %104)
  %107 = insertelement <2 x float> poison, float %100, i64 0
  %108 = shufflevector <2 x float> %107, <2 x float> poison, <2 x i32> zeroinitializer
  %109 = fmul <2 x float> %106, %108
  store <2 x float> %109, ptr %6, align 8, !tbaa !20
  %.sroa.895.8.vec.extract = extractelement <2 x float> %79, i64 0
  %.sroa.8.8.vec.extract = extractelement <2 x float> %83, i64 0
  %110 = fmul float %.sroa.8.8.vec.extract, %101
  %111 = call float @llvm.fmuladd.f32(float %.sroa.056.4.vec.extract, float %.sroa.895.8.vec.extract, float %110)
  %112 = fmul float %111, %100
  store float %112, ptr %52, align 8, !tbaa !20
  %113 = invoke noundef nonnull align 4 dereferenceable(16) ptr @_ZN7Vector3IfE10normalizedEv(ptr noundef nonnull align 4 dereferenceable(16) %6)
          to label %114 unwind label %150

114:                                              ; preds = %94
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %6, ptr noundef nonnull align 4 dereferenceable(16) %113, i64 16, i1 false), !tbaa.struct !21
  %115 = shufflevector <2 x float> %95, <2 x float> poison, <2 x i32> zeroinitializer
  %116 = fmul <2 x float> %82, %115
  %117 = insertelement <2 x float> poison, float %97, i64 0
  %118 = shufflevector <2 x float> %117, <2 x float> poison, <2 x i32> zeroinitializer
  %119 = call <2 x float> @llvm.fmuladd.v2f32(<2 x float> %118, <2 x float> %78, <2 x float> %116)
  %120 = fmul <2 x float> %119, %108
  store <2 x float> %120, ptr %7, align 8, !tbaa !20
  %121 = fmul <2 x float> %83, %95
  %122 = extractelement <2 x float> %121, i64 0
  %123 = call float @llvm.fmuladd.f32(float %97, float %.sroa.895.8.vec.extract, float %122)
  %124 = fmul float %123, %100
  store float %124, ptr %53, align 8, !tbaa !20
  %125 = invoke noundef nonnull align 4 dereferenceable(16) ptr @_ZN7Vector3IfE10normalizedEv(ptr noundef nonnull align 4 dereferenceable(16) %7)
          to label %126 unwind label %150

126:                                              ; preds = %114
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %7, ptr noundef nonnull align 4 dereferenceable(16) %125, i64 16, i1 false), !tbaa.struct !21
  %127 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_I7Vector3IfESaIS1_EESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %2, i64 noundef %70) #7
  invoke void @_ZNSt6vectorI7Vector3IfESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %127, ptr noundef nonnull align 4 dereferenceable(16) %6)
          to label %128 unwind label %150

128:                                              ; preds = %126
  %129 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_I7Vector3IfESaIS1_EESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %2, i64 noundef %72) #7
  invoke void @_ZNSt6vectorI7Vector3IfESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %129, ptr noundef nonnull align 4 dereferenceable(16) %6)
          to label %130 unwind label %150

130:                                              ; preds = %128
  %131 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_I7Vector3IfESaIS1_EESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %2, i64 noundef %74) #7
  invoke void @_ZNSt6vectorI7Vector3IfESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %131, ptr noundef nonnull align 4 dereferenceable(16) %6)
          to label %132 unwind label %150

132:                                              ; preds = %130
  %133 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_I7Vector3IfESaIS1_EESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %4, i64 noundef %70) #7
  invoke void @_ZNSt6vectorI7Vector3IfESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %133, ptr noundef nonnull align 4 dereferenceable(16) %7)
          to label %134 unwind label %150

134:                                              ; preds = %132
  %135 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_I7Vector3IfESaIS1_EESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %4, i64 noundef %72) #7
  invoke void @_ZNSt6vectorI7Vector3IfESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %135, ptr noundef nonnull align 4 dereferenceable(16) %7)
          to label %136 unwind label %150

136:                                              ; preds = %134
  %137 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_I7Vector3IfESaIS1_EESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %4, i64 noundef %74) #7
  invoke void @_ZNSt6vectorI7Vector3IfESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %137, ptr noundef nonnull align 4 dereferenceable(16) %7)
          to label %138 unwind label %150

138:                                              ; preds = %136
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %10) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %9) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %8) #7
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %139 = load i32, ptr %45, align 8, !tbaa !19
  %140 = sext i32 %139 to i64
  %141 = icmp slt i64 %indvars.iv.next, %140
  br i1 %141, label %67, label %.preheader147, !llvm.loop !24

142:                                              ; preds = %67
  %143 = landingpad { ptr, i32 }
          cleanup
  br label %152

144:                                              ; preds = %77
  %145 = landingpad { ptr, i32 }
          cleanup
  br label %152

146:                                              ; preds = %81
  %147 = landingpad { ptr, i32 }
          cleanup
  br label %152

148:                                              ; preds = %89
  %149 = landingpad { ptr, i32 }
          cleanup
  br label %152

150:                                              ; preds = %136, %134, %132, %130, %128, %126, %114, %94
  %151 = landingpad { ptr, i32 }
          cleanup
  br label %152

152:                                              ; preds = %144, %148, %150, %146, %142
  %.pn139.pn.pn.pn = phi { ptr, i32 } [ %143, %142 ], [ %145, %144 ], [ %147, %146 ], [ %151, %150 ], [ %149, %148 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %10) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %9) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %8) #7
  br label %345

.preheader.loopexit:                              ; preds = %225
  %.pre = load i32, ptr %45, align 8, !tbaa !19
  br label %.preheader

.preheader:                                       ; preds = %.preheader.loopexit, %.preheader147
  %153 = phi i32 [ %.pre, %.preheader.loopexit ], [ %54, %.preheader147 ]
  %154 = icmp sgt i32 %153, 0
  br i1 %154, label %.lr.ph166, label %._crit_edge167

.lr.ph166:                                        ; preds = %.preheader
  %155 = getelementptr inbounds i8, ptr %0, i64 160
  %156 = getelementptr inbounds i8, ptr %0, i64 208
  %157 = getelementptr inbounds i8, ptr %0, i64 80
  %158 = getelementptr inbounds i8, ptr %0, i64 32
  %159 = getelementptr inbounds i8, ptr %0, i64 104
  %160 = getelementptr inbounds i8, ptr %25, i64 8
  %161 = getelementptr inbounds i8, ptr %24, i64 8
  %162 = getelementptr inbounds i8, ptr %28, i64 8
  %163 = getelementptr inbounds i8, ptr %27, i64 8
  %164 = getelementptr inbounds i8, ptr %31, i64 8
  %165 = getelementptr inbounds i8, ptr %30, i64 8
  %166 = getelementptr inbounds i8, ptr %33, i64 8
  %.sroa.519.0..sroa_idx = getelementptr inbounds i8, ptr %15, i64 8
  %167 = getelementptr inbounds i8, ptr %35, i64 8
  %.sroa.517.0..sroa_idx = getelementptr inbounds i8, ptr %16, i64 8
  %168 = getelementptr inbounds i8, ptr %37, i64 8
  %.sroa.5.0..sroa_idx = getelementptr inbounds i8, ptr %17, i64 8
  br label %233

169:                                              ; preds = %.lr.ph164, %225
  %indvars.iv170 = phi i64 [ 0, %.lr.ph164 ], [ %indvars.iv.next171, %225 ]
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %11) #7
  call void @_ZN7Vector3IfEC2Ef(ptr noundef nonnull align 4 dereferenceable(16) %11, float noundef 0.000000e+00)
  %170 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_I7Vector3IfESaIS1_EESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %2, i64 noundef %indvars.iv170) #7
  %171 = call noundef zeroext i1 @_ZNKSt6vectorI7Vector3IfESaIS1_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %170) #7
  br i1 %171, label %._crit_edge, label %.lr.ph156

.lr.ph156:                                        ; preds = %169, %186
  %.0132155 = phi i32 [ %172, %186 ], [ 0, %169 ]
  %172 = add nuw nsw i32 %.0132155, 1
  %173 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_I7Vector3IfESaIS1_EESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %2, i64 noundef %indvars.iv170) #7
  %174 = call noundef nonnull align 4 dereferenceable(16) ptr @_ZNSt6vectorI7Vector3IfESaIS1_EE4backEv(ptr noundef nonnull align 8 dereferenceable(24) %173) #7
  call void @_ZN7Vector3IfEpLERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %11, ptr noundef nonnull align 4 dereferenceable(16) %174)
  %175 = load float, ptr %11, align 8, !tbaa !20
  %176 = fcmp oeq float %175, 0.000000e+00
  %177 = load float, ptr %57, align 4
  %178 = fcmp oeq float %177, 0.000000e+00
  %or.cond = select i1 %176, i1 %178, i1 false
  %179 = load float, ptr %58, align 8
  %180 = fcmp oeq float %179, 0.000000e+00
  %or.cond7 = select i1 %or.cond, i1 %180, i1 false
  br i1 %or.cond7, label %181, label %186

181:                                              ; preds = %.lr.ph156
  %182 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_I7Vector3IfESaIS1_EESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %2, i64 noundef %indvars.iv170) #7
  %183 = call noundef nonnull align 4 dereferenceable(16) ptr @_ZNSt6vectorI7Vector3IfESaIS1_EE4backEv(ptr noundef nonnull align 8 dereferenceable(24) %182) #7
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %11, ptr noundef nonnull align 4 dereferenceable(16) %183, i64 16, i1 false), !tbaa.struct !21
  br label %186

184:                                              ; preds = %193
  %185 = landingpad { ptr, i32 }
          cleanup
  br label %232

186:                                              ; preds = %181, %.lr.ph156
  %187 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_I7Vector3IfESaIS1_EESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %2, i64 noundef %indvars.iv170) #7
  call void @_ZNSt6vectorI7Vector3IfESaIS1_EE8pop_backEv(ptr noundef nonnull align 8 dereferenceable(24) %187) #7
  %188 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_I7Vector3IfESaIS1_EESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %2, i64 noundef %indvars.iv170) #7
  %189 = call noundef zeroext i1 @_ZNKSt6vectorI7Vector3IfESaIS1_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %188) #7
  br i1 %189, label %._crit_edge, label %.lr.ph156, !llvm.loop !26

._crit_edge:                                      ; preds = %186, %169
  %.0132.lcssa = phi i32 [ 0, %169 ], [ %172, %186 ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %12) #7
  %190 = uitofp nneg i32 %.0132.lcssa to float
  %191 = fdiv float 1.000000e+00, %190
  store float %191, ptr %12, align 4, !tbaa !22
  %192 = invoke { <2 x float>, <2 x float> } @_ZNK7Vector3IfEmlERKf(ptr noundef nonnull align 4 dereferenceable(16) %11, ptr noundef nonnull align 4 dereferenceable(4) %12)
          to label %193 unwind label %211

193:                                              ; preds = %._crit_edge
  %194 = extractvalue { <2 x float>, <2 x float> } %192, 0
  %195 = extractvalue { <2 x float>, <2 x float> } %192, 1
  store <2 x float> %194, ptr %11, align 8
  store <2 x float> %195, ptr %58, align 8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %12) #7
  invoke void @_ZNSt6vectorI7Vector3IfESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %59, ptr noundef nonnull align 4 dereferenceable(16) %11)
          to label %196 unwind label %184

196:                                              ; preds = %193
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %13) #7
  call void @_ZN7Vector3IfEC2Ef(ptr noundef nonnull align 4 dereferenceable(16) %13, float noundef 0.000000e+00)
  %197 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_I7Vector3IfESaIS1_EESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %4, i64 noundef %indvars.iv170) #7
  %198 = call noundef zeroext i1 @_ZNKSt6vectorI7Vector3IfESaIS1_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %197) #7
  br i1 %198, label %._crit_edge161, label %.lr.ph160

.lr.ph160:                                        ; preds = %196, %215
  %.0133158 = phi i32 [ %199, %215 ], [ 0, %196 ]
  %199 = add nuw nsw i32 %.0133158, 1
  %200 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_I7Vector3IfESaIS1_EESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %4, i64 noundef %indvars.iv170) #7
  %201 = call noundef nonnull align 4 dereferenceable(16) ptr @_ZNSt6vectorI7Vector3IfESaIS1_EE4backEv(ptr noundef nonnull align 8 dereferenceable(24) %200) #7
  call void @_ZN7Vector3IfEpLERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %13, ptr noundef nonnull align 4 dereferenceable(16) %201)
  %202 = load float, ptr %13, align 8, !tbaa !20
  %203 = fcmp oeq float %202, 0.000000e+00
  %204 = load float, ptr %60, align 4
  %205 = fcmp oeq float %204, 0.000000e+00
  %or.cond11 = select i1 %203, i1 %205, i1 false
  %206 = load float, ptr %61, align 8
  %207 = fcmp oeq float %206, 0.000000e+00
  %or.cond15 = select i1 %or.cond11, i1 %207, i1 false
  br i1 %or.cond15, label %208, label %215

208:                                              ; preds = %.lr.ph160
  %209 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_I7Vector3IfESaIS1_EESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %4, i64 noundef %indvars.iv170) #7
  %210 = call noundef nonnull align 4 dereferenceable(16) ptr @_ZNSt6vectorI7Vector3IfESaIS1_EE4backEv(ptr noundef nonnull align 8 dereferenceable(24) %209) #7
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %13, ptr noundef nonnull align 4 dereferenceable(16) %210, i64 16, i1 false), !tbaa.struct !21
  br label %215

211:                                              ; preds = %._crit_edge
  %212 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %12) #7
  br label %232

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

215:                                              ; preds = %208, %.lr.ph160
  %216 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_I7Vector3IfESaIS1_EESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %4, i64 noundef %indvars.iv170) #7
  call void @_ZNSt6vectorI7Vector3IfESaIS1_EE8pop_backEv(ptr noundef nonnull align 8 dereferenceable(24) %216) #7
  %217 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_I7Vector3IfESaIS1_EESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %4, i64 noundef %indvars.iv170) #7
  %218 = call noundef zeroext i1 @_ZNKSt6vectorI7Vector3IfESaIS1_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %217) #7
  br i1 %218, label %._crit_edge161, label %.lr.ph160, !llvm.loop !27

._crit_edge161:                                   ; preds = %215, %196
  %.0133.lcssa = phi i32 [ 0, %196 ], [ %199, %215 ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %14) #7
  %219 = uitofp nneg i32 %.0133.lcssa to float
  %220 = fdiv float 1.000000e+00, %219
  store float %220, ptr %14, align 4, !tbaa !22
  %221 = invoke { <2 x float>, <2 x float> } @_ZNK7Vector3IfEmlERKf(ptr noundef nonnull align 4 dereferenceable(16) %13, ptr noundef nonnull align 4 dereferenceable(4) %14)
          to label %222 unwind label %229

222:                                              ; preds = %._crit_edge161
  %223 = extractvalue { <2 x float>, <2 x float> } %221, 0
  %224 = extractvalue { <2 x float>, <2 x float> } %221, 1
  store <2 x float> %223, ptr %13, align 8
  store <2 x float> %224, ptr %61, align 8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %14) #7
  invoke void @_ZNSt6vectorI7Vector3IfESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %62, ptr noundef nonnull align 4 dereferenceable(16) %13)
          to label %225 unwind label %213

225:                                              ; preds = %222
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %13) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %11) #7
  %indvars.iv.next171 = add nuw nsw i64 %indvars.iv170, 1
  %226 = load i32, ptr %0, align 8, !tbaa !5
  %227 = sext i32 %226 to i64
  %228 = icmp slt i64 %indvars.iv.next171, %227
  br i1 %228, label %169, label %.preheader.loopexit, !llvm.loop !28

229:                                              ; preds = %._crit_edge161
  %230 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %14) #7
  br label %231

231:                                              ; preds = %229, %213
  %.pn136 = phi { ptr, i32 } [ %214, %213 ], [ %230, %229 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %13) #7
  br label %232

232:                                              ; preds = %231, %211, %184
  %.pn136.pn = phi { ptr, i32 } [ %.pn136, %231 ], [ %185, %184 ], [ %212, %211 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %11) #7
  br label %345

._crit_edge167:                                   ; preds = %337, %.preheader
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %7) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %6) #7
  call void @_ZNSt6vectorIS_I7Vector3IfESaIS1_EESaIS3_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %4) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %4) #7
  call void @_ZNSt6vectorIS_I7Vector3IfESaIS1_EESaIS3_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %2) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %2) #7
  ret void

233:                                              ; preds = %.lr.ph166, %337
  %indvars.iv173 = phi i64 [ 0, %.lr.ph166 ], [ %indvars.iv.next174, %337 ]
  %234 = call noundef nonnull align 4 dereferenceable(16) ptr @_ZNSt6vectorI7Vector3IiESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %155, i64 noundef %indvars.iv173) #7
  %.sroa.022.0.copyload = load i32, ptr %234, align 4
  %.sroa.725.0..sroa_idx = getelementptr inbounds i8, ptr %234, i64 4
  %.sroa.725.0.copyload = load i32, ptr %.sroa.725.0..sroa_idx, align 4
  %.sroa.10.0..sroa_idx = getelementptr inbounds i8, ptr %234, i64 8
  %.sroa.10.0.copyload = load i32, ptr %.sroa.10.0..sroa_idx, align 4, !tbaa !20
  %235 = call noundef nonnull align 4 dereferenceable(16) ptr @_ZNSt6vectorI7Vector3IiESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %156, i64 noundef %indvars.iv173) #7
  %.sroa.020.0.copyload = load i32, ptr %235, align 4
  %.sroa.521.0..sroa_idx = getelementptr inbounds i8, ptr %235, i64 4
  %.sroa.521.0.copyload = load i32, ptr %.sroa.521.0..sroa_idx, align 4
  %.sroa.6.0..sroa_idx = getelementptr inbounds i8, ptr %235, i64 8
  %.sroa.6.0.copyload = load i32, ptr %.sroa.6.0..sroa_idx, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %15) #7
  %236 = sext i32 %.sroa.022.0.copyload to i64
  %237 = call noundef nonnull align 4 dereferenceable(16) ptr @_ZNSt6vectorI7Vector3IfESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %157, i64 noundef %236) #7
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %15, ptr noundef nonnull align 4 dereferenceable(16) %237, i64 16, i1 false), !tbaa.struct !21
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %16) #7
  %238 = sext i32 %.sroa.725.0.copyload to i64
  %239 = call noundef nonnull align 4 dereferenceable(16) ptr @_ZNSt6vectorI7Vector3IfESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %157, i64 noundef %238) #7
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %16, ptr noundef nonnull align 4 dereferenceable(16) %239, i64 16, i1 false), !tbaa.struct !21
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %17) #7
  %240 = sext i32 %.sroa.10.0.copyload to i64
  %241 = call noundef nonnull align 4 dereferenceable(16) ptr @_ZNSt6vectorI7Vector3IfESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %157, i64 noundef %240) #7
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %17, ptr noundef nonnull align 4 dereferenceable(16) %241, i64 16, i1 false), !tbaa.struct !21
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %18) #7
  %242 = sext i32 %.sroa.020.0.copyload to i64
  %243 = call noundef nonnull align 4 dereferenceable(16) ptr @_ZNSt6vectorI7Vector3IfESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %158, i64 noundef %242) #7
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(16) %18, ptr noundef nonnull align 4 dereferenceable(16) %243, i64 16, i1 false), !tbaa.struct !21
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %19) #7
  %244 = sext i32 %.sroa.521.0.copyload to i64
  %245 = call noundef nonnull align 4 dereferenceable(16) ptr @_ZNSt6vectorI7Vector3IfESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %158, i64 noundef %244) #7
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(16) %19, ptr noundef nonnull align 4 dereferenceable(16) %245, i64 16, i1 false), !tbaa.struct !21
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %20) #7
  %246 = sext i32 %.sroa.6.0.copyload to i64
  %247 = call noundef nonnull align 4 dereferenceable(16) ptr @_ZNSt6vectorI7Vector3IfESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %158, i64 noundef %246) #7
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(16) %20, ptr noundef nonnull align 4 dereferenceable(16) %247, i64 16, i1 false), !tbaa.struct !21
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %21) #7
  %248 = call noundef nonnull align 4 dereferenceable(16) ptr @_ZNSt6vectorI7Vector3IfESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %159, i64 noundef %236) #7
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(16) %21, ptr noundef nonnull align 4 dereferenceable(16) %248, i64 16, i1 false), !tbaa.struct !21
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %22) #7
  %249 = call noundef nonnull align 4 dereferenceable(16) ptr @_ZNSt6vectorI7Vector3IfESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %159, i64 noundef %238) #7
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(16) %22, ptr noundef nonnull align 4 dereferenceable(16) %249, i64 16, i1 false), !tbaa.struct !21
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %23) #7
  %250 = call noundef nonnull align 4 dereferenceable(16) ptr @_ZNSt6vectorI7Vector3IfESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %159, i64 noundef %240) #7
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(16) %23, ptr noundef nonnull align 4 dereferenceable(16) %250, i64 16, i1 false), !tbaa.struct !21
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %24) #7
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %25) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %26) #7
  %251 = call noundef float @_ZNK7Vector3IfE10dotProductERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %15, ptr noundef nonnull align 4 dereferenceable(16) %18)
  store float %251, ptr %26, align 4, !tbaa !22
  %252 = invoke { <2 x float>, <2 x float> } @_ZNK7Vector3IfEmlERKf(ptr noundef nonnull align 4 dereferenceable(16) %18, ptr noundef nonnull align 4 dereferenceable(4) %26)
          to label %253 unwind label %295

253:                                              ; preds = %233
  %254 = extractvalue { <2 x float>, <2 x float> } %252, 0
  store <2 x float> %254, ptr %25, align 8
  %255 = extractvalue { <2 x float>, <2 x float> } %252, 1
  store <2 x float> %255, ptr %160, align 8
  %256 = invoke { <2 x float>, <2 x float> } @_ZNK7Vector3IfEmiERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %15, ptr noundef nonnull align 4 dereferenceable(16) %25)
          to label %257 unwind label %295

257:                                              ; preds = %253
  %258 = extractvalue { <2 x float>, <2 x float> } %256, 0
  store <2 x float> %258, ptr %24, align 8
  %259 = extractvalue { <2 x float>, <2 x float> } %256, 1
  store <2 x float> %259, ptr %161, align 8
  %260 = invoke noundef nonnull align 4 dereferenceable(16) ptr @_ZN7Vector3IfE10normalizedEv(ptr noundef nonnull align 4 dereferenceable(16) %24)
          to label %261 unwind label %295

261:                                              ; preds = %257
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %15, ptr noundef nonnull align 4 dereferenceable(16) %260, i64 16, i1 false), !tbaa.struct !21
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %26) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %25) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %24) #7
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %27) #7
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %28) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %29) #7
  %262 = call noundef float @_ZNK7Vector3IfE10dotProductERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %16, ptr noundef nonnull align 4 dereferenceable(16) %19)
  store float %262, ptr %29, align 4, !tbaa !22
  %263 = invoke { <2 x float>, <2 x float> } @_ZNK7Vector3IfEmlERKf(ptr noundef nonnull align 4 dereferenceable(16) %19, ptr noundef nonnull align 4 dereferenceable(4) %29)
          to label %264 unwind label %297

264:                                              ; preds = %261
  %265 = extractvalue { <2 x float>, <2 x float> } %263, 0
  store <2 x float> %265, ptr %28, align 8
  %266 = extractvalue { <2 x float>, <2 x float> } %263, 1
  store <2 x float> %266, ptr %162, align 8
  %267 = invoke { <2 x float>, <2 x float> } @_ZNK7Vector3IfEmiERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %16, ptr noundef nonnull align 4 dereferenceable(16) %28)
          to label %268 unwind label %297

268:                                              ; preds = %264
  %269 = extractvalue { <2 x float>, <2 x float> } %267, 0
  store <2 x float> %269, ptr %27, align 8
  %270 = extractvalue { <2 x float>, <2 x float> } %267, 1
  store <2 x float> %270, ptr %163, align 8
  %271 = invoke noundef nonnull align 4 dereferenceable(16) ptr @_ZN7Vector3IfE10normalizedEv(ptr noundef nonnull align 4 dereferenceable(16) %27)
          to label %272 unwind label %297

272:                                              ; preds = %268
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %16, ptr noundef nonnull align 4 dereferenceable(16) %271, i64 16, i1 false), !tbaa.struct !21
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %29) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %28) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %27) #7
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %30) #7
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %31) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %32) #7
  %273 = call noundef float @_ZNK7Vector3IfE10dotProductERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %17, ptr noundef nonnull align 4 dereferenceable(16) %20)
  store float %273, ptr %32, align 4, !tbaa !22
  %274 = invoke { <2 x float>, <2 x float> } @_ZNK7Vector3IfEmlERKf(ptr noundef nonnull align 4 dereferenceable(16) %20, ptr noundef nonnull align 4 dereferenceable(4) %32)
          to label %275 unwind label %299

275:                                              ; preds = %272
  %276 = extractvalue { <2 x float>, <2 x float> } %274, 0
  store <2 x float> %276, ptr %31, align 8
  %277 = extractvalue { <2 x float>, <2 x float> } %274, 1
  store <2 x float> %277, ptr %164, align 8
  %278 = invoke { <2 x float>, <2 x float> } @_ZNK7Vector3IfEmiERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %17, ptr noundef nonnull align 4 dereferenceable(16) %31)
          to label %279 unwind label %299

279:                                              ; preds = %275
  %280 = extractvalue { <2 x float>, <2 x float> } %278, 0
  store <2 x float> %280, ptr %30, align 8
  %281 = extractvalue { <2 x float>, <2 x float> } %278, 1
  store <2 x float> %281, ptr %165, align 8
  %282 = invoke noundef nonnull align 4 dereferenceable(16) ptr @_ZN7Vector3IfE10normalizedEv(ptr noundef nonnull align 4 dereferenceable(16) %30)
          to label %283 unwind label %299

283:                                              ; preds = %279
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %17, ptr noundef nonnull align 4 dereferenceable(16) %282, i64 16, i1 false), !tbaa.struct !21
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %32) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %31) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %30) #7
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %33) #7
  %284 = invoke { <2 x float>, <2 x float> } @_ZNK7Vector3IfE12crossProductERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %18, ptr noundef nonnull align 4 dereferenceable(16) %15)
          to label %285 unwind label %301

285:                                              ; preds = %283
  %286 = extractvalue { <2 x float>, <2 x float> } %284, 0
  store <2 x float> %286, ptr %33, align 8
  %287 = extractvalue { <2 x float>, <2 x float> } %284, 1
  store <2 x float> %287, ptr %166, align 8
  %288 = call noundef float @_ZNK7Vector3IfE10dotProductERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %21, ptr noundef nonnull align 4 dereferenceable(16) %33)
  %289 = fcmp olt float %288, 0.000000e+00
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %33) #7
  br i1 %289, label %290, label %305

290:                                              ; preds = %285
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %34) #7
  store float -1.000000e+00, ptr %34, align 4, !tbaa !22
  %291 = invoke { <2 x float>, <2 x float> } @_ZNK7Vector3IfEmlERKf(ptr noundef nonnull align 4 dereferenceable(16) %15, ptr noundef nonnull align 4 dereferenceable(4) %34)
          to label %292 unwind label %303

292:                                              ; preds = %290
  %293 = extractvalue { <2 x float>, <2 x float> } %291, 0
  %294 = extractvalue { <2 x float>, <2 x float> } %291, 1
  store <2 x float> %293, ptr %15, align 8
  store <2 x float> %294, ptr %.sroa.519.0..sroa_idx, align 8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %34) #7
  br label %305

295:                                              ; preds = %257, %253, %233
  %296 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %26) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %25) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %24) #7
  br label %344

297:                                              ; preds = %268, %264, %261
  %298 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %29) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %28) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %27) #7
  br label %344

299:                                              ; preds = %279, %275, %272
  %300 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %32) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %31) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %30) #7
  br label %344

301:                                              ; preds = %283
  %302 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %33) #7
  br label %344

303:                                              ; preds = %290
  %304 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %34) #7
  br label %344

305:                                              ; preds = %292, %285
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %35) #7
  %306 = invoke { <2 x float>, <2 x float> } @_ZNK7Vector3IfE12crossProductERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %19, ptr noundef nonnull align 4 dereferenceable(16) %16)
          to label %307 unwind label %317

307:                                              ; preds = %305
  %308 = extractvalue { <2 x float>, <2 x float> } %306, 0
  store <2 x float> %308, ptr %35, align 8
  %309 = extractvalue { <2 x float>, <2 x float> } %306, 1
  store <2 x float> %309, ptr %167, align 8
  %310 = call noundef float @_ZNK7Vector3IfE10dotProductERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %22, ptr noundef nonnull align 4 dereferenceable(16) %35)
  %311 = fcmp olt float %310, 0.000000e+00
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %35) #7
  br i1 %311, label %312, label %321

312:                                              ; preds = %307
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %36) #7
  store float -1.000000e+00, ptr %36, align 4, !tbaa !22
  %313 = invoke { <2 x float>, <2 x float> } @_ZNK7Vector3IfEmlERKf(ptr noundef nonnull align 4 dereferenceable(16) %16, ptr noundef nonnull align 4 dereferenceable(4) %36)
          to label %314 unwind label %319

314:                                              ; preds = %312
  %315 = extractvalue { <2 x float>, <2 x float> } %313, 0
  %316 = extractvalue { <2 x float>, <2 x float> } %313, 1
  store <2 x float> %315, ptr %16, align 8
  store <2 x float> %316, ptr %.sroa.517.0..sroa_idx, align 8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %36) #7
  br label %321

317:                                              ; preds = %305
  %318 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %35) #7
  br label %344

319:                                              ; preds = %312
  %320 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %36) #7
  br label %344

321:                                              ; preds = %314, %307
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %37) #7
  %322 = invoke { <2 x float>, <2 x float> } @_ZNK7Vector3IfE12crossProductERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %20, ptr noundef nonnull align 4 dereferenceable(16) %17)
          to label %323 unwind label %333

323:                                              ; preds = %321
  %324 = extractvalue { <2 x float>, <2 x float> } %322, 0
  store <2 x float> %324, ptr %37, align 8
  %325 = extractvalue { <2 x float>, <2 x float> } %322, 1
  store <2 x float> %325, ptr %168, align 8
  %326 = call noundef float @_ZNK7Vector3IfE10dotProductERKS0_(ptr noundef nonnull align 4 dereferenceable(16) %23, ptr noundef nonnull align 4 dereferenceable(16) %37)
  %327 = fcmp olt float %326, 0.000000e+00
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %37) #7
  br i1 %327, label %328, label %337

328:                                              ; preds = %323
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %38) #7
  store float -1.000000e+00, ptr %38, align 4, !tbaa !22
  %329 = invoke { <2 x float>, <2 x float> } @_ZNK7Vector3IfEmlERKf(ptr noundef nonnull align 4 dereferenceable(16) %17, ptr noundef nonnull align 4 dereferenceable(4) %38)
          to label %330 unwind label %335

330:                                              ; preds = %328
  %331 = extractvalue { <2 x float>, <2 x float> } %329, 0
  %332 = extractvalue { <2 x float>, <2 x float> } %329, 1
  store <2 x float> %331, ptr %17, align 8
  store <2 x float> %332, ptr %.sroa.5.0..sroa_idx, align 8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %38) #7
  br label %337

333:                                              ; preds = %321
  %334 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %37) #7
  br label %344

335:                                              ; preds = %328
  %336 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %38) #7
  br label %344

337:                                              ; preds = %330, %323
  %338 = call noundef nonnull align 4 dereferenceable(16) ptr @_ZNSt6vectorI7Vector3IfESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %157, i64 noundef %236) #7
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(16) %338, ptr noundef nonnull align 8 dereferenceable(16) %15, i64 16, i1 false), !tbaa.struct !21
  %339 = call noundef nonnull align 4 dereferenceable(16) ptr @_ZNSt6vectorI7Vector3IfESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %157, i64 noundef %238) #7
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(16) %339, ptr noundef nonnull align 8 dereferenceable(16) %16, i64 16, i1 false), !tbaa.struct !21
  %340 = call noundef nonnull align 4 dereferenceable(16) ptr @_ZNSt6vectorI7Vector3IfESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %157, i64 noundef %240) #7
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(16) %340, ptr noundef nonnull align 8 dereferenceable(16) %17, i64 16, i1 false), !tbaa.struct !21
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %23) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %22) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %21) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %20) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %19) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %18) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %17) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %16) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %15) #7
  %indvars.iv.next174 = add nuw nsw i64 %indvars.iv173, 1
  %341 = load i32, ptr %45, align 8, !tbaa !19
  %342 = sext i32 %341 to i64
  %343 = icmp slt i64 %indvars.iv.next174, %342
  br i1 %343, label %233, label %._crit_edge167, !llvm.loop !29

344:                                              ; preds = %335, %333, %319, %317, %303, %301, %299, %297, %295
  %.pn = phi { ptr, i32 } [ %336, %335 ], [ %334, %333 ], [ %320, %319 ], [ %318, %317 ], [ %304, %303 ], [ %302, %301 ], [ %300, %299 ], [ %298, %297 ], [ %296, %295 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %23) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %22) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %21) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %20) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %19) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %18) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %17) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %16) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %15) #7
  br label %345

345:                                              ; preds = %344, %232, %152
  %.pn139.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn139.pn.pn.pn, %152 ], [ %.pn136.pn, %232 ], [ %.pn, %344 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %7) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %6) #7
  call void @_ZNSt6vectorIS_I7Vector3IfESaIS1_EESaIS3_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %4) #7
  br label %346

346:                                              ; preds = %345, %65
  %.pn139.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn139.pn.pn.pn.pn, %345 ], [ %66, %65 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %4) #7
  call void @_ZNSt6vectorIS_I7Vector3IfESaIS1_EESaIS3_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %2) #7
  br label %347

347:                                              ; preds = %346, %63
  %.pn139.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn139.pn.pn.pn.pn.pn, %346 ], [ %64, %63 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %2) #7
  resume { ptr, i32 } %.pn139.pn.pn.pn.pn.pn.pn
}

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

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

declare i32 @__gxx_personality_v0(...)

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

; Function Attrs: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare float @llvm.fmuladd.f32(float, float, float) #5

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local { <2 x float>, <2 x float> } @_ZNK7Vector3IfEmlERKf(ptr noundef nonnull align 4 dereferenceable(16), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #3 align 2

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

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

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare <2 x float> @llvm.fmuladd.v2f32(<2 x float>, <2 x float>, <2 x float>) #6

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !7, i64 0}
!6 = !{!"_ZTS4Mesh", !7, i64 0, !10, i64 8, !10, i64 32, !10, i64 56, !10, i64 80, !10, i64 104, !7, i64 128, !10, i64 136, !15, i64 160, !15, i64 184, !15, i64 208}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!"_ZTSSt6vectorI7Vector3IfESaIS1_EE", !11, i64 0}
!11 = !{!"_ZTSSt12_Vector_baseI7Vector3IfESaIS1_EE", !12, i64 0}
!12 = !{!"_ZTSNSt12_Vector_baseI7Vector3IfESaIS1_EE12_Vector_implE", !13, i64 0}
!13 = !{!"_ZTSNSt12_Vector_baseI7Vector3IfESaIS1_EE17_Vector_impl_dataE", !14, i64 0, !14, i64 8, !14, i64 16}
!14 = !{!"any pointer", !8, i64 0}
!15 = !{!"_ZTSSt6vectorI7Vector3IiESaIS1_EE", !16, i64 0}
!16 = !{!"_ZTSSt12_Vector_baseI7Vector3IiESaIS1_EE", !17, i64 0}
!17 = !{!"_ZTSNSt12_Vector_baseI7Vector3IiESaIS1_EE12_Vector_implE", !18, i64 0}
!18 = !{!"_ZTSNSt12_Vector_baseI7Vector3IiESaIS1_EE17_Vector_impl_dataE", !14, i64 0, !14, i64 8, !14, i64 16}
!19 = !{!6, !7, i64 128}
!20 = !{!8, !8, i64 0}
!21 = !{i64 0, i64 12, !20, i64 12, i64 4, !22}
!22 = !{!23, !23, i64 0}
!23 = !{!"float", !8, i64 0}
!24 = distinct !{!24, !25}
!25 = !{!"llvm.loop.mustprogress"}
!26 = distinct !{!26, !25}
!27 = distinct !{!27, !25}
!28 = distinct !{!28, !25}
!29 = distinct !{!29, !25}


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