; LLVM IR from Lut1n/ImpGears :: src/OGLPlugin/LightingModel.ll (ZN3imp13LightingModel5applyEPNS_10GlRendererEb)

; 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.41" = type { %"class.std::__shared_ptr.42" }
%"class.std::__shared_ptr.42" = type { ptr, %"class.std::__shared_count" }
%"class.std::__shared_count" = type { ptr }
%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%"class.std::allocator" = type { i8 }
%"class.imp::Vec4" = type { %"class.imp::Vec" }
%"class.imp::Vec" = type { %"class.imp::Object", [4 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.std::shared_ptr.12" = type { %"class.std::__shared_ptr.13" }
%"class.std::__shared_ptr.13" = 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.imp::FrameOperation" = type { %"class.imp::Object", %"class.std::vector", %"class.std::vector", %"class.std::shared_ptr.3", %"class.std::shared_ptr.3", ptr, ptr }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<std::shared_ptr<imp::ImageSampler>, std::allocator<std::shared_ptr<imp::ImageSampler>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::shared_ptr<imp::ImageSampler>, std::allocator<std::shared_ptr<imp::ImageSampler>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::shared_ptr<imp::ImageSampler>, std::allocator<std::shared_ptr<imp::ImageSampler>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::shared_ptr<imp::ImageSampler>, std::allocator<std::shared_ptr<imp::ImageSampler>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::shared_ptr.3" = type { %"class.std::__shared_ptr.4" }
%"class.std::__shared_ptr.4" = type { ptr, %"class.std::__shared_count" }
%"class.imp::GlRenderer" = type { %"class.imp::SceneRenderer.base", ptr, %"class.std::shared_ptr.23", %"class.std::shared_ptr.26", %"class.std::shared_ptr.3", %"class.std::shared_ptr.3", %"class.std::shared_ptr.29", %"class.std::shared_ptr.29", %"class.std::shared_ptr.32", %"class.std::shared_ptr.32", %"class.std::shared_ptr.35", %"class.std::shared_ptr.9", %"class.std::shared_ptr.9", %"class.std::map", %"class.std::shared_ptr.41" }
%"class.imp::SceneRenderer.base" = type <{ %"class.imp::Object", i8, [5 x i8], [2 x i8], %"class.std::shared_ptr.9", %"class.std::shared_ptr.20", i32, [4 x i8], %"class.imp::Vec4", i32, i32, i32, i32, float, float, i8 }>
%"class.std::shared_ptr.20" = type { %"class.std::__shared_ptr.21" }
%"class.std::__shared_ptr.21" = type { ptr, %"class.std::__shared_count" }
%"class.std::shared_ptr.23" = type { %"class.std::__shared_ptr.24" }
%"class.std::__shared_ptr.24" = type { ptr, %"class.std::__shared_count" }
%"class.std::shared_ptr.26" = type { %"class.std::__shared_ptr.27" }
%"class.std::__shared_ptr.27" = type { ptr, %"class.std::__shared_count" }
%"class.std::shared_ptr.29" = type { %"class.std::__shared_ptr.30" }
%"class.std::__shared_ptr.30" = type { ptr, %"class.std::__shared_count" }
%"class.std::shared_ptr.32" = type { %"class.std::__shared_ptr.33" }
%"class.std::__shared_ptr.33" = type { ptr, %"class.std::__shared_count" }
%"class.std::shared_ptr.35" = type { %"class.std::__shared_ptr.36" }
%"class.std::__shared_ptr.36" = type { ptr, %"class.std::__shared_count" }
%"class.std::shared_ptr.9" = type { %"class.std::__shared_ptr.10" }
%"class.std::__shared_ptr.10" = type { ptr, %"class.std::__shared_count" }
%"class.std::map" = type { %"class.std::_Rb_tree" }
%"class.std::_Rb_tree" = type { %"struct.std::_Rb_tree<std::shared_ptr<imp::Graph>, std::pair<const std::shared_ptr<imp::Graph>, std::shared_ptr<imp::RenderQueue>>, std::_Select1st<std::pair<const std::shared_ptr<imp::Graph>, std::shared_ptr<imp::RenderQueue>>>, std::less<std::shared_ptr<imp::Graph>>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<std::shared_ptr<imp::Graph>, std::pair<const std::shared_ptr<imp::Graph>, std::shared_ptr<imp::RenderQueue>>, std::_Select1st<std::pair<const std::shared_ptr<imp::Graph>, std::shared_ptr<imp::RenderQueue>>>, std::less<std::shared_ptr<imp::Graph>>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"struct.std::_Rb_tree_header" = type { %"struct.std::_Rb_tree_node_base", i64 }
%"struct.std::_Rb_tree_node_base" = type { i32, ptr, ptr, ptr }
%"class.imp::LightingModel" = type { %"class.imp::FrameOperation", %"class.std::shared_ptr.6", %"class.std::shared_ptr.6", %"class.std::shared_ptr.9", %"class.std::shared_ptr.12", %"class.std::shared_ptr.12", float, float }
%"class.std::shared_ptr.6" = type { %"class.std::__shared_ptr.7" }
%"class.std::__shared_ptr.7" = type { ptr, %"class.std::__shared_count" }
%"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.41", %"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.imp::Matrix4" = type { %"class.imp::Matrix" }
%"class.imp::Matrix" = type { %"class.imp::Object", [16 x float] }
%"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 }

@.str.4 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [10 x i8], align 1

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

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

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

declare i32 @__gxx_personality_v0(...)

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN3imp13LightingModel5applyEPNS_10GlRendererEb(ptr noundef nonnull align 8 dereferenceable(208) %0, ptr noundef %1, i1 noundef zeroext %2) unnamed_addr #2 align 2 personality ptr @__gxx_personality_v0 {
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca i8, align 1
  %7 = alloca %"class.std::shared_ptr.41", align 8
  %8 = alloca %"class.std::__cxx11::basic_string", align 8
  %9 = alloca %"class.std::allocator", align 1
  %10 = alloca ptr, align 8
  %11 = alloca i32, align 4
  %12 = alloca %"class.imp::Vec4", align 8
  %13 = alloca %"class.std::shared_ptr.12", align 8
  %14 = alloca %"class.std::shared_ptr.12", align 8
  %15 = alloca %"class.std::shared_ptr.12", align 8
  %16 = alloca %"class.std::shared_ptr.41", align 8
  %17 = alloca %"class.imp::Vec4", align 8
  %18 = alloca %"class.imp::Vec4", align 8
  %19 = alloca %"class.imp::Vec", align 8
  %20 = alloca %"class.std::shared_ptr.41", align 8
  %21 = alloca %"class.std::__cxx11::basic_string", align 8
  %22 = alloca %"class.std::allocator", align 1
  %23 = alloca %"class.std::shared_ptr.41", align 8
  %24 = alloca %"class.std::__cxx11::basic_string", align 8
  %25 = alloca %"class.std::allocator", align 1
  %26 = alloca %"class.std::shared_ptr.41", align 8
  %27 = alloca %"class.std::__cxx11::basic_string", align 8
  %28 = alloca %"class.std::allocator", align 1
  %29 = alloca %"class.std::shared_ptr.41", align 8
  %30 = alloca %"class.std::__cxx11::basic_string", align 8
  %31 = alloca %"class.std::allocator", align 1
  %32 = alloca %"class.imp::Vec3", align 8
  %33 = alloca %"class.std::shared_ptr.41", align 8
  %34 = alloca %"class.std::__cxx11::basic_string", align 8
  %35 = alloca %"class.std::allocator", align 1
  %36 = alloca %"class.std::shared_ptr.41", align 8
  %37 = alloca %"class.std::__cxx11::basic_string", align 8
  %38 = alloca %"class.std::allocator", align 1
  %39 = alloca %"class.std::shared_ptr.12", align 8
  %40 = alloca %"class.std::shared_ptr.12", align 8
  %41 = alloca %"class.std::shared_ptr.12", align 8
  %42 = alloca %"class.std::shared_ptr.41", align 8
  store ptr %0, ptr %4, align 8, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !5
  %43 = zext i1 %2 to i8
  store i8 %43, ptr %6, align 1, !tbaa !9
  %44 = load ptr, ptr %4, align 8
  %45 = getelementptr inbounds %"class.imp::FrameOperation", ptr %44, i32 0, i32 2
  %46 = call noundef i64 @_ZNKSt6vectorISt10shared_ptrIN3imp12ImageSamplerEESaIS3_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %45) #5
  %47 = icmp ugt i64 %46, 0
  br i1 %47, label %48, label %65

48:                                               ; preds = %3
  %49 = load ptr, ptr %5, align 8, !tbaa !5
  %50 = getelementptr inbounds %"class.imp::GlRenderer", ptr %49, i32 0, i32 1
  %51 = load ptr, ptr %50, align 8, !tbaa !11
  %52 = getelementptr inbounds %"class.imp::LightingModel", ptr %44, i32 0, i32 3
  %53 = load ptr, ptr %51, align 8, !tbaa !50
  %54 = getelementptr inbounds ptr, ptr %53, i64 15
  %55 = load ptr, ptr %54, align 8
  call void %55(ptr noundef nonnull align 8 dereferenceable(24) %51, ptr noundef nonnull align 8 dereferenceable(16) %52)
  %56 = load ptr, ptr %5, align 8, !tbaa !5
  %57 = getelementptr inbounds %"class.imp::GlRenderer", ptr %56, i32 0, i32 1
  %58 = load ptr, ptr %57, align 8, !tbaa !11
  %59 = getelementptr inbounds %"class.imp::LightingModel", ptr %44, i32 0, i32 3
  %60 = load ptr, ptr %58, align 8, !tbaa !50
  %61 = getelementptr inbounds ptr, ptr %60, i64 10
  %62 = load ptr, ptr %61, align 8
  call void %62(ptr noundef nonnull align 8 dereferenceable(24) %58, ptr noundef nonnull align 8 dereferenceable(16) %59)
  %63 = getelementptr inbounds %"class.imp::LightingModel", ptr %44, i32 0, i32 3
  %64 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp12RenderTargetELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %63) #5
  call void @_ZN3imp12RenderTarget6changeEv(ptr noundef nonnull align 8 dereferenceable(99) %64)
  br label %72

65:                                               ; preds = %3
  %66 = load ptr, ptr %5, align 8, !tbaa !5
  %67 = getelementptr inbounds %"class.imp::GlRenderer", ptr %66, i32 0, i32 1
  %68 = load ptr, ptr %67, align 8, !tbaa !11
  %69 = load ptr, ptr %68, align 8, !tbaa !50
  %70 = getelementptr inbounds ptr, ptr %69, i64 16
  %71 = load ptr, ptr %70, align 8
  call void %71(ptr noundef nonnull align 8 dereferenceable(24) %68)
  br label %72

72:                                               ; preds = %65, %48
  %73 = load i8, ptr %6, align 1, !tbaa !9, !range !52, !noundef !53
  %74 = trunc i8 %73 to i1
  br i1 %74, label %75, label %119

75:                                               ; preds = %72
  call void @llvm.lifetime.start.p0(i64 16, ptr %7) #5
  %76 = getelementptr inbounds %"class.imp::LightingModel", ptr %44, i32 0, i32 2
  %77 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp5GraphELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %76) #5
  call void @_ZN3imp5Graph12getInitStateEv(ptr dead_on_unwind writable sret(%"class.std::shared_ptr.41") align 8 %7, ptr noundef nonnull align 8 dereferenceable(72) %77)
  %78 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp5StateELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %7) #5
  call void @llvm.lifetime.start.p0(i64 32, ptr %8) #5
  call void @llvm.lifetime.start.p0(i64 1, ptr %9) #5
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %9) #5
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %8, ptr noundef @.str.4, ptr noundef nonnull align 1 dereferenceable(1) %9)
          to label %79 unwind label %87

