; LLVM IR from vectozavr/3dzavr :: engine/objects/Camera.ll (ZN6Camera7projectERK8LineMesh)

; 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.Matrix4x4 = type { %"struct.std::array.24" }
%"struct.std::array.24" = type { [4 x %"struct.std::array.25"] }
%"struct.std::array.25" = type { [4 x double] }
%"class.std::shared_ptr.26" = type { %"class.std::__shared_ptr.27" }
%"class.std::__shared_ptr.27" = type { ptr, %"class.std::__shared_count" }
%"class.std::__shared_count" = type { ptr }
%struct.Bounds = type { %class.Vec3D, %class.Vec3D }
%class.Vec3D = type { %"struct.std::array.37" }
%"struct.std::array.37" = type { [3 x double] }
%"class.std::vector.43" = type { %"struct.std::_Vector_base.44" }
%"struct.std::_Vector_base.44" = type { %"struct.std::_Vector_base<Line, std::allocator<Line>>::_Vector_impl" }
%"struct.std::_Vector_base<Line, std::allocator<Line>>::_Vector_impl" = type { %"struct.std::_Vector_base<Line, std::allocator<Line>>::_Vector_impl_data" }
%"struct.std::_Vector_base<Line, std::allocator<Line>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%"class.std::allocator" = type { i8 }
%"class.__gnu_cxx::__normal_iterator" = type { ptr }
%"class.__gnu_cxx::__normal_iterator.48" = type { ptr }
%class.Line = type { %class.Vec4D, %class.Vec4D }
%class.Vec4D = type { %"struct.std::array.25" }
%class.Camera = type { %class.Object, %"class.std::vector.14", double, double, double, i8, double, %"class.std::vector.19", %"class.std::vector.19", %class.Matrix4x4, %"class.std::shared_ptr.26" }
%class.Object = type { ptr, %"class.std::enable_shared_from_this", %class.ObjectTag, ptr, double, double, %"class.std::map", %"class.std::vector.9" }
%"class.std::enable_shared_from_this" = type { %"class.std::weak_ptr" }
%"class.std::weak_ptr" = type { %"class.std::__weak_ptr" }
%"class.std::__weak_ptr" = type { ptr, %"class.std::__weak_count" }
%"class.std::__weak_count" = type { ptr }
%class.ObjectTag = type { %"class.std::__cxx11::basic_string" }
%"class.std::map" = type { %"class.std::_Rb_tree" }
%"class.std::_Rb_tree" = type { %"struct.std::_Rb_tree<ObjectTag, std::pair<const ObjectTag, std::shared_ptr<Object>>, std::_Select1st<std::pair<const ObjectTag, std::shared_ptr<Object>>>, std::less<ObjectTag>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<ObjectTag, std::pair<const ObjectTag, std::shared_ptr<Object>>, std::_Select1st<std::pair<const ObjectTag, std::shared_ptr<Object>>>, std::less<ObjectTag>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"struct.std::_Rb_tree_header" = type { %"struct.std::_Rb_tree_node_base", i64 }
%"struct.std::_Rb_tree_node_base" = type { i32, ptr, ptr, ptr }
%"class.std::vector.9" = type { %"struct.std::_Vector_base.10" }
%"struct.std::_Vector_base.10" = type { %"struct.std::_Vector_base<std::shared_ptr<Component>, std::allocator<std::shared_ptr<Component>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::shared_ptr<Component>, std::allocator<std::shared_ptr<Component>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::shared_ptr<Component>, std::allocator<std::shared_ptr<Component>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::shared_ptr<Component>, std::allocator<std::shared_ptr<Component>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.14" = type { %"struct.std::_Vector_base.15" }
%"struct.std::_Vector_base.15" = type { %"struct.std::_Vector_base<Plane, std::allocator<Plane>>::_Vector_impl" }
%"struct.std::_Vector_base<Plane, std::allocator<Plane>>::_Vector_impl" = type { %"struct.std::_Vector_base<Plane, std::allocator<Plane>>::_Vector_impl_data" }
%"struct.std::_Vector_base<Plane, std::allocator<Plane>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.19" = type { %"struct.std::_Vector_base.20" }
%"struct.std::_Vector_base.20" = type { %"struct.std::_Vector_base<std::pair<Vec3D, Vec3D>, std::allocator<std::pair<Vec3D, Vec3D>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::pair<Vec3D, Vec3D>, std::allocator<std::pair<Vec3D, Vec3D>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::pair<Vec3D, Vec3D>, std::allocator<std::pair<Vec3D, Vec3D>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::pair<Vec3D, Vec3D>, std::allocator<std::pair<Vec3D, Vec3D>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%class.Plane = type { %class.Vec3D, double }

@.str.19 = external hidden unnamed_addr constant [94 x i8], align 1

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

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

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

declare i32 @__gxx_personality_v0(...)

; 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 void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32)) unnamed_addr #1 align 2

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNK15TransformMatrix12fullInvModelEv(ptr dead_on_unwind noalias writable sret(%class.Matrix4x4) align 8, ptr noundef nonnull align 8 dereferenceable(192)) #2 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZNK9Matrix4x4mlERKS_(ptr dead_on_unwind noalias writable sret(%class.Matrix4x4) align 8, ptr noundef nonnull align 8 dereferenceable(128), ptr noundef nonnull align 8 dereferenceable(128)) #4 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNK9Component12getComponentI15TransformMatrixEESt10shared_ptrIT_Ev(ptr dead_on_unwind noalias writable sret(%"class.std::shared_ptr.26") align 8, ptr noundef nonnull align 8 dereferenceable(16)) #2 align 2

declare void @_ZNK15TransformMatrix9fullModelEv(ptr dead_on_unwind writable sret(%class.Matrix4x4) align 8, ptr noundef nonnull align 8 dereferenceable(192)) #5

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZNK6BoundsmlERK9Matrix4x4(ptr dead_on_unwind noalias writable sret(%struct.Bounds) align 8, ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 8 dereferenceable(128)) #4 align 2

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZN9__gnu_cxxneIP5PlaneSt6vectorIS1_SaIS1_EEEEbRKNS_17__normal_iteratorIT_T0_EESB_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) #6

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef double @_ZSt3absd(double noundef) #6

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare double @llvm.fmuladd.f64(double, double, double) #7

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

declare noundef double @_ZNK5Plane8distanceERK5Vec3D(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(24)) #5

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZNK5Vec4D1wEv(ptr noundef nonnull align 8 dereferenceable(32)) #6 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) #8

declare void @_ZN3Log3logERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(32)) #5

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN6Camera7projectERK8LineMesh(ptr dead_on_unwind noalias writable sret(%"class.std::vector.43") align 8 %0, ptr noundef nonnull align 8 dereferenceable(408) %1, ptr noundef nonnull align 8 dereferenceable(97) %2) #2 align 2 personality ptr @__gxx_personality_v0 {
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca i1, align 1
  %8 = alloca %"class.std::__cxx11::basic_string", align 8
  %9 = alloca %"class.std::allocator", align 1
  %10 = alloca ptr, align 8
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca %class.Matrix4x4, align 8
  %14 = alloca %class.Matrix4x4, align 8
  %15 = alloca %class.Matrix4x4, align 8
  %16 = alloca %"class.std::shared_ptr.26", align 8
  %17 = alloca %struct.Bounds, align 8
  %18 = alloca ptr, align 8
  %19 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %20 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %21 = alloca ptr, align 8
  %22 = alloca double, align 8
  %23 = alloca ptr, align 8
  %24 = alloca %"class.__gnu_cxx::__normal_iterator.48", align 8
  %25 = alloca %"class.__gnu_cxx::__normal_iterator.48", align 8
  %26 = alloca ptr, align 8
  %27 = alloca %class.Line, align 8
  %28 = alloca i8, align 1
  %29 = alloca %class.Line, align 8
  %30 = alloca ptr, align 8
  %31 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %32 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %33 = alloca ptr, align 8
  %34 = alloca %class.Line, align 8
  %35 = alloca %class.Line, align 8
  %36 = alloca %class.Line, align 8
  %37 = alloca %class.Vec4D, align 8
  %38 = alloca %class.Vec4D, align 8
  %39 = alloca %class.Vec4D, align 8
  %40 = alloca %class.Vec4D, align 8
  %41 = alloca %class.Vec4D, align 8
  %42 = alloca %class.Vec4D, align 8
  store ptr %0, ptr %4, align 8
  store ptr %1, ptr %5, align 8, !tbaa !5
  store ptr %2, ptr %6, align 8, !tbaa !5
  %43 = load ptr, ptr %5, align 8
  store i1 false, ptr %7, align 1
  call void @llvm.memset.p0.i64(ptr align 8 %0, i8 0, i64 24, i1 false)
  call void @_ZNSt6vectorI4LineSaIS0_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %0) #9
  %44 = getelementptr inbounds %class.Camera, ptr %43, i32 0, i32 5
  %45 = load i8, ptr %44, align 8, !tbaa !9, !range !47, !noundef !48
  %46 = trunc i8 %45 to i1
  br i1 %46, label %59, label %47

47:                                               ; preds = %3
  call void @llvm.lifetime.start.p0(i64 32, ptr %8) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %9) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %9) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %8, ptr noundef @.str.19, ptr noundef nonnull align 1 dereferenceable(1) %9)
          to label %48 unwind label %50

48:                                               ; preds = %47
  invoke void @_ZN3Log3logERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(32) %8)
          to label %49 unwind label %54

49:                                               ; preds = %48
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %8) #9
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %9) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %9) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %8) #9
  store i1 true, ptr %7, align 1
  store i32 1, ptr %12, align 4
  br label %294

