; LLVM IR from Lut1n/ImpGears :: src/OGLPlugin/GlRenderer.ll (ZN3imp10GlRenderer6renderERKSt10shared_ptrINS_5GraphEE)

; 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.12" = type { %"class.std::__shared_ptr.13" }
%"class.std::__shared_ptr.13" = type { ptr, %"class.std::__shared_count" }
%"class.std::__shared_count" = type { ptr }
%"class.std::shared_ptr.103" = type { %"class.std::__shared_ptr.104" }
%"class.std::__shared_ptr.104" = type { ptr, %"class.std::__shared_count" }
%"class.std::shared_ptr.33" = type { %"class.std::__shared_ptr.34" }
%"class.std::__shared_ptr.34" = type { ptr, %"class.std::__shared_count" }
%"class.std::shared_ptr" = type { %"class.std::__shared_ptr" }
%"class.std::__shared_ptr" = type { ptr, %"class.std::__shared_count" }
%"class.std::shared_ptr.94" = type { %"class.std::__shared_ptr.95" }
%"class.std::__shared_ptr.95" = type { ptr, %"class.std::__shared_count" }
%"class.std::shared_ptr.100" = type { %"class.std::__shared_ptr.101" }
%"class.std::__shared_ptr.101" = type { ptr, %"class.std::__shared_count" }
%"class.std::shared_ptr.97" = type { %"class.std::__shared_ptr.98" }
%"class.std::__shared_ptr.98" = type { ptr, %"class.std::__shared_count" }
%"struct.std::_Rb_tree_iterator" = type { ptr }
%"class.std::shared_ptr.27" = type { %"class.std::__shared_ptr.28" }
%"class.std::__shared_ptr.28" = type { ptr, %"class.std::__shared_count" }
%"class.imp::Vec4" = type { %"class.imp::Vec" }
%"class.imp::Vec" = type { %"class.imp::Object", [4 x float] }
%"class.imp::Object" = type { ptr, %"class.std::shared_ptr" }
%"class.imp::Vec3" = type { %"class.imp::Vec.base", [4 x i8] }
%"class.imp::Vec.base" = type <{ %"class.imp::Object", [3 x float] }>
%"class.std::shared_ptr.18" = type { %"class.std::__shared_ptr.19" }
%"class.std::__shared_ptr.19" = type { ptr, %"class.std::__shared_count" }
%"class.std::shared_ptr.0" = type { %"class.std::__shared_ptr.1" }
%"class.std::__shared_ptr.1" = type { ptr, %"class.std::__shared_count" }
%"class.std::shared_ptr.166" = type { %"class.std::__shared_ptr.167" }
%"class.std::__shared_ptr.167" = type { ptr, %"class.std::__shared_count" }
%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%"class.std::allocator" = type { i8 }
%"class.imp::GlRenderer" = type { %"class.imp::SceneRenderer.base", ptr, %"class.std::shared_ptr.6", %"class.std::shared_ptr.9", %"class.std::shared_ptr.12", %"class.std::shared_ptr.12", %"class.std::shared_ptr.15", %"class.std::shared_ptr.15", %"class.std::shared_ptr.18", %"class.std::shared_ptr.18", %"class.std::shared_ptr.21", %"class.std::shared_ptr.0", %"class.std::shared_ptr.0", %"class.std::map", %"class.std::shared_ptr.27" }
%"class.imp::SceneRenderer.base" = type <{ %"class.imp::Object", i8, [5 x i8], [2 x i8], %"class.std::shared_ptr.0", %"class.std::shared_ptr.3", i32, [4 x i8], %"class.imp::Vec4", i32, i32, i32, i32, float, float, i8 }>
%"class.std::shared_ptr.3" = type { %"class.std::__shared_ptr.4" }
%"class.std::__shared_ptr.4" = type { ptr, %"class.std::__shared_count" }
%"class.std::shared_ptr.6" = type { %"class.std::__shared_ptr.7" }
%"class.std::__shared_ptr.7" = 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::shared_ptr.15" = type { %"class.std::__shared_ptr.16" }
%"class.std::__shared_ptr.16" = type { ptr, %"class.std::__shared_count" }
%"class.std::shared_ptr.21" = type { %"class.std::__shared_ptr.22" }
%"class.std::__shared_ptr.22" = 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::SceneRenderer" = type <{ %"class.imp::Object", i8, [5 x i8], [2 x i8], %"class.std::shared_ptr.0", %"class.std::shared_ptr.3", i32, [4 x i8], %"class.imp::Vec4", i32, i32, i32, i32, float, float, i8, [7 x i8] }>
%"class.imp::RenderQueue" = type { %"class.imp::Object", ptr, %"class.std::vector.123", %"struct.imp::StateBin", %"struct.imp::StateBin" }
%"class.std::vector.123" = type { %"struct.std::_Vector_base.124" }
%"struct.std::_Vector_base.124" = type { %"struct.std::_Vector_base<imp::LightNode *, std::allocator<imp::LightNode *>>::_Vector_impl" }
%"struct.std::_Vector_base<imp::LightNode *, std::allocator<imp::LightNode *>>::_Vector_impl" = type { %"struct.std::_Vector_base<imp::LightNode *, std::allocator<imp::LightNode *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<imp::LightNode *, std::allocator<imp::LightNode *>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.imp::StateBin" = type <{ %"class.std::vector.128", i32, [4 x i8] }>
%"class.std::vector.128" = type { %"struct.std::_Vector_base.129" }
%"struct.std::_Vector_base.129" = type { %"struct.std::_Vector_base<imp::RenderState, std::allocator<imp::RenderState>>::_Vector_impl" }
%"struct.std::_Vector_base<imp::RenderState, std::allocator<imp::RenderState>>::_Vector_impl" = type { %"struct.std::_Vector_base<imp::RenderState, std::allocator<imp::RenderState>>::_Vector_impl_data" }
%"struct.std::_Vector_base<imp::RenderState, std::allocator<imp::RenderState>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.imp::LightNode" = type <{ %"class.imp::Node", %"class.imp::Vec3", %"class.imp::Vec3", float, [4 x i8] }>
%"class.imp::Node" = type { %"class.imp::Object", %"class.std::shared_ptr.27", %"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 }

@_ZZN3imp10GlRenderer6renderERKSt10shared_ptrINS_5GraphEEE12s_lastEnvRes = external hidden global i32, align 4
@_ZZN3imp10GlRenderer6renderERKSt10shared_ptrINS_5GraphEEE15s_lastShadowRes = external hidden global i32, align 4
@__glewBindFramebuffer = external global ptr, align 8
@.str.43 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.44 = external hidden unnamed_addr constant [77 x i8], align 1
@.str.45 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.46 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.47 = external hidden unnamed_addr constant [17 x i8], align 1
@__glewBlitFramebuffer = external global ptr, align 8
@.str.48 = external hidden unnamed_addr constant [13 x i8], align 1
@_ZZN3imp10GlRenderer6renderERKSt10shared_ptrINS_5GraphEEE12s_lastOutput = external hidden global i32, align 4

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

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

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

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

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

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

declare void @_ZN3imp15RenderToCubeMap10setCubeMapESt10shared_ptrINS_14CubeMapSamplerEE(ptr noundef nonnull align 8 dereferenceable(812), ptr noundef) #3

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

declare void @_ZN3imp15RenderToCubeMap13setResolutionEf(ptr noundef nonnull align 8 dereferenceable(812), float noundef) #3

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK3imp13SceneRenderer13isMsaaEnabledEv(ptr noundef nonnull align 8 dereferenceable(137)) #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 nounwind uwtable
declare dso_local noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp8PipelineELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1)) #1 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3imp13LightingModel13setLightPowerEf(ptr noundef nonnull align 8 dereferenceable(208), float noundef) #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3imp13LightingModel10setAmbientEf(ptr noundef nonnull align 8 dereferenceable(208), float noundef) #1 align 2

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

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

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

declare void @_ZN3imp14FrameOperation8setInputESt10shared_ptrINS_12ImageSamplerEEi(ptr noundef nonnull align 8 dereferenceable(120), ptr noundef, i32 noundef) #3

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt12__shared_ptrIN3imp12ImageSamplerELN9__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 @_ZNSt12__shared_ptrIN3imp16AmbientOcclusionELN9__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 @_ZNSt12__shared_ptrIN3imp13ShadowCastingELN9__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 @_ZSteqIN3imp8PipelineEEbRKSt10shared_ptrIT_EDn(ptr noundef nonnull align 8 dereferenceable(16), ptr) #4

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

; 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

; Function Attrs: mustprogress uwtable
declare dso_local 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) #2 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt12__shared_ptrIN3imp6ObjectELN9__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 @_ZNSt10shared_ptrIN3imp14ReflexionModelEEC2ERKS2_(ptr noundef nonnull align 8 dereferenceable(16), 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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3imp11RenderQueue6createIJEEESt10shared_ptrIS0_EDpOT_(ptr dead_on_unwind noalias writable sret(%"class.std::shared_ptr.33") 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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN3imp10GlRenderer6renderERKSt10shared_ptrINS_5GraphEE(ptr noundef nonnull align 8 dereferenceable(392) %0, ptr noundef nonnull align 8 dereferenceable(16) %1) unnamed_addr #2 align 2 personality ptr @__gxx_personality_v0 {
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca %"class.std::shared_ptr.94", align 8
  %6 = alloca %"class.std::shared_ptr", align 8
  %7 = alloca %"class.std::shared_ptr.100", align 8
  %8 = alloca ptr, align 8
  %9 = alloca i32, align 4
  %10 = alloca %"class.std::shared_ptr.97", align 8
  %11 = alloca %"class.std::shared_ptr", align 8
  %12 = alloca %"class.std::shared_ptr.100", align 8
  %13 = alloca %"struct.std::_Rb_tree_iterator", align 8
  %14 = alloca %"struct.std::_Rb_tree_iterator", align 8
  %15 = alloca %"class.std::shared_ptr.33", align 8
  %16 = alloca %"class.std::shared_ptr.33", align 8
  %17 = alloca %"class.std::shared_ptr.33", align 8
  %18 = alloca %"class.std::shared_ptr.33", align 8
  %19 = alloca %"class.std::shared_ptr.33", align 8
  %20 = alloca %"class.std::shared_ptr.27", align 8
  %21 = alloca ptr, align 8
  %22 = alloca i8, align 1
  %23 = alloca i8, align 1
  %24 = alloca i8, align 1
  %25 = alloca i8, align 1
  %26 = alloca i8, align 1
  %27 = alloca %"class.std::shared_ptr.12", align 8
  %28 = alloca i32, align 4
  %29 = alloca %"class.imp::Vec4", align 8
  %30 = alloca %"class.std::shared_ptr.12", align 8
  %31 = alloca %"class.imp::Vec3", align 8
  %32 = alloca %"class.std::shared_ptr.18", align 8
  %33 = alloca %"class.std::shared_ptr.12", align 8
  %34 = alloca i32, align 4
  %35 = alloca %"class.imp::Vec4", align 8
  %36 = alloca %"class.std::shared_ptr.12", align 8
  %37 = alloca %"class.imp::Vec3", align 8
  %38 = alloca %"class.std::shared_ptr.18", align 8
  %39 = alloca i8, align 1
  %40 = alloca %"class.std::shared_ptr.0", align 8
  %41 = alloca %"class.std::shared_ptr.0", align 8
  %42 = alloca %"class.std::shared_ptr.0", align 8
  %43 = alloca %"class.std::shared_ptr.166", align 8
  %44 = alloca %"class.std::shared_ptr", align 8
  %45 = alloca %"class.std::shared_ptr.166", align 8
  %46 = alloca %"class.std::shared_ptr", align 8
  %47 = alloca %"class.std::__cxx11::basic_string", align 8
  %48 = alloca %"class.std::allocator", align 1
  %49 = alloca %"class.std::__cxx11::basic_string", align 8
  %50 = alloca %"class.std::allocator", align 1
  %51 = alloca i32, align 4
  %52 = alloca %"class.std::__cxx11::basic_string", align 8
  %53 = alloca %"class.std::allocator", align 1
  %54 = alloca %"class.std::__cxx11::basic_string", align 8
  %55 = alloca %"class.std::allocator", align 1
  %56 = alloca %"class.std::__cxx11::basic_string", align 8
  %57 = alloca %"class.std::allocator", align 1
  %58 = alloca %"class.std::shared_ptr.103", align 8
  %59 = alloca %"class.std::shared_ptr.103", align 8
  %60 = alloca %"class.std::shared_ptr.103", align 8
  %61 = alloca %"class.std::shared_ptr.103", align 8
  %62 = alloca %"class.std::shared_ptr.103", align 8
  %63 = alloca %"class.std::shared_ptr.103", align 8
  %64 = alloca %"class.std::shared_ptr.103", align 8
  %65 = alloca %"class.std::shared_ptr.103", align 8
  %66 = alloca %"class.std::shared_ptr.103", align 8
  %67 = alloca %"class.std::shared_ptr.103", align 8
  store ptr %0, ptr %3, align 8, !tbaa !5
  store ptr %1, ptr %4, align 8, !tbaa !5
  %68 = load ptr, ptr %3, align 8
  %69 = getelementptr inbounds %"class.imp::GlRenderer", ptr %68, i32 0, i32 1
  %70 = load ptr, ptr %69, align 8, !tbaa !9
  %71 = icmp eq ptr %70, null
  br i1 %71, label %72, label %73

72:                                               ; preds = %2
  br label %731

73:                                               ; preds = %2
  %74 = getelementptr inbounds %"class.imp::GlRenderer", ptr %68, i32 0, i32 2
  %75 = call noundef zeroext i1 @_ZSteqIN3imp8PipelineEEbRKSt10shared_ptrIT_EDn(ptr noundef nonnull align 8 dereferenceable(16) %74, ptr null) #6
  br i1 %75, label %76, label %80

76:                                               ; preds = %73
  %77 = load ptr, ptr %68, align 8, !tbaa !49
  %78 = getelementptr inbounds ptr, ptr %77, i64 3
  %79 = load ptr, ptr %78, align 8
  call void %79(ptr noundef nonnull align 8 dereferenceable(392) %68)
  br label %80

80:                                               ; preds = %76, %73
  call void @llvm.lifetime.start.p0(i64 16, ptr %5) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr %7) #6
  %81 = getelementptr inbounds %"class.imp::GlRenderer", ptr %68, i32 0, i32 2
  %82 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp8PipelineELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %81) #6
  call void @_ZN3imp8Pipeline12getOperationEi(ptr dead_on_unwind writable sret(%"class.std::shared_ptr.100") align 8 %7, ptr noundef nonnull align 8 dereferenceable(240) %82, i32 noundef 5)
  call void @_ZNSt10shared_ptrIN3imp6ObjectEEC2INS0_14FrameOperationEvEEOS_IT_E(ptr noundef nonnull align 8 dereferenceable(16) %6, ptr noundef nonnull align 8 dereferenceable(16) %7) #6
  invoke void @_ZN3imp13ShadowCasting6dMorphESt10shared_ptrINS_6ObjectEE(ptr dead_on_unwind writable sret(%"class.std::shared_ptr.94") align 8 %5, ptr noundef %6)
          to label %83 unwind label %112

83:                                               ; preds = %80
  call void @_ZNSt12__shared_ptrIN3imp6ObjectELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %6) #6
  call void @_ZNSt12__shared_ptrIN3imp14FrameOperationELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %7) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %7) #6
  %84 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp13ShadowCastingELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %5) #6
  %85 = getelementptr inbounds %"class.imp::SceneRenderer", ptr %68, i32 0, i32 11
  %86 = load i32, ptr %85, align 8, !tbaa !51
  invoke void @_ZN3imp13ShadowCasting14setSampleCountEi(ptr noundef nonnull align 8 dereferenceable(204) %84, i32 noundef %86)
          to label %87 unwind label %116

87:                                               ; preds = %83
  call void @llvm.lifetime.start.p0(i64 16, ptr %10) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr %12) #6
  %88 = getelementptr inbounds %"class.imp::GlRenderer", ptr %68, i32 0, i32 2
  %89 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp8PipelineELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %88) #6
  invoke void @_ZN3imp8Pipeline12getOperationEi(ptr dead_on_unwind writable sret(%"class.std::shared_ptr.100") align 8 %12, ptr noundef nonnull align 8 dereferenceable(240) %89, i32 noundef 9)
          to label %90 unwind label %120

90:                                               ; preds = %87
  call void @_ZNSt10shared_ptrIN3imp6ObjectEEC2INS0_14FrameOperationEvEEOS_IT_E(ptr noundef nonnull align 8 dereferenceable(16) %11, ptr noundef nonnull align 8 dereferenceable(16) %12) #6
  invoke void @_ZN3imp16AmbientOcclusion6dMorphESt10shared_ptrINS_6ObjectEE(ptr dead_on_unwind writable sret(%"class.std::shared_ptr.97") align 8 %10, ptr noundef %11)
          to label %91 unwind label %124

91:                                               ; preds = %90
  call void @_ZNSt12__shared_ptrIN3imp6ObjectELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %11) #6
  call void @_ZNSt12__shared_ptrIN3imp14FrameOperationELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %12) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %12) #6
  %92 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp16AmbientOcclusionELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %10) #6
  %93 = getelementptr inbounds %"class.imp::SceneRenderer", ptr %68, i32 0, i32 12
  %94 = load i32, ptr %93, align 4, !tbaa !52
  invoke void @_ZN3imp16AmbientOcclusion14setSampleCountEi(ptr noundef nonnull align 8 dereferenceable(292) %92, i32 noundef %94)
          to label %95 unwind label %129

95:                                               ; preds = %91
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #6
  %96 = getelementptr inbounds %"class.imp::GlRenderer", ptr %68, i32 0, i32 13
  %97 = load ptr, ptr %4, align 8, !tbaa !5
  %98 = invoke ptr @_ZNSt3mapISt10shared_ptrIN3imp5GraphEES0_INS1_11RenderQueueEESt4lessIS3_ESaISt4pairIKS3_S5_EEE4findERS9_(ptr noundef nonnull align 8 dereferenceable(48) %96, ptr noundef nonnull align 8 dereferenceable(16) %97)
          to label %99 unwind label %133

99:                                               ; preds = %95
  %100 = getelementptr inbounds %"struct.std::_Rb_tree_iterator", ptr %13, i32 0, i32 0
  store ptr %98, ptr %100, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #6
  %101 = getelementptr inbounds %"class.imp::GlRenderer", ptr %68, i32 0, i32 13
  %102 = call ptr @_ZNSt3mapISt10shared_ptrIN3imp5GraphEES0_INS1_11RenderQueueEESt4lessIS3_ESaISt4pairIKS3_S5_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(48) %101) #6
  %103 = getelementptr inbounds %"struct.std::_Rb_tree_iterator", ptr %14, i32 0, i32 0
  store ptr %102, ptr %103, align 8
  %104 = call noundef zeroext i1 @_ZSteqRKSt17_Rb_tree_iteratorISt4pairIKSt10shared_ptrIN3imp5GraphEES1_INS2_11RenderQueueEEEESB_(ptr noundef nonnull align 8 dereferenceable(8) %13, ptr noundef nonnull align 8 dereferenceable(8) %14) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #6
  br i1 %104, label %105, label %146

105:                                              ; preds = %99
  call void @llvm.lifetime.start.p0(i64 16, ptr %15) #6
  invoke void @_ZN3imp11RenderQueue6createIJEEESt10shared_ptrIS0_EDpOT_(ptr dead_on_unwind writable sret(%"class.std::shared_ptr.33") align 8 %15)
          to label %106 unwind label %137

106:                                              ; preds = %105
  %107 = getelementptr inbounds %"class.imp::GlRenderer", ptr %68, i32 0, i32 13
  %108 = load ptr, ptr %4, align 8, !tbaa !5
  %109 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt3mapISt10shared_ptrIN3imp5GraphEES0_INS1_11RenderQueueEESt4lessIS3_ESaISt4pairIKS3_S5_EEEixERS9_(ptr noundef nonnull align 8 dereferenceable(48) %107, ptr noundef nonnull align 8 dereferenceable(16) %108)
          to label %110 unwind label %141

110:                                              ; preds = %106
  %111 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt10shared_ptrIN3imp11RenderQueueEEaSEOS2_(ptr noundef nonnull align 8 dereferenceable(16) %109, ptr noundef nonnull align 8 dereferenceable(16) %15) #6
  call void @_ZNSt12__shared_ptrIN3imp11RenderQueueELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %15) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %15) #6
  br label %146

112:                                              ; preds = %80
  %113 = landingpad { ptr, i32 }
          cleanup
  %114 = extractvalue { ptr, i32 } %113, 0
  store ptr %114, ptr %8, align 8
  %115 = extractvalue { ptr, i32 } %113, 1
  store i32 %115, ptr %9, align 4
  call void @_ZNSt12__shared_ptrIN3imp6ObjectELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %6) #6
  call void @_ZNSt12__shared_ptrIN3imp14FrameOperationELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %7) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %7) #6
  br label %744

116:                                              ; preds = %83
  %117 = landingpad { ptr, i32 }
          cleanup
  %118 = extractvalue { ptr, i32 } %117, 0
  store ptr %118, ptr %8, align 8
  %119 = extractvalue { ptr, i32 } %117, 1
  store i32 %119, ptr %9, align 4
  br label %743

120:                                              ; preds = %87
  %121 = landingpad { ptr, i32 }
          cleanup
  %122 = extractvalue { ptr, i32 } %121, 0
  store ptr %122, ptr %8, align 8
  %123 = extractvalue { ptr, i32 } %121, 1
  store i32 %123, ptr %9, align 4
  br label %128