79:                                               ; preds = %75
  call void @llvm.lifetime.start.p0(i64 40, ptr %12) #5
  invoke void @_ZN3imp4Vec4C2Ef(ptr noundef nonnull align 8 dereferenceable(40) %12, float noundef 1.000000e+00)
          to label %80 unwind label %91

80:                                               ; preds = %79
  invoke void @_ZN3imp5State10setUniformERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKNS_4Vec4E(ptr noundef nonnull align 8 dereferenceable(306) %78, ptr noundef nonnull align 8 dereferenceable(32) %8, ptr noundef nonnull align 8 dereferenceable(40) %12)
          to label %81 unwind label %95

81:                                               ; preds = %80
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %12) #5
  call void @llvm.lifetime.end.p0(i64 40, ptr %12) #5
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %8) #5
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %9) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %9) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr %8) #5
  call void @_ZNSt12__shared_ptrIN3imp5StateELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %7) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %7) #5
  %82 = getelementptr inbounds %"class.imp::LightingModel", ptr %44, i32 0, i32 5
  %83 = call noundef zeroext i1 @_ZSteqIN3imp11RenderQueueEEbRKSt10shared_ptrIT_EDn(ptr noundef nonnull align 8 dereferenceable(16) %82, ptr null) #5
  br i1 %83, label %84, label %101

84:                                               ; preds = %81
  call void @llvm.lifetime.start.p0(i64 16, ptr %13) #5
  call void @_ZN3imp11RenderQueue6createIJEEESt10shared_ptrIS0_EDpOT_(ptr dead_on_unwind writable sret(%"class.std::shared_ptr.12") align 8 %13)
  %85 = getelementptr inbounds %"class.imp::LightingModel", ptr %44, i32 0, i32 5
  %86 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt10shared_ptrIN3imp11RenderQueueEEaSEOS2_(ptr noundef nonnull align 8 dereferenceable(16) %85, ptr noundef nonnull align 8 dereferenceable(16) %13) #5
  call void @_ZNSt12__shared_ptrIN3imp11RenderQueueELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %13) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %13) #5
  br label %101

87:                                               ; preds = %75
  %88 = landingpad { ptr, i32 }
          cleanup
  %89 = extractvalue { ptr, i32 } %88, 0
  store ptr %89, ptr %10, align 8
  %90 = extractvalue { ptr, i32 } %88, 1
  store i32 %90, ptr %11, align 4
  br label %100

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

95:                                               ; preds = %80
  %96 = landingpad { ptr, i32 }
          cleanup
  %97 = extractvalue { ptr, i32 } %96, 0
  store ptr %97, ptr %10, align 8
  %98 = extractvalue { ptr, i32 } %96, 1
  store i32 %98, ptr %11, align 4
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %12) #5
  br label %99

99:                                               ; preds = %95, %91
  call void @llvm.lifetime.end.p0(i64 40, ptr %12) #5
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %8) #5
  br label %100

100:                                              ; preds = %99, %87
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %9) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %9) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr %8) #5
  call void @_ZNSt12__shared_ptrIN3imp5StateELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %7) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %7) #5
  br label %321

101:                                              ; preds = %84, %81
  call void @llvm.lifetime.start.p0(i64 16, ptr %14) #5
  %102 = load ptr, ptr %5, align 8, !tbaa !5
  %103 = getelementptr inbounds %"class.imp::LightingModel", ptr %44, i32 0, i32 2
  %104 = getelementptr inbounds %"class.imp::LightingModel", ptr %44, i32 0, i32 5
  call void @_ZNSt10shared_ptrIN3imp11RenderQueueEEC2ERKS2_(ptr noundef nonnull align 8 dereferenceable(16) %15, ptr noundef nonnull align 8 dereferenceable(16) %104) #5
  invoke void @_ZN3imp10GlRenderer18applyRenderVisitorERKSt10shared_ptrINS_5GraphEES1_INS_11RenderQueueEE(ptr dead_on_unwind writable sret(%"class.std::shared_ptr.12") align 8 %14, ptr noundef nonnull align 8 dereferenceable(392) %102, ptr noundef nonnull align 8 dereferenceable(16) %103, ptr noundef %15)
          to label %105 unwind label %111

105:                                              ; preds = %101
  %106 = getelementptr inbounds %"class.imp::LightingModel", ptr %44, i32 0, i32 5
  %107 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt10shared_ptrIN3imp11RenderQueueEEaSEOS2_(ptr noundef nonnull align 8 dereferenceable(16) %106, ptr noundef nonnull align 8 dereferenceable(16) %14) #5
  call void @_ZNSt12__shared_ptrIN3imp11RenderQueueELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %14) #5
  call void @_ZNSt12__shared_ptrIN3imp11RenderQueueELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %15) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %14) #5
  %108 = load ptr, ptr %5, align 8, !tbaa !5
  %109 = getelementptr inbounds %"class.imp::LightingModel", ptr %44, i32 0, i32 5
  call void @_ZNSt10shared_ptrIN3imp5StateEEC2EDn(ptr noundef nonnull align 8 dereferenceable(16) %16, ptr null) #5
  invoke void @_ZN3imp10GlRenderer9drawQueueERSt10shared_ptrINS_11RenderQueueEES1_INS_5StateEENS_13SceneRenderer11RenderFrameE(ptr noundef nonnull align 8 dereferenceable(392) %108, ptr noundef nonnull align 8 dereferenceable(16) %109, ptr noundef %16, i32 noundef 5)
          to label %110 unwind label %115

110:                                              ; preds = %105
  call void @_ZNSt12__shared_ptrIN3imp5StateELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %16) #5
  br label %320

111:                                              ; preds = %101
  %112 = landingpad { ptr, i32 }
          cleanup
  %113 = extractvalue { ptr, i32 } %112, 0
  store ptr %113, ptr %10, align 8
  %114 = extractvalue { ptr, i32 } %112, 1
  store i32 %114, ptr %11, align 4
  call void @_ZNSt12__shared_ptrIN3imp11RenderQueueELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %15) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %14) #5
  br label %321

115:                                              ; preds = %105
  %116 = landingpad { ptr, i32 }
          cleanup
  %117 = extractvalue { ptr, i32 } %116, 0
  store ptr %117, ptr %10, align 8
  %118 = extractvalue { ptr, i32 } %116, 1
  store i32 %118, ptr %11, align 4
  call void @_ZNSt12__shared_ptrIN3imp5StateELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %16) #5
  br label %321

119:                                              ; preds = %72
  call void @llvm.lifetime.start.p0(i64 40, ptr %17) #5
  call void @_ZN3imp4Vec4C2Ev(ptr noundef nonnull align 8 dereferenceable(40) %17)
  %120 = getelementptr inbounds %"class.imp::FrameOperation", ptr %44, i32 0, i32 6
  %121 = load ptr, ptr %120, align 8, !tbaa !54
  %122 = icmp ne ptr %121, null
  br i1 %122, label %123, label %133

123:                                              ; preds = %119
  call void @llvm.lifetime.start.p0(i64 40, ptr %18) #5
  %124 = getelementptr inbounds %"class.imp::FrameOperation", ptr %44, i32 0, i32 6
  %125 = load ptr, ptr %124, align 8, !tbaa !54
  %126 = getelementptr inbounds %"class.imp::LightNode", ptr %125, i32 0, i32 1
  invoke void @_ZN3imp4Vec4C2ILi3EEERKNS_3VecIXT_EfEEf(ptr noundef nonnull align 8 dereferenceable(40) %18, ptr noundef nonnull align 8 dereferenceable(36) %126, float noundef 1.000000e+00)
          to label %127 unwind label %129

127:                                              ; preds = %123
  %128 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZN3imp4Vec4aSEOS0_(ptr noundef nonnull align 8 dereferenceable(40) %17, ptr noundef nonnull align 8 dereferenceable(40) %18) #5
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %18) #5
  call void @llvm.lifetime.end.p0(i64 40, ptr %18) #5
  br label %133

129:                                              ; preds = %123
  %130 = landingpad { ptr, i32 }
          cleanup
  %131 = extractvalue { ptr, i32 } %130, 0
  store ptr %131, ptr %10, align 8
  %132 = extractvalue { ptr, i32 } %130, 1
  store i32 %132, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 40, ptr %18) #5
  br label %319

133:                                              ; preds = %127, %119
  %134 = getelementptr inbounds %"class.imp::FrameOperation", ptr %44, i32 0, i32 5
  %135 = load ptr, ptr %134, align 8, !tbaa !60
  %136 = icmp ne ptr %135, null
  br i1 %136, label %137, label %154

137:                                              ; preds = %133
  call void @llvm.lifetime.start.p0(i64 40, ptr %19) #5
  %138 = getelementptr inbounds %"class.imp::FrameOperation", ptr %44, i32 0, i32 5
  %139 = load ptr, ptr %138, align 8, !tbaa !60
  %140 = invoke noundef nonnull align 8 dereferenceable(88) ptr @_ZNK3imp6Camera13getViewMatrixEv(ptr noundef nonnull align 8 dereferenceable(752) %139)
          to label %141 unwind label %145

141:                                              ; preds = %137
  invoke void @_ZN3impmlILi4ELi4EfEENS_3VecIXT0_ET1_EERKNS1_IXT_ES2_EERKNS_6MatrixIXT_EXT0_ES2_EE(ptr dead_on_unwind writable sret(%"class.imp::Vec") align 8 %19, ptr noundef nonnull align 8 dereferenceable(40) %17, ptr noundef nonnull align 8 dereferenceable(88) %140)
          to label %142 unwind label %145

142:                                              ; preds = %141
  %143 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3imp4Vec4aSILi4EEERKS0_RKNS_3VecIXT_EfEE(ptr noundef nonnull align 8 dereferenceable(40) %17, ptr noundef nonnull align 8 dereferenceable(40) %19)
          to label %144 unwind label %149

144:                                              ; preds = %142
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %19) #5
  call void @llvm.lifetime.end.p0(i64 40, ptr %19) #5
  br label %154

145:                                              ; preds = %141, %137
  %146 = landingpad { ptr, i32 }
          cleanup
  %147 = extractvalue { ptr, i32 } %146, 0
  store ptr %147, ptr %10, align 8
  %148 = extractvalue { ptr, i32 } %146, 1
  store i32 %148, ptr %11, align 4
  br label %153

149:                                              ; preds = %142
  %150 = landingpad { ptr, i32 }
          cleanup
  %151 = extractvalue { ptr, i32 } %150, 0
  store ptr %151, ptr %10, align 8
  %152 = extractvalue { ptr, i32 } %150, 1
  store i32 %152, ptr %11, align 4
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %19) #5
  br label %153

153:                                              ; preds = %149, %145
  call void @llvm.lifetime.end.p0(i64 40, ptr %19) #5
  br label %319