50:                                               ; preds = %47
  %51 = landingpad { ptr, i32 }
          cleanup
  %52 = extractvalue { ptr, i32 } %51, 0
  store ptr %52, ptr %10, align 8
  %53 = extractvalue { ptr, i32 } %51, 1
  store i32 %53, ptr %11, align 4
  br label %58

54:                                               ; preds = %48
  %55 = landingpad { ptr, i32 }
          cleanup
  %56 = extractvalue { ptr, i32 } %55, 0
  store ptr %56, ptr %10, align 8
  %57 = extractvalue { ptr, i32 } %55, 1
  store i32 %57, ptr %11, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %8) #9
  br label %58

58:                                               ; preds = %54, %50
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %9) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %9) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %8) #9
  br label %298

59:                                               ; preds = %3
  %60 = load ptr, ptr %6, align 8, !tbaa !5
  %61 = invoke noundef zeroext i1 @_ZNK8LineMesh9isVisibleEv(ptr noundef nonnull align 8 dereferenceable(97) %60)
          to label %62 unwind label %64

62:                                               ; preds = %59
  br i1 %61, label %68, label %63

63:                                               ; preds = %62
  store i1 true, ptr %7, align 1
  store i32 1, ptr %12, align 4
  br label %294

64:                                               ; preds = %59
  %65 = landingpad { ptr, i32 }
          cleanup
  %66 = extractvalue { ptr, i32 } %65, 0
  store ptr %66, ptr %10, align 8
  %67 = extractvalue { ptr, i32 } %65, 1
  store i32 %67, ptr %11, align 4
  br label %298

68:                                               ; preds = %62
  call void @llvm.lifetime.start.p0(i64 128, ptr %13) #9
  call void @llvm.lifetime.start.p0(i64 128, ptr %14) #9
  %69 = getelementptr inbounds %class.Camera, ptr %43, i32 0, i32 10
  %70 = call noundef ptr @_ZNKSt19__shared_ptr_accessI15TransformMatrixLN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %69) #9
  invoke void @_ZNK15TransformMatrix12fullInvModelEv(ptr dead_on_unwind writable sret(%class.Matrix4x4) align 8 %14, ptr noundef nonnull align 8 dereferenceable(192) %70)
          to label %71 unwind label %91

71:                                               ; preds = %68
  call void @llvm.lifetime.start.p0(i64 128, ptr %15) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr %16) #9
  %72 = load ptr, ptr %6, align 8, !tbaa !5
  invoke void @_ZNK9Component12getComponentI15TransformMatrixEESt10shared_ptrIT_Ev(ptr dead_on_unwind writable sret(%"class.std::shared_ptr.26") align 8 %16, ptr noundef nonnull align 8 dereferenceable(16) %72)
          to label %73 unwind label %95

73:                                               ; preds = %71
  %74 = call noundef ptr @_ZNKSt19__shared_ptr_accessI15TransformMatrixLN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %16) #9
  invoke void @_ZNK15TransformMatrix9fullModelEv(ptr dead_on_unwind writable sret(%class.Matrix4x4) align 8 %15, ptr noundef nonnull align 8 dereferenceable(192) %74)
          to label %75 unwind label %99

75:                                               ; preds = %73
  invoke void @_ZNK9Matrix4x4mlERKS_(ptr dead_on_unwind writable sret(%class.Matrix4x4) align 8 %13, ptr noundef nonnull align 8 dereferenceable(128) %14, ptr noundef nonnull align 8 dereferenceable(128) %15)
          to label %76 unwind label %99

76:                                               ; preds = %75
  call void @_ZNSt12__shared_ptrI15TransformMatrixLN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %16) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %16) #9
  call void @llvm.lifetime.end.p0(i64 128, ptr %15) #9
  call void @llvm.lifetime.end.p0(i64 128, ptr %14) #9
  call void @llvm.lifetime.start.p0(i64 48, ptr %17) #9
  %77 = load ptr, ptr %6, align 8, !tbaa !5
  %78 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZNK8LineMesh6boundsEv(ptr noundef nonnull align 8 dereferenceable(97) %77)
          to label %79 unwind label %105

79:                                               ; preds = %76
  invoke void @_ZNK6BoundsmlERK9Matrix4x4(ptr dead_on_unwind writable sret(%struct.Bounds) align 8 %17, ptr noundef nonnull align 8 dereferenceable(48) %78, ptr noundef nonnull align 8 dereferenceable(128) %13)
          to label %80 unwind label %105

80:                                               ; preds = %79
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #9
  %81 = getelementptr inbounds %class.Camera, ptr %43, i32 0, i32 1
  store ptr %81, ptr %18, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #9
  %82 = load ptr, ptr %18, align 8, !tbaa !5
  %83 = call ptr @_ZNSt6vectorI5PlaneSaIS0_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %82) #9
  %84 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %19, i32 0, i32 0
  store ptr %83, ptr %84, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #9
  %85 = load ptr, ptr %18, align 8, !tbaa !5
  %86 = call ptr @_ZNSt6vectorI5PlaneSaIS0_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %85) #9
  %87 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %20, i32 0, i32 0
  store ptr %86, ptr %87, align 8
  br label %88

88:                                               ; preds = %166, %80
  %89 = call noundef zeroext i1 @_ZN9__gnu_cxxneIP5PlaneSt6vectorIS1_SaIS1_EEEEbRKNS_17__normal_iteratorIT_T0_EESB_(ptr noundef nonnull align 8 dereferenceable(8) %19, ptr noundef nonnull align 8 dereferenceable(8) %20) #9
  br i1 %89, label %109, label %90

90:                                               ; preds = %88
  store i32 2, ptr %12, align 4
  br label %168

91:                                               ; preds = %68
  %92 = landingpad { ptr, i32 }
          cleanup
  %93 = extractvalue { ptr, i32 } %92, 0
  store ptr %93, ptr %10, align 8
  %94 = extractvalue { ptr, i32 } %92, 1
  store i32 %94, ptr %11, align 4
  br label %104

95:                                               ; preds = %71
  %96 = landingpad { ptr, i32 }
          cleanup
  %97 = extractvalue { ptr, i32 } %96, 0
  store ptr %97, ptr %10, align 8
  %98 = extractvalue { ptr, i32 } %96, 1
  store i32 %98, ptr %11, align 4
  br label %103

99:                                               ; preds = %75, %73
  %100 = landingpad { ptr, i32 }
          cleanup
  %101 = extractvalue { ptr, i32 } %100, 0
  store ptr %101, ptr %10, align 8
  %102 = extractvalue { ptr, i32 } %100, 1
  store i32 %102, ptr %11, align 4
  call void @_ZNSt12__shared_ptrI15TransformMatrixLN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %16) #9
  br label %103

103:                                              ; preds = %99, %95
  call void @llvm.lifetime.end.p0(i64 16, ptr %16) #9
  call void @llvm.lifetime.end.p0(i64 128, ptr %15) #9
  br label %104

104:                                              ; preds = %103, %91
  call void @llvm.lifetime.end.p0(i64 128, ptr %14) #9
  br label %293

105:                                              ; preds = %79, %76
  %106 = landingpad { ptr, i32 }
          cleanup
  %107 = extractvalue { ptr, i32 } %106, 0
  store ptr %107, ptr %10, align 8
  %108 = extractvalue { ptr, i32 } %106, 1
  store i32 %108, ptr %11, align 4
  br label %292

109:                                              ; preds = %88
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #9
  %110 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNK9__gnu_cxx17__normal_iteratorIP5PlaneSt6vectorIS1_SaIS1_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %19) #9
  store ptr %110, ptr %21, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #9
  %111 = getelementptr inbounds %struct.Bounds, ptr %17, i32 0, i32 1
  %112 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK5Vec3D1xEv(ptr noundef nonnull align 8 dereferenceable(24) %111)
          to label %113 unwind label %155

113:                                              ; preds = %109
  %114 = load double, ptr %112, align 8, !tbaa !49
  %115 = load ptr, ptr %21, align 8, !tbaa !5
  %116 = getelementptr inbounds %class.Plane, ptr %115, i32 0, i32 0
  %117 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK5Vec3D1xEv(ptr noundef nonnull align 8 dereferenceable(24) %116)
          to label %118 unwind label %155

118:                                              ; preds = %113
  %119 = load double, ptr %117, align 8, !tbaa !49
  %120 = invoke noundef double @_ZSt3absd(double noundef %119)
          to label %121 unwind label %155

121:                                              ; preds = %118
  %122 = getelementptr inbounds %struct.Bounds, ptr %17, i32 0, i32 1
  %123 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK5Vec3D1yEv(ptr noundef nonnull align 8 dereferenceable(24) %122)
          to label %124 unwind label %155

124:                                              ; preds = %121
  %125 = load double, ptr %123, align 8, !tbaa !49
  %126 = load ptr, ptr %21, align 8, !tbaa !5
  %127 = getelementptr inbounds %class.Plane, ptr %126, i32 0, i32 0
  %128 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK5Vec3D1yEv(ptr noundef nonnull align 8 dereferenceable(24) %127)
          to label %129 unwind label %155

129:                                              ; preds = %124
  %130 = load double, ptr %128, align 8, !tbaa !49
  %131 = invoke noundef double @_ZSt3absd(double noundef %130)
          to label %132 unwind label %155

132:                                              ; preds = %129
  %133 = fmul double %125, %131
  %134 = call double @llvm.fmuladd.f64(double %114, double %120, double %133)
  %135 = getelementptr inbounds %struct.Bounds, ptr %17, i32 0, i32 1
  %136 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK5Vec3D1zEv(ptr noundef nonnull align 8 dereferenceable(24) %135)
          to label %137 unwind label %155