124:                                              ; preds = %90
  %125 = landingpad { ptr, i32 }
          cleanup
  %126 = extractvalue { ptr, i32 } %125, 0
  store ptr %126, ptr %8, align 8
  %127 = extractvalue { ptr, i32 } %125, 1
  store i32 %127, ptr %9, align 4
  call void @_ZNSt12__shared_ptrIN3imp6ObjectELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %11) #6
  call void @_ZNSt12__shared_ptrIN3imp14FrameOperationELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %12) #6
  br label %128

128:                                              ; preds = %124, %120
  call void @llvm.lifetime.end.p0(i64 16, ptr %12) #6
  br label %742

129:                                              ; preds = %91
  %130 = landingpad { ptr, i32 }
          cleanup
  %131 = extractvalue { ptr, i32 } %130, 0
  store ptr %131, ptr %8, align 8
  %132 = extractvalue { ptr, i32 } %130, 1
  store i32 %132, ptr %9, align 4
  br label %741

133:                                              ; preds = %95
  %134 = landingpad { ptr, i32 }
          cleanup
  %135 = extractvalue { ptr, i32 } %134, 0
  store ptr %135, ptr %8, align 8
  %136 = extractvalue { ptr, i32 } %134, 1
  store i32 %136, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #6
  br label %741

137:                                              ; preds = %105
  %138 = landingpad { ptr, i32 }
          cleanup
  %139 = extractvalue { ptr, i32 } %138, 0
  store ptr %139, ptr %8, align 8
  %140 = extractvalue { ptr, i32 } %138, 1
  store i32 %140, ptr %9, align 4
  br label %145

141:                                              ; preds = %106
  %142 = landingpad { ptr, i32 }
          cleanup
  %143 = extractvalue { ptr, i32 } %142, 0
  store ptr %143, ptr %8, align 8
  %144 = extractvalue { ptr, i32 } %142, 1
  store i32 %144, ptr %9, align 4
  call void @_ZNSt12__shared_ptrIN3imp11RenderQueueELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %15) #6
  br label %145

145:                                              ; preds = %141, %137
  call void @llvm.lifetime.end.p0(i64 16, ptr %15) #6
  br label %741

146:                                              ; preds = %110, %99
  call void @llvm.lifetime.start.p0(i64 16, ptr %16) #6
  %147 = getelementptr inbounds %"class.imp::GlRenderer", ptr %68, i32 0, i32 13
  %148 = load ptr, ptr %4, align 8, !tbaa !5
  %149 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt3mapISt10shared_ptrIN3imp5GraphEES0_INS1_11RenderQueueEESt4lessIS3_ESaISt4pairIKS3_S5_EEEixERS9_(ptr noundef nonnull align 8 dereferenceable(48) %147, ptr noundef nonnull align 8 dereferenceable(16) %148)
          to label %150 unwind label %159

150:                                              ; preds = %146
  call void @_ZNSt10shared_ptrIN3imp11RenderQueueEEC2ERKS2_(ptr noundef nonnull align 8 dereferenceable(16) %16, ptr noundef nonnull align 8 dereferenceable(16) %149) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr %17) #6
  %151 = load ptr, ptr %4, align 8, !tbaa !5
  call void @_ZNSt10shared_ptrIN3imp11RenderQueueEEC2ERKS2_(ptr noundef nonnull align 8 dereferenceable(16) %18, ptr noundef nonnull align 8 dereferenceable(16) %16) #6
  invoke void @_ZN3imp10GlRenderer18applyRenderVisitorERKSt10shared_ptrINS_5GraphEES1_INS_11RenderQueueEE(ptr dead_on_unwind writable sret(%"class.std::shared_ptr.33") align 8 %17, ptr noundef nonnull align 8 dereferenceable(392) %68, ptr noundef nonnull align 8 dereferenceable(16) %151, ptr noundef %18)
          to label %152 unwind label %163

152:                                              ; preds = %150
  %153 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt10shared_ptrIN3imp11RenderQueueEEaSEOS2_(ptr noundef nonnull align 8 dereferenceable(16) %16, ptr noundef nonnull align 8 dereferenceable(16) %17) #6
  call void @_ZNSt12__shared_ptrIN3imp11RenderQueueELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %17) #6
  call void @_ZNSt12__shared_ptrIN3imp11RenderQueueELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %18) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %17) #6
  call void @_ZNSt10shared_ptrIN3imp11RenderQueueEEC2ERKS2_(ptr noundef nonnull align 8 dereferenceable(16) %19, ptr noundef nonnull align 8 dereferenceable(16) %16) #6
  invoke void @_ZN3imp10GlRenderer20applyRenderToSamplerESt10shared_ptrINS_11RenderQueueEE(ptr noundef nonnull align 8 dereferenceable(392) %68, ptr noundef %19)
          to label %154 unwind label %167

154:                                              ; preds = %152
  call void @_ZNSt12__shared_ptrIN3imp11RenderQueueELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %19) #6
  %155 = invoke noundef zeroext i1 @_ZNK3imp13SceneRenderer13isMsaaEnabledEv(ptr noundef nonnull align 8 dereferenceable(137) %68)
          to label %156 unwind label %171

156:                                              ; preds = %154
  br i1 %155, label %157, label %175

157:                                              ; preds = %156
  invoke void @glEnable(i32 noundef 32925)
          to label %158 unwind label %171

158:                                              ; preds = %157
  br label %177

159:                                              ; preds = %146
  %160 = landingpad { ptr, i32 }
          cleanup
  %161 = extractvalue { ptr, i32 } %160, 0
  store ptr %161, ptr %8, align 8
  %162 = extractvalue { ptr, i32 } %160, 1
  store i32 %162, ptr %9, align 4
  br label %740

163:                                              ; preds = %150
  %164 = landingpad { ptr, i32 }
          cleanup
  %165 = extractvalue { ptr, i32 } %164, 0
  store ptr %165, ptr %8, align 8
  %166 = extractvalue { ptr, i32 } %164, 1
  store i32 %166, ptr %9, align 4
  call void @_ZNSt12__shared_ptrIN3imp11RenderQueueELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %18) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %17) #6
  br label %739

167:                                              ; preds = %152
  %168 = landingpad { ptr, i32 }
          cleanup
  %169 = extractvalue { ptr, i32 } %168, 0
  store ptr %169, ptr %8, align 8
  %170 = extractvalue { ptr, i32 } %168, 1
  store i32 %170, ptr %9, align 4
  call void @_ZNSt12__shared_ptrIN3imp11RenderQueueELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %19) #6
  br label %739

171:                                              ; preds = %198, %192, %184, %177, %175, %157, %154
  %172 = landingpad { ptr, i32 }
          cleanup
  %173 = extractvalue { ptr, i32 } %172, 0
  store ptr %173, ptr %8, align 8
  %174 = extractvalue { ptr, i32 } %172, 1
  store i32 %174, ptr %9, align 4
  br label %739

175:                                              ; preds = %156
  invoke void @glDisable(i32 noundef 32925)
          to label %176 unwind label %171

176:                                              ; preds = %175
  br label %177

177:                                              ; preds = %176, %158
  %178 = getelementptr inbounds %"class.imp::GlRenderer", ptr %68, i32 0, i32 1
  %179 = load ptr, ptr %178, align 8, !tbaa !9
  %180 = getelementptr inbounds %"class.imp::GlRenderer", ptr %68, i32 0, i32 11
  %181 = load ptr, ptr %179, align 8, !tbaa !49
  %182 = getelementptr inbounds ptr, ptr %181, i64 15
  %183 = load ptr, ptr %182, align 8
  invoke void %183(ptr noundef nonnull align 8 dereferenceable(24) %179, ptr noundef nonnull align 8 dereferenceable(16) %180)
          to label %184 unwind label %171

184:                                              ; preds = %177
  %185 = getelementptr inbounds %"class.imp::GlRenderer", ptr %68, i32 0, i32 1
  %186 = load ptr, ptr %185, align 8, !tbaa !9
  %187 = getelementptr inbounds %"class.imp::GlRenderer", ptr %68, i32 0, i32 11
  %188 = load ptr, ptr %186, align 8, !tbaa !49
  %189 = getelementptr inbounds ptr, ptr %188, i64 10
  %190 = load ptr, ptr %189, align 8
  invoke void %190(ptr noundef nonnull align 8 dereferenceable(24) %186, ptr noundef nonnull align 8 dereferenceable(16) %187)
          to label %191 unwind label %171

191:                                              ; preds = %184
  call void @_ZNSt10shared_ptrIN3imp5StateEEC2EDn(ptr noundef nonnull align 8 dereferenceable(16) %20, ptr null) #6
  invoke void @_ZN3imp10GlRenderer9drawQueueERSt10shared_ptrINS_11RenderQueueEES1_INS_5StateEENS_13SceneRenderer11RenderFrameE(ptr noundef nonnull align 8 dereferenceable(392) %68, ptr noundef nonnull align 8 dereferenceable(16) %16, ptr noundef %20, i32 noundef 0)
          to label %192 unwind label %210

192:                                              ; preds = %191
  call void @_ZNSt12__shared_ptrIN3imp5StateELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %20) #6
  %193 = getelementptr inbounds %"class.imp::GlRenderer", ptr %68, i32 0, i32 1
  %194 = load ptr, ptr %193, align 8, !tbaa !9
  %195 = load ptr, ptr %194, align 8, !tbaa !49
  %196 = getelementptr inbounds ptr, ptr %195, i64 16
  %197 = load ptr, ptr %196, align 8
  invoke void %197(ptr noundef nonnull align 8 dereferenceable(24) %194)
          to label %198 unwind label %171

198:                                              ; preds = %192
  %199 = getelementptr inbounds %"class.imp::GlRenderer", ptr %68, i32 0, i32 11
  %200 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp12RenderTargetELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %199) #6
  invoke void @_ZN3imp12RenderTarget6changeEv(ptr noundef nonnull align 8 dereferenceable(99) %200)
          to label %201 unwind label %171

201:                                              ; preds = %198
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #6
  store ptr null, ptr %21, align 8, !tbaa !5
  %202 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp11RenderQueueELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %16) #6
  %203 = getelementptr inbounds %"class.imp::RenderQueue", ptr %202, i32 0, i32 2
  %204 = call noundef zeroext i1 @_ZNKSt6vectorIPN3imp9LightNodeESaIS2_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %203) #6
  br i1 %204, label %214, label %205

205:                                              ; preds = %201
  %206 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp11RenderQueueELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %16) #6
  %207 = getelementptr inbounds %"class.imp::RenderQueue", ptr %206, i32 0, i32 2
  %208 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIPN3imp9LightNodeESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %207, i64 noundef 0) #6
  %209 = load ptr, ptr %208, align 8, !tbaa !5
  store ptr %209, ptr %21, align 8, !tbaa !5
  br label %214

210:                                              ; preds = %191
  %211 = landingpad { ptr, i32 }
          cleanup
  %212 = extractvalue { ptr, i32 } %211, 0
  store ptr %212, ptr %8, align 8
  %213 = extractvalue { ptr, i32 } %211, 1
  store i32 %213, ptr %9, align 4
  call void @_ZNSt12__shared_ptrIN3imp5StateELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %20) #6
  br label %739

214:                                              ; preds = %205, %201
  call void @llvm.lifetime.start.p0(i64 1, ptr %22) #6
  %215 = invoke noundef zeroext i1 @_ZNK3imp13SceneRenderer16isFeatureEnabledENS0_7FeatureE(ptr noundef nonnull align 8 dereferenceable(137) %68, i32 noundef 2)
          to label %216 unwind label %266

216:                                              ; preds = %214
  %217 = zext i1 %215 to i8
  store i8 %217, ptr %22, align 1, !tbaa !53
  call void @llvm.lifetime.start.p0(i64 1, ptr %23) #6
  %218 = invoke noundef zeroext i1 @_ZNK3imp13SceneRenderer16isFeatureEnabledENS0_7FeatureE(ptr noundef nonnull align 8 dereferenceable(137) %68, i32 noundef 1)
          to label %219 unwind label %270

219:                                              ; preds = %216
  br i1 %218, label %220, label %223

220:                                              ; preds = %219
  %221 = load ptr, ptr %21, align 8, !tbaa !5
  %222 = icmp ne ptr %221, null
  br label %223

223:                                              ; preds = %220, %219
  %224 = phi i1 [ false, %219 ], [ %222, %220 ]
  %225 = zext i1 %224 to i8
  store i8 %225, ptr %23, align 1, !tbaa !53
  call void @llvm.lifetime.start.p0(i64 1, ptr %24) #6
  %226 = invoke noundef zeroext i1 @_ZNK3imp13SceneRenderer16isFeatureEnabledENS0_7FeatureE(ptr noundef nonnull align 8 dereferenceable(137) %68, i32 noundef 0)
          to label %227 unwind label %274

227:                                              ; preds = %223
  %228 = zext i1 %226 to i8
  store i8 %228, ptr %24, align 1, !tbaa !53
  call void @llvm.lifetime.start.p0(i64 1, ptr %25) #6
  %229 = invoke noundef zeroext i1 @_ZNK3imp13SceneRenderer16isFeatureEnabledENS0_7FeatureE(ptr noundef nonnull align 8 dereferenceable(137) %68, i32 noundef 3)
          to label %230 unwind label %278

230:                                              ; preds = %227
  %231 = zext i1 %229 to i8
  store i8 %231, ptr %25, align 1, !tbaa !53
  call void @llvm.lifetime.start.p0(i64 1, ptr %26) #6
  %232 = invoke noundef zeroext i1 @_ZNK3imp13SceneRenderer16isFeatureEnabledENS0_7FeatureE(ptr noundef nonnull align 8 dereferenceable(137) %68, i32 noundef 4)
          to label %233 unwind label %282

233:                                              ; preds = %230
  br i1 %232, label %234, label %237

234:                                              ; preds = %233
  %235 = load ptr, ptr %21, align 8, !tbaa !5
  %236 = icmp ne ptr %235, null
  br label %237

237:                                              ; preds = %234, %233
  %238 = phi i1 [ false, %233 ], [ %236, %234 ]
  %239 = zext i1 %238 to i8
  store i8 %239, ptr %26, align 1, !tbaa !53
  %240 = load i8, ptr %22, align 1, !tbaa !53, !range !54, !noundef !55
  %241 = trunc i8 %240 to i1
  br i1 %241, label %242, label %330

242:                                              ; preds = %237
  %243 = getelementptr inbounds %"class.imp::SceneRenderer", ptr %68, i32 0, i32 10
  %244 = load i32, ptr %243, align 4, !tbaa !56
  %245 = load i32, ptr @_ZZN3imp10GlRenderer6renderERKSt10shared_ptrINS_5GraphEEE12s_lastEnvRes, align 4, !tbaa !57
  %246 = icmp ne i32 %244, %245
  br i1 %246, label %247, label %299

247:                                              ; preds = %242
  call void @llvm.lifetime.start.p0(i64 16, ptr %27) #6
  %248 = getelementptr inbounds %"class.imp::SceneRenderer", ptr %68, i32 0, i32 10
  %249 = getelementptr inbounds %"class.imp::SceneRenderer", ptr %68, i32 0, i32 10
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #6
  store i32 4, ptr %28, align 4, !tbaa !57
  call void @llvm.lifetime.start.p0(i64 40, ptr %29) #6
  invoke void @_ZN3imp4Vec4C2Ef(ptr noundef nonnull align 8 dereferenceable(40) %29, float noundef 1.000000e+00)
          to label %250 unwind label %286

250:                                              ; preds = %247
  invoke void @_ZN3imp14CubeMapSampler6createIJRiS2_iNS_4Vec4EEEESt10shared_ptrIS0_EDpOT_(ptr dead_on_unwind writable sret(%"class.std::shared_ptr.12") align 8 %27, ptr noundef nonnull align 4 dereferenceable(4) %248, ptr noundef nonnull align 4 dereferenceable(4) %249, ptr noundef nonnull align 4 dereferenceable(4) %28, ptr noundef nonnull align 8 dereferenceable(40) %29)
          to label %251 unwind label %290

251:                                              ; preds = %250
  %252 = getelementptr inbounds %"class.imp::GlRenderer", ptr %68, i32 0, i32 5
  %253 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt10shared_ptrIN3imp14CubeMapSamplerEEaSEOS2_(ptr noundef nonnull align 8 dereferenceable(16) %252, ptr noundef nonnull align 8 dereferenceable(16) %27) #6
  call void @_ZNSt12__shared_ptrIN3imp14CubeMapSamplerELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %27) #6
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %29) #6
  call void @llvm.lifetime.end.p0(i64 40, ptr %29) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %27) #6
  %254 = getelementptr inbounds %"class.imp::GlRenderer", ptr %68, i32 0, i32 7
  %255 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp15RenderToCubeMapELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %254) #6
  %256 = getelementptr inbounds %"class.imp::GlRenderer", ptr %68, i32 0, i32 5
  call void @_ZNSt10shared_ptrIN3imp14CubeMapSamplerEEC2ERKS2_(ptr noundef nonnull align 8 dereferenceable(16) %30, ptr noundef nonnull align 8 dereferenceable(16) %256) #6
  invoke void @_ZN3imp15RenderToCubeMap10setCubeMapESt10shared_ptrINS_14CubeMapSamplerEE(ptr noundef nonnull align 8 dereferenceable(812) %255, ptr noundef %30)
          to label %257 unwind label %295

257:                                              ; preds = %251
  call void @_ZNSt12__shared_ptrIN3imp14CubeMapSamplerELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %30) #6
  %258 = getelementptr inbounds %"class.imp::GlRenderer", ptr %68, i32 0, i32 7
  %259 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp15RenderToCubeMapELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %258) #6
  %260 = getelementptr inbounds %"class.imp::SceneRenderer", ptr %68, i32 0, i32 10
  %261 = load i32, ptr %260, align 4, !tbaa !56
  %262 = sitofp i32 %261 to float
  invoke void @_ZN3imp15RenderToCubeMap13setResolutionEf(ptr noundef nonnull align 8 dereferenceable(812) %259, float noundef %262)
          to label %263 unwind label %282

263:                                              ; preds = %257
  %264 = getelementptr inbounds %"class.imp::SceneRenderer", ptr %68, i32 0, i32 10
  %265 = load i32, ptr %264, align 4, !tbaa !56
  store i32 %265, ptr @_ZZN3imp10GlRenderer6renderERKSt10shared_ptrINS_5GraphEEE12s_lastEnvRes, align 4, !tbaa !57
  br label %299

266:                                              ; preds = %214
  %267 = landingpad { ptr, i32 }
          cleanup
  %268 = extractvalue { ptr, i32 } %267, 0
  store ptr %268, ptr %8, align 8
  %269 = extractvalue { ptr, i32 } %267, 1
  store i32 %269, ptr %9, align 4
  br label %738

270:                                              ; preds = %216
  %271 = landingpad { ptr, i32 }
          cleanup
  %272 = extractvalue { ptr, i32 } %271, 0
  store ptr %272, ptr %8, align 8
  %273 = extractvalue { ptr, i32 } %271, 1
  store i32 %273, ptr %9, align 4
  br label %737

274:                                              ; preds = %223
  %275 = landingpad { ptr, i32 }
          cleanup
  %276 = extractvalue { ptr, i32 } %275, 0
  store ptr %276, ptr %8, align 8
  %277 = extractvalue { ptr, i32 } %275, 1
  store i32 %277, ptr %9, align 4
  br label %736

278:                                              ; preds = %227
  %279 = landingpad { ptr, i32 }
          cleanup
  %280 = extractvalue { ptr, i32 } %279, 0
  store ptr %280, ptr %8, align 8
  %281 = extractvalue { ptr, i32 } %279, 1
  store i32 %281, ptr %9, align 4
  br label %735

282:                                              ; preds = %348, %257, %230
  %283 = landingpad { ptr, i32 }
          cleanup
  %284 = extractvalue { ptr, i32 } %283, 0
  store ptr %284, ptr %8, align 8
  %285 = extractvalue { ptr, i32 } %283, 1
  store i32 %285, ptr %9, align 4
  br label %734

286:                                              ; preds = %247
  %287 = landingpad { ptr, i32 }
          cleanup
  %288 = extractvalue { ptr, i32 } %287, 0
  store ptr %288, ptr %8, align 8
  %289 = extractvalue { ptr, i32 } %287, 1
  store i32 %289, ptr %9, align 4
  br label %294

290:                                              ; preds = %250
  %291 = landingpad { ptr, i32 }
          cleanup
  %292 = extractvalue { ptr, i32 } %291, 0
  store ptr %292, ptr %8, align 8
  %293 = extractvalue { ptr, i32 } %291, 1
  store i32 %293, ptr %9, align 4
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %29) #6
  br label %294

294:                                              ; preds = %290, %286
  call void @llvm.lifetime.end.p0(i64 40, ptr %29) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %27) #6
  br label %734

295:                                              ; preds = %251
  %296 = landingpad { ptr, i32 }
          cleanup
  %297 = extractvalue { ptr, i32 } %296, 0
  store ptr %297, ptr %8, align 8
  %298 = extractvalue { ptr, i32 } %296, 1
  store i32 %298, ptr %9, align 4
  call void @_ZNSt12__shared_ptrIN3imp14CubeMapSamplerELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %30) #6
  br label %734

299:                                              ; preds = %263, %242
  call void @llvm.lifetime.start.p0(i64 40, ptr %31) #6
  invoke void @_ZN3imp4Vec3C2Ef(ptr noundef nonnull align 8 dereferenceable(36) %31, float noundef 0.000000e+00)
          to label %300 unwind label %312

300:                                              ; preds = %299
  %301 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp11RenderQueueELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %16) #6
  %302 = getelementptr inbounds %"class.imp::RenderQueue", ptr %301, i32 0, i32 1
  %303 = load ptr, ptr %302, align 8, !tbaa !58
  %304 = icmp ne ptr %303, null
  br i1 %304, label %305, label %320

305:                                              ; preds = %300
  %306 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp11RenderQueueELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %16) #6
  %307 = getelementptr inbounds %"class.imp::RenderQueue", ptr %306, i32 0, i32 1
  %308 = load ptr, ptr %307, align 8, !tbaa !58
  %309 = invoke noundef nonnull align 8 dereferenceable(36) ptr @_ZNK3imp6Camera19getAbsolutePositionEv(ptr noundef nonnull align 8 dereferenceable(752) %308)
          to label %310 unwind label %316

310:                                              ; preds = %305
  %311 = call noundef nonnull align 8 dereferenceable(36) ptr @_ZN3imp4Vec3aSERKS0_(ptr noundef nonnull align 8 dereferenceable(36) %31, ptr noundef nonnull align 8 dereferenceable(36) %309) #6
  br label %320

312:                                              ; preds = %299
  %313 = landingpad { ptr, i32 }
          cleanup
  %314 = extractvalue { ptr, i32 } %313, 0
  store ptr %314, ptr %8, align 8
  %315 = extractvalue { ptr, i32 } %313, 1
  store i32 %315, ptr %9, align 4
  br label %329

316:                                              ; preds = %305
  %317 = landingpad { ptr, i32 }
          cleanup
  %318 = extractvalue { ptr, i32 } %317, 0
  store ptr %318, ptr %8, align 8
  %319 = extractvalue { ptr, i32 } %317, 1
  store i32 %319, ptr %9, align 4
  br label %328

320:                                              ; preds = %310, %300
  %321 = getelementptr inbounds %"class.imp::GlRenderer", ptr %68, i32 0, i32 7
  %322 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp15RenderToCubeMapELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %321) #6
  call void @_ZNSt10shared_ptrIN3imp14ReflexionModelEEC2EDn(ptr noundef nonnull align 8 dereferenceable(16) %32, ptr null) #6
  invoke void @_ZN3imp15RenderToCubeMap6renderERSt10shared_ptrINS_11RenderQueueEERKNS_4Vec3ENS_13SceneRenderer11RenderFrameES1_INS_14ReflexionModelEE(ptr noundef nonnull align 8 dereferenceable(812) %322, ptr noundef nonnull align 8 dereferenceable(16) %16, ptr noundef nonnull align 8 dereferenceable(36) %31, i32 noundef 4, ptr noundef %32)
          to label %323 unwind label %324

323:                                              ; preds = %320
  call void @_ZNSt12__shared_ptrIN3imp14ReflexionModelELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %32) #6
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(36) %31) #6
  call void @llvm.lifetime.end.p0(i64 40, ptr %31) #6
  br label %330

324:                                              ; preds = %320
  %325 = landingpad { ptr, i32 }
          cleanup
  %326 = extractvalue { ptr, i32 } %325, 0
  store ptr %326, ptr %8, align 8
  %327 = extractvalue { ptr, i32 } %325, 1
  store i32 %327, ptr %9, align 4
  call void @_ZNSt12__shared_ptrIN3imp14ReflexionModelELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %32) #6
  br label %328

328:                                              ; preds = %324, %316
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(36) %31) #6
  br label %329

329:                                              ; preds = %328, %312
  call void @llvm.lifetime.end.p0(i64 40, ptr %31) #6
  br label %734

330:                                              ; preds = %323, %237
  %331 = load i8, ptr %23, align 1, !tbaa !53, !range !54, !noundef !55
  %332 = trunc i8 %331 to i1
  br i1 %332, label %333, label %392

333:                                              ; preds = %330
  %334 = getelementptr inbounds %"class.imp::SceneRenderer", ptr %68, i32 0, i32 9
  %335 = load i32, ptr %334, align 8, !tbaa !69
  %336 = load i32, ptr @_ZZN3imp10GlRenderer6renderERKSt10shared_ptrINS_5GraphEEE15s_lastShadowRes, align 4, !tbaa !57
  %337 = icmp ne i32 %335, %336
  br i1 %337, label %338, label %370

338:                                              ; preds = %333
  call void @llvm.lifetime.start.p0(i64 16, ptr %33) #6
  %339 = getelementptr inbounds %"class.imp::SceneRenderer", ptr %68, i32 0, i32 9
  %340 = getelementptr inbounds %"class.imp::SceneRenderer", ptr %68, i32 0, i32 9
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #6
  store i32 4, ptr %34, align 4, !tbaa !57
  call void @llvm.lifetime.start.p0(i64 40, ptr %35) #6
  invoke void @_ZN3imp4Vec4C2Ef(ptr noundef nonnull align 8 dereferenceable(40) %35, float noundef 1.000000e+00)
          to label %341 unwind label %357

341:                                              ; preds = %338
  invoke void @_ZN3imp14CubeMapSampler6createIJRiS2_iNS_4Vec4EEEESt10shared_ptrIS0_EDpOT_(ptr dead_on_unwind writable sret(%"class.std::shared_ptr.12") align 8 %33, ptr noundef nonnull align 4 dereferenceable(4) %339, ptr noundef nonnull align 4 dereferenceable(4) %340, ptr noundef nonnull align 4 dereferenceable(4) %34, ptr noundef nonnull align 8 dereferenceable(40) %35)
          to label %342 unwind label %361

342:                                              ; preds = %341
  %343 = getelementptr inbounds %"class.imp::GlRenderer", ptr %68, i32 0, i32 4
  %344 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt10shared_ptrIN3imp14CubeMapSamplerEEaSEOS2_(ptr noundef nonnull align 8 dereferenceable(16) %343, ptr noundef nonnull align 8 dereferenceable(16) %33) #6
  call void @_ZNSt12__shared_ptrIN3imp14CubeMapSamplerELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %33) #6
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %35) #6
  call void @llvm.lifetime.end.p0(i64 40, ptr %35) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %33) #6
  %345 = getelementptr inbounds %"class.imp::GlRenderer", ptr %68, i32 0, i32 6
  %346 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp15RenderToCubeMapELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %345) #6
  %347 = getelementptr inbounds %"class.imp::GlRenderer", ptr %68, i32 0, i32 4
  call void @_ZNSt10shared_ptrIN3imp14CubeMapSamplerEEC2ERKS2_(ptr noundef nonnull align 8 dereferenceable(16) %36, ptr noundef nonnull align 8 dereferenceable(16) %347) #6
  invoke void @_ZN3imp15RenderToCubeMap10setCubeMapESt10shared_ptrINS_14CubeMapSamplerEE(ptr noundef nonnull align 8 dereferenceable(812) %346, ptr noundef %36)
          to label %348 unwind label %366

348:                                              ; preds = %342
  call void @_ZNSt12__shared_ptrIN3imp14CubeMapSamplerELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %36) #6
  %349 = getelementptr inbounds %"class.imp::GlRenderer", ptr %68, i32 0, i32 6
  %350 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp15RenderToCubeMapELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %349) #6
  %351 = getelementptr inbounds %"class.imp::SceneRenderer", ptr %68, i32 0, i32 9
  %352 = load i32, ptr %351, align 8, !tbaa !69
  %353 = sitofp i32 %352 to float
  invoke void @_ZN3imp15RenderToCubeMap13setResolutionEf(ptr noundef nonnull align 8 dereferenceable(812) %350, float noundef %353)
          to label %354 unwind label %282

354:                                              ; preds = %348
  %355 = getelementptr inbounds %"class.imp::SceneRenderer", ptr %68, i32 0, i32 9
  %356 = load i32, ptr %355, align 8, !tbaa !69
  store i32 %356, ptr @_ZZN3imp10GlRenderer6renderERKSt10shared_ptrINS_5GraphEEE15s_lastShadowRes, align 4, !tbaa !57
  br label %370

357:                                              ; preds = %338
  %358 = landingpad { ptr, i32 }
          cleanup
  %359 = extractvalue { ptr, i32 } %358, 0
  store ptr %359, ptr %8, align 8
  %360 = extractvalue { ptr, i32 } %358, 1
  store i32 %360, ptr %9, align 4
  br label %365

361:                                              ; preds = %341
  %362 = landingpad { ptr, i32 }
          cleanup
  %363 = extractvalue { ptr, i32 } %362, 0
  store ptr %363, ptr %8, align 8
  %364 = extractvalue { ptr, i32 } %362, 1
  store i32 %364, ptr %9, align 4
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %35) #6
  br label %365

365:                                              ; preds = %361, %357
  call void @llvm.lifetime.end.p0(i64 40, ptr %35) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %33) #6
  br label %734

366:                                              ; preds = %342
  %367 = landingpad { ptr, i32 }
          cleanup
  %368 = extractvalue { ptr, i32 } %367, 0
  store ptr %368, ptr %8, align 8
  %369 = extractvalue { ptr, i32 } %367, 1
  store i32 %369, ptr %9, align 4
  call void @_ZNSt12__shared_ptrIN3imp14CubeMapSamplerELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %36) #6
  br label %734

370:                                              ; preds = %354, %333
  call void @llvm.lifetime.start.p0(i64 40, ptr %37) #6
  invoke void @_ZN3imp4Vec3C2Ef(ptr noundef nonnull align 8 dereferenceable(36) %37, float noundef 0.000000e+00)
          to label %371 unwind label %378

371:                                              ; preds = %370
  %372 = load ptr, ptr %21, align 8, !tbaa !5
  %373 = icmp ne ptr %372, null
  br i1 %373, label %374, label %382

374:                                              ; preds = %371
  %375 = load ptr, ptr %21, align 8, !tbaa !5
  %376 = getelementptr inbounds %"class.imp::LightNode", ptr %375, i32 0, i32 1
  %377 = call noundef nonnull align 8 dereferenceable(36) ptr @_ZN3imp4Vec3aSERKS0_(ptr noundef nonnull align 8 dereferenceable(36) %37, ptr noundef nonnull align 8 dereferenceable(36) %376) #6
  br label %382

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

382:                                              ; preds = %374, %371
  %383 = getelementptr inbounds %"class.imp::GlRenderer", ptr %68, i32 0, i32 6
  %384 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp15RenderToCubeMapELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %383) #6
  %385 = getelementptr inbounds %"class.imp::GlRenderer", ptr %68, i32 0, i32 8
  call void @_ZNSt10shared_ptrIN3imp14ReflexionModelEEC2ERKS2_(ptr noundef nonnull align 8 dereferenceable(16) %38, ptr noundef nonnull align 8 dereferenceable(16) %385) #6
  invoke void @_ZN3imp15RenderToCubeMap6renderERSt10shared_ptrINS_11RenderQueueEERKNS_4Vec3ENS_13SceneRenderer11RenderFrameES1_INS_14ReflexionModelEE(ptr noundef nonnull align 8 dereferenceable(812) %384, ptr noundef nonnull align 8 dereferenceable(16) %16, ptr noundef nonnull align 8 dereferenceable(36) %37, i32 noundef 2, ptr noundef %38)
          to label %386 unwind label %387

386:                                              ; preds = %382
  call void @_ZNSt12__shared_ptrIN3imp14ReflexionModelELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %38) #6
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(36) %37) #6
  call void @llvm.lifetime.end.p0(i64 40, ptr %37) #6
  br label %392

387:                                              ; preds = %382
  %388 = landingpad { ptr, i32 }
          cleanup
  %389 = extractvalue { ptr, i32 } %388, 0
  store ptr %389, ptr %8, align 8
  %390 = extractvalue { ptr, i32 } %388, 1
  store i32 %390, ptr %9, align 4
  call void @_ZNSt12__shared_ptrIN3imp14ReflexionModelELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %38) #6
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(36) %37) #6
  br label %391

391:                                              ; preds = %387, %378
  call void @llvm.lifetime.end.p0(i64 40, ptr %37) #6
  br label %734

392:                                              ; preds = %386, %330
  call void @llvm.lifetime.start.p0(i64 1, ptr %39) #6
  %393 = invoke noundef zeroext i1 @_ZNK3imp13SceneRenderer13isMsaaEnabledEv(ptr noundef nonnull align 8 dereferenceable(137) %68)
          to label %394 unwind label %435

394:                                              ; preds = %392
  %395 = zext i1 %393 to i8
  store i8 %395, ptr %39, align 1, !tbaa !53
  call void @llvm.lifetime.start.p0(i64 16, ptr %40) #6
  %396 = getelementptr inbounds %"class.imp::GlRenderer", ptr %68, i32 0, i32 11
  call void @_ZNSt10shared_ptrIN3imp12RenderTargetEEC2ERKS2_(ptr noundef nonnull align 8 dereferenceable(16) %40, ptr noundef nonnull align 8 dereferenceable(16) %396) #6
  %397 = load i8, ptr %39, align 1, !tbaa !53, !range !54, !noundef !55
  %398 = trunc i8 %397 to i1
  br i1 %398, label %399, label %555

399:                                              ; preds = %394
  %400 = getelementptr inbounds %"class.imp::GlRenderer", ptr %68, i32 0, i32 1
  %401 = load ptr, ptr %400, align 8, !tbaa !9
  %402 = getelementptr inbounds %"class.imp::GlRenderer", ptr %68, i32 0, i32 12
  %403 = load ptr, ptr %401, align 8, !tbaa !49
  %404 = getelementptr inbounds ptr, ptr %403, i64 15
  %405 = load ptr, ptr %404, align 8
  invoke void %405(ptr noundef nonnull align 8 dereferenceable(24) %401, ptr noundef nonnull align 8 dereferenceable(16) %402)
          to label %406 unwind label %439

406:                                              ; preds = %399
  call void @llvm.lifetime.start.p0(i64 16, ptr %41) #6
  %407 = getelementptr inbounds %"class.imp::GlRenderer", ptr %68, i32 0, i32 11
  call void @_ZNSt10shared_ptrIN3imp12RenderTargetEEC2ERKS2_(ptr noundef nonnull align 8 dereferenceable(16) %41, ptr noundef nonnull align 8 dereferenceable(16) %407) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr %42) #6
  %408 = getelementptr inbounds %"class.imp::GlRenderer", ptr %68, i32 0, i32 12
  call void @_ZNSt10shared_ptrIN3imp12RenderTargetEEC2ERKS2_(ptr noundef nonnull align 8 dereferenceable(16) %42, ptr noundef nonnull align 8 dereferenceable(16) %408) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr %43) #6
  %409 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp12RenderTargetELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %41) #6
  invoke void @_ZN3imp6Object13getRenderDataEv(ptr dead_on_unwind writable sret(%"class.std::shared_ptr") align 8 %44, ptr noundef nonnull align 8 dereferenceable(24) %409)
          to label %410 unwind label %443

410:                                              ; preds = %406
  invoke void @_ZN3imp11FrameBuffer6dMorphESt10shared_ptrINS_6ObjectEE(ptr dead_on_unwind writable sret(%"class.std::shared_ptr.166") align 8 %43, ptr noundef %44)
          to label %411 unwind label %447

411:                                              ; preds = %410
  call void @_ZNSt12__shared_ptrIN3imp6ObjectELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %44) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr %45) #6
  %412 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp12RenderTargetELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %42) #6
  invoke void @_ZN3imp6Object13getRenderDataEv(ptr dead_on_unwind writable sret(%"class.std::shared_ptr") align 8 %46, ptr noundef nonnull align 8 dereferenceable(24) %412)
          to label %413 unwind label %451

413:                                              ; preds = %411
  invoke void @_ZN3imp11FrameBuffer6dMorphESt10shared_ptrINS_6ObjectEE(ptr dead_on_unwind writable sret(%"class.std::shared_ptr.166") align 8 %45, ptr noundef %46)
          to label %414 unwind label %455

414:                                              ; preds = %413
  call void @_ZNSt12__shared_ptrIN3imp6ObjectELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %46) #6
  %415 = load ptr, ptr @__glewBindFramebuffer, align 8, !tbaa !5
  %416 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp11FrameBufferELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %45) #6
  %417 = invoke noundef i32 @_ZNK3imp11FrameBuffer10getVideoIDEv(ptr noundef nonnull align 8 dereferenceable(144) %416)
          to label %418 unwind label %459

418:                                              ; preds = %414
  invoke void %415(i32 noundef 36009, i32 noundef %417)
          to label %419 unwind label %459

419:                                              ; preds = %418
  call void @llvm.lifetime.start.p0(i64 32, ptr %47) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr %48) #6
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %48) #6
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %47, ptr noundef @.str.43, ptr noundef nonnull align 1 dereferenceable(1) %48)
          to label %420 unwind label %463

420:                                              ; preds = %419
  %421 = invoke noundef zeroext i1 @_Z12GLcheckErrorRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPKci(ptr noundef nonnull align 8 dereferenceable(32) %47, ptr noundef @.str.44, i32 noundef 610)
          to label %422 unwind label %467

422:                                              ; preds = %420
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %47) #6
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %48) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %48) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %47) #6
  %423 = load ptr, ptr @__glewBindFramebuffer, align 8, !tbaa !5
  %424 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp11FrameBufferELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %43) #6
  %425 = invoke noundef i32 @_ZNK3imp11FrameBuffer10getVideoIDEv(ptr noundef nonnull align 8 dereferenceable(144) %424)
          to label %426 unwind label %459

426:                                              ; preds = %422
  invoke void %423(i32 noundef 36008, i32 noundef %425)
          to label %427 unwind label %459

427:                                              ; preds = %426
  call void @llvm.lifetime.start.p0(i64 32, ptr %49) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr %50) #6
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %50) #6
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %49, ptr noundef @.str.45, ptr noundef nonnull align 1 dereferenceable(1) %50)
          to label %428 unwind label %472

428:                                              ; preds = %427
  %429 = invoke noundef zeroext i1 @_Z12GLcheckErrorRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPKci(ptr noundef nonnull align 8 dereferenceable(32) %49, ptr noundef @.str.44, i32 noundef 612)
          to label %430 unwind label %476

430:                                              ; preds = %428
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %49) #6
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %50) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %50) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %49) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %51) #6
  store i32 0, ptr %51, align 4, !tbaa !57
  br label %431

431:                                              ; preds = %511, %430
  %432 = load i32, ptr %51, align 4, !tbaa !57
  %433 = icmp slt i32 %432, 6
  br i1 %433, label %481, label %434

434:                                              ; preds = %431
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #6
  br label %546

435:                                              ; preds = %392
  %436 = landingpad { ptr, i32 }
          cleanup
  %437 = extractvalue { ptr, i32 } %436, 0
  store ptr %437, ptr %8, align 8
  %438 = extractvalue { ptr, i32 } %436, 1
  store i32 %438, ptr %9, align 4
  br label %733

439:                                              ; preds = %723, %719, %716, %707, %702, %697, %694, %682, %672, %662, %651, %641, %631, %620, %609, %598, %588, %585, %580, %575, %570, %565, %560, %555, %399
  %440 = landingpad { ptr, i32 }
          cleanup
  %441 = extractvalue { ptr, i32 } %440, 0
  store ptr %441, ptr %8, align 8
  %442 = extractvalue { ptr, i32 } %440, 1
  store i32 %442, ptr %9, align 4
  br label %732

443:                                              ; preds = %406
  %444 = landingpad { ptr, i32 }
          cleanup
  %445 = extractvalue { ptr, i32 } %444, 0
  store ptr %445, ptr %8, align 8
  %446 = extractvalue { ptr, i32 } %444, 1
  store i32 %446, ptr %9, align 4
  br label %554

447:                                              ; preds = %410
  %448 = landingpad { ptr, i32 }
          cleanup
  %449 = extractvalue { ptr, i32 } %448, 0
  store ptr %449, ptr %8, align 8
  %450 = extractvalue { ptr, i32 } %448, 1
  store i32 %450, ptr %9, align 4
  call void @_ZNSt12__shared_ptrIN3imp6ObjectELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %44) #6
  br label %554

451:                                              ; preds = %411
  %452 = landingpad { ptr, i32 }
          cleanup
  %453 = extractvalue { ptr, i32 } %452, 0
  store ptr %453, ptr %8, align 8
  %454 = extractvalue { ptr, i32 } %452, 1
  store i32 %454, ptr %9, align 4
  br label %553

455:                                              ; preds = %413
  %456 = landingpad { ptr, i32 }
          cleanup
  %457 = extractvalue { ptr, i32 } %456, 0
  store ptr %457, ptr %8, align 8
  %458 = extractvalue { ptr, i32 } %456, 1
  store i32 %458, ptr %9, align 4
  call void @_ZNSt12__shared_ptrIN3imp6ObjectELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %46) #6
  br label %553

459:                                              ; preds = %546, %426, %422, %418, %414
  %460 = landingpad { ptr, i32 }
          cleanup
  %461 = extractvalue { ptr, i32 } %460, 0
  store ptr %461, ptr %8, align 8
  %462 = extractvalue { ptr, i32 } %460, 1
  store i32 %462, ptr %9, align 4
  br label %552

463:                                              ; preds = %419
  %464 = landingpad { ptr, i32 }
          cleanup
  %465 = extractvalue { ptr, i32 } %464, 0
  store ptr %465, ptr %8, align 8
  %466 = extractvalue { ptr, i32 } %464, 1
  store i32 %466, ptr %9, align 4
  br label %471

467:                                              ; preds = %420
  %468 = landingpad { ptr, i32 }
          cleanup
  %469 = extractvalue { ptr, i32 } %468, 0
  store ptr %469, ptr %8, align 8
  %470 = extractvalue { ptr, i32 } %468, 1
  store i32 %470, ptr %9, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %47) #6
  br label %471

471:                                              ; preds = %467, %463
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %48) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %48) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %47) #6
  br label %552

472:                                              ; preds = %427
  %473 = landingpad { ptr, i32 }
          cleanup
  %474 = extractvalue { ptr, i32 } %473, 0
  store ptr %474, ptr %8, align 8
  %475 = extractvalue { ptr, i32 } %473, 1
  store i32 %475, ptr %9, align 4
  br label %480

476:                                              ; preds = %428
  %477 = landingpad { ptr, i32 }
          cleanup
  %478 = extractvalue { ptr, i32 } %477, 0
  store ptr %478, ptr %8, align 8
  %479 = extractvalue { ptr, i32 } %477, 1
  store i32 %479, ptr %9, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %49) #6
  br label %480

480:                                              ; preds = %476, %472
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %50) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %50) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %49) #6
  br label %552

481:                                              ; preds = %431
  %482 = load i32, ptr %51, align 4, !tbaa !57
  %483 = add nsw i32 36064, %482
  invoke void @glDrawBuffer(i32 noundef %483)
          to label %484 unwind label %514

484:                                              ; preds = %481
  call void @llvm.lifetime.start.p0(i64 32, ptr %52) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr %53) #6
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %53) #6
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %52, ptr noundef @.str.46, ptr noundef nonnull align 1 dereferenceable(1) %53)
          to label %485 unwind label %518

485:                                              ; preds = %484
  %486 = invoke noundef zeroext i1 @_Z12GLcheckErrorRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPKci(ptr noundef nonnull align 8 dereferenceable(32) %52, ptr noundef @.str.44, i32 noundef 618)
          to label %487 unwind label %522

487:                                              ; preds = %485
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %52) #6
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %53) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %53) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %52) #6
  %488 = load i32, ptr %51, align 4, !tbaa !57
  %489 = add nsw i32 36064, %488
  invoke void @glReadBuffer(i32 noundef %489)
          to label %490 unwind label %514

490:                                              ; preds = %487
  call void @llvm.lifetime.start.p0(i64 32, ptr %54) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr %55) #6
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %55) #6
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %54, ptr noundef @.str.47, ptr noundef nonnull align 1 dereferenceable(1) %55)
          to label %491 unwind label %527

491:                                              ; preds = %490
  %492 = invoke noundef zeroext i1 @_Z12GLcheckErrorRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPKci(ptr noundef nonnull align 8 dereferenceable(32) %54, ptr noundef @.str.44, i32 noundef 620)
          to label %493 unwind label %531

493:                                              ; preds = %491
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %54) #6
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %55) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %55) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %54) #6
  %494 = load ptr, ptr @__glewBlitFramebuffer, align 8, !tbaa !5
  %495 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp11FrameBufferELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %43) #6
  %496 = invoke noundef i32 @_ZNK3imp11FrameBuffer5widthEv(ptr noundef nonnull align 8 dereferenceable(144) %495)
          to label %497 unwind label %514

497:                                              ; preds = %493
  %498 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp11FrameBufferELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %43) #6
  %499 = invoke noundef i32 @_ZNK3imp11FrameBuffer6heightEv(ptr noundef nonnull align 8 dereferenceable(144) %498)
          to label %500 unwind label %514

500:                                              ; preds = %497
  %501 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp11FrameBufferELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %45) #6
  %502 = invoke noundef i32 @_ZNK3imp11FrameBuffer5widthEv(ptr noundef nonnull align 8 dereferenceable(144) %501)
          to label %503 unwind label %514

503:                                              ; preds = %500
  %504 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp11FrameBufferELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %45) #6
  %505 = invoke noundef i32 @_ZNK3imp11FrameBuffer6heightEv(ptr noundef nonnull align 8 dereferenceable(144) %504)
          to label %506 unwind label %514

506:                                              ; preds = %503
  invoke void %494(i32 noundef 0, i32 noundef 0, i32 noundef %496, i32 noundef %499, i32 noundef 0, i32 noundef 0, i32 noundef %502, i32 noundef %505, i32 noundef 16384, i32 noundef 9728)
          to label %507 unwind label %514

507:                                              ; preds = %506
  call void @llvm.lifetime.start.p0(i64 32, ptr %56) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr %57) #6
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %57) #6
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %56, ptr noundef @.str.48, ptr noundef nonnull align 1 dereferenceable(1) %57)
          to label %508 unwind label %536

508:                                              ; preds = %507
  %509 = invoke noundef zeroext i1 @_Z12GLcheckErrorRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPKci(ptr noundef nonnull align 8 dereferenceable(32) %56, ptr noundef @.str.44, i32 noundef 623)
          to label %510 unwind label %540

510:                                              ; preds = %508
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %56) #6
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %57) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %57) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %56) #6
  br label %511

511:                                              ; preds = %510
  %512 = load i32, ptr %51, align 4, !tbaa !57
  %513 = add nsw i32 %512, 1
  store i32 %513, ptr %51, align 4, !tbaa !57
  br label %431, !llvm.loop !70

514:                                              ; preds = %506, %503, %500, %497, %493, %487, %481
  %515 = landingpad { ptr, i32 }
          cleanup
  %516 = extractvalue { ptr, i32 } %515, 0
  store ptr %516, ptr %8, align 8
  %517 = extractvalue { ptr, i32 } %515, 1
  store i32 %517, ptr %9, align 4
  br label %545

518:                                              ; preds = %484
  %519 = landingpad { ptr, i32 }
          cleanup
  %520 = extractvalue { ptr, i32 } %519, 0
  store ptr %520, ptr %8, align 8
  %521 = extractvalue { ptr, i32 } %519, 1
  store i32 %521, ptr %9, align 4
  br label %526

522:                                              ; preds = %485
  %523 = landingpad { ptr, i32 }
          cleanup
  %524 = extractvalue { ptr, i32 } %523, 0
  store ptr %524, ptr %8, align 8
  %525 = extractvalue { ptr, i32 } %523, 1
  store i32 %525, ptr %9, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %52) #6
  br label %526

526:                                              ; preds = %522, %518
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %53) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %53) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %52) #6
  br label %545

527:                                              ; preds = %490
  %528 = landingpad { ptr, i32 }
          cleanup
  %529 = extractvalue { ptr, i32 } %528, 0
  store ptr %529, ptr %8, align 8
  %530 = extractvalue { ptr, i32 } %528, 1
  store i32 %530, ptr %9, align 4
  br label %535

531:                                              ; preds = %491
  %532 = landingpad { ptr, i32 }
          cleanup
  %533 = extractvalue { ptr, i32 } %532, 0
  store ptr %533, ptr %8, align 8
  %534 = extractvalue { ptr, i32 } %532, 1
  store i32 %534, ptr %9, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %54) #6
  br label %535

535:                                              ; preds = %531, %527
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %55) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %55) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %54) #6
  br label %545

536:                                              ; preds = %507
  %537 = landingpad { ptr, i32 }
          cleanup
  %538 = extractvalue { ptr, i32 } %537, 0
  store ptr %538, ptr %8, align 8
  %539 = extractvalue { ptr, i32 } %537, 1
  store i32 %539, ptr %9, align 4
  br label %544

540:                                              ; preds = %508
  %541 = landingpad { ptr, i32 }
          cleanup
  %542 = extractvalue { ptr, i32 } %541, 0
  store ptr %542, ptr %8, align 8
  %543 = extractvalue { ptr, i32 } %541, 1
  store i32 %543, ptr %9, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %56) #6
  br label %544

544:                                              ; preds = %540, %536
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %57) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %57) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %56) #6
  br label %545

545:                                              ; preds = %544, %535, %526, %514
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #6
  br label %552

546:                                              ; preds = %434
  %547 = getelementptr inbounds %"class.imp::GlRenderer", ptr %68, i32 0, i32 12
  %548 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp12RenderTargetELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %547) #6
  invoke void @_ZN3imp12RenderTarget6changeEv(ptr noundef nonnull align 8 dereferenceable(99) %548)
          to label %549 unwind label %459

549:                                              ; preds = %546
  %550 = getelementptr inbounds %"class.imp::GlRenderer", ptr %68, i32 0, i32 12
  %551 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt10shared_ptrIN3imp12RenderTargetEEaSERKS2_(ptr noundef nonnull align 8 dereferenceable(16) %40, ptr noundef nonnull align 8 dereferenceable(16) %550) #6
  call void @_ZNSt12__shared_ptrIN3imp11FrameBufferELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %45) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %45) #6
  call void @_ZNSt12__shared_ptrIN3imp11FrameBufferELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %43) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %43) #6
  call void @_ZNSt12__shared_ptrIN3imp12RenderTargetELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %42) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %42) #6
  call void @_ZNSt12__shared_ptrIN3imp12RenderTargetELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %41) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %41) #6
  br label %555

552:                                              ; preds = %545, %480, %471, %459
  call void @_ZNSt12__shared_ptrIN3imp11FrameBufferELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %45) #6
  br label %553

553:                                              ; preds = %552, %455, %451
  call void @llvm.lifetime.end.p0(i64 16, ptr %45) #6
  call void @_ZNSt12__shared_ptrIN3imp11FrameBufferELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %43) #6
  br label %554

554:                                              ; preds = %553, %447, %443
  call void @llvm.lifetime.end.p0(i64 16, ptr %43) #6
  call void @_ZNSt12__shared_ptrIN3imp12RenderTargetELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %42) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %42) #6
  call void @_ZNSt12__shared_ptrIN3imp12RenderTargetELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %41) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %41) #6
  br label %732

555:                                              ; preds = %549, %394
  %556 = getelementptr inbounds %"class.imp::GlRenderer", ptr %68, i32 0, i32 2
  %557 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp8PipelineELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %556) #6
  %558 = load i8, ptr %23, align 1, !tbaa !53, !range !54, !noundef !55
  %559 = trunc i8 %558 to i1
  invoke void @_ZN3imp8Pipeline9setActiveEib(ptr noundef nonnull align 8 dereferenceable(240) %557, i32 noundef 5, i1 noundef zeroext %559)
          to label %560 unwind label %439

560:                                              ; preds = %555
  %561 = getelementptr inbounds %"class.imp::GlRenderer", ptr %68, i32 0, i32 2
  %562 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp8PipelineELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %561) #6
  %563 = load i8, ptr %22, align 1, !tbaa !53, !range !54, !noundef !55
  %564 = trunc i8 %563 to i1
  invoke void @_ZN3imp8Pipeline9setActiveEib(ptr noundef nonnull align 8 dereferenceable(240) %562, i32 noundef 0, i1 noundef zeroext %564)
          to label %565 unwind label %439

565:                                              ; preds = %560
  %566 = getelementptr inbounds %"class.imp::GlRenderer", ptr %68, i32 0, i32 2
  %567 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp8PipelineELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %566) #6
  %568 = load i8, ptr %24, align 1, !tbaa !53, !range !54, !noundef !55
  %569 = trunc i8 %568 to i1
  invoke void @_ZN3imp8Pipeline9setActiveEib(ptr noundef nonnull align 8 dereferenceable(240) %567, i32 noundef 8, i1 noundef zeroext %569)
          to label %570 unwind label %439

570:                                              ; preds = %565
  %571 = getelementptr inbounds %"class.imp::GlRenderer", ptr %68, i32 0, i32 2
  %572 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp8PipelineELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %571) #6
  %573 = load i8, ptr %25, align 1, !tbaa !53, !range !54, !noundef !55
  %574 = trunc i8 %573 to i1
  invoke void @_ZN3imp8Pipeline9setActiveEib(ptr noundef nonnull align 8 dereferenceable(240) %572, i32 noundef 9, i1 noundef zeroext %574)
          to label %575 unwind label %439

575:                                              ; preds = %570
  %576 = getelementptr inbounds %"class.imp::GlRenderer", ptr %68, i32 0, i32 2
  %577 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp8PipelineELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %576) #6
  %578 = load i8, ptr %26, align 1, !tbaa !53, !range !54, !noundef !55
  %579 = trunc i8 %578 to i1
  invoke void @_ZN3imp8Pipeline9setActiveEib(ptr noundef nonnull align 8 dereferenceable(240) %577, i32 noundef 6, i1 noundef zeroext %579)
          to label %580 unwind label %439

580:                                              ; preds = %575
  %581 = invoke noundef i32 @_ZNK3imp13SceneRenderer14getOutputFrameEv(ptr noundef nonnull align 8 dereferenceable(137) %68)
          to label %582 unwind label %439

582:                                              ; preds = %580
  %583 = load i32, ptr @_ZZN3imp10GlRenderer6renderERKSt10shared_ptrINS_5GraphEEE12s_lastOutput, align 4, !tbaa !72
  %584 = icmp ne i32 %581, %583
  br i1 %584, label %585, label %697

585:                                              ; preds = %582
  %586 = invoke noundef i32 @_ZNK3imp13SceneRenderer14getOutputFrameEv(ptr noundef nonnull align 8 dereferenceable(137) %68)
          to label %587 unwind label %439

587:                                              ; preds = %585
  switch i32 %586, label %693 [
    i32 0, label %694
    i32 1, label %588
    i32 2, label %598
    i32 4, label %609
    i32 5, label %620
    i32 6, label %631
    i32 7, label %641
    i32 8, label %651
    i32 9, label %662
    i32 10, label %672
    i32 3, label %682
  ]

588:                                              ; preds = %587
  %589 = getelementptr inbounds %"class.imp::GlRenderer", ptr %68, i32 0, i32 10
  %590 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp9CopyFrameELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %589) #6
  %591 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp12RenderTargetELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %40) #6
  invoke void @_ZN3imp12RenderTarget3getEi(ptr dead_on_unwind writable sret(%"class.std::shared_ptr.103") align 8 %58, ptr noundef nonnull align 8 dereferenceable(99) %591, i32 noundef 0)
          to label %592 unwind label %439

592:                                              ; preds = %588
  invoke void @_ZN3imp14FrameOperation8setInputESt10shared_ptrINS_12ImageSamplerEEi(ptr noundef nonnull align 8 dereferenceable(120) %590, ptr noundef %58, i32 noundef 0)
          to label %593 unwind label %594

593:                                              ; preds = %592
  call void @_ZNSt12__shared_ptrIN3imp12ImageSamplerELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %58) #6
  br label %694

594:                                              ; preds = %592
  %595 = landingpad { ptr, i32 }
          cleanup
  %596 = extractvalue { ptr, i32 } %595, 0
  store ptr %596, ptr %8, align 8
  %597 = extractvalue { ptr, i32 } %595, 1
  store i32 %597, ptr %9, align 4
  call void @_ZNSt12__shared_ptrIN3imp12ImageSamplerELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %58) #6
  br label %732

598:                                              ; preds = %587
  %599 = getelementptr inbounds %"class.imp::GlRenderer", ptr %68, i32 0, i32 10
  %600 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp9CopyFrameELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %599) #6
  %601 = getelementptr inbounds %"class.imp::GlRenderer", ptr %68, i32 0, i32 2
  %602 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp8PipelineELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %601) #6
  invoke void @_ZN3imp8Pipeline14getOutputFrameEii(ptr dead_on_unwind writable sret(%"class.std::shared_ptr.103") align 8 %59, ptr noundef nonnull align 8 dereferenceable(240) %602, i32 noundef 5, i32 noundef 0)
          to label %603 unwind label %439

603:                                              ; preds = %598
  invoke void @_ZN3imp14FrameOperation8setInputESt10shared_ptrINS_12ImageSamplerEEi(ptr noundef nonnull align 8 dereferenceable(120) %600, ptr noundef %59, i32 noundef 0)
          to label %604 unwind label %605

604:                                              ; preds = %603
  call void @_ZNSt12__shared_ptrIN3imp12ImageSamplerELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %59) #6
  br label %694

605:                                              ; preds = %603
  %606 = landingpad { ptr, i32 }
          cleanup
  %607 = extractvalue { ptr, i32 } %606, 0
  store ptr %607, ptr %8, align 8
  %608 = extractvalue { ptr, i32 } %606, 1
  store i32 %608, ptr %9, align 4
  call void @_ZNSt12__shared_ptrIN3imp12ImageSamplerELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %59) #6
  br label %732

609:                                              ; preds = %587
  %610 = getelementptr inbounds %"class.imp::GlRenderer", ptr %68, i32 0, i32 10
  %611 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp9CopyFrameELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %610) #6
  %612 = getelementptr inbounds %"class.imp::GlRenderer", ptr %68, i32 0, i32 2
  %613 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp8PipelineELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %612) #6
  invoke void @_ZN3imp8Pipeline14getOutputFrameEii(ptr dead_on_unwind writable sret(%"class.std::shared_ptr.103") align 8 %60, ptr noundef nonnull align 8 dereferenceable(240) %613, i32 noundef 0, i32 noundef 0)
          to label %614 unwind label %439

614:                                              ; preds = %609
  invoke void @_ZN3imp14FrameOperation8setInputESt10shared_ptrINS_12ImageSamplerEEi(ptr noundef nonnull align 8 dereferenceable(120) %611, ptr noundef %60, i32 noundef 0)
          to label %615 unwind label %616

615:                                              ; preds = %614
  call void @_ZNSt12__shared_ptrIN3imp12ImageSamplerELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %60) #6
  br label %694

616:                                              ; preds = %614
  %617 = landingpad { ptr, i32 }
          cleanup
  %618 = extractvalue { ptr, i32 } %617, 0
  store ptr %618, ptr %8, align 8
  %619 = extractvalue { ptr, i32 } %617, 1
  store i32 %619, ptr %9, align 4
  call void @_ZNSt12__shared_ptrIN3imp12ImageSamplerELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %60) #6
  br label %732

620:                                              ; preds = %587
  %621 = getelementptr inbounds %"class.imp::GlRenderer", ptr %68, i32 0, i32 10
  %622 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp9CopyFrameELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %621) #6
  %623 = getelementptr inbounds %"class.imp::GlRenderer", ptr %68, i32 0, i32 2
  %624 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp8PipelineELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %623) #6
  invoke void @_ZN3imp8Pipeline14getOutputFrameEii(ptr dead_on_unwind writable sret(%"class.std::shared_ptr.103") align 8 %61, ptr noundef nonnull align 8 dereferenceable(240) %624, i32 noundef 6, i32 noundef 0)
          to label %625 unwind label %439

625:                                              ; preds = %620
  invoke void @_ZN3imp14FrameOperation8setInputESt10shared_ptrINS_12ImageSamplerEEi(ptr noundef nonnull align 8 dereferenceable(120) %622, ptr noundef %61, i32 noundef 0)
          to label %626 unwind label %627

626:                                              ; preds = %625
  call void @_ZNSt12__shared_ptrIN3imp12ImageSamplerELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %61) #6
  br label %694

627:                                              ; preds = %625
  %628 = landingpad { ptr, i32 }
          cleanup
  %629 = extractvalue { ptr, i32 } %628, 0
  store ptr %629, ptr %8, align 8
  %630 = extractvalue { ptr, i32 } %628, 1
  store i32 %630, ptr %9, align 4
  call void @_ZNSt12__shared_ptrIN3imp12ImageSamplerELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %61) #6
  br label %732

631:                                              ; preds = %587
  %632 = getelementptr inbounds %"class.imp::GlRenderer", ptr %68, i32 0, i32 10
  %633 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp9CopyFrameELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %632) #6
  %634 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp12RenderTargetELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %40) #6
  invoke void @_ZN3imp12RenderTarget3getEi(ptr dead_on_unwind writable sret(%"class.std::shared_ptr.103") align 8 %62, ptr noundef nonnull align 8 dereferenceable(99) %634, i32 noundef 5)
          to label %635 unwind label %439

635:                                              ; preds = %631
  invoke void @_ZN3imp14FrameOperation8setInputESt10shared_ptrINS_12ImageSamplerEEi(ptr noundef nonnull align 8 dereferenceable(120) %633, ptr noundef %62, i32 noundef 0)
          to label %636 unwind label %637

636:                                              ; preds = %635
  call void @_ZNSt12__shared_ptrIN3imp12ImageSamplerELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %62) #6
  br label %694

637:                                              ; preds = %635
  %638 = landingpad { ptr, i32 }
          cleanup
  %639 = extractvalue { ptr, i32 } %638, 0
  store ptr %639, ptr %8, align 8
  %640 = extractvalue { ptr, i32 } %638, 1
  store i32 %640, ptr %9, align 4
  call void @_ZNSt12__shared_ptrIN3imp12ImageSamplerELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %62) #6
  br label %732

641:                                              ; preds = %587
  %642 = getelementptr inbounds %"class.imp::GlRenderer", ptr %68, i32 0, i32 10
  %643 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp9CopyFrameELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %642) #6
  %644 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp12RenderTargetELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %40) #6
  invoke void @_ZN3imp12RenderTarget3getEi(ptr dead_on_unwind writable sret(%"class.std::shared_ptr.103") align 8 %63, ptr noundef nonnull align 8 dereferenceable(99) %644, i32 noundef 1)
          to label %645 unwind label %439

645:                                              ; preds = %641
  invoke void @_ZN3imp14FrameOperation8setInputESt10shared_ptrINS_12ImageSamplerEEi(ptr noundef nonnull align 8 dereferenceable(120) %643, ptr noundef %63, i32 noundef 0)
          to label %646 unwind label %647

646:                                              ; preds = %645
  call void @_ZNSt12__shared_ptrIN3imp12ImageSamplerELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %63) #6
  br label %694

647:                                              ; preds = %645
  %648 = landingpad { ptr, i32 }
          cleanup
  %649 = extractvalue { ptr, i32 } %648, 0
  store ptr %649, ptr %8, align 8
  %650 = extractvalue { ptr, i32 } %648, 1
  store i32 %650, ptr %9, align 4
  call void @_ZNSt12__shared_ptrIN3imp12ImageSamplerELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %63) #6
  br label %732

651:                                              ; preds = %587
  %652 = getelementptr inbounds %"class.imp::GlRenderer", ptr %68, i32 0, i32 10
  %653 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp9CopyFrameELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %652) #6
  %654 = getelementptr inbounds %"class.imp::GlRenderer", ptr %68, i32 0, i32 2
  %655 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp8PipelineELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %654) #6
  invoke void @_ZN3imp8Pipeline14getOutputFrameEii(ptr dead_on_unwind writable sret(%"class.std::shared_ptr.103") align 8 %64, ptr noundef nonnull align 8 dereferenceable(240) %655, i32 noundef 8, i32 noundef 0)
          to label %656 unwind label %439

656:                                              ; preds = %651
  invoke void @_ZN3imp14FrameOperation8setInputESt10shared_ptrINS_12ImageSamplerEEi(ptr noundef nonnull align 8 dereferenceable(120) %653, ptr noundef %64, i32 noundef 0)
          to label %657 unwind label %658

657:                                              ; preds = %656
  call void @_ZNSt12__shared_ptrIN3imp12ImageSamplerELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %64) #6
  br label %694

658:                                              ; preds = %656
  %659 = landingpad { ptr, i32 }
          cleanup
  %660 = extractvalue { ptr, i32 } %659, 0
  store ptr %660, ptr %8, align 8
  %661 = extractvalue { ptr, i32 } %659, 1
  store i32 %661, ptr %9, align 4
  call void @_ZNSt12__shared_ptrIN3imp12ImageSamplerELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %64) #6
  br label %732

662:                                              ; preds = %587
  %663 = getelementptr inbounds %"class.imp::GlRenderer", ptr %68, i32 0, i32 10
  %664 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp9CopyFrameELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %663) #6
  %665 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp12RenderTargetELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %40) #6
  invoke void @_ZN3imp12RenderTarget3getEi(ptr dead_on_unwind writable sret(%"class.std::shared_ptr.103") align 8 %65, ptr noundef nonnull align 8 dereferenceable(99) %665, i32 noundef 2)
          to label %666 unwind label %439

666:                                              ; preds = %662
  invoke void @_ZN3imp14FrameOperation8setInputESt10shared_ptrINS_12ImageSamplerEEi(ptr noundef nonnull align 8 dereferenceable(120) %664, ptr noundef %65, i32 noundef 0)
          to label %667 unwind label %668

667:                                              ; preds = %666
  call void @_ZNSt12__shared_ptrIN3imp12ImageSamplerELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %65) #6
  br label %694

668:                                              ; preds = %666
  %669 = landingpad { ptr, i32 }
          cleanup
  %670 = extractvalue { ptr, i32 } %669, 0
  store ptr %670, ptr %8, align 8
  %671 = extractvalue { ptr, i32 } %669, 1
  store i32 %671, ptr %9, align 4
  call void @_ZNSt12__shared_ptrIN3imp12ImageSamplerELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %65) #6
  br label %732

672:                                              ; preds = %587
  %673 = getelementptr inbounds %"class.imp::GlRenderer", ptr %68, i32 0, i32 10
  %674 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp9CopyFrameELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %673) #6
  %675 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp12RenderTargetELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %40) #6
  invoke void @_ZN3imp12RenderTarget3getEi(ptr dead_on_unwind writable sret(%"class.std::shared_ptr.103") align 8 %66, ptr noundef nonnull align 8 dereferenceable(99) %675, i32 noundef 3)
          to label %676 unwind label %439

676:                                              ; preds = %672
  invoke void @_ZN3imp14FrameOperation8setInputESt10shared_ptrINS_12ImageSamplerEEi(ptr noundef nonnull align 8 dereferenceable(120) %674, ptr noundef %66, i32 noundef 0)
          to label %677 unwind label %678

677:                                              ; preds = %676
  call void @_ZNSt12__shared_ptrIN3imp12ImageSamplerELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %66) #6
  br label %694

678:                                              ; preds = %676
  %679 = landingpad { ptr, i32 }
          cleanup
  %680 = extractvalue { ptr, i32 } %679, 0
  store ptr %680, ptr %8, align 8
  %681 = extractvalue { ptr, i32 } %679, 1
  store i32 %681, ptr %9, align 4
  call void @_ZNSt12__shared_ptrIN3imp12ImageSamplerELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %66) #6
  br label %732

682:                                              ; preds = %587
  %683 = getelementptr inbounds %"class.imp::GlRenderer", ptr %68, i32 0, i32 10
  %684 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp9CopyFrameELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %683) #6
  %685 = getelementptr inbounds %"class.imp::GlRenderer", ptr %68, i32 0, i32 2
  %686 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp8PipelineELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %685) #6
  invoke void @_ZN3imp8Pipeline14getOutputFrameEii(ptr dead_on_unwind writable sret(%"class.std::shared_ptr.103") align 8 %67, ptr noundef nonnull align 8 dereferenceable(240) %686, i32 noundef 9, i32 noundef 0)
          to label %687 unwind label %439

687:                                              ; preds = %682
  invoke void @_ZN3imp14FrameOperation8setInputESt10shared_ptrINS_12ImageSamplerEEi(ptr noundef nonnull align 8 dereferenceable(120) %684, ptr noundef %67, i32 noundef 0)
          to label %688 unwind label %689

688:                                              ; preds = %687
  call void @_ZNSt12__shared_ptrIN3imp12ImageSamplerELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %67) #6
  br label %694

689:                                              ; preds = %687
  %690 = landingpad { ptr, i32 }
          cleanup
  %691 = extractvalue { ptr, i32 } %690, 0
  store ptr %691, ptr %8, align 8
  %692 = extractvalue { ptr, i32 } %690, 1
  store i32 %692, ptr %9, align 4
  call void @_ZNSt12__shared_ptrIN3imp12ImageSamplerELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %67) #6
  br label %732

693:                                              ; preds = %587
  br label %694

694:                                              ; preds = %693, %688, %677, %667, %657, %646, %636, %626, %615, %604, %593, %587
  %695 = invoke noundef i32 @_ZNK3imp13SceneRenderer14getOutputFrameEv(ptr noundef nonnull align 8 dereferenceable(137) %68)
          to label %696 unwind label %439

696:                                              ; preds = %694
  store i32 %695, ptr @_ZZN3imp10GlRenderer6renderERKSt10shared_ptrINS_5GraphEEE12s_lastOutput, align 4, !tbaa !72
  br label %697

697:                                              ; preds = %696, %582
  %698 = getelementptr inbounds %"class.imp::GlRenderer", ptr %68, i32 0, i32 3
  %699 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp13LightingModelELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %698) #6
  %700 = getelementptr inbounds %"class.imp::SceneRenderer", ptr %68, i32 0, i32 13
  %701 = load float, ptr %700, align 8, !tbaa !73
  invoke void @_ZN3imp13LightingModel13setLightPowerEf(ptr noundef nonnull align 8 dereferenceable(208) %699, float noundef %701)
          to label %702 unwind label %439

702:                                              ; preds = %697
  %703 = getelementptr inbounds %"class.imp::GlRenderer", ptr %68, i32 0, i32 3
  %704 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp13LightingModelELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %703) #6
  %705 = getelementptr inbounds %"class.imp::SceneRenderer", ptr %68, i32 0, i32 14
  %706 = load float, ptr %705, align 4, !tbaa !74
  invoke void @_ZN3imp13LightingModel10setAmbientEf(ptr noundef nonnull align 8 dereferenceable(208) %704, float noundef %706)
          to label %707 unwind label %439

707:                                              ; preds = %702
  %708 = getelementptr inbounds %"class.imp::GlRenderer", ptr %68, i32 0, i32 2
  %709 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp8PipelineELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %708) #6
  %710 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp11RenderQueueELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %16) #6
  %711 = getelementptr inbounds %"class.imp::RenderQueue", ptr %710, i32 0, i32 1
  %712 = load ptr, ptr %711, align 8, !tbaa !58
  %713 = load ptr, ptr %21, align 8, !tbaa !5
  %714 = getelementptr inbounds %"class.imp::GlRenderer", ptr %68, i32 0, i32 4
  %715 = getelementptr inbounds %"class.imp::GlRenderer", ptr %68, i32 0, i32 5
  invoke void @_ZN3imp8Pipeline7prepareEPKNS_6CameraEPKNS_9LightNodeERSt10shared_ptrINS_14CubeMapSamplerEESA_(ptr noundef nonnull align 8 dereferenceable(240) %709, ptr noundef %712, ptr noundef %713, ptr noundef nonnull align 8 dereferenceable(16) %714, ptr noundef nonnull align 8 dereferenceable(16) %715)
          to label %716 unwind label %439

716:                                              ; preds = %707
  %717 = getelementptr inbounds %"class.imp::GlRenderer", ptr %68, i32 0, i32 2
  %718 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp8PipelineELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %717) #6
  invoke void @_ZN3imp8Pipeline3runEi(ptr noundef nonnull align 8 dereferenceable(240) %718, i32 noundef 7)
          to label %719 unwind label %439

719:                                              ; preds = %716
  %720 = invoke noundef i32 @_ZNK3imp13SceneRenderer14getOutputFrameEv(ptr noundef nonnull align 8 dereferenceable(137) %68)
          to label %721 unwind label %439

721:                                              ; preds = %719
  %722 = icmp ne i32 %720, 0
  br i1 %722, label %723, label %730

723:                                              ; preds = %721
  %724 = getelementptr inbounds %"class.imp::GlRenderer", ptr %68, i32 0, i32 10
  %725 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp9CopyFrameELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %724) #6
  %726 = load ptr, ptr %725, align 8, !tbaa !49
  %727 = getelementptr inbounds ptr, ptr %726, i64 4
  %728 = load ptr, ptr %727, align 8
  invoke void %728(ptr noundef nonnull align 8 dereferenceable(168) %725, ptr noundef %68, i1 noundef zeroext false)
          to label %729 unwind label %439

729:                                              ; preds = %723
  br label %730

730:                                              ; preds = %729, %721
  call void @_ZNSt12__shared_ptrIN3imp12RenderTargetELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %40) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %40) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %39) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %26) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %25) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %24) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %23) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %22) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #6
  call void @_ZNSt12__shared_ptrIN3imp11RenderQueueELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %16) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %16) #6
  call void @_ZNSt12__shared_ptrIN3imp16AmbientOcclusionELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %10) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %10) #6
  call void @_ZNSt12__shared_ptrIN3imp13ShadowCastingELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %5) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %5) #6
  br label %731

731:                                              ; preds = %730, %72
  ret void

732:                                              ; preds = %689, %678, %668, %658, %647, %637, %627, %616, %605, %594, %554, %439
  call void @_ZNSt12__shared_ptrIN3imp12RenderTargetELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %40) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %40) #6
  br label %733

733:                                              ; preds = %732, %435
  call void @llvm.lifetime.end.p0(i64 1, ptr %39) #6
  br label %734

734:                                              ; preds = %733, %391, %366, %365, %329, %295, %294, %282
  call void @llvm.lifetime.end.p0(i64 1, ptr %26) #6
  br label %735

735:                                              ; preds = %734, %278
  call void @llvm.lifetime.end.p0(i64 1, ptr %25) #6
  br label %736

736:                                              ; preds = %735, %274
  call void @llvm.lifetime.end.p0(i64 1, ptr %24) #6
  br label %737

737:                                              ; preds = %736, %270
  call void @llvm.lifetime.end.p0(i64 1, ptr %23) #6
  br label %738

738:                                              ; preds = %737, %266
  call void @llvm.lifetime.end.p0(i64 1, ptr %22) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #6
  br label %739

739:                                              ; preds = %738, %210, %171, %167, %163
  call void @_ZNSt12__shared_ptrIN3imp11RenderQueueELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %16) #6
  br label %740

740:                                              ; preds = %739, %159
  call void @llvm.lifetime.end.p0(i64 16, ptr %16) #6
  br label %741

741:                                              ; preds = %740, %145, %133, %129
  call void @_ZNSt12__shared_ptrIN3imp16AmbientOcclusionELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %10) #6
  br label %742

742:                                              ; preds = %741, %128
  call void @llvm.lifetime.end.p0(i64 16, ptr %10) #6
  br label %743

743:                                              ; preds = %742, %116
  call void @_ZNSt12__shared_ptrIN3imp13ShadowCastingELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %5) #6
  br label %744

744:                                              ; preds = %743, %112
  call void @llvm.lifetime.end.p0(i64 16, ptr %5) #6
  br label %745

745:                                              ; preds = %744
  %746 = load ptr, ptr %8, align 8
  %747 = load i32, ptr %9, align 4
  %748 = insertvalue { ptr, i32 } poison, ptr %746, 0
  %749 = insertvalue { ptr, i32 } %748, i32 %747, 1
  resume { ptr, i32 } %749
}

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3imp13ShadowCasting14setSampleCountEi(ptr noundef nonnull align 8 dereferenceable(204), i32 noundef) #1 align 2

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3imp16AmbientOcclusion14setSampleCountEi(ptr noundef nonnull align 8 dereferenceable(292), i32 noundef) #1 align 2

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

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

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

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

declare void @glEnable(i32 noundef) #3

declare void @glDisable(i32 noundef) #3

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

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

declare noundef zeroext i1 @_ZNK3imp13SceneRenderer16isFeatureEnabledENS0_7FeatureE(ptr noundef nonnull align 8 dereferenceable(137), i32 noundef) #3

declare void @_ZN3imp15RenderToCubeMap6renderERSt10shared_ptrINS_11RenderQueueEERKNS_4Vec3ENS_13SceneRenderer11RenderFrameES1_INS_14ReflexionModelEE(ptr noundef nonnull align 8 dereferenceable(812), ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(36), i32 noundef, ptr noundef) #3

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef zeroext i1 @_Z12GLcheckErrorRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPKci(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef, i32 noundef) #5

declare void @glDrawBuffer(i32 noundef) #3

declare void @glReadBuffer(i32 noundef) #3

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

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

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

declare void @_ZN3imp8Pipeline9setActiveEib(ptr noundef nonnull align 8 dereferenceable(240), i32 noundef, i1 noundef zeroext) #3

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

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

declare void @_ZN3imp8Pipeline7prepareEPKNS_6CameraEPKNS_9LightNodeERSt10shared_ptrINS_14CubeMapSamplerEESA_(ptr noundef nonnull align 8 dereferenceable(240), ptr noundef, ptr noundef, ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(16)) #3

declare void @_ZN3imp8Pipeline3runEi(ptr noundef nonnull align 8 dereferenceable(240), i32 noundef) #3

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt12__shared_ptrIN3imp14CubeMapSamplerELN9__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 @_ZNSt12__shared_ptrIN3imp14ReflexionModelELN9__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 @_ZNSt12__shared_ptrIN3imp12RenderTargetELN9__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 @_ZNSt12__shared_ptrIN3imp5StateELN9__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 @_ZNSt12__shared_ptrIN3imp11RenderQueueELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16)) 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 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { nounwind }

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

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


; 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.12" = type { %"class.std::__shared_ptr.13" }
%"class.std::__shared_ptr.13" = type { ptr, %"class.std::__shared_count" }
%"class.std::__shared_count" = type { ptr }
%"class.std::shared_ptr.103" = type { %"class.std::__shared_ptr.104" }
%"class.std::__shared_ptr.104" = type { ptr, %"class.std::__shared_count" }
%"class.std::shared_ptr.33" = type { %"class.std::__shared_ptr.34" }
%"class.std::__shared_ptr.34" = type { ptr, %"class.std::__shared_count" }
%"class.std::shared_ptr" = type { %"class.std::__shared_ptr" }
%"class.std::__shared_ptr" = type { ptr, %"class.std::__shared_count" }
%"class.std::shared_ptr.94" = type { %"class.std::__shared_ptr.95" }
%"class.std::__shared_ptr.95" = type { ptr, %"class.std::__shared_count" }
%"class.std::shared_ptr.100" = type { %"class.std::__shared_ptr.101" }
%"class.std::__shared_ptr.101" = type { ptr, %"class.std::__shared_count" }
%"class.std::shared_ptr.97" = type { %"class.std::__shared_ptr.98" }
%"class.std::__shared_ptr.98" = type { ptr, %"class.std::__shared_count" }
%"struct.std::_Rb_tree_iterator" = type { ptr }
%"class.std::shared_ptr.27" = type { %"class.std::__shared_ptr.28" }
%"class.std::__shared_ptr.28" = type { ptr, %"class.std::__shared_count" }
%"class.imp::Vec4" = type { %"class.imp::Vec" }
%"class.imp::Vec" = type { %"class.imp::Object", [4 x float] }
%"class.imp::Object" = type { ptr, %"class.std::shared_ptr" }
%"class.imp::Vec3" = type { %"class.imp::Vec.base", [4 x i8] }
%"class.imp::Vec.base" = type <{ %"class.imp::Object", [3 x float] }>
%"class.std::shared_ptr.18" = type { %"class.std::__shared_ptr.19" }
%"class.std::__shared_ptr.19" = type { ptr, %"class.std::__shared_count" }
%"class.std::shared_ptr.0" = type { %"class.std::__shared_ptr.1" }
%"class.std::__shared_ptr.1" = type { ptr, %"class.std::__shared_count" }
%"class.std::shared_ptr.166" = type { %"class.std::__shared_ptr.167" }
%"class.std::__shared_ptr.167" = type { ptr, %"class.std::__shared_count" }
%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%"class.std::allocator" = type { i8 }

@_ZZN3imp10GlRenderer6renderERKSt10shared_ptrINS_5GraphEEE12s_lastEnvRes = external hidden local_unnamed_addr global i32, align 4
@_ZZN3imp10GlRenderer6renderERKSt10shared_ptrINS_5GraphEEE15s_lastShadowRes = external hidden local_unnamed_addr global i32, align 4
@__glewBindFramebuffer = external local_unnamed_addr global ptr, align 8
@.str.43 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.44 = external hidden unnamed_addr constant [77 x i8], align 1
@.str.45 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.46 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.47 = external hidden unnamed_addr constant [17 x i8], align 1
@__glewBlitFramebuffer = external local_unnamed_addr global ptr, align 8
@.str.48 = external hidden unnamed_addr constant [13 x i8], align 1
@_ZZN3imp10GlRenderer6renderERKSt10shared_ptrINS_5GraphEEE12s_lastOutput = external hidden local_unnamed_addr global i32, align 4

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

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

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

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

; 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 noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt10shared_ptrIN3imp14CubeMapSamplerEEaSEOS2_(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #1 align 2

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

declare void @_ZN3imp15RenderToCubeMap10setCubeMapESt10shared_ptrINS_14CubeMapSamplerEE(ptr noundef nonnull align 8 dereferenceable(812), ptr noundef) local_unnamed_addr #3

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

declare void @_ZN3imp15RenderToCubeMap13setResolutionEf(ptr noundef nonnull align 8 dereferenceable(812), float noundef) local_unnamed_addr #3

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK3imp13SceneRenderer13isMsaaEnabledEv(ptr noundef nonnull align 8 dereferenceable(137)) 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 nounwind uwtable
declare dso_local noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp8PipelineELN9__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 noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp13LightingModelELN9__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 @_ZN3imp13LightingModel13setLightPowerEf(ptr noundef nonnull align 8 dereferenceable(208), float noundef) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3imp13LightingModel10setAmbientEf(ptr noundef nonnull align 8 dereferenceable(208), float noundef) local_unnamed_addr #1 align 2

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

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

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

declare void @_ZN3imp14FrameOperation8setInputESt10shared_ptrINS_12ImageSamplerEEi(ptr noundef nonnull align 8 dereferenceable(120), ptr noundef, i32 noundef) local_unnamed_addr #3

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt12__shared_ptrIN3imp12ImageSamplerELN9__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 @_ZNSt12__shared_ptrIN3imp16AmbientOcclusionELN9__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 @_ZNSt12__shared_ptrIN3imp13ShadowCastingELN9__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 @_ZSteqIN3imp8PipelineEEbRKSt10shared_ptrIT_EDn(ptr noundef nonnull align 8 dereferenceable(16), ptr) local_unnamed_addr #4

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

; 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

; Function Attrs: mustprogress uwtable
declare dso_local 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 #2 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt12__shared_ptrIN3imp6ObjectELN9__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 @_ZNSt10shared_ptrIN3imp14ReflexionModelEEC2ERKS2_(ptr noundef nonnull align 8 dereferenceable(16), 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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3imp11RenderQueue6createIJEEESt10shared_ptrIS0_EDpOT_(ptr dead_on_unwind noalias writable sret(%"class.std::shared_ptr.33") 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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN3imp10GlRenderer6renderERKSt10shared_ptrINS_5GraphEE(ptr noundef nonnull align 8 dereferenceable(392) %0, ptr noundef nonnull align 8 dereferenceable(16) %1) unnamed_addr #2 align 2 personality ptr @__gxx_personality_v0 {
  %3 = alloca %"class.std::shared_ptr.94", align 8
  %4 = alloca %"class.std::shared_ptr", align 8
  %5 = alloca %"class.std::shared_ptr.100", align 8
  %6 = alloca %"class.std::shared_ptr.97", align 8
  %7 = alloca %"class.std::shared_ptr", align 8
  %8 = alloca %"class.std::shared_ptr.100", align 8
  %9 = alloca %"struct.std::_Rb_tree_iterator", align 8
  %10 = alloca %"struct.std::_Rb_tree_iterator", align 8
  %11 = alloca %"class.std::shared_ptr.33", align 8
  %12 = alloca %"class.std::shared_ptr.33", align 8
  %13 = alloca %"class.std::shared_ptr.33", align 8
  %14 = alloca %"class.std::shared_ptr.33", align 8
  %15 = alloca %"class.std::shared_ptr.33", align 8
  %16 = alloca %"class.std::shared_ptr.27", align 8
  %17 = alloca %"class.std::shared_ptr.12", align 8
  %18 = alloca i32, align 4
  %19 = alloca %"class.imp::Vec4", align 8
  %20 = alloca %"class.std::shared_ptr.12", align 8
  %21 = alloca %"class.imp::Vec3", align 8
  %22 = alloca %"class.std::shared_ptr.18", align 8
  %23 = alloca %"class.std::shared_ptr.12", align 8
  %24 = alloca i32, align 4
  %25 = alloca %"class.imp::Vec4", align 8
  %26 = alloca %"class.std::shared_ptr.12", align 8
  %27 = alloca %"class.imp::Vec3", align 8
  %28 = alloca %"class.std::shared_ptr.18", align 8
  %29 = alloca %"class.std::shared_ptr.0", align 8
  %30 = alloca %"class.std::shared_ptr.0", align 8
  %31 = alloca %"class.std::shared_ptr.0", align 8
  %32 = alloca %"class.std::shared_ptr.166", align 8
  %33 = alloca %"class.std::shared_ptr", align 8
  %34 = alloca %"class.std::shared_ptr.166", align 8
  %35 = alloca %"class.std::shared_ptr", align 8
  %36 = alloca %"class.std::__cxx11::basic_string", align 8
  %37 = alloca %"class.std::allocator", align 1
  %38 = alloca %"class.std::__cxx11::basic_string", align 8
  %39 = alloca %"class.std::allocator", align 1
  %40 = alloca %"class.std::__cxx11::basic_string", align 8
  %41 = alloca %"class.std::allocator", align 1
  %42 = alloca %"class.std::__cxx11::basic_string", align 8
  %43 = alloca %"class.std::allocator", align 1
  %44 = alloca %"class.std::__cxx11::basic_string", align 8
  %45 = alloca %"class.std::allocator", align 1
  %46 = alloca %"class.std::shared_ptr.103", align 8
  %47 = alloca %"class.std::shared_ptr.103", align 8
  %48 = alloca %"class.std::shared_ptr.103", align 8
  %49 = alloca %"class.std::shared_ptr.103", align 8
  %50 = alloca %"class.std::shared_ptr.103", align 8
  %51 = alloca %"class.std::shared_ptr.103", align 8
  %52 = alloca %"class.std::shared_ptr.103", align 8
  %53 = alloca %"class.std::shared_ptr.103", align 8
  %54 = alloca %"class.std::shared_ptr.103", align 8
  %55 = alloca %"class.std::shared_ptr.103", align 8
  %56 = getelementptr inbounds i8, ptr %0, i64 144
  %57 = load ptr, ptr %56, align 8, !tbaa !5
  %58 = icmp eq ptr %57, null
  br i1 %58, label %442, label %59

59:                                               ; preds = %2
  %60 = getelementptr inbounds i8, ptr %0, i64 152
  %61 = tail call noundef zeroext i1 @_ZSteqIN3imp8PipelineEEbRKSt10shared_ptrIT_EDn(ptr noundef nonnull align 8 dereferenceable(16) %60, ptr null) #6
  br i1 %61, label %62, label %66

62:                                               ; preds = %59
  %63 = load ptr, ptr %0, align 8, !tbaa !48
  %64 = getelementptr inbounds i8, ptr %63, i64 24
  %65 = load ptr, ptr %64, align 8
  tail call void %65(ptr noundef nonnull align 8 dereferenceable(392) %0)
  br label %66

66:                                               ; preds = %62, %59
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %3) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %5) #6
  %67 = tail call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp8PipelineELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %60) #6
  call void @_ZN3imp8Pipeline12getOperationEi(ptr dead_on_unwind nonnull writable sret(%"class.std::shared_ptr.100") align 8 %5, ptr noundef nonnull align 8 dereferenceable(240) %67, i32 noundef 5)
  call void @_ZNSt10shared_ptrIN3imp6ObjectEEC2INS0_14FrameOperationEvEEOS_IT_E(ptr noundef nonnull align 8 dereferenceable(16) %4, ptr noundef nonnull align 8 dereferenceable(16) %5) #6
  call void @_ZN3imp13ShadowCasting6dMorphESt10shared_ptrINS_6ObjectEE(ptr dead_on_unwind nonnull writable sret(%"class.std::shared_ptr.94") align 8 %3, ptr noundef nonnull %4)
  call void @_ZNSt12__shared_ptrIN3imp6ObjectELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %4) #6
  call void @_ZNSt12__shared_ptrIN3imp14FrameOperationELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %5) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %5) #6
  %68 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp13ShadowCastingELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %3) #6
  %69 = getelementptr inbounds i8, ptr %0, i64 120
  %70 = load i32, ptr %69, align 8, !tbaa !50
  call void @_ZN3imp13ShadowCasting14setSampleCountEi(ptr noundef nonnull align 8 dereferenceable(204) %68, i32 noundef %70)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %6) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %8) #6
  %71 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp8PipelineELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %60) #6
  call void @_ZN3imp8Pipeline12getOperationEi(ptr dead_on_unwind nonnull writable sret(%"class.std::shared_ptr.100") align 8 %8, ptr noundef nonnull align 8 dereferenceable(240) %71, i32 noundef 9)
  call void @_ZNSt10shared_ptrIN3imp6ObjectEEC2INS0_14FrameOperationEvEEOS_IT_E(ptr noundef nonnull align 8 dereferenceable(16) %7, ptr noundef nonnull align 8 dereferenceable(16) %8) #6
  call void @_ZN3imp16AmbientOcclusion6dMorphESt10shared_ptrINS_6ObjectEE(ptr dead_on_unwind nonnull writable sret(%"class.std::shared_ptr.97") align 8 %6, ptr noundef nonnull %7)
  call void @_ZNSt12__shared_ptrIN3imp6ObjectELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %7) #6
  call void @_ZNSt12__shared_ptrIN3imp14FrameOperationELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %8) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %8) #6
  %72 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp16AmbientOcclusionELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %6) #6
  %73 = getelementptr inbounds i8, ptr %0, i64 124
  %74 = load i32, ptr %73, align 4, !tbaa !51
  call void @_ZN3imp16AmbientOcclusion14setSampleCountEi(ptr noundef nonnull align 8 dereferenceable(292) %72, i32 noundef %74)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %9) #6
  %75 = getelementptr inbounds i8, ptr %0, i64 328
  %76 = invoke ptr @_ZNSt3mapISt10shared_ptrIN3imp5GraphEES0_INS1_11RenderQueueEESt4lessIS3_ESaISt4pairIKS3_S5_EEE4findERS9_(ptr noundef nonnull align 8 dereferenceable(48) %75, ptr noundef nonnull align 8 dereferenceable(16) %1)
          to label %77 unwind label %85

77:                                               ; preds = %66
  store ptr %76, ptr %9, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %10) #6
  %78 = call ptr @_ZNSt3mapISt10shared_ptrIN3imp5GraphEES0_INS1_11RenderQueueEESt4lessIS3_ESaISt4pairIKS3_S5_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(48) %75) #6
  store ptr %78, ptr %10, align 8
  %79 = call noundef zeroext i1 @_ZSteqRKSt17_Rb_tree_iteratorISt4pairIKSt10shared_ptrIN3imp5GraphEES1_INS2_11RenderQueueEEEESB_(ptr noundef nonnull align 8 dereferenceable(8) %9, ptr noundef nonnull align 8 dereferenceable(8) %10) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #6
  br i1 %79, label %80, label %92

80:                                               ; preds = %77
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %11) #6
  invoke void @_ZN3imp11RenderQueue6createIJEEESt10shared_ptrIS0_EDpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::shared_ptr.33") align 8 %11)
          to label %81 unwind label %87

81:                                               ; preds = %80
  %82 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt3mapISt10shared_ptrIN3imp5GraphEES0_INS1_11RenderQueueEESt4lessIS3_ESaISt4pairIKS3_S5_EEEixERS9_(ptr noundef nonnull align 8 dereferenceable(48) %75, ptr noundef nonnull align 8 dereferenceable(16) %1)
          to label %83 unwind label %89

83:                                               ; preds = %81
  %84 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt10shared_ptrIN3imp11RenderQueueEEaSEOS2_(ptr noundef nonnull align 8 dereferenceable(16) %82, ptr noundef nonnull align 8 dereferenceable(16) %11) #6
  call void @_ZNSt12__shared_ptrIN3imp11RenderQueueELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %11) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %11) #6
  br label %92

85:                                               ; preds = %66
  %86 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #6
  br label %446

87:                                               ; preds = %80
  %88 = landingpad { ptr, i32 }
          cleanup
  br label %91

89:                                               ; preds = %81
  %90 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt12__shared_ptrIN3imp11RenderQueueELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %11) #6
  br label %91

91:                                               ; preds = %89, %87
  %.pn = phi { ptr, i32 } [ %90, %89 ], [ %88, %87 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %11) #6
  br label %446

92:                                               ; preds = %83, %77
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %12) #6
  %93 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt3mapISt10shared_ptrIN3imp5GraphEES0_INS1_11RenderQueueEESt4lessIS3_ESaISt4pairIKS3_S5_EEEixERS9_(ptr noundef nonnull align 8 dereferenceable(48) %75, ptr noundef nonnull align 8 dereferenceable(16) %1)
          to label %94 unwind label %100

94:                                               ; preds = %92
  call void @_ZNSt10shared_ptrIN3imp11RenderQueueEEC2ERKS2_(ptr noundef nonnull align 8 dereferenceable(16) %12, ptr noundef nonnull align 8 dereferenceable(16) %93) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %13) #6
  call void @_ZNSt10shared_ptrIN3imp11RenderQueueEEC2ERKS2_(ptr noundef nonnull align 8 dereferenceable(16) %14, ptr noundef nonnull align 8 dereferenceable(16) %12) #6
  invoke void @_ZN3imp10GlRenderer18applyRenderVisitorERKSt10shared_ptrINS_5GraphEES1_INS_11RenderQueueEE(ptr dead_on_unwind nonnull writable sret(%"class.std::shared_ptr.33") align 8 %13, ptr noundef nonnull align 8 dereferenceable(392) %0, ptr noundef nonnull align 8 dereferenceable(16) %1, ptr noundef nonnull %14)
          to label %95 unwind label %102

95:                                               ; preds = %94
  %96 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt10shared_ptrIN3imp11RenderQueueEEaSEOS2_(ptr noundef nonnull align 8 dereferenceable(16) %12, ptr noundef nonnull align 8 dereferenceable(16) %13) #6
  call void @_ZNSt12__shared_ptrIN3imp11RenderQueueELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %13) #6
  call void @_ZNSt12__shared_ptrIN3imp11RenderQueueELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %14) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %13) #6
  call void @_ZNSt10shared_ptrIN3imp11RenderQueueEEC2ERKS2_(ptr noundef nonnull align 8 dereferenceable(16) %15, ptr noundef nonnull align 8 dereferenceable(16) %12) #6
  invoke void @_ZN3imp10GlRenderer20applyRenderToSamplerESt10shared_ptrINS_11RenderQueueEE(ptr noundef nonnull align 8 dereferenceable(392) %0, ptr noundef nonnull %15)
          to label %97 unwind label %104

97:                                               ; preds = %95
  call void @_ZNSt12__shared_ptrIN3imp11RenderQueueELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %15) #6
  %98 = call noundef zeroext i1 @_ZNK3imp13SceneRenderer13isMsaaEnabledEv(ptr noundef nonnull align 8 dereferenceable(137) %0)
  br i1 %98, label %99, label %108

99:                                               ; preds = %97
  invoke void @glEnable(i32 noundef 32925)
          to label %109 unwind label %106

100:                                              ; preds = %92
  %101 = landingpad { ptr, i32 }
          cleanup
  br label %445

102:                                              ; preds = %94
  %103 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt12__shared_ptrIN3imp11RenderQueueELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %14) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %13) #6
  br label %444

104:                                              ; preds = %95
  %105 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt12__shared_ptrIN3imp11RenderQueueELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %15) #6
  br label %444

106:                                              ; preds = %126, %121, %115, %109, %108, %99
  %107 = landingpad { ptr, i32 }
          cleanup
  br label %444

108:                                              ; preds = %97
  invoke void @glDisable(i32 noundef 32925)
          to label %109 unwind label %106

109:                                              ; preds = %108, %99
  %110 = load ptr, ptr %56, align 8, !tbaa !5
  %111 = getelementptr inbounds i8, ptr %0, i64 296
  %112 = load ptr, ptr %110, align 8, !tbaa !48
  %113 = getelementptr inbounds i8, ptr %112, i64 120
  %114 = load ptr, ptr %113, align 8
  invoke void %114(ptr noundef nonnull align 8 dereferenceable(24) %110, ptr noundef nonnull align 8 dereferenceable(16) %111)
          to label %115 unwind label %106

115:                                              ; preds = %109
  %116 = load ptr, ptr %56, align 8, !tbaa !5
  %117 = load ptr, ptr %116, align 8, !tbaa !48
  %118 = getelementptr inbounds i8, ptr %117, i64 80
  %119 = load ptr, ptr %118, align 8
  invoke void %119(ptr noundef nonnull align 8 dereferenceable(24) %116, ptr noundef nonnull align 8 dereferenceable(16) %111)
          to label %120 unwind label %106

120:                                              ; preds = %115
  call void @_ZNSt10shared_ptrIN3imp5StateEEC2EDn(ptr noundef nonnull align 8 dereferenceable(16) %16, ptr null) #6
  invoke void @_ZN3imp10GlRenderer9drawQueueERSt10shared_ptrINS_11RenderQueueEES1_INS_5StateEENS_13SceneRenderer11RenderFrameE(ptr noundef nonnull align 8 dereferenceable(392) %0, ptr noundef nonnull align 8 dereferenceable(16) %12, ptr noundef nonnull %16, i32 noundef 0)
          to label %121 unwind label %137

121:                                              ; preds = %120
  call void @_ZNSt12__shared_ptrIN3imp5StateELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %16) #6
  %122 = load ptr, ptr %56, align 8, !tbaa !5
  %123 = load ptr, ptr %122, align 8, !tbaa !48
  %124 = getelementptr inbounds i8, ptr %123, i64 128
  %125 = load ptr, ptr %124, align 8
  invoke void %125(ptr noundef nonnull align 8 dereferenceable(24) %122)
          to label %126 unwind label %106

126:                                              ; preds = %121
  %127 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp12RenderTargetELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %111) #6
  invoke void @_ZN3imp12RenderTarget6changeEv(ptr noundef nonnull align 8 dereferenceable(99) %127)
          to label %128 unwind label %106

128:                                              ; preds = %126
  %129 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp11RenderQueueELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %12) #6
  %130 = getelementptr inbounds i8, ptr %129, i64 32
  %131 = call noundef zeroext i1 @_ZNKSt6vectorIPN3imp9LightNodeESaIS2_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %130) #6
  br i1 %131, label %139, label %132

132:                                              ; preds = %128
  %133 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp11RenderQueueELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %12) #6
  %134 = getelementptr inbounds i8, ptr %133, i64 32
  %135 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIPN3imp9LightNodeESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %134, i64 noundef 0) #6
  %136 = load ptr, ptr %135, align 8, !tbaa !52
  br label %139

137:                                              ; preds = %120
  %138 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt12__shared_ptrIN3imp5StateELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %16) #6
  br label %444

139:                                              ; preds = %132, %128
  %.045 = phi ptr [ null, %128 ], [ %136, %132 ]
  %140 = invoke noundef zeroext i1 @_ZNK3imp13SceneRenderer16isFeatureEnabledENS0_7FeatureE(ptr noundef nonnull align 8 dereferenceable(137) %0, i32 noundef 2)
          to label %141 unwind label %170

141:                                              ; preds = %139
  %142 = invoke noundef zeroext i1 @_ZNK3imp13SceneRenderer16isFeatureEnabledENS0_7FeatureE(ptr noundef nonnull align 8 dereferenceable(137) %0, i32 noundef 1)
          to label %143 unwind label %172

143:                                              ; preds = %141
  %144 = icmp ne ptr %.045, null
  %145 = select i1 %142, i1 %144, i1 false
  %146 = invoke noundef zeroext i1 @_ZNK3imp13SceneRenderer16isFeatureEnabledENS0_7FeatureE(ptr noundef nonnull align 8 dereferenceable(137) %0, i32 noundef 0)
          to label %147 unwind label %174

147:                                              ; preds = %143
  %148 = invoke noundef zeroext i1 @_ZNK3imp13SceneRenderer16isFeatureEnabledENS0_7FeatureE(ptr noundef nonnull align 8 dereferenceable(137) %0, i32 noundef 3)
          to label %149 unwind label %176

149:                                              ; preds = %147
  %150 = invoke noundef zeroext i1 @_ZNK3imp13SceneRenderer16isFeatureEnabledENS0_7FeatureE(ptr noundef nonnull align 8 dereferenceable(137) %0, i32 noundef 4)
          to label %151 unwind label %178

151:                                              ; preds = %149
  %152 = select i1 %150, i1 %144, i1 false
  br i1 %140, label %153, label %207

153:                                              ; preds = %151
  %154 = getelementptr inbounds i8, ptr %0, i64 116
  %155 = load i32, ptr %154, align 4, !tbaa !53
  %156 = load i32, ptr @_ZZN3imp10GlRenderer6renderERKSt10shared_ptrINS_5GraphEEE12s_lastEnvRes, align 4, !tbaa !54
  %.not = icmp eq i32 %155, %156
  br i1 %.not, label %187, label %157

157:                                              ; preds = %153
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %17) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %18) #6
  store i32 4, ptr %18, align 4, !tbaa !54
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %19) #6
  invoke void @_ZN3imp4Vec4C2Ef(ptr noundef nonnull align 8 dereferenceable(40) %19, float noundef 1.000000e+00)
          to label %158 unwind label %180

158:                                              ; preds = %157
  invoke void @_ZN3imp14CubeMapSampler6createIJRiS2_iNS_4Vec4EEEESt10shared_ptrIS0_EDpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::shared_ptr.12") align 8 %17, ptr noundef nonnull align 4 dereferenceable(4) %154, ptr noundef nonnull align 4 dereferenceable(4) %154, ptr noundef nonnull align 4 dereferenceable(4) %18, ptr noundef nonnull align 8 dereferenceable(40) %19)
          to label %159 unwind label %182

159:                                              ; preds = %158
  %160 = getelementptr inbounds i8, ptr %0, i64 200
  %161 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt10shared_ptrIN3imp14CubeMapSamplerEEaSEOS2_(ptr noundef nonnull align 8 dereferenceable(16) %160, ptr noundef nonnull align 8 dereferenceable(16) %17) #6
  call void @_ZNSt12__shared_ptrIN3imp14CubeMapSamplerELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %17) #6
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %19) #6
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %19) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %18) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %17) #6
  %162 = getelementptr inbounds i8, ptr %0, i64 232
  %163 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp15RenderToCubeMapELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %162) #6
  call void @_ZNSt10shared_ptrIN3imp14CubeMapSamplerEEC2ERKS2_(ptr noundef nonnull align 8 dereferenceable(16) %20, ptr noundef nonnull align 8 dereferenceable(16) %160) #6
  invoke void @_ZN3imp15RenderToCubeMap10setCubeMapESt10shared_ptrINS_14CubeMapSamplerEE(ptr noundef nonnull align 8 dereferenceable(812) %163, ptr noundef nonnull %20)
          to label %164 unwind label %185

164:                                              ; preds = %159
  call void @_ZNSt12__shared_ptrIN3imp14CubeMapSamplerELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %20) #6
  %165 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp15RenderToCubeMapELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %162) #6
  %166 = load i32, ptr %154, align 4, !tbaa !53
  %167 = sitofp i32 %166 to float
  invoke void @_ZN3imp15RenderToCubeMap13setResolutionEf(ptr noundef nonnull align 8 dereferenceable(812) %165, float noundef %167)
          to label %168 unwind label %178

168:                                              ; preds = %164
  %169 = load i32, ptr %154, align 4, !tbaa !53
  store i32 %169, ptr @_ZZN3imp10GlRenderer6renderERKSt10shared_ptrINS_5GraphEEE12s_lastEnvRes, align 4, !tbaa !54
  br label %187

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

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

174:                                              ; preds = %143
  %175 = landingpad { ptr, i32 }
          cleanup
  br label %444

176:                                              ; preds = %147
  %177 = landingpad { ptr, i32 }
          cleanup
  br label %444

178:                                              ; preds = %219, %164, %149
  %179 = landingpad { ptr, i32 }
          cleanup
  br label %444

180:                                              ; preds = %157
  %181 = landingpad { ptr, i32 }
          cleanup
  br label %184

182:                                              ; preds = %158
  %183 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %19) #6
  br label %184

184:                                              ; preds = %182, %180
  %.pn47 = phi { ptr, i32 } [ %183, %182 ], [ %181, %180 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %19) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %18) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %17) #6
  br label %444

185:                                              ; preds = %159
  %186 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt12__shared_ptrIN3imp14CubeMapSamplerELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %20) #6
  br label %444

187:                                              ; preds = %168, %153
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %21) #6
  invoke void @_ZN3imp4Vec3C2Ef(ptr noundef nonnull align 8 dereferenceable(36) %21, float noundef 0.000000e+00)
          to label %188 unwind label %198

188:                                              ; preds = %187
  %189 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp11RenderQueueELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %12) #6
  %190 = getelementptr inbounds i8, ptr %189, i64 24
  %191 = load ptr, ptr %190, align 8, !tbaa !55
  %.not49 = icmp eq ptr %191, null
  br i1 %.not49, label %200, label %192

192:                                              ; preds = %188
  %193 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp11RenderQueueELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %12) #6
  %194 = getelementptr inbounds i8, ptr %193, i64 24
  %195 = load ptr, ptr %194, align 8, !tbaa !55
  %196 = call noundef nonnull align 8 dereferenceable(36) ptr @_ZNK3imp6Camera19getAbsolutePositionEv(ptr noundef nonnull align 8 dereferenceable(752) %195)
  %197 = call noundef nonnull align 8 dereferenceable(36) ptr @_ZN3imp4Vec3aSERKS0_(ptr noundef nonnull align 8 dereferenceable(36) %21, ptr noundef nonnull align 8 dereferenceable(36) %196) #6
  br label %200

198:                                              ; preds = %187
  %199 = landingpad { ptr, i32 }
          cleanup
  br label %206

200:                                              ; preds = %192, %188
  %201 = getelementptr inbounds i8, ptr %0, i64 232
  %202 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp15RenderToCubeMapELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %201) #6
  call void @_ZNSt10shared_ptrIN3imp14ReflexionModelEEC2EDn(ptr noundef nonnull align 8 dereferenceable(16) %22, ptr null) #6
  invoke void @_ZN3imp15RenderToCubeMap6renderERSt10shared_ptrINS_11RenderQueueEERKNS_4Vec3ENS_13SceneRenderer11RenderFrameES1_INS_14ReflexionModelEE(ptr noundef nonnull align 8 dereferenceable(812) %202, ptr noundef nonnull align 8 dereferenceable(16) %12, ptr noundef nonnull align 8 dereferenceable(36) %21, i32 noundef 4, ptr noundef nonnull %22)
          to label %203 unwind label %204

203:                                              ; preds = %200
  call void @_ZNSt12__shared_ptrIN3imp14ReflexionModelELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %22) #6
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(36) %21) #6
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %21) #6
  br label %207

204:                                              ; preds = %200
  %205 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt12__shared_ptrIN3imp14ReflexionModelELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %22) #6
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(36) %21) #6
  br label %206

206:                                              ; preds = %204, %198
  %.pn50 = phi { ptr, i32 } [ %205, %204 ], [ %199, %198 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %21) #6
  br label %444

207:                                              ; preds = %203, %151
  br i1 %145, label %208, label %245

208:                                              ; preds = %207
  %209 = getelementptr inbounds i8, ptr %0, i64 112
  %210 = load i32, ptr %209, align 8, !tbaa !66
  %211 = load i32, ptr @_ZZN3imp10GlRenderer6renderERKSt10shared_ptrINS_5GraphEEE15s_lastShadowRes, align 4, !tbaa !54
  %.not52 = icmp eq i32 %210, %211
  br i1 %.not52, label %232, label %212

212:                                              ; preds = %208
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %23) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %24) #6
  store i32 4, ptr %24, align 4, !tbaa !54
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %25) #6
  invoke void @_ZN3imp4Vec4C2Ef(ptr noundef nonnull align 8 dereferenceable(40) %25, float noundef 1.000000e+00)
          to label %213 unwind label %225

213:                                              ; preds = %212
  invoke void @_ZN3imp14CubeMapSampler6createIJRiS2_iNS_4Vec4EEEESt10shared_ptrIS0_EDpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::shared_ptr.12") align 8 %23, ptr noundef nonnull align 4 dereferenceable(4) %209, ptr noundef nonnull align 4 dereferenceable(4) %209, ptr noundef nonnull align 4 dereferenceable(4) %24, ptr noundef nonnull align 8 dereferenceable(40) %25)
          to label %214 unwind label %227

214:                                              ; preds = %213
  %215 = getelementptr inbounds i8, ptr %0, i64 184
  %216 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt10shared_ptrIN3imp14CubeMapSamplerEEaSEOS2_(ptr noundef nonnull align 8 dereferenceable(16) %215, ptr noundef nonnull align 8 dereferenceable(16) %23) #6
  call void @_ZNSt12__shared_ptrIN3imp14CubeMapSamplerELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %23) #6
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %25) #6
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %25) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %24) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %23) #6
  %217 = getelementptr inbounds i8, ptr %0, i64 216
  %218 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp15RenderToCubeMapELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %217) #6
  call void @_ZNSt10shared_ptrIN3imp14CubeMapSamplerEEC2ERKS2_(ptr noundef nonnull align 8 dereferenceable(16) %26, ptr noundef nonnull align 8 dereferenceable(16) %215) #6
  invoke void @_ZN3imp15RenderToCubeMap10setCubeMapESt10shared_ptrINS_14CubeMapSamplerEE(ptr noundef nonnull align 8 dereferenceable(812) %218, ptr noundef nonnull %26)
          to label %219 unwind label %230

219:                                              ; preds = %214
  call void @_ZNSt12__shared_ptrIN3imp14CubeMapSamplerELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %26) #6
  %220 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp15RenderToCubeMapELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %217) #6
  %221 = load i32, ptr %209, align 8, !tbaa !66
  %222 = sitofp i32 %221 to float
  invoke void @_ZN3imp15RenderToCubeMap13setResolutionEf(ptr noundef nonnull align 8 dereferenceable(812) %220, float noundef %222)
          to label %223 unwind label %178

223:                                              ; preds = %219
  %224 = load i32, ptr %209, align 8, !tbaa !66
  store i32 %224, ptr @_ZZN3imp10GlRenderer6renderERKSt10shared_ptrINS_5GraphEEE15s_lastShadowRes, align 4, !tbaa !54
  br label %232

225:                                              ; preds = %212
  %226 = landingpad { ptr, i32 }
          cleanup
  br label %229

227:                                              ; preds = %213
  %228 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %25) #6
  br label %229

229:                                              ; preds = %227, %225
  %.pn53 = phi { ptr, i32 } [ %228, %227 ], [ %226, %225 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %25) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %24) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %23) #6
  br label %444

230:                                              ; preds = %214
  %231 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt12__shared_ptrIN3imp14CubeMapSamplerELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %26) #6
  br label %444

232:                                              ; preds = %223, %208
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %27) #6
  invoke void @_ZN3imp4Vec3C2Ef(ptr noundef nonnull align 8 dereferenceable(36) %27, float noundef 0.000000e+00)
          to label %233 unwind label %239

233:                                              ; preds = %232
  %234 = getelementptr inbounds i8, ptr %.045, i64 544
  %235 = call noundef nonnull align 8 dereferenceable(36) ptr @_ZN3imp4Vec3aSERKS0_(ptr noundef nonnull align 8 dereferenceable(36) %27, ptr noundef nonnull align 8 dereferenceable(36) %234) #6
  %236 = getelementptr inbounds i8, ptr %0, i64 216
  %237 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp15RenderToCubeMapELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %236) #6
  %238 = getelementptr inbounds i8, ptr %0, i64 248
  call void @_ZNSt10shared_ptrIN3imp14ReflexionModelEEC2ERKS2_(ptr noundef nonnull align 8 dereferenceable(16) %28, ptr noundef nonnull align 8 dereferenceable(16) %238) #6
  invoke void @_ZN3imp15RenderToCubeMap6renderERSt10shared_ptrINS_11RenderQueueEERKNS_4Vec3ENS_13SceneRenderer11RenderFrameES1_INS_14ReflexionModelEE(ptr noundef nonnull align 8 dereferenceable(812) %237, ptr noundef nonnull align 8 dereferenceable(16) %12, ptr noundef nonnull align 8 dereferenceable(36) %27, i32 noundef 2, ptr noundef nonnull %28)
          to label %241 unwind label %242

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

241:                                              ; preds = %233
  call void @_ZNSt12__shared_ptrIN3imp14ReflexionModelELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %28) #6
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(36) %27) #6
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %27) #6
  br label %245

242:                                              ; preds = %233
  %243 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt12__shared_ptrIN3imp14ReflexionModelELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %28) #6
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(36) %27) #6
  br label %244

244:                                              ; preds = %242, %239
  %.pn55 = phi { ptr, i32 } [ %243, %242 ], [ %240, %239 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %27) #6
  br label %444

245:                                              ; preds = %241, %207
  %246 = call noundef zeroext i1 @_ZNK3imp13SceneRenderer13isMsaaEnabledEv(ptr noundef nonnull align 8 dereferenceable(137) %0)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %29) #6
  call void @_ZNSt10shared_ptrIN3imp12RenderTargetEEC2ERKS2_(ptr noundef nonnull align 8 dereferenceable(16) %29, ptr noundef nonnull align 8 dereferenceable(16) %111) #6
  br i1 %246, label %247, label %330

247:                                              ; preds = %245
  %248 = load ptr, ptr %56, align 8, !tbaa !5
  %249 = getelementptr inbounds i8, ptr %0, i64 312
  %250 = load ptr, ptr %248, align 8, !tbaa !48
  %251 = getelementptr inbounds i8, ptr %250, i64 120
  %252 = load ptr, ptr %251, align 8
  invoke void %252(ptr noundef nonnull align 8 dereferenceable(24) %248, ptr noundef nonnull align 8 dereferenceable(16) %249)
          to label %253 unwind label %272

253:                                              ; preds = %247
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %30) #6
  call void @_ZNSt10shared_ptrIN3imp12RenderTargetEEC2ERKS2_(ptr noundef nonnull align 8 dereferenceable(16) %30, ptr noundef nonnull align 8 dereferenceable(16) %111) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %31) #6
  call void @_ZNSt10shared_ptrIN3imp12RenderTargetEEC2ERKS2_(ptr noundef nonnull align 8 dereferenceable(16) %31, ptr noundef nonnull align 8 dereferenceable(16) %249) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %32) #6
  %254 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp12RenderTargetELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %30) #6
  call void @_ZN3imp6Object13getRenderDataEv(ptr dead_on_unwind nonnull writable sret(%"class.std::shared_ptr") align 8 %33, ptr noundef nonnull align 8 dereferenceable(24) %254)
  call void @_ZN3imp11FrameBuffer6dMorphESt10shared_ptrINS_6ObjectEE(ptr dead_on_unwind nonnull writable sret(%"class.std::shared_ptr.166") align 8 %32, ptr noundef nonnull %33)
  call void @_ZNSt12__shared_ptrIN3imp6ObjectELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %33) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %34) #6
  %255 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp12RenderTargetELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %31) #6
  call void @_ZN3imp6Object13getRenderDataEv(ptr dead_on_unwind nonnull writable sret(%"class.std::shared_ptr") align 8 %35, ptr noundef nonnull align 8 dereferenceable(24) %255)
  call void @_ZN3imp11FrameBuffer6dMorphESt10shared_ptrINS_6ObjectEE(ptr dead_on_unwind nonnull writable sret(%"class.std::shared_ptr.166") align 8 %34, ptr noundef nonnull %35)
  call void @_ZNSt12__shared_ptrIN3imp6ObjectELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %35) #6
  %256 = load ptr, ptr @__glewBindFramebuffer, align 8, !tbaa !52
  %257 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp11FrameBufferELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %34) #6
  %258 = call noundef i32 @_ZNK3imp11FrameBuffer10getVideoIDEv(ptr noundef nonnull align 8 dereferenceable(144) %257)
  invoke void %256(i32 noundef 36009, i32 noundef %258)
          to label %259 unwind label %274

259:                                              ; preds = %253
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %36) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %37) #6
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %37) #6
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %36, ptr noundef nonnull @.str.43, ptr noundef nonnull align 1 dereferenceable(1) %37)
          to label %260 unwind label %276

260:                                              ; preds = %259
  %261 = invoke noundef zeroext i1 @_Z12GLcheckErrorRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPKci(ptr noundef nonnull align 8 dereferenceable(32) %36, ptr noundef nonnull @.str.44, i32 noundef 610)
          to label %262 unwind label %278

262:                                              ; preds = %260
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %36) #6
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %37) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %37) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %36) #6
  %263 = load ptr, ptr @__glewBindFramebuffer, align 8, !tbaa !52
  %264 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp11FrameBufferELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %32) #6
  %265 = call noundef i32 @_ZNK3imp11FrameBuffer10getVideoIDEv(ptr noundef nonnull align 8 dereferenceable(144) %264)
  invoke void %263(i32 noundef 36008, i32 noundef %265)
          to label %266 unwind label %274

266:                                              ; preds = %262
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %38) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %39) #6
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %39) #6
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %38, ptr noundef nonnull @.str.45, ptr noundef nonnull align 1 dereferenceable(1) %39)
          to label %267 unwind label %281

267:                                              ; preds = %266
  %268 = invoke noundef zeroext i1 @_Z12GLcheckErrorRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPKci(ptr noundef nonnull align 8 dereferenceable(32) %38, ptr noundef nonnull @.str.44, i32 noundef 612)
          to label %269 unwind label %283

269:                                              ; preds = %267
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %38) #6
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %39) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %39) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %38) #6
  br label %286

270:                                              ; preds = %308
  %271 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp12RenderTargetELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %249) #6
  invoke void @_ZN3imp12RenderTarget6changeEv(ptr noundef nonnull align 8 dereferenceable(99) %271)
          to label %327 unwind label %274

272:                                              ; preds = %435, %431, %417, %408, %401, %394, %387, %380, %373, %366, %359, %352, %345, %338, %336, %334, %332, %330, %247
  %273 = landingpad { ptr, i32 }
          cleanup
  br label %443

274:                                              ; preds = %270, %262, %253
  %275 = landingpad { ptr, i32 }
          cleanup
  br label %329

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

278:                                              ; preds = %260
  %279 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %36) #6
  br label %280

280:                                              ; preds = %278, %276
  %.pn57 = phi { ptr, i32 } [ %279, %278 ], [ %277, %276 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %37) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %37) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %36) #6
  br label %329

281:                                              ; preds = %266
  %282 = landingpad { ptr, i32 }
          cleanup
  br label %285

283:                                              ; preds = %267
  %284 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %38) #6
  br label %285

285:                                              ; preds = %283, %281
  %.pn59 = phi { ptr, i32 } [ %284, %283 ], [ %282, %281 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %39) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %39) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %38) #6
  br label %329

286:                                              ; preds = %269, %308
  %.080 = phi i32 [ 0, %269 ], [ %309, %308 ]
  %287 = or disjoint i32 %.080, 36064
  invoke void @glDrawBuffer(i32 noundef %287)
          to label %288 unwind label %310

288:                                              ; preds = %286
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %40) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %41) #6
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %41) #6
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %40, ptr noundef nonnull @.str.46, ptr noundef nonnull align 1 dereferenceable(1) %41)
          to label %289 unwind label %312

289:                                              ; preds = %288
  %290 = invoke noundef zeroext i1 @_Z12GLcheckErrorRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPKci(ptr noundef nonnull align 8 dereferenceable(32) %40, ptr noundef nonnull @.str.44, i32 noundef 618)
          to label %291 unwind label %314

291:                                              ; preds = %289
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %40) #6
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %41) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %41) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %40) #6
  invoke void @glReadBuffer(i32 noundef %287)
          to label %292 unwind label %310

292:                                              ; preds = %291
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %42) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %43) #6
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %43) #6
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %42, ptr noundef nonnull @.str.47, ptr noundef nonnull align 1 dereferenceable(1) %43)
          to label %293 unwind label %317

293:                                              ; preds = %292
  %294 = invoke noundef zeroext i1 @_Z12GLcheckErrorRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPKci(ptr noundef nonnull align 8 dereferenceable(32) %42, ptr noundef nonnull @.str.44, i32 noundef 620)
          to label %295 unwind label %319

295:                                              ; preds = %293
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %42) #6
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %43) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %43) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %42) #6
  %296 = load ptr, ptr @__glewBlitFramebuffer, align 8, !tbaa !52
  %297 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp11FrameBufferELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %32) #6
  %298 = call noundef i32 @_ZNK3imp11FrameBuffer5widthEv(ptr noundef nonnull align 8 dereferenceable(144) %297)
  %299 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp11FrameBufferELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %32) #6
  %300 = call noundef i32 @_ZNK3imp11FrameBuffer6heightEv(ptr noundef nonnull align 8 dereferenceable(144) %299)
  %301 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp11FrameBufferELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %34) #6
  %302 = call noundef i32 @_ZNK3imp11FrameBuffer5widthEv(ptr noundef nonnull align 8 dereferenceable(144) %301)
  %303 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp11FrameBufferELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %34) #6
  %304 = call noundef i32 @_ZNK3imp11FrameBuffer6heightEv(ptr noundef nonnull align 8 dereferenceable(144) %303)
  invoke void %296(i32 noundef 0, i32 noundef 0, i32 noundef %298, i32 noundef %300, i32 noundef 0, i32 noundef 0, i32 noundef %302, i32 noundef %304, i32 noundef 16384, i32 noundef 9728)
          to label %305 unwind label %310

305:                                              ; preds = %295
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %44) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %45) #6
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %45) #6
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %44, ptr noundef nonnull @.str.48, ptr noundef nonnull align 1 dereferenceable(1) %45)
          to label %306 unwind label %322

306:                                              ; preds = %305
  %307 = invoke noundef zeroext i1 @_Z12GLcheckErrorRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPKci(ptr noundef nonnull align 8 dereferenceable(32) %44, ptr noundef nonnull @.str.44, i32 noundef 623)
          to label %308 unwind label %324

308:                                              ; preds = %306
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %44) #6
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %45) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %45) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %44) #6
  %309 = add nuw nsw i32 %.080, 1
  %exitcond.not = icmp eq i32 %309, 6
  br i1 %exitcond.not, label %270, label %286, !llvm.loop !67

310:                                              ; preds = %295, %291, %286
  %311 = landingpad { ptr, i32 }
          cleanup
  br label %329

312:                                              ; preds = %288
  %313 = landingpad { ptr, i32 }
          cleanup
  br label %316

314:                                              ; preds = %289
  %315 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %40) #6
  br label %316

316:                                              ; preds = %314, %312
  %.pn63 = phi { ptr, i32 } [ %315, %314 ], [ %313, %312 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %41) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %41) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %40) #6
  br label %329

317:                                              ; preds = %292
  %318 = landingpad { ptr, i32 }
          cleanup
  br label %321

319:                                              ; preds = %293
  %320 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %42) #6
  br label %321

321:                                              ; preds = %319, %317
  %.pn65 = phi { ptr, i32 } [ %320, %319 ], [ %318, %317 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %43) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %43) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %42) #6
  br label %329

322:                                              ; preds = %305
  %323 = landingpad { ptr, i32 }
          cleanup
  br label %326

324:                                              ; preds = %306
  %325 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %44) #6
  br label %326

326:                                              ; preds = %324, %322
  %.pn67 = phi { ptr, i32 } [ %325, %324 ], [ %323, %322 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %45) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %45) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %44) #6
  br label %329

327:                                              ; preds = %270
  %328 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt10shared_ptrIN3imp12RenderTargetEEaSERKS2_(ptr noundef nonnull align 8 dereferenceable(16) %29, ptr noundef nonnull align 8 dereferenceable(16) %249) #6
  call void @_ZNSt12__shared_ptrIN3imp11FrameBufferELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %34) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %34) #6
  call void @_ZNSt12__shared_ptrIN3imp11FrameBufferELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %32) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %32) #6
  call void @_ZNSt12__shared_ptrIN3imp12RenderTargetELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %31) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %31) #6
  call void @_ZNSt12__shared_ptrIN3imp12RenderTargetELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %30) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %30) #6
  br label %330

329:                                              ; preds = %310, %316, %321, %326, %285, %280, %274
  %.pn67.pn.pn = phi { ptr, i32 } [ %275, %274 ], [ %.pn59, %285 ], [ %.pn57, %280 ], [ %.pn67, %326 ], [ %311, %310 ], [ %.pn65, %321 ], [ %.pn63, %316 ]
  call void @_ZNSt12__shared_ptrIN3imp11FrameBufferELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %34) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %34) #6
  call void @_ZNSt12__shared_ptrIN3imp11FrameBufferELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %32) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %32) #6
  call void @_ZNSt12__shared_ptrIN3imp12RenderTargetELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %31) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %31) #6
  call void @_ZNSt12__shared_ptrIN3imp12RenderTargetELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %30) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %30) #6
  br label %443

330:                                              ; preds = %327, %245
  %331 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp8PipelineELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %60) #6
  invoke void @_ZN3imp8Pipeline9setActiveEib(ptr noundef nonnull align 8 dereferenceable(240) %331, i32 noundef 5, i1 noundef zeroext %145)
          to label %332 unwind label %272

332:                                              ; preds = %330
  %333 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp8PipelineELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %60) #6
  invoke void @_ZN3imp8Pipeline9setActiveEib(ptr noundef nonnull align 8 dereferenceable(240) %333, i32 noundef 0, i1 noundef zeroext %140)
          to label %334 unwind label %272

334:                                              ; preds = %332
  %335 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp8PipelineELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %60) #6
  invoke void @_ZN3imp8Pipeline9setActiveEib(ptr noundef nonnull align 8 dereferenceable(240) %335, i32 noundef 8, i1 noundef zeroext %146)
          to label %336 unwind label %272

336:                                              ; preds = %334
  %337 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp8PipelineELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %60) #6
  invoke void @_ZN3imp8Pipeline9setActiveEib(ptr noundef nonnull align 8 dereferenceable(240) %337, i32 noundef 9, i1 noundef zeroext %148)
          to label %338 unwind label %272

338:                                              ; preds = %336
  %339 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp8PipelineELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %60) #6
  invoke void @_ZN3imp8Pipeline9setActiveEib(ptr noundef nonnull align 8 dereferenceable(240) %339, i32 noundef 6, i1 noundef zeroext %152)
          to label %340 unwind label %272

340:                                              ; preds = %338
  %341 = call noundef i32 @_ZNK3imp13SceneRenderer14getOutputFrameEv(ptr noundef nonnull align 8 dereferenceable(137) %0)
  %342 = load i32, ptr @_ZZN3imp10GlRenderer6renderERKSt10shared_ptrINS_5GraphEEE12s_lastOutput, align 4, !tbaa !69
  %.not61 = icmp eq i32 %341, %342
  br i1 %.not61, label %417, label %343

343:                                              ; preds = %340
  %344 = call noundef i32 @_ZNK3imp13SceneRenderer14getOutputFrameEv(ptr noundef nonnull align 8 dereferenceable(137) %0)
  switch i32 %344, label %415 [
    i32 3, label %408
    i32 1, label %345
    i32 2, label %352
    i32 4, label %359
    i32 5, label %366
    i32 6, label %373
    i32 7, label %380
    i32 8, label %387
    i32 9, label %394
    i32 10, label %401
  ]

345:                                              ; preds = %343
  %346 = getelementptr inbounds i8, ptr %0, i64 280
  %347 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp9CopyFrameELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %346) #6
  %348 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp12RenderTargetELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %29) #6
  invoke void @_ZN3imp12RenderTarget3getEi(ptr dead_on_unwind nonnull writable sret(%"class.std::shared_ptr.103") align 8 %46, ptr noundef nonnull align 8 dereferenceable(99) %348, i32 noundef 0)
          to label %349 unwind label %272

349:                                              ; preds = %345
  invoke void @_ZN3imp14FrameOperation8setInputESt10shared_ptrINS_12ImageSamplerEEi(ptr noundef nonnull align 8 dereferenceable(120) %347, ptr noundef nonnull %46, i32 noundef 0)
          to label %.sink.split unwind label %350

350:                                              ; preds = %349
  %351 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt12__shared_ptrIN3imp12ImageSamplerELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %46) #6
  br label %443

352:                                              ; preds = %343
  %353 = getelementptr inbounds i8, ptr %0, i64 280
  %354 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp9CopyFrameELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %353) #6
  %355 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp8PipelineELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %60) #6
  invoke void @_ZN3imp8Pipeline14getOutputFrameEii(ptr dead_on_unwind nonnull writable sret(%"class.std::shared_ptr.103") align 8 %47, ptr noundef nonnull align 8 dereferenceable(240) %355, i32 noundef 5, i32 noundef 0)
          to label %356 unwind label %272

356:                                              ; preds = %352
  invoke void @_ZN3imp14FrameOperation8setInputESt10shared_ptrINS_12ImageSamplerEEi(ptr noundef nonnull align 8 dereferenceable(120) %354, ptr noundef nonnull %47, i32 noundef 0)
          to label %.sink.split unwind label %357

357:                                              ; preds = %356
  %358 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt12__shared_ptrIN3imp12ImageSamplerELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %47) #6
  br label %443

359:                                              ; preds = %343
  %360 = getelementptr inbounds i8, ptr %0, i64 280
  %361 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp9CopyFrameELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %360) #6
  %362 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp8PipelineELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %60) #6
  invoke void @_ZN3imp8Pipeline14getOutputFrameEii(ptr dead_on_unwind nonnull writable sret(%"class.std::shared_ptr.103") align 8 %48, ptr noundef nonnull align 8 dereferenceable(240) %362, i32 noundef 0, i32 noundef 0)
          to label %363 unwind label %272

363:                                              ; preds = %359
  invoke void @_ZN3imp14FrameOperation8setInputESt10shared_ptrINS_12ImageSamplerEEi(ptr noundef nonnull align 8 dereferenceable(120) %361, ptr noundef nonnull %48, i32 noundef 0)
          to label %.sink.split unwind label %364

364:                                              ; preds = %363
  %365 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt12__shared_ptrIN3imp12ImageSamplerELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %48) #6
  br label %443

366:                                              ; preds = %343
  %367 = getelementptr inbounds i8, ptr %0, i64 280
  %368 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp9CopyFrameELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %367) #6
  %369 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp8PipelineELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %60) #6
  invoke void @_ZN3imp8Pipeline14getOutputFrameEii(ptr dead_on_unwind nonnull writable sret(%"class.std::shared_ptr.103") align 8 %49, ptr noundef nonnull align 8 dereferenceable(240) %369, i32 noundef 6, i32 noundef 0)
          to label %370 unwind label %272

370:                                              ; preds = %366
  invoke void @_ZN3imp14FrameOperation8setInputESt10shared_ptrINS_12ImageSamplerEEi(ptr noundef nonnull align 8 dereferenceable(120) %368, ptr noundef nonnull %49, i32 noundef 0)
          to label %.sink.split unwind label %371

371:                                              ; preds = %370
  %372 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt12__shared_ptrIN3imp12ImageSamplerELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %49) #6
  br label %443

373:                                              ; preds = %343
  %374 = getelementptr inbounds i8, ptr %0, i64 280
  %375 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp9CopyFrameELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %374) #6
  %376 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp12RenderTargetELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %29) #6
  invoke void @_ZN3imp12RenderTarget3getEi(ptr dead_on_unwind nonnull writable sret(%"class.std::shared_ptr.103") align 8 %50, ptr noundef nonnull align 8 dereferenceable(99) %376, i32 noundef 5)
          to label %377 unwind label %272

377:                                              ; preds = %373
  invoke void @_ZN3imp14FrameOperation8setInputESt10shared_ptrINS_12ImageSamplerEEi(ptr noundef nonnull align 8 dereferenceable(120) %375, ptr noundef nonnull %50, i32 noundef 0)
          to label %.sink.split unwind label %378

378:                                              ; preds = %377
  %379 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt12__shared_ptrIN3imp12ImageSamplerELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %50) #6
  br label %443

380:                                              ; preds = %343
  %381 = getelementptr inbounds i8, ptr %0, i64 280
  %382 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp9CopyFrameELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %381) #6
  %383 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp12RenderTargetELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %29) #6
  invoke void @_ZN3imp12RenderTarget3getEi(ptr dead_on_unwind nonnull writable sret(%"class.std::shared_ptr.103") align 8 %51, ptr noundef nonnull align 8 dereferenceable(99) %383, i32 noundef 1)
          to label %384 unwind label %272

384:                                              ; preds = %380
  invoke void @_ZN3imp14FrameOperation8setInputESt10shared_ptrINS_12ImageSamplerEEi(ptr noundef nonnull align 8 dereferenceable(120) %382, ptr noundef nonnull %51, i32 noundef 0)
          to label %.sink.split unwind label %385

385:                                              ; preds = %384
  %386 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt12__shared_ptrIN3imp12ImageSamplerELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %51) #6
  br label %443

387:                                              ; preds = %343
  %388 = getelementptr inbounds i8, ptr %0, i64 280
  %389 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp9CopyFrameELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %388) #6
  %390 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp8PipelineELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %60) #6
  invoke void @_ZN3imp8Pipeline14getOutputFrameEii(ptr dead_on_unwind nonnull writable sret(%"class.std::shared_ptr.103") align 8 %52, ptr noundef nonnull align 8 dereferenceable(240) %390, i32 noundef 8, i32 noundef 0)
          to label %391 unwind label %272

391:                                              ; preds = %387
  invoke void @_ZN3imp14FrameOperation8setInputESt10shared_ptrINS_12ImageSamplerEEi(ptr noundef nonnull align 8 dereferenceable(120) %389, ptr noundef nonnull %52, i32 noundef 0)
          to label %.sink.split unwind label %392

392:                                              ; preds = %391
  %393 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt12__shared_ptrIN3imp12ImageSamplerELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %52) #6
  br label %443

394:                                              ; preds = %343
  %395 = getelementptr inbounds i8, ptr %0, i64 280
  %396 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp9CopyFrameELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %395) #6
  %397 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp12RenderTargetELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %29) #6
  invoke void @_ZN3imp12RenderTarget3getEi(ptr dead_on_unwind nonnull writable sret(%"class.std::shared_ptr.103") align 8 %53, ptr noundef nonnull align 8 dereferenceable(99) %397, i32 noundef 2)
          to label %398 unwind label %272

398:                                              ; preds = %394
  invoke void @_ZN3imp14FrameOperation8setInputESt10shared_ptrINS_12ImageSamplerEEi(ptr noundef nonnull align 8 dereferenceable(120) %396, ptr noundef nonnull %53, i32 noundef 0)
          to label %.sink.split unwind label %399

399:                                              ; preds = %398
  %400 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt12__shared_ptrIN3imp12ImageSamplerELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %53) #6
  br label %443

401:                                              ; preds = %343
  %402 = getelementptr inbounds i8, ptr %0, i64 280
  %403 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp9CopyFrameELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %402) #6
  %404 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp12RenderTargetELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %29) #6
  invoke void @_ZN3imp12RenderTarget3getEi(ptr dead_on_unwind nonnull writable sret(%"class.std::shared_ptr.103") align 8 %54, ptr noundef nonnull align 8 dereferenceable(99) %404, i32 noundef 3)
          to label %405 unwind label %272

405:                                              ; preds = %401
  invoke void @_ZN3imp14FrameOperation8setInputESt10shared_ptrINS_12ImageSamplerEEi(ptr noundef nonnull align 8 dereferenceable(120) %403, ptr noundef nonnull %54, i32 noundef 0)
          to label %.sink.split unwind label %406

406:                                              ; preds = %405
  %407 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt12__shared_ptrIN3imp12ImageSamplerELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %54) #6
  br label %443

408:                                              ; preds = %343
  %409 = getelementptr inbounds i8, ptr %0, i64 280
  %410 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp9CopyFrameELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %409) #6
  %411 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp8PipelineELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %60) #6
  invoke void @_ZN3imp8Pipeline14getOutputFrameEii(ptr dead_on_unwind nonnull writable sret(%"class.std::shared_ptr.103") align 8 %55, ptr noundef nonnull align 8 dereferenceable(240) %411, i32 noundef 9, i32 noundef 0)
          to label %412 unwind label %272

412:                                              ; preds = %408
  invoke void @_ZN3imp14FrameOperation8setInputESt10shared_ptrINS_12ImageSamplerEEi(ptr noundef nonnull align 8 dereferenceable(120) %410, ptr noundef nonnull %55, i32 noundef 0)
          to label %.sink.split unwind label %413

413:                                              ; preds = %412
  %414 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt12__shared_ptrIN3imp12ImageSamplerELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %55) #6
  br label %443

.sink.split:                                      ; preds = %412, %405, %398, %391, %384, %377, %370, %363, %356, %349
  %.sink = phi ptr [ %46, %349 ], [ %47, %356 ], [ %48, %363 ], [ %49, %370 ], [ %50, %377 ], [ %51, %384 ], [ %52, %391 ], [ %53, %398 ], [ %54, %405 ], [ %55, %412 ]
  call void @_ZNSt12__shared_ptrIN3imp12ImageSamplerELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %.sink) #6
  br label %415

415:                                              ; preds = %.sink.split, %343
  %416 = call noundef i32 @_ZNK3imp13SceneRenderer14getOutputFrameEv(ptr noundef nonnull align 8 dereferenceable(137) %0)
  store i32 %416, ptr @_ZZN3imp10GlRenderer6renderERKSt10shared_ptrINS_5GraphEEE12s_lastOutput, align 4, !tbaa !69
  br label %417

417:                                              ; preds = %415, %340
  %418 = getelementptr inbounds i8, ptr %0, i64 168
  %419 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp13LightingModelELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %418) #6
  %420 = getelementptr inbounds i8, ptr %0, i64 128
  %421 = load float, ptr %420, align 8, !tbaa !70
  call void @_ZN3imp13LightingModel13setLightPowerEf(ptr noundef nonnull align 8 dereferenceable(208) %419, float noundef %421)
  %422 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp13LightingModelELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %418) #6
  %423 = getelementptr inbounds i8, ptr %0, i64 132
  %424 = load float, ptr %423, align 4, !tbaa !71
  call void @_ZN3imp13LightingModel10setAmbientEf(ptr noundef nonnull align 8 dereferenceable(208) %422, float noundef %424)
  %425 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp8PipelineELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %60) #6
  %426 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp11RenderQueueELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %12) #6
  %427 = getelementptr inbounds i8, ptr %426, i64 24
  %428 = load ptr, ptr %427, align 8, !tbaa !55
  %429 = getelementptr inbounds i8, ptr %0, i64 184
  %430 = getelementptr inbounds i8, ptr %0, i64 200
  invoke void @_ZN3imp8Pipeline7prepareEPKNS_6CameraEPKNS_9LightNodeERSt10shared_ptrINS_14CubeMapSamplerEESA_(ptr noundef nonnull align 8 dereferenceable(240) %425, ptr noundef %428, ptr noundef %.045, ptr noundef nonnull align 8 dereferenceable(16) %429, ptr noundef nonnull align 8 dereferenceable(16) %430)
          to label %431 unwind label %272

431:                                              ; preds = %417
  %432 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp8PipelineELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %60) #6
  invoke void @_ZN3imp8Pipeline3runEi(ptr noundef nonnull align 8 dereferenceable(240) %432, i32 noundef 7)
          to label %433 unwind label %272

433:                                              ; preds = %431
  %434 = call noundef i32 @_ZNK3imp13SceneRenderer14getOutputFrameEv(ptr noundef nonnull align 8 dereferenceable(137) %0)
  %.not62 = icmp eq i32 %434, 0
  br i1 %.not62, label %441, label %435

435:                                              ; preds = %433
  %436 = getelementptr inbounds i8, ptr %0, i64 280
  %437 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp9CopyFrameELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %436) #6
  %438 = load ptr, ptr %437, align 8, !tbaa !48
  %439 = getelementptr inbounds i8, ptr %438, i64 32
  %440 = load ptr, ptr %439, align 8
  invoke void %440(ptr noundef nonnull align 8 dereferenceable(168) %437, ptr noundef nonnull %0, i1 noundef zeroext false)
          to label %441 unwind label %272

441:                                              ; preds = %435, %433
  call void @_ZNSt12__shared_ptrIN3imp12RenderTargetELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %29) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %29) #6
  call void @_ZNSt12__shared_ptrIN3imp11RenderQueueELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %12) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %12) #6
  call void @_ZNSt12__shared_ptrIN3imp16AmbientOcclusionELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %6) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %6) #6
  call void @_ZNSt12__shared_ptrIN3imp13ShadowCastingELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %3) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %3) #6
  br label %442

442:                                              ; preds = %2, %441
  ret void

443:                                              ; preds = %413, %406, %399, %392, %385, %378, %371, %364, %357, %350, %329, %272
  %.pn67.pn.pn.pn = phi { ptr, i32 } [ %.pn67.pn.pn, %329 ], [ %273, %272 ], [ %407, %406 ], [ %400, %399 ], [ %393, %392 ], [ %386, %385 ], [ %379, %378 ], [ %372, %371 ], [ %365, %364 ], [ %358, %357 ], [ %351, %350 ], [ %414, %413 ]
  call void @_ZNSt12__shared_ptrIN3imp12RenderTargetELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %29) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %29) #6
  br label %444

444:                                              ; preds = %170, %174, %178, %184, %185, %206, %229, %230, %244, %443, %176, %172, %137, %106, %104, %102
  %.pn67.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %107, %106 ], [ %138, %137 ], [ %105, %104 ], [ %103, %102 ], [ %171, %170 ], [ %173, %172 ], [ %175, %174 ], [ %177, %176 ], [ %.pn67.pn.pn.pn, %443 ], [ %.pn55, %244 ], [ %179, %178 ], [ %231, %230 ], [ %.pn53, %229 ], [ %.pn50, %206 ], [ %186, %185 ], [ %.pn47, %184 ]
  call void @_ZNSt12__shared_ptrIN3imp11RenderQueueELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %12) #6
  br label %445

445:                                              ; preds = %444, %100
  %.pn67.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn67.pn.pn.pn.pn.pn.pn.pn.pn.pn, %444 ], [ %101, %100 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %12) #6
  br label %446

446:                                              ; preds = %445, %91, %85
  %.pn67.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn67.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn, %445 ], [ %.pn, %91 ], [ %86, %85 ]
  call void @_ZNSt12__shared_ptrIN3imp16AmbientOcclusionELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %6) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %6) #6
  call void @_ZNSt12__shared_ptrIN3imp13ShadowCastingELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %3) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %3) #6
  resume { ptr, i32 } %.pn67.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn
}

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp13ShadowCastingELN9__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 @_ZN3imp13ShadowCasting14setSampleCountEi(ptr noundef nonnull align 8 dereferenceable(204), i32 noundef) local_unnamed_addr #1 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp16AmbientOcclusionELN9__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 @_ZN3imp16AmbientOcclusion14setSampleCountEi(ptr noundef nonnull align 8 dereferenceable(292), i32 noundef) local_unnamed_addr #1 align 2

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

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

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

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

declare void @glEnable(i32 noundef) local_unnamed_addr #3

declare void @glDisable(i32 noundef) local_unnamed_addr #3

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

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

declare noundef zeroext i1 @_ZNK3imp13SceneRenderer16isFeatureEnabledENS0_7FeatureE(ptr noundef nonnull align 8 dereferenceable(137), i32 noundef) local_unnamed_addr #3

declare void @_ZN3imp15RenderToCubeMap6renderERSt10shared_ptrINS_11RenderQueueEERKNS_4Vec3ENS_13SceneRenderer11RenderFrameES1_INS_14ReflexionModelEE(ptr noundef nonnull align 8 dereferenceable(812), ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(36), i32 noundef, ptr noundef) local_unnamed_addr #3

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp11FrameBufferELN9__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 noundef i32 @_ZNK3imp11FrameBuffer10getVideoIDEv(ptr noundef nonnull align 8 dereferenceable(144)) local_unnamed_addr #1 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef zeroext i1 @_Z12GLcheckErrorRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPKci(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef, i32 noundef) local_unnamed_addr #5

declare void @glDrawBuffer(i32 noundef) local_unnamed_addr #3

declare void @glReadBuffer(i32 noundef) local_unnamed_addr #3

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

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

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

declare void @_ZN3imp8Pipeline9setActiveEib(ptr noundef nonnull align 8 dereferenceable(240), i32 noundef, i1 noundef zeroext) local_unnamed_addr #3

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

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

declare void @_ZN3imp8Pipeline7prepareEPKNS_6CameraEPKNS_9LightNodeERSt10shared_ptrINS_14CubeMapSamplerEESA_(ptr noundef nonnull align 8 dereferenceable(240), ptr noundef, ptr noundef, ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #3

declare void @_ZN3imp8Pipeline3runEi(ptr noundef nonnull align 8 dereferenceable(240), i32 noundef) local_unnamed_addr #3

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt12__shared_ptrIN3imp14CubeMapSamplerELN9__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 @_ZNSt12__shared_ptrIN3imp14ReflexionModelELN9__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 @_ZNSt12__shared_ptrIN3imp12RenderTargetELN9__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 @_ZNSt12__shared_ptrIN3imp5StateELN9__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 @_ZNSt12__shared_ptrIN3imp11RenderQueueELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16)) 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 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !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 = !{!7, !23, i64 120}
!51 = !{!7, !23, i64 124}
!52 = !{!11, !11, i64 0}
!53 = !{!7, !23, i64 116}
!54 = !{!23, !23, i64 0}
!55 = !{!56, !11, i64 24}
!56 = !{!"_ZTSN3imp11RenderQueueE", !8, i64 0, !11, i64 24, !57, i64 32, !61, i64 56, !61, i64 88}
!57 = !{!"_ZTSSt6vectorIPN3imp9LightNodeESaIS2_EE", !58, i64 0}
!58 = !{!"_ZTSSt12_Vector_baseIPN3imp9LightNodeESaIS2_EE", !59, i64 0}
!59 = !{!"_ZTSNSt12_Vector_baseIPN3imp9LightNodeESaIS2_EE12_Vector_implE", !60, i64 0}
!60 = !{!"_ZTSNSt12_Vector_baseIPN3imp9LightNodeESaIS2_EE17_Vector_impl_dataE", !11, i64 0, !11, i64 8, !11, i64 16}
!61 = !{!"_ZTSN3imp8StateBinE", !62, i64 0, !23, i64 24}
!62 = !{!"_ZTSSt6vectorIN3imp11RenderStateESaIS1_EE", !63, i64 0}
!63 = !{!"_ZTSSt12_Vector_baseIN3imp11RenderStateESaIS1_EE", !64, i64 0}
!64 = !{!"_ZTSNSt12_Vector_baseIN3imp11RenderStateESaIS1_EE12_Vector_implE", !65, i64 0}
!65 = !{!"_ZTSNSt12_Vector_baseIN3imp11RenderStateESaIS1_EE17_Vector_impl_dataE", !11, i64 0, !11, i64 8, !11, i64 16}
!66 = !{!7, !23, i64 112}
!67 = distinct !{!67, !68}
!68 = !{!"llvm.loop.mustprogress"}
!69 = !{!20, !20, i64 0}
!70 = !{!7, !24, i64 128}
!71 = !{!7, !24, i64 132}


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