; LLVM IR from Lut1n/ImpGears :: src/ImpGears/Renderer (CpuRenderer)

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

%"class.std::shared_ptr.37" = type { %"class.std::__shared_ptr.38" }
%"class.std::__shared_ptr.38" = type { ptr, %"class.std::__shared_count" }
%"class.std::__shared_count" = type { ptr }
%"class.std::shared_ptr.45" = type { %"class.std::__shared_ptr.46" }
%"class.std::__shared_ptr.46" = type { ptr, %"class.std::__shared_count" }
%"class.imp::Matrix4" = type { %"class.imp::Matrix.17" }
%"class.imp::Matrix.17" = type { %"class.imp::Object", [16 x float] }
%"class.imp::Object" = type { ptr, %"class.std::shared_ptr" }
%"class.std::shared_ptr" = type { %"class.std::__shared_ptr" }
%"class.std::__shared_ptr" = type { ptr, %"class.std::__shared_count" }
%"class.imp::Vec3" = type { %"class.imp::Vec.base", [4 x i8] }
%"class.imp::Vec.base" = type <{ %"class.imp::Object", [3 x float] }>
%"class.std::shared_ptr.51" = type { %"class.std::__shared_ptr.52" }
%"class.std::__shared_ptr.52" = type { ptr, %"class.std::__shared_count" }
%"class.std::shared_ptr.73" = type { %"class.std::__shared_ptr.74" }
%"class.std::__shared_ptr.74" = type { ptr, %"class.std::__shared_count" }
%"class.std::shared_ptr.54" = type { %"class.std::__shared_ptr.55" }
%"class.std::__shared_ptr.55" = type { ptr, %"class.std::__shared_count" }
%"class.std::shared_ptr.76" = type { %"class.std::__shared_ptr.77" }
%"class.std::__shared_ptr.77" = type { ptr, %"class.std::__shared_count" }
%"class.std::shared_ptr.57" = type { %"class.std::__shared_ptr.58" }
%"class.std::__shared_ptr.58" = type { ptr, %"class.std::__shared_count" }
%"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.93" = type { i8 }
%"class.imp::SceneRenderer" = type <{ %"class.imp::Object", i8, [5 x i8], [2 x i8], %"class.std::shared_ptr.0", %"class.std::shared_ptr.3", i32, [4 x i8], %"class.imp::Vec4", i32, i32, i32, i32, float, float, i8, [7 x i8] }>
%"class.std::shared_ptr.0" = type { %"class.std::__shared_ptr.1" }
%"class.std::__shared_ptr.1" = type { ptr, %"class.std::__shared_count" }
%"class.std::shared_ptr.3" = type { %"class.std::__shared_ptr.4" }
%"class.std::__shared_ptr.4" = type { ptr, %"class.std::__shared_count" }
%"class.imp::Vec4" = type { %"class.imp::Vec" }
%"class.imp::Vec" = type { %"class.imp::Object", [4 x float] }
%"class.imp::RenderQueue" = type { %"class.imp::Object", ptr, %"class.std::vector.60", %"struct.imp::StateBin", %"struct.imp::StateBin" }
%"class.std::vector.60" = type { %"struct.std::_Vector_base.61" }
%"struct.std::_Vector_base.61" = type { %"struct.std::_Vector_base<imp::LightNode *, std::allocator<imp::LightNode *>>::_Vector_impl" }
%"struct.std::_Vector_base<imp::LightNode *, std::allocator<imp::LightNode *>>::_Vector_impl" = type { %"struct.std::_Vector_base<imp::LightNode *, std::allocator<imp::LightNode *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<imp::LightNode *, std::allocator<imp::LightNode *>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.imp::StateBin" = type <{ %"class.std::vector.65", i32, [4 x i8] }>
%"class.std::vector.65" = type { %"struct.std::_Vector_base.66" }
%"struct.std::_Vector_base.66" = type { %"struct.std::_Vector_base<imp::RenderState, std::allocator<imp::RenderState>>::_Vector_impl" }
%"struct.std::_Vector_base<imp::RenderState, std::allocator<imp::RenderState>>::_Vector_impl" = type { %"struct.std::_Vector_base<imp::RenderState, std::allocator<imp::RenderState>>::_Vector_impl_data" }
%"struct.std::_Vector_base<imp::RenderState, std::allocator<imp::RenderState>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.imp::LightNode" = type <{ %"class.imp::Node", %"class.imp::Vec3", %"class.imp::Vec3", float, [4 x i8] }>
%"class.imp::Node" = type { %"class.imp::Object", %"class.std::shared_ptr.57", %"class.imp::Vec3", %"class.imp::Vec3", %"class.imp::Vec3", %"class.imp::Matrix4", %"class.imp::Matrix4", %"class.imp::Matrix4", %"class.imp::Matrix4", i8, %"class.std::__cxx11::list" }
%"class.std::__cxx11::list" = type { %"class.std::__cxx11::_List_base" }
%"class.std::__cxx11::_List_base" = type { %"struct.std::__cxx11::_List_base<std::shared_ptr<imp::Node>, std::allocator<std::shared_ptr<imp::Node>>>::_List_impl" }
%"struct.std::__cxx11::_List_base<std::shared_ptr<imp::Node>, std::allocator<std::shared_ptr<imp::Node>>>::_List_impl" = type { %"struct.std::__detail::_List_node_header" }
%"struct.std::__detail::_List_node_header" = type { %"struct.std::__detail::_List_node_base", i64 }
%"struct.std::__detail::_List_node_base" = type { ptr, ptr }
%"class.imp::GeoNode" = type <{ %"class.imp::Node", %"class.std::shared_ptr.79", %"class.std::shared_ptr.76", i8, [7 x i8] }>
%"class.std::shared_ptr.79" = type { %"class.std::__shared_ptr.80" }
%"class.std::__shared_ptr.80" = type { ptr, %"class.std::__shared_count" }
%"class.imp::Material" = type { %"class.imp::Object", %"class.std::shared_ptr.19", %"class.std::shared_ptr.19", %"class.std::shared_ptr.19", %"class.std::shared_ptr.19", float, %"class.imp::Vec4" }
%"class.std::shared_ptr.19" = type { %"class.std::__shared_ptr.20" }
%"class.std::__shared_ptr.20" = type { ptr, %"class.std::__shared_count" }

@.str = external hidden unnamed_addr constant [16 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [8 x i8], align 1

declare i32 @__gxx_personality_v0(...)

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN3imp11CpuRenderer6renderERKSt10shared_ptrINS_5GraphEE(ptr noundef nonnull align 8 dereferenceable(1400) %0, ptr noundef nonnull align 8 dereferenceable(16) %1) unnamed_addr #1 align 2 personality ptr @__gxx_personality_v0 {
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca %"class.std::shared_ptr.37", align 8
  %6 = alloca %"class.std::shared_ptr.45", align 8
  %7 = alloca ptr, align 8
  %8 = alloca i32, align 4
  %9 = alloca %"class.std::shared_ptr.45", align 8
  %10 = alloca %"class.imp::Matrix4", align 8
  %11 = alloca %"class.imp::Vec3", align 8
  %12 = alloca %"class.imp::Vec3", align 8
  %13 = alloca %"class.imp::Vec3", align 8
  %14 = alloca %"class.imp::Vec3", align 8
  %15 = alloca i32, align 4
  %16 = alloca ptr, align 8
  %17 = alloca %"class.std::shared_ptr.51", align 8
  %18 = alloca %"class.std::shared_ptr.73", align 8
  %19 = alloca %"class.std::shared_ptr.51", align 8
  %20 = alloca %"class.std::shared_ptr.54", align 8
  %21 = alloca %"class.std::shared_ptr.51", align 8
  %22 = alloca %"class.std::shared_ptr.76", align 8
  %23 = alloca %"class.std::shared_ptr.57", align 8
  %24 = alloca %"class.std::__cxx11::basic_string", align 8
  %25 = alloca %"class.std::allocator.93", align 1
  %26 = alloca %"class.std::shared_ptr.57", align 8
  %27 = alloca %"class.std::__cxx11::basic_string", align 8
  %28 = alloca %"class.std::allocator.93", align 1
  %29 = alloca %"class.std::shared_ptr.57", align 8
  %30 = alloca %"class.std::__cxx11::basic_string", align 8
  %31 = alloca %"class.std::allocator.93", align 1
  %32 = alloca %"class.std::shared_ptr.57", align 8
  %33 = alloca %"class.std::__cxx11::basic_string", align 8
  %34 = alloca %"class.std::allocator.93", align 1
  %35 = alloca %"class.std::shared_ptr.57", align 8
  %36 = alloca %"class.std::__cxx11::basic_string", align 8
  %37 = alloca %"class.std::allocator.93", align 1
  %38 = alloca %"class.std::shared_ptr.57", align 8
  %39 = alloca %"class.std::__cxx11::basic_string", align 8
  %40 = alloca %"class.std::allocator.93", align 1
  %41 = alloca %"class.std::shared_ptr.57", align 8
  %42 = alloca %"class.std::__cxx11::basic_string", align 8
  %43 = alloca %"class.std::allocator.93", align 1
  %44 = alloca %"class.std::shared_ptr.57", align 8
  %45 = alloca %"class.std::__cxx11::basic_string", align 8
  %46 = alloca %"class.std::allocator.93", align 1
  %47 = alloca %"class.std::shared_ptr.57", align 8
  store ptr %0, ptr %3, align 8, !tbaa !5
  store ptr %1, ptr %4, align 8, !tbaa !5
  %48 = load ptr, ptr %3, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr %5) #7
  %49 = getelementptr inbounds %"class.imp::SceneRenderer", ptr %48, i32 0, i32 5
  call void @_ZNSt10shared_ptrIN3imp7VisitorEEC2INS0_13RenderVisitorEvEERKS_IT_E(ptr noundef nonnull align 8 dereferenceable(16) %5, ptr noundef nonnull align 8 dereferenceable(16) %49) #7
  %50 = getelementptr inbounds %"class.imp::SceneRenderer", ptr %48, i32 0, i32 5
  %51 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp13RenderVisitorELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %50) #7
  call void @_ZNSt10shared_ptrIN3imp11RenderQueueEEC2EDn(ptr noundef nonnull align 8 dereferenceable(16) %6, ptr null) #7
  %52 = load ptr, ptr %51, align 8, !tbaa !9
  %53 = getelementptr inbounds ptr, ptr %52, i64 6
  %54 = load ptr, ptr %53, align 8
  invoke void %54(ptr noundef nonnull align 8 dereferenceable(80) %51, ptr noundef %6)
          to label %55 unwind label %76

55:                                               ; preds = %2
  call void @_ZNSt12__shared_ptrIN3imp11RenderQueueELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %6) #7
  %56 = load ptr, ptr %4, align 8, !tbaa !5
  %57 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp5GraphELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %56) #7
  %58 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNKSt19__shared_ptr_accessIN3imp7VisitorELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEdeEv(ptr noundef nonnull align 1 dereferenceable(1) %5) #7
  invoke void @_ZN3imp5Graph6acceptERNS_7VisitorE(ptr noundef nonnull align 8 dereferenceable(72) %57, ptr noundef nonnull align 8 dereferenceable(24) %58)
          to label %59 unwind label %80

59:                                               ; preds = %55
  call void @llvm.lifetime.start.p0(i64 16, ptr %9) #7
  %60 = getelementptr inbounds %"class.imp::SceneRenderer", ptr %48, i32 0, i32 5
  %61 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp13RenderVisitorELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %60) #7
  invoke void @_ZN3imp13RenderVisitor8getQueueEv(ptr dead_on_unwind writable sret(%"class.std::shared_ptr.45") align 8 %9, ptr noundef nonnull align 8 dereferenceable(80) %61)
          to label %62 unwind label %84

62:                                               ; preds = %59
  call void @llvm.lifetime.start.p0(i64 88, ptr %10) #7
  invoke void @_ZN3imp7Matrix4C1Ev(ptr noundef nonnull align 8 dereferenceable(88) %10)
          to label %63 unwind label %88

63:                                               ; preds = %62
  %64 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp11RenderQueueELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %9) #7
  %65 = getelementptr inbounds %"class.imp::RenderQueue", ptr %64, i32 0, i32 1
  %66 = load ptr, ptr %65, align 8, !tbaa !11
  %67 = icmp ne ptr %66, null
  br i1 %67, label %68, label %96

68:                                               ; preds = %63
  %69 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp11RenderQueueELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %9) #7
  %70 = getelementptr inbounds %"class.imp::RenderQueue", ptr %69, i32 0, i32 1
  %71 = load ptr, ptr %70, align 8, !tbaa !11
  %72 = invoke noundef nonnull align 8 dereferenceable(88) ptr @_ZNK3imp6Camera13getViewMatrixEv(ptr noundef nonnull align 8 dereferenceable(752) %71)
          to label %73 unwind label %92

73:                                               ; preds = %68
  %74 = invoke noundef nonnull align 8 dereferenceable(88) ptr @_ZN3imp7Matrix4aSERKS0_(ptr noundef nonnull align 8 dereferenceable(88) %10, ptr noundef nonnull align 8 dereferenceable(88) %72)
          to label %75 unwind label %92

75:                                               ; preds = %73
  br label %96

76:                                               ; preds = %2
  %77 = landingpad { ptr, i32 }
          cleanup
  %78 = extractvalue { ptr, i32 } %77, 0
  store ptr %78, ptr %7, align 8
  %79 = extractvalue { ptr, i32 } %77, 1
  store i32 %79, ptr %8, align 4
  call void @_ZNSt12__shared_ptrIN3imp11RenderQueueELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %6) #7
  br label %433

80:                                               ; preds = %55
  %81 = landingpad { ptr, i32 }
          cleanup
  %82 = extractvalue { ptr, i32 } %81, 0
  store ptr %82, ptr %7, align 8
  %83 = extractvalue { ptr, i32 } %81, 1
  store i32 %83, ptr %8, align 4
  br label %433

84:                                               ; preds = %59
  %85 = landingpad { ptr, i32 }
          cleanup
  %86 = extractvalue { ptr, i32 } %85, 0
  store ptr %86, ptr %7, align 8
  %87 = extractvalue { ptr, i32 } %85, 1
  store i32 %87, ptr %8, align 4
  br label %432

88:                                               ; preds = %62
  %89 = landingpad { ptr, i32 }
          cleanup
  %90 = extractvalue { ptr, i32 } %89, 0
  store ptr %90, ptr %7, align 8
  %91 = extractvalue { ptr, i32 } %89, 1
  store i32 %91, ptr %8, align 4
  br label %431