137:                                              ; preds = %132
  %138 = load double, ptr %136, align 8, !tbaa !49
  %139 = load ptr, ptr %21, align 8, !tbaa !5
  %140 = getelementptr inbounds %class.Plane, ptr %139, i32 0, i32 0
  %141 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK5Vec3D1zEv(ptr noundef nonnull align 8 dereferenceable(24) %140)
          to label %142 unwind label %155

142:                                              ; preds = %137
  %143 = load double, ptr %141, align 8, !tbaa !49
  %144 = invoke noundef double @_ZSt3absd(double noundef %143)
          to label %145 unwind label %155

145:                                              ; preds = %142
  %146 = call double @llvm.fmuladd.f64(double %138, double %144, double %134)
  store double %146, ptr %22, align 8, !tbaa !49
  %147 = load ptr, ptr %21, align 8, !tbaa !5
  %148 = getelementptr inbounds %struct.Bounds, ptr %17, i32 0, i32 0
  %149 = invoke noundef double @_ZNK5Plane8distanceERK5Vec3D(ptr noundef nonnull align 8 dereferenceable(32) %147, ptr noundef nonnull align 8 dereferenceable(24) %148)
          to label %150 unwind label %155

150:                                              ; preds = %145
  %151 = load double, ptr %22, align 8, !tbaa !49
  %152 = fadd double %149, %151
  %153 = fcmp olt double %152, 0.000000e+00
  br i1 %153, label %154, label %159

154:                                              ; preds = %150
  store i1 true, ptr %7, align 1
  store i32 1, ptr %12, align 4
  br label %160

155:                                              ; preds = %145, %142, %137, %132, %129, %124, %121, %118, %113, %109
  %156 = landingpad { ptr, i32 }
          cleanup
  %157 = extractvalue { ptr, i32 } %156, 0
  store ptr %157, ptr %10, align 8
  %158 = extractvalue { ptr, i32 } %156, 1
  store i32 %158, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #9
  br label %292

159:                                              ; preds = %150
  store i32 0, ptr %12, align 4
  br label %160

160:                                              ; preds = %159, %154
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #9
  %161 = load i32, ptr %12, align 4
  switch i32 %161, label %163 [
    i32 0, label %162
  ]

162:                                              ; preds = %160
  store i32 0, ptr %12, align 4
  br label %163

163:                                              ; preds = %162, %160
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #9
  %164 = load i32, ptr %12, align 4
  switch i32 %164, label %168 [
    i32 0, label %165
  ]

165:                                              ; preds = %163
  br label %166

166:                                              ; preds = %165
  %167 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIP5PlaneSt6vectorIS1_SaIS1_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %19) #9
  br label %88

168:                                              ; preds = %163, %90
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #9
  %169 = load i32, ptr %12, align 4
  switch i32 %169, label %291 [
    i32 2, label %170
  ]

170:                                              ; preds = %168
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #9
  %171 = load ptr, ptr %6, align 8, !tbaa !5
  %172 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZNK8LineMesh5linesEv(ptr noundef nonnull align 8 dereferenceable(97) %171)
          to label %173 unwind label %183

173:                                              ; preds = %170
  store ptr %172, ptr %23, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #9
  %174 = load ptr, ptr %23, align 8, !tbaa !5
  %175 = call ptr @_ZNKSt6vectorI4LineSaIS0_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %174) #9
  %176 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.48", ptr %24, i32 0, i32 0
  store ptr %175, ptr %176, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #9
  %177 = load ptr, ptr %23, align 8, !tbaa !5
  %178 = call ptr @_ZNKSt6vectorI4LineSaIS0_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %177) #9
  %179 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.48", ptr %25, i32 0, i32 0
  store ptr %178, ptr %179, align 8
  br label %180

180:                                              ; preds = %256, %173
  %181 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPK4LineSt6vectorIS1_SaIS1_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %24, ptr noundef nonnull align 8 dereferenceable(8) %25) #9
  br i1 %181, label %187, label %182

182:                                              ; preds = %180
  store i32 4, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #9
  br label %290

183:                                              ; preds = %170
  %184 = landingpad { ptr, i32 }
          cleanup
  %185 = extractvalue { ptr, i32 } %184, 0
  store ptr %185, ptr %10, align 8
  %186 = extractvalue { ptr, i32 } %184, 1
  store i32 %186, ptr %11, align 4
  br label %289

187:                                              ; preds = %180
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #9
  %188 = call noundef nonnull align 8 dereferenceable(64) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPK4LineSt6vectorIS1_SaIS1_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %24) #9
  store ptr %188, ptr %26, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 64, ptr %27) #9
  %189 = load ptr, ptr %26, align 8, !tbaa !5
  invoke void @_ZNK4LinemlERK9Matrix4x4(ptr dead_on_unwind writable sret(%class.Line) align 8 %27, ptr noundef nonnull align 8 dereferenceable(64) %189, ptr noundef nonnull align 8 dereferenceable(128) %13)
          to label %190 unwind label %202

190:                                              ; preds = %187
  call void @llvm.lifetime.start.p0(i64 1, ptr %28) #9
  store i8 0, ptr %28, align 1, !tbaa !50
  call void @llvm.lifetime.start.p0(i64 64, ptr %29) #9
  invoke void @_ZN4LineC2ERKS_(ptr noundef nonnull align 8 dereferenceable(64) %29, ptr noundef nonnull align 8 dereferenceable(64) %27)
          to label %191 unwind label %206

191:                                              ; preds = %190
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #9
  %192 = getelementptr inbounds %class.Camera, ptr %43, i32 0, i32 1
  store ptr %192, ptr %30, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #9
  %193 = load ptr, ptr %30, align 8, !tbaa !5
  %194 = call ptr @_ZNSt6vectorI5PlaneSaIS0_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %193) #9
  %195 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %31, i32 0, i32 0
  store ptr %194, ptr %195, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #9
  %196 = load ptr, ptr %30, align 8, !tbaa !5
  %197 = call ptr @_ZNSt6vectorI5PlaneSaIS0_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %196) #9
  %198 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %32, i32 0, i32 0
  store ptr %197, ptr %198, align 8
  br label %199

199:                                              ; preds = %225, %191
  %200 = call noundef zeroext i1 @_ZN9__gnu_cxxneIP5PlaneSt6vectorIS1_SaIS1_EEEEbRKNS_17__normal_iteratorIT_T0_EESB_(ptr noundef nonnull align 8 dereferenceable(8) %31, ptr noundef nonnull align 8 dereferenceable(8) %32) #9
  br i1 %200, label %210, label %201

201:                                              ; preds = %199
  store i32 6, ptr %12, align 4
  br label %227

202:                                              ; preds = %187
  %203 = landingpad { ptr, i32 }
          cleanup
  %204 = extractvalue { ptr, i32 } %203, 0
  store ptr %204, ptr %10, align 8
  %205 = extractvalue { ptr, i32 } %203, 1
  store i32 %205, ptr %11, align 4
  br label %288

206:                                              ; preds = %190
  %207 = landingpad { ptr, i32 }
          cleanup
  %208 = extractvalue { ptr, i32 } %207, 0
  store ptr %208, ptr %10, align 8
  %209 = extractvalue { ptr, i32 } %207, 1
  store i32 %209, ptr %11, align 4
  br label %287

210:                                              ; preds = %199
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #9
  %211 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNK9__gnu_cxx17__normal_iteratorIP5PlaneSt6vectorIS1_SaIS1_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %31) #9
  store ptr %211, ptr %33, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 64, ptr %34) #9
  %212 = load ptr, ptr %33, align 8, !tbaa !5
  invoke void @_ZNK5Plane4clipERK4LineRb(ptr dead_on_unwind writable sret(%class.Line) align 8 %34, ptr noundef nonnull align 8 dereferenceable(32) %212, ptr noundef nonnull align 8 dereferenceable(64) %29, ptr noundef nonnull align 1 dereferenceable(1) %28)
          to label %213 unwind label %217

213:                                              ; preds = %210
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %29, ptr align 8 %34, i64 64, i1 false), !tbaa.struct !51
  call void @llvm.lifetime.end.p0(i64 64, ptr %34) #9
  %214 = load i8, ptr %28, align 1, !tbaa !50, !range !47, !noundef !48
  %215 = trunc i8 %214 to i1
  br i1 %215, label %216, label %221

216:                                              ; preds = %213
  store i32 6, ptr %12, align 4
  br label %222

217:                                              ; preds = %210
  %218 = landingpad { ptr, i32 }
          cleanup
  %219 = extractvalue { ptr, i32 } %218, 0
  store ptr %219, ptr %10, align 8
  %220 = extractvalue { ptr, i32 } %218, 1
  store i32 %220, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 64, ptr %34) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #9
  br label %287

221:                                              ; preds = %213
  store i32 0, ptr %12, align 4
  br label %222

222:                                              ; preds = %221, %216
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #9
  %223 = load i32, ptr %12, align 4
  switch i32 %223, label %227 [
    i32 0, label %224
  ]

224:                                              ; preds = %222
  br label %225

225:                                              ; preds = %224
  %226 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIP5PlaneSt6vectorIS1_SaIS1_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %31) #9
  br label %199

227:                                              ; preds = %222, %201
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #9
  br label %228

228:                                              ; preds = %227
  %229 = load i8, ptr %28, align 1, !tbaa !50, !range !47, !noundef !48
  %230 = trunc i8 %229 to i1
  br i1 %230, label %231, label %232

231:                                              ; preds = %228
  store i32 5, ptr %12, align 4
  br label %250