154:                                              ; preds = %144, %133
  call void @llvm.lifetime.start.p0(i64 16, ptr %20) #5
  %155 = getelementptr inbounds %"class.imp::LightingModel", ptr %44, i32 0, i32 1
  %156 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp5GraphELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %155) #5
  invoke void @_ZN3imp5Graph12getInitStateEv(ptr dead_on_unwind writable sret(%"class.std::shared_ptr.41") align 8 %20, ptr noundef nonnull align 8 dereferenceable(72) %156)
          to label %157 unwind label %208

157:                                              ; preds = %154
  %158 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp5StateELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %20) #5
  call void @llvm.lifetime.start.p0(i64 32, ptr %21) #5
  call void @llvm.lifetime.start.p0(i64 1, ptr %22) #5
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %22) #5
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %21, ptr noundef @.str.5, ptr noundef nonnull align 1 dereferenceable(1) %22)
          to label %159 unwind label %212

159:                                              ; preds = %157
  %160 = getelementptr inbounds %"class.imp::FrameOperation", ptr %44, i32 0, i32 1
  %161 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorISt10shared_ptrIN3imp12ImageSamplerEESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %160, i64 noundef 0) #5
  invoke void @_ZN3imp5State10setUniformERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKSt10shared_ptrINS_12ImageSamplerEEi(ptr noundef nonnull align 8 dereferenceable(306) %158, ptr noundef nonnull align 8 dereferenceable(32) %21, ptr noundef nonnull align 8 dereferenceable(16) %161, i32 noundef 0)
          to label %162 unwind label %216

162:                                              ; preds = %159
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %21) #5
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %22) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %22) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr %21) #5
  call void @_ZNSt12__shared_ptrIN3imp5StateELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %20) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %20) #5
  call void @llvm.lifetime.start.p0(i64 16, ptr %23) #5
  %163 = getelementptr inbounds %"class.imp::LightingModel", ptr %44, i32 0, i32 1
  %164 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp5GraphELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %163) #5
  invoke void @_ZN3imp5Graph12getInitStateEv(ptr dead_on_unwind writable sret(%"class.std::shared_ptr.41") align 8 %23, ptr noundef nonnull align 8 dereferenceable(72) %164)
          to label %165 unwind label %222

165:                                              ; preds = %162
  %166 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp5StateELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %23) #5
  call void @llvm.lifetime.start.p0(i64 32, ptr %24) #5
  call void @llvm.lifetime.start.p0(i64 1, ptr %25) #5
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %25) #5
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %24, ptr noundef @.str.6, ptr noundef nonnull align 1 dereferenceable(1) %25)
          to label %167 unwind label %226

167:                                              ; preds = %165
  %168 = getelementptr inbounds %"class.imp::FrameOperation", ptr %44, i32 0, i32 1
  %169 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorISt10shared_ptrIN3imp12ImageSamplerEESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %168, i64 noundef 1) #5
  invoke void @_ZN3imp5State10setUniformERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKSt10shared_ptrINS_12ImageSamplerEEi(ptr noundef nonnull align 8 dereferenceable(306) %166, ptr noundef nonnull align 8 dereferenceable(32) %24, ptr noundef nonnull align 8 dereferenceable(16) %169, i32 noundef 1)
          to label %170 unwind label %230

170:                                              ; preds = %167
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %24) #5
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %25) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %25) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr %24) #5
  call void @_ZNSt12__shared_ptrIN3imp5StateELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %23) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %23) #5
  call void @llvm.lifetime.start.p0(i64 16, ptr %26) #5
  %171 = getelementptr inbounds %"class.imp::LightingModel", ptr %44, i32 0, i32 1
  %172 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp5GraphELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %171) #5
  invoke void @_ZN3imp5Graph12getInitStateEv(ptr dead_on_unwind writable sret(%"class.std::shared_ptr.41") align 8 %26, ptr noundef nonnull align 8 dereferenceable(72) %172)
          to label %173 unwind label %236

173:                                              ; preds = %170
  %174 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp5StateELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %26) #5
  call void @llvm.lifetime.start.p0(i64 32, ptr %27) #5
  call void @llvm.lifetime.start.p0(i64 1, ptr %28) #5
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %28) #5
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef @.str.7, ptr noundef nonnull align 1 dereferenceable(1) %28)
          to label %175 unwind label %240

175:                                              ; preds = %173
  %176 = getelementptr inbounds %"class.imp::FrameOperation", ptr %44, i32 0, i32 1
  %177 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorISt10shared_ptrIN3imp12ImageSamplerEESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %176, i64 noundef 2) #5
  invoke void @_ZN3imp5State10setUniformERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKSt10shared_ptrINS_12ImageSamplerEEi(ptr noundef nonnull align 8 dereferenceable(306) %174, ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef nonnull align 8 dereferenceable(16) %177, i32 noundef 2)
          to label %178 unwind label %244

178:                                              ; preds = %175
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %27) #5
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %28) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %28) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr %27) #5
  call void @_ZNSt12__shared_ptrIN3imp5StateELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %26) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %26) #5
  call void @llvm.lifetime.start.p0(i64 16, ptr %29) #5
  %179 = getelementptr inbounds %"class.imp::LightingModel", ptr %44, i32 0, i32 1
  %180 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp5GraphELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %179) #5
  invoke void @_ZN3imp5Graph12getInitStateEv(ptr dead_on_unwind writable sret(%"class.std::shared_ptr.41") align 8 %29, ptr noundef nonnull align 8 dereferenceable(72) %180)
          to label %181 unwind label %250

181:                                              ; preds = %178
  %182 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp5StateELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %29) #5
  call void @llvm.lifetime.start.p0(i64 32, ptr %30) #5
  call void @llvm.lifetime.start.p0(i64 1, ptr %31) #5
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %31) #5
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %30, ptr noundef @.str.8, ptr noundef nonnull align 1 dereferenceable(1) %31)
          to label %183 unwind label %254

183:                                              ; preds = %181
  call void @llvm.lifetime.start.p0(i64 40, ptr %32) #5
  invoke void @_ZN3imp4Vec3C2ILi4EEERKNS_3VecIXT_EfEEf(ptr noundef nonnull align 8 dereferenceable(36) %32, ptr noundef nonnull align 8 dereferenceable(40) %17, float noundef 1.000000e+00)
          to label %184 unwind label %258

184:                                              ; preds = %183
  invoke void @_ZN3imp5State10setUniformERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKNS_4Vec3E(ptr noundef nonnull align 8 dereferenceable(306) %182, ptr noundef nonnull align 8 dereferenceable(32) %30, ptr noundef nonnull align 8 dereferenceable(36) %32)
          to label %185 unwind label %262

185:                                              ; preds = %184
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(36) %32) #5
  call void @llvm.lifetime.end.p0(i64 40, ptr %32) #5
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %30) #5
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %31) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %31) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr %30) #5
  call void @_ZNSt12__shared_ptrIN3imp5StateELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %29) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %29) #5
  call void @llvm.lifetime.start.p0(i64 16, ptr %33) #5
  %186 = getelementptr inbounds %"class.imp::LightingModel", ptr %44, i32 0, i32 1
  %187 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp5GraphELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %186) #5
  invoke void @_ZN3imp5Graph12getInitStateEv(ptr dead_on_unwind writable sret(%"class.std::shared_ptr.41") align 8 %33, ptr noundef nonnull align 8 dereferenceable(72) %187)
          to label %188 unwind label %269

188:                                              ; preds = %185
  %189 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp5StateELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %33) #5
  call void @llvm.lifetime.start.p0(i64 32, ptr %34) #5
  call void @llvm.lifetime.start.p0(i64 1, ptr %35) #5
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %35) #5
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %34, ptr noundef @.str.9, ptr noundef nonnull align 1 dereferenceable(1) %35)
          to label %190 unwind label %273

190:                                              ; preds = %188
  %191 = getelementptr inbounds %"class.imp::LightingModel", ptr %44, i32 0, i32 6
  %192 = load float, ptr %191, align 8, !tbaa !61
  invoke void @_ZN3imp5State10setUniformERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEf(ptr noundef nonnull align 8 dereferenceable(306) %189, ptr noundef nonnull align 8 dereferenceable(32) %34, float noundef %192)
          to label %193 unwind label %277

193:                                              ; preds = %190
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %34) #5
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %35) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %35) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr %34) #5
  call void @_ZNSt12__shared_ptrIN3imp5StateELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %33) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %33) #5
  call void @llvm.lifetime.start.p0(i64 16, ptr %36) #5
  %194 = getelementptr inbounds %"class.imp::LightingModel", ptr %44, i32 0, i32 1
  %195 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp5GraphELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %194) #5
  invoke void @_ZN3imp5Graph12getInitStateEv(ptr dead_on_unwind writable sret(%"class.std::shared_ptr.41") align 8 %36, ptr noundef nonnull align 8 dereferenceable(72) %195)
          to label %196 unwind label %283

196:                                              ; preds = %193
  %197 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp5StateELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %36) #5
  call void @llvm.lifetime.start.p0(i64 32, ptr %37) #5
  call void @llvm.lifetime.start.p0(i64 1, ptr %38) #5
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %38) #5
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %37, ptr noundef @.str.10, ptr noundef nonnull align 1 dereferenceable(1) %38)
          to label %198 unwind label %287

198:                                              ; preds = %196
  %199 = getelementptr inbounds %"class.imp::LightingModel", ptr %44, i32 0, i32 7
  %200 = load float, ptr %199, align 4, !tbaa !67
  invoke void @_ZN3imp5State10setUniformERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEf(ptr noundef nonnull align 8 dereferenceable(306) %197, ptr noundef nonnull align 8 dereferenceable(32) %37, float noundef %200)
          to label %201 unwind label %291

201:                                              ; preds = %198
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %37) #5
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %38) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %38) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr %37) #5
  call void @_ZNSt12__shared_ptrIN3imp5StateELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %36) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %36) #5
  %202 = getelementptr inbounds %"class.imp::LightingModel", ptr %44, i32 0, i32 4
  %203 = call noundef zeroext i1 @_ZSteqIN3imp11RenderQueueEEbRKSt10shared_ptrIT_EDn(ptr noundef nonnull align 8 dereferenceable(16) %202, ptr null) #5
  br i1 %203, label %204, label %301

204:                                              ; preds = %201
  call void @llvm.lifetime.start.p0(i64 16, ptr %39) #5
  invoke void @_ZN3imp11RenderQueue6createIJEEESt10shared_ptrIS0_EDpOT_(ptr dead_on_unwind writable sret(%"class.std::shared_ptr.12") align 8 %39)
          to label %205 unwind label %297

205:                                              ; preds = %204
  %206 = getelementptr inbounds %"class.imp::LightingModel", ptr %44, i32 0, i32 4
  %207 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt10shared_ptrIN3imp11RenderQueueEEaSEOS2_(ptr noundef nonnull align 8 dereferenceable(16) %206, ptr noundef nonnull align 8 dereferenceable(16) %39) #5
  call void @_ZNSt12__shared_ptrIN3imp11RenderQueueELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %39) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %39) #5
  br label %301

208:                                              ; preds = %154
  %209 = landingpad { ptr, i32 }
          cleanup
  %210 = extractvalue { ptr, i32 } %209, 0
  store ptr %210, ptr %10, align 8
  %211 = extractvalue { ptr, i32 } %209, 1
  store i32 %211, ptr %11, align 4
  br label %221

212:                                              ; preds = %157
  %213 = landingpad { ptr, i32 }
          cleanup
  %214 = extractvalue { ptr, i32 } %213, 0
  store ptr %214, ptr %10, align 8
  %215 = extractvalue { ptr, i32 } %213, 1
  store i32 %215, ptr %11, align 4
  br label %220

216:                                              ; preds = %159
  %217 = landingpad { ptr, i32 }
          cleanup
  %218 = extractvalue { ptr, i32 } %217, 0
  store ptr %218, ptr %10, align 8
  %219 = extractvalue { ptr, i32 } %217, 1
  store i32 %219, ptr %11, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %21) #5
  br label %220

220:                                              ; preds = %216, %212
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %22) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %22) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr %21) #5
  call void @_ZNSt12__shared_ptrIN3imp5StateELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %20) #5
  br label %221

221:                                              ; preds = %220, %208
  call void @llvm.lifetime.end.p0(i64 16, ptr %20) #5
  br label %319

222:                                              ; preds = %162
  %223 = landingpad { ptr, i32 }
          cleanup
  %224 = extractvalue { ptr, i32 } %223, 0
  store ptr %224, ptr %10, align 8
  %225 = extractvalue { ptr, i32 } %223, 1
  store i32 %225, ptr %11, align 4
  br label %235

226:                                              ; preds = %165
  %227 = landingpad { ptr, i32 }
          cleanup
  %228 = extractvalue { ptr, i32 } %227, 0
  store ptr %228, ptr %10, align 8
  %229 = extractvalue { ptr, i32 } %227, 1
  store i32 %229, ptr %11, align 4
  br label %234

230:                                              ; preds = %167
  %231 = landingpad { ptr, i32 }
          cleanup
  %232 = extractvalue { ptr, i32 } %231, 0
  store ptr %232, ptr %10, align 8
  %233 = extractvalue { ptr, i32 } %231, 1
  store i32 %233, ptr %11, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %24) #5
  br label %234

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

235:                                              ; preds = %234, %222
  call void @llvm.lifetime.end.p0(i64 16, ptr %23) #5
  br label %319

236:                                              ; preds = %170
  %237 = landingpad { ptr, i32 }
          cleanup
  %238 = extractvalue { ptr, i32 } %237, 0
  store ptr %238, ptr %10, align 8
  %239 = extractvalue { ptr, i32 } %237, 1
  store i32 %239, ptr %11, align 4
  br label %249

240:                                              ; preds = %173
  %241 = landingpad { ptr, i32 }
          cleanup
  %242 = extractvalue { ptr, i32 } %241, 0
  store ptr %242, ptr %10, align 8
  %243 = extractvalue { ptr, i32 } %241, 1
  store i32 %243, ptr %11, align 4
  br label %248

244:                                              ; preds = %175
  %245 = landingpad { ptr, i32 }
          cleanup
  %246 = extractvalue { ptr, i32 } %245, 0
  store ptr %246, ptr %10, align 8
  %247 = extractvalue { ptr, i32 } %245, 1
  store i32 %247, ptr %11, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %27) #5
  br label %248

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

249:                                              ; preds = %248, %236
  call void @llvm.lifetime.end.p0(i64 16, ptr %26) #5
  br label %319

250:                                              ; preds = %178
  %251 = landingpad { ptr, i32 }
          cleanup
  %252 = extractvalue { ptr, i32 } %251, 0
  store ptr %252, ptr %10, align 8
  %253 = extractvalue { ptr, i32 } %251, 1
  store i32 %253, ptr %11, align 4
  br label %268

254:                                              ; preds = %181
  %255 = landingpad { ptr, i32 }
          cleanup
  %256 = extractvalue { ptr, i32 } %255, 0
  store ptr %256, ptr %10, align 8
  %257 = extractvalue { ptr, i32 } %255, 1
  store i32 %257, ptr %11, align 4
  br label %267

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

262:                                              ; preds = %184
  %263 = landingpad { ptr, i32 }
          cleanup
  %264 = extractvalue { ptr, i32 } %263, 0
  store ptr %264, ptr %10, align 8
  %265 = extractvalue { ptr, i32 } %263, 1
  store i32 %265, ptr %11, align 4
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(36) %32) #5
  br label %266

266:                                              ; preds = %262, %258
  call void @llvm.lifetime.end.p0(i64 40, ptr %32) #5
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %30) #5
  br label %267

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

268:                                              ; preds = %267, %250
  call void @llvm.lifetime.end.p0(i64 16, ptr %29) #5
  br label %319

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

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

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

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

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

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

287:                                              ; preds = %196
  %288 = landingpad { ptr, i32 }
          cleanup
  %289 = extractvalue { ptr, i32 } %288, 0
  store ptr %289, ptr %10, align 8
  %290 = extractvalue { ptr, i32 } %288, 1
  store i32 %290, ptr %11, align 4
  br label %295

291:                                              ; preds = %198
  %292 = landingpad { ptr, i32 }
          cleanup
  %293 = extractvalue { ptr, i32 } %292, 0
  store ptr %293, ptr %10, align 8
  %294 = extractvalue { ptr, i32 } %292, 1
  store i32 %294, ptr %11, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %37) #5
  br label %295

295:                                              ; preds = %291, %287
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %38) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %38) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr %37) #5
  call void @_ZNSt12__shared_ptrIN3imp5StateELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %36) #5
  br label %296

296:                                              ; preds = %295, %283
  call void @llvm.lifetime.end.p0(i64 16, ptr %36) #5
  br label %319

297:                                              ; preds = %204
  %298 = landingpad { ptr, i32 }
          cleanup
  %299 = extractvalue { ptr, i32 } %298, 0
  store ptr %299, ptr %10, align 8
  %300 = extractvalue { ptr, i32 } %298, 1
  store i32 %300, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %39) #5
  br label %319

301:                                              ; preds = %205, %201
  call void @llvm.lifetime.start.p0(i64 16, ptr %40) #5
  %302 = load ptr, ptr %5, align 8, !tbaa !5
  %303 = getelementptr inbounds %"class.imp::LightingModel", ptr %44, i32 0, i32 1
  %304 = getelementptr inbounds %"class.imp::LightingModel", ptr %44, i32 0, i32 4
  call void @_ZNSt10shared_ptrIN3imp11RenderQueueEEC2ERKS2_(ptr noundef nonnull align 8 dereferenceable(16) %41, ptr noundef nonnull align 8 dereferenceable(16) %304) #5
  invoke void @_ZN3imp10GlRenderer18applyRenderVisitorERKSt10shared_ptrINS_5GraphEES1_INS_11RenderQueueEE(ptr dead_on_unwind writable sret(%"class.std::shared_ptr.12") align 8 %40, ptr noundef nonnull align 8 dereferenceable(392) %302, ptr noundef nonnull align 8 dereferenceable(16) %303, ptr noundef %41)
          to label %305 unwind label %311

305:                                              ; preds = %301
  %306 = getelementptr inbounds %"class.imp::LightingModel", ptr %44, i32 0, i32 4
  %307 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt10shared_ptrIN3imp11RenderQueueEEaSEOS2_(ptr noundef nonnull align 8 dereferenceable(16) %306, ptr noundef nonnull align 8 dereferenceable(16) %40) #5
  call void @_ZNSt12__shared_ptrIN3imp11RenderQueueELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %40) #5
  call void @_ZNSt12__shared_ptrIN3imp11RenderQueueELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %41) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %40) #5
  %308 = load ptr, ptr %5, align 8, !tbaa !5
  %309 = getelementptr inbounds %"class.imp::LightingModel", ptr %44, i32 0, i32 4
  call void @_ZNSt10shared_ptrIN3imp5StateEEC2EDn(ptr noundef nonnull align 8 dereferenceable(16) %42, ptr null) #5
  invoke void @_ZN3imp10GlRenderer9drawQueueERSt10shared_ptrINS_11RenderQueueEES1_INS_5StateEENS_13SceneRenderer11RenderFrameE(ptr noundef nonnull align 8 dereferenceable(392) %308, ptr noundef nonnull align 8 dereferenceable(16) %309, ptr noundef %42, i32 noundef 5)
          to label %310 unwind label %315

310:                                              ; preds = %305
  call void @_ZNSt12__shared_ptrIN3imp5StateELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %42) #5
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %17) #5
  call void @llvm.lifetime.end.p0(i64 40, ptr %17) #5
  br label %320

311:                                              ; preds = %301
  %312 = landingpad { ptr, i32 }
          cleanup
  %313 = extractvalue { ptr, i32 } %312, 0
  store ptr %313, ptr %10, align 8
  %314 = extractvalue { ptr, i32 } %312, 1
  store i32 %314, ptr %11, align 4
  call void @_ZNSt12__shared_ptrIN3imp11RenderQueueELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %41) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %40) #5
  br label %319

315:                                              ; preds = %305
  %316 = landingpad { ptr, i32 }
          cleanup
  %317 = extractvalue { ptr, i32 } %316, 0
  store ptr %317, ptr %10, align 8
  %318 = extractvalue { ptr, i32 } %316, 1
  store i32 %318, ptr %11, align 4
  call void @_ZNSt12__shared_ptrIN3imp5StateELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %42) #5
  br label %319

319:                                              ; preds = %315, %311, %297, %296, %282, %268, %249, %235, %221, %153, %129
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %17) #5
  call void @llvm.lifetime.end.p0(i64 40, ptr %17) #5
  br label %321

320:                                              ; preds = %310, %110
  ret void

321:                                              ; preds = %319, %115, %111, %100
  %322 = load ptr, ptr %10, align 8
  %323 = load i32, ptr %11, align 4
  %324 = insertvalue { ptr, i32 } poison, ptr %322, 0
  %325 = insertvalue { ptr, i32 } %324, i32 %323, 1
  resume { ptr, i32 } %325
}

declare void @_ZN3imp12RenderTarget6changeEv(ptr noundef nonnull align 8 dereferenceable(99)) #3

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3imp4Vec4C2Ef(ptr noundef nonnull align 8 dereferenceable(40), float noundef) 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 #1 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3imp11RenderQueue6createIJEEESt10shared_ptrIS0_EDpOT_(ptr dead_on_unwind noalias writable sret(%"class.std::shared_ptr.12") align 8) #2 align 2

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

declare void @_ZN3imp10GlRenderer18applyRenderVisitorERKSt10shared_ptrINS_5GraphEES1_INS_11RenderQueueEE(ptr dead_on_unwind writable sret(%"class.std::shared_ptr.12") align 8, ptr noundef nonnull align 8 dereferenceable(392), ptr noundef nonnull align 8 dereferenceable(16), ptr noundef) #3

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

declare void @_ZN3imp10GlRenderer9drawQueueERSt10shared_ptrINS_11RenderQueueEES1_INS_5StateEENS_13SceneRenderer11RenderFrameE(ptr noundef nonnull align 8 dereferenceable(392), ptr noundef nonnull align 8 dereferenceable(16), ptr noundef, i32 noundef) #3

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3impmlILi4ELi4EfEENS_3VecIXT0_ET1_EERKNS1_IXT_ES2_EERKNS_6MatrixIXT_EXT0_ES2_EE(ptr dead_on_unwind noalias writable sret(%"class.imp::Vec") align 8, ptr noundef nonnull align 8 dereferenceable(40), ptr noundef nonnull align 8 dereferenceable(88)) #2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(40) ptr @_ZN3imp4Vec4aSILi4EEERKS0_RKNS_3VecIXT_EfEE(ptr noundef nonnull align 8 dereferenceable(40), ptr noundef nonnull align 8 dereferenceable(40)) #1 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 dso_local noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorISt10shared_ptrIN3imp12ImageSamplerEESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) #1 align 2

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 @_ZN3imp4Vec3C2ILi4EEERKNS_3VecIXT_EfEEf(ptr noundef nonnull align 8 dereferenceable(36), ptr noundef nonnull align 8 dereferenceable(40), float noundef) unnamed_addr #2 align 2

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

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"bool", !7, i64 0}
!11 = !{!12, !6, i64 144}
!12 = !{!"_ZTSN3imp10GlRendererE", !13, i64 0, !6, i64 144, !27, i64 152, !29, i64 168, !31, i64 184, !31, i64 200, !33, i64 216, !33, i64 232, !35, i64 248, !35, i64 264, !37, i64 280, !18, i64 296, !18, i64 312, !39, i64 328, !48, i64 376}
!13 = !{!"_ZTSN3imp13SceneRendererE", !14, i64 0, !10, i64 24, !7, i64 25, !18, i64 32, !20, i64 48, !22, i64 64, !23, i64 72, !25, i64 112, !25, i64 116, !25, i64 120, !25, i64 124, !26, i64 128, !26, i64 132, !10, i64 136}
!14 = !{!"_ZTSN3imp6ObjectE", !15, i64 8}
!15 = !{!"_ZTSSt10shared_ptrIN3imp6ObjectEE", !16, i64 0}
!16 = !{!"_ZTSSt12__shared_ptrIN3imp6ObjectELN9__gnu_cxx12_Lock_policyE2EE", !6, i64 0, !17, i64 8}
!17 = !{!"_ZTSSt14__shared_countILN9__gnu_cxx12_Lock_policyE2EE", !6, i64 0}
!18 = !{!"_ZTSSt10shared_ptrIN3imp12RenderTargetEE", !19, i64 0}
!19 = !{!"_ZTSSt12__shared_ptrIN3imp12RenderTargetELN9__gnu_cxx12_Lock_policyE2EE", !6, i64 0, !17, i64 8}
!20 = !{!"_ZTSSt10shared_ptrIN3imp13RenderVisitorEE", !21, i64 0}
!21 = !{!"_ZTSSt12__shared_ptrIN3imp13RenderVisitorELN9__gnu_cxx12_Lock_policyE2EE", !6, i64 0, !17, i64 8}
!22 = !{!"_ZTSN3imp13SceneRenderer11RenderFrameE", !7, i64 0}
!23 = !{!"_ZTSN3imp4Vec4E", !24, i64 0}
!24 = !{!"_ZTSN3imp3VecILi4EfEE", !14, i64 0, !7, i64 24}
!25 = !{!"int", !7, i64 0}
!26 = !{!"float", !7, i64 0}
!27 = !{!"_ZTSSt10shared_ptrIN3imp8PipelineEE", !28, i64 0}
!28 = !{!"_ZTSSt12__shared_ptrIN3imp8PipelineELN9__gnu_cxx12_Lock_policyE2EE", !6, i64 0, !17, i64 8}
!29 = !{!"_ZTSSt10shared_ptrIN3imp13LightingModelEE", !30, i64 0}
!30 = !{!"_ZTSSt12__shared_ptrIN3imp13LightingModelELN9__gnu_cxx12_Lock_policyE2EE", !6, i64 0, !17, i64 8}
!31 = !{!"_ZTSSt10shared_ptrIN3imp14CubeMapSamplerEE", !32, i64 0}
!32 = !{!"_ZTSSt12__shared_ptrIN3imp14CubeMapSamplerELN9__gnu_cxx12_Lock_policyE2EE", !6, i64 0, !17, i64 8}
!33 = !{!"_ZTSSt10shared_ptrIN3imp15RenderToCubeMapEE", !34, i64 0}
!34 = !{!"_ZTSSt12__shared_ptrIN3imp15RenderToCubeMapELN9__gnu_cxx12_Lock_policyE2EE", !6, i64 0, !17, i64 8}
!35 = !{!"_ZTSSt10shared_ptrIN3imp14ReflexionModelEE", !36, i64 0}
!36 = !{!"_ZTSSt12__shared_ptrIN3imp14ReflexionModelELN9__gnu_cxx12_Lock_policyE2EE", !6, i64 0, !17, i64 8}
!37 = !{!"_ZTSSt10shared_ptrIN3imp9CopyFrameEE", !38, i64 0}
!38 = !{!"_ZTSSt12__shared_ptrIN3imp9CopyFrameELN9__gnu_cxx12_Lock_policyE2EE", !6, i64 0, !17, i64 8}
!39 = !{!"_ZTSSt3mapISt10shared_ptrIN3imp5GraphEES0_INS1_11RenderQueueEESt4lessIS3_ESaISt4pairIKS3_S5_EEE", !40, i64 0}
!40 = !{!"_ZTSSt8_Rb_treeISt10shared_ptrIN3imp5GraphEESt4pairIKS3_S0_INS1_11RenderQueueEEESt10_Select1stIS8_ESt4lessIS3_ESaIS8_EE", !41, i64 0}
!41 = !{!"_ZTSNSt8_Rb_treeISt10shared_ptrIN3imp5GraphEESt4pairIKS3_S0_INS1_11RenderQueueEEESt10_Select1stIS8_ESt4lessIS3_ESaIS8_EE13_Rb_tree_implISC_Lb1EEE", !42, i64 0, !44, i64 8}
!42 = !{!"_ZTSSt20_Rb_tree_key_compareISt4lessISt10shared_ptrIN3imp5GraphEEEE", !43, i64 0}
!43 = !{!"_ZTSSt4lessISt10shared_ptrIN3imp5GraphEEE"}
!44 = !{!"_ZTSSt15_Rb_tree_header", !45, i64 0, !47, i64 32}
!45 = !{!"_ZTSSt18_Rb_tree_node_base", !46, i64 0, !6, i64 8, !6, i64 16, !6, i64 24}
!46 = !{!"_ZTSSt14_Rb_tree_color", !7, i64 0}
!47 = !{!"long", !7, i64 0}
!48 = !{!"_ZTSSt10shared_ptrIN3imp5StateEE", !49, i64 0}
!49 = !{!"_ZTSSt12__shared_ptrIN3imp5StateELN9__gnu_cxx12_Lock_policyE2EE", !6, i64 0, !17, i64 8}
!50 = !{!51, !51, i64 0}
!51 = !{!"vtable pointer", !8, i64 0}
!52 = !{i8 0, i8 2}
!53 = !{}
!54 = !{!55, !6, i64 112}
!55 = !{!"_ZTSN3imp14FrameOperationE", !14, i64 0, !56, i64 24, !56, i64 48, !31, i64 72, !31, i64 88, !6, i64 104, !6, i64 112}
!56 = !{!"_ZTSSt6vectorISt10shared_ptrIN3imp12ImageSamplerEESaIS3_EE", !57, i64 0}
!57 = !{!"_ZTSSt12_Vector_baseISt10shared_ptrIN3imp12ImageSamplerEESaIS3_EE", !58, i64 0}
!58 = !{!"_ZTSNSt12_Vector_baseISt10shared_ptrIN3imp12ImageSamplerEESaIS3_EE12_Vector_implE", !59, i64 0}
!59 = !{!"_ZTSNSt12_Vector_baseISt10shared_ptrIN3imp12ImageSamplerEESaIS3_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!60 = !{!55, !6, i64 104}
!61 = !{!62, !26, i64 200}
!62 = !{!"_ZTSN3imp13LightingModelE", !55, i64 0, !63, i64 120, !63, i64 136, !18, i64 152, !65, i64 168, !65, i64 184, !26, i64 200, !26, i64 204}
!63 = !{!"_ZTSSt10shared_ptrIN3imp5GraphEE", !64, i64 0}
!64 = !{!"_ZTSSt12__shared_ptrIN3imp5GraphELN9__gnu_cxx12_Lock_policyE2EE", !6, i64 0, !17, i64 8}
!65 = !{!"_ZTSSt10shared_ptrIN3imp11RenderQueueEE", !66, i64 0}
!66 = !{!"_ZTSSt12__shared_ptrIN3imp11RenderQueueELN9__gnu_cxx12_Lock_policyE2EE", !6, i64 0, !17, i64 8}
!67 = !{!62, !26, i64 204}


; 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.41" = type { %"class.std::__shared_ptr.42" }
%"class.std::__shared_ptr.42" = type { ptr, %"class.std::__shared_count" }
%"class.std::__shared_count" = type { ptr }
%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%"class.std::allocator" = type { i8 }
%"class.imp::Vec4" = type { %"class.imp::Vec" }
%"class.imp::Vec" = type { %"class.imp::Object", [4 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.std::shared_ptr.12" = type { %"class.std::__shared_ptr.13" }
%"class.std::__shared_ptr.13" = 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] }>

@.str.4 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [10 x i8], align 1

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

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

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

declare i32 @__gxx_personality_v0(...)

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN3imp13LightingModel5applyEPNS_10GlRendererEb(ptr noundef nonnull align 8 dereferenceable(208) %0, ptr noundef %1, i1 noundef zeroext %2) unnamed_addr #2 align 2 personality ptr @__gxx_personality_v0 {
  %4 = alloca %"class.std::shared_ptr.41", align 8
  %5 = alloca %"class.std::__cxx11::basic_string", align 8
  %6 = alloca %"class.std::allocator", align 1
  %7 = alloca %"class.imp::Vec4", align 8
  %8 = alloca %"class.std::shared_ptr.12", align 8
  %9 = alloca %"class.std::shared_ptr.12", align 8
  %10 = alloca %"class.std::shared_ptr.12", align 8
  %11 = alloca %"class.std::shared_ptr.41", align 8
  %12 = alloca %"class.imp::Vec4", align 8
  %13 = alloca %"class.imp::Vec4", align 8
  %14 = alloca %"class.imp::Vec", align 8
  %15 = alloca %"class.std::shared_ptr.41", align 8
  %16 = alloca %"class.std::__cxx11::basic_string", align 8
  %17 = alloca %"class.std::allocator", align 1
  %18 = alloca %"class.std::shared_ptr.41", align 8
  %19 = alloca %"class.std::__cxx11::basic_string", align 8
  %20 = alloca %"class.std::allocator", align 1
  %21 = alloca %"class.std::shared_ptr.41", align 8
  %22 = alloca %"class.std::__cxx11::basic_string", align 8
  %23 = alloca %"class.std::allocator", align 1
  %24 = alloca %"class.std::shared_ptr.41", align 8
  %25 = alloca %"class.std::__cxx11::basic_string", align 8
  %26 = alloca %"class.std::allocator", align 1
  %27 = alloca %"class.imp::Vec3", align 8
  %28 = alloca %"class.std::shared_ptr.41", align 8
  %29 = alloca %"class.std::__cxx11::basic_string", align 8
  %30 = alloca %"class.std::allocator", align 1
  %31 = alloca %"class.std::shared_ptr.41", align 8
  %32 = alloca %"class.std::__cxx11::basic_string", align 8
  %33 = alloca %"class.std::allocator", align 1
  %34 = alloca %"class.std::shared_ptr.12", align 8
  %35 = alloca %"class.std::shared_ptr.12", align 8
  %36 = alloca %"class.std::shared_ptr.12", align 8
  %37 = alloca %"class.std::shared_ptr.41", align 8
  %38 = getelementptr inbounds i8, ptr %0, i64 48
  %39 = tail call noundef i64 @_ZNKSt6vectorISt10shared_ptrIN3imp12ImageSamplerEESaIS3_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %38) #5
  %.not = icmp eq i64 %39, 0
  %40 = getelementptr inbounds i8, ptr %1, i64 144
  %41 = load ptr, ptr %40, align 8, !tbaa !5
  br i1 %.not, label %52, label %42

42:                                               ; preds = %3
  %43 = getelementptr inbounds i8, ptr %0, i64 152
  %44 = load ptr, ptr %41, align 8, !tbaa !48
  %45 = getelementptr inbounds i8, ptr %44, i64 120
  %46 = load ptr, ptr %45, align 8
  tail call void %46(ptr noundef nonnull align 8 dereferenceable(24) %41, ptr noundef nonnull align 8 dereferenceable(16) %43)
  %47 = load ptr, ptr %40, align 8, !tbaa !5
  %48 = load ptr, ptr %47, align 8, !tbaa !48
  %49 = getelementptr inbounds i8, ptr %48, i64 80
  %50 = load ptr, ptr %49, align 8
  tail call void %50(ptr noundef nonnull align 8 dereferenceable(24) %47, ptr noundef nonnull align 8 dereferenceable(16) %43)
  %51 = tail call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp12RenderTargetELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %43) #5
  tail call void @_ZN3imp12RenderTarget6changeEv(ptr noundef nonnull align 8 dereferenceable(99) %51)
  br label %56

52:                                               ; preds = %3
  %53 = load ptr, ptr %41, align 8, !tbaa !48
  %54 = getelementptr inbounds i8, ptr %53, i64 128
  %55 = load ptr, ptr %54, align 8
  tail call void %55(ptr noundef nonnull align 8 dereferenceable(24) %41)
  br label %56

56:                                               ; preds = %52, %42
  br i1 %2, label %57, label %84

57:                                               ; preds = %56
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %4) #5
  %58 = getelementptr inbounds i8, ptr %0, i64 136
  %59 = tail call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp5GraphELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %58) #5
  call void @_ZN3imp5Graph12getInitStateEv(ptr dead_on_unwind nonnull writable sret(%"class.std::shared_ptr.41") align 8 %4, ptr noundef nonnull align 8 dereferenceable(72) %59)
  %60 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp5StateELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %4) #5
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %5) #5
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %6) #5
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %6) #5
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %5, ptr noundef nonnull @.str.4, ptr noundef nonnull align 1 dereferenceable(1) %6)
          to label %61 unwind label %68

61:                                               ; preds = %57
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %7) #5
  invoke void @_ZN3imp4Vec4C2Ef(ptr noundef nonnull align 8 dereferenceable(40) %7, float noundef 1.000000e+00)
          to label %62 unwind label %70

62:                                               ; preds = %61
  invoke void @_ZN3imp5State10setUniformERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKNS_4Vec4E(ptr noundef nonnull align 8 dereferenceable(306) %60, ptr noundef nonnull align 8 dereferenceable(32) %5, ptr noundef nonnull align 8 dereferenceable(40) %7)
          to label %63 unwind label %72

63:                                               ; preds = %62
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %7) #5
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %7) #5
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %5) #5
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %6) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %6) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %5) #5
  call void @_ZNSt12__shared_ptrIN3imp5StateELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %4) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %4) #5
  %64 = getelementptr inbounds i8, ptr %0, i64 184
  %65 = call noundef zeroext i1 @_ZSteqIN3imp11RenderQueueEEbRKSt10shared_ptrIT_EDn(ptr noundef nonnull align 8 dereferenceable(16) %64, ptr null) #5
  br i1 %65, label %66, label %76

66:                                               ; preds = %63
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %8) #5
  call void @_ZN3imp11RenderQueue6createIJEEESt10shared_ptrIS0_EDpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::shared_ptr.12") align 8 %8)
  %67 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt10shared_ptrIN3imp11RenderQueueEEaSEOS2_(ptr noundef nonnull align 8 dereferenceable(16) %64, ptr noundef nonnull align 8 dereferenceable(16) %8) #5
  call void @_ZNSt12__shared_ptrIN3imp11RenderQueueELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %8) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %8) #5
  br label %76

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

70:                                               ; preds = %61
  %71 = landingpad { ptr, i32 }
          cleanup
  br label %74

72:                                               ; preds = %62
  %73 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %7) #5
  br label %74

74:                                               ; preds = %72, %70
  %.pn37 = phi { ptr, i32 } [ %73, %72 ], [ %71, %70 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %7) #5
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %5) #5
  br label %75

75:                                               ; preds = %74, %68
  %.pn37.pn = phi { ptr, i32 } [ %.pn37, %74 ], [ %69, %68 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %6) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %6) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %5) #5
  call void @_ZNSt12__shared_ptrIN3imp5StateELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %4) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %4) #5
  br label %187

76:                                               ; preds = %66, %63
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %9) #5
  call void @_ZNSt10shared_ptrIN3imp11RenderQueueEEC2ERKS2_(ptr noundef nonnull align 8 dereferenceable(16) %10, ptr noundef nonnull align 8 dereferenceable(16) %64) #5
  invoke void @_ZN3imp10GlRenderer18applyRenderVisitorERKSt10shared_ptrINS_5GraphEES1_INS_11RenderQueueEE(ptr dead_on_unwind nonnull writable sret(%"class.std::shared_ptr.12") align 8 %9, ptr noundef nonnull align 8 dereferenceable(392) %1, ptr noundef nonnull align 8 dereferenceable(16) %58, ptr noundef nonnull %10)
          to label %77 unwind label %80

77:                                               ; preds = %76
  %78 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt10shared_ptrIN3imp11RenderQueueEEaSEOS2_(ptr noundef nonnull align 8 dereferenceable(16) %64, ptr noundef nonnull align 8 dereferenceable(16) %9) #5
  call void @_ZNSt12__shared_ptrIN3imp11RenderQueueELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %9) #5
  call void @_ZNSt12__shared_ptrIN3imp11RenderQueueELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %10) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %9) #5
  call void @_ZNSt10shared_ptrIN3imp5StateEEC2EDn(ptr noundef nonnull align 8 dereferenceable(16) %11, ptr null) #5
  invoke void @_ZN3imp10GlRenderer9drawQueueERSt10shared_ptrINS_11RenderQueueEES1_INS_5StateEENS_13SceneRenderer11RenderFrameE(ptr noundef nonnull align 8 dereferenceable(392) %1, ptr noundef nonnull align 8 dereferenceable(16) %64, ptr noundef nonnull %11, i32 noundef 5)
          to label %79 unwind label %82

79:                                               ; preds = %77
  call void @_ZNSt12__shared_ptrIN3imp5StateELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %11) #5
  br label %186

80:                                               ; preds = %76
  %81 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt12__shared_ptrIN3imp11RenderQueueELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %10) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %9) #5
  br label %187

82:                                               ; preds = %77
  %83 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt12__shared_ptrIN3imp5StateELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %11) #5
  br label %187

84:                                               ; preds = %56
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %12) #5
  call void @_ZN3imp4Vec4C2Ev(ptr noundef nonnull align 8 dereferenceable(40) %12)
  %85 = getelementptr inbounds i8, ptr %0, i64 112
  %86 = load ptr, ptr %85, align 8, !tbaa !50
  %.not21 = icmp eq ptr %86, null
  br i1 %.not21, label %93, label %87

87:                                               ; preds = %84
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %13) #5
  %88 = getelementptr inbounds i8, ptr %86, i64 544
  invoke void @_ZN3imp4Vec4C2ILi3EEERKNS_3VecIXT_EfEEf(ptr noundef nonnull align 8 dereferenceable(40) %13, ptr noundef nonnull align 8 dereferenceable(36) %88, float noundef 1.000000e+00)
          to label %89 unwind label %91

89:                                               ; preds = %87
  %90 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZN3imp4Vec4aSEOS0_(ptr noundef nonnull align 8 dereferenceable(40) %12, ptr noundef nonnull align 8 dereferenceable(40) %13) #5
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %13) #5
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %13) #5
  br label %93

91:                                               ; preds = %87
  %92 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %13) #5
  br label %185

93:                                               ; preds = %89, %84
  %94 = getelementptr inbounds i8, ptr %0, i64 104
  %95 = load ptr, ptr %94, align 8, !tbaa !56
  %.not22 = icmp eq ptr %95, null
  br i1 %.not22, label %102, label %96

96:                                               ; preds = %93
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %14) #5
  %97 = call noundef nonnull align 8 dereferenceable(88) ptr @_ZNK3imp6Camera13getViewMatrixEv(ptr noundef nonnull align 8 dereferenceable(752) %95)
  invoke void @_ZN3impmlILi4ELi4EfEENS_3VecIXT0_ET1_EERKNS1_IXT_ES2_EERKNS_6MatrixIXT_EXT0_ES2_EE(ptr dead_on_unwind nonnull writable sret(%"class.imp::Vec") align 8 %14, ptr noundef nonnull align 8 dereferenceable(40) %12, ptr noundef nonnull align 8 dereferenceable(88) %97)
          to label %98 unwind label %100

98:                                               ; preds = %96
  %99 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZN3imp4Vec4aSILi4EEERKS0_RKNS_3VecIXT_EfEE(ptr noundef nonnull align 8 dereferenceable(40) %12, ptr noundef nonnull align 8 dereferenceable(40) %14)
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %14) #5
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %14) #5
  br label %102

100:                                              ; preds = %96
  %101 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %14) #5
  br label %185

102:                                              ; preds = %98, %93
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %15) #5
  %103 = getelementptr inbounds i8, ptr %0, i64 120
  %104 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp5GraphELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %103) #5
  call void @_ZN3imp5Graph12getInitStateEv(ptr dead_on_unwind nonnull writable sret(%"class.std::shared_ptr.41") align 8 %15, ptr noundef nonnull align 8 dereferenceable(72) %104)
  %105 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp5StateELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %15) #5
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %16) #5
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %17) #5
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %17) #5
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %16, ptr noundef nonnull @.str.5, ptr noundef nonnull align 1 dereferenceable(1) %17)
          to label %106 unwind label %142

106:                                              ; preds = %102
  %107 = getelementptr inbounds i8, ptr %0, i64 24
  %108 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorISt10shared_ptrIN3imp12ImageSamplerEESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %107, i64 noundef 0) #5
  invoke void @_ZN3imp5State10setUniformERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKSt10shared_ptrINS_12ImageSamplerEEi(ptr noundef nonnull align 8 dereferenceable(306) %105, ptr noundef nonnull align 8 dereferenceable(32) %16, ptr noundef nonnull align 8 dereferenceable(16) %108, i32 noundef 0)
          to label %109 unwind label %144

109:                                              ; preds = %106
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %16) #5
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %17) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %17) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %16) #5
  call void @_ZNSt12__shared_ptrIN3imp5StateELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %15) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %15) #5
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %18) #5
  %110 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp5GraphELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %103) #5
  call void @_ZN3imp5Graph12getInitStateEv(ptr dead_on_unwind nonnull writable sret(%"class.std::shared_ptr.41") align 8 %18, ptr noundef nonnull align 8 dereferenceable(72) %110)
  %111 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp5StateELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %18) #5
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %19) #5
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %20) #5
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %20) #5
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %19, ptr noundef nonnull @.str.6, ptr noundef nonnull align 1 dereferenceable(1) %20)
          to label %112 unwind label %147

112:                                              ; preds = %109
  %113 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorISt10shared_ptrIN3imp12ImageSamplerEESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %107, i64 noundef 1) #5
  invoke void @_ZN3imp5State10setUniformERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKSt10shared_ptrINS_12ImageSamplerEEi(ptr noundef nonnull align 8 dereferenceable(306) %111, ptr noundef nonnull align 8 dereferenceable(32) %19, ptr noundef nonnull align 8 dereferenceable(16) %113, i32 noundef 1)
          to label %114 unwind label %149

114:                                              ; preds = %112
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %19) #5
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %20) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %20) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %19) #5
  call void @_ZNSt12__shared_ptrIN3imp5StateELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %18) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %18) #5
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %21) #5
  %115 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp5GraphELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %103) #5
  call void @_ZN3imp5Graph12getInitStateEv(ptr dead_on_unwind nonnull writable sret(%"class.std::shared_ptr.41") align 8 %21, ptr noundef nonnull align 8 dereferenceable(72) %115)
  %116 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp5StateELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %21) #5
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %22) #5
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %23) #5
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %23) #5
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %22, ptr noundef nonnull @.str.7, ptr noundef nonnull align 1 dereferenceable(1) %23)
          to label %117 unwind label %152

117:                                              ; preds = %114
  %118 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorISt10shared_ptrIN3imp12ImageSamplerEESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %107, i64 noundef 2) #5
  invoke void @_ZN3imp5State10setUniformERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKSt10shared_ptrINS_12ImageSamplerEEi(ptr noundef nonnull align 8 dereferenceable(306) %116, ptr noundef nonnull align 8 dereferenceable(32) %22, ptr noundef nonnull align 8 dereferenceable(16) %118, i32 noundef 2)
          to label %119 unwind label %154

119:                                              ; preds = %117
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %22) #5
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %23) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %23) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %22) #5
  call void @_ZNSt12__shared_ptrIN3imp5StateELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %21) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %21) #5
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %24) #5
  %120 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp5GraphELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %103) #5
  call void @_ZN3imp5Graph12getInitStateEv(ptr dead_on_unwind nonnull writable sret(%"class.std::shared_ptr.41") align 8 %24, ptr noundef nonnull align 8 dereferenceable(72) %120)
  %121 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp5StateELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %24) #5
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %25) #5
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %26) #5
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %26) #5
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %25, ptr noundef nonnull @.str.8, ptr noundef nonnull align 1 dereferenceable(1) %26)
          to label %122 unwind label %157

122:                                              ; preds = %119
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %27) #5
  invoke void @_ZN3imp4Vec3C2ILi4EEERKNS_3VecIXT_EfEEf(ptr noundef nonnull align 8 dereferenceable(36) %27, ptr noundef nonnull align 8 dereferenceable(40) %12, float noundef 1.000000e+00)
          to label %123 unwind label %159

123:                                              ; preds = %122
  invoke void @_ZN3imp5State10setUniformERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKNS_4Vec3E(ptr noundef nonnull align 8 dereferenceable(306) %121, ptr noundef nonnull align 8 dereferenceable(32) %25, ptr noundef nonnull align 8 dereferenceable(36) %27)
          to label %124 unwind label %161

124:                                              ; preds = %123
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(36) %27) #5
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %27) #5
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %25) #5
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %26) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %26) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %25) #5
  call void @_ZNSt12__shared_ptrIN3imp5StateELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %24) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %24) #5
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %28) #5
  %125 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp5GraphELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %103) #5
  call void @_ZN3imp5Graph12getInitStateEv(ptr dead_on_unwind nonnull writable sret(%"class.std::shared_ptr.41") align 8 %28, ptr noundef nonnull align 8 dereferenceable(72) %125)
  %126 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp5StateELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %28) #5
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %29) #5
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %30) #5
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %30) #5
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %29, ptr noundef nonnull @.str.9, ptr noundef nonnull align 1 dereferenceable(1) %30)
          to label %127 unwind label %165

127:                                              ; preds = %124
  %128 = getelementptr inbounds i8, ptr %0, i64 200
  %129 = load float, ptr %128, align 8, !tbaa !57
  invoke void @_ZN3imp5State10setUniformERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEf(ptr noundef nonnull align 8 dereferenceable(306) %126, ptr noundef nonnull align 8 dereferenceable(32) %29, float noundef %129)
          to label %130 unwind label %167

130:                                              ; preds = %127
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %29) #5
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %30) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %30) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %29) #5
  call void @_ZNSt12__shared_ptrIN3imp5StateELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %28) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %28) #5
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %31) #5
  %131 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp5GraphELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %103) #5
  call void @_ZN3imp5Graph12getInitStateEv(ptr dead_on_unwind nonnull writable sret(%"class.std::shared_ptr.41") align 8 %31, ptr noundef nonnull align 8 dereferenceable(72) %131)
  %132 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp5StateELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %31) #5
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %32) #5
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %33) #5
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %33) #5
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %32, ptr noundef nonnull @.str.10, ptr noundef nonnull align 1 dereferenceable(1) %33)
          to label %133 unwind label %170

133:                                              ; preds = %130
  %134 = getelementptr inbounds i8, ptr %0, i64 204
  %135 = load float, ptr %134, align 4, !tbaa !63
  invoke void @_ZN3imp5State10setUniformERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEf(ptr noundef nonnull align 8 dereferenceable(306) %132, ptr noundef nonnull align 8 dereferenceable(32) %32, float noundef %135)
          to label %136 unwind label %172

136:                                              ; preds = %133
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %32) #5
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %33) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %33) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %32) #5
  call void @_ZNSt12__shared_ptrIN3imp5StateELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %31) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %31) #5
  %137 = getelementptr inbounds i8, ptr %0, i64 168
  %138 = call noundef zeroext i1 @_ZSteqIN3imp11RenderQueueEEbRKSt10shared_ptrIT_EDn(ptr noundef nonnull align 8 dereferenceable(16) %137, ptr null) #5
  br i1 %138, label %139, label %177

139:                                              ; preds = %136
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %34) #5
  invoke void @_ZN3imp11RenderQueue6createIJEEESt10shared_ptrIS0_EDpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::shared_ptr.12") align 8 %34)
          to label %140 unwind label %175

140:                                              ; preds = %139
  %141 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt10shared_ptrIN3imp11RenderQueueEEaSEOS2_(ptr noundef nonnull align 8 dereferenceable(16) %137, ptr noundef nonnull align 8 dereferenceable(16) %34) #5
  call void @_ZNSt12__shared_ptrIN3imp11RenderQueueELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %34) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %34) #5
  br label %177

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

144:                                              ; preds = %106
  %145 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %16) #5
  br label %146

146:                                              ; preds = %144, %142
  %.pn = phi { ptr, i32 } [ %145, %144 ], [ %143, %142 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %17) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %17) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %16) #5
  call void @_ZNSt12__shared_ptrIN3imp5StateELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %15) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %15) #5
  br label %185

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

149:                                              ; preds = %112
  %150 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %19) #5
  br label %151

151:                                              ; preds = %149, %147
  %.pn24 = phi { ptr, i32 } [ %150, %149 ], [ %148, %147 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %20) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %20) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %19) #5
  call void @_ZNSt12__shared_ptrIN3imp5StateELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %18) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %18) #5
  br label %185

152:                                              ; preds = %114
  %153 = landingpad { ptr, i32 }
          cleanup
  br label %156

154:                                              ; preds = %117
  %155 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %22) #5
  br label %156

156:                                              ; preds = %154, %152
  %.pn26 = phi { ptr, i32 } [ %155, %154 ], [ %153, %152 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %23) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %23) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %22) #5
  call void @_ZNSt12__shared_ptrIN3imp5StateELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %21) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %21) #5
  br label %185

157:                                              ; preds = %119
  %158 = landingpad { ptr, i32 }
          cleanup
  br label %164

159:                                              ; preds = %122
  %160 = landingpad { ptr, i32 }
          cleanup
  br label %163

161:                                              ; preds = %123
  %162 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(36) %27) #5
  br label %163

163:                                              ; preds = %161, %159
  %.pn28 = phi { ptr, i32 } [ %162, %161 ], [ %160, %159 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %27) #5
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %25) #5
  br label %164

164:                                              ; preds = %163, %157
  %.pn28.pn = phi { ptr, i32 } [ %.pn28, %163 ], [ %158, %157 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %26) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %26) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %25) #5
  call void @_ZNSt12__shared_ptrIN3imp5StateELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %24) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %24) #5
  br label %185

165:                                              ; preds = %124
  %166 = landingpad { ptr, i32 }
          cleanup
  br label %169

167:                                              ; preds = %127
  %168 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %29) #5
  br label %169

169:                                              ; preds = %167, %165
  %.pn31 = phi { ptr, i32 } [ %168, %167 ], [ %166, %165 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %30) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %30) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %29) #5
  call void @_ZNSt12__shared_ptrIN3imp5StateELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %28) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %28) #5
  br label %185

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

172:                                              ; preds = %133
  %173 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %32) #5
  br label %174

174:                                              ; preds = %172, %170
  %.pn33 = phi { ptr, i32 } [ %173, %172 ], [ %171, %170 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %33) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %33) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %32) #5
  call void @_ZNSt12__shared_ptrIN3imp5StateELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %31) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %31) #5
  br label %185

175:                                              ; preds = %139
  %176 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %34) #5
  br label %185

177:                                              ; preds = %140, %136
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %35) #5
  call void @_ZNSt10shared_ptrIN3imp11RenderQueueEEC2ERKS2_(ptr noundef nonnull align 8 dereferenceable(16) %36, ptr noundef nonnull align 8 dereferenceable(16) %137) #5
  invoke void @_ZN3imp10GlRenderer18applyRenderVisitorERKSt10shared_ptrINS_5GraphEES1_INS_11RenderQueueEE(ptr dead_on_unwind nonnull writable sret(%"class.std::shared_ptr.12") align 8 %35, ptr noundef nonnull align 8 dereferenceable(392) %1, ptr noundef nonnull align 8 dereferenceable(16) %103, ptr noundef nonnull %36)
          to label %178 unwind label %181

178:                                              ; preds = %177
  %179 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt10shared_ptrIN3imp11RenderQueueEEaSEOS2_(ptr noundef nonnull align 8 dereferenceable(16) %137, ptr noundef nonnull align 8 dereferenceable(16) %35) #5
  call void @_ZNSt12__shared_ptrIN3imp11RenderQueueELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %35) #5
  call void @_ZNSt12__shared_ptrIN3imp11RenderQueueELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %36) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %35) #5
  call void @_ZNSt10shared_ptrIN3imp5StateEEC2EDn(ptr noundef nonnull align 8 dereferenceable(16) %37, ptr null) #5
  invoke void @_ZN3imp10GlRenderer9drawQueueERSt10shared_ptrINS_11RenderQueueEES1_INS_5StateEENS_13SceneRenderer11RenderFrameE(ptr noundef nonnull align 8 dereferenceable(392) %1, ptr noundef nonnull align 8 dereferenceable(16) %137, ptr noundef nonnull %37, i32 noundef 5)
          to label %180 unwind label %183

180:                                              ; preds = %178
  call void @_ZNSt12__shared_ptrIN3imp5StateELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %37) #5
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %12) #5
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %12) #5
  br label %186

181:                                              ; preds = %177
  %182 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt12__shared_ptrIN3imp11RenderQueueELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %36) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %35) #5
  br label %185

183:                                              ; preds = %178
  %184 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt12__shared_ptrIN3imp5StateELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %37) #5
  br label %185

185:                                              ; preds = %183, %181, %175, %174, %169, %164, %156, %151, %146, %100, %91
  %.pn35 = phi { ptr, i32 } [ %184, %183 ], [ %182, %181 ], [ %176, %175 ], [ %.pn33, %174 ], [ %.pn31, %169 ], [ %.pn28.pn, %164 ], [ %.pn26, %156 ], [ %.pn24, %151 ], [ %.pn, %146 ], [ %101, %100 ], [ %92, %91 ]
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %12) #5
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %12) #5
  br label %187

186:                                              ; preds = %180, %79
  ret void

187:                                              ; preds = %185, %82, %80, %75
  %.pn40 = phi { ptr, i32 } [ %83, %82 ], [ %81, %80 ], [ %.pn37.pn, %75 ], [ %.pn35, %185 ]
  resume { ptr, i32 } %.pn40
}

declare void @_ZN3imp12RenderTarget6changeEv(ptr noundef nonnull align 8 dereferenceable(99)) local_unnamed_addr #3

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3imp4Vec4C2Ef(ptr noundef nonnull align 8 dereferenceable(40), float noundef) 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 #1 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3imp11RenderQueue6createIJEEESt10shared_ptrIS0_EDpOT_(ptr dead_on_unwind noalias writable sret(%"class.std::shared_ptr.12") align 8) local_unnamed_addr #2 align 2

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

declare void @_ZN3imp10GlRenderer18applyRenderVisitorERKSt10shared_ptrINS_5GraphEES1_INS_11RenderQueueEE(ptr dead_on_unwind writable sret(%"class.std::shared_ptr.12") align 8, ptr noundef nonnull align 8 dereferenceable(392), ptr noundef nonnull align 8 dereferenceable(16), ptr noundef) local_unnamed_addr #3

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

declare void @_ZN3imp10GlRenderer9drawQueueERSt10shared_ptrINS_11RenderQueueEES1_INS_5StateEENS_13SceneRenderer11RenderFrameE(ptr noundef nonnull align 8 dereferenceable(392), ptr noundef nonnull align 8 dereferenceable(16), ptr noundef, i32 noundef) local_unnamed_addr #3

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3impmlILi4ELi4EfEENS_3VecIXT0_ET1_EERKNS1_IXT_ES2_EERKNS_6MatrixIXT_EXT0_ES2_EE(ptr dead_on_unwind noalias writable sret(%"class.imp::Vec") align 8, ptr noundef nonnull align 8 dereferenceable(40), ptr noundef nonnull align 8 dereferenceable(88)) local_unnamed_addr #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 #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(40) ptr @_ZN3imp4Vec4aSILi4EEERKS0_RKNS_3VecIXT_EfEE(ptr noundef nonnull align 8 dereferenceable(40), ptr noundef nonnull align 8 dereferenceable(40)) local_unnamed_addr #1 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 dso_local noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorISt10shared_ptrIN3imp12ImageSamplerEESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) local_unnamed_addr #1 align 2

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 @_ZN3imp4Vec3C2ILi4EEERKNS_3VecIXT_EfEEf(ptr noundef nonnull align 8 dereferenceable(36), ptr noundef nonnull align 8 dereferenceable(40), float noundef) unnamed_addr #2 align 2

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

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !11, i64 144}
!6 = !{!"_ZTSN3imp10GlRendererE", !7, i64 0, !11, i64 144, !25, i64 152, !27, i64 168, !29, i64 184, !29, i64 200, !31, i64 216, !31, i64 232, !33, i64 248, !33, i64 264, !35, i64 280, !16, i64 296, !16, i64 312, !37, i64 328, !46, i64 376}
!7 = !{!"_ZTSN3imp13SceneRendererE", !8, i64 0, !15, i64 24, !12, i64 25, !16, i64 32, !18, i64 48, !20, i64 64, !21, i64 72, !23, i64 112, !23, i64 116, !23, i64 120, !23, i64 124, !24, i64 128, !24, i64 132, !15, i64 136}
!8 = !{!"_ZTSN3imp6ObjectE", !9, i64 8}
!9 = !{!"_ZTSSt10shared_ptrIN3imp6ObjectEE", !10, i64 0}
!10 = !{!"_ZTSSt12__shared_ptrIN3imp6ObjectELN9__gnu_cxx12_Lock_policyE2EE", !11, i64 0, !14, i64 8}
!11 = !{!"any pointer", !12, i64 0}
!12 = !{!"omnipotent char", !13, i64 0}
!13 = !{!"Simple C++ TBAA"}
!14 = !{!"_ZTSSt14__shared_countILN9__gnu_cxx12_Lock_policyE2EE", !11, i64 0}
!15 = !{!"bool", !12, i64 0}
!16 = !{!"_ZTSSt10shared_ptrIN3imp12RenderTargetEE", !17, i64 0}
!17 = !{!"_ZTSSt12__shared_ptrIN3imp12RenderTargetELN9__gnu_cxx12_Lock_policyE2EE", !11, i64 0, !14, i64 8}
!18 = !{!"_ZTSSt10shared_ptrIN3imp13RenderVisitorEE", !19, i64 0}
!19 = !{!"_ZTSSt12__shared_ptrIN3imp13RenderVisitorELN9__gnu_cxx12_Lock_policyE2EE", !11, i64 0, !14, i64 8}
!20 = !{!"_ZTSN3imp13SceneRenderer11RenderFrameE", !12, i64 0}
!21 = !{!"_ZTSN3imp4Vec4E", !22, i64 0}
!22 = !{!"_ZTSN3imp3VecILi4EfEE", !8, i64 0, !12, i64 24}
!23 = !{!"int", !12, i64 0}
!24 = !{!"float", !12, i64 0}
!25 = !{!"_ZTSSt10shared_ptrIN3imp8PipelineEE", !26, i64 0}
!26 = !{!"_ZTSSt12__shared_ptrIN3imp8PipelineELN9__gnu_cxx12_Lock_policyE2EE", !11, i64 0, !14, i64 8}
!27 = !{!"_ZTSSt10shared_ptrIN3imp13LightingModelEE", !28, i64 0}
!28 = !{!"_ZTSSt12__shared_ptrIN3imp13LightingModelELN9__gnu_cxx12_Lock_policyE2EE", !11, i64 0, !14, i64 8}
!29 = !{!"_ZTSSt10shared_ptrIN3imp14CubeMapSamplerEE", !30, i64 0}
!30 = !{!"_ZTSSt12__shared_ptrIN3imp14CubeMapSamplerELN9__gnu_cxx12_Lock_policyE2EE", !11, i64 0, !14, i64 8}
!31 = !{!"_ZTSSt10shared_ptrIN3imp15RenderToCubeMapEE", !32, i64 0}
!32 = !{!"_ZTSSt12__shared_ptrIN3imp15RenderToCubeMapELN9__gnu_cxx12_Lock_policyE2EE", !11, i64 0, !14, i64 8}
!33 = !{!"_ZTSSt10shared_ptrIN3imp14ReflexionModelEE", !34, i64 0}
!34 = !{!"_ZTSSt12__shared_ptrIN3imp14ReflexionModelELN9__gnu_cxx12_Lock_policyE2EE", !11, i64 0, !14, i64 8}
!35 = !{!"_ZTSSt10shared_ptrIN3imp9CopyFrameEE", !36, i64 0}
!36 = !{!"_ZTSSt12__shared_ptrIN3imp9CopyFrameELN9__gnu_cxx12_Lock_policyE2EE", !11, i64 0, !14, i64 8}
!37 = !{!"_ZTSSt3mapISt10shared_ptrIN3imp5GraphEES0_INS1_11RenderQueueEESt4lessIS3_ESaISt4pairIKS3_S5_EEE", !38, i64 0}
!38 = !{!"_ZTSSt8_Rb_treeISt10shared_ptrIN3imp5GraphEESt4pairIKS3_S0_INS1_11RenderQueueEEESt10_Select1stIS8_ESt4lessIS3_ESaIS8_EE", !39, i64 0}
!39 = !{!"_ZTSNSt8_Rb_treeISt10shared_ptrIN3imp5GraphEESt4pairIKS3_S0_INS1_11RenderQueueEEESt10_Select1stIS8_ESt4lessIS3_ESaIS8_EE13_Rb_tree_implISC_Lb1EEE", !40, i64 0, !42, i64 8}
!40 = !{!"_ZTSSt20_Rb_tree_key_compareISt4lessISt10shared_ptrIN3imp5GraphEEEE", !41, i64 0}
!41 = !{!"_ZTSSt4lessISt10shared_ptrIN3imp5GraphEEE"}
!42 = !{!"_ZTSSt15_Rb_tree_header", !43, i64 0, !45, i64 32}
!43 = !{!"_ZTSSt18_Rb_tree_node_base", !44, i64 0, !11, i64 8, !11, i64 16, !11, i64 24}
!44 = !{!"_ZTSSt14_Rb_tree_color", !12, i64 0}
!45 = !{!"long", !12, i64 0}
!46 = !{!"_ZTSSt10shared_ptrIN3imp5StateEE", !47, i64 0}
!47 = !{!"_ZTSSt12__shared_ptrIN3imp5StateELN9__gnu_cxx12_Lock_policyE2EE", !11, i64 0, !14, i64 8}
!48 = !{!49, !49, i64 0}
!49 = !{!"vtable pointer", !13, i64 0}
!50 = !{!51, !11, i64 112}
!51 = !{!"_ZTSN3imp14FrameOperationE", !8, i64 0, !52, i64 24, !52, i64 48, !29, i64 72, !29, i64 88, !11, i64 104, !11, i64 112}
!52 = !{!"_ZTSSt6vectorISt10shared_ptrIN3imp12ImageSamplerEESaIS3_EE", !53, i64 0}
!53 = !{!"_ZTSSt12_Vector_baseISt10shared_ptrIN3imp12ImageSamplerEESaIS3_EE", !54, i64 0}
!54 = !{!"_ZTSNSt12_Vector_baseISt10shared_ptrIN3imp12ImageSamplerEESaIS3_EE12_Vector_implE", !55, i64 0}
!55 = !{!"_ZTSNSt12_Vector_baseISt10shared_ptrIN3imp12ImageSamplerEESaIS3_EE17_Vector_impl_dataE", !11, i64 0, !11, i64 8, !11, i64 16}
!56 = !{!51, !11, i64 104}
!57 = !{!58, !24, i64 200}
!58 = !{!"_ZTSN3imp13LightingModelE", !51, i64 0, !59, i64 120, !59, i64 136, !16, i64 152, !61, i64 168, !61, i64 184, !24, i64 200, !24, i64 204}
!59 = !{!"_ZTSSt10shared_ptrIN3imp5GraphEE", !60, i64 0}
!60 = !{!"_ZTSSt12__shared_ptrIN3imp5GraphELN9__gnu_cxx12_Lock_policyE2EE", !11, i64 0, !14, i64 8}
!61 = !{!"_ZTSSt10shared_ptrIN3imp11RenderQueueEE", !62, i64 0}
!62 = !{!"_ZTSSt12__shared_ptrIN3imp11RenderQueueELN9__gnu_cxx12_Lock_policyE2EE", !11, i64 0, !14, i64 8}
!63 = !{!58, !24, i64 204}


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