92:                                               ; preds = %73, %68
  %93 = landingpad { ptr, i32 }
          cleanup
  %94 = extractvalue { ptr, i32 } %93, 0
  store ptr %94, ptr %7, align 8
  %95 = extractvalue { ptr, i32 } %93, 1
  store i32 %95, ptr %8, align 4
  br label %430

96:                                               ; preds = %75, %63
  call void @llvm.lifetime.start.p0(i64 40, ptr %11) #7
  invoke void @_ZN3imp4Vec3C2Ef(ptr noundef nonnull align 8 dereferenceable(36) %11, float noundef 0.000000e+00)
          to label %97 unwind label %109

97:                                               ; preds = %96
  call void @llvm.lifetime.start.p0(i64 40, ptr %12) #7
  invoke void @_ZN3imp4Vec3C2Ef(ptr noundef nonnull align 8 dereferenceable(36) %12, float noundef 1.000000e+00)
          to label %98 unwind label %113

98:                                               ; preds = %97
  call void @llvm.lifetime.start.p0(i64 40, ptr %13) #7
  invoke void @_ZN3imp4Vec3C2Ef(ptr noundef nonnull align 8 dereferenceable(36) %13, float noundef 1.000000e+00)
          to label %99 unwind label %117

99:                                               ; preds = %98
  call void @llvm.lifetime.start.p0(i64 40, ptr %14) #7
  invoke void @_ZN3imp4Vec3C2Ef(ptr noundef nonnull align 8 dereferenceable(36) %14, float noundef 0.000000e+00)
          to label %100 unwind label %121

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

101:                                              ; preds = %417, %100
  %102 = load i32, ptr %15, align 4, !tbaa !27
  %103 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp11RenderQueueELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %9) #7
  %104 = getelementptr inbounds %"class.imp::RenderQueue", ptr %103, i32 0, i32 3
  %105 = invoke noundef i32 @_ZN3imp8StateBin4sizeEv(ptr noundef nonnull align 8 dereferenceable(28) %104)
          to label %106 unwind label %125

106:                                              ; preds = %101
  %107 = icmp slt i32 %102, %105
  br i1 %107, label %129, label %108

108:                                              ; preds = %106
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #7
  br label %425

109:                                              ; preds = %96
  %110 = landingpad { ptr, i32 }
          cleanup
  %111 = extractvalue { ptr, i32 } %110, 0
  store ptr %111, ptr %7, align 8
  %112 = extractvalue { ptr, i32 } %110, 1
  store i32 %112, ptr %8, align 4
  br label %429

113:                                              ; preds = %97
  %114 = landingpad { ptr, i32 }
          cleanup
  %115 = extractvalue { ptr, i32 } %114, 0
  store ptr %115, ptr %7, align 8
  %116 = extractvalue { ptr, i32 } %114, 1
  store i32 %116, ptr %8, align 4
  br label %428

117:                                              ; preds = %98
  %118 = landingpad { ptr, i32 }
          cleanup
  %119 = extractvalue { ptr, i32 } %118, 0
  store ptr %119, ptr %7, align 8
  %120 = extractvalue { ptr, i32 } %118, 1
  store i32 %120, ptr %8, align 4
  br label %427

121:                                              ; preds = %99
  %122 = landingpad { ptr, i32 }
          cleanup
  %123 = extractvalue { ptr, i32 } %122, 0
  store ptr %123, ptr %7, align 8
  %124 = extractvalue { ptr, i32 } %122, 1
  store i32 %124, ptr %8, align 4
  br label %426

125:                                              ; preds = %101
  %126 = landingpad { ptr, i32 }
          cleanup
  %127 = extractvalue { ptr, i32 } %126, 0
  store ptr %127, ptr %7, align 8
  %128 = extractvalue { ptr, i32 } %126, 1
  store i32 %128, ptr %8, align 4
  br label %424

129:                                              ; preds = %106
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #7
  call void @llvm.lifetime.start.p0(i64 16, ptr %17) #7
  %130 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp11RenderQueueELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %9) #7
  %131 = getelementptr inbounds %"class.imp::RenderQueue", ptr %130, i32 0, i32 3
  %132 = load i32, ptr %15, align 4, !tbaa !27
  invoke void @_ZN3imp8StateBin6nodeAtEi(ptr dead_on_unwind writable sret(%"class.std::shared_ptr.51") align 8 %17, ptr noundef nonnull align 8 dereferenceable(28) %131, i32 noundef %132)
          to label %133 unwind label %153

133:                                              ; preds = %129
  %134 = call noundef ptr @_ZNKSt12__shared_ptrIN3imp4NodeELN9__gnu_cxx12_Lock_policyE2EE3getEv(ptr noundef nonnull align 8 dereferenceable(16) %17) #7
  %135 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp11RenderQueueELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %9) #7
  %136 = getelementptr inbounds %"class.imp::RenderQueue", ptr %135, i32 0, i32 2
  %137 = invoke noundef ptr @_ZN3imp13SceneRenderer7closestEPNS_4NodeERKSt6vectorIPNS_9LightNodeESaIS5_EE(ptr noundef nonnull align 8 dereferenceable(137) %48, ptr noundef %134, ptr noundef nonnull align 8 dereferenceable(24) %136)
          to label %138 unwind label %157

138:                                              ; preds = %133
  call void @_ZNSt12__shared_ptrIN3imp4NodeELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %17) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr %17) #7
  store ptr %137, ptr %16, align 8, !tbaa !5
  %139 = load ptr, ptr %16, align 8, !tbaa !5
  %140 = icmp ne ptr %139, null
  br i1 %140, label %141, label %166

141:                                              ; preds = %138
  %142 = load ptr, ptr %16, align 8, !tbaa !5
  %143 = getelementptr inbounds %"class.imp::LightNode", ptr %142, i32 0, i32 1
  %144 = call noundef nonnull align 8 dereferenceable(36) ptr @_ZN3imp4Vec3aSERKS0_(ptr noundef nonnull align 8 dereferenceable(36) %11, ptr noundef nonnull align 8 dereferenceable(36) %143) #7
  %145 = load ptr, ptr %16, align 8, !tbaa !5
  %146 = getelementptr inbounds %"class.imp::LightNode", ptr %145, i32 0, i32 2
  %147 = call noundef nonnull align 8 dereferenceable(36) ptr @_ZN3imp4Vec3aSERKS0_(ptr noundef nonnull align 8 dereferenceable(36) %12, ptr noundef nonnull align 8 dereferenceable(36) %146) #7
  %148 = load ptr, ptr %16, align 8, !tbaa !5
  %149 = getelementptr inbounds %"class.imp::LightNode", ptr %148, i32 0, i32 3
  %150 = load float, ptr %149, align 8, !tbaa !28
  %151 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3imp3VecILi3EfEixEj(ptr noundef nonnull align 8 dereferenceable(36) %14, i32 noundef 0)
          to label %152 unwind label %162

152:                                              ; preds = %141
  store float %150, ptr %151, align 4, !tbaa !45
  br label %166

153:                                              ; preds = %129
  %154 = landingpad { ptr, i32 }
          cleanup
  %155 = extractvalue { ptr, i32 } %154, 0
  store ptr %155, ptr %7, align 8
  %156 = extractvalue { ptr, i32 } %154, 1
  store i32 %156, ptr %8, align 4
  br label %161

157:                                              ; preds = %133
  %158 = landingpad { ptr, i32 }
          cleanup
  %159 = extractvalue { ptr, i32 } %158, 0
  store ptr %159, ptr %7, align 8
  %160 = extractvalue { ptr, i32 } %158, 1
  store i32 %160, ptr %8, align 4
  call void @_ZNSt12__shared_ptrIN3imp4NodeELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %17) #7
  br label %161

161:                                              ; preds = %157, %153
  call void @llvm.lifetime.end.p0(i64 16, ptr %17) #7
  br label %423

162:                                              ; preds = %141
  %163 = landingpad { ptr, i32 }
          cleanup
  %164 = extractvalue { ptr, i32 } %163, 0
  store ptr %164, ptr %7, align 8
  %165 = extractvalue { ptr, i32 } %163, 1
  store i32 %165, ptr %8, align 4
  br label %423

166:                                              ; preds = %152, %138
  call void @llvm.lifetime.start.p0(i64 16, ptr %18) #7
  call void @llvm.lifetime.start.p0(i64 16, ptr %19) #7
  %167 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp11RenderQueueELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %9) #7
  %168 = getelementptr inbounds %"class.imp::RenderQueue", ptr %167, i32 0, i32 3
  %169 = load i32, ptr %15, align 4, !tbaa !27
  invoke void @_ZN3imp8StateBin6nodeAtEi(ptr dead_on_unwind writable sret(%"class.std::shared_ptr.51") align 8 %19, ptr noundef nonnull align 8 dereferenceable(28) %168, i32 noundef %169)
          to label %170 unwind label %201

170:                                              ; preds = %166
  call void @_ZSt20dynamic_pointer_castIN3imp7GeoNodeENS0_4NodeEESt10shared_ptrIT_ERKS3_IT0_E(ptr dead_on_unwind writable sret(%"class.std::shared_ptr.73") align 8 %18, ptr noundef nonnull align 8 dereferenceable(16) %19) #7
  call void @_ZNSt12__shared_ptrIN3imp4NodeELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %19) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr %19) #7
  call void @llvm.lifetime.start.p0(i64 16, ptr %20) #7
  call void @llvm.lifetime.start.p0(i64 16, ptr %21) #7
  %171 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp11RenderQueueELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %9) #7
  %172 = getelementptr inbounds %"class.imp::RenderQueue", ptr %171, i32 0, i32 3
  %173 = load i32, ptr %15, align 4, !tbaa !27
  invoke void @_ZN3imp8StateBin6nodeAtEi(ptr dead_on_unwind writable sret(%"class.std::shared_ptr.51") align 8 %21, ptr noundef nonnull align 8 dereferenceable(28) %172, i32 noundef %173)
          to label %174 unwind label %205

174:                                              ; preds = %170
  call void @_ZSt20dynamic_pointer_castIN3imp9ClearNodeENS0_4NodeEESt10shared_ptrIT_ERKS3_IT0_E(ptr dead_on_unwind writable sret(%"class.std::shared_ptr.54") align 8 %20, ptr noundef nonnull align 8 dereferenceable(16) %21) #7
  call void @_ZNSt12__shared_ptrIN3imp4NodeELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %21) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr %21) #7
  %175 = call noundef zeroext i1 @_ZNKSt12__shared_ptrIN3imp7GeoNodeELN9__gnu_cxx12_Lock_policyE2EEcvbEv(ptr noundef nonnull align 8 dereferenceable(16) %18) #7
  br i1 %175, label %176, label %406

176:                                              ; preds = %174
  call void @llvm.lifetime.start.p0(i64 16, ptr %22) #7
  %177 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp7GeoNodeELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %18) #7
  %178 = getelementptr inbounds %"class.imp::GeoNode", ptr %177, i32 0, i32 2
  call void @_ZNSt10shared_ptrIN3imp8MaterialEEC2ERKS2_(ptr noundef nonnull align 8 dereferenceable(16) %22, ptr noundef nonnull align 8 dereferenceable(16) %178) #7
  %179 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp8MaterialELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %22) #7
  %180 = getelementptr inbounds %"class.imp::Material", ptr %179, i32 0, i32 5
  %181 = load float, ptr %180, align 8, !tbaa !46
  %182 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3imp3VecILi3EfEixEj(ptr noundef nonnull align 8 dereferenceable(36) %14, i32 noundef 1)
          to label %183 unwind label %209

183:                                              ; preds = %176
  store float %181, ptr %182, align 4, !tbaa !45
  %184 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp8MaterialELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %22) #7
  %185 = getelementptr inbounds %"class.imp::Material", ptr %184, i32 0, i32 6
  %186 = invoke noundef nonnull align 8 dereferenceable(36) ptr @_ZN3imp4Vec3aSILi4EEERKS0_RKNS_3VecIXT_EfEE(ptr noundef nonnull align 8 dereferenceable(36) %13, ptr noundef nonnull align 8 dereferenceable(40) %185)
          to label %187 unwind label %209

187:                                              ; preds = %183
  %188 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp8MaterialELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %22) #7
  %189 = getelementptr inbounds %"class.imp::Material", ptr %188, i32 0, i32 1
  %190 = call noundef zeroext i1 @_ZNKSt12__shared_ptrIN3imp12ImageSamplerELN9__gnu_cxx12_Lock_policyE2EEcvbEv(ptr noundef nonnull align 8 dereferenceable(16) %189) #7
  br i1 %190, label %191, label %227

191:                                              ; preds = %187
  call void @llvm.lifetime.start.p0(i64 16, ptr %23) #7
  %192 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp11RenderQueueELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %9) #7
  %193 = getelementptr inbounds %"class.imp::RenderQueue", ptr %192, i32 0, i32 3
  %194 = load i32, ptr %15, align 4, !tbaa !27
  invoke void @_ZN3imp8StateBin7stateAtEi(ptr dead_on_unwind writable sret(%"class.std::shared_ptr.57") align 8 %23, ptr noundef nonnull align 8 dereferenceable(28) %193, i32 noundef %194)
          to label %195 unwind label %213

195:                                              ; preds = %191
  %196 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp5StateELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %23) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %24) #7
  call void @llvm.lifetime.start.p0(i64 1, ptr %25) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %25) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %24, ptr noundef @.str, ptr noundef nonnull align 1 dereferenceable(1) %25)
          to label %197 unwind label %217

197:                                              ; preds = %195
  %198 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp8MaterialELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %22) #7
  %199 = getelementptr inbounds %"class.imp::Material", ptr %198, i32 0, i32 1
  invoke void @_ZN3imp5State10setUniformERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKSt10shared_ptrINS_12ImageSamplerEEi(ptr noundef nonnull align 8 dereferenceable(306) %196, ptr noundef nonnull align 8 dereferenceable(32) %24, ptr noundef nonnull align 8 dereferenceable(16) %199, i32 noundef 0)
          to label %200 unwind label %221

200:                                              ; preds = %197
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %24) #7
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %25) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %25) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %24) #7
  call void @_ZNSt12__shared_ptrIN3imp5StateELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %23) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr %23) #7
  br label %227

201:                                              ; preds = %166
  %202 = landingpad { ptr, i32 }
          cleanup
  %203 = extractvalue { ptr, i32 } %202, 0
  store ptr %203, ptr %7, align 8
  %204 = extractvalue { ptr, i32 } %202, 1
  store i32 %204, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %19) #7
  br label %422