232:                                              ; preds = %228
  call void @llvm.lifetime.start.p0(i64 64, ptr %35) #9
  %233 = getelementptr inbounds %class.Camera, ptr %43, i32 0, i32 9
  invoke void @_ZNK4LinemlERK9Matrix4x4(ptr dead_on_unwind writable sret(%class.Line) align 8 %35, ptr noundef nonnull align 8 dereferenceable(64) %29, ptr noundef nonnull align 8 dereferenceable(128) %233)
          to label %234 unwind label %258

234:                                              ; preds = %232
  call void @llvm.lifetime.start.p0(i64 64, ptr %36) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %37) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %38) #9
  invoke void @_ZNK4Line2p1Ev(ptr dead_on_unwind writable sret(%class.Vec4D) align 8 %38, ptr noundef nonnull align 8 dereferenceable(64) %35)
          to label %235 unwind label %262

235:                                              ; preds = %234
  call void @llvm.lifetime.start.p0(i64 32, ptr %39) #9
  invoke void @_ZNK4Line2p1Ev(ptr dead_on_unwind writable sret(%class.Vec4D) align 8 %39, ptr noundef nonnull align 8 dereferenceable(64) %35)
          to label %236 unwind label %266

236:                                              ; preds = %235
  %237 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK5Vec4D1wEv(ptr noundef nonnull align 8 dereferenceable(32) %39)
          to label %238 unwind label %266

238:                                              ; preds = %236
  %239 = load double, ptr %237, align 8, !tbaa !49
  invoke void @_ZNK5Vec4DdvEd(ptr dead_on_unwind writable sret(%class.Vec4D) align 8 %37, ptr noundef nonnull align 8 dereferenceable(32) %38, double noundef %239)
          to label %240 unwind label %266

240:                                              ; preds = %238
  call void @llvm.lifetime.start.p0(i64 32, ptr %40) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %41) #9
  invoke void @_ZNK4Line2p2Ev(ptr dead_on_unwind writable sret(%class.Vec4D) align 8 %41, ptr noundef nonnull align 8 dereferenceable(64) %35)
          to label %241 unwind label %270

241:                                              ; preds = %240
  call void @llvm.lifetime.start.p0(i64 32, ptr %42) #9
  invoke void @_ZNK4Line2p2Ev(ptr dead_on_unwind writable sret(%class.Vec4D) align 8 %42, ptr noundef nonnull align 8 dereferenceable(64) %35)
          to label %242 unwind label %274

242:                                              ; preds = %241
  %243 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK5Vec4D1wEv(ptr noundef nonnull align 8 dereferenceable(32) %42)
          to label %244 unwind label %274

244:                                              ; preds = %242
  %245 = load double, ptr %243, align 8, !tbaa !49
  invoke void @_ZNK5Vec4DdvEd(ptr dead_on_unwind writable sret(%class.Vec4D) align 8 %40, ptr noundef nonnull align 8 dereferenceable(32) %41, double noundef %245)
          to label %246 unwind label %274

246:                                              ; preds = %244
  invoke void @_ZN4LineC2ERK5Vec4DS2_(ptr noundef nonnull align 8 dereferenceable(64) %36, ptr noundef nonnull align 8 dereferenceable(32) %37, ptr noundef nonnull align 8 dereferenceable(32) %40)
          to label %247 unwind label %274

247:                                              ; preds = %246
  call void @llvm.lifetime.end.p0(i64 32, ptr %42) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %41) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %40) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %39) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %38) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %37) #9
  %248 = invoke noundef nonnull align 8 dereferenceable(64) ptr @_ZNSt6vectorI4LineSaIS0_EE12emplace_backIJRS0_EEES4_DpOT_(ptr noundef nonnull align 8 dereferenceable(24) %0, ptr noundef nonnull align 8 dereferenceable(64) %36)
          to label %249 unwind label %281

249:                                              ; preds = %247
  call void @llvm.lifetime.end.p0(i64 64, ptr %36) #9
  call void @llvm.lifetime.end.p0(i64 64, ptr %35) #9
  store i32 0, ptr %12, align 4
  br label %250

250:                                              ; preds = %249, %231
  call void @llvm.lifetime.end.p0(i64 64, ptr %29) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %28) #9
  call void @llvm.lifetime.end.p0(i64 64, ptr %27) #9
  %251 = load i32, ptr %12, align 4
  switch i32 %251, label %253 [
    i32 0, label %252
  ]

252:                                              ; preds = %250
  store i32 0, ptr %12, align 4
  br label %253

253:                                              ; preds = %252, %250
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #9
  %254 = load i32, ptr %12, align 4
  switch i32 %254, label %304 [
    i32 0, label %255
    i32 5, label %256
  ]

255:                                              ; preds = %253
  br label %256

256:                                              ; preds = %255, %253
  %257 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPK4LineSt6vectorIS1_SaIS1_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %24) #9
  br label %180

258:                                              ; preds = %232
  %259 = landingpad { ptr, i32 }
          cleanup
  %260 = extractvalue { ptr, i32 } %259, 0
  store ptr %260, ptr %10, align 8
  %261 = extractvalue { ptr, i32 } %259, 1
  store i32 %261, ptr %11, align 4
  br label %286

262:                                              ; preds = %234
  %263 = landingpad { ptr, i32 }
          cleanup
  %264 = extractvalue { ptr, i32 } %263, 0
  store ptr %264, ptr %10, align 8
  %265 = extractvalue { ptr, i32 } %263, 1
  store i32 %265, ptr %11, align 4
  br label %280

266:                                              ; preds = %238, %236, %235
  %267 = landingpad { ptr, i32 }
          cleanup
  %268 = extractvalue { ptr, i32 } %267, 0
  store ptr %268, ptr %10, align 8
  %269 = extractvalue { ptr, i32 } %267, 1
  store i32 %269, ptr %11, align 4
  br label %279

270:                                              ; preds = %240
  %271 = landingpad { ptr, i32 }
          cleanup
  %272 = extractvalue { ptr, i32 } %271, 0
  store ptr %272, ptr %10, align 8
  %273 = extractvalue { ptr, i32 } %271, 1
  store i32 %273, ptr %11, align 4
  br label %278

274:                                              ; preds = %246, %244, %242, %241
  %275 = landingpad { ptr, i32 }
          cleanup
  %276 = extractvalue { ptr, i32 } %275, 0
  store ptr %276, ptr %10, align 8
  %277 = extractvalue { ptr, i32 } %275, 1
  store i32 %277, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %42) #9
  br label %278

278:                                              ; preds = %274, %270
  call void @llvm.lifetime.end.p0(i64 32, ptr %41) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %40) #9
  br label %279

279:                                              ; preds = %278, %266
  call void @llvm.lifetime.end.p0(i64 32, ptr %39) #9
  br label %280

280:                                              ; preds = %279, %262
  call void @llvm.lifetime.end.p0(i64 32, ptr %38) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %37) #9
  br label %285

281:                                              ; preds = %247
  %282 = landingpad { ptr, i32 }
          cleanup
  %283 = extractvalue { ptr, i32 } %282, 0
  store ptr %283, ptr %10, align 8
  %284 = extractvalue { ptr, i32 } %282, 1
  store i32 %284, ptr %11, align 4
  br label %285

285:                                              ; preds = %281, %280
  call void @llvm.lifetime.end.p0(i64 64, ptr %36) #9
  br label %286

286:                                              ; preds = %285, %258
  call void @llvm.lifetime.end.p0(i64 64, ptr %35) #9
  br label %287

287:                                              ; preds = %286, %217, %206
  call void @llvm.lifetime.end.p0(i64 64, ptr %29) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %28) #9
  br label %288

288:                                              ; preds = %287, %202
  call void @llvm.lifetime.end.p0(i64 64, ptr %27) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #9
  br label %289

289:                                              ; preds = %288, %183
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #9
  br label %292

290:                                              ; preds = %182
  store i1 true, ptr %7, align 1
  store i32 1, ptr %12, align 4
  br label %291

291:                                              ; preds = %290, %168
  call void @llvm.lifetime.end.p0(i64 48, ptr %17) #9
  call void @llvm.lifetime.end.p0(i64 128, ptr %13) #9
  br label %294

292:                                              ; preds = %289, %155, %105
  call void @llvm.lifetime.end.p0(i64 48, ptr %17) #9
  br label %293

293:                                              ; preds = %292, %104
  call void @llvm.lifetime.end.p0(i64 128, ptr %13) #9
  br label %298

294:                                              ; preds = %291, %63, %49
  %295 = load i1, ptr %7, align 1
  br i1 %295, label %297, label %296

296:                                              ; preds = %294
  call void @_ZNSt6vectorI4LineSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %0) #9
  br label %297

297:                                              ; preds = %296, %294
  ret void

298:                                              ; preds = %293, %64, %58
  call void @_ZNSt6vectorI4LineSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %0) #9
  br label %299

299:                                              ; preds = %298
  %300 = load ptr, ptr %10, align 8
  %301 = load i32, ptr %11, align 4
  %302 = insertvalue { ptr, i32 } poison, ptr %300, 0
  %303 = insertvalue { ptr, i32 } %302, i32 %301, 1
  resume { ptr, i32 } %303

304:                                              ; preds = %253
  unreachable
}

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(48) ptr @_ZNK8LineMesh6boundsEv(ptr noundef nonnull align 8 dereferenceable(97)) #1 align 2

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZN9__gnu_cxxneIPK4LineSt6vectorIS1_SaIS1_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) #6

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZNK4LinemlERK9Matrix4x4(ptr dead_on_unwind noalias writable sret(%class.Line) align 8, ptr noundef nonnull align 8 dereferenceable(64), ptr noundef nonnull align 8 dereferenceable(128)) #4 align 2

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

declare void @_ZNK5Plane4clipERK4LineRb(ptr dead_on_unwind writable sret(%class.Line) align 8, ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(64), ptr noundef nonnull align 1 dereferenceable(1)) #5

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZNK4Line2p1Ev(ptr dead_on_unwind noalias writable sret(%class.Vec4D) align 8, ptr noundef nonnull align 8 dereferenceable(64)) #4 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZNK5Vec4DdvEd(ptr dead_on_unwind noalias writable sret(%class.Vec4D) align 8, ptr noundef nonnull align 8 dereferenceable(32), double noundef) #4 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZNK4Line2p2Ev(ptr dead_on_unwind noalias writable sret(%class.Vec4D) align 8, ptr noundef nonnull align 8 dereferenceable(64)) #4 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN4LineC2ERK5Vec4DS2_(ptr noundef nonnull align 8 dereferenceable(64), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32)) unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(64) ptr @_ZNSt6vectorI4LineSaIS0_EE12emplace_backIJRS0_EEES4_DpOT_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(64)) #2 align 2

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt15__new_allocatorIcED2Ev(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 = { 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 #3 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #4 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #8 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #9 = { 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, !37, i64 200}
!10 = !{!"_ZTS6Camera", !11, i64 0, !33, i64 152, !20, i64 176, !20, i64 184, !20, i64 192, !37, i64 200, !20, i64 208, !38, i64 216, !38, i64 240, !42, i64 264, !44, i64 392}
!11 = !{!"_ZTS6Object", !12, i64 8, !16, i64 24, !6, i64 56, !20, i64 64, !20, i64 72, !21, i64 80, !29, i64 128}
!12 = !{!"_ZTSSt23enable_shared_from_thisI6ObjectE", !13, i64 0}
!13 = !{!"_ZTSSt8weak_ptrI6ObjectE", !14, i64 0}
!14 = !{!"_ZTSSt10__weak_ptrI6ObjectLN9__gnu_cxx12_Lock_policyE2EE", !6, i64 0, !15, i64 8}
!15 = !{!"_ZTSSt12__weak_countILN9__gnu_cxx12_Lock_policyE2EE", !6, i64 0}
!16 = !{!"_ZTS9ObjectTag", !17, i64 0}
!17 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !18, i64 0, !19, i64 8, !7, i64 16}
!18 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !6, i64 0}
!19 = !{!"long", !7, i64 0}
!20 = !{!"double", !7, i64 0}
!21 = !{!"_ZTSSt3mapI9ObjectTagSt10shared_ptrI6ObjectESt4lessIS0_ESaISt4pairIKS0_S3_EEE", !22, i64 0}
!22 = !{!"_ZTSSt8_Rb_treeI9ObjectTagSt4pairIKS0_St10shared_ptrI6ObjectEESt10_Select1stIS6_ESt4lessIS0_ESaIS6_EE", !23, i64 0}
!23 = !{!"_ZTSNSt8_Rb_treeI9ObjectTagSt4pairIKS0_St10shared_ptrI6ObjectEESt10_Select1stIS6_ESt4lessIS0_ESaIS6_EE13_Rb_tree_implISA_Lb1EEE", !24, i64 0, !26, i64 8}
!24 = !{!"_ZTSSt20_Rb_tree_key_compareISt4lessI9ObjectTagEE", !25, i64 0}
!25 = !{!"_ZTSSt4lessI9ObjectTagE"}
!26 = !{!"_ZTSSt15_Rb_tree_header", !27, i64 0, !19, i64 32}
!27 = !{!"_ZTSSt18_Rb_tree_node_base", !28, i64 0, !6, i64 8, !6, i64 16, !6, i64 24}
!28 = !{!"_ZTSSt14_Rb_tree_color", !7, i64 0}
!29 = !{!"_ZTSSt6vectorISt10shared_ptrI9ComponentESaIS2_EE", !30, i64 0}
!30 = !{!"_ZTSSt12_Vector_baseISt10shared_ptrI9ComponentESaIS2_EE", !31, i64 0}
!31 = !{!"_ZTSNSt12_Vector_baseISt10shared_ptrI9ComponentESaIS2_EE12_Vector_implE", !32, i64 0}
!32 = !{!"_ZTSNSt12_Vector_baseISt10shared_ptrI9ComponentESaIS2_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!33 = !{!"_ZTSSt6vectorI5PlaneSaIS0_EE", !34, i64 0}
!34 = !{!"_ZTSSt12_Vector_baseI5PlaneSaIS0_EE", !35, i64 0}
!35 = !{!"_ZTSNSt12_Vector_baseI5PlaneSaIS0_EE12_Vector_implE", !36, i64 0}
!36 = !{!"_ZTSNSt12_Vector_baseI5PlaneSaIS0_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!37 = !{!"bool", !7, i64 0}
!38 = !{!"_ZTSSt6vectorISt4pairI5Vec3DS1_ESaIS2_EE", !39, i64 0}
!39 = !{!"_ZTSSt12_Vector_baseISt4pairI5Vec3DS1_ESaIS2_EE", !40, i64 0}
!40 = !{!"_ZTSNSt12_Vector_baseISt4pairI5Vec3DS1_ESaIS2_EE12_Vector_implE", !41, i64 0}
!41 = !{!"_ZTSNSt12_Vector_baseISt4pairI5Vec3DS1_ESaIS2_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!42 = !{!"_ZTS9Matrix4x4", !43, i64 0}
!43 = !{!"_ZTSSt5arrayIS_IdLm4EELm4EE", !7, i64 0}
!44 = !{!"_ZTSSt10shared_ptrI15TransformMatrixE", !45, i64 0}
!45 = !{!"_ZTSSt12__shared_ptrI15TransformMatrixLN9__gnu_cxx12_Lock_policyE2EE", !6, i64 0, !46, i64 8}
!46 = !{!"_ZTSSt14__shared_countILN9__gnu_cxx12_Lock_policyE2EE", !6, i64 0}
!47 = !{i8 0, i8 2}
!48 = !{}
!49 = !{!20, !20, i64 0}
!50 = !{!37, !37, i64 0}
!51 = !{i64 0, i64 32, !52, i64 32, i64 32, !52}
!52 = !{!7, !7, i64 0}


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

%class.Matrix4x4 = type { %"struct.std::array.24" }
%"struct.std::array.24" = type { [4 x %"struct.std::array.25"] }
%"struct.std::array.25" = type { [4 x double] }
%"class.std::shared_ptr.26" = type { %"class.std::__shared_ptr.27" }
%"class.std::__shared_ptr.27" = type { ptr, %"class.std::__shared_count" }
%"class.std::__shared_count" = type { ptr }
%struct.Bounds = type { %class.Vec3D, %class.Vec3D }
%class.Vec3D = type { %"struct.std::array.37" }
%"struct.std::array.37" = type { [3 x double] }
%"class.std::vector.43" = type { %"struct.std::_Vector_base.44" }
%"struct.std::_Vector_base.44" = type { %"struct.std::_Vector_base<Line, std::allocator<Line>>::_Vector_impl" }
%"struct.std::_Vector_base<Line, std::allocator<Line>>::_Vector_impl" = type { %"struct.std::_Vector_base<Line, std::allocator<Line>>::_Vector_impl_data" }
%"struct.std::_Vector_base<Line, std::allocator<Line>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%"class.std::allocator" = type { i8 }
%"class.__gnu_cxx::__normal_iterator" = type { ptr }
%"class.__gnu_cxx::__normal_iterator.48" = type { ptr }
%class.Line = type { %class.Vec4D, %class.Vec4D }
%class.Vec4D = type { %"struct.std::array.25" }

@.str.19 = external hidden unnamed_addr constant [94 x i8], align 1

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

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

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

declare i32 @__gxx_personality_v0(...)

; 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 void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32)) unnamed_addr #1 align 2

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNK15TransformMatrix12fullInvModelEv(ptr dead_on_unwind noalias writable sret(%class.Matrix4x4) align 8, ptr noundef nonnull align 8 dereferenceable(192)) local_unnamed_addr #2 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZNK9Matrix4x4mlERKS_(ptr dead_on_unwind noalias writable sret(%class.Matrix4x4) align 8, ptr noundef nonnull align 8 dereferenceable(128), ptr noundef nonnull align 8 dereferenceable(128)) local_unnamed_addr #4 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNK9Component12getComponentI15TransformMatrixEESt10shared_ptrIT_Ev(ptr dead_on_unwind noalias writable sret(%"class.std::shared_ptr.26") align 8, ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #2 align 2

declare void @_ZNK15TransformMatrix9fullModelEv(ptr dead_on_unwind writable sret(%class.Matrix4x4) align 8, ptr noundef nonnull align 8 dereferenceable(192)) local_unnamed_addr #5

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZNK6BoundsmlERK9Matrix4x4(ptr dead_on_unwind noalias writable sret(%struct.Bounds) align 8, ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 8 dereferenceable(128)) local_unnamed_addr #4 align 2

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZN9__gnu_cxxneIP5PlaneSt6vectorIS1_SaIS1_EEEEbRKNS_17__normal_iteratorIT_T0_EESB_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #6

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef double @_ZSt3absd(double noundef) local_unnamed_addr #6

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

; Function Attrs: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare double @llvm.fmuladd.f64(double, double, double) #7

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZNK5Vec4D1wEv(ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #6 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) #8

declare void @_ZN3Log3logERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #5

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN6Camera7projectERK8LineMesh(ptr dead_on_unwind noalias nonnull writable sret(%"class.std::vector.43") align 8 %0, ptr noundef nonnull align 8 dereferenceable(408) %1, ptr noundef nonnull align 8 dereferenceable(97) %2) local_unnamed_addr #2 align 2 personality ptr @__gxx_personality_v0 {
  %4 = alloca %"class.std::__cxx11::basic_string", align 8
  %5 = alloca %"class.std::allocator", align 1
  %6 = alloca %class.Matrix4x4, align 8
  %7 = alloca %class.Matrix4x4, align 8
  %8 = alloca %class.Matrix4x4, align 8
  %9 = alloca %"class.std::shared_ptr.26", align 8
  %10 = alloca %struct.Bounds, align 8
  %11 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %12 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %13 = alloca %"class.__gnu_cxx::__normal_iterator.48", align 8
  %14 = alloca %"class.__gnu_cxx::__normal_iterator.48", align 8
  %15 = alloca %class.Line, align 8
  %16 = alloca i8, align 1
  %17 = alloca %class.Line, align 8
  %18 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %19 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %20 = alloca %class.Line, align 8
  %21 = alloca %class.Line, align 8
  %22 = alloca %class.Line, align 8
  %23 = alloca %class.Vec4D, align 8
  %24 = alloca %class.Vec4D, align 8
  %25 = alloca %class.Vec4D, align 8
  %26 = alloca %class.Vec4D, align 8
  %27 = alloca %class.Vec4D, align 8
  %28 = alloca %class.Vec4D, align 8
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %0, i8 0, i64 24, i1 false)
  tail call void @_ZNSt6vectorI4LineSaIS0_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %0) #9
  %29 = getelementptr inbounds i8, ptr %1, i64 200
  %30 = load i8, ptr %29, align 8, !tbaa !5, !range !46, !noundef !47
  %31 = trunc nuw i8 %30 to i1
  br i1 %31, label %40, label %32

32:                                               ; preds = %3
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %4) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %5) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %5) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %4, ptr noundef nonnull @.str.19, ptr noundef nonnull align 1 dereferenceable(1) %5)
          to label %33 unwind label %35

33:                                               ; preds = %32
  invoke void @_ZN3Log3logERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(32) %4)
          to label %34 unwind label %37

34:                                               ; preds = %33
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %4) #9
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %5) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %5) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %4) #9
  br label %.critedge

35:                                               ; preds = %32
  %36 = landingpad { ptr, i32 }
          cleanup
  br label %39

37:                                               ; preds = %33
  %38 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %4) #9
  br label %39

39:                                               ; preds = %37, %35
  %.pn = phi { ptr, i32 } [ %38, %37 ], [ %36, %35 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %5) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %5) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %4) #9
  br label %163

40:                                               ; preds = %3
  %41 = tail call noundef zeroext i1 @_ZNK8LineMesh9isVisibleEv(ptr noundef nonnull align 8 dereferenceable(97) %2)
  br i1 %41, label %42, label %.critedge

42:                                               ; preds = %40
  call void @llvm.lifetime.start.p0(i64 128, ptr nonnull %6) #9
  call void @llvm.lifetime.start.p0(i64 128, ptr nonnull %7) #9
  %43 = getelementptr inbounds i8, ptr %1, i64 392
  %44 = tail call noundef ptr @_ZNKSt19__shared_ptr_accessI15TransformMatrixLN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %43) #9
  invoke void @_ZNK15TransformMatrix12fullInvModelEv(ptr dead_on_unwind nonnull writable sret(%class.Matrix4x4) align 8 %7, ptr noundef nonnull align 8 dereferenceable(192) %44)
          to label %45 unwind label %57

45:                                               ; preds = %42
  call void @llvm.lifetime.start.p0(i64 128, ptr nonnull %8) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %9) #9
  invoke void @_ZNK9Component12getComponentI15TransformMatrixEESt10shared_ptrIT_Ev(ptr dead_on_unwind nonnull writable sret(%"class.std::shared_ptr.26") align 8 %9, ptr noundef nonnull align 8 dereferenceable(16) %2)
          to label %46 unwind label %59

46:                                               ; preds = %45
  %47 = call noundef ptr @_ZNKSt19__shared_ptr_accessI15TransformMatrixLN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %9) #9
  invoke void @_ZNK15TransformMatrix9fullModelEv(ptr dead_on_unwind nonnull writable sret(%class.Matrix4x4) align 8 %8, ptr noundef nonnull align 8 dereferenceable(192) %47)
          to label %48 unwind label %61

48:                                               ; preds = %46
  invoke void @_ZNK9Matrix4x4mlERKS_(ptr dead_on_unwind nonnull writable sret(%class.Matrix4x4) align 8 %6, ptr noundef nonnull align 8 dereferenceable(128) %7, ptr noundef nonnull align 8 dereferenceable(128) %8)
          to label %49 unwind label %61

49:                                               ; preds = %48
  call void @_ZNSt12__shared_ptrI15TransformMatrixLN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %9) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %9) #9
  call void @llvm.lifetime.end.p0(i64 128, ptr nonnull %8) #9
  call void @llvm.lifetime.end.p0(i64 128, ptr nonnull %7) #9
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %10) #9
  %50 = call noundef nonnull align 8 dereferenceable(48) ptr @_ZNK8LineMesh6boundsEv(ptr noundef nonnull align 8 dereferenceable(97) %2)
  invoke void @_ZNK6BoundsmlERK9Matrix4x4(ptr dead_on_unwind nonnull writable sret(%struct.Bounds) align 8 %10, ptr noundef nonnull align 8 dereferenceable(48) %50, ptr noundef nonnull align 8 dereferenceable(128) %6)
          to label %51 unwind label %65

51:                                               ; preds = %49
  %52 = getelementptr inbounds i8, ptr %1, i64 152
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %11) #9
  %53 = call ptr @_ZNSt6vectorI5PlaneSaIS0_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %52) #9
  store ptr %53, ptr %11, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %12) #9
  %54 = call ptr @_ZNSt6vectorI5PlaneSaIS0_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %52) #9
  store ptr %54, ptr %12, align 8
  %55 = call noundef zeroext i1 @_ZN9__gnu_cxxneIP5PlaneSt6vectorIS1_SaIS1_EEEEbRKNS_17__normal_iteratorIT_T0_EESB_(ptr noundef nonnull align 8 dereferenceable(8) %11, ptr noundef nonnull align 8 dereferenceable(8) %12) #9
  br i1 %55, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %51
  %56 = getelementptr inbounds i8, ptr %10, i64 24
  br label %67

57:                                               ; preds = %42
  %58 = landingpad { ptr, i32 }
          cleanup
  br label %64

59:                                               ; preds = %45
  %60 = landingpad { ptr, i32 }
          cleanup
  br label %63

61:                                               ; preds = %48, %46
  %62 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt12__shared_ptrI15TransformMatrixLN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %9) #9
  br label %63

63:                                               ; preds = %61, %59
  %.pn53 = phi { ptr, i32 } [ %62, %61 ], [ %60, %59 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %9) #9
  call void @llvm.lifetime.end.p0(i64 128, ptr nonnull %8) #9
  br label %64

64:                                               ; preds = %63, %57
  %.pn53.pn = phi { ptr, i32 } [ %.pn53, %63 ], [ %58, %57 ]
  call void @llvm.lifetime.end.p0(i64 128, ptr nonnull %7) #9
  br label %162

65:                                               ; preds = %49
  %66 = landingpad { ptr, i32 }
          cleanup
  br label %161

67:                                               ; preds = %.lr.ph, %93
  %68 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNK9__gnu_cxx17__normal_iteratorIP5PlaneSt6vectorIS1_SaIS1_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %11) #9
  %69 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK5Vec3D1xEv(ptr noundef nonnull align 8 dereferenceable(24) %56)
  %70 = load double, ptr %69, align 8, !tbaa !48
  %71 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK5Vec3D1xEv(ptr noundef nonnull align 8 dereferenceable(24) %68)
  %72 = load double, ptr %71, align 8, !tbaa !48
  %73 = call noundef double @_ZSt3absd(double noundef %72)
  %74 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK5Vec3D1yEv(ptr noundef nonnull align 8 dereferenceable(24) %56)
  %75 = load double, ptr %74, align 8, !tbaa !48
  %76 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK5Vec3D1yEv(ptr noundef nonnull align 8 dereferenceable(24) %68)
  %77 = load double, ptr %76, align 8, !tbaa !48
  %78 = call noundef double @_ZSt3absd(double noundef %77)
  %79 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK5Vec3D1zEv(ptr noundef nonnull align 8 dereferenceable(24) %56)
  %80 = load double, ptr %79, align 8, !tbaa !48
  %81 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK5Vec3D1zEv(ptr noundef nonnull align 8 dereferenceable(24) %68)
  %82 = load double, ptr %81, align 8, !tbaa !48
  %83 = call noundef double @_ZSt3absd(double noundef %82)
  %84 = invoke noundef double @_ZNK5Plane8distanceERK5Vec3D(ptr noundef nonnull align 8 dereferenceable(32) %68, ptr noundef nonnull align 8 dereferenceable(24) %10)
          to label %85 unwind label %91

85:                                               ; preds = %67
  %86 = fmul double %75, %78
  %87 = call double @llvm.fmuladd.f64(double %70, double %73, double %86)
  %88 = call double @llvm.fmuladd.f64(double %80, double %83, double %87)
  %89 = fadd double %84, %88
  %90 = fcmp uge double %89, 0.000000e+00
  br i1 %90, label %93, label %160

91:                                               ; preds = %67
  %92 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #9
  br label %161

93:                                               ; preds = %85
  %94 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIP5PlaneSt6vectorIS1_SaIS1_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %11) #9
  %95 = call noundef zeroext i1 @_ZN9__gnu_cxxneIP5PlaneSt6vectorIS1_SaIS1_EEEEbRKNS_17__normal_iteratorIT_T0_EESB_(ptr noundef nonnull align 8 dereferenceable(8) %11, ptr noundef nonnull align 8 dereferenceable(8) %12) #9
  br i1 %95, label %67, label %._crit_edge

._crit_edge:                                      ; preds = %93, %51
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #9
  %96 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK8LineMesh5linesEv(ptr noundef nonnull align 8 dereferenceable(97) %2)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %13) #9
  %97 = call ptr @_ZNKSt6vectorI4LineSaIS0_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %96) #9
  store ptr %97, ptr %13, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %14) #9
  %98 = call ptr @_ZNKSt6vectorI4LineSaIS0_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %96) #9
  store ptr %98, ptr %14, align 8
  %99 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPK4LineSt6vectorIS1_SaIS1_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %13, ptr noundef nonnull align 8 dereferenceable(8) %14) #9
  br i1 %99, label %.lr.ph76, label %.critedge.critedge

.lr.ph76:                                         ; preds = %._crit_edge
  %100 = getelementptr inbounds i8, ptr %1, i64 264
  br label %101

.critedge.critedge:                               ; preds = %138, %._crit_edge
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #9
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %10) #9
  call void @llvm.lifetime.end.p0(i64 128, ptr nonnull %6) #9
  br label %.critedge

101:                                              ; preds = %.lr.ph76, %138
  %102 = call noundef nonnull align 8 dereferenceable(64) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPK4LineSt6vectorIS1_SaIS1_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %13) #9
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %15) #9
  invoke void @_ZNK4LinemlERK9Matrix4x4(ptr dead_on_unwind nonnull writable sret(%class.Line) align 8 %15, ptr noundef nonnull align 8 dereferenceable(64) %102, ptr noundef nonnull align 8 dereferenceable(128) %6)
          to label %103 unwind label %108

103:                                              ; preds = %101
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %16) #9
  store i8 0, ptr %16, align 1, !tbaa !49
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %17) #9
  invoke void @_ZN4LineC2ERKS_(ptr noundef nonnull align 8 dereferenceable(64) %17, ptr noundef nonnull align 8 dereferenceable(64) %15)
          to label %104 unwind label %110

104:                                              ; preds = %103
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %18) #9
  %105 = call ptr @_ZNSt6vectorI5PlaneSaIS0_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %52) #9
  store ptr %105, ptr %18, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %19) #9
  %106 = call ptr @_ZNSt6vectorI5PlaneSaIS0_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %52) #9
  store ptr %106, ptr %19, align 8
  %107 = call noundef zeroext i1 @_ZN9__gnu_cxxneIP5PlaneSt6vectorIS1_SaIS1_EEEEbRKNS_17__normal_iteratorIT_T0_EESB_(ptr noundef nonnull align 8 dereferenceable(8) %18, ptr noundef nonnull align 8 dereferenceable(8) %19) #9
  br i1 %107, label %.lr.ph72, label %._crit_edge73

108:                                              ; preds = %101
  %109 = landingpad { ptr, i32 }
          cleanup
  br label %159

110:                                              ; preds = %103
  %111 = landingpad { ptr, i32 }
          cleanup
  br label %158

.lr.ph72:                                         ; preds = %104, %118
  %112 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNK9__gnu_cxx17__normal_iteratorIP5PlaneSt6vectorIS1_SaIS1_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %18) #9
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %20) #9
  invoke void @_ZNK5Plane4clipERK4LineRb(ptr dead_on_unwind nonnull writable sret(%class.Line) align 8 %20, ptr noundef nonnull align 8 dereferenceable(32) %112, ptr noundef nonnull align 8 dereferenceable(64) %17, ptr noundef nonnull align 1 dereferenceable(1) %16)
          to label %113 unwind label %116

113:                                              ; preds = %.lr.ph72
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(64) %17, ptr noundef nonnull align 8 dereferenceable(64) %20, i64 64, i1 false), !tbaa.struct !50
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %20) #9
  %114 = load i8, ptr %16, align 1, !tbaa !49, !range !46, !noundef !47
  %115 = trunc nuw i8 %114 to i1
  br i1 %115, label %._crit_edge73, label %118

116:                                              ; preds = %.lr.ph72
  %117 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %20) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %19) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %18) #9
  br label %158

118:                                              ; preds = %113
  %119 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIP5PlaneSt6vectorIS1_SaIS1_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %18) #9
  %120 = call noundef zeroext i1 @_ZN9__gnu_cxxneIP5PlaneSt6vectorIS1_SaIS1_EEEEbRKNS_17__normal_iteratorIT_T0_EESB_(ptr noundef nonnull align 8 dereferenceable(8) %18, ptr noundef nonnull align 8 dereferenceable(8) %19) #9
  br i1 %120, label %.lr.ph72, label %._crit_edge73

._crit_edge73:                                    ; preds = %113, %118, %104
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %19) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %18) #9
  %121 = load i8, ptr %16, align 1, !tbaa !49, !range !46, !noundef !47
  %122 = trunc nuw i8 %121 to i1
  br i1 %122, label %138, label %123

123:                                              ; preds = %._crit_edge73
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %21) #9
  invoke void @_ZNK4LinemlERK9Matrix4x4(ptr dead_on_unwind nonnull writable sret(%class.Line) align 8 %21, ptr noundef nonnull align 8 dereferenceable(64) %17, ptr noundef nonnull align 8 dereferenceable(128) %100)
          to label %124 unwind label %141

124:                                              ; preds = %123
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %22) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %23) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %24) #9
  invoke void @_ZNK4Line2p1Ev(ptr dead_on_unwind nonnull writable sret(%class.Vec4D) align 8 %24, ptr noundef nonnull align 8 dereferenceable(64) %21)
          to label %125 unwind label %143

125:                                              ; preds = %124
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %25) #9
  invoke void @_ZNK4Line2p1Ev(ptr dead_on_unwind nonnull writable sret(%class.Vec4D) align 8 %25, ptr noundef nonnull align 8 dereferenceable(64) %21)
          to label %126 unwind label %145

126:                                              ; preds = %125
  %127 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK5Vec4D1wEv(ptr noundef nonnull align 8 dereferenceable(32) %25)
  %128 = load double, ptr %127, align 8, !tbaa !48
  invoke void @_ZNK5Vec4DdvEd(ptr dead_on_unwind nonnull writable sret(%class.Vec4D) align 8 %23, ptr noundef nonnull align 8 dereferenceable(32) %24, double noundef %128)
          to label %129 unwind label %145

129:                                              ; preds = %126
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %26) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %27) #9
  invoke void @_ZNK4Line2p2Ev(ptr dead_on_unwind nonnull writable sret(%class.Vec4D) align 8 %27, ptr noundef nonnull align 8 dereferenceable(64) %21)
          to label %130 unwind label %147

130:                                              ; preds = %129
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %28) #9
  invoke void @_ZNK4Line2p2Ev(ptr dead_on_unwind nonnull writable sret(%class.Vec4D) align 8 %28, ptr noundef nonnull align 8 dereferenceable(64) %21)
          to label %131 unwind label %149

131:                                              ; preds = %130
  %132 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK5Vec4D1wEv(ptr noundef nonnull align 8 dereferenceable(32) %28)
  %133 = load double, ptr %132, align 8, !tbaa !48
  invoke void @_ZNK5Vec4DdvEd(ptr dead_on_unwind nonnull writable sret(%class.Vec4D) align 8 %26, ptr noundef nonnull align 8 dereferenceable(32) %27, double noundef %133)
          to label %134 unwind label %149

134:                                              ; preds = %131
  invoke void @_ZN4LineC2ERK5Vec4DS2_(ptr noundef nonnull align 8 dereferenceable(64) %22, ptr noundef nonnull align 8 dereferenceable(32) %23, ptr noundef nonnull align 8 dereferenceable(32) %26)
          to label %135 unwind label %149

135:                                              ; preds = %134
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %28) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %27) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %26) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %25) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %24) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %23) #9
  %136 = invoke noundef nonnull align 8 dereferenceable(64) ptr @_ZNSt6vectorI4LineSaIS0_EE12emplace_backIJRS0_EEES4_DpOT_(ptr noundef nonnull align 8 dereferenceable(24) %0, ptr noundef nonnull align 8 dereferenceable(64) %22)
          to label %137 unwind label %154

137:                                              ; preds = %135
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %22) #9
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %21) #9
  br label %138

138:                                              ; preds = %._crit_edge73, %137
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %17) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %16) #9
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %15) #9
  %139 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPK4LineSt6vectorIS1_SaIS1_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %13) #9
  %140 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPK4LineSt6vectorIS1_SaIS1_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %13, ptr noundef nonnull align 8 dereferenceable(8) %14) #9
  br i1 %140, label %101, label %.critedge.critedge

141:                                              ; preds = %123
  %142 = landingpad { ptr, i32 }
          cleanup
  br label %157

143:                                              ; preds = %124
  %144 = landingpad { ptr, i32 }
          cleanup
  br label %153

145:                                              ; preds = %126, %125
  %146 = landingpad { ptr, i32 }
          cleanup
  br label %152

147:                                              ; preds = %129
  %148 = landingpad { ptr, i32 }
          cleanup
  br label %151

149:                                              ; preds = %134, %131, %130
  %150 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %28) #9
  br label %151

151:                                              ; preds = %149, %147
  %.pn56 = phi { ptr, i32 } [ %150, %149 ], [ %148, %147 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %27) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %26) #9
  br label %152

152:                                              ; preds = %151, %145
  %.pn56.pn = phi { ptr, i32 } [ %.pn56, %151 ], [ %146, %145 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %25) #9
  br label %153

153:                                              ; preds = %152, %143
  %.pn56.pn.pn = phi { ptr, i32 } [ %.pn56.pn, %152 ], [ %144, %143 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %24) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %23) #9
  br label %156

154:                                              ; preds = %135
  %155 = landingpad { ptr, i32 }
          cleanup
  br label %156

156:                                              ; preds = %154, %153
  %.pn60 = phi { ptr, i32 } [ %155, %154 ], [ %.pn56.pn.pn, %153 ]
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %22) #9
  br label %157

157:                                              ; preds = %156, %141
  %.pn60.pn = phi { ptr, i32 } [ %.pn60, %156 ], [ %142, %141 ]
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %21) #9
  br label %158

158:                                              ; preds = %157, %116, %110
  %.pn60.pn.pn = phi { ptr, i32 } [ %.pn60.pn, %157 ], [ %117, %116 ], [ %111, %110 ]
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %17) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %16) #9
  br label %159

159:                                              ; preds = %158, %108
  %.pn60.pn.pn.pn = phi { ptr, i32 } [ %.pn60.pn.pn, %158 ], [ %109, %108 ]
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %15) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #9
  br label %161

160:                                              ; preds = %85
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #9
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %10) #9
  call void @llvm.lifetime.end.p0(i64 128, ptr nonnull %6) #9
  br label %.critedge

161:                                              ; preds = %159, %91, %65
  %.pn60.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn60.pn.pn.pn, %159 ], [ %92, %91 ], [ %66, %65 ]
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %10) #9
  br label %162

162:                                              ; preds = %161, %64
  %.pn60.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn60.pn.pn.pn.pn, %161 ], [ %.pn53.pn, %64 ]
  call void @llvm.lifetime.end.p0(i64 128, ptr nonnull %6) #9
  br label %163

.critedge:                                        ; preds = %160, %.critedge.critedge, %34, %40
  ret void

163:                                              ; preds = %162, %39
  %.pn60.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn60.pn.pn.pn.pn.pn, %162 ], [ %.pn, %39 ]
  call void @_ZNSt6vectorI4LineSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %0) #9
  resume { ptr, i32 } %.pn60.pn.pn.pn.pn.pn.pn
}

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(48) ptr @_ZNK8LineMesh6boundsEv(ptr noundef nonnull align 8 dereferenceable(97)) local_unnamed_addr #1 align 2

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZN9__gnu_cxxneIPK4LineSt6vectorIS1_SaIS1_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #6

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZNK4LinemlERK9Matrix4x4(ptr dead_on_unwind noalias writable sret(%class.Line) align 8, ptr noundef nonnull align 8 dereferenceable(64), ptr noundef nonnull align 8 dereferenceable(128)) local_unnamed_addr #4 align 2

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

declare void @_ZNK5Plane4clipERK4LineRb(ptr dead_on_unwind writable sret(%class.Line) align 8, ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(64), ptr noundef nonnull align 1 dereferenceable(1)) local_unnamed_addr #5

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZNK4Line2p1Ev(ptr dead_on_unwind noalias writable sret(%class.Vec4D) align 8, ptr noundef nonnull align 8 dereferenceable(64)) local_unnamed_addr #4 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZNK5Vec4DdvEd(ptr dead_on_unwind noalias writable sret(%class.Vec4D) align 8, ptr noundef nonnull align 8 dereferenceable(32), double noundef) local_unnamed_addr #4 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZNK4Line2p2Ev(ptr dead_on_unwind noalias writable sret(%class.Vec4D) align 8, ptr noundef nonnull align 8 dereferenceable(64)) local_unnamed_addr #4 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN4LineC2ERK5Vec4DS2_(ptr noundef nonnull align 8 dereferenceable(64), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32)) unnamed_addr #2 align 2

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

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

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

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

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { 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 #3 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #4 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #8 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #9 = { 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, !36, i64 200}
!6 = !{!"_ZTS6Camera", !7, i64 0, !32, i64 152, !19, i64 176, !19, i64 184, !19, i64 192, !36, i64 200, !19, i64 208, !37, i64 216, !37, i64 240, !41, i64 264, !43, i64 392}
!7 = !{!"_ZTS6Object", !8, i64 8, !15, i64 24, !11, i64 56, !19, i64 64, !19, i64 72, !20, i64 80, !28, i64 128}
!8 = !{!"_ZTSSt23enable_shared_from_thisI6ObjectE", !9, i64 0}
!9 = !{!"_ZTSSt8weak_ptrI6ObjectE", !10, i64 0}
!10 = !{!"_ZTSSt10__weak_ptrI6ObjectLN9__gnu_cxx12_Lock_policyE2EE", !11, i64 0, !14, i64 8}
!11 = !{!"any pointer", !12, i64 0}
!12 = !{!"omnipotent char", !13, i64 0}
!13 = !{!"Simple C++ TBAA"}
!14 = !{!"_ZTSSt12__weak_countILN9__gnu_cxx12_Lock_policyE2EE", !11, i64 0}
!15 = !{!"_ZTS9ObjectTag", !16, i64 0}
!16 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !17, i64 0, !18, i64 8, !12, i64 16}
!17 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !11, i64 0}
!18 = !{!"long", !12, i64 0}
!19 = !{!"double", !12, i64 0}
!20 = !{!"_ZTSSt3mapI9ObjectTagSt10shared_ptrI6ObjectESt4lessIS0_ESaISt4pairIKS0_S3_EEE", !21, i64 0}
!21 = !{!"_ZTSSt8_Rb_treeI9ObjectTagSt4pairIKS0_St10shared_ptrI6ObjectEESt10_Select1stIS6_ESt4lessIS0_ESaIS6_EE", !22, i64 0}
!22 = !{!"_ZTSNSt8_Rb_treeI9ObjectTagSt4pairIKS0_St10shared_ptrI6ObjectEESt10_Select1stIS6_ESt4lessIS0_ESaIS6_EE13_Rb_tree_implISA_Lb1EEE", !23, i64 0, !25, i64 8}
!23 = !{!"_ZTSSt20_Rb_tree_key_compareISt4lessI9ObjectTagEE", !24, i64 0}
!24 = !{!"_ZTSSt4lessI9ObjectTagE"}
!25 = !{!"_ZTSSt15_Rb_tree_header", !26, i64 0, !18, i64 32}
!26 = !{!"_ZTSSt18_Rb_tree_node_base", !27, i64 0, !11, i64 8, !11, i64 16, !11, i64 24}
!27 = !{!"_ZTSSt14_Rb_tree_color", !12, i64 0}
!28 = !{!"_ZTSSt6vectorISt10shared_ptrI9ComponentESaIS2_EE", !29, i64 0}
!29 = !{!"_ZTSSt12_Vector_baseISt10shared_ptrI9ComponentESaIS2_EE", !30, i64 0}
!30 = !{!"_ZTSNSt12_Vector_baseISt10shared_ptrI9ComponentESaIS2_EE12_Vector_implE", !31, i64 0}
!31 = !{!"_ZTSNSt12_Vector_baseISt10shared_ptrI9ComponentESaIS2_EE17_Vector_impl_dataE", !11, i64 0, !11, i64 8, !11, i64 16}
!32 = !{!"_ZTSSt6vectorI5PlaneSaIS0_EE", !33, i64 0}
!33 = !{!"_ZTSSt12_Vector_baseI5PlaneSaIS0_EE", !34, i64 0}
!34 = !{!"_ZTSNSt12_Vector_baseI5PlaneSaIS0_EE12_Vector_implE", !35, i64 0}
!35 = !{!"_ZTSNSt12_Vector_baseI5PlaneSaIS0_EE17_Vector_impl_dataE", !11, i64 0, !11, i64 8, !11, i64 16}
!36 = !{!"bool", !12, i64 0}
!37 = !{!"_ZTSSt6vectorISt4pairI5Vec3DS1_ESaIS2_EE", !38, i64 0}
!38 = !{!"_ZTSSt12_Vector_baseISt4pairI5Vec3DS1_ESaIS2_EE", !39, i64 0}
!39 = !{!"_ZTSNSt12_Vector_baseISt4pairI5Vec3DS1_ESaIS2_EE12_Vector_implE", !40, i64 0}
!40 = !{!"_ZTSNSt12_Vector_baseISt4pairI5Vec3DS1_ESaIS2_EE17_Vector_impl_dataE", !11, i64 0, !11, i64 8, !11, i64 16}
!41 = !{!"_ZTS9Matrix4x4", !42, i64 0}
!42 = !{!"_ZTSSt5arrayIS_IdLm4EELm4EE", !12, i64 0}
!43 = !{!"_ZTSSt10shared_ptrI15TransformMatrixE", !44, i64 0}
!44 = !{!"_ZTSSt12__shared_ptrI15TransformMatrixLN9__gnu_cxx12_Lock_policyE2EE", !11, i64 0, !45, i64 8}
!45 = !{!"_ZTSSt14__shared_countILN9__gnu_cxx12_Lock_policyE2EE", !11, i64 0}
!46 = !{i8 0, i8 2}
!47 = !{}
!48 = !{!19, !19, i64 0}
!49 = !{!36, !36, i64 0}
!50 = !{i64 0, i64 32, !51, i64 32, i64 32, !51}
!51 = !{!12, !12, i64 0}


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