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

; 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.15" = type { %"class.std::__shared_ptr.16" }
%"class.std::__shared_ptr.16" = type { ptr, %"class.std::__shared_count" }
%"class.std::__shared_count" = type { ptr }
%"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.33" = type { %"class.std::__shared_ptr.34" }
%"class.std::__shared_ptr.34" = type { ptr, %"class.std::__shared_count" }
%"class.std::shared_ptr.163" = type { %"class.std::__shared_ptr.164" }
%"class.std::__shared_ptr.164" = 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.117" = type { %"class.std::__shared_ptr.118" }
%"class.std::__shared_ptr.118" = type { ptr, %"class.std::__shared_count" }
%"class.std::shared_ptr.30" = type { %"class.std::__shared_ptr.31" }
%"class.std::__shared_ptr.31" = type { ptr, %"class.std::__shared_count" }
%"class.std::shared_ptr.12" = type { %"class.std::__shared_ptr.13" }
%"class.std::__shared_ptr.13" = type { ptr, %"class.std::__shared_count" }
%"class.imp::Vec3" = type { %"class.imp::Vec.base", [4 x i8] }
%"class.imp::Vec.base" = type <{ %"class.imp::Object", [3 x float] }>
%"class.imp::Object" = type { ptr, %"class.std::shared_ptr" }
%"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.103" = type { %"class.std::__shared_ptr.104" }
%"class.std::__shared_ptr.104" = type { ptr, %"class.std::__shared_count" }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<std::shared_ptr<imp::ImageSampler>, std::allocator<std::shared_ptr<imp::ImageSampler>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::shared_ptr<imp::ImageSampler>, std::allocator<std::shared_ptr<imp::ImageSampler>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::shared_ptr<imp::ImageSampler>, std::allocator<std::shared_ptr<imp::ImageSampler>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::shared_ptr<imp::ImageSampler>, std::allocator<std::shared_ptr<imp::ImageSampler>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::initializer_list" = type { ptr, i64 }
%"class.std::allocator.53" = type { i8 }
%"class.imp::Vec4" = type { %"class.imp::Vec" }
%"class.imp::Vec" = type { %"class.imp::Object", [4 x float] }
%"class.std::shared_ptr.27" = type { %"class.std::__shared_ptr.28" }
%"class.std::__shared_ptr.28" = type { ptr, %"class.std::__shared_count" }
%"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::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.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 }

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

declare i32 @__gxx_personality_v0(...)

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt10shared_ptrIN3imp12RenderTargetEEC2Ev(ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #1 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 uwtable
declare dso_local void @_ZN3imp15RenderToCubeMap6createIJPNS_10GlRendererEEEESt10shared_ptrIS0_EDpOT_(ptr dead_on_unwind noalias writable sret(%"class.std::shared_ptr.15") align 8, ptr noundef nonnull align 8 dereferenceable(8)) #2 align 2

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

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

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

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

declare void @_ZN3imp12RenderTarget13setClearColorEiRKNS_4Vec4E(ptr noundef nonnull align 8 dereferenceable(99), i32 noundef, ptr noundef nonnull align 8 dereferenceable(40)) #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 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

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

; 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 noundef zeroext i1 @_ZNKSt12__shared_ptrIN3imp12ImageSamplerELN9__gnu_cxx12_Lock_policyE2EEcvbEv(ptr noundef nonnull align 8 dereferenceable(16)) #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 uwtable
define dso_local void @_ZN3imp10GlRenderer20applyRenderToSamplerESt10shared_ptrINS_11RenderQueueEE(ptr noundef nonnull align 8 dereferenceable(392) %0, ptr noundef %1) #2 align 2 personality ptr @__gxx_personality_v0 {
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca i32, align 4
  %6 = alloca %"class.std::shared_ptr.163", align 8
  %7 = alloca %"class.std::shared_ptr", align 8
  %8 = alloca %"class.std::shared_ptr.117", align 8
  %9 = alloca ptr, align 8
  %10 = alloca i32, align 4
  %11 = alloca %"class.std::shared_ptr.30", align 8
  %12 = alloca i1, align 1
  %13 = alloca i1, align 1
  %14 = alloca %"class.std::shared_ptr.30", align 8
  %15 = alloca %"class.std::shared_ptr.12", align 8
  %16 = alloca %"class.std::shared_ptr.15", align 8
  %17 = alloca %"class.std::shared_ptr", align 8
  %18 = alloca %"class.std::shared_ptr.15", align 8
  %19 = alloca %"class.std::shared_ptr", align 8
  %20 = alloca %"class.std::shared_ptr.15", align 8
  %21 = alloca ptr, align 8
  %22 = alloca %"class.std::shared_ptr.12", align 8
  %23 = alloca %"class.std::shared_ptr", align 8
  %24 = alloca %"class.imp::Vec3", align 8
  %25 = alloca %"class.std::shared_ptr.18", align 8
  %26 = alloca %"class.std::shared_ptr.103", align 8
  %27 = alloca %"class.std::shared_ptr.0", align 8
  %28 = alloca %"class.std::shared_ptr", align 8
  %29 = alloca %"class.std::shared_ptr.0", align 8
  %30 = alloca %"class.std::shared_ptr", align 8
  %31 = alloca %"class.std::shared_ptr.0", align 8
  %32 = alloca %"class.std::vector", align 8
  %33 = alloca %"class.std::initializer_list", align 8
  %34 = alloca [1 x %"class.std::shared_ptr.103"], align 8
  %35 = alloca ptr, align 8
  %36 = alloca %"class.std::allocator.53", align 1
  %37 = alloca %"class.imp::Vec4", align 8
  %38 = alloca %"class.std::shared_ptr", align 8
  %39 = alloca %"class.std::shared_ptr.33", align 8
  %40 = alloca %"class.std::shared_ptr.33", align 8
  %41 = alloca %"class.std::shared_ptr.33", align 8
  %42 = alloca %"class.std::shared_ptr.27", align 8
  store ptr %0, ptr %3, align 8, !tbaa !5
  store ptr %1, ptr %4, align 8, !tbaa !5
  %43 = load ptr, ptr %3, align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr %5) #4
  store i32 0, ptr %5, align 4, !tbaa !9
  br label %44

44:                                               ; preds = %323, %2
  %45 = load i32, ptr %5, align 4, !tbaa !9
  %46 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp11RenderQueueELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %1) #4
  %47 = getelementptr inbounds %"class.imp::RenderQueue", ptr %46, i32 0, i32 3
  %48 = call noundef i32 @_ZN3imp8StateBin4sizeEv(ptr noundef nonnull align 8 dereferenceable(28) %47)
  %49 = icmp slt i32 %45, %48
  br i1 %49, label %51, label %50

50:                                               ; preds = %44
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #4
  br label %328

51:                                               ; preds = %44
  call void @llvm.lifetime.start.p0(i64 16, ptr %6) #4
  call void @llvm.lifetime.start.p0(i64 16, ptr %8) #4
  %52 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp11RenderQueueELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %1) #4
  %53 = getelementptr inbounds %"class.imp::RenderQueue", ptr %52, i32 0, i32 3
  %54 = load i32, ptr %5, align 4, !tbaa !9
  call void @_ZN3imp8StateBin6nodeAtEi(ptr dead_on_unwind writable sret(%"class.std::shared_ptr.117") align 8 %8, ptr noundef nonnull align 8 dereferenceable(28) %53, i32 noundef %54)
  call void @_ZNSt10shared_ptrIN3imp6ObjectEEC2INS0_4NodeEvEEOS_IT_E(ptr noundef nonnull align 8 dereferenceable(16) %7, ptr noundef nonnull align 8 dereferenceable(16) %8) #4
  invoke void @_ZN3imp19RenderToSamplerNode6dMorphESt10shared_ptrINS_6ObjectEE(ptr dead_on_unwind writable sret(%"class.std::shared_ptr.163") align 8 %6, ptr noundef %7)
          to label %55 unwind label %90

55:                                               ; preds = %51
  call void @_ZNSt12__shared_ptrIN3imp6ObjectELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %7) #4
  call void @_ZNSt12__shared_ptrIN3imp4NodeELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %8) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %8) #4
  %56 = call noundef zeroext i1 @_ZNKSt12__shared_ptrIN3imp19RenderToSamplerNodeELN9__gnu_cxx12_Lock_policyE2EEcvbEv(ptr noundef nonnull align 8 dereferenceable(16) %6) #4
  store i1 false, ptr %12, align 1
  store i1 false, ptr %13, align 1
  br i1 %56, label %57, label %67

57:                                               ; preds = %55
  %58 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp19RenderToSamplerNodeELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %6) #4
  %59 = invoke noundef zeroext i1 @_ZNK3imp19RenderToSamplerNode5readyEv(ptr noundef nonnull align 8 dereferenceable(593) %58)
          to label %60 unwind label %94

60:                                               ; preds = %57
  %61 = zext i1 %59 to i32
  %62 = icmp eq i32 %61, 0
  br i1 %62, label %63, label %67

63:                                               ; preds = %60
  call void @llvm.lifetime.start.p0(i64 16, ptr %11) #4
  store i1 true, ptr %12, align 1
  %64 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp19RenderToSamplerNodeELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %6) #4
  invoke void @_ZN3imp19RenderToSamplerNode5sceneEv(ptr dead_on_unwind writable sret(%"class.std::shared_ptr.30") align 8 %11, ptr noundef nonnull align 8 dereferenceable(593) %64)
          to label %65 unwind label %98

65:                                               ; preds = %63
  store i1 true, ptr %13, align 1
  %66 = call noundef zeroext i1 @_ZNKSt12__shared_ptrIN3imp5GraphELN9__gnu_cxx12_Lock_policyE2EEcvbEv(ptr noundef nonnull align 8 dereferenceable(16) %11) #4
  br label %67

67:                                               ; preds = %65, %60, %55
  %68 = phi i1 [ false, %60 ], [ false, %55 ], [ %66, %65 ]
  %69 = load i1, ptr %13, align 1
  br i1 %69, label %70, label %71

70:                                               ; preds = %67
  call void @_ZNSt12__shared_ptrIN3imp5GraphELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %11) #4
  br label %71

71:                                               ; preds = %70, %67
  %72 = load i1, ptr %12, align 1
  br i1 %72, label %73, label %74

73:                                               ; preds = %71
  call void @llvm.lifetime.end.p0(i64 16, ptr %11) #4
  br label %74

74:                                               ; preds = %73, %71
  br i1 %68, label %75, label %322

75:                                               ; preds = %74
  call void @llvm.lifetime.start.p0(i64 16, ptr %14) #4
  %76 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp19RenderToSamplerNodeELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %6) #4
  invoke void @_ZN3imp19RenderToSamplerNode5sceneEv(ptr dead_on_unwind writable sret(%"class.std::shared_ptr.30") align 8 %14, ptr noundef nonnull align 8 dereferenceable(593) %76)
          to label %77 unwind label %105

77:                                               ; preds = %75
  call void @llvm.lifetime.start.p0(i64 16, ptr %15) #4
  %78 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp19RenderToSamplerNodeELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %6) #4
  invoke void @_ZN3imp19RenderToSamplerNode7cubemapEv(ptr dead_on_unwind writable sret(%"class.std::shared_ptr.12") align 8 %15, ptr noundef nonnull align 8 dereferenceable(593) %78)
          to label %79 unwind label %109

79:                                               ; preds = %77
  %80 = call noundef zeroext i1 @_ZNKSt12__shared_ptrIN3imp14CubeMapSamplerELN9__gnu_cxx12_Lock_policyE2EEcvbEv(ptr noundef nonnull align 8 dereferenceable(16) %15) #4
  call void @_ZNSt12__shared_ptrIN3imp14CubeMapSamplerELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %15) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %15) #4
  br i1 %80, label %81, label %167

81:                                               ; preds = %79
  call void @llvm.lifetime.start.p0(i64 16, ptr %16) #4
  call void @_ZNSt10shared_ptrIN3imp15RenderToCubeMapEEC2Ev(ptr noundef nonnull align 8 dereferenceable(16) %16) #4
  call void @llvm.lifetime.start.p0(i64 16, ptr %17) #4
  %82 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp19RenderToSamplerNodeELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %6) #4
  invoke void @_ZN3imp6Object13getRenderDataEv(ptr dead_on_unwind writable sret(%"class.std::shared_ptr") align 8 %17, ptr noundef nonnull align 8 dereferenceable(24) %82)
          to label %83 unwind label %113

83:                                               ; preds = %81
  %84 = call noundef zeroext i1 @_ZNKSt12__shared_ptrIN3imp6ObjectELN9__gnu_cxx12_Lock_policyE2EEcvbEv(ptr noundef nonnull align 8 dereferenceable(16) %17) #4
  call void @_ZNSt12__shared_ptrIN3imp6ObjectELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %17) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %17) #4
  br i1 %84, label %85, label %126

85:                                               ; preds = %83
  call void @llvm.lifetime.start.p0(i64 16, ptr %18) #4
  %86 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp19RenderToSamplerNodeELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %6) #4
  invoke void @_ZN3imp6Object13getRenderDataEv(ptr dead_on_unwind writable sret(%"class.std::shared_ptr") align 8 %19, ptr noundef nonnull align 8 dereferenceable(24) %86)
          to label %87 unwind label %117

87:                                               ; preds = %85
  invoke void @_ZN3imp15RenderToCubeMap6dMorphESt10shared_ptrINS_6ObjectEE(ptr dead_on_unwind writable sret(%"class.std::shared_ptr.15") align 8 %18, ptr noundef %19)
          to label %88 unwind label %121

88:                                               ; preds = %87
  %89 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt10shared_ptrIN3imp15RenderToCubeMapEEaSEOS2_(ptr noundef nonnull align 8 dereferenceable(16) %16, ptr noundef nonnull align 8 dereferenceable(16) %18) #4
  call void @_ZNSt12__shared_ptrIN3imp15RenderToCubeMapELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %18) #4
  call void @_ZNSt12__shared_ptrIN3imp6ObjectELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %19) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %18) #4
  br label %153

90:                                               ; preds = %51
  %91 = landingpad { ptr, i32 }
          cleanup
  %92 = extractvalue { ptr, i32 } %91, 0
  store ptr %92, ptr %9, align 8
  %93 = extractvalue { ptr, i32 } %91, 1
  store i32 %93, ptr %10, align 4
  call void @_ZNSt12__shared_ptrIN3imp6ObjectELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %7) #4
  call void @_ZNSt12__shared_ptrIN3imp4NodeELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %8) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %8) #4
  br label %327

94:                                               ; preds = %57
  %95 = landingpad { ptr, i32 }
          cleanup
  %96 = extractvalue { ptr, i32 } %95, 0
  store ptr %96, ptr %9, align 8
  %97 = extractvalue { ptr, i32 } %95, 1
  store i32 %97, ptr %10, align 4
  br label %326

98:                                               ; preds = %63
  %99 = landingpad { ptr, i32 }
          cleanup
  %100 = extractvalue { ptr, i32 } %99, 0
  store ptr %100, ptr %9, align 8
  %101 = extractvalue { ptr, i32 } %99, 1
  store i32 %101, ptr %10, align 4
  %102 = load i1, ptr %12, align 1
  br i1 %102, label %103, label %104

103:                                              ; preds = %98
  call void @llvm.lifetime.end.p0(i64 16, ptr %11) #4
  br label %104

104:                                              ; preds = %103, %98
  br label %326

105:                                              ; preds = %75
  %106 = landingpad { ptr, i32 }
          cleanup
  %107 = extractvalue { ptr, i32 } %106, 0
  store ptr %107, ptr %9, align 8
  %108 = extractvalue { ptr, i32 } %106, 1
  store i32 %108, ptr %10, align 4
  br label %321

109:                                              ; preds = %77
  %110 = landingpad { ptr, i32 }
          cleanup
  %111 = extractvalue { ptr, i32 } %110, 0
  store ptr %111, ptr %9, align 8
  %112 = extractvalue { ptr, i32 } %110, 1
  store i32 %112, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %15) #4
  br label %320

113:                                              ; preds = %81
  %114 = landingpad { ptr, i32 }
          cleanup
  %115 = extractvalue { ptr, i32 } %114, 0
  store ptr %115, ptr %9, align 8
  %116 = extractvalue { ptr, i32 } %114, 1
  store i32 %116, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %17) #4
  br label %166

117:                                              ; preds = %85
  %118 = landingpad { ptr, i32 }
          cleanup
  %119 = extractvalue { ptr, i32 } %118, 0
  store ptr %119, ptr %9, align 8
  %120 = extractvalue { ptr, i32 } %118, 1
  store i32 %120, ptr %10, align 4
  br label %125

121:                                              ; preds = %87
  %122 = landingpad { ptr, i32 }
          cleanup
  %123 = extractvalue { ptr, i32 } %122, 0
  store ptr %123, ptr %9, align 8
  %124 = extractvalue { ptr, i32 } %122, 1
  store i32 %124, ptr %10, align 4
  call void @_ZNSt12__shared_ptrIN3imp6ObjectELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %19) #4
  br label %125

125:                                              ; preds = %121, %117
  call void @llvm.lifetime.end.p0(i64 16, ptr %18) #4
  br label %166

126:                                              ; preds = %83
  call void @llvm.lifetime.start.p0(i64 16, ptr %20) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #4
  store ptr %43, ptr %21, align 8, !tbaa !5
  invoke void @_ZN3imp15RenderToCubeMap6createIJPNS_10GlRendererEEEESt10shared_ptrIS0_EDpOT_(ptr dead_on_unwind writable sret(%"class.std::shared_ptr.15") align 8 %20, ptr noundef nonnull align 8 dereferenceable(8) %21)
          to label %127 unwind label %137

127:                                              ; preds = %126
  %128 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt10shared_ptrIN3imp15RenderToCubeMapEEaSEOS2_(ptr noundef nonnull align 8 dereferenceable(16) %16, ptr noundef nonnull align 8 dereferenceable(16) %20) #4
  call void @_ZNSt12__shared_ptrIN3imp15RenderToCubeMapELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %20) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %20) #4
  %129 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp15RenderToCubeMapELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %16) #4
  %130 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp19RenderToSamplerNodeELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %6) #4
  invoke void @_ZN3imp19RenderToSamplerNode7cubemapEv(ptr dead_on_unwind writable sret(%"class.std::shared_ptr.12") align 8 %22, ptr noundef nonnull align 8 dereferenceable(593) %130)
          to label %131 unwind label %141

131:                                              ; preds = %127
  invoke void @_ZN3imp15RenderToCubeMap10setCubeMapESt10shared_ptrINS_14CubeMapSamplerEE(ptr noundef nonnull align 8 dereferenceable(812) %129, ptr noundef %22)
          to label %132 unwind label %145

132:                                              ; preds = %131
  call void @_ZNSt12__shared_ptrIN3imp14CubeMapSamplerELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %22) #4
  %133 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp15RenderToCubeMapELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %16) #4
  invoke void @_ZN3imp15RenderToCubeMap13setResolutionEf(ptr noundef nonnull align 8 dereferenceable(812) %133, float noundef 5.120000e+02)
          to label %134 unwind label %141

134:                                              ; preds = %132
  %135 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp19RenderToSamplerNodeELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %6) #4
  call void @_ZNSt10shared_ptrIN3imp6ObjectEEC2INS0_15RenderToCubeMapEvEERKS_IT_E(ptr noundef nonnull align 8 dereferenceable(16) %23, ptr noundef nonnull align 8 dereferenceable(16) %16) #4
  invoke void @_ZN3imp6Object13setRenderDataESt10shared_ptrIS0_E(ptr noundef nonnull align 8 dereferenceable(24) %135, ptr noundef %23)
          to label %136 unwind label %149

136:                                              ; preds = %134
  call void @_ZNSt12__shared_ptrIN3imp6ObjectELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %23) #4
  br label %153

137:                                              ; preds = %126
  %138 = landingpad { ptr, i32 }
          cleanup
  %139 = extractvalue { ptr, i32 } %138, 0
  store ptr %139, ptr %9, align 8
  %140 = extractvalue { ptr, i32 } %138, 1
  store i32 %140, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %20) #4
  br label %166

141:                                              ; preds = %132, %127
  %142 = landingpad { ptr, i32 }
          cleanup
  %143 = extractvalue { ptr, i32 } %142, 0
  store ptr %143, ptr %9, align 8
  %144 = extractvalue { ptr, i32 } %142, 1
  store i32 %144, ptr %10, align 4
  br label %166

145:                                              ; preds = %131
  %146 = landingpad { ptr, i32 }
          cleanup
  %147 = extractvalue { ptr, i32 } %146, 0
  store ptr %147, ptr %9, align 8
  %148 = extractvalue { ptr, i32 } %146, 1
  store i32 %148, ptr %10, align 4
  call void @_ZNSt12__shared_ptrIN3imp14CubeMapSamplerELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %22) #4
  br label %166

149:                                              ; preds = %134
  %150 = landingpad { ptr, i32 }
          cleanup
  %151 = extractvalue { ptr, i32 } %150, 0
  store ptr %151, ptr %9, align 8
  %152 = extractvalue { ptr, i32 } %150, 1
  store i32 %152, ptr %10, align 4
  call void @_ZNSt12__shared_ptrIN3imp6ObjectELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %23) #4
  br label %166

153:                                              ; preds = %136, %88
  %154 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp15RenderToCubeMapELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %16) #4
  call void @llvm.lifetime.start.p0(i64 40, ptr %24) #4
  invoke void @_ZN3imp4Vec3C2Ef(ptr noundef nonnull align 8 dereferenceable(36) %24, float noundef 0.000000e+00)
          to label %155 unwind label %157

155:                                              ; preds = %153
  call void @_ZNSt10shared_ptrIN3imp14ReflexionModelEEC2EDn(ptr noundef nonnull align 8 dereferenceable(16) %25, ptr null) #4
  invoke void @_ZN3imp15RenderToCubeMap6renderERKSt10shared_ptrINS_5GraphEERKNS_4Vec3ENS_13SceneRenderer11RenderFrameES1_INS_14ReflexionModelEE(ptr noundef nonnull align 8 dereferenceable(812) %154, ptr noundef nonnull align 8 dereferenceable(16) %14, ptr noundef nonnull align 8 dereferenceable(36) %24, i32 noundef 0, ptr noundef %25)
          to label %156 unwind label %161

156:                                              ; preds = %155
  call void @_ZNSt12__shared_ptrIN3imp14ReflexionModelELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %25) #4
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(36) %24) #4
  call void @llvm.lifetime.end.p0(i64 40, ptr %24) #4
  call void @_ZNSt12__shared_ptrIN3imp15RenderToCubeMapELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %16) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %16) #4
  br label %313

157:                                              ; preds = %153
  %158 = landingpad { ptr, i32 }
          cleanup
  %159 = extractvalue { ptr, i32 } %158, 0
  store ptr %159, ptr %9, align 8
  %160 = extractvalue { ptr, i32 } %158, 1
  store i32 %160, ptr %10, align 4
  br label %165

161:                                              ; preds = %155
  %162 = landingpad { ptr, i32 }
          cleanup
  %163 = extractvalue { ptr, i32 } %162, 0
  store ptr %163, ptr %9, align 8
  %164 = extractvalue { ptr, i32 } %162, 1
  store i32 %164, ptr %10, align 4
  call void @_ZNSt12__shared_ptrIN3imp14ReflexionModelELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %25) #4
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(36) %24) #4
  br label %165

165:                                              ; preds = %161, %157
  call void @llvm.lifetime.end.p0(i64 40, ptr %24) #4
  br label %166

166:                                              ; preds = %165, %149, %145, %141, %137, %125, %113
  call void @_ZNSt12__shared_ptrIN3imp15RenderToCubeMapELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %16) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %16) #4
  br label %320

167:                                              ; preds = %79
  call void @llvm.lifetime.start.p0(i64 16, ptr %26) #4
  %168 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp19RenderToSamplerNodeELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %6) #4
  invoke void @_ZN3imp19RenderToSamplerNode7textureEv(ptr dead_on_unwind writable sret(%"class.std::shared_ptr.103") align 8 %26, ptr noundef nonnull align 8 dereferenceable(593) %168)
          to label %169 unwind label %180

169:                                              ; preds = %167
  %170 = call noundef zeroext i1 @_ZNKSt12__shared_ptrIN3imp12ImageSamplerELN9__gnu_cxx12_Lock_policyE2EEcvbEv(ptr noundef nonnull align 8 dereferenceable(16) %26) #4
  call void @_ZNSt12__shared_ptrIN3imp12ImageSamplerELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %26) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %26) #4
  br i1 %170, label %171, label %312

171:                                              ; preds = %169
  call void @llvm.lifetime.start.p0(i64 16, ptr %27) #4
  call void @_ZNSt10shared_ptrIN3imp12RenderTargetEEC2Ev(ptr noundef nonnull align 8 dereferenceable(16) %27) #4
  call void @llvm.lifetime.start.p0(i64 16, ptr %28) #4
  %172 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp19RenderToSamplerNodeELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %6) #4
  invoke void @_ZN3imp6Object13getRenderDataEv(ptr dead_on_unwind writable sret(%"class.std::shared_ptr") align 8 %28, ptr noundef nonnull align 8 dereferenceable(24) %172)
          to label %173 unwind label %184

173:                                              ; preds = %171
  %174 = call noundef zeroext i1 @_ZNKSt12__shared_ptrIN3imp6ObjectELN9__gnu_cxx12_Lock_policyE2EEcvbEv(ptr noundef nonnull align 8 dereferenceable(16) %28) #4
  call void @_ZNSt12__shared_ptrIN3imp6ObjectELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %28) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %28) #4
  br i1 %174, label %175, label %197

175:                                              ; preds = %173
  call void @llvm.lifetime.start.p0(i64 16, ptr %29) #4
  %176 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp19RenderToSamplerNodeELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %6) #4
  invoke void @_ZN3imp6Object13getRenderDataEv(ptr dead_on_unwind writable sret(%"class.std::shared_ptr") align 8 %30, ptr noundef nonnull align 8 dereferenceable(24) %176)
          to label %177 unwind label %188

177:                                              ; preds = %175
  invoke void @_ZN3imp12RenderTarget6dMorphESt10shared_ptrINS_6ObjectEE(ptr dead_on_unwind writable sret(%"class.std::shared_ptr.0") align 8 %29, ptr noundef %30)
          to label %178 unwind label %192

178:                                              ; preds = %177
  %179 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt10shared_ptrIN3imp12RenderTargetEEaSEOS2_(ptr noundef nonnull align 8 dereferenceable(16) %27, ptr noundef nonnull align 8 dereferenceable(16) %29) #4
  call void @_ZNSt12__shared_ptrIN3imp12RenderTargetELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %29) #4
  call void @_ZNSt12__shared_ptrIN3imp6ObjectELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %30) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %29) #4
  br label %268

180:                                              ; preds = %167
  %181 = landingpad { ptr, i32 }
          cleanup
  %182 = extractvalue { ptr, i32 } %181, 0
  store ptr %182, ptr %9, align 8
  %183 = extractvalue { ptr, i32 } %181, 1
  store i32 %183, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %26) #4
  br label %320

184:                                              ; preds = %171
  %185 = landingpad { ptr, i32 }
          cleanup
  %186 = extractvalue { ptr, i32 } %185, 0
  store ptr %186, ptr %9, align 8
  %187 = extractvalue { ptr, i32 } %185, 1
  store i32 %187, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %28) #4
  br label %311

188:                                              ; preds = %175
  %189 = landingpad { ptr, i32 }
          cleanup
  %190 = extractvalue { ptr, i32 } %189, 0
  store ptr %190, ptr %9, align 8
  %191 = extractvalue { ptr, i32 } %189, 1
  store i32 %191, ptr %10, align 4
  br label %196

192:                                              ; preds = %177
  %193 = landingpad { ptr, i32 }
          cleanup
  %194 = extractvalue { ptr, i32 } %193, 0
  store ptr %194, ptr %9, align 8
  %195 = extractvalue { ptr, i32 } %193, 1
  store i32 %195, ptr %10, align 4
  call void @_ZNSt12__shared_ptrIN3imp6ObjectELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %30) #4
  br label %196

196:                                              ; preds = %192, %188
  call void @llvm.lifetime.end.p0(i64 16, ptr %29) #4
  br label %311

197:                                              ; preds = %173
  call void @llvm.lifetime.start.p0(i64 16, ptr %31) #4
  invoke void @_ZN3imp12RenderTarget6createIJEEESt10shared_ptrIS0_EDpOT_(ptr dead_on_unwind writable sret(%"class.std::shared_ptr.0") align 8 %31)
          to label %198 unwind label %223

198:                                              ; preds = %197
  %199 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt10shared_ptrIN3imp12RenderTargetEEaSEOS2_(ptr noundef nonnull align 8 dereferenceable(16) %27, ptr noundef nonnull align 8 dereferenceable(16) %31) #4
  call void @_ZNSt12__shared_ptrIN3imp12RenderTargetELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %31) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %31) #4
  %200 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp12RenderTargetELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %27) #4
  call void @llvm.lifetime.start.p0(i64 24, ptr %32) #4
  call void @llvm.lifetime.start.p0(i64 16, ptr %34) #4
  store ptr %34, ptr %35, align 8
  %201 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp19RenderToSamplerNodeELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %6) #4
  invoke void @_ZN3imp19RenderToSamplerNode7textureEv(ptr dead_on_unwind writable sret(%"class.std::shared_ptr.103") align 8 %34, ptr noundef nonnull align 8 dereferenceable(593) %201)
          to label %202 unwind label %227

202:                                              ; preds = %198
  %203 = getelementptr inbounds %"class.std::initializer_list", ptr %33, i32 0, i32 0
  store ptr %34, ptr %203, align 8, !tbaa !11
  %204 = getelementptr inbounds %"class.std::initializer_list", ptr %33, i32 0, i32 1
  store i64 1, ptr %204, align 8, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 1, ptr %36) #4
  call void @_ZNSaISt10shared_ptrIN3imp12ImageSamplerEEEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %36) #4
  %205 = getelementptr inbounds { ptr, i64 }, ptr %33, i32 0, i32 0
  %206 = load ptr, ptr %205, align 8
  %207 = getelementptr inbounds { ptr, i64 }, ptr %33, i32 0, i32 1
  %208 = load i64, ptr %207, align 8
  invoke void @_ZNSt6vectorISt10shared_ptrIN3imp12ImageSamplerEESaIS3_EEC2ESt16initializer_listIS3_ERKS4_(ptr noundef nonnull align 8 dereferenceable(24) %32, ptr %206, i64 %208, ptr noundef nonnull align 1 dereferenceable(1) %36)
          to label %209 unwind label %238

209:                                              ; preds = %202
  invoke void @_ZN3imp12RenderTarget5buildERKSt6vectorISt10shared_ptrINS_12ImageSamplerEESaIS4_EEb(ptr noundef nonnull align 8 dereferenceable(99) %200, ptr noundef nonnull align 8 dereferenceable(24) %32, i1 noundef zeroext true)
          to label %210 unwind label %242

210:                                              ; preds = %209
  call void @_ZNSt6vectorISt10shared_ptrIN3imp12ImageSamplerEESaIS3_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %32) #4
  call void @_ZNSt15__new_allocatorISt10shared_ptrIN3imp12ImageSamplerEEED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %36) #4
  call void @llvm.lifetime.end.p0(i64 1, ptr %36) #4
  %211 = getelementptr inbounds [1 x %"class.std::shared_ptr.103"], ptr %34, i32 0, i32 0
  %212 = getelementptr inbounds %"class.std::shared_ptr.103", ptr %211, i64 1
  br label %213

213:                                              ; preds = %213, %210
  %214 = phi ptr [ %212, %210 ], [ %215, %213 ]
  %215 = getelementptr inbounds %"class.std::shared_ptr.103", ptr %214, i64 -1
  call void @_ZNSt12__shared_ptrIN3imp12ImageSamplerELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %215) #4
  %216 = icmp eq ptr %215, %211
  br i1 %216, label %217, label %213

217:                                              ; preds = %213
  call void @llvm.lifetime.end.p0(i64 16, ptr %34) #4
  call void @llvm.lifetime.end.p0(i64 24, ptr %32) #4
  %218 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp12RenderTargetELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %27) #4
  call void @llvm.lifetime.start.p0(i64 40, ptr %37) #4
  invoke void @_ZN3imp4Vec4C2Ef(ptr noundef nonnull align 8 dereferenceable(40) %37, float noundef 0.000000e+00)
          to label %219 unwind label %255

219:                                              ; preds = %217
  invoke void @_ZN3imp12RenderTarget13setClearColorEiRKNS_4Vec4E(ptr noundef nonnull align 8 dereferenceable(99) %218, i32 noundef 0, ptr noundef nonnull align 8 dereferenceable(40) %37)
          to label %220 unwind label %259

220:                                              ; preds = %219
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %37) #4
  call void @llvm.lifetime.end.p0(i64 40, ptr %37) #4
  %221 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp19RenderToSamplerNodeELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %6) #4
  call void @_ZNSt10shared_ptrIN3imp6ObjectEEC2INS0_12RenderTargetEvEERKS_IT_E(ptr noundef nonnull align 8 dereferenceable(16) %38, ptr noundef nonnull align 8 dereferenceable(16) %27) #4
  invoke void @_ZN3imp6Object13setRenderDataESt10shared_ptrIS0_E(ptr noundef nonnull align 8 dereferenceable(24) %221, ptr noundef %38)
          to label %222 unwind label %264

222:                                              ; preds = %220
  call void @_ZNSt12__shared_ptrIN3imp6ObjectELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %38) #4
  br label %268

223:                                              ; preds = %197
  %224 = landingpad { ptr, i32 }
          cleanup
  %225 = extractvalue { ptr, i32 } %224, 0
  store ptr %225, ptr %9, align 8
  %226 = extractvalue { ptr, i32 } %224, 1
  store i32 %226, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %31) #4
  br label %311

227:                                              ; preds = %198
  %228 = landingpad { ptr, i32 }
          cleanup
  %229 = extractvalue { ptr, i32 } %228, 0
  store ptr %229, ptr %9, align 8
  %230 = extractvalue { ptr, i32 } %228, 1
  store i32 %230, ptr %10, align 4
  %231 = load ptr, ptr %35, align 8
  %232 = icmp eq ptr %34, %231
  br i1 %232, label %237, label %233

233:                                              ; preds = %233, %227
  %234 = phi ptr [ %231, %227 ], [ %235, %233 ]
  %235 = getelementptr inbounds %"class.std::shared_ptr.103", ptr %234, i64 -1
  call void @_ZNSt12__shared_ptrIN3imp12ImageSamplerELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %235) #4
  %236 = icmp eq ptr %235, %34
  br i1 %236, label %237, label %233

237:                                              ; preds = %233, %227
  br label %254

238:                                              ; preds = %202
  %239 = landingpad { ptr, i32 }
          cleanup
  %240 = extractvalue { ptr, i32 } %239, 0
  store ptr %240, ptr %9, align 8
  %241 = extractvalue { ptr, i32 } %239, 1
  store i32 %241, ptr %10, align 4
  br label %246

242:                                              ; preds = %209
  %243 = landingpad { ptr, i32 }
          cleanup
  %244 = extractvalue { ptr, i32 } %243, 0
  store ptr %244, ptr %9, align 8
  %245 = extractvalue { ptr, i32 } %243, 1
  store i32 %245, ptr %10, align 4
  call void @_ZNSt6vectorISt10shared_ptrIN3imp12ImageSamplerEESaIS3_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %32) #4
  br label %246

246:                                              ; preds = %242, %238
  call void @_ZNSt15__new_allocatorISt10shared_ptrIN3imp12ImageSamplerEEED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %36) #4
  call void @llvm.lifetime.end.p0(i64 1, ptr %36) #4
  %247 = getelementptr inbounds [1 x %"class.std::shared_ptr.103"], ptr %34, i32 0, i32 0
  %248 = getelementptr inbounds %"class.std::shared_ptr.103", ptr %247, i64 1
  br label %249

249:                                              ; preds = %249, %246
  %250 = phi ptr [ %248, %246 ], [ %251, %249 ]
  %251 = getelementptr inbounds %"class.std::shared_ptr.103", ptr %250, i64 -1
  call void @_ZNSt12__shared_ptrIN3imp12ImageSamplerELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %251) #4
  %252 = icmp eq ptr %251, %247
  br i1 %252, label %253, label %249

253:                                              ; preds = %249
  br label %254

254:                                              ; preds = %253, %237
  call void @llvm.lifetime.end.p0(i64 16, ptr %34) #4
  call void @llvm.lifetime.end.p0(i64 24, ptr %32) #4
  br label %311

255:                                              ; preds = %217
  %256 = landingpad { ptr, i32 }
          cleanup
  %257 = extractvalue { ptr, i32 } %256, 0
  store ptr %257, ptr %9, align 8
  %258 = extractvalue { ptr, i32 } %256, 1
  store i32 %258, ptr %10, align 4
  br label %263

259:                                              ; preds = %219
  %260 = landingpad { ptr, i32 }
          cleanup
  %261 = extractvalue { ptr, i32 } %260, 0
  store ptr %261, ptr %9, align 8
  %262 = extractvalue { ptr, i32 } %260, 1
  store i32 %262, ptr %10, align 4
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %37) #4
  br label %263

263:                                              ; preds = %259, %255
  call void @llvm.lifetime.end.p0(i64 40, ptr %37) #4
  br label %311

264:                                              ; preds = %220
  %265 = landingpad { ptr, i32 }
          cleanup
  %266 = extractvalue { ptr, i32 } %265, 0
  store ptr %266, ptr %9, align 8
  %267 = extractvalue { ptr, i32 } %265, 1
  store i32 %267, ptr %10, align 4
  call void @_ZNSt12__shared_ptrIN3imp6ObjectELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %38) #4
  br label %311

268:                                              ; preds = %222, %178
  call void @llvm.lifetime.start.p0(i64 16, ptr %39) #4
  invoke void @_ZN3imp11RenderQueue6createIJEEESt10shared_ptrIS0_EDpOT_(ptr dead_on_unwind writable sret(%"class.std::shared_ptr.33") align 8 %39)
          to label %269 unwind label %293

269:                                              ; preds = %268
  call void @llvm.lifetime.start.p0(i64 16, ptr %40) #4
  call void @_ZNSt10shared_ptrIN3imp11RenderQueueEEC2ERKS2_(ptr noundef nonnull align 8 dereferenceable(16) %41, ptr noundef nonnull align 8 dereferenceable(16) %39) #4
  invoke void @_ZN3imp10GlRenderer18applyRenderVisitorERKSt10shared_ptrINS_5GraphEES1_INS_11RenderQueueEE(ptr dead_on_unwind writable sret(%"class.std::shared_ptr.33") align 8 %40, ptr noundef nonnull align 8 dereferenceable(392) %43, ptr noundef nonnull align 8 dereferenceable(16) %14, ptr noundef %41)
          to label %270 unwind label %297

270:                                              ; preds = %269
  %271 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt10shared_ptrIN3imp11RenderQueueEEaSEOS2_(ptr noundef nonnull align 8 dereferenceable(16) %39, ptr noundef nonnull align 8 dereferenceable(16) %40) #4
  call void @_ZNSt12__shared_ptrIN3imp11RenderQueueELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %40) #4
  call void @_ZNSt12__shared_ptrIN3imp11RenderQueueELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %41) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %40) #4
  %272 = getelementptr inbounds %"class.imp::GlRenderer", ptr %43, i32 0, i32 1
  %273 = load ptr, ptr %272, align 8, !tbaa !15
  %274 = load ptr, ptr %273, align 8, !tbaa !53
  %275 = getelementptr inbounds ptr, ptr %274, i64 15
  %276 = load ptr, ptr %275, align 8
  invoke void %276(ptr noundef nonnull align 8 dereferenceable(24) %273, ptr noundef nonnull align 8 dereferenceable(16) %27)
          to label %277 unwind label %301

277:                                              ; preds = %270
  %278 = getelementptr inbounds %"class.imp::GlRenderer", ptr %43, i32 0, i32 1
  %279 = load ptr, ptr %278, align 8, !tbaa !15
  %280 = load ptr, ptr %279, align 8, !tbaa !53
  %281 = getelementptr inbounds ptr, ptr %280, i64 10
  %282 = load ptr, ptr %281, align 8
  invoke void %282(ptr noundef nonnull align 8 dereferenceable(24) %279, ptr noundef nonnull align 8 dereferenceable(16) %27)
          to label %283 unwind label %301

283:                                              ; preds = %277
  call void @_ZNSt10shared_ptrIN3imp5StateEEC2EDn(ptr noundef nonnull align 8 dereferenceable(16) %42, ptr null) #4
  invoke void @_ZN3imp10GlRenderer9drawQueueERSt10shared_ptrINS_11RenderQueueEES1_INS_5StateEENS_13SceneRenderer11RenderFrameE(ptr noundef nonnull align 8 dereferenceable(392) %43, ptr noundef nonnull align 8 dereferenceable(16) %39, ptr noundef %42, i32 noundef 0)
          to label %284 unwind label %305

284:                                              ; preds = %283
  call void @_ZNSt12__shared_ptrIN3imp5StateELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %42) #4
  %285 = getelementptr inbounds %"class.imp::GlRenderer", ptr %43, i32 0, i32 1
  %286 = load ptr, ptr %285, align 8, !tbaa !15
  %287 = load ptr, ptr %286, align 8, !tbaa !53
  %288 = getelementptr inbounds ptr, ptr %287, i64 16
  %289 = load ptr, ptr %288, align 8
  invoke void %289(ptr noundef nonnull align 8 dereferenceable(24) %286)
          to label %290 unwind label %301

290:                                              ; preds = %284
  %291 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp12RenderTargetELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %27) #4
  invoke void @_ZN3imp12RenderTarget6changeEv(ptr noundef nonnull align 8 dereferenceable(99) %291)
          to label %292 unwind label %301

292:                                              ; preds = %290
  call void @_ZNSt12__shared_ptrIN3imp11RenderQueueELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %39) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %39) #4
  call void @_ZNSt12__shared_ptrIN3imp12RenderTargetELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %27) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %27) #4
  br label %312

293:                                              ; preds = %268
  %294 = landingpad { ptr, i32 }
          cleanup
  %295 = extractvalue { ptr, i32 } %294, 0
  store ptr %295, ptr %9, align 8
  %296 = extractvalue { ptr, i32 } %294, 1
  store i32 %296, ptr %10, align 4
  br label %310

297:                                              ; preds = %269
  %298 = landingpad { ptr, i32 }
          cleanup
  %299 = extractvalue { ptr, i32 } %298, 0
  store ptr %299, ptr %9, align 8
  %300 = extractvalue { ptr, i32 } %298, 1
  store i32 %300, ptr %10, align 4
  call void @_ZNSt12__shared_ptrIN3imp11RenderQueueELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %41) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %40) #4
  br label %309

301:                                              ; preds = %290, %284, %277, %270
  %302 = landingpad { ptr, i32 }
          cleanup
  %303 = extractvalue { ptr, i32 } %302, 0
  store ptr %303, ptr %9, align 8
  %304 = extractvalue { ptr, i32 } %302, 1
  store i32 %304, ptr %10, align 4
  br label %309

305:                                              ; preds = %283
  %306 = landingpad { ptr, i32 }
          cleanup
  %307 = extractvalue { ptr, i32 } %306, 0
  store ptr %307, ptr %9, align 8
  %308 = extractvalue { ptr, i32 } %306, 1
  store i32 %308, ptr %10, align 4
  call void @_ZNSt12__shared_ptrIN3imp5StateELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %42) #4
  br label %309

309:                                              ; preds = %305, %301, %297
  call void @_ZNSt12__shared_ptrIN3imp11RenderQueueELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %39) #4
  br label %310

310:                                              ; preds = %309, %293
  call void @llvm.lifetime.end.p0(i64 16, ptr %39) #4
  br label %311

311:                                              ; preds = %310, %264, %263, %254, %223, %196, %184
  call void @_ZNSt12__shared_ptrIN3imp12RenderTargetELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %27) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %27) #4
  br label %320

312:                                              ; preds = %292, %169
  br label %313

313:                                              ; preds = %312, %156
  %314 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp19RenderToSamplerNodeELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %6) #4
  invoke void @_ZN3imp19RenderToSamplerNode9makeReadyEv(ptr noundef nonnull align 8 dereferenceable(593) %314)
          to label %315 unwind label %316

315:                                              ; preds = %313
  call void @_ZNSt12__shared_ptrIN3imp5GraphELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %14) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %14) #4
  br label %322

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

320:                                              ; preds = %316, %311, %180, %166, %109
  call void @_ZNSt12__shared_ptrIN3imp5GraphELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %14) #4
  br label %321

321:                                              ; preds = %320, %105
  call void @llvm.lifetime.end.p0(i64 16, ptr %14) #4
  br label %326

322:                                              ; preds = %315, %74
  call void @_ZNSt12__shared_ptrIN3imp19RenderToSamplerNodeELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %6) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %6) #4
  br label %323

323:                                              ; preds = %322
  %324 = load i32, ptr %5, align 4, !tbaa !9
  %325 = add nsw i32 %324, 1
  store i32 %325, ptr %5, align 4, !tbaa !9
  br label %44, !llvm.loop !55

326:                                              ; preds = %321, %104, %94
  call void @_ZNSt12__shared_ptrIN3imp19RenderToSamplerNodeELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %6) #4
  br label %327

327:                                              ; preds = %326, %90
  call void @llvm.lifetime.end.p0(i64 16, ptr %6) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #4
  br label %329

328:                                              ; preds = %50
  ret void

329:                                              ; preds = %327
  %330 = load ptr, ptr %9, align 8
  %331 = load i32, ptr %10, align 4
  %332 = insertvalue { ptr, i32 } poison, ptr %330, 0
  %333 = insertvalue { ptr, i32 } %332, i32 %331, 1
  resume { ptr, i32 } %333
}

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt12__shared_ptrIN3imp5GraphELN9__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 @_ZN3imp19RenderToSamplerNode7cubemapEv(ptr dead_on_unwind noalias writable sret(%"class.std::shared_ptr.12") align 8, ptr noundef nonnull align 8 dereferenceable(593)) #1 align 2

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

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

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

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

declare void @_ZN3imp15RenderToCubeMap6renderERKSt10shared_ptrINS_5GraphEERKNS_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 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 nounwind uwtable
declare dso_local void @_ZN3imp19RenderToSamplerNode7textureEv(ptr dead_on_unwind noalias writable sret(%"class.std::shared_ptr.103") align 8, ptr noundef nonnull align 8 dereferenceable(593)) #1 align 2

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

declare void @_ZN3imp12RenderTarget5buildERKSt6vectorISt10shared_ptrINS_12ImageSamplerEESaIS4_EEb(ptr noundef nonnull align 8 dereferenceable(99), ptr noundef nonnull align 8 dereferenceable(24), i1 noundef zeroext) #3

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

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

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

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

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

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

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 = { nounwind }

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

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


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

%"class.std::shared_ptr.15" = type { %"class.std::__shared_ptr.16" }
%"class.std::__shared_ptr.16" = type { ptr, %"class.std::__shared_count" }
%"class.std::__shared_count" = type { ptr }
%"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.33" = type { %"class.std::__shared_ptr.34" }
%"class.std::__shared_ptr.34" = type { ptr, %"class.std::__shared_count" }
%"class.std::shared_ptr.163" = type { %"class.std::__shared_ptr.164" }
%"class.std::__shared_ptr.164" = 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.117" = type { %"class.std::__shared_ptr.118" }
%"class.std::__shared_ptr.118" = type { ptr, %"class.std::__shared_count" }
%"class.std::shared_ptr.30" = type { %"class.std::__shared_ptr.31" }
%"class.std::__shared_ptr.31" = type { ptr, %"class.std::__shared_count" }
%"class.std::shared_ptr.12" = type { %"class.std::__shared_ptr.13" }
%"class.std::__shared_ptr.13" = type { ptr, %"class.std::__shared_count" }
%"class.imp::Vec3" = type { %"class.imp::Vec.base", [4 x i8] }
%"class.imp::Vec.base" = type <{ %"class.imp::Object", [3 x float] }>
%"class.imp::Object" = type { ptr, %"class.std::shared_ptr" }
%"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.103" = type { %"class.std::__shared_ptr.104" }
%"class.std::__shared_ptr.104" = type { ptr, %"class.std::__shared_count" }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<std::shared_ptr<imp::ImageSampler>, std::allocator<std::shared_ptr<imp::ImageSampler>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::shared_ptr<imp::ImageSampler>, std::allocator<std::shared_ptr<imp::ImageSampler>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::shared_ptr<imp::ImageSampler>, std::allocator<std::shared_ptr<imp::ImageSampler>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::shared_ptr<imp::ImageSampler>, std::allocator<std::shared_ptr<imp::ImageSampler>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::allocator.53" = type { i8 }
%"class.imp::Vec4" = type { %"class.imp::Vec" }
%"class.imp::Vec" = type { %"class.imp::Object", [4 x float] }
%"class.std::shared_ptr.27" = type { %"class.std::__shared_ptr.28" }
%"class.std::__shared_ptr.28" = type { ptr, %"class.std::__shared_count" }

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

declare i32 @__gxx_personality_v0(...)

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt10shared_ptrIN3imp12RenderTargetEEC2Ev(ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #1 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 uwtable
declare dso_local void @_ZN3imp15RenderToCubeMap6createIJPNS_10GlRendererEEEESt10shared_ptrIS0_EDpOT_(ptr dead_on_unwind noalias writable sret(%"class.std::shared_ptr.15") align 8, ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #2 align 2

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

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

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

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

declare void @_ZN3imp12RenderTarget13setClearColorEiRKNS_4Vec4E(ptr noundef nonnull align 8 dereferenceable(99), i32 noundef, ptr noundef nonnull align 8 dereferenceable(40)) 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 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

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

; 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 noundef zeroext i1 @_ZNKSt12__shared_ptrIN3imp12ImageSamplerELN9__gnu_cxx12_Lock_policyE2EEcvbEv(ptr noundef nonnull align 8 dereferenceable(16)) local_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 uwtable
define dso_local void @_ZN3imp10GlRenderer20applyRenderToSamplerESt10shared_ptrINS_11RenderQueueEE(ptr noundef nonnull align 8 dereferenceable(392) %0, ptr noundef nonnull %1) local_unnamed_addr #2 align 2 personality ptr @__gxx_personality_v0 {
  %3 = alloca %"class.std::shared_ptr.163", align 8
  %4 = alloca %"class.std::shared_ptr", align 8
  %5 = alloca %"class.std::shared_ptr.117", align 8
  %6 = alloca %"class.std::shared_ptr.30", align 8
  %7 = alloca %"class.std::shared_ptr.30", align 8
  %8 = alloca %"class.std::shared_ptr.12", align 8
  %9 = alloca %"class.std::shared_ptr.15", align 8
  %10 = alloca %"class.std::shared_ptr", align 8
  %11 = alloca %"class.std::shared_ptr.15", align 8
  %12 = alloca %"class.std::shared_ptr", align 8
  %13 = alloca %"class.std::shared_ptr.15", align 8
  %14 = alloca ptr, align 8
  %15 = alloca %"class.std::shared_ptr.12", align 8
  %16 = alloca %"class.std::shared_ptr", align 8
  %17 = alloca %"class.imp::Vec3", align 8
  %18 = alloca %"class.std::shared_ptr.18", align 8
  %19 = alloca %"class.std::shared_ptr.103", align 8
  %20 = alloca %"class.std::shared_ptr.0", align 8
  %21 = alloca %"class.std::shared_ptr", align 8
  %22 = alloca %"class.std::shared_ptr.0", align 8
  %23 = alloca %"class.std::shared_ptr", align 8
  %24 = alloca %"class.std::shared_ptr.0", align 8
  %25 = alloca %"class.std::vector", align 8
  %26 = alloca [1 x %"class.std::shared_ptr.103"], align 8
  %27 = alloca %"class.std::allocator.53", align 1
  %28 = alloca %"class.imp::Vec4", align 8
  %29 = alloca %"class.std::shared_ptr", align 8
  %30 = alloca %"class.std::shared_ptr.33", align 8
  %31 = alloca %"class.std::shared_ptr.33", align 8
  %32 = alloca %"class.std::shared_ptr.33", align 8
  %33 = alloca %"class.std::shared_ptr.27", align 8
  %34 = tail call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp11RenderQueueELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %1) #4
  %35 = getelementptr inbounds i8, ptr %34, i64 56
  %36 = tail call noundef i32 @_ZN3imp8StateBin4sizeEv(ptr noundef nonnull align 8 dereferenceable(28) %35)
  %37 = icmp sgt i32 %36, 0
  br i1 %37, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %2
  %38 = getelementptr inbounds i8, ptr %0, i64 144
  br label %39

._crit_edge:                                      ; preds = %.critedge.thread, %2
  ret void

39:                                               ; preds = %.lr.ph, %.critedge.thread
  %.032 = phi i32 [ 0, %.lr.ph ], [ %151, %.critedge.thread ]
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %3) #4
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %5) #4
  %40 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp11RenderQueueELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %1) #4
  %41 = getelementptr inbounds i8, ptr %40, i64 56
  call void @_ZN3imp8StateBin6nodeAtEi(ptr dead_on_unwind nonnull writable sret(%"class.std::shared_ptr.117") align 8 %5, ptr noundef nonnull align 8 dereferenceable(28) %41, i32 noundef %.032)
  call void @_ZNSt10shared_ptrIN3imp6ObjectEEC2INS0_4NodeEvEEOS_IT_E(ptr noundef nonnull align 8 dereferenceable(16) %4, ptr noundef nonnull align 8 dereferenceable(16) %5) #4
  call void @_ZN3imp19RenderToSamplerNode6dMorphESt10shared_ptrINS_6ObjectEE(ptr dead_on_unwind nonnull writable sret(%"class.std::shared_ptr.163") align 8 %3, ptr noundef nonnull %4)
  call void @_ZNSt12__shared_ptrIN3imp6ObjectELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %4) #4
  call void @_ZNSt12__shared_ptrIN3imp4NodeELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %5) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %5) #4
  %42 = call noundef zeroext i1 @_ZNKSt12__shared_ptrIN3imp19RenderToSamplerNodeELN9__gnu_cxx12_Lock_policyE2EEcvbEv(ptr noundef nonnull align 8 dereferenceable(16) %3) #4
  br i1 %42, label %43, label %.critedge.thread

43:                                               ; preds = %39
  %44 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp19RenderToSamplerNodeELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %3) #4
  %45 = call noundef zeroext i1 @_ZNK3imp19RenderToSamplerNode5readyEv(ptr noundef nonnull align 8 dereferenceable(593) %44)
  br i1 %45, label %.critedge.thread, label %.critedge

.critedge:                                        ; preds = %43
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %6) #4
  %46 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp19RenderToSamplerNodeELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %3) #4
  call void @_ZN3imp19RenderToSamplerNode5sceneEv(ptr dead_on_unwind nonnull writable sret(%"class.std::shared_ptr.30") align 8 %6, ptr noundef nonnull align 8 dereferenceable(593) %46)
  %47 = call noundef zeroext i1 @_ZNKSt12__shared_ptrIN3imp5GraphELN9__gnu_cxx12_Lock_policyE2EEcvbEv(ptr noundef nonnull align 8 dereferenceable(16) %6) #4
  call void @_ZNSt12__shared_ptrIN3imp5GraphELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %6) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %6) #4
  br i1 %47, label %48, label %.critedge.thread

48:                                               ; preds = %.critedge
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %7) #4
  %49 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp19RenderToSamplerNodeELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %3) #4
  call void @_ZN3imp19RenderToSamplerNode5sceneEv(ptr dead_on_unwind nonnull writable sret(%"class.std::shared_ptr.30") align 8 %7, ptr noundef nonnull align 8 dereferenceable(593) %49)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %8) #4
  %50 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp19RenderToSamplerNodeELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %3) #4
  call void @_ZN3imp19RenderToSamplerNode7cubemapEv(ptr dead_on_unwind nonnull writable sret(%"class.std::shared_ptr.12") align 8 %8, ptr noundef nonnull align 8 dereferenceable(593) %50)
  %51 = call noundef zeroext i1 @_ZNKSt12__shared_ptrIN3imp14CubeMapSamplerELN9__gnu_cxx12_Lock_policyE2EEcvbEv(ptr noundef nonnull align 8 dereferenceable(16) %8) #4
  call void @_ZNSt12__shared_ptrIN3imp14CubeMapSamplerELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %8) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %8) #4
  br i1 %51, label %52, label %83

52:                                               ; preds = %48
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %9) #4
  call void @_ZNSt10shared_ptrIN3imp15RenderToCubeMapEEC2Ev(ptr noundef nonnull align 8 dereferenceable(16) %9) #4
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %10) #4
  %53 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp19RenderToSamplerNodeELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %3) #4
  call void @_ZN3imp6Object13getRenderDataEv(ptr dead_on_unwind nonnull writable sret(%"class.std::shared_ptr") align 8 %10, ptr noundef nonnull align 8 dereferenceable(24) %53)
  %54 = call noundef zeroext i1 @_ZNKSt12__shared_ptrIN3imp6ObjectELN9__gnu_cxx12_Lock_policyE2EEcvbEv(ptr noundef nonnull align 8 dereferenceable(16) %10) #4
  call void @_ZNSt12__shared_ptrIN3imp6ObjectELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %10) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %10) #4
  br i1 %54, label %55, label %58

55:                                               ; preds = %52
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %11) #4
  %56 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp19RenderToSamplerNodeELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %3) #4
  call void @_ZN3imp6Object13getRenderDataEv(ptr dead_on_unwind nonnull writable sret(%"class.std::shared_ptr") align 8 %12, ptr noundef nonnull align 8 dereferenceable(24) %56)
  call void @_ZN3imp15RenderToCubeMap6dMorphESt10shared_ptrINS_6ObjectEE(ptr dead_on_unwind nonnull writable sret(%"class.std::shared_ptr.15") align 8 %11, ptr noundef nonnull %12)
  %57 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt10shared_ptrIN3imp15RenderToCubeMapEEaSEOS2_(ptr noundef nonnull align 8 dereferenceable(16) %9, ptr noundef nonnull align 8 dereferenceable(16) %11) #4
  call void @_ZNSt12__shared_ptrIN3imp15RenderToCubeMapELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %11) #4
  call void @_ZNSt12__shared_ptrIN3imp6ObjectELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %12) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %11) #4
  br label %73

58:                                               ; preds = %52
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %13) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %14) #4
  store ptr %0, ptr %14, align 8, !tbaa !5
  invoke void @_ZN3imp15RenderToCubeMap6createIJPNS_10GlRendererEEEESt10shared_ptrIS0_EDpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::shared_ptr.15") align 8 %13, ptr noundef nonnull align 8 dereferenceable(8) %14)
          to label %59 unwind label %67

59:                                               ; preds = %58
  %60 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt10shared_ptrIN3imp15RenderToCubeMapEEaSEOS2_(ptr noundef nonnull align 8 dereferenceable(16) %9, ptr noundef nonnull align 8 dereferenceable(16) %13) #4
  call void @_ZNSt12__shared_ptrIN3imp15RenderToCubeMapELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %13) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %13) #4
  %61 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp15RenderToCubeMapELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %9) #4
  %62 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp19RenderToSamplerNodeELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %3) #4
  call void @_ZN3imp19RenderToSamplerNode7cubemapEv(ptr dead_on_unwind nonnull writable sret(%"class.std::shared_ptr.12") align 8 %15, ptr noundef nonnull align 8 dereferenceable(593) %62)
  invoke void @_ZN3imp15RenderToCubeMap10setCubeMapESt10shared_ptrINS_14CubeMapSamplerEE(ptr noundef nonnull align 8 dereferenceable(812) %61, ptr noundef nonnull %15)
          to label %63 unwind label %71

63:                                               ; preds = %59
  call void @_ZNSt12__shared_ptrIN3imp14CubeMapSamplerELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %15) #4
  %64 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp15RenderToCubeMapELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %9) #4
  invoke void @_ZN3imp15RenderToCubeMap13setResolutionEf(ptr noundef nonnull align 8 dereferenceable(812) %64, float noundef 5.120000e+02)
          to label %65 unwind label %69

65:                                               ; preds = %63
  %66 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp19RenderToSamplerNodeELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %3) #4
  call void @_ZNSt10shared_ptrIN3imp6ObjectEEC2INS0_15RenderToCubeMapEvEERKS_IT_E(ptr noundef nonnull align 8 dereferenceable(16) %16, ptr noundef nonnull align 8 dereferenceable(16) %9) #4
  call void @_ZN3imp6Object13setRenderDataESt10shared_ptrIS0_E(ptr noundef nonnull align 8 dereferenceable(24) %66, ptr noundef nonnull %16)
  call void @_ZNSt12__shared_ptrIN3imp6ObjectELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %16) #4
  br label %73

67:                                               ; preds = %58
  %68 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %13) #4
  br label %82

69:                                               ; preds = %63
  %70 = landingpad { ptr, i32 }
          cleanup
  br label %82

71:                                               ; preds = %59
  %72 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt12__shared_ptrIN3imp14CubeMapSamplerELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %15) #4
  br label %82

73:                                               ; preds = %65, %55
  %74 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp15RenderToCubeMapELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %9) #4
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %17) #4
  invoke void @_ZN3imp4Vec3C2Ef(ptr noundef nonnull align 8 dereferenceable(36) %17, float noundef 0.000000e+00)
          to label %75 unwind label %77

75:                                               ; preds = %73
  call void @_ZNSt10shared_ptrIN3imp14ReflexionModelEEC2EDn(ptr noundef nonnull align 8 dereferenceable(16) %18, ptr null) #4
  invoke void @_ZN3imp15RenderToCubeMap6renderERKSt10shared_ptrINS_5GraphEERKNS_4Vec3ENS_13SceneRenderer11RenderFrameES1_INS_14ReflexionModelEE(ptr noundef nonnull align 8 dereferenceable(812) %74, ptr noundef nonnull align 8 dereferenceable(16) %7, ptr noundef nonnull align 8 dereferenceable(36) %17, i32 noundef 0, ptr noundef nonnull %18)
          to label %76 unwind label %79

76:                                               ; preds = %75
  call void @_ZNSt12__shared_ptrIN3imp14ReflexionModelELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %18) #4
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(36) %17) #4
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %17) #4
  call void @_ZNSt12__shared_ptrIN3imp15RenderToCubeMapELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %9) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %9) #4
  br label %148

77:                                               ; preds = %73
  %78 = landingpad { ptr, i32 }
          cleanup
  br label %81

79:                                               ; preds = %75
  %80 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt12__shared_ptrIN3imp14ReflexionModelELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %18) #4
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(36) %17) #4
  br label %81

81:                                               ; preds = %79, %77
  %.pn27 = phi { ptr, i32 } [ %80, %79 ], [ %78, %77 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %17) #4
  br label %82

82:                                               ; preds = %81, %71, %69, %67
  %.pn27.pn = phi { ptr, i32 } [ %.pn27, %81 ], [ %70, %69 ], [ %72, %71 ], [ %68, %67 ]
  call void @_ZNSt12__shared_ptrIN3imp15RenderToCubeMapELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %9) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %9) #4
  br label %150

83:                                               ; preds = %48
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %19) #4
  %84 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp19RenderToSamplerNodeELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %3) #4
  call void @_ZN3imp19RenderToSamplerNode7textureEv(ptr dead_on_unwind nonnull writable sret(%"class.std::shared_ptr.103") align 8 %19, ptr noundef nonnull align 8 dereferenceable(593) %84)
  %85 = call noundef zeroext i1 @_ZNKSt12__shared_ptrIN3imp12ImageSamplerELN9__gnu_cxx12_Lock_policyE2EEcvbEv(ptr noundef nonnull align 8 dereferenceable(16) %19) #4
  call void @_ZNSt12__shared_ptrIN3imp12ImageSamplerELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %19) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %19) #4
  br i1 %85, label %86, label %148

86:                                               ; preds = %83
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %20) #4
  call void @_ZNSt10shared_ptrIN3imp12RenderTargetEEC2Ev(ptr noundef nonnull align 8 dereferenceable(16) %20) #4
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %21) #4
  %87 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp19RenderToSamplerNodeELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %3) #4
  call void @_ZN3imp6Object13getRenderDataEv(ptr dead_on_unwind nonnull writable sret(%"class.std::shared_ptr") align 8 %21, ptr noundef nonnull align 8 dereferenceable(24) %87)
  %88 = call noundef zeroext i1 @_ZNKSt12__shared_ptrIN3imp6ObjectELN9__gnu_cxx12_Lock_policyE2EEcvbEv(ptr noundef nonnull align 8 dereferenceable(16) %21) #4
  call void @_ZNSt12__shared_ptrIN3imp6ObjectELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %21) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %21) #4
  br i1 %88, label %89, label %92

89:                                               ; preds = %86
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %22) #4
  %90 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp19RenderToSamplerNodeELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %3) #4
  call void @_ZN3imp6Object13getRenderDataEv(ptr dead_on_unwind nonnull writable sret(%"class.std::shared_ptr") align 8 %23, ptr noundef nonnull align 8 dereferenceable(24) %90)
  call void @_ZN3imp12RenderTarget6dMorphESt10shared_ptrINS_6ObjectEE(ptr dead_on_unwind nonnull writable sret(%"class.std::shared_ptr.0") align 8 %22, ptr noundef nonnull %23)
  %91 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt10shared_ptrIN3imp12RenderTargetEEaSEOS2_(ptr noundef nonnull align 8 dereferenceable(16) %20, ptr noundef nonnull align 8 dereferenceable(16) %22) #4
  call void @_ZNSt12__shared_ptrIN3imp12RenderTargetELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %22) #4
  call void @_ZNSt12__shared_ptrIN3imp6ObjectELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %23) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %22) #4
  br label %115

92:                                               ; preds = %86
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %24) #4
  invoke void @_ZN3imp12RenderTarget6createIJEEESt10shared_ptrIS0_EDpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::shared_ptr.0") align 8 %24)
          to label %93 unwind label %103

93:                                               ; preds = %92
  %94 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt10shared_ptrIN3imp12RenderTargetEEaSEOS2_(ptr noundef nonnull align 8 dereferenceable(16) %20, ptr noundef nonnull align 8 dereferenceable(16) %24) #4
  call void @_ZNSt12__shared_ptrIN3imp12RenderTargetELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %24) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %24) #4
  %95 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp12RenderTargetELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %20) #4
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %25) #4
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %26) #4
  %96 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp19RenderToSamplerNodeELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %3) #4
  call void @_ZN3imp19RenderToSamplerNode7textureEv(ptr dead_on_unwind nonnull writable sret(%"class.std::shared_ptr.103") align 8 %26, ptr noundef nonnull align 8 dereferenceable(593) %96)
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %27) #4
  call void @_ZNSaISt10shared_ptrIN3imp12ImageSamplerEEEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %27) #4
  invoke void @_ZNSt6vectorISt10shared_ptrIN3imp12ImageSamplerEESaIS3_EEC2ESt16initializer_listIS3_ERKS4_(ptr noundef nonnull align 8 dereferenceable(24) %25, ptr nonnull %26, i64 1, ptr noundef nonnull align 1 dereferenceable(1) %27)
          to label %97 unwind label %105

97:                                               ; preds = %93
  invoke void @_ZN3imp12RenderTarget5buildERKSt6vectorISt10shared_ptrINS_12ImageSamplerEESaIS4_EEb(ptr noundef nonnull align 8 dereferenceable(99) %95, ptr noundef nonnull align 8 dereferenceable(24) %25, i1 noundef zeroext true)
          to label %98 unwind label %107

98:                                               ; preds = %97
  call void @_ZNSt6vectorISt10shared_ptrIN3imp12ImageSamplerEESaIS3_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %25) #4
  call void @_ZNSt15__new_allocatorISt10shared_ptrIN3imp12ImageSamplerEEED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %27) #4
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %27) #4
  call void @_ZNSt12__shared_ptrIN3imp12ImageSamplerELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %26) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %26) #4
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %25) #4
  %99 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp12RenderTargetELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %20) #4
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %28) #4
  invoke void @_ZN3imp4Vec4C2Ef(ptr noundef nonnull align 8 dereferenceable(40) %28, float noundef 0.000000e+00)
          to label %100 unwind label %110

100:                                              ; preds = %98
  invoke void @_ZN3imp12RenderTarget13setClearColorEiRKNS_4Vec4E(ptr noundef nonnull align 8 dereferenceable(99) %99, i32 noundef 0, ptr noundef nonnull align 8 dereferenceable(40) %28)
          to label %101 unwind label %112

101:                                              ; preds = %100
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %28) #4
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %28) #4
  %102 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp19RenderToSamplerNodeELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %3) #4
  call void @_ZNSt10shared_ptrIN3imp6ObjectEEC2INS0_12RenderTargetEvEERKS_IT_E(ptr noundef nonnull align 8 dereferenceable(16) %29, ptr noundef nonnull align 8 dereferenceable(16) %20) #4
  call void @_ZN3imp6Object13setRenderDataESt10shared_ptrIS0_E(ptr noundef nonnull align 8 dereferenceable(24) %102, ptr noundef nonnull %29)
  call void @_ZNSt12__shared_ptrIN3imp6ObjectELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %29) #4
  br label %115

103:                                              ; preds = %92
  %104 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %24) #4
  br label %147

105:                                              ; preds = %93
  %106 = landingpad { ptr, i32 }
          cleanup
  br label %109

107:                                              ; preds = %97
  %108 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt6vectorISt10shared_ptrIN3imp12ImageSamplerEESaIS3_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %25) #4
  br label %109

109:                                              ; preds = %107, %105
  %.pn = phi { ptr, i32 } [ %108, %107 ], [ %106, %105 ]
  call void @_ZNSt15__new_allocatorISt10shared_ptrIN3imp12ImageSamplerEEED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %27) #4
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %27) #4
  call void @_ZNSt12__shared_ptrIN3imp12ImageSamplerELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %26) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %26) #4
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %25) #4
  br label %147

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

112:                                              ; preds = %100
  %113 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %28) #4
  br label %114

114:                                              ; preds = %112, %110
  %.pn21 = phi { ptr, i32 } [ %113, %112 ], [ %111, %110 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %28) #4
  br label %147

115:                                              ; preds = %101, %89
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %30) #4
  invoke void @_ZN3imp11RenderQueue6createIJEEESt10shared_ptrIS0_EDpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::shared_ptr.33") align 8 %30)
          to label %116 unwind label %137

116:                                              ; preds = %115
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %31) #4
  call void @_ZNSt10shared_ptrIN3imp11RenderQueueEEC2ERKS2_(ptr noundef nonnull align 8 dereferenceable(16) %32, ptr noundef nonnull align 8 dereferenceable(16) %30) #4
  invoke void @_ZN3imp10GlRenderer18applyRenderVisitorERKSt10shared_ptrINS_5GraphEES1_INS_11RenderQueueEE(ptr dead_on_unwind nonnull writable sret(%"class.std::shared_ptr.33") align 8 %31, ptr noundef nonnull align 8 dereferenceable(392) %0, ptr noundef nonnull align 8 dereferenceable(16) %7, ptr noundef nonnull %32)
          to label %117 unwind label %139

117:                                              ; preds = %116
  %118 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt10shared_ptrIN3imp11RenderQueueEEaSEOS2_(ptr noundef nonnull align 8 dereferenceable(16) %30, ptr noundef nonnull align 8 dereferenceable(16) %31) #4
  call void @_ZNSt12__shared_ptrIN3imp11RenderQueueELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %31) #4
  call void @_ZNSt12__shared_ptrIN3imp11RenderQueueELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %32) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %31) #4
  %119 = load ptr, ptr %38, align 8, !tbaa !9
  %120 = load ptr, ptr %119, align 8, !tbaa !49
  %121 = getelementptr inbounds i8, ptr %120, i64 120
  %122 = load ptr, ptr %121, align 8
  invoke void %122(ptr noundef nonnull align 8 dereferenceable(24) %119, ptr noundef nonnull align 8 dereferenceable(16) %20)
          to label %123 unwind label %141

123:                                              ; preds = %117
  %124 = load ptr, ptr %38, align 8, !tbaa !9
  %125 = load ptr, ptr %124, align 8, !tbaa !49
  %126 = getelementptr inbounds i8, ptr %125, i64 80
  %127 = load ptr, ptr %126, align 8
  invoke void %127(ptr noundef nonnull align 8 dereferenceable(24) %124, ptr noundef nonnull align 8 dereferenceable(16) %20)
          to label %128 unwind label %141

128:                                              ; preds = %123
  call void @_ZNSt10shared_ptrIN3imp5StateEEC2EDn(ptr noundef nonnull align 8 dereferenceable(16) %33, ptr null) #4
  invoke void @_ZN3imp10GlRenderer9drawQueueERSt10shared_ptrINS_11RenderQueueEES1_INS_5StateEENS_13SceneRenderer11RenderFrameE(ptr noundef nonnull align 8 dereferenceable(392) %0, ptr noundef nonnull align 8 dereferenceable(16) %30, ptr noundef nonnull %33, i32 noundef 0)
          to label %129 unwind label %143

129:                                              ; preds = %128
  call void @_ZNSt12__shared_ptrIN3imp5StateELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %33) #4
  %130 = load ptr, ptr %38, align 8, !tbaa !9
  %131 = load ptr, ptr %130, align 8, !tbaa !49
  %132 = getelementptr inbounds i8, ptr %131, i64 128
  %133 = load ptr, ptr %132, align 8
  invoke void %133(ptr noundef nonnull align 8 dereferenceable(24) %130)
          to label %134 unwind label %141

134:                                              ; preds = %129
  %135 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp12RenderTargetELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %20) #4
  invoke void @_ZN3imp12RenderTarget6changeEv(ptr noundef nonnull align 8 dereferenceable(99) %135)
          to label %136 unwind label %141

136:                                              ; preds = %134
  call void @_ZNSt12__shared_ptrIN3imp11RenderQueueELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %30) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %30) #4
  call void @_ZNSt12__shared_ptrIN3imp12RenderTargetELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %20) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %20) #4
  br label %148

137:                                              ; preds = %115
  %138 = landingpad { ptr, i32 }
          cleanup
  br label %146

139:                                              ; preds = %116
  %140 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt12__shared_ptrIN3imp11RenderQueueELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %32) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %31) #4
  br label %145

141:                                              ; preds = %134, %129, %123, %117
  %142 = landingpad { ptr, i32 }
          cleanup
  br label %145

143:                                              ; preds = %128
  %144 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt12__shared_ptrIN3imp5StateELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %33) #4
  br label %145

145:                                              ; preds = %143, %141, %139
  %.pn23 = phi { ptr, i32 } [ %142, %141 ], [ %144, %143 ], [ %140, %139 ]
  call void @_ZNSt12__shared_ptrIN3imp11RenderQueueELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %30) #4
  br label %146

146:                                              ; preds = %145, %137
  %.pn23.pn = phi { ptr, i32 } [ %.pn23, %145 ], [ %138, %137 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %30) #4
  br label %147

147:                                              ; preds = %146, %114, %109, %103
  %.pn23.pn.pn = phi { ptr, i32 } [ %.pn23.pn, %146 ], [ %.pn21, %114 ], [ %.pn, %109 ], [ %104, %103 ]
  call void @_ZNSt12__shared_ptrIN3imp12RenderTargetELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %20) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %20) #4
  br label %150

148:                                              ; preds = %83, %136, %76
  %149 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp19RenderToSamplerNodeELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %3) #4
  call void @_ZN3imp19RenderToSamplerNode9makeReadyEv(ptr noundef nonnull align 8 dereferenceable(593) %149)
  call void @_ZNSt12__shared_ptrIN3imp5GraphELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %7) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %7) #4
  br label %.critedge.thread

150:                                              ; preds = %147, %82
  %.pn27.pn.pn = phi { ptr, i32 } [ %.pn27.pn, %82 ], [ %.pn23.pn.pn, %147 ]
  call void @_ZNSt12__shared_ptrIN3imp5GraphELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %7) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %7) #4
  call void @_ZNSt12__shared_ptrIN3imp19RenderToSamplerNodeELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %3) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %3) #4
  resume { ptr, i32 } %.pn27.pn.pn

.critedge.thread:                                 ; preds = %43, %39, %148, %.critedge
  call void @_ZNSt12__shared_ptrIN3imp19RenderToSamplerNodeELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %3) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %3) #4
  %151 = add nuw nsw i32 %.032, 1
  %152 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN3imp11RenderQueueELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %1) #4
  %153 = getelementptr inbounds i8, ptr %152, i64 56
  %154 = call noundef i32 @_ZN3imp8StateBin4sizeEv(ptr noundef nonnull align 8 dereferenceable(28) %153)
  %155 = icmp slt i32 %151, %154
  br i1 %155, label %39, label %._crit_edge, !llvm.loop !51
}

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNKSt12__shared_ptrIN3imp19RenderToSamplerNodeELN9__gnu_cxx12_Lock_policyE2EEcvbEv(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_accessIN3imp19RenderToSamplerNodeELN9__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 zeroext i1 @_ZNK3imp19RenderToSamplerNode5readyEv(ptr noundef nonnull align 8 dereferenceable(593)) local_unnamed_addr #1 align 2

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt12__shared_ptrIN3imp5GraphELN9__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 @_ZN3imp19RenderToSamplerNode7cubemapEv(ptr dead_on_unwind noalias writable sret(%"class.std::shared_ptr.12") align 8, ptr noundef nonnull align 8 dereferenceable(593)) local_unnamed_addr #1 align 2

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

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

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

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

declare void @_ZN3imp15RenderToCubeMap6renderERKSt10shared_ptrINS_5GraphEERKNS_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 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 nounwind uwtable
declare dso_local void @_ZN3imp19RenderToSamplerNode7textureEv(ptr dead_on_unwind noalias writable sret(%"class.std::shared_ptr.103") align 8, ptr noundef nonnull align 8 dereferenceable(593)) local_unnamed_addr #1 align 2

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

declare void @_ZN3imp12RenderTarget5buildERKSt6vectorISt10shared_ptrINS_12ImageSamplerEESaIS4_EEb(ptr noundef nonnull align 8 dereferenceable(99), ptr noundef nonnull align 8 dereferenceable(24), i1 noundef zeroext) local_unnamed_addr #3

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt10shared_ptrIN3imp6ObjectEEC2INS0_12RenderTargetEvEERKS_IT_E(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 @_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 nounwind uwtable
declare dso_local void @_ZN3imp19RenderToSamplerNode9makeReadyEv(ptr noundef nonnull align 8 dereferenceable(593)) local_unnamed_addr #1 align 2

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

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

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 = { 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 = distinct !{!51, !52}
!52 = !{!"llvm.loop.mustprogress"}


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