205:                                              ; preds = %170
  %206 = landingpad { ptr, i32 }
          cleanup
  %207 = extractvalue { ptr, i32 } %206, 0
  store ptr %207, ptr %7, align 8
  %208 = extractvalue { ptr, i32 } %206, 1
  store i32 %208, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %21) #7
  br label %421

209:                                              ; preds = %323, %183, %176
  %210 = landingpad { ptr, i32 }
          cleanup
  %211 = extractvalue { ptr, i32 } %210, 0
  store ptr %211, ptr %7, align 8
  %212 = extractvalue { ptr, i32 } %210, 1
  store i32 %212, ptr %8, align 4
  br label %405

213:                                              ; preds = %191
  %214 = landingpad { ptr, i32 }
          cleanup
  %215 = extractvalue { ptr, i32 } %214, 0
  store ptr %215, ptr %7, align 8
  %216 = extractvalue { ptr, i32 } %214, 1
  store i32 %216, ptr %8, align 4
  br label %226

217:                                              ; preds = %195
  %218 = landingpad { ptr, i32 }
          cleanup
  %219 = extractvalue { ptr, i32 } %218, 0
  store ptr %219, ptr %7, align 8
  %220 = extractvalue { ptr, i32 } %218, 1
  store i32 %220, ptr %8, align 4
  br label %225

221:                                              ; preds = %197
  %222 = landingpad { ptr, i32 }
          cleanup
  %223 = extractvalue { ptr, i32 } %222, 0
  store ptr %223, ptr %7, align 8
  %224 = extractvalue { ptr, i32 } %222, 1
  store i32 %224, ptr %8, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %24) #7
  br label %225

225:                                              ; preds = %221, %217
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %25) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %25) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %24) #7
  call void @_ZNSt12__shared_ptrIN3imp5StateELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %23) #7
  br label %226

226:                                              ; preds = %225, %213
  call void @llvm.lifetime.end.p0(i64 16, ptr %23) #7
  br label %405

227:                                              ; preds = %200, %187
  %228 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp8MaterialELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %22) #7
  %229 = getelementptr inbounds %"class.imp::Material", ptr %228, i32 0, i32 3
  %230 = call noundef zeroext i1 @_ZNKSt12__shared_ptrIN3imp12ImageSamplerELN9__gnu_cxx12_Lock_policyE2EEcvbEv(ptr noundef nonnull align 8 dereferenceable(16) %229) #7
  br i1 %230, label %231, label %255

231:                                              ; preds = %227
  call void @llvm.lifetime.start.p0(i64 16, ptr %26) #7
  %232 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp11RenderQueueELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %9) #7
  %233 = getelementptr inbounds %"class.imp::RenderQueue", ptr %232, i32 0, i32 3
  %234 = load i32, ptr %15, align 4, !tbaa !27
  invoke void @_ZN3imp8StateBin7stateAtEi(ptr dead_on_unwind writable sret(%"class.std::shared_ptr.57") align 8 %26, ptr noundef nonnull align 8 dereferenceable(28) %233, i32 noundef %234)
          to label %235 unwind label %241

235:                                              ; preds = %231
  %236 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp5StateELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %26) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %27) #7
  call void @llvm.lifetime.start.p0(i64 1, ptr %28) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %28) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef @.str.1, ptr noundef nonnull align 1 dereferenceable(1) %28)
          to label %237 unwind label %245

237:                                              ; preds = %235
  %238 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp8MaterialELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %22) #7
  %239 = getelementptr inbounds %"class.imp::Material", ptr %238, i32 0, i32 3
  invoke void @_ZN3imp5State10setUniformERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKSt10shared_ptrINS_12ImageSamplerEEi(ptr noundef nonnull align 8 dereferenceable(306) %236, ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef nonnull align 8 dereferenceable(16) %239, i32 noundef 1)
          to label %240 unwind label %249

240:                                              ; preds = %237
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %27) #7
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %28) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %28) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %27) #7
  call void @_ZNSt12__shared_ptrIN3imp5StateELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %26) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr %26) #7
  br label %255

241:                                              ; preds = %231
  %242 = landingpad { ptr, i32 }
          cleanup
  %243 = extractvalue { ptr, i32 } %242, 0
  store ptr %243, ptr %7, align 8
  %244 = extractvalue { ptr, i32 } %242, 1
  store i32 %244, ptr %8, align 4
  br label %254

245:                                              ; preds = %235
  %246 = landingpad { ptr, i32 }
          cleanup
  %247 = extractvalue { ptr, i32 } %246, 0
  store ptr %247, ptr %7, align 8
  %248 = extractvalue { ptr, i32 } %246, 1
  store i32 %248, ptr %8, align 4
  br label %253

249:                                              ; preds = %237
  %250 = landingpad { ptr, i32 }
          cleanup
  %251 = extractvalue { ptr, i32 } %250, 0
  store ptr %251, ptr %7, align 8
  %252 = extractvalue { ptr, i32 } %250, 1
  store i32 %252, ptr %8, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %27) #7
  br label %253

253:                                              ; preds = %249, %245
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %28) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %28) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %27) #7
  call void @_ZNSt12__shared_ptrIN3imp5StateELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %26) #7
  br label %254

254:                                              ; preds = %253, %241
  call void @llvm.lifetime.end.p0(i64 16, ptr %26) #7
  br label %405

255:                                              ; preds = %240, %227
  %256 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp8MaterialELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %22) #7
  %257 = getelementptr inbounds %"class.imp::Material", ptr %256, i32 0, i32 2
  %258 = call noundef zeroext i1 @_ZNKSt12__shared_ptrIN3imp12ImageSamplerELN9__gnu_cxx12_Lock_policyE2EEcvbEv(ptr noundef nonnull align 8 dereferenceable(16) %257) #7
  br i1 %258, label %259, label %283

259:                                              ; preds = %255
  call void @llvm.lifetime.start.p0(i64 16, ptr %29) #7
  %260 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp11RenderQueueELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %9) #7
  %261 = getelementptr inbounds %"class.imp::RenderQueue", ptr %260, i32 0, i32 3
  %262 = load i32, ptr %15, align 4, !tbaa !27
  invoke void @_ZN3imp8StateBin7stateAtEi(ptr dead_on_unwind writable sret(%"class.std::shared_ptr.57") align 8 %29, ptr noundef nonnull align 8 dereferenceable(28) %261, i32 noundef %262)
          to label %263 unwind label %269

263:                                              ; preds = %259
  %264 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp5StateELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %29) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %30) #7
  call void @llvm.lifetime.start.p0(i64 1, ptr %31) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %31) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %30, ptr noundef @.str.2, ptr noundef nonnull align 1 dereferenceable(1) %31)
          to label %265 unwind label %273

265:                                              ; preds = %263
  %266 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp8MaterialELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %22) #7
  %267 = getelementptr inbounds %"class.imp::Material", ptr %266, i32 0, i32 2
  invoke void @_ZN3imp5State10setUniformERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKSt10shared_ptrINS_12ImageSamplerEEi(ptr noundef nonnull align 8 dereferenceable(306) %264, ptr noundef nonnull align 8 dereferenceable(32) %30, ptr noundef nonnull align 8 dereferenceable(16) %267, i32 noundef 2)
          to label %268 unwind label %277

268:                                              ; preds = %265
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %30) #7
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %31) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %31) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %30) #7
  call void @_ZNSt12__shared_ptrIN3imp5StateELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %29) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr %29) #7
  br label %283

269:                                              ; preds = %259
  %270 = landingpad { ptr, i32 }
          cleanup
  %271 = extractvalue { ptr, i32 } %270, 0
  store ptr %271, ptr %7, align 8
  %272 = extractvalue { ptr, i32 } %270, 1
  store i32 %272, ptr %8, align 4
  br label %282

273:                                              ; preds = %263
  %274 = landingpad { ptr, i32 }
          cleanup
  %275 = extractvalue { ptr, i32 } %274, 0
  store ptr %275, ptr %7, align 8
  %276 = extractvalue { ptr, i32 } %274, 1
  store i32 %276, ptr %8, align 4
  br label %281

277:                                              ; preds = %265
  %278 = landingpad { ptr, i32 }
          cleanup
  %279 = extractvalue { ptr, i32 } %278, 0
  store ptr %279, ptr %7, align 8
  %280 = extractvalue { ptr, i32 } %278, 1
  store i32 %280, ptr %8, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %30) #7
  br label %281

281:                                              ; preds = %277, %273
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %31) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %31) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %30) #7
  call void @_ZNSt12__shared_ptrIN3imp5StateELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %29) #7
  br label %282

282:                                              ; preds = %281, %269
  call void @llvm.lifetime.end.p0(i64 16, ptr %29) #7
  br label %405

283:                                              ; preds = %268, %255
  call void @llvm.lifetime.start.p0(i64 16, ptr %32) #7
  %284 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp11RenderQueueELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %9) #7
  %285 = getelementptr inbounds %"class.imp::RenderQueue", ptr %284, i32 0, i32 3
  %286 = load i32, ptr %15, align 4, !tbaa !27
  invoke void @_ZN3imp8StateBin7stateAtEi(ptr dead_on_unwind writable sret(%"class.std::shared_ptr.57") align 8 %32, ptr noundef nonnull align 8 dereferenceable(28) %285, i32 noundef %286)
          to label %287 unwind label %326

287:                                              ; preds = %283
  %288 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp5StateELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %32) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %33) #7
  call void @llvm.lifetime.start.p0(i64 1, ptr %34) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %34) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %33, ptr noundef @.str.3, ptr noundef nonnull align 1 dereferenceable(1) %34)
          to label %289 unwind label %330

289:                                              ; preds = %287
  invoke void @_ZN3imp5State10setUniformERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKNS_7Matrix4E(ptr noundef nonnull align 8 dereferenceable(306) %288, ptr noundef nonnull align 8 dereferenceable(32) %33, ptr noundef nonnull align 8 dereferenceable(88) %10)
          to label %290 unwind label %334

290:                                              ; preds = %289
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %33) #7
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %34) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %34) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %33) #7
  call void @_ZNSt12__shared_ptrIN3imp5StateELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %32) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr %32) #7
  call void @llvm.lifetime.start.p0(i64 16, ptr %35) #7
  %291 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp11RenderQueueELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %9) #7
  %292 = getelementptr inbounds %"class.imp::RenderQueue", ptr %291, i32 0, i32 3
  %293 = load i32, ptr %15, align 4, !tbaa !27
  invoke void @_ZN3imp8StateBin7stateAtEi(ptr dead_on_unwind writable sret(%"class.std::shared_ptr.57") align 8 %35, ptr noundef nonnull align 8 dereferenceable(28) %292, i32 noundef %293)
          to label %294 unwind label %340

294:                                              ; preds = %290
  %295 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp5StateELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %35) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %36) #7
  call void @llvm.lifetime.start.p0(i64 1, ptr %37) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %37) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %36, ptr noundef @.str.4, ptr noundef nonnull align 1 dereferenceable(1) %37)
          to label %296 unwind label %344

296:                                              ; preds = %294
  invoke void @_ZN3imp5State10setUniformERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKNS_4Vec3E(ptr noundef nonnull align 8 dereferenceable(306) %295, ptr noundef nonnull align 8 dereferenceable(32) %36, ptr noundef nonnull align 8 dereferenceable(36) %11)
          to label %297 unwind label %348

297:                                              ; preds = %296
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %36) #7
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %37) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %37) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %36) #7
  call void @_ZNSt12__shared_ptrIN3imp5StateELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %35) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr %35) #7
  call void @llvm.lifetime.start.p0(i64 16, ptr %38) #7
  %298 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp11RenderQueueELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %9) #7
  %299 = getelementptr inbounds %"class.imp::RenderQueue", ptr %298, i32 0, i32 3
  %300 = load i32, ptr %15, align 4, !tbaa !27
  invoke void @_ZN3imp8StateBin7stateAtEi(ptr dead_on_unwind writable sret(%"class.std::shared_ptr.57") align 8 %38, ptr noundef nonnull align 8 dereferenceable(28) %299, i32 noundef %300)
          to label %301 unwind label %354

301:                                              ; preds = %297
  %302 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp5StateELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %38) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %39) #7
  call void @llvm.lifetime.start.p0(i64 1, ptr %40) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %40) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %39, ptr noundef @.str.5, ptr noundef nonnull align 1 dereferenceable(1) %40)
          to label %303 unwind label %358

303:                                              ; preds = %301
  invoke void @_ZN3imp5State10setUniformERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKNS_4Vec3E(ptr noundef nonnull align 8 dereferenceable(306) %302, ptr noundef nonnull align 8 dereferenceable(32) %39, ptr noundef nonnull align 8 dereferenceable(36) %12)
          to label %304 unwind label %362

304:                                              ; preds = %303
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %39) #7
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %40) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %40) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %39) #7
  call void @_ZNSt12__shared_ptrIN3imp5StateELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %38) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr %38) #7
  call void @llvm.lifetime.start.p0(i64 16, ptr %41) #7
  %305 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp11RenderQueueELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %9) #7
  %306 = getelementptr inbounds %"class.imp::RenderQueue", ptr %305, i32 0, i32 3
  %307 = load i32, ptr %15, align 4, !tbaa !27
  invoke void @_ZN3imp8StateBin7stateAtEi(ptr dead_on_unwind writable sret(%"class.std::shared_ptr.57") align 8 %41, ptr noundef nonnull align 8 dereferenceable(28) %306, i32 noundef %307)
          to label %308 unwind label %368

308:                                              ; preds = %304
  %309 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp5StateELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %41) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %42) #7
  call void @llvm.lifetime.start.p0(i64 1, ptr %43) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %43) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %42, ptr noundef @.str.6, ptr noundef nonnull align 1 dereferenceable(1) %43)
          to label %310 unwind label %372

310:                                              ; preds = %308
  invoke void @_ZN3imp5State10setUniformERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKNS_4Vec3E(ptr noundef nonnull align 8 dereferenceable(306) %309, ptr noundef nonnull align 8 dereferenceable(32) %42, ptr noundef nonnull align 8 dereferenceable(36) %14)
          to label %311 unwind label %376

311:                                              ; preds = %310
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %42) #7
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %43) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %43) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %42) #7
  call void @_ZNSt12__shared_ptrIN3imp5StateELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %41) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr %41) #7
  call void @llvm.lifetime.start.p0(i64 16, ptr %44) #7
  %312 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp11RenderQueueELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %9) #7
  %313 = getelementptr inbounds %"class.imp::RenderQueue", ptr %312, i32 0, i32 3
  %314 = load i32, ptr %15, align 4, !tbaa !27
  invoke void @_ZN3imp8StateBin7stateAtEi(ptr dead_on_unwind writable sret(%"class.std::shared_ptr.57") align 8 %44, ptr noundef nonnull align 8 dereferenceable(28) %313, i32 noundef %314)
          to label %315 unwind label %382

315:                                              ; preds = %311
  %316 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp5StateELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %44) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %45) #7
  call void @llvm.lifetime.start.p0(i64 1, ptr %46) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %46) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %45, ptr noundef @.str.7, ptr noundef nonnull align 1 dereferenceable(1) %46)
          to label %317 unwind label %386

317:                                              ; preds = %315
  invoke void @_ZN3imp5State10setUniformERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKNS_4Vec3E(ptr noundef nonnull align 8 dereferenceable(306) %316, ptr noundef nonnull align 8 dereferenceable(32) %45, ptr noundef nonnull align 8 dereferenceable(36) %13)
          to label %318 unwind label %390

318:                                              ; preds = %317
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %45) #7
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %46) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %46) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %45) #7
  call void @_ZNSt12__shared_ptrIN3imp5StateELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %44) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr %44) #7
  call void @llvm.lifetime.start.p0(i64 16, ptr %47) #7
  %319 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp11RenderQueueELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %9) #7
  %320 = getelementptr inbounds %"class.imp::RenderQueue", ptr %319, i32 0, i32 3
  %321 = load i32, ptr %15, align 4, !tbaa !27
  invoke void @_ZN3imp8StateBin7stateAtEi(ptr dead_on_unwind writable sret(%"class.std::shared_ptr.57") align 8 %47, ptr noundef nonnull align 8 dereferenceable(28) %320, i32 noundef %321)
          to label %322 unwind label %396

322:                                              ; preds = %318
  invoke void @_ZN3imp11CpuRenderer10applyStateERKSt10shared_ptrINS_5StateEE(ptr noundef nonnull align 8 dereferenceable(1400) %48, ptr noundef nonnull align 8 dereferenceable(16) %47)
          to label %323 unwind label %400

323:                                              ; preds = %322
  call void @_ZNSt12__shared_ptrIN3imp5StateELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %47) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr %47) #7
  %324 = call noundef ptr @_ZNKSt12__shared_ptrIN3imp7GeoNodeELN9__gnu_cxx12_Lock_policyE2EE3getEv(ptr noundef nonnull align 8 dereferenceable(16) %18) #7
  invoke void @_ZN3imp11CpuRenderer12drawGeometryEPNS_7GeoNodeE(ptr noundef nonnull align 8 dereferenceable(1400) %48, ptr noundef %324)
          to label %325 unwind label %209

325:                                              ; preds = %323
  call void @_ZNSt12__shared_ptrIN3imp8MaterialELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %22) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr %22) #7
  br label %416

326:                                              ; preds = %283
  %327 = landingpad { ptr, i32 }
          cleanup
  %328 = extractvalue { ptr, i32 } %327, 0
  store ptr %328, ptr %7, align 8
  %329 = extractvalue { ptr, i32 } %327, 1
  store i32 %329, ptr %8, align 4
  br label %339

330:                                              ; preds = %287
  %331 = landingpad { ptr, i32 }
          cleanup
  %332 = extractvalue { ptr, i32 } %331, 0
  store ptr %332, ptr %7, align 8
  %333 = extractvalue { ptr, i32 } %331, 1
  store i32 %333, ptr %8, align 4
  br label %338

334:                                              ; preds = %289
  %335 = landingpad { ptr, i32 }
          cleanup
  %336 = extractvalue { ptr, i32 } %335, 0
  store ptr %336, ptr %7, align 8
  %337 = extractvalue { ptr, i32 } %335, 1
  store i32 %337, ptr %8, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %33) #7
  br label %338

338:                                              ; preds = %334, %330
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %34) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %34) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %33) #7
  call void @_ZNSt12__shared_ptrIN3imp5StateELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %32) #7
  br label %339

339:                                              ; preds = %338, %326
  call void @llvm.lifetime.end.p0(i64 16, ptr %32) #7
  br label %405

340:                                              ; preds = %290
  %341 = landingpad { ptr, i32 }
          cleanup
  %342 = extractvalue { ptr, i32 } %341, 0
  store ptr %342, ptr %7, align 8
  %343 = extractvalue { ptr, i32 } %341, 1
  store i32 %343, ptr %8, align 4
  br label %353

344:                                              ; preds = %294
  %345 = landingpad { ptr, i32 }
          cleanup
  %346 = extractvalue { ptr, i32 } %345, 0
  store ptr %346, ptr %7, align 8
  %347 = extractvalue { ptr, i32 } %345, 1
  store i32 %347, ptr %8, align 4
  br label %352

348:                                              ; preds = %296
  %349 = landingpad { ptr, i32 }
          cleanup
  %350 = extractvalue { ptr, i32 } %349, 0
  store ptr %350, ptr %7, align 8
  %351 = extractvalue { ptr, i32 } %349, 1
  store i32 %351, ptr %8, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %36) #7
  br label %352

352:                                              ; preds = %348, %344
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %37) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %37) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %36) #7
  call void @_ZNSt12__shared_ptrIN3imp5StateELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %35) #7
  br label %353

353:                                              ; preds = %352, %340
  call void @llvm.lifetime.end.p0(i64 16, ptr %35) #7
  br label %405

354:                                              ; preds = %297
  %355 = landingpad { ptr, i32 }
          cleanup
  %356 = extractvalue { ptr, i32 } %355, 0
  store ptr %356, ptr %7, align 8
  %357 = extractvalue { ptr, i32 } %355, 1
  store i32 %357, ptr %8, align 4
  br label %367

358:                                              ; preds = %301
  %359 = landingpad { ptr, i32 }
          cleanup
  %360 = extractvalue { ptr, i32 } %359, 0
  store ptr %360, ptr %7, align 8
  %361 = extractvalue { ptr, i32 } %359, 1
  store i32 %361, ptr %8, align 4
  br label %366

362:                                              ; preds = %303
  %363 = landingpad { ptr, i32 }
          cleanup
  %364 = extractvalue { ptr, i32 } %363, 0
  store ptr %364, ptr %7, align 8
  %365 = extractvalue { ptr, i32 } %363, 1
  store i32 %365, ptr %8, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %39) #7
  br label %366

366:                                              ; preds = %362, %358
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %40) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %40) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %39) #7
  call void @_ZNSt12__shared_ptrIN3imp5StateELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %38) #7
  br label %367

367:                                              ; preds = %366, %354
  call void @llvm.lifetime.end.p0(i64 16, ptr %38) #7
  br label %405

368:                                              ; preds = %304
  %369 = landingpad { ptr, i32 }
          cleanup
  %370 = extractvalue { ptr, i32 } %369, 0
  store ptr %370, ptr %7, align 8
  %371 = extractvalue { ptr, i32 } %369, 1
  store i32 %371, ptr %8, align 4
  br label %381

372:                                              ; preds = %308
  %373 = landingpad { ptr, i32 }
          cleanup
  %374 = extractvalue { ptr, i32 } %373, 0
  store ptr %374, ptr %7, align 8
  %375 = extractvalue { ptr, i32 } %373, 1
  store i32 %375, ptr %8, align 4
  br label %380

376:                                              ; preds = %310
  %377 = landingpad { ptr, i32 }
          cleanup
  %378 = extractvalue { ptr, i32 } %377, 0
  store ptr %378, ptr %7, align 8
  %379 = extractvalue { ptr, i32 } %377, 1
  store i32 %379, ptr %8, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %42) #7
  br label %380

380:                                              ; preds = %376, %372
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %43) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %43) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %42) #7
  call void @_ZNSt12__shared_ptrIN3imp5StateELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %41) #7
  br label %381

381:                                              ; preds = %380, %368
  call void @llvm.lifetime.end.p0(i64 16, ptr %41) #7
  br label %405

382:                                              ; preds = %311
  %383 = landingpad { ptr, i32 }
          cleanup
  %384 = extractvalue { ptr, i32 } %383, 0
  store ptr %384, ptr %7, align 8
  %385 = extractvalue { ptr, i32 } %383, 1
  store i32 %385, ptr %8, align 4
  br label %395

386:                                              ; preds = %315
  %387 = landingpad { ptr, i32 }
          cleanup
  %388 = extractvalue { ptr, i32 } %387, 0
  store ptr %388, ptr %7, align 8
  %389 = extractvalue { ptr, i32 } %387, 1
  store i32 %389, ptr %8, align 4
  br label %394

390:                                              ; preds = %317
  %391 = landingpad { ptr, i32 }
          cleanup
  %392 = extractvalue { ptr, i32 } %391, 0
  store ptr %392, ptr %7, align 8
  %393 = extractvalue { ptr, i32 } %391, 1
  store i32 %393, ptr %8, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %45) #7
  br label %394

394:                                              ; preds = %390, %386
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %46) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %46) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %45) #7
  call void @_ZNSt12__shared_ptrIN3imp5StateELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %44) #7
  br label %395

395:                                              ; preds = %394, %382
  call void @llvm.lifetime.end.p0(i64 16, ptr %44) #7
  br label %405

396:                                              ; preds = %318
  %397 = landingpad { ptr, i32 }
          cleanup
  %398 = extractvalue { ptr, i32 } %397, 0
  store ptr %398, ptr %7, align 8
  %399 = extractvalue { ptr, i32 } %397, 1
  store i32 %399, ptr %8, align 4
  br label %404

400:                                              ; preds = %322
  %401 = landingpad { ptr, i32 }
          cleanup
  %402 = extractvalue { ptr, i32 } %401, 0
  store ptr %402, ptr %7, align 8
  %403 = extractvalue { ptr, i32 } %401, 1
  store i32 %403, ptr %8, align 4
  call void @_ZNSt12__shared_ptrIN3imp5StateELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %47) #7
  br label %404

404:                                              ; preds = %400, %396
  call void @llvm.lifetime.end.p0(i64 16, ptr %47) #7
  br label %405

405:                                              ; preds = %404, %395, %381, %367, %353, %339, %282, %254, %226, %209
  call void @_ZNSt12__shared_ptrIN3imp8MaterialELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %22) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr %22) #7
  br label %420

406:                                              ; preds = %174
  %407 = call noundef zeroext i1 @_ZNKSt12__shared_ptrIN3imp9ClearNodeELN9__gnu_cxx12_Lock_policyE2EEcvbEv(ptr noundef nonnull align 8 dereferenceable(16) %20) #7
  br i1 %407, label %408, label %415

408:                                              ; preds = %406
  %409 = call noundef ptr @_ZNKSt12__shared_ptrIN3imp9ClearNodeELN9__gnu_cxx12_Lock_policyE2EE3getEv(ptr noundef nonnull align 8 dereferenceable(16) %20) #7
  invoke void @_ZN3imp11CpuRenderer10applyClearEPNS_9ClearNodeE(ptr noundef nonnull align 8 dereferenceable(1400) %48, ptr noundef %409)
          to label %410 unwind label %411

410:                                              ; preds = %408
  br label %415

411:                                              ; preds = %408
  %412 = landingpad { ptr, i32 }
          cleanup
  %413 = extractvalue { ptr, i32 } %412, 0
  store ptr %413, ptr %7, align 8
  %414 = extractvalue { ptr, i32 } %412, 1
  store i32 %414, ptr %8, align 4
  br label %420

415:                                              ; preds = %410, %406
  br label %416

416:                                              ; preds = %415, %325
  call void @_ZNSt12__shared_ptrIN3imp9ClearNodeELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %20) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr %20) #7
  call void @_ZNSt12__shared_ptrIN3imp7GeoNodeELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %18) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr %18) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #7
  br label %417

417:                                              ; preds = %416
  %418 = load i32, ptr %15, align 4, !tbaa !27
  %419 = add nsw i32 %418, 1
  store i32 %419, ptr %15, align 4, !tbaa !27
  br label %101, !llvm.loop !52

420:                                              ; preds = %411, %405
  call void @_ZNSt12__shared_ptrIN3imp9ClearNodeELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %20) #7
  br label %421

421:                                              ; preds = %420, %205
  call void @llvm.lifetime.end.p0(i64 16, ptr %20) #7
  call void @_ZNSt12__shared_ptrIN3imp7GeoNodeELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %18) #7
  br label %422

422:                                              ; preds = %421, %201
  call void @llvm.lifetime.end.p0(i64 16, ptr %18) #7
  br label %423

423:                                              ; preds = %422, %162, %161
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #7
  br label %424

424:                                              ; preds = %423, %125
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #7
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(36) %14) #7
  br label %426

425:                                              ; preds = %108
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(36) %14) #7
  call void @llvm.lifetime.end.p0(i64 40, ptr %14) #7
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(36) %13) #7
  call void @llvm.lifetime.end.p0(i64 40, ptr %13) #7
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(36) %12) #7
  call void @llvm.lifetime.end.p0(i64 40, ptr %12) #7
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(36) %11) #7
  call void @llvm.lifetime.end.p0(i64 40, ptr %11) #7
  call void @_ZN3imp7Matrix4D1Ev(ptr noundef nonnull align 8 dereferenceable(88) %10) #7
  call void @llvm.lifetime.end.p0(i64 88, ptr %10) #7
  call void @_ZNSt12__shared_ptrIN3imp11RenderQueueELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %9) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr %9) #7
  call void @_ZNSt12__shared_ptrIN3imp7VisitorELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %5) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr %5) #7
  ret void

426:                                              ; preds = %424, %121
  call void @llvm.lifetime.end.p0(i64 40, ptr %14) #7
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(36) %13) #7
  br label %427

427:                                              ; preds = %426, %117
  call void @llvm.lifetime.end.p0(i64 40, ptr %13) #7
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(36) %12) #7
  br label %428

428:                                              ; preds = %427, %113
  call void @llvm.lifetime.end.p0(i64 40, ptr %12) #7
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(36) %11) #7
  br label %429

429:                                              ; preds = %428, %109
  call void @llvm.lifetime.end.p0(i64 40, ptr %11) #7
  br label %430

430:                                              ; preds = %429, %92
  call void @_ZN3imp7Matrix4D1Ev(ptr noundef nonnull align 8 dereferenceable(88) %10) #7
  br label %431

431:                                              ; preds = %430, %88
  call void @llvm.lifetime.end.p0(i64 88, ptr %10) #7
  call void @_ZNSt12__shared_ptrIN3imp11RenderQueueELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %9) #7
  br label %432

432:                                              ; preds = %431, %84
  call void @llvm.lifetime.end.p0(i64 16, ptr %9) #7
  br label %433

433:                                              ; preds = %432, %80, %76
  call void @_ZNSt12__shared_ptrIN3imp7VisitorELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %5) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr %5) #7
  br label %434

434:                                              ; preds = %433
  %435 = load ptr, ptr %7, align 8
  %436 = load i32, ptr %8, align 4
  %437 = insertvalue { ptr, i32 } poison, ptr %435, 0
  %438 = insertvalue { ptr, i32 } %437, i32 %436, 1
  resume { ptr, i32 } %438
}

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

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

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

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

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

declare void @_ZN3imp5Graph6acceptERNS_7VisitorE(ptr noundef nonnull align 8 dereferenceable(72), ptr noundef nonnull align 8 dereferenceable(24)) #3

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

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

declare void @_ZN3imp7Matrix4C1Ev(ptr noundef nonnull align 8 dereferenceable(88)) unnamed_addr #3

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(88) ptr @_ZN3imp7Matrix4aSERKS0_(ptr noundef nonnull align 8 dereferenceable(88), ptr noundef nonnull align 8 dereferenceable(88)) #4 align 2

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

declare noundef i32 @_ZN3imp8StateBin4sizeEv(ptr noundef nonnull align 8 dereferenceable(28)) #3

declare noundef ptr @_ZN3imp13SceneRenderer7closestEPNS_4NodeERKSt6vectorIPNS_9LightNodeESaIS5_EE(ptr noundef nonnull align 8 dereferenceable(137), ptr noundef, ptr noundef nonnull align 8 dereferenceable(24)) #3

declare void @_ZN3imp8StateBin6nodeAtEi(ptr dead_on_unwind writable sret(%"class.std::shared_ptr.51") align 8, ptr noundef nonnull align 8 dereferenceable(28), i32 noundef) #3

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZN3imp3VecILi3EfEixEj(ptr noundef nonnull align 8 dereferenceable(36), i32 noundef) #2 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZSt20dynamic_pointer_castIN3imp7GeoNodeENS0_4NodeEESt10shared_ptrIT_ERKS3_IT0_E(ptr dead_on_unwind noalias writable sret(%"class.std::shared_ptr.73") align 8, ptr noundef nonnull align 8 dereferenceable(16)) #5

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZSt20dynamic_pointer_castIN3imp9ClearNodeENS0_4NodeEESt10shared_ptrIT_ERKS3_IT0_E(ptr dead_on_unwind noalias writable sret(%"class.std::shared_ptr.54") align 8, ptr noundef nonnull align 8 dereferenceable(16)) #5

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(36) ptr @_ZN3imp4Vec3aSILi4EEERKS0_RKNS_3VecIXT_EfEE(ptr noundef nonnull align 8 dereferenceable(36), ptr noundef nonnull align 8 dereferenceable(40)) #1 align 2

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

declare void @_ZN3imp8StateBin7stateAtEi(ptr dead_on_unwind writable sret(%"class.std::shared_ptr.57") align 8, ptr noundef nonnull align 8 dereferenceable(28), i32 noundef) #3

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

declare void @_ZN3imp5State10setUniformERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKSt10shared_ptrINS_12ImageSamplerEEi(ptr noundef nonnull align 8 dereferenceable(306), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16), i32 noundef) #3

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #2 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 #1 align 2

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

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

declare void @_ZN3imp5State10setUniformERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKNS_7Matrix4E(ptr noundef nonnull align 8 dereferenceable(306), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(88)) #3

declare void @_ZN3imp5State10setUniformERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKNS_4Vec3E(ptr noundef nonnull align 8 dereferenceable(306), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(36)) #3

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3imp11CpuRenderer10applyStateERKSt10shared_ptrINS_5StateEE(ptr noundef nonnull align 8 dereferenceable(1400), ptr noundef nonnull align 8 dereferenceable(16)) #1 align 2

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

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

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

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

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

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

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

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

; Function Attrs: nounwind
declare void @_ZN3imp7Matrix4D1Ev(ptr noundef nonnull align 8 dereferenceable(88)) unnamed_addr #6

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

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"vtable pointer", !8, i64 0}
!11 = !{!12, !6, i64 24}
!12 = !{!"_ZTSN3imp11RenderQueueE", !13, i64 0, !6, i64 24, !17, i64 32, !21, i64 56, !21, i64 88}
!13 = !{!"_ZTSN3imp6ObjectE", !14, i64 8}
!14 = !{!"_ZTSSt10shared_ptrIN3imp6ObjectEE", !15, i64 0}
!15 = !{!"_ZTSSt12__shared_ptrIN3imp6ObjectELN9__gnu_cxx12_Lock_policyE2EE", !6, i64 0, !16, i64 8}
!16 = !{!"_ZTSSt14__shared_countILN9__gnu_cxx12_Lock_policyE2EE", !6, i64 0}
!17 = !{!"_ZTSSt6vectorIPN3imp9LightNodeESaIS2_EE", !18, i64 0}
!18 = !{!"_ZTSSt12_Vector_baseIPN3imp9LightNodeESaIS2_EE", !19, i64 0}
!19 = !{!"_ZTSNSt12_Vector_baseIPN3imp9LightNodeESaIS2_EE12_Vector_implE", !20, i64 0}
!20 = !{!"_ZTSNSt12_Vector_baseIPN3imp9LightNodeESaIS2_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!21 = !{!"_ZTSN3imp8StateBinE", !22, i64 0, !26, i64 24}
!22 = !{!"_ZTSSt6vectorIN3imp11RenderStateESaIS1_EE", !23, i64 0}
!23 = !{!"_ZTSSt12_Vector_baseIN3imp11RenderStateESaIS1_EE", !24, i64 0}
!24 = !{!"_ZTSNSt12_Vector_baseIN3imp11RenderStateESaIS1_EE12_Vector_implE", !25, i64 0}
!25 = !{!"_ZTSNSt12_Vector_baseIN3imp11RenderStateESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!26 = !{!"int", !7, i64 0}
!27 = !{!26, !26, i64 0}
!28 = !{!29, !44, i64 624}
!29 = !{!"_ZTSN3imp9LightNodeE", !30, i64 0, !33, i64 544, !33, i64 584, !44, i64 624}
!30 = !{!"_ZTSN3imp4NodeE", !13, i64 0, !31, i64 24, !33, i64 40, !33, i64 80, !33, i64 120, !35, i64 160, !35, i64 248, !35, i64 336, !35, i64 424, !37, i64 512, !38, i64 520}
!31 = !{!"_ZTSSt10shared_ptrIN3imp5StateEE", !32, i64 0}
!32 = !{!"_ZTSSt12__shared_ptrIN3imp5StateELN9__gnu_cxx12_Lock_policyE2EE", !6, i64 0, !16, i64 8}
!33 = !{!"_ZTSN3imp4Vec3E", !34, i64 0}
!34 = !{!"_ZTSN3imp3VecILi3EfEE", !13, i64 0, !7, i64 24}
!35 = !{!"_ZTSN3imp7Matrix4E", !36, i64 0}
!36 = !{!"_ZTSN3imp6MatrixILi4ELi4EfEE", !13, i64 0, !7, i64 24}
!37 = !{!"bool", !7, i64 0}
!38 = !{!"_ZTSNSt7__cxx114listISt10shared_ptrIN3imp4NodeEESaIS4_EEE", !39, i64 0}
!39 = !{!"_ZTSNSt7__cxx1110_List_baseISt10shared_ptrIN3imp4NodeEESaIS4_EEE", !40, i64 0}
!40 = !{!"_ZTSNSt7__cxx1110_List_baseISt10shared_ptrIN3imp4NodeEESaIS4_EE10_List_implE", !41, i64 0}
!41 = !{!"_ZTSNSt8__detail17_List_node_headerE", !42, i64 0, !43, i64 16}
!42 = !{!"_ZTSNSt8__detail15_List_node_baseE", !6, i64 0, !6, i64 8}
!43 = !{!"long", !7, i64 0}
!44 = !{!"float", !7, i64 0}
!45 = !{!44, !44, i64 0}
!46 = !{!47, !44, i64 88}
!47 = !{!"_ZTSN3imp8MaterialE", !13, i64 0, !48, i64 24, !48, i64 40, !48, i64 56, !48, i64 72, !44, i64 88, !50, i64 96}
!48 = !{!"_ZTSSt10shared_ptrIN3imp12ImageSamplerEE", !49, i64 0}
!49 = !{!"_ZTSSt12__shared_ptrIN3imp12ImageSamplerELN9__gnu_cxx12_Lock_policyE2EE", !6, i64 0, !16, i64 8}
!50 = !{!"_ZTSN3imp4Vec4E", !51, i64 0}
!51 = !{!"_ZTSN3imp3VecILi4EfEE", !13, i64 0, !7, i64 24}
!52 = distinct !{!52, !53}
!53 = !{!"llvm.loop.mustprogress"}


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

%"class.std::shared_ptr.37" = type { %"class.std::__shared_ptr.38" }
%"class.std::__shared_ptr.38" = type { ptr, %"class.std::__shared_count" }
%"class.std::__shared_count" = type { ptr }
%"class.std::shared_ptr.45" = type { %"class.std::__shared_ptr.46" }
%"class.std::__shared_ptr.46" = type { ptr, %"class.std::__shared_count" }
%"class.imp::Matrix4" = type { %"class.imp::Matrix.17" }
%"class.imp::Matrix.17" = type { %"class.imp::Object", [16 x float] }
%"class.imp::Object" = type { ptr, %"class.std::shared_ptr" }
%"class.std::shared_ptr" = type { %"class.std::__shared_ptr" }
%"class.std::__shared_ptr" = type { ptr, %"class.std::__shared_count" }
%"class.imp::Vec3" = type { %"class.imp::Vec.base", [4 x i8] }
%"class.imp::Vec.base" = type <{ %"class.imp::Object", [3 x float] }>
%"class.std::shared_ptr.51" = type { %"class.std::__shared_ptr.52" }
%"class.std::__shared_ptr.52" = type { ptr, %"class.std::__shared_count" }
%"class.std::shared_ptr.73" = type { %"class.std::__shared_ptr.74" }
%"class.std::__shared_ptr.74" = type { ptr, %"class.std::__shared_count" }
%"class.std::shared_ptr.54" = type { %"class.std::__shared_ptr.55" }
%"class.std::__shared_ptr.55" = type { ptr, %"class.std::__shared_count" }
%"class.std::shared_ptr.76" = type { %"class.std::__shared_ptr.77" }
%"class.std::__shared_ptr.77" = type { ptr, %"class.std::__shared_count" }
%"class.std::shared_ptr.57" = type { %"class.std::__shared_ptr.58" }
%"class.std::__shared_ptr.58" = type { ptr, %"class.std::__shared_count" }
%"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.93" = type { i8 }

@.str = external hidden unnamed_addr constant [16 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [8 x i8], align 1

declare i32 @__gxx_personality_v0(...)

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN3imp11CpuRenderer6renderERKSt10shared_ptrINS_5GraphEE(ptr noundef nonnull align 8 dereferenceable(1400) %0, ptr noundef nonnull align 8 dereferenceable(16) %1) unnamed_addr #1 align 2 personality ptr @__gxx_personality_v0 {
  %3 = alloca %"class.std::shared_ptr.37", align 8
  %4 = alloca %"class.std::shared_ptr.45", align 8
  %5 = alloca %"class.std::shared_ptr.45", align 8
  %6 = alloca %"class.imp::Matrix4", align 8
  %7 = alloca %"class.imp::Vec3", align 8
  %8 = alloca %"class.imp::Vec3", align 8
  %9 = alloca %"class.imp::Vec3", align 8
  %10 = alloca %"class.imp::Vec3", align 8
  %11 = alloca %"class.std::shared_ptr.51", align 8
  %12 = alloca %"class.std::shared_ptr.73", align 8
  %13 = alloca %"class.std::shared_ptr.51", align 8
  %14 = alloca %"class.std::shared_ptr.54", align 8
  %15 = alloca %"class.std::shared_ptr.51", align 8
  %16 = alloca %"class.std::shared_ptr.76", align 8
  %17 = alloca %"class.std::shared_ptr.57", align 8
  %18 = alloca %"class.std::__cxx11::basic_string", align 8
  %19 = alloca %"class.std::allocator.93", align 1
  %20 = alloca %"class.std::shared_ptr.57", align 8
  %21 = alloca %"class.std::__cxx11::basic_string", align 8
  %22 = alloca %"class.std::allocator.93", align 1
  %23 = alloca %"class.std::shared_ptr.57", align 8
  %24 = alloca %"class.std::__cxx11::basic_string", align 8
  %25 = alloca %"class.std::allocator.93", align 1
  %26 = alloca %"class.std::shared_ptr.57", align 8
  %27 = alloca %"class.std::__cxx11::basic_string", align 8
  %28 = alloca %"class.std::allocator.93", align 1
  %29 = alloca %"class.std::shared_ptr.57", align 8
  %30 = alloca %"class.std::__cxx11::basic_string", align 8
  %31 = alloca %"class.std::allocator.93", align 1
  %32 = alloca %"class.std::shared_ptr.57", align 8
  %33 = alloca %"class.std::__cxx11::basic_string", align 8
  %34 = alloca %"class.std::allocator.93", align 1
  %35 = alloca %"class.std::shared_ptr.57", align 8
  %36 = alloca %"class.std::__cxx11::basic_string", align 8
  %37 = alloca %"class.std::allocator.93", align 1
  %38 = alloca %"class.std::shared_ptr.57", align 8
  %39 = alloca %"class.std::__cxx11::basic_string", align 8
  %40 = alloca %"class.std::allocator.93", align 1
  %41 = alloca %"class.std::shared_ptr.57", align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %3) #7
  %42 = getelementptr inbounds i8, ptr %0, i64 48
  call void @_ZNSt10shared_ptrIN3imp7VisitorEEC2INS0_13RenderVisitorEvEERKS_IT_E(ptr noundef nonnull align 8 dereferenceable(16) %3, ptr noundef nonnull align 8 dereferenceable(16) %42) #7
  %43 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp13RenderVisitorELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %42) #7
  call void @_ZNSt10shared_ptrIN3imp11RenderQueueEEC2EDn(ptr noundef nonnull align 8 dereferenceable(16) %4, ptr null) #7
  %44 = load ptr, ptr %43, align 8, !tbaa !5
  %45 = getelementptr inbounds i8, ptr %44, i64 48
  %46 = load ptr, ptr %45, align 8
  invoke void %46(ptr noundef nonnull align 8 dereferenceable(80) %43, ptr noundef nonnull %4)
          to label %47 unwind label %62

47:                                               ; preds = %2
  call void @_ZNSt12__shared_ptrIN3imp11RenderQueueELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %4) #7
  %48 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp5GraphELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %1) #7
  %49 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNKSt19__shared_ptr_accessIN3imp7VisitorELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEdeEv(ptr noundef nonnull align 1 dereferenceable(1) %3) #7
  invoke void @_ZN3imp5Graph6acceptERNS_7VisitorE(ptr noundef nonnull align 8 dereferenceable(72) %48, ptr noundef nonnull align 8 dereferenceable(24) %49)
          to label %50 unwind label %64

50:                                               ; preds = %47
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %5) #7
  %51 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp13RenderVisitorELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %42) #7
  call void @_ZN3imp13RenderVisitor8getQueueEv(ptr dead_on_unwind nonnull writable sret(%"class.std::shared_ptr.45") align 8 %5, ptr noundef nonnull align 8 dereferenceable(80) %51)
  call void @llvm.lifetime.start.p0(i64 88, ptr nonnull %6) #7
  invoke void @_ZN3imp7Matrix4C1Ev(ptr noundef nonnull align 8 dereferenceable(88) %6)
          to label %52 unwind label %66

52:                                               ; preds = %50
  %53 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp11RenderQueueELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %5) #7
  %54 = getelementptr inbounds i8, ptr %53, i64 24
  %55 = load ptr, ptr %54, align 8, !tbaa !8
  %.not = icmp eq ptr %55, null
  br i1 %.not, label %70, label %56

56:                                               ; preds = %52
  %57 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp11RenderQueueELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %5) #7
  %58 = getelementptr inbounds i8, ptr %57, i64 24
  %59 = load ptr, ptr %58, align 8, !tbaa !8
  %60 = call noundef nonnull align 8 dereferenceable(88) ptr @_ZNK3imp6Camera13getViewMatrixEv(ptr noundef nonnull align 8 dereferenceable(752) %59)
  %61 = invoke noundef nonnull align 8 dereferenceable(88) ptr @_ZN3imp7Matrix4aSERKS0_(ptr noundef nonnull align 8 dereferenceable(88) %6, ptr noundef nonnull align 8 dereferenceable(88) %60)
          to label %70 unwind label %68

62:                                               ; preds = %2
  %63 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt12__shared_ptrIN3imp11RenderQueueELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %4) #7
  br label %300

64:                                               ; preds = %47
  %65 = landingpad { ptr, i32 }
          cleanup
  br label %300

66:                                               ; preds = %50
  %67 = landingpad { ptr, i32 }
          cleanup
  br label %299

68:                                               ; preds = %56
  %69 = landingpad { ptr, i32 }
          cleanup
  br label %298

70:                                               ; preds = %56, %52
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %7) #7
  invoke void @_ZN3imp4Vec3C2Ef(ptr noundef nonnull align 8 dereferenceable(36) %7, float noundef 0.000000e+00)
          to label %71 unwind label %80

71:                                               ; preds = %70
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %8) #7
  invoke void @_ZN3imp4Vec3C2Ef(ptr noundef nonnull align 8 dereferenceable(36) %8, float noundef 1.000000e+00)
          to label %72 unwind label %82

72:                                               ; preds = %71
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %9) #7
  invoke void @_ZN3imp4Vec3C2Ef(ptr noundef nonnull align 8 dereferenceable(36) %9, float noundef 1.000000e+00)
          to label %73 unwind label %84

73:                                               ; preds = %72
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %10) #7
  invoke void @_ZN3imp4Vec3C2Ef(ptr noundef nonnull align 8 dereferenceable(36) %10, float noundef 0.000000e+00)
          to label %.preheader unwind label %86

.preheader:                                       ; preds = %73, %288
  %.021 = phi i32 [ %289, %288 ], [ 0, %73 ]
  %74 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp11RenderQueueELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %5) #7
  %75 = getelementptr inbounds i8, ptr %74, i64 56
  %76 = invoke noundef i32 @_ZN3imp8StateBin4sizeEv(ptr noundef nonnull align 8 dereferenceable(28) %75)
          to label %77 unwind label %88

77:                                               ; preds = %.preheader
  %78 = icmp slt i32 %.021, %76
  br i1 %78, label %90, label %79

79:                                               ; preds = %77
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(36) %10) #7
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %10) #7
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(36) %9) #7
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %9) #7
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(36) %8) #7
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %8) #7
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(36) %7) #7
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %7) #7
  call void @_ZN3imp7Matrix4D1Ev(ptr noundef nonnull align 8 dereferenceable(88) %6) #7
  call void @llvm.lifetime.end.p0(i64 88, ptr nonnull %6) #7
  call void @_ZNSt12__shared_ptrIN3imp11RenderQueueELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %5) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %5) #7
  call void @_ZNSt12__shared_ptrIN3imp7VisitorELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %3) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %3) #7
  ret void

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

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

84:                                               ; preds = %72
  %85 = landingpad { ptr, i32 }
          cleanup
  br label %295

86:                                               ; preds = %73
  %87 = landingpad { ptr, i32 }
          cleanup
  br label %294

88:                                               ; preds = %.preheader
  %89 = landingpad { ptr, i32 }
          cleanup
  br label %293

90:                                               ; preds = %77
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %11) #7
  %91 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp11RenderQueueELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %5) #7
  %92 = getelementptr inbounds i8, ptr %91, i64 56
  invoke void @_ZN3imp8StateBin6nodeAtEi(ptr dead_on_unwind nonnull writable sret(%"class.std::shared_ptr.51") align 8 %11, ptr noundef nonnull align 8 dereferenceable(28) %92, i32 noundef %.021)
          to label %93 unwind label %107

93:                                               ; preds = %90
  %94 = call noundef ptr @_ZNKSt12__shared_ptrIN3imp4NodeELN9__gnu_cxx12_Lock_policyE2EE3getEv(ptr noundef nonnull align 8 dereferenceable(16) %11) #7
  %95 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp11RenderQueueELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %5) #7
  %96 = getelementptr inbounds i8, ptr %95, i64 32
  %97 = invoke noundef ptr @_ZN3imp13SceneRenderer7closestEPNS_4NodeERKSt6vectorIPNS_9LightNodeESaIS5_EE(ptr noundef nonnull align 8 dereferenceable(137) %0, ptr noundef %94, ptr noundef nonnull align 8 dereferenceable(24) %96)
          to label %98 unwind label %109

98:                                               ; preds = %93
  call void @_ZNSt12__shared_ptrIN3imp4NodeELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %11) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %11) #7
  %.not55 = icmp eq ptr %97, null
  br i1 %.not55, label %112, label %99

99:                                               ; preds = %98
  %100 = getelementptr inbounds i8, ptr %97, i64 544
  %101 = call noundef nonnull align 8 dereferenceable(36) ptr @_ZN3imp4Vec3aSERKS0_(ptr noundef nonnull align 8 dereferenceable(36) %7, ptr noundef nonnull align 8 dereferenceable(36) %100) #7
  %102 = getelementptr inbounds i8, ptr %97, i64 584
  %103 = call noundef nonnull align 8 dereferenceable(36) ptr @_ZN3imp4Vec3aSERKS0_(ptr noundef nonnull align 8 dereferenceable(36) %8, ptr noundef nonnull align 8 dereferenceable(36) %102) #7
  %104 = getelementptr inbounds i8, ptr %97, i64 624
  %105 = load float, ptr %104, align 8, !tbaa !26
  %106 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN3imp3VecILi3EfEixEj(ptr noundef nonnull align 8 dereferenceable(36) %10, i32 noundef 0)
  store float %105, ptr %106, align 4, !tbaa !43
  br label %112

107:                                              ; preds = %90
  %108 = landingpad { ptr, i32 }
          cleanup
  br label %111

109:                                              ; preds = %93
  %110 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt12__shared_ptrIN3imp4NodeELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %11) #7
  br label %111

111:                                              ; preds = %109, %107
  %.pn = phi { ptr, i32 } [ %110, %109 ], [ %108, %107 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %11) #7
  br label %293

112:                                              ; preds = %99, %98
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %12) #7
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %13) #7
  %113 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp11RenderQueueELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %5) #7
  %114 = getelementptr inbounds i8, ptr %113, i64 56
  invoke void @_ZN3imp8StateBin6nodeAtEi(ptr dead_on_unwind nonnull writable sret(%"class.std::shared_ptr.51") align 8 %13, ptr noundef nonnull align 8 dereferenceable(28) %114, i32 noundef %.021)
          to label %115 unwind label %143

115:                                              ; preds = %112
  call void @_ZSt20dynamic_pointer_castIN3imp7GeoNodeENS0_4NodeEESt10shared_ptrIT_ERKS3_IT0_E(ptr dead_on_unwind nonnull writable sret(%"class.std::shared_ptr.73") align 8 %12, ptr noundef nonnull align 8 dereferenceable(16) %13) #7
  call void @_ZNSt12__shared_ptrIN3imp4NodeELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %13) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %13) #7
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %14) #7
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %15) #7
  %116 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp11RenderQueueELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %5) #7
  %117 = getelementptr inbounds i8, ptr %116, i64 56
  invoke void @_ZN3imp8StateBin6nodeAtEi(ptr dead_on_unwind nonnull writable sret(%"class.std::shared_ptr.51") align 8 %15, ptr noundef nonnull align 8 dereferenceable(28) %117, i32 noundef %.021)
          to label %118 unwind label %145

118:                                              ; preds = %115
  call void @_ZSt20dynamic_pointer_castIN3imp9ClearNodeENS0_4NodeEESt10shared_ptrIT_ERKS3_IT0_E(ptr dead_on_unwind nonnull writable sret(%"class.std::shared_ptr.54") align 8 %14, ptr noundef nonnull align 8 dereferenceable(16) %15) #7
  call void @_ZNSt12__shared_ptrIN3imp4NodeELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %15) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %15) #7
  %119 = call noundef zeroext i1 @_ZNKSt12__shared_ptrIN3imp7GeoNodeELN9__gnu_cxx12_Lock_policyE2EEcvbEv(ptr noundef nonnull align 8 dereferenceable(16) %12) #7
  br i1 %119, label %120, label %282

120:                                              ; preds = %118
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %16) #7
  %121 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp7GeoNodeELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %12) #7
  %122 = getelementptr inbounds i8, ptr %121, i64 560
  call void @_ZNSt10shared_ptrIN3imp8MaterialEEC2ERKS2_(ptr noundef nonnull align 8 dereferenceable(16) %16, ptr noundef nonnull align 8 dereferenceable(16) %122) #7
  %123 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp8MaterialELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %16) #7
  %124 = getelementptr inbounds i8, ptr %123, i64 88
  %125 = load float, ptr %124, align 8, !tbaa !44
  %126 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN3imp3VecILi3EfEixEj(ptr noundef nonnull align 8 dereferenceable(36) %10, i32 noundef 1)
  store float %125, ptr %126, align 4, !tbaa !43
  %127 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp8MaterialELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %16) #7
  %128 = getelementptr inbounds i8, ptr %127, i64 96
  %129 = invoke noundef nonnull align 8 dereferenceable(36) ptr @_ZN3imp4Vec3aSILi4EEERKS0_RKNS_3VecIXT_EfEE(ptr noundef nonnull align 8 dereferenceable(36) %9, ptr noundef nonnull align 8 dereferenceable(40) %128)
          to label %130 unwind label %147

130:                                              ; preds = %120
  %131 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp8MaterialELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %16) #7
  %132 = getelementptr inbounds i8, ptr %131, i64 24
  %133 = call noundef zeroext i1 @_ZNKSt12__shared_ptrIN3imp12ImageSamplerELN9__gnu_cxx12_Lock_policyE2EEcvbEv(ptr noundef nonnull align 8 dereferenceable(16) %132) #7
  br i1 %133, label %134, label %157

134:                                              ; preds = %130
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %17) #7
  %135 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp11RenderQueueELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %5) #7
  %136 = getelementptr inbounds i8, ptr %135, i64 56
  invoke void @_ZN3imp8StateBin7stateAtEi(ptr dead_on_unwind nonnull writable sret(%"class.std::shared_ptr.57") align 8 %17, ptr noundef nonnull align 8 dereferenceable(28) %136, i32 noundef %.021)
          to label %137 unwind label %149

137:                                              ; preds = %134
  %138 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp5StateELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %17) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %18) #7
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %19) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %19) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %18, ptr noundef nonnull @.str, ptr noundef nonnull align 1 dereferenceable(1) %19)
          to label %139 unwind label %151

139:                                              ; preds = %137
  %140 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp8MaterialELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %16) #7
  %141 = getelementptr inbounds i8, ptr %140, i64 24
  invoke void @_ZN3imp5State10setUniformERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKSt10shared_ptrINS_12ImageSamplerEEi(ptr noundef nonnull align 8 dereferenceable(306) %138, ptr noundef nonnull align 8 dereferenceable(32) %18, ptr noundef nonnull align 8 dereferenceable(16) %141, i32 noundef 0)
          to label %142 unwind label %153

142:                                              ; preds = %139
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %18) #7
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %19) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %19) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %18) #7
  call void @_ZNSt12__shared_ptrIN3imp5StateELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %17) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %17) #7
  br label %157

143:                                              ; preds = %112
  %144 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %13) #7
  br label %292

145:                                              ; preds = %115
  %146 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %15) #7
  br label %291

147:                                              ; preds = %233, %120
  %148 = landingpad { ptr, i32 }
          cleanup
  br label %281

149:                                              ; preds = %134
  %150 = landingpad { ptr, i32 }
          cleanup
  br label %156

151:                                              ; preds = %137
  %152 = landingpad { ptr, i32 }
          cleanup
  br label %155

153:                                              ; preds = %139
  %154 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %18) #7
  br label %155

155:                                              ; preds = %153, %151
  %.pn56 = phi { ptr, i32 } [ %154, %153 ], [ %152, %151 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %19) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %19) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %18) #7
  call void @_ZNSt12__shared_ptrIN3imp5StateELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %17) #7
  br label %156

156:                                              ; preds = %155, %149
  %.pn56.pn = phi { ptr, i32 } [ %.pn56, %155 ], [ %150, %149 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %17) #7
  br label %281

157:                                              ; preds = %142, %130
  %158 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp8MaterialELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %16) #7
  %159 = getelementptr inbounds i8, ptr %158, i64 56
  %160 = call noundef zeroext i1 @_ZNKSt12__shared_ptrIN3imp12ImageSamplerELN9__gnu_cxx12_Lock_policyE2EEcvbEv(ptr noundef nonnull align 8 dereferenceable(16) %159) #7
  br i1 %160, label %161, label %178

161:                                              ; preds = %157
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %20) #7
  %162 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp11RenderQueueELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %5) #7
  %163 = getelementptr inbounds i8, ptr %162, i64 56
  invoke void @_ZN3imp8StateBin7stateAtEi(ptr dead_on_unwind nonnull writable sret(%"class.std::shared_ptr.57") align 8 %20, ptr noundef nonnull align 8 dereferenceable(28) %163, i32 noundef %.021)
          to label %164 unwind label %170

164:                                              ; preds = %161
  %165 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp5StateELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %20) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %21) #7
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %22) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %22) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %21, ptr noundef nonnull @.str.1, ptr noundef nonnull align 1 dereferenceable(1) %22)
          to label %166 unwind label %172

166:                                              ; preds = %164
  %167 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp8MaterialELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %16) #7
  %168 = getelementptr inbounds i8, ptr %167, i64 56
  invoke void @_ZN3imp5State10setUniformERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKSt10shared_ptrINS_12ImageSamplerEEi(ptr noundef nonnull align 8 dereferenceable(306) %165, ptr noundef nonnull align 8 dereferenceable(32) %21, ptr noundef nonnull align 8 dereferenceable(16) %168, i32 noundef 1)
          to label %169 unwind label %174

169:                                              ; preds = %166
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %21) #7
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %22) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %22) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %21) #7
  call void @_ZNSt12__shared_ptrIN3imp5StateELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %20) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %20) #7
  br label %178

170:                                              ; preds = %161
  %171 = landingpad { ptr, i32 }
          cleanup
  br label %177

172:                                              ; preds = %164
  %173 = landingpad { ptr, i32 }
          cleanup
  br label %176

174:                                              ; preds = %166
  %175 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %21) #7
  br label %176

176:                                              ; preds = %174, %172
  %.pn59 = phi { ptr, i32 } [ %175, %174 ], [ %173, %172 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %22) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %22) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %21) #7
  call void @_ZNSt12__shared_ptrIN3imp5StateELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %20) #7
  br label %177

177:                                              ; preds = %176, %170
  %.pn59.pn = phi { ptr, i32 } [ %.pn59, %176 ], [ %171, %170 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %20) #7
  br label %281

178:                                              ; preds = %169, %157
  %179 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp8MaterialELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %16) #7
  %180 = getelementptr inbounds i8, ptr %179, i64 40
  %181 = call noundef zeroext i1 @_ZNKSt12__shared_ptrIN3imp12ImageSamplerELN9__gnu_cxx12_Lock_policyE2EEcvbEv(ptr noundef nonnull align 8 dereferenceable(16) %180) #7
  br i1 %181, label %182, label %199

182:                                              ; preds = %178
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %23) #7
  %183 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp11RenderQueueELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %5) #7
  %184 = getelementptr inbounds i8, ptr %183, i64 56
  invoke void @_ZN3imp8StateBin7stateAtEi(ptr dead_on_unwind nonnull writable sret(%"class.std::shared_ptr.57") align 8 %23, ptr noundef nonnull align 8 dereferenceable(28) %184, i32 noundef %.021)
          to label %185 unwind label %191

185:                                              ; preds = %182
  %186 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp5StateELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %23) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %24) #7
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %25) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %25) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %24, ptr noundef nonnull @.str.2, ptr noundef nonnull align 1 dereferenceable(1) %25)
          to label %187 unwind label %193

187:                                              ; preds = %185
  %188 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp8MaterialELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %16) #7
  %189 = getelementptr inbounds i8, ptr %188, i64 40
  invoke void @_ZN3imp5State10setUniformERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKSt10shared_ptrINS_12ImageSamplerEEi(ptr noundef nonnull align 8 dereferenceable(306) %186, ptr noundef nonnull align 8 dereferenceable(32) %24, ptr noundef nonnull align 8 dereferenceable(16) %189, i32 noundef 2)
          to label %190 unwind label %195

190:                                              ; preds = %187
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %24) #7
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %25) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %25) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %24) #7
  call void @_ZNSt12__shared_ptrIN3imp5StateELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %23) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %23) #7
  br label %199

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

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

195:                                              ; preds = %187
  %196 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %24) #7
  br label %197

197:                                              ; preds = %195, %193
  %.pn62 = phi { ptr, i32 } [ %196, %195 ], [ %194, %193 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %25) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %25) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %24) #7
  call void @_ZNSt12__shared_ptrIN3imp5StateELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %23) #7
  br label %198

198:                                              ; preds = %197, %191
  %.pn62.pn = phi { ptr, i32 } [ %.pn62, %197 ], [ %192, %191 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %23) #7
  br label %281

199:                                              ; preds = %190, %178
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %26) #7
  %200 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp11RenderQueueELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %5) #7
  %201 = getelementptr inbounds i8, ptr %200, i64 56
  invoke void @_ZN3imp8StateBin7stateAtEi(ptr dead_on_unwind nonnull writable sret(%"class.std::shared_ptr.57") align 8 %26, ptr noundef nonnull align 8 dereferenceable(28) %201, i32 noundef %.021)
          to label %202 unwind label %236

202:                                              ; preds = %199
  %203 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp5StateELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %26) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %27) #7
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %28) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %28) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef nonnull @.str.3, ptr noundef nonnull align 1 dereferenceable(1) %28)
          to label %204 unwind label %238

204:                                              ; preds = %202
  invoke void @_ZN3imp5State10setUniformERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKNS_7Matrix4E(ptr noundef nonnull align 8 dereferenceable(306) %203, ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef nonnull align 8 dereferenceable(88) %6)
          to label %205 unwind label %240

205:                                              ; preds = %204
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %27) #7
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %28) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %28) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %27) #7
  call void @_ZNSt12__shared_ptrIN3imp5StateELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %26) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %26) #7
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %29) #7
  %206 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp11RenderQueueELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %5) #7
  %207 = getelementptr inbounds i8, ptr %206, i64 56
  invoke void @_ZN3imp8StateBin7stateAtEi(ptr dead_on_unwind nonnull writable sret(%"class.std::shared_ptr.57") align 8 %29, ptr noundef nonnull align 8 dereferenceable(28) %207, i32 noundef %.021)
          to label %208 unwind label %244

208:                                              ; preds = %205
  %209 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp5StateELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %29) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %30) #7
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %31) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %31) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %30, ptr noundef nonnull @.str.4, ptr noundef nonnull align 1 dereferenceable(1) %31)
          to label %210 unwind label %246

210:                                              ; preds = %208
  invoke void @_ZN3imp5State10setUniformERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKNS_4Vec3E(ptr noundef nonnull align 8 dereferenceable(306) %209, ptr noundef nonnull align 8 dereferenceable(32) %30, ptr noundef nonnull align 8 dereferenceable(36) %7)
          to label %211 unwind label %248

211:                                              ; preds = %210
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %30) #7
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %31) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %31) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %30) #7
  call void @_ZNSt12__shared_ptrIN3imp5StateELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %29) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %29) #7
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %32) #7
  %212 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp11RenderQueueELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %5) #7
  %213 = getelementptr inbounds i8, ptr %212, i64 56
  invoke void @_ZN3imp8StateBin7stateAtEi(ptr dead_on_unwind nonnull writable sret(%"class.std::shared_ptr.57") align 8 %32, ptr noundef nonnull align 8 dereferenceable(28) %213, i32 noundef %.021)
          to label %214 unwind label %252

214:                                              ; preds = %211
  %215 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp5StateELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %32) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %33) #7
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %34) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %34) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %33, ptr noundef nonnull @.str.5, ptr noundef nonnull align 1 dereferenceable(1) %34)
          to label %216 unwind label %254

216:                                              ; preds = %214
  invoke void @_ZN3imp5State10setUniformERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKNS_4Vec3E(ptr noundef nonnull align 8 dereferenceable(306) %215, ptr noundef nonnull align 8 dereferenceable(32) %33, ptr noundef nonnull align 8 dereferenceable(36) %8)
          to label %217 unwind label %256

217:                                              ; preds = %216
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %33) #7
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %34) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %34) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %33) #7
  call void @_ZNSt12__shared_ptrIN3imp5StateELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %32) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %32) #7
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %35) #7
  %218 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp11RenderQueueELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %5) #7
  %219 = getelementptr inbounds i8, ptr %218, i64 56
  invoke void @_ZN3imp8StateBin7stateAtEi(ptr dead_on_unwind nonnull writable sret(%"class.std::shared_ptr.57") align 8 %35, ptr noundef nonnull align 8 dereferenceable(28) %219, i32 noundef %.021)
          to label %220 unwind label %260

220:                                              ; preds = %217
  %221 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp5StateELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %35) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %36) #7
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %37) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %37) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %36, ptr noundef nonnull @.str.6, ptr noundef nonnull align 1 dereferenceable(1) %37)
          to label %222 unwind label %262

222:                                              ; preds = %220
  invoke void @_ZN3imp5State10setUniformERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKNS_4Vec3E(ptr noundef nonnull align 8 dereferenceable(306) %221, ptr noundef nonnull align 8 dereferenceable(32) %36, ptr noundef nonnull align 8 dereferenceable(36) %10)
          to label %223 unwind label %264

223:                                              ; preds = %222
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %36) #7
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %37) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %37) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %36) #7
  call void @_ZNSt12__shared_ptrIN3imp5StateELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %35) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %35) #7
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %38) #7
  %224 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp11RenderQueueELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %5) #7
  %225 = getelementptr inbounds i8, ptr %224, i64 56
  invoke void @_ZN3imp8StateBin7stateAtEi(ptr dead_on_unwind nonnull writable sret(%"class.std::shared_ptr.57") align 8 %38, ptr noundef nonnull align 8 dereferenceable(28) %225, i32 noundef %.021)
          to label %226 unwind label %268

226:                                              ; preds = %223
  %227 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp5StateELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %38) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %39) #7
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %40) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %40) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %39, ptr noundef nonnull @.str.7, ptr noundef nonnull align 1 dereferenceable(1) %40)
          to label %228 unwind label %270

228:                                              ; preds = %226
  invoke void @_ZN3imp5State10setUniformERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKNS_4Vec3E(ptr noundef nonnull align 8 dereferenceable(306) %227, ptr noundef nonnull align 8 dereferenceable(32) %39, ptr noundef nonnull align 8 dereferenceable(36) %9)
          to label %229 unwind label %272

229:                                              ; preds = %228
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %39) #7
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %40) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %40) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %39) #7
  call void @_ZNSt12__shared_ptrIN3imp5StateELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %38) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %38) #7
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %41) #7
  %230 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp11RenderQueueELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %5) #7
  %231 = getelementptr inbounds i8, ptr %230, i64 56
  invoke void @_ZN3imp8StateBin7stateAtEi(ptr dead_on_unwind nonnull writable sret(%"class.std::shared_ptr.57") align 8 %41, ptr noundef nonnull align 8 dereferenceable(28) %231, i32 noundef %.021)
          to label %232 unwind label %276

232:                                              ; preds = %229
  invoke void @_ZN3imp11CpuRenderer10applyStateERKSt10shared_ptrINS_5StateEE(ptr noundef nonnull align 8 dereferenceable(1400) %0, ptr noundef nonnull align 8 dereferenceable(16) %41)
          to label %233 unwind label %278

233:                                              ; preds = %232
  call void @_ZNSt12__shared_ptrIN3imp5StateELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %41) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %41) #7
  %234 = call noundef ptr @_ZNKSt12__shared_ptrIN3imp7GeoNodeELN9__gnu_cxx12_Lock_policyE2EE3getEv(ptr noundef nonnull align 8 dereferenceable(16) %12) #7
  invoke void @_ZN3imp11CpuRenderer12drawGeometryEPNS_7GeoNodeE(ptr noundef nonnull align 8 dereferenceable(1400) %0, ptr noundef %234)
          to label %235 unwind label %147

235:                                              ; preds = %233
  call void @_ZNSt12__shared_ptrIN3imp8MaterialELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %16) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %16) #7
  br label %288

236:                                              ; preds = %199
  %237 = landingpad { ptr, i32 }
          cleanup
  br label %243

238:                                              ; preds = %202
  %239 = landingpad { ptr, i32 }
          cleanup
  br label %242

240:                                              ; preds = %204
  %241 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %27) #7
  br label %242

242:                                              ; preds = %240, %238
  %.pn65 = phi { ptr, i32 } [ %241, %240 ], [ %239, %238 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %28) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %28) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %27) #7
  call void @_ZNSt12__shared_ptrIN3imp5StateELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %26) #7
  br label %243

243:                                              ; preds = %242, %236
  %.pn65.pn = phi { ptr, i32 } [ %.pn65, %242 ], [ %237, %236 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %26) #7
  br label %281

244:                                              ; preds = %205
  %245 = landingpad { ptr, i32 }
          cleanup
  br label %251

246:                                              ; preds = %208
  %247 = landingpad { ptr, i32 }
          cleanup
  br label %250

248:                                              ; preds = %210
  %249 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %30) #7
  br label %250

250:                                              ; preds = %248, %246
  %.pn68 = phi { ptr, i32 } [ %249, %248 ], [ %247, %246 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %31) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %31) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %30) #7
  call void @_ZNSt12__shared_ptrIN3imp5StateELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %29) #7
  br label %251

251:                                              ; preds = %250, %244
  %.pn68.pn = phi { ptr, i32 } [ %.pn68, %250 ], [ %245, %244 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %29) #7
  br label %281

252:                                              ; preds = %211
  %253 = landingpad { ptr, i32 }
          cleanup
  br label %259

254:                                              ; preds = %214
  %255 = landingpad { ptr, i32 }
          cleanup
  br label %258

256:                                              ; preds = %216
  %257 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %33) #7
  br label %258

258:                                              ; preds = %256, %254
  %.pn71 = phi { ptr, i32 } [ %257, %256 ], [ %255, %254 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %34) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %34) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %33) #7
  call void @_ZNSt12__shared_ptrIN3imp5StateELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %32) #7
  br label %259

259:                                              ; preds = %258, %252
  %.pn71.pn = phi { ptr, i32 } [ %.pn71, %258 ], [ %253, %252 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %32) #7
  br label %281

260:                                              ; preds = %217
  %261 = landingpad { ptr, i32 }
          cleanup
  br label %267

262:                                              ; preds = %220
  %263 = landingpad { ptr, i32 }
          cleanup
  br label %266

264:                                              ; preds = %222
  %265 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %36) #7
  br label %266

266:                                              ; preds = %264, %262
  %.pn74 = phi { ptr, i32 } [ %265, %264 ], [ %263, %262 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %37) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %37) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %36) #7
  call void @_ZNSt12__shared_ptrIN3imp5StateELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %35) #7
  br label %267

267:                                              ; preds = %266, %260
  %.pn74.pn = phi { ptr, i32 } [ %.pn74, %266 ], [ %261, %260 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %35) #7
  br label %281

268:                                              ; preds = %223
  %269 = landingpad { ptr, i32 }
          cleanup
  br label %275

270:                                              ; preds = %226
  %271 = landingpad { ptr, i32 }
          cleanup
  br label %274

272:                                              ; preds = %228
  %273 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %39) #7
  br label %274

274:                                              ; preds = %272, %270
  %.pn77 = phi { ptr, i32 } [ %273, %272 ], [ %271, %270 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %40) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %40) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %39) #7
  call void @_ZNSt12__shared_ptrIN3imp5StateELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %38) #7
  br label %275

275:                                              ; preds = %274, %268
  %.pn77.pn = phi { ptr, i32 } [ %.pn77, %274 ], [ %269, %268 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %38) #7
  br label %281

276:                                              ; preds = %229
  %277 = landingpad { ptr, i32 }
          cleanup
  br label %280

278:                                              ; preds = %232
  %279 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt12__shared_ptrIN3imp5StateELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %41) #7
  br label %280

280:                                              ; preds = %278, %276
  %.pn80 = phi { ptr, i32 } [ %279, %278 ], [ %277, %276 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %41) #7
  br label %281

281:                                              ; preds = %280, %275, %267, %259, %251, %243, %198, %177, %156, %147
  %.pn82 = phi { ptr, i32 } [ %148, %147 ], [ %.pn80, %280 ], [ %.pn77.pn, %275 ], [ %.pn74.pn, %267 ], [ %.pn71.pn, %259 ], [ %.pn68.pn, %251 ], [ %.pn65.pn, %243 ], [ %.pn62.pn, %198 ], [ %.pn59.pn, %177 ], [ %.pn56.pn, %156 ]
  call void @_ZNSt12__shared_ptrIN3imp8MaterialELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %16) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %16) #7
  br label %290

282:                                              ; preds = %118
  %283 = call noundef zeroext i1 @_ZNKSt12__shared_ptrIN3imp9ClearNodeELN9__gnu_cxx12_Lock_policyE2EEcvbEv(ptr noundef nonnull align 8 dereferenceable(16) %14) #7
  br i1 %283, label %284, label %288

284:                                              ; preds = %282
  %285 = call noundef ptr @_ZNKSt12__shared_ptrIN3imp9ClearNodeELN9__gnu_cxx12_Lock_policyE2EE3getEv(ptr noundef nonnull align 8 dereferenceable(16) %14) #7
  invoke void @_ZN3imp11CpuRenderer10applyClearEPNS_9ClearNodeE(ptr noundef nonnull align 8 dereferenceable(1400) %0, ptr noundef %285)
          to label %288 unwind label %286

286:                                              ; preds = %284
  %287 = landingpad { ptr, i32 }
          cleanup
  br label %290

288:                                              ; preds = %282, %284, %235
  call void @_ZNSt12__shared_ptrIN3imp9ClearNodeELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %14) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %14) #7
  call void @_ZNSt12__shared_ptrIN3imp7GeoNodeELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %12) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %12) #7
  %289 = add nuw nsw i32 %.021, 1
  br label %.preheader, !llvm.loop !50

290:                                              ; preds = %286, %281
  %.pn82.pn = phi { ptr, i32 } [ %.pn82, %281 ], [ %287, %286 ]
  call void @_ZNSt12__shared_ptrIN3imp9ClearNodeELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %14) #7
  br label %291

291:                                              ; preds = %290, %145
  %.pn82.pn.pn = phi { ptr, i32 } [ %.pn82.pn, %290 ], [ %146, %145 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %14) #7
  call void @_ZNSt12__shared_ptrIN3imp7GeoNodeELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %12) #7
  br label %292

292:                                              ; preds = %291, %143
  %.pn82.pn.pn.pn = phi { ptr, i32 } [ %.pn82.pn.pn, %291 ], [ %144, %143 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %12) #7
  br label %293

293:                                              ; preds = %111, %292, %88
  %.pn82.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %89, %88 ], [ %.pn82.pn.pn.pn, %292 ], [ %.pn, %111 ]
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(36) %10) #7
  br label %294

294:                                              ; preds = %293, %86
  %.pn82.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn82.pn.pn.pn.pn.pn, %293 ], [ %87, %86 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %10) #7
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(36) %9) #7
  br label %295

295:                                              ; preds = %294, %84
  %.pn82.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn82.pn.pn.pn.pn.pn.pn, %294 ], [ %85, %84 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %9) #7
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(36) %8) #7
  br label %296

296:                                              ; preds = %295, %82
  %.pn82.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn82.pn.pn.pn.pn.pn.pn.pn, %295 ], [ %83, %82 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %8) #7
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(36) %7) #7
  br label %297

297:                                              ; preds = %296, %80
  %.pn82.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn82.pn.pn.pn.pn.pn.pn.pn.pn, %296 ], [ %81, %80 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %7) #7
  br label %298

298:                                              ; preds = %297, %68
  %.pn82.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn82.pn.pn.pn.pn.pn.pn.pn.pn.pn, %297 ], [ %69, %68 ]
  call void @_ZN3imp7Matrix4D1Ev(ptr noundef nonnull align 8 dereferenceable(88) %6) #7
  br label %299

299:                                              ; preds = %298, %66
  %.pn82.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn82.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn, %298 ], [ %67, %66 ]
  call void @llvm.lifetime.end.p0(i64 88, ptr nonnull %6) #7
  call void @_ZNSt12__shared_ptrIN3imp11RenderQueueELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %5) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %5) #7
  br label %300

300:                                              ; preds = %299, %64, %62
  %.pn82.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn82.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn, %299 ], [ %65, %64 ], [ %63, %62 ]
  call void @_ZNSt12__shared_ptrIN3imp7VisitorELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %3) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %3) #7
  resume { ptr, i32 } %.pn82.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn
}

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

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

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

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

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

declare void @_ZN3imp5Graph6acceptERNS_7VisitorE(ptr noundef nonnull align 8 dereferenceable(72), ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #3

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

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

declare void @_ZN3imp7Matrix4C1Ev(ptr noundef nonnull align 8 dereferenceable(88)) unnamed_addr #3

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(88) ptr @_ZN3imp7Matrix4aSERKS0_(ptr noundef nonnull align 8 dereferenceable(88), ptr noundef nonnull align 8 dereferenceable(88)) local_unnamed_addr #4 align 2

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

declare noundef i32 @_ZN3imp8StateBin4sizeEv(ptr noundef nonnull align 8 dereferenceable(28)) local_unnamed_addr #3

declare noundef ptr @_ZN3imp13SceneRenderer7closestEPNS_4NodeERKSt6vectorIPNS_9LightNodeESaIS5_EE(ptr noundef nonnull align 8 dereferenceable(137), ptr noundef, ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #3

declare void @_ZN3imp8StateBin6nodeAtEi(ptr dead_on_unwind writable sret(%"class.std::shared_ptr.51") align 8, ptr noundef nonnull align 8 dereferenceable(28), i32 noundef) local_unnamed_addr #3

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(36) ptr @_ZN3imp4Vec3aSERKS0_(ptr noundef nonnull align 8 dereferenceable(36), ptr noundef nonnull align 8 dereferenceable(36)) local_unnamed_addr #5 align 2

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(36) ptr @_ZN3imp4Vec3aSILi4EEERKS0_RKNS_3VecIXT_EfEE(ptr noundef nonnull align 8 dereferenceable(36), ptr noundef nonnull align 8 dereferenceable(40)) local_unnamed_addr #1 align 2

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

declare void @_ZN3imp8StateBin7stateAtEi(ptr dead_on_unwind writable sret(%"class.std::shared_ptr.57") align 8, ptr noundef nonnull align 8 dereferenceable(28), i32 noundef) local_unnamed_addr #3

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

declare void @_ZN3imp5State10setUniformERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKSt10shared_ptrINS_12ImageSamplerEEi(ptr noundef nonnull align 8 dereferenceable(306), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16), i32 noundef) local_unnamed_addr #3

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #2 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 #1 align 2

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

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

declare void @_ZN3imp5State10setUniformERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKNS_7Matrix4E(ptr noundef nonnull align 8 dereferenceable(306), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(88)) local_unnamed_addr #3

declare void @_ZN3imp5State10setUniformERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKNS_4Vec3E(ptr noundef nonnull align 8 dereferenceable(306), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(36)) local_unnamed_addr #3

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

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

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

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

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

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

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

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

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

; Function Attrs: nounwind
declare void @_ZN3imp7Matrix4D1Ev(ptr noundef nonnull align 8 dereferenceable(88)) unnamed_addr #6

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

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

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

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { 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 #3 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { 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 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { 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 = !{!"vtable pointer", !7, i64 0}
!7 = !{!"Simple C++ TBAA"}
!8 = !{!9, !13, i64 24}
!9 = !{!"_ZTSN3imp11RenderQueueE", !10, i64 0, !13, i64 24, !16, i64 32, !20, i64 56, !20, i64 88}
!10 = !{!"_ZTSN3imp6ObjectE", !11, i64 8}
!11 = !{!"_ZTSSt10shared_ptrIN3imp6ObjectEE", !12, i64 0}
!12 = !{!"_ZTSSt12__shared_ptrIN3imp6ObjectELN9__gnu_cxx12_Lock_policyE2EE", !13, i64 0, !15, i64 8}
!13 = !{!"any pointer", !14, i64 0}
!14 = !{!"omnipotent char", !7, i64 0}
!15 = !{!"_ZTSSt14__shared_countILN9__gnu_cxx12_Lock_policyE2EE", !13, i64 0}
!16 = !{!"_ZTSSt6vectorIPN3imp9LightNodeESaIS2_EE", !17, i64 0}
!17 = !{!"_ZTSSt12_Vector_baseIPN3imp9LightNodeESaIS2_EE", !18, i64 0}
!18 = !{!"_ZTSNSt12_Vector_baseIPN3imp9LightNodeESaIS2_EE12_Vector_implE", !19, i64 0}
!19 = !{!"_ZTSNSt12_Vector_baseIPN3imp9LightNodeESaIS2_EE17_Vector_impl_dataE", !13, i64 0, !13, i64 8, !13, i64 16}
!20 = !{!"_ZTSN3imp8StateBinE", !21, i64 0, !25, i64 24}
!21 = !{!"_ZTSSt6vectorIN3imp11RenderStateESaIS1_EE", !22, i64 0}
!22 = !{!"_ZTSSt12_Vector_baseIN3imp11RenderStateESaIS1_EE", !23, i64 0}
!23 = !{!"_ZTSNSt12_Vector_baseIN3imp11RenderStateESaIS1_EE12_Vector_implE", !24, i64 0}
!24 = !{!"_ZTSNSt12_Vector_baseIN3imp11RenderStateESaIS1_EE17_Vector_impl_dataE", !13, i64 0, !13, i64 8, !13, i64 16}
!25 = !{!"int", !14, i64 0}
!26 = !{!27, !42, i64 624}
!27 = !{!"_ZTSN3imp9LightNodeE", !28, i64 0, !31, i64 544, !31, i64 584, !42, i64 624}
!28 = !{!"_ZTSN3imp4NodeE", !10, i64 0, !29, i64 24, !31, i64 40, !31, i64 80, !31, i64 120, !33, i64 160, !33, i64 248, !33, i64 336, !33, i64 424, !35, i64 512, !36, i64 520}
!29 = !{!"_ZTSSt10shared_ptrIN3imp5StateEE", !30, i64 0}
!30 = !{!"_ZTSSt12__shared_ptrIN3imp5StateELN9__gnu_cxx12_Lock_policyE2EE", !13, i64 0, !15, i64 8}
!31 = !{!"_ZTSN3imp4Vec3E", !32, i64 0}
!32 = !{!"_ZTSN3imp3VecILi3EfEE", !10, i64 0, !14, i64 24}
!33 = !{!"_ZTSN3imp7Matrix4E", !34, i64 0}
!34 = !{!"_ZTSN3imp6MatrixILi4ELi4EfEE", !10, i64 0, !14, i64 24}
!35 = !{!"bool", !14, i64 0}
!36 = !{!"_ZTSNSt7__cxx114listISt10shared_ptrIN3imp4NodeEESaIS4_EEE", !37, i64 0}
!37 = !{!"_ZTSNSt7__cxx1110_List_baseISt10shared_ptrIN3imp4NodeEESaIS4_EEE", !38, i64 0}
!38 = !{!"_ZTSNSt7__cxx1110_List_baseISt10shared_ptrIN3imp4NodeEESaIS4_EE10_List_implE", !39, i64 0}
!39 = !{!"_ZTSNSt8__detail17_List_node_headerE", !40, i64 0, !41, i64 16}
!40 = !{!"_ZTSNSt8__detail15_List_node_baseE", !13, i64 0, !13, i64 8}
!41 = !{!"long", !14, i64 0}
!42 = !{!"float", !14, i64 0}
!43 = !{!42, !42, i64 0}
!44 = !{!45, !42, i64 88}
!45 = !{!"_ZTSN3imp8MaterialE", !10, i64 0, !46, i64 24, !46, i64 40, !46, i64 56, !46, i64 72, !42, i64 88, !48, i64 96}
!46 = !{!"_ZTSSt10shared_ptrIN3imp12ImageSamplerEE", !47, i64 0}
!47 = !{!"_ZTSSt12__shared_ptrIN3imp12ImageSamplerELN9__gnu_cxx12_Lock_policyE2EE", !13, i64 0, !15, i64 8}
!48 = !{!"_ZTSN3imp4Vec4E", !49, i64 0}
!49 = !{!"_ZTSN3imp3VecILi4EfEE", !10, i64 0, !14, i64 24}
!50 = distinct !{!50, !51}
!51 = !{!"llvm.loop.mustprogress"}


; Effective O3 passes: EarlyCSEPass,GlobalOptPass,InferFunctionAttrsPass,InstCombinePass,LoopSimplifyPass,LoopUnrollPass,SROAPass,SimplifyCFGPass