; LLVM IR from Angelo1211/HybridRenderingEngine :: src (scene)

; 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"

%"struct.glm::mat" = type { [4 x %"struct.glm::vec.3"] }
%"struct.glm::vec.3" = type { %union.anon.4 }
%union.anon.4 = type { %struct.anon.5 }
%struct.anon.5 = type { float, float, float, float }
%"class.nlohmann::basic_json" = type { i8, %"union.nlohmann::basic_json<>::json_value" }
%"union.nlohmann::basic_json<>::json_value" = type { ptr }
%"struct.glm::vec" = type { %union.anon.0 }
%union.anon.0 = type { %struct.anon }
%struct.anon = type { float, float, float }
%class.Scene = type { %struct.CubeMap, %struct.CubeMap, %struct.Texture, %struct.Skybox, i32, i8, ptr, %"class.std::__cxx11::basic_string", i8, %struct.DirectionalLight, ptr, %"class.std::vector", %"class.std::vector" }
%struct.CubeMap = type <{ %struct.Texture, i32, [4 x i8] }>
%struct.Texture = type { i32, i32, i32, i32, %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string" }
%struct.Skybox = type { i32, %struct.Texture, %struct.CubeMap }
%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%struct.DirectionalLight = type { %struct.BaseLight, %"struct.glm::vec", %"struct.glm::mat", %"struct.glm::mat", float, float }
%struct.BaseLight = type { %"struct.glm::vec", %"struct.glm::mat", i8, float, float, float, i32, i32 }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<Model *, std::allocator<Model *>>::_Vector_impl" }
%"struct.std::_Vector_base<Model *, std::allocator<Model *>>::_Vector_impl" = type { %"struct.std::_Vector_base<Model *, std::allocator<Model *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<Model *, std::allocator<Model *>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%struct.PointLight = type { %struct.BaseLight, %"struct.glm::vec", [6 x %"struct.glm::mat"] }

@.str.23 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.42 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.43 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.44 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.45 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.46 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.47 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.48 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.49 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.50 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.51 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.52 = external hidden unnamed_addr constant [9 x i8], align 1

declare i32 @__gxx_personality_v0(...)

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

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

declare i32 @printf(ptr noundef, ...) #1

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3glmmlIfLNS_9qualifierE0EEENS_3matILi4ELi4ET_XT0_EEERKS4_S6_(ptr dead_on_unwind noalias writable sret(%"struct.glm::mat") align 4, ptr noundef nonnull align 4 dereferenceable(64), ptr noundef nonnull align 4 dereferenceable(64)) #3

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3glm5orthoIfEENS_3matILi4ELi4ET_LNS_9qualifierE0EEES2_S2_S2_S2_S2_S2_(ptr dead_on_unwind noalias writable sret(%"struct.glm::mat") align 4, float noundef, float noundef, float noundef, float noundef, float noundef, float noundef) #4

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3glm6lookAtIfLNS_9qualifierE0EEENS_3matILi4ELi4ET_XT0_EEERKNS_3vecILi3ES3_XT0_EEES8_S8_(ptr dead_on_unwind noalias writable sret(%"struct.glm::mat") align 4, ptr noundef nonnull align 4 dereferenceable(12), ptr noundef nonnull align 4 dereferenceable(12), ptr noundef nonnull align 4 dereferenceable(12)) #4

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local { <2 x float>, float } @_ZN3glmmlIfLNS_9qualifierE0EEENS_3vecILi3ET_XT0_EEES3_RKS4_(float noundef, ptr noundef nonnull align 4 dereferenceable(12)) #4

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local { <2 x float>, float } @_ZN3glmngIfLNS_9qualifierE0EEENS_3vecILi3ET_XT0_EEERKS4_(ptr noundef nonnull align 4 dereferenceable(12)) #4

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN3glm3vecILi3EfLNS_9qualifierE0EEC2Efff(ptr noundef nonnull align 4 dereferenceable(12), float noundef, float noundef, float noundef) unnamed_addr #5 align 2

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN5Scene10loadLightsERKN8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerEEE(ptr noundef nonnull align 8 dereferenceable(792) %0, ptr noundef nonnull align 8 dereferenceable(16) %1) #8 align 2 personality ptr @__gxx_personality_v0 {
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca %"class.nlohmann::basic_json", align 8
  %6 = alloca %"class.nlohmann::basic_json", align 8
  %7 = alloca ptr, align 8
  %8 = alloca i32, align 4
  %9 = alloca %"struct.glm::vec", align 4
  %10 = alloca %"class.nlohmann::basic_json", align 8
  %11 = alloca %"struct.glm::vec", align 4
  %12 = alloca float, align 4
  %13 = alloca float, align 4
  %14 = alloca float, align 4
  %15 = alloca float, align 4
  %16 = alloca %"struct.glm::mat", align 4
  %17 = alloca %"struct.glm::mat", align 4
  %18 = alloca %"struct.glm::vec", align 4
  %19 = alloca %"struct.glm::vec", align 4
  %20 = alloca { <2 x float>, float }, align 8
  %21 = alloca { <2 x float>, float }, align 8
  %22 = alloca %"struct.glm::vec", align 4
  %23 = alloca %"struct.glm::vec", align 4
  %24 = alloca %"struct.glm::mat", align 4
  %25 = alloca i32, align 4
  %26 = alloca %"class.nlohmann::basic_json", align 8
  %27 = alloca %"class.nlohmann::basic_json", align 8
  %28 = alloca %"struct.glm::vec", align 4
  %29 = alloca %"class.nlohmann::basic_json", align 8
  %30 = alloca %"struct.glm::vec", align 4
  %31 = alloca %"struct.glm::mat", align 4
  %32 = alloca %"struct.glm::vec", align 4
  %33 = alloca %"struct.glm::mat", align 4
  %34 = alloca %"struct.glm::vec", align 4
  %35 = alloca %"struct.glm::vec", align 4
  %36 = alloca { <2 x float>, float }, align 8
  %37 = alloca %"struct.glm::vec", align 4
  %38 = alloca %"struct.glm::mat", align 4
  %39 = alloca %"struct.glm::vec", align 4
  %40 = alloca %"struct.glm::vec", align 4
  %41 = alloca { <2 x float>, float }, align 8
  %42 = alloca %"struct.glm::vec", align 4
  %43 = alloca %"struct.glm::mat", align 4
  %44 = alloca %"struct.glm::vec", align 4
  %45 = alloca %"struct.glm::vec", align 4
  %46 = alloca { <2 x float>, float }, align 8
  %47 = alloca %"struct.glm::vec", align 4
  %48 = alloca %"struct.glm::mat", align 4
  %49 = alloca %"struct.glm::vec", align 4
  %50 = alloca %"struct.glm::vec", align 4
  %51 = alloca { <2 x float>, float }, align 8
  %52 = alloca %"struct.glm::vec", align 4
  %53 = alloca %"struct.glm::mat", align 4
  %54 = alloca %"struct.glm::vec", align 4
  %55 = alloca %"struct.glm::vec", align 4
  %56 = alloca { <2 x float>, float }, align 8
  %57 = alloca %"struct.glm::vec", align 4
  %58 = alloca %"struct.glm::mat", align 4
  %59 = alloca %"struct.glm::vec", align 4
  %60 = alloca %"struct.glm::vec", align 4
  %61 = alloca { <2 x float>, float }, align 8
  %62 = alloca %"struct.glm::vec", align 4
  store ptr %0, ptr %3, align 8, !tbaa !5
  store ptr %1, ptr %4, align 8, !tbaa !5
  %63 = load ptr, ptr %3, align 8
  %64 = call i32 (ptr, ...) @printf(ptr noundef @.str.42)
  call void @llvm.lifetime.start.p0(i64 16, ptr %5) #12
  %65 = load ptr, ptr %4, align 8, !tbaa !5
  %66 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEixIKcEERKSA_PT_(ptr noundef nonnull align 8 dereferenceable(16) %65, ptr noundef @.str.43)
  call void @_ZN8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEC2ERKSA_(ptr noundef nonnull align 8 dereferenceable(16) %5, ptr noundef nonnull align 8 dereferenceable(16) %66)
  call void @llvm.lifetime.start.p0(i64 16, ptr %6) #12
  %67 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEixIKcEERSA_PT_(ptr noundef nonnull align 8 dereferenceable(16) %5, ptr noundef @.str.44)
          to label %68 unwind label %215

68:                                               ; preds = %2
  invoke void @_ZN8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEC2ERKSA_(ptr noundef nonnull align 8 dereferenceable(16) %6, ptr noundef nonnull align 8 dereferenceable(16) %67)
          to label %69 unwind label %215

69:                                               ; preds = %68
  call void @llvm.lifetime.start.p0(i64 12, ptr %9) #12
  %70 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %6, i64 noundef 0)
          to label %71 unwind label %219

71:                                               ; preds = %69
  %72 = invoke noundef float @_ZNK8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEcvT_IfTnNSt9enable_ifIXaaaaaaaantsr3std10is_pointerISB_EE5valuentsr3std7is_sameISB_NS_6detail8json_refISA_EEEE5valuentsr3std7is_sameISB_cEE5valuentsr6detail13is_basic_jsonISB_EE5valuentsr3std7is_sameISB_St16initializer_listIcEEE5valueEiE4typeELi0EEEv(ptr noundef nonnull align 8 dereferenceable(16) %70)
          to label %73 unwind label %219

73:                                               ; preds = %71
  %74 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %6, i64 noundef 1)
          to label %75 unwind label %219

75:                                               ; preds = %73
  %76 = invoke noundef float @_ZNK8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEcvT_IfTnNSt9enable_ifIXaaaaaaaantsr3std10is_pointerISB_EE5valuentsr3std7is_sameISB_NS_6detail8json_refISA_EEEE5valuentsr3std7is_sameISB_cEE5valuentsr6detail13is_basic_jsonISB_EE5valuentsr3std7is_sameISB_St16initializer_listIcEEE5valueEiE4typeELi0EEEv(ptr noundef nonnull align 8 dereferenceable(16) %74)
          to label %77 unwind label %219

77:                                               ; preds = %75
  %78 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %6, i64 noundef 2)
          to label %79 unwind label %219

79:                                               ; preds = %77
  %80 = invoke noundef float @_ZNK8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEcvT_IfTnNSt9enable_ifIXaaaaaaaantsr3std10is_pointerISB_EE5valuentsr3std7is_sameISB_NS_6detail8json_refISA_EEEE5valuentsr3std7is_sameISB_cEE5valuentsr6detail13is_basic_jsonISB_EE5valuentsr3std7is_sameISB_St16initializer_listIcEEE5valueEiE4typeELi0EEEv(ptr noundef nonnull align 8 dereferenceable(16) %78)
          to label %81 unwind label %219

81:                                               ; preds = %79
  invoke void @_ZN3glm3vecILi3EfLNS_9qualifierE0EEC2Efff(ptr noundef nonnull align 4 dereferenceable(12) %9, float noundef %72, float noundef %76, float noundef %80)
          to label %82 unwind label %219

82:                                               ; preds = %81
  %83 = getelementptr inbounds %class.Scene, ptr %63, i32 0, i32 9
  %84 = getelementptr inbounds %struct.DirectionalLight, ptr %83, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %84, ptr align 4 %9, i64 12, i1 false), !tbaa.struct !9
  call void @llvm.lifetime.end.p0(i64 12, ptr %9) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr %10) #12
  %85 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEixIKcEERSA_PT_(ptr noundef nonnull align 8 dereferenceable(16) %5, ptr noundef @.str.45)
          to label %86 unwind label %223

86:                                               ; preds = %82
  invoke void @_ZN8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEC2ERKSA_(ptr noundef nonnull align 8 dereferenceable(16) %10, ptr noundef nonnull align 8 dereferenceable(16) %85)
          to label %87 unwind label %223

87:                                               ; preds = %86
  call void @llvm.lifetime.start.p0(i64 12, ptr %11) #12
  %88 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %10, i64 noundef 0)
          to label %89 unwind label %227

89:                                               ; preds = %87
  %90 = invoke noundef float @_ZNK8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEcvT_IfTnNSt9enable_ifIXaaaaaaaantsr3std10is_pointerISB_EE5valuentsr3std7is_sameISB_NS_6detail8json_refISA_EEEE5valuentsr3std7is_sameISB_cEE5valuentsr6detail13is_basic_jsonISB_EE5valuentsr3std7is_sameISB_St16initializer_listIcEEE5valueEiE4typeELi0EEEv(ptr noundef nonnull align 8 dereferenceable(16) %88)
          to label %91 unwind label %227

91:                                               ; preds = %89
  %92 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %10, i64 noundef 1)
          to label %93 unwind label %227

93:                                               ; preds = %91
  %94 = invoke noundef float @_ZNK8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEcvT_IfTnNSt9enable_ifIXaaaaaaaantsr3std10is_pointerISB_EE5valuentsr3std7is_sameISB_NS_6detail8json_refISA_EEEE5valuentsr3std7is_sameISB_cEE5valuentsr6detail13is_basic_jsonISB_EE5valuentsr3std7is_sameISB_St16initializer_listIcEEE5valueEiE4typeELi0EEEv(ptr noundef nonnull align 8 dereferenceable(16) %92)
          to label %95 unwind label %227

95:                                               ; preds = %93
  %96 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %10, i64 noundef 2)
          to label %97 unwind label %227

97:                                               ; preds = %95
  %98 = invoke noundef float @_ZNK8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEcvT_IfTnNSt9enable_ifIXaaaaaaaantsr3std10is_pointerISB_EE5valuentsr3std7is_sameISB_NS_6detail8json_refISA_EEEE5valuentsr3std7is_sameISB_cEE5valuentsr6detail13is_basic_jsonISB_EE5valuentsr3std7is_sameISB_St16initializer_listIcEEE5valueEiE4typeELi0EEEv(ptr noundef nonnull align 8 dereferenceable(16) %96)
          to label %99 unwind label %227

99:                                               ; preds = %97
  invoke void @_ZN3glm3vecILi3EfLNS_9qualifierE0EEC2Efff(ptr noundef nonnull align 4 dereferenceable(12) %11, float noundef %90, float noundef %94, float noundef %98)
          to label %100 unwind label %227

100:                                              ; preds = %99
  %101 = getelementptr inbounds %class.Scene, ptr %63, i32 0, i32 9
  %102 = getelementptr inbounds %struct.BaseLight, ptr %101, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %102, ptr align 4 %11, i64 12, i1 false), !tbaa.struct !9
  call void @llvm.lifetime.end.p0(i64 12, ptr %11) #12
  %103 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEixIKcEERSA_PT_(ptr noundef nonnull align 8 dereferenceable(16) %5, ptr noundef @.str.46)
          to label %104 unwind label %231

104:                                              ; preds = %100
  %105 = invoke noundef float @_ZNK8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEcvT_IfTnNSt9enable_ifIXaaaaaaaantsr3std10is_pointerISB_EE5valuentsr3std7is_sameISB_NS_6detail8json_refISA_EEEE5valuentsr3std7is_sameISB_cEE5valuentsr6detail13is_basic_jsonISB_EE5valuentsr3std7is_sameISB_St16initializer_listIcEEE5valueEiE4typeELi0EEEv(ptr noundef nonnull align 8 dereferenceable(16) %103)
          to label %106 unwind label %231

106:                                              ; preds = %104
  %107 = getelementptr inbounds %class.Scene, ptr %63, i32 0, i32 9
  %108 = getelementptr inbounds %struct.DirectionalLight, ptr %107, i32 0, i32 4
  store float %105, ptr %108, align 4, !tbaa !11
  %109 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEixIKcEERSA_PT_(ptr noundef nonnull align 8 dereferenceable(16) %5, ptr noundef @.str.47)
          to label %110 unwind label %231

110:                                              ; preds = %106
  %111 = invoke noundef float @_ZNK8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEcvT_IfTnNSt9enable_ifIXaaaaaaaantsr3std10is_pointerISB_EE5valuentsr3std7is_sameISB_NS_6detail8json_refISA_EEEE5valuentsr3std7is_sameISB_cEE5valuentsr6detail13is_basic_jsonISB_EE5valuentsr3std7is_sameISB_St16initializer_listIcEEE5valueEiE4typeELi0EEEv(ptr noundef nonnull align 8 dereferenceable(16) %109)
          to label %112 unwind label %231

112:                                              ; preds = %110
  %113 = getelementptr inbounds %class.Scene, ptr %63, i32 0, i32 9
  %114 = getelementptr inbounds %struct.BaseLight, ptr %113, i32 0, i32 3
  store float %111, ptr %114, align 4, !tbaa !30
  %115 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEixIKcEERSA_PT_(ptr noundef nonnull align 8 dereferenceable(16) %5, ptr noundef @.str.24)
          to label %116 unwind label %231

116:                                              ; preds = %112
  %117 = invoke noundef float @_ZNK8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEcvT_IfTnNSt9enable_ifIXaaaaaaaantsr3std10is_pointerISB_EE5valuentsr3std7is_sameISB_NS_6detail8json_refISA_EEEE5valuentsr3std7is_sameISB_cEE5valuentsr6detail13is_basic_jsonISB_EE5valuentsr3std7is_sameISB_St16initializer_listIcEEE5valueEiE4typeELi0EEEv(ptr noundef nonnull align 8 dereferenceable(16) %115)
          to label %118 unwind label %231

118:                                              ; preds = %116
  %119 = getelementptr inbounds %class.Scene, ptr %63, i32 0, i32 9
  %120 = getelementptr inbounds %struct.BaseLight, ptr %119, i32 0, i32 4
  store float %117, ptr %120, align 4, !tbaa !31
  %121 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEixIKcEERSA_PT_(ptr noundef nonnull align 8 dereferenceable(16) %5, ptr noundef @.str.23)
          to label %122 unwind label %231

122:                                              ; preds = %118
  %123 = invoke noundef float @_ZNK8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEcvT_IfTnNSt9enable_ifIXaaaaaaaantsr3std10is_pointerISB_EE5valuentsr3std7is_sameISB_NS_6detail8json_refISA_EEEE5valuentsr3std7is_sameISB_cEE5valuentsr6detail13is_basic_jsonISB_EE5valuentsr3std7is_sameISB_St16initializer_listIcEEE5valueEiE4typeELi0EEEv(ptr noundef nonnull align 8 dereferenceable(16) %121)
          to label %124 unwind label %231

124:                                              ; preds = %122
  %125 = getelementptr inbounds %class.Scene, ptr %63, i32 0, i32 9
  %126 = getelementptr inbounds %struct.BaseLight, ptr %125, i32 0, i32 5
  store float %123, ptr %126, align 4, !tbaa !32
  %127 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEixIKcEERSA_PT_(ptr noundef nonnull align 8 dereferenceable(16) %5, ptr noundef @.str.48)
          to label %128 unwind label %231

128:                                              ; preds = %124
  %129 = invoke noundef float @_ZNK8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEcvT_IfTnNSt9enable_ifIXaaaaaaaantsr3std10is_pointerISB_EE5valuentsr3std7is_sameISB_NS_6detail8json_refISA_EEEE5valuentsr3std7is_sameISB_cEE5valuentsr6detail13is_basic_jsonISB_EE5valuentsr3std7is_sameISB_St16initializer_listIcEEE5valueEiE4typeELi0EEEv(ptr noundef nonnull align 8 dereferenceable(16) %127)
          to label %130 unwind label %231

130:                                              ; preds = %128
  %131 = getelementptr inbounds %class.Scene, ptr %63, i32 0, i32 9
  %132 = getelementptr inbounds %struct.DirectionalLight, ptr %131, i32 0, i32 5
  store float %129, ptr %132, align 4, !tbaa !33
  %133 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEixIKcEERSA_PT_(ptr noundef nonnull align 8 dereferenceable(16) %5, ptr noundef @.str.49)
          to label %134 unwind label %231

134:                                              ; preds = %130
  %135 = invoke noundef i32 @_ZNK8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEcvT_IjTnNSt9enable_ifIXaaaaaaaantsr3std10is_pointerISB_EE5valuentsr3std7is_sameISB_NS_6detail8json_refISA_EEEE5valuentsr3std7is_sameISB_cEE5valuentsr6detail13is_basic_jsonISB_EE5valuentsr3std7is_sameISB_St16initializer_listIcEEE5valueEiE4typeELi0EEEv(ptr noundef nonnull align 8 dereferenceable(16) %133)
          to label %136 unwind label %231

136:                                              ; preds = %134
  %137 = getelementptr inbounds %class.Scene, ptr %63, i32 0, i32 9
  %138 = getelementptr inbounds %struct.BaseLight, ptr %137, i32 0, i32 6
  store i32 %135, ptr %138, align 4, !tbaa !34
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #12
  %139 = getelementptr inbounds %class.Scene, ptr %63, i32 0, i32 9
  %140 = getelementptr inbounds %struct.DirectionalLight, ptr %139, i32 0, i32 5
  %141 = load float, ptr %140, align 4, !tbaa !33
  store float %141, ptr %12, align 4, !tbaa !35
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #12
  %142 = load float, ptr %12, align 4, !tbaa !35
  %143 = fneg float %142
  store float %143, ptr %13, align 4, !tbaa !35
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #12
  %144 = load float, ptr %12, align 4, !tbaa !35
  store float %144, ptr %14, align 4, !tbaa !35
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #12
  %145 = load float, ptr %14, align 4, !tbaa !35
  %146 = fneg float %145
  store float %146, ptr %15, align 4, !tbaa !35
  call void @llvm.lifetime.start.p0(i64 64, ptr %16) #12
  %147 = load float, ptr %12, align 4, !tbaa !35
  %148 = load float, ptr %13, align 4, !tbaa !35
  %149 = load float, ptr %15, align 4, !tbaa !35
  %150 = load float, ptr %14, align 4, !tbaa !35
  %151 = getelementptr inbounds %class.Scene, ptr %63, i32 0, i32 9
  %152 = getelementptr inbounds %struct.BaseLight, ptr %151, i32 0, i32 4
  %153 = load float, ptr %152, align 4, !tbaa !31
  %154 = getelementptr inbounds %class.Scene, ptr %63, i32 0, i32 9
  %155 = getelementptr inbounds %struct.BaseLight, ptr %154, i32 0, i32 5
  %156 = load float, ptr %155, align 4, !tbaa !32
  invoke void @_ZN3glm5orthoIfEENS_3matILi4ELi4ET_LNS_9qualifierE0EEES2_S2_S2_S2_S2_S2_(ptr dead_on_unwind writable sret(%"struct.glm::mat") align 4 %16, float noundef %147, float noundef %148, float noundef %149, float noundef %150, float noundef %153, float noundef %156)
          to label %157 unwind label %235

157:                                              ; preds = %136
  %158 = getelementptr inbounds %class.Scene, ptr %63, i32 0, i32 9
  %159 = getelementptr inbounds %struct.BaseLight, ptr %158, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %159, ptr align 4 %16, i64 64, i1 false), !tbaa.struct !36
  call void @llvm.lifetime.end.p0(i64 64, ptr %16) #12
  call void @llvm.lifetime.start.p0(i64 64, ptr %17) #12
  call void @llvm.lifetime.start.p0(i64 12, ptr %18) #12
  %160 = getelementptr inbounds %class.Scene, ptr %63, i32 0, i32 9
  %161 = getelementptr inbounds %struct.DirectionalLight, ptr %160, i32 0, i32 4
  %162 = load float, ptr %161, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 12, ptr %19) #12
  %163 = getelementptr inbounds %class.Scene, ptr %63, i32 0, i32 9
  %164 = getelementptr inbounds %struct.DirectionalLight, ptr %163, i32 0, i32 1
  %165 = invoke { <2 x float>, float } @_ZN3glmngIfLNS_9qualifierE0EEENS_3vecILi3ET_XT0_EEERKS4_(ptr noundef nonnull align 4 dereferenceable(12) %164)
          to label %166 unwind label %239

166:                                              ; preds = %157
  %167 = getelementptr inbounds %"struct.glm::vec", ptr %19, i32 0, i32 0
  %168 = getelementptr inbounds %union.anon.0, ptr %167, i32 0, i32 0
  store { <2 x float>, float } %165, ptr %20, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %168, ptr align 8 %20, i64 12, i1 false)
  %169 = invoke { <2 x float>, float } @_ZN3glmmlIfLNS_9qualifierE0EEENS_3vecILi3ET_XT0_EEES3_RKS4_(float noundef %162, ptr noundef nonnull align 4 dereferenceable(12) %19)
          to label %170 unwind label %239

170:                                              ; preds = %166
  %171 = getelementptr inbounds %"struct.glm::vec", ptr %18, i32 0, i32 0
  %172 = getelementptr inbounds %union.anon.0, ptr %171, i32 0, i32 0
  store { <2 x float>, float } %169, ptr %21, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %172, ptr align 8 %21, i64 12, i1 false)
  call void @llvm.lifetime.start.p0(i64 12, ptr %22) #12
  invoke void @_ZN3glm3vecILi3EfLNS_9qualifierE0EEC2Efff(ptr noundef nonnull align 4 dereferenceable(12) %22, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 0.000000e+00)
          to label %173 unwind label %243

173:                                              ; preds = %170
  call void @llvm.lifetime.start.p0(i64 12, ptr %23) #12
  invoke void @_ZN3glm3vecILi3EfLNS_9qualifierE0EEC2Efff(ptr noundef nonnull align 4 dereferenceable(12) %23, float noundef 0.000000e+00, float noundef 1.000000e+00, float noundef 0.000000e+00)
          to label %174 unwind label %247

174:                                              ; preds = %173
  invoke void @_ZN3glm6lookAtIfLNS_9qualifierE0EEENS_3matILi4ELi4ET_XT0_EEERKNS_3vecILi3ES3_XT0_EEES8_S8_(ptr dead_on_unwind writable sret(%"struct.glm::mat") align 4 %17, ptr noundef nonnull align 4 dereferenceable(12) %18, ptr noundef nonnull align 4 dereferenceable(12) %22, ptr noundef nonnull align 4 dereferenceable(12) %23)
          to label %175 unwind label %247

175:                                              ; preds = %174
  %176 = getelementptr inbounds %class.Scene, ptr %63, i32 0, i32 9
  %177 = getelementptr inbounds %struct.DirectionalLight, ptr %176, i32 0, i32 2
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %177, ptr align 4 %17, i64 64, i1 false), !tbaa.struct !36
  call void @llvm.lifetime.end.p0(i64 12, ptr %23) #12
  call void @llvm.lifetime.end.p0(i64 12, ptr %22) #12
  call void @llvm.lifetime.end.p0(i64 12, ptr %19) #12
  call void @llvm.lifetime.end.p0(i64 12, ptr %18) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr %17) #12
  call void @llvm.lifetime.start.p0(i64 64, ptr %24) #12
  %178 = getelementptr inbounds %class.Scene, ptr %63, i32 0, i32 9
  %179 = getelementptr inbounds %struct.BaseLight, ptr %178, i32 0, i32 1
  %180 = getelementptr inbounds %class.Scene, ptr %63, i32 0, i32 9
  %181 = getelementptr inbounds %struct.DirectionalLight, ptr %180, i32 0, i32 2
  invoke void @_ZN3glmmlIfLNS_9qualifierE0EEENS_3matILi4ELi4ET_XT0_EEERKS4_S6_(ptr dead_on_unwind writable sret(%"struct.glm::mat") align 4 %24, ptr noundef nonnull align 4 dereferenceable(64) %179, ptr noundef nonnull align 4 dereferenceable(64) %181)
          to label %182 unwind label %253

182:                                              ; preds = %175
  %183 = getelementptr inbounds %class.Scene, ptr %63, i32 0, i32 9
  %184 = getelementptr inbounds %struct.DirectionalLight, ptr %183, i32 0, i32 3
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %184, ptr align 4 %24, i64 64, i1 false), !tbaa.struct !36
  call void @llvm.lifetime.end.p0(i64 64, ptr %24) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #12
  call void @_ZN8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %10) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %10) #12
  call void @_ZN8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %6) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %6) #12
  call void @_ZN8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %5) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %5) #12
  %185 = call i32 (ptr, ...) @printf(ptr noundef @.str.50)
  %186 = load ptr, ptr %4, align 8, !tbaa !5
  %187 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEixIKcEERKSA_PT_(ptr noundef nonnull align 8 dereferenceable(16) %186, ptr noundef @.str.51)
  %188 = call noundef i64 @_ZNK8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %187) #12
  %189 = trunc i64 %188 to i32
  %190 = getelementptr inbounds %class.Scene, ptr %63, i32 0, i32 4
  store i32 %189, ptr %190, align 8, !tbaa !37
  %191 = getelementptr inbounds %class.Scene, ptr %63, i32 0, i32 4
  %192 = load i32, ptr %191, align 8, !tbaa !37
  %193 = zext i32 %192 to i64
  %194 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %193, i64 496)
  %195 = extractvalue { i64, i1 } %194, 1
  %196 = extractvalue { i64, i1 } %194, 0
  %197 = select i1 %195, i64 -1, i64 %196
  %198 = call noalias noundef nonnull ptr @_Znam(i64 noundef %197) #13
  %199 = icmp eq i64 %193, 0
  br i1 %199, label %207, label %200

200:                                              ; preds = %182
  %201 = getelementptr inbounds %struct.PointLight, ptr %198, i64 %193
  br label %202

202:                                              ; preds = %204, %200
  %203 = phi ptr [ %198, %200 ], [ %205, %204 ]
  invoke void @_ZN10PointLightC2Ev(ptr noundef nonnull align 4 dereferenceable(496) %203)
          to label %204 unwind label %262

204:                                              ; preds = %202
  %205 = getelementptr inbounds %struct.PointLight, ptr %203, i64 1
  %206 = icmp eq ptr %205, %201
  br i1 %206, label %207, label %202

207:                                              ; preds = %204, %182
  %208 = getelementptr inbounds %class.Scene, ptr %63, i32 0, i32 10
  store ptr %198, ptr %208, align 8, !tbaa !38
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #12
  store i32 0, ptr %25, align 4, !tbaa !39
  br label %209

209:                                              ; preds = %469, %207
  %210 = load i32, ptr %25, align 4, !tbaa !39
  %211 = getelementptr inbounds %class.Scene, ptr %63, i32 0, i32 4
  %212 = load i32, ptr %211, align 8, !tbaa !37
  %213 = icmp ult i32 %210, %212
  br i1 %213, label %266, label %214

214:                                              ; preds = %209
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #12
  br label %555

215:                                              ; preds = %68, %2
  %216 = landingpad { ptr, i32 }
          cleanup
  %217 = extractvalue { ptr, i32 } %216, 0
  store ptr %217, ptr %7, align 8
  %218 = extractvalue { ptr, i32 } %216, 1
  store i32 %218, ptr %8, align 4
  br label %261

219:                                              ; preds = %81, %79, %77, %75, %73, %71, %69
  %220 = landingpad { ptr, i32 }
          cleanup
  %221 = extractvalue { ptr, i32 } %220, 0
  store ptr %221, ptr %7, align 8
  %222 = extractvalue { ptr, i32 } %220, 1
  store i32 %222, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 12, ptr %9) #12
  br label %260

223:                                              ; preds = %86, %82
  %224 = landingpad { ptr, i32 }
          cleanup
  %225 = extractvalue { ptr, i32 } %224, 0
  store ptr %225, ptr %7, align 8
  %226 = extractvalue { ptr, i32 } %224, 1
  store i32 %226, ptr %8, align 4
  br label %259

227:                                              ; preds = %99, %97, %95, %93, %91, %89, %87
  %228 = landingpad { ptr, i32 }
          cleanup
  %229 = extractvalue { ptr, i32 } %228, 0
  store ptr %229, ptr %7, align 8
  %230 = extractvalue { ptr, i32 } %228, 1
  store i32 %230, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 12, ptr %11) #12
  br label %258

231:                                              ; preds = %134, %130, %128, %124, %122, %118, %116, %112, %110, %106, %104, %100
  %232 = landingpad { ptr, i32 }
          cleanup
  %233 = extractvalue { ptr, i32 } %232, 0
  store ptr %233, ptr %7, align 8
  %234 = extractvalue { ptr, i32 } %232, 1
  store i32 %234, ptr %8, align 4
  br label %258

235:                                              ; preds = %136
  %236 = landingpad { ptr, i32 }
          cleanup
  %237 = extractvalue { ptr, i32 } %236, 0
  store ptr %237, ptr %7, align 8
  %238 = extractvalue { ptr, i32 } %236, 1
  store i32 %238, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 64, ptr %16) #12
  br label %257

239:                                              ; preds = %166, %157
  %240 = landingpad { ptr, i32 }
          cleanup
  %241 = extractvalue { ptr, i32 } %240, 0
  store ptr %241, ptr %7, align 8
  %242 = extractvalue { ptr, i32 } %240, 1
  store i32 %242, ptr %8, align 4
  br label %252

243:                                              ; preds = %170
  %244 = landingpad { ptr, i32 }
          cleanup
  %245 = extractvalue { ptr, i32 } %244, 0
  store ptr %245, ptr %7, align 8
  %246 = extractvalue { ptr, i32 } %244, 1
  store i32 %246, ptr %8, align 4
  br label %251

247:                                              ; preds = %174, %173
  %248 = landingpad { ptr, i32 }
          cleanup
  %249 = extractvalue { ptr, i32 } %248, 0
  store ptr %249, ptr %7, align 8
  %250 = extractvalue { ptr, i32 } %248, 1
  store i32 %250, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 12, ptr %23) #12
  br label %251

251:                                              ; preds = %247, %243
  call void @llvm.lifetime.end.p0(i64 12, ptr %22) #12
  br label %252

252:                                              ; preds = %251, %239
  call void @llvm.lifetime.end.p0(i64 12, ptr %19) #12
  call void @llvm.lifetime.end.p0(i64 12, ptr %18) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr %17) #12
  br label %257

253:                                              ; preds = %175
  %254 = landingpad { ptr, i32 }
          cleanup
  %255 = extractvalue { ptr, i32 } %254, 0
  store ptr %255, ptr %7, align 8
  %256 = extractvalue { ptr, i32 } %254, 1
  store i32 %256, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 64, ptr %24) #12
  br label %257

257:                                              ; preds = %253, %252, %235
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #12
  br label %258

258:                                              ; preds = %257, %231, %227
  call void @_ZN8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %10) #12
  br label %259

259:                                              ; preds = %258, %223
  call void @llvm.lifetime.end.p0(i64 16, ptr %10) #12
  br label %260

260:                                              ; preds = %259, %219
  call void @_ZN8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %6) #12
  br label %261

261:                                              ; preds = %260, %215
  call void @llvm.lifetime.end.p0(i64 16, ptr %6) #12
  call void @_ZN8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %5) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %5) #12
  br label %556

262:                                              ; preds = %202
  %263 = landingpad { ptr, i32 }
          cleanup
  %264 = extractvalue { ptr, i32 } %263, 0
  store ptr %264, ptr %7, align 8
  %265 = extractvalue { ptr, i32 } %263, 1
  store i32 %265, ptr %8, align 4
  call void @_ZdaPvm(ptr noundef %198, i64 noundef %197) #14
  br label %556

266:                                              ; preds = %209
  call void @llvm.lifetime.start.p0(i64 16, ptr %26) #12
  %267 = load ptr, ptr %4, align 8, !tbaa !5
  %268 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEixIKcEERKSA_PT_(ptr noundef nonnull align 8 dereferenceable(16) %267, ptr noundef @.str.51)
  %269 = load i32, ptr %25, align 4, !tbaa !39
  %270 = zext i32 %269 to i64
  %271 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %268, i64 noundef %270)
  call void @_ZN8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEC2ERKSA_(ptr noundef nonnull align 8 dereferenceable(16) %26, ptr noundef nonnull align 8 dereferenceable(16) %271)
  call void @llvm.lifetime.start.p0(i64 16, ptr %27) #12
  %272 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEixIKcEERSA_PT_(ptr noundef nonnull align 8 dereferenceable(16) %26, ptr noundef @.str.52)
          to label %273 unwind label %472

273:                                              ; preds = %266
  invoke void @_ZN8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEC2ERKSA_(ptr noundef nonnull align 8 dereferenceable(16) %27, ptr noundef nonnull align 8 dereferenceable(16) %272)
          to label %274 unwind label %472

274:                                              ; preds = %273
  call void @llvm.lifetime.start.p0(i64 12, ptr %28) #12
  %275 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %27, i64 noundef 0)
          to label %276 unwind label %476

276:                                              ; preds = %274
  %277 = invoke noundef float @_ZNK8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEcvT_IfTnNSt9enable_ifIXaaaaaaaantsr3std10is_pointerISB_EE5valuentsr3std7is_sameISB_NS_6detail8json_refISA_EEEE5valuentsr3std7is_sameISB_cEE5valuentsr6detail13is_basic_jsonISB_EE5valuentsr3std7is_sameISB_St16initializer_listIcEEE5valueEiE4typeELi0EEEv(ptr noundef nonnull align 8 dereferenceable(16) %275)
          to label %278 unwind label %476

278:                                              ; preds = %276
  %279 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %27, i64 noundef 1)
          to label %280 unwind label %476

280:                                              ; preds = %278
  %281 = invoke noundef float @_ZNK8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEcvT_IfTnNSt9enable_ifIXaaaaaaaantsr3std10is_pointerISB_EE5valuentsr3std7is_sameISB_NS_6detail8json_refISA_EEEE5valuentsr3std7is_sameISB_cEE5valuentsr6detail13is_basic_jsonISB_EE5valuentsr3std7is_sameISB_St16initializer_listIcEEE5valueEiE4typeELi0EEEv(ptr noundef nonnull align 8 dereferenceable(16) %279)
          to label %282 unwind label %476

282:                                              ; preds = %280
  %283 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %27, i64 noundef 2)
          to label %284 unwind label %476

284:                                              ; preds = %282
  %285 = invoke noundef float @_ZNK8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEcvT_IfTnNSt9enable_ifIXaaaaaaaantsr3std10is_pointerISB_EE5valuentsr3std7is_sameISB_NS_6detail8json_refISA_EEEE5valuentsr3std7is_sameISB_cEE5valuentsr6detail13is_basic_jsonISB_EE5valuentsr3std7is_sameISB_St16initializer_listIcEEE5valueEiE4typeELi0EEEv(ptr noundef nonnull align 8 dereferenceable(16) %283)
          to label %286 unwind label %476

286:                                              ; preds = %284
  invoke void @_ZN3glm3vecILi3EfLNS_9qualifierE0EEC2Efff(ptr noundef nonnull align 4 dereferenceable(12) %28, float noundef %277, float noundef %281, float noundef %285)
          to label %287 unwind label %476

287:                                              ; preds = %286
  %288 = getelementptr inbounds %class.Scene, ptr %63, i32 0, i32 10
  %289 = load ptr, ptr %288, align 8, !tbaa !38
  %290 = load i32, ptr %25, align 4, !tbaa !39
  %291 = zext i32 %290 to i64
  %292 = getelementptr inbounds %struct.PointLight, ptr %289, i64 %291
  %293 = getelementptr inbounds %struct.PointLight, ptr %292, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %293, ptr align 4 %28, i64 12, i1 false), !tbaa.struct !9
  call void @llvm.lifetime.end.p0(i64 12, ptr %28) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr %29) #12
  %294 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEixIKcEERSA_PT_(ptr noundef nonnull align 8 dereferenceable(16) %26, ptr noundef @.str.45)
          to label %295 unwind label %480

295:                                              ; preds = %287
  invoke void @_ZN8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEC2ERKSA_(ptr noundef nonnull align 8 dereferenceable(16) %29, ptr noundef nonnull align 8 dereferenceable(16) %294)
          to label %296 unwind label %480

296:                                              ; preds = %295
  call void @llvm.lifetime.start.p0(i64 12, ptr %30) #12
  %297 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %29, i64 noundef 0)
          to label %298 unwind label %484

298:                                              ; preds = %296
  %299 = invoke noundef float @_ZNK8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEcvT_IfTnNSt9enable_ifIXaaaaaaaantsr3std10is_pointerISB_EE5valuentsr3std7is_sameISB_NS_6detail8json_refISA_EEEE5valuentsr3std7is_sameISB_cEE5valuentsr6detail13is_basic_jsonISB_EE5valuentsr3std7is_sameISB_St16initializer_listIcEEE5valueEiE4typeELi0EEEv(ptr noundef nonnull align 8 dereferenceable(16) %297)
          to label %300 unwind label %484

300:                                              ; preds = %298
  %301 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %29, i64 noundef 1)
          to label %302 unwind label %484

302:                                              ; preds = %300
  %303 = invoke noundef float @_ZNK8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEcvT_IfTnNSt9enable_ifIXaaaaaaaantsr3std10is_pointerISB_EE5valuentsr3std7is_sameISB_NS_6detail8json_refISA_EEEE5valuentsr3std7is_sameISB_cEE5valuentsr6detail13is_basic_jsonISB_EE5valuentsr3std7is_sameISB_St16initializer_listIcEEE5valueEiE4typeELi0EEEv(ptr noundef nonnull align 8 dereferenceable(16) %301)
          to label %304 unwind label %484

304:                                              ; preds = %302
  %305 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %29, i64 noundef 2)
          to label %306 unwind label %484

306:                                              ; preds = %304
  %307 = invoke noundef float @_ZNK8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEcvT_IfTnNSt9enable_ifIXaaaaaaaantsr3std10is_pointerISB_EE5valuentsr3std7is_sameISB_NS_6detail8json_refISA_EEEE5valuentsr3std7is_sameISB_cEE5valuentsr6detail13is_basic_jsonISB_EE5valuentsr3std7is_sameISB_St16initializer_listIcEEE5valueEiE4typeELi0EEEv(ptr noundef nonnull align 8 dereferenceable(16) %305)
          to label %308 unwind label %484

308:                                              ; preds = %306
  invoke void @_ZN3glm3vecILi3EfLNS_9qualifierE0EEC2Efff(ptr noundef nonnull align 4 dereferenceable(12) %30, float noundef %299, float noundef %303, float noundef %307)
          to label %309 unwind label %484

309:                                              ; preds = %308
  %310 = getelementptr inbounds %class.Scene, ptr %63, i32 0, i32 10
  %311 = load ptr, ptr %310, align 8, !tbaa !38
  %312 = load i32, ptr %25, align 4, !tbaa !39
  %313 = zext i32 %312 to i64
  %314 = getelementptr inbounds %struct.PointLight, ptr %311, i64 %313
  %315 = getelementptr inbounds %struct.BaseLight, ptr %314, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %315, ptr align 4 %30, i64 12, i1 false), !tbaa.struct !9
  call void @llvm.lifetime.end.p0(i64 12, ptr %30) #12
  %316 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEixIKcEERSA_PT_(ptr noundef nonnull align 8 dereferenceable(16) %26, ptr noundef @.str.47)
          to label %317 unwind label %488

317:                                              ; preds = %309
  %318 = invoke noundef float @_ZNK8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEcvT_IfTnNSt9enable_ifIXaaaaaaaantsr3std10is_pointerISB_EE5valuentsr3std7is_sameISB_NS_6detail8json_refISA_EEEE5valuentsr3std7is_sameISB_cEE5valuentsr6detail13is_basic_jsonISB_EE5valuentsr3std7is_sameISB_St16initializer_listIcEEE5valueEiE4typeELi0EEEv(ptr noundef nonnull align 8 dereferenceable(16) %316)
          to label %319 unwind label %488

319:                                              ; preds = %317
  %320 = getelementptr inbounds %class.Scene, ptr %63, i32 0, i32 10
  %321 = load ptr, ptr %320, align 8, !tbaa !38
  %322 = load i32, ptr %25, align 4, !tbaa !39
  %323 = zext i32 %322 to i64
  %324 = getelementptr inbounds %struct.PointLight, ptr %321, i64 %323
  %325 = getelementptr inbounds %struct.BaseLight, ptr %324, i32 0, i32 3
  store float %318, ptr %325, align 4, !tbaa !30
  %326 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEixIKcEERSA_PT_(ptr noundef nonnull align 8 dereferenceable(16) %26, ptr noundef @.str.24)
          to label %327 unwind label %488

327:                                              ; preds = %319
  %328 = invoke noundef float @_ZNK8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEcvT_IfTnNSt9enable_ifIXaaaaaaaantsr3std10is_pointerISB_EE5valuentsr3std7is_sameISB_NS_6detail8json_refISA_EEEE5valuentsr3std7is_sameISB_cEE5valuentsr6detail13is_basic_jsonISB_EE5valuentsr3std7is_sameISB_St16initializer_listIcEEE5valueEiE4typeELi0EEEv(ptr noundef nonnull align 8 dereferenceable(16) %326)
          to label %329 unwind label %488

329:                                              ; preds = %327
  %330 = getelementptr inbounds %class.Scene, ptr %63, i32 0, i32 10
  %331 = load ptr, ptr %330, align 8, !tbaa !38
  %332 = load i32, ptr %25, align 4, !tbaa !39
  %333 = zext i32 %332 to i64
  %334 = getelementptr inbounds %struct.PointLight, ptr %331, i64 %333
  %335 = getelementptr inbounds %struct.BaseLight, ptr %334, i32 0, i32 4
  store float %328, ptr %335, align 4, !tbaa !31
  %336 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEixIKcEERSA_PT_(ptr noundef nonnull align 8 dereferenceable(16) %26, ptr noundef @.str.23)
          to label %337 unwind label %488

337:                                              ; preds = %329
  %338 = invoke noundef float @_ZNK8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEcvT_IfTnNSt9enable_ifIXaaaaaaaantsr3std10is_pointerISB_EE5valuentsr3std7is_sameISB_NS_6detail8json_refISA_EEEE5valuentsr3std7is_sameISB_cEE5valuentsr6detail13is_basic_jsonISB_EE5valuentsr3std7is_sameISB_St16initializer_listIcEEE5valueEiE4typeELi0EEEv(ptr noundef nonnull align 8 dereferenceable(16) %336)
          to label %339 unwind label %488

339:                                              ; preds = %337
  %340 = getelementptr inbounds %class.Scene, ptr %63, i32 0, i32 10
  %341 = load ptr, ptr %340, align 8, !tbaa !38
  %342 = load i32, ptr %25, align 4, !tbaa !39
  %343 = zext i32 %342 to i64
  %344 = getelementptr inbounds %struct.PointLight, ptr %341, i64 %343
  %345 = getelementptr inbounds %struct.BaseLight, ptr %344, i32 0, i32 5
  store float %338, ptr %345, align 4, !tbaa !32
  %346 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEixIKcEERSA_PT_(ptr noundef nonnull align 8 dereferenceable(16) %26, ptr noundef @.str.49)
          to label %347 unwind label %488

347:                                              ; preds = %339
  %348 = invoke noundef i32 @_ZNK8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEcvT_IjTnNSt9enable_ifIXaaaaaaaantsr3std10is_pointerISB_EE5valuentsr3std7is_sameISB_NS_6detail8json_refISA_EEEE5valuentsr3std7is_sameISB_cEE5valuentsr6detail13is_basic_jsonISB_EE5valuentsr3std7is_sameISB_St16initializer_listIcEEE5valueEiE4typeELi0EEEv(ptr noundef nonnull align 8 dereferenceable(16) %346)
          to label %349 unwind label %488

349:                                              ; preds = %347
  %350 = getelementptr inbounds %class.Scene, ptr %63, i32 0, i32 10
  %351 = load ptr, ptr %350, align 8, !tbaa !38
  %352 = load i32, ptr %25, align 4, !tbaa !39
  %353 = zext i32 %352 to i64
  %354 = getelementptr inbounds %struct.PointLight, ptr %351, i64 %353
  %355 = getelementptr inbounds %struct.BaseLight, ptr %354, i32 0, i32 6
  store i32 %348, ptr %355, align 4, !tbaa !34
  call void @llvm.lifetime.start.p0(i64 64, ptr %31) #12
  %356 = invoke noundef float @_ZN3glm7radiansIfEET_S1_(float noundef 9.000000e+01)
          to label %357 unwind label %492

357:                                              ; preds = %349
  %358 = getelementptr inbounds %class.Scene, ptr %63, i32 0, i32 10
  %359 = load ptr, ptr %358, align 8, !tbaa !38
  %360 = load i32, ptr %25, align 4, !tbaa !39
  %361 = zext i32 %360 to i64
  %362 = getelementptr inbounds %struct.PointLight, ptr %359, i64 %361
  %363 = getelementptr inbounds %struct.BaseLight, ptr %362, i32 0, i32 4
  %364 = load float, ptr %363, align 4, !tbaa !31
  %365 = getelementptr inbounds %class.Scene, ptr %63, i32 0, i32 10
  %366 = load ptr, ptr %365, align 8, !tbaa !38
  %367 = load i32, ptr %25, align 4, !tbaa !39
  %368 = zext i32 %367 to i64
  %369 = getelementptr inbounds %struct.PointLight, ptr %366, i64 %368
  %370 = getelementptr inbounds %struct.BaseLight, ptr %369, i32 0, i32 5
  %371 = load float, ptr %370, align 4, !tbaa !32
  invoke void @_ZN3glm11perspectiveIfEENS_3matILi4ELi4ET_LNS_9qualifierE0EEES2_S2_S2_S2_(ptr dead_on_unwind writable sret(%"struct.glm::mat") align 4 %31, float noundef %356, float noundef 1.000000e+00, float noundef %364, float noundef %371)
          to label %372 unwind label %492

372:                                              ; preds = %357
  %373 = getelementptr inbounds %class.Scene, ptr %63, i32 0, i32 10
  %374 = load ptr, ptr %373, align 8, !tbaa !38
  %375 = load i32, ptr %25, align 4, !tbaa !39
  %376 = zext i32 %375 to i64
  %377 = getelementptr inbounds %struct.PointLight, ptr %374, i64 %376
  %378 = getelementptr inbounds %struct.BaseLight, ptr %377, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %378, ptr align 4 %31, i64 64, i1 false), !tbaa.struct !36
  call void @llvm.lifetime.end.p0(i64 64, ptr %31) #12
  call void @llvm.lifetime.start.p0(i64 12, ptr %32) #12
  %379 = getelementptr inbounds %class.Scene, ptr %63, i32 0, i32 10
  %380 = load ptr, ptr %379, align 8, !tbaa !38
  %381 = load i32, ptr %25, align 4, !tbaa !39
  %382 = zext i32 %381 to i64
  %383 = getelementptr inbounds %struct.PointLight, ptr %380, i64 %382
  %384 = getelementptr inbounds %struct.PointLight, ptr %383, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %32, ptr align 4 %384, i64 12, i1 false), !tbaa.struct !9
  call void @llvm.lifetime.start.p0(i64 64, ptr %33) #12
  call void @llvm.lifetime.start.p0(i64 12, ptr %34) #12
  call void @llvm.lifetime.start.p0(i64 12, ptr %35) #12
  invoke void @_ZN3glm3vecILi3EfLNS_9qualifierE0EEC2IdddEET_T0_T1_(ptr noundef nonnull align 4 dereferenceable(12) %35, double noundef 1.000000e+00, double noundef 0.000000e+00, double noundef 0.000000e+00)
          to label %385 unwind label %496

385:                                              ; preds = %372
  %386 = invoke { <2 x float>, float } @_ZN3glmplIfLNS_9qualifierE0EEENS_3vecILi3ET_XT0_EEERKS4_S6_(ptr noundef nonnull align 4 dereferenceable(12) %32, ptr noundef nonnull align 4 dereferenceable(12) %35)
          to label %387 unwind label %496

387:                                              ; preds = %385
  %388 = getelementptr inbounds %"struct.glm::vec", ptr %34, i32 0, i32 0
  %389 = getelementptr inbounds %union.anon.0, ptr %388, i32 0, i32 0
  store { <2 x float>, float } %386, ptr %36, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %389, ptr align 8 %36, i64 12, i1 false)
  call void @llvm.lifetime.start.p0(i64 12, ptr %37) #12
  invoke void @_ZN3glm3vecILi3EfLNS_9qualifierE0EEC2IdddEET_T0_T1_(ptr noundef nonnull align 4 dereferenceable(12) %37, double noundef 0.000000e+00, double noundef -1.000000e+00, double noundef 0.000000e+00)
          to label %390 unwind label %500

390:                                              ; preds = %387
  invoke void @_ZN3glm6lookAtIfLNS_9qualifierE0EEENS_3matILi4ELi4ET_XT0_EEERKNS_3vecILi3ES3_XT0_EEES8_S8_(ptr dead_on_unwind writable sret(%"struct.glm::mat") align 4 %33, ptr noundef nonnull align 4 dereferenceable(12) %32, ptr noundef nonnull align 4 dereferenceable(12) %34, ptr noundef nonnull align 4 dereferenceable(12) %37)
          to label %391 unwind label %500

391:                                              ; preds = %390
  %392 = getelementptr inbounds %class.Scene, ptr %63, i32 0, i32 10
  %393 = load ptr, ptr %392, align 8, !tbaa !38
  %394 = load i32, ptr %25, align 4, !tbaa !39
  %395 = zext i32 %394 to i64
  %396 = getelementptr inbounds %struct.PointLight, ptr %393, i64 %395
  %397 = getelementptr inbounds %struct.PointLight, ptr %396, i32 0, i32 2
  %398 = getelementptr inbounds [6 x %"struct.glm::mat"], ptr %397, i64 0, i64 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %398, ptr align 4 %33, i64 64, i1 false), !tbaa.struct !36
  call void @llvm.lifetime.end.p0(i64 12, ptr %37) #12
  call void @llvm.lifetime.end.p0(i64 12, ptr %35) #12
  call void @llvm.lifetime.end.p0(i64 12, ptr %34) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr %33) #12
  call void @llvm.lifetime.start.p0(i64 64, ptr %38) #12
  call void @llvm.lifetime.start.p0(i64 12, ptr %39) #12
  call void @llvm.lifetime.start.p0(i64 12, ptr %40) #12
  invoke void @_ZN3glm3vecILi3EfLNS_9qualifierE0EEC2IdddEET_T0_T1_(ptr noundef nonnull align 4 dereferenceable(12) %40, double noundef -1.000000e+00, double noundef 0.000000e+00, double noundef 0.000000e+00)
          to label %399 unwind label %505

399:                                              ; preds = %391
  %400 = invoke { <2 x float>, float } @_ZN3glmplIfLNS_9qualifierE0EEENS_3vecILi3ET_XT0_EEERKS4_S6_(ptr noundef nonnull align 4 dereferenceable(12) %32, ptr noundef nonnull align 4 dereferenceable(12) %40)
          to label %401 unwind label %505

401:                                              ; preds = %399
  %402 = getelementptr inbounds %"struct.glm::vec", ptr %39, i32 0, i32 0
  %403 = getelementptr inbounds %union.anon.0, ptr %402, i32 0, i32 0
  store { <2 x float>, float } %400, ptr %41, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %403, ptr align 8 %41, i64 12, i1 false)
  call void @llvm.lifetime.start.p0(i64 12, ptr %42) #12
  invoke void @_ZN3glm3vecILi3EfLNS_9qualifierE0EEC2IdddEET_T0_T1_(ptr noundef nonnull align 4 dereferenceable(12) %42, double noundef 0.000000e+00, double noundef -1.000000e+00, double noundef 0.000000e+00)
          to label %404 unwind label %509

404:                                              ; preds = %401
  invoke void @_ZN3glm6lookAtIfLNS_9qualifierE0EEENS_3matILi4ELi4ET_XT0_EEERKNS_3vecILi3ES3_XT0_EEES8_S8_(ptr dead_on_unwind writable sret(%"struct.glm::mat") align 4 %38, ptr noundef nonnull align 4 dereferenceable(12) %32, ptr noundef nonnull align 4 dereferenceable(12) %39, ptr noundef nonnull align 4 dereferenceable(12) %42)
          to label %405 unwind label %509

405:                                              ; preds = %404
  %406 = getelementptr inbounds %class.Scene, ptr %63, i32 0, i32 10
  %407 = load ptr, ptr %406, align 8, !tbaa !38
  %408 = load i32, ptr %25, align 4, !tbaa !39
  %409 = zext i32 %408 to i64
  %410 = getelementptr inbounds %struct.PointLight, ptr %407, i64 %409
  %411 = getelementptr inbounds %struct.PointLight, ptr %410, i32 0, i32 2
  %412 = getelementptr inbounds [6 x %"struct.glm::mat"], ptr %411, i64 0, i64 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %412, ptr align 4 %38, i64 64, i1 false), !tbaa.struct !36
  call void @llvm.lifetime.end.p0(i64 12, ptr %42) #12
  call void @llvm.lifetime.end.p0(i64 12, ptr %40) #12
  call void @llvm.lifetime.end.p0(i64 12, ptr %39) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr %38) #12
  call void @llvm.lifetime.start.p0(i64 64, ptr %43) #12
  call void @llvm.lifetime.start.p0(i64 12, ptr %44) #12
  call void @llvm.lifetime.start.p0(i64 12, ptr %45) #12
  invoke void @_ZN3glm3vecILi3EfLNS_9qualifierE0EEC2IdddEET_T0_T1_(ptr noundef nonnull align 4 dereferenceable(12) %45, double noundef 0.000000e+00, double noundef 1.000000e+00, double noundef 0.000000e+00)
          to label %413 unwind label %514

413:                                              ; preds = %405
  %414 = invoke { <2 x float>, float } @_ZN3glmplIfLNS_9qualifierE0EEENS_3vecILi3ET_XT0_EEERKS4_S6_(ptr noundef nonnull align 4 dereferenceable(12) %32, ptr noundef nonnull align 4 dereferenceable(12) %45)
          to label %415 unwind label %514

415:                                              ; preds = %413
  %416 = getelementptr inbounds %"struct.glm::vec", ptr %44, i32 0, i32 0
  %417 = getelementptr inbounds %union.anon.0, ptr %416, i32 0, i32 0
  store { <2 x float>, float } %414, ptr %46, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %417, ptr align 8 %46, i64 12, i1 false)
  call void @llvm.lifetime.start.p0(i64 12, ptr %47) #12
  invoke void @_ZN3glm3vecILi3EfLNS_9qualifierE0EEC2IdddEET_T0_T1_(ptr noundef nonnull align 4 dereferenceable(12) %47, double noundef 0.000000e+00, double noundef 0.000000e+00, double noundef 1.000000e+00)
          to label %418 unwind label %518

418:                                              ; preds = %415
  invoke void @_ZN3glm6lookAtIfLNS_9qualifierE0EEENS_3matILi4ELi4ET_XT0_EEERKNS_3vecILi3ES3_XT0_EEES8_S8_(ptr dead_on_unwind writable sret(%"struct.glm::mat") align 4 %43, ptr noundef nonnull align 4 dereferenceable(12) %32, ptr noundef nonnull align 4 dereferenceable(12) %44, ptr noundef nonnull align 4 dereferenceable(12) %47)
          to label %419 unwind label %518

419:                                              ; preds = %418
  %420 = getelementptr inbounds %class.Scene, ptr %63, i32 0, i32 10
  %421 = load ptr, ptr %420, align 8, !tbaa !38
  %422 = load i32, ptr %25, align 4, !tbaa !39
  %423 = zext i32 %422 to i64
  %424 = getelementptr inbounds %struct.PointLight, ptr %421, i64 %423
  %425 = getelementptr inbounds %struct.PointLight, ptr %424, i32 0, i32 2
  %426 = getelementptr inbounds [6 x %"struct.glm::mat"], ptr %425, i64 0, i64 2
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %426, ptr align 4 %43, i64 64, i1 false), !tbaa.struct !36
  call void @llvm.lifetime.end.p0(i64 12, ptr %47) #12
  call void @llvm.lifetime.end.p0(i64 12, ptr %45) #12
  call void @llvm.lifetime.end.p0(i64 12, ptr %44) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr %43) #12
  call void @llvm.lifetime.start.p0(i64 64, ptr %48) #12
  call void @llvm.lifetime.start.p0(i64 12, ptr %49) #12
  call void @llvm.lifetime.start.p0(i64 12, ptr %50) #12
  invoke void @_ZN3glm3vecILi3EfLNS_9qualifierE0EEC2IdddEET_T0_T1_(ptr noundef nonnull align 4 dereferenceable(12) %50, double noundef 0.000000e+00, double noundef -1.000000e+00, double noundef 0.000000e+00)
          to label %427 unwind label %523

427:                                              ; preds = %419
  %428 = invoke { <2 x float>, float } @_ZN3glmplIfLNS_9qualifierE0EEENS_3vecILi3ET_XT0_EEERKS4_S6_(ptr noundef nonnull align 4 dereferenceable(12) %32, ptr noundef nonnull align 4 dereferenceable(12) %50)
          to label %429 unwind label %523

429:                                              ; preds = %427
  %430 = getelementptr inbounds %"struct.glm::vec", ptr %49, i32 0, i32 0
  %431 = getelementptr inbounds %union.anon.0, ptr %430, i32 0, i32 0
  store { <2 x float>, float } %428, ptr %51, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %431, ptr align 8 %51, i64 12, i1 false)
  call void @llvm.lifetime.start.p0(i64 12, ptr %52) #12
  invoke void @_ZN3glm3vecILi3EfLNS_9qualifierE0EEC2IdddEET_T0_T1_(ptr noundef nonnull align 4 dereferenceable(12) %52, double noundef 0.000000e+00, double noundef 0.000000e+00, double noundef -1.000000e+00)
          to label %432 unwind label %527

432:                                              ; preds = %429
  invoke void @_ZN3glm6lookAtIfLNS_9qualifierE0EEENS_3matILi4ELi4ET_XT0_EEERKNS_3vecILi3ES3_XT0_EEES8_S8_(ptr dead_on_unwind writable sret(%"struct.glm::mat") align 4 %48, ptr noundef nonnull align 4 dereferenceable(12) %32, ptr noundef nonnull align 4 dereferenceable(12) %49, ptr noundef nonnull align 4 dereferenceable(12) %52)
          to label %433 unwind label %527

433:                                              ; preds = %432
  %434 = getelementptr inbounds %class.Scene, ptr %63, i32 0, i32 10
  %435 = load ptr, ptr %434, align 8, !tbaa !38
  %436 = load i32, ptr %25, align 4, !tbaa !39
  %437 = zext i32 %436 to i64
  %438 = getelementptr inbounds %struct.PointLight, ptr %435, i64 %437
  %439 = getelementptr inbounds %struct.PointLight, ptr %438, i32 0, i32 2
  %440 = getelementptr inbounds [6 x %"struct.glm::mat"], ptr %439, i64 0, i64 3
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %440, ptr align 4 %48, i64 64, i1 false), !tbaa.struct !36
  call void @llvm.lifetime.end.p0(i64 12, ptr %52) #12
  call void @llvm.lifetime.end.p0(i64 12, ptr %50) #12
  call void @llvm.lifetime.end.p0(i64 12, ptr %49) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr %48) #12
  call void @llvm.lifetime.start.p0(i64 64, ptr %53) #12
  call void @llvm.lifetime.start.p0(i64 12, ptr %54) #12
  call void @llvm.lifetime.start.p0(i64 12, ptr %55) #12
  invoke void @_ZN3glm3vecILi3EfLNS_9qualifierE0EEC2IdddEET_T0_T1_(ptr noundef nonnull align 4 dereferenceable(12) %55, double noundef 0.000000e+00, double noundef 0.000000e+00, double noundef 1.000000e+00)
          to label %441 unwind label %532

441:                                              ; preds = %433
  %442 = invoke { <2 x float>, float } @_ZN3glmplIfLNS_9qualifierE0EEENS_3vecILi3ET_XT0_EEERKS4_S6_(ptr noundef nonnull align 4 dereferenceable(12) %32, ptr noundef nonnull align 4 dereferenceable(12) %55)
          to label %443 unwind label %532

443:                                              ; preds = %441
  %444 = getelementptr inbounds %"struct.glm::vec", ptr %54, i32 0, i32 0
  %445 = getelementptr inbounds %union.anon.0, ptr %444, i32 0, i32 0
  store { <2 x float>, float } %442, ptr %56, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %445, ptr align 8 %56, i64 12, i1 false)
  call void @llvm.lifetime.start.p0(i64 12, ptr %57) #12
  invoke void @_ZN3glm3vecILi3EfLNS_9qualifierE0EEC2IdddEET_T0_T1_(ptr noundef nonnull align 4 dereferenceable(12) %57, double noundef 0.000000e+00, double noundef -1.000000e+00, double noundef 0.000000e+00)
          to label %446 unwind label %536

446:                                              ; preds = %443
  invoke void @_ZN3glm6lookAtIfLNS_9qualifierE0EEENS_3matILi4ELi4ET_XT0_EEERKNS_3vecILi3ES3_XT0_EEES8_S8_(ptr dead_on_unwind writable sret(%"struct.glm::mat") align 4 %53, ptr noundef nonnull align 4 dereferenceable(12) %32, ptr noundef nonnull align 4 dereferenceable(12) %54, ptr noundef nonnull align 4 dereferenceable(12) %57)
          to label %447 unwind label %536

447:                                              ; preds = %446
  %448 = getelementptr inbounds %class.Scene, ptr %63, i32 0, i32 10
  %449 = load ptr, ptr %448, align 8, !tbaa !38
  %450 = load i32, ptr %25, align 4, !tbaa !39
  %451 = zext i32 %450 to i64
  %452 = getelementptr inbounds %struct.PointLight, ptr %449, i64 %451
  %453 = getelementptr inbounds %struct.PointLight, ptr %452, i32 0, i32 2
  %454 = getelementptr inbounds [6 x %"struct.glm::mat"], ptr %453, i64 0, i64 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %454, ptr align 4 %53, i64 64, i1 false), !tbaa.struct !36
  call void @llvm.lifetime.end.p0(i64 12, ptr %57) #12
  call void @llvm.lifetime.end.p0(i64 12, ptr %55) #12
  call void @llvm.lifetime.end.p0(i64 12, ptr %54) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr %53) #12
  call void @llvm.lifetime.start.p0(i64 64, ptr %58) #12
  call void @llvm.lifetime.start.p0(i64 12, ptr %59) #12
  call void @llvm.lifetime.start.p0(i64 12, ptr %60) #12
  invoke void @_ZN3glm3vecILi3EfLNS_9qualifierE0EEC2IdddEET_T0_T1_(ptr noundef nonnull align 4 dereferenceable(12) %60, double noundef 0.000000e+00, double noundef 0.000000e+00, double noundef -1.000000e+00)
          to label %455 unwind label %541

455:                                              ; preds = %447
  %456 = invoke { <2 x float>, float } @_ZN3glmplIfLNS_9qualifierE0EEENS_3vecILi3ET_XT0_EEERKS4_S6_(ptr noundef nonnull align 4 dereferenceable(12) %32, ptr noundef nonnull align 4 dereferenceable(12) %60)
          to label %457 unwind label %541

457:                                              ; preds = %455
  %458 = getelementptr inbounds %"struct.glm::vec", ptr %59, i32 0, i32 0
  %459 = getelementptr inbounds %union.anon.0, ptr %458, i32 0, i32 0
  store { <2 x float>, float } %456, ptr %61, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %459, ptr align 8 %61, i64 12, i1 false)
  call void @llvm.lifetime.start.p0(i64 12, ptr %62) #12
  invoke void @_ZN3glm3vecILi3EfLNS_9qualifierE0EEC2IdddEET_T0_T1_(ptr noundef nonnull align 4 dereferenceable(12) %62, double noundef 0.000000e+00, double noundef -1.000000e+00, double noundef 0.000000e+00)
          to label %460 unwind label %545

460:                                              ; preds = %457
  invoke void @_ZN3glm6lookAtIfLNS_9qualifierE0EEENS_3matILi4ELi4ET_XT0_EEERKNS_3vecILi3ES3_XT0_EEES8_S8_(ptr dead_on_unwind writable sret(%"struct.glm::mat") align 4 %58, ptr noundef nonnull align 4 dereferenceable(12) %32, ptr noundef nonnull align 4 dereferenceable(12) %59, ptr noundef nonnull align 4 dereferenceable(12) %62)
          to label %461 unwind label %545

461:                                              ; preds = %460
  %462 = getelementptr inbounds %class.Scene, ptr %63, i32 0, i32 10
  %463 = load ptr, ptr %462, align 8, !tbaa !38
  %464 = load i32, ptr %25, align 4, !tbaa !39
  %465 = zext i32 %464 to i64
  %466 = getelementptr inbounds %struct.PointLight, ptr %463, i64 %465
  %467 = getelementptr inbounds %struct.PointLight, ptr %466, i32 0, i32 2
  %468 = getelementptr inbounds [6 x %"struct.glm::mat"], ptr %467, i64 0, i64 5
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %468, ptr align 4 %58, i64 64, i1 false), !tbaa.struct !36
  call void @llvm.lifetime.end.p0(i64 12, ptr %62) #12
  call void @llvm.lifetime.end.p0(i64 12, ptr %60) #12
  call void @llvm.lifetime.end.p0(i64 12, ptr %59) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr %58) #12
  call void @llvm.lifetime.end.p0(i64 12, ptr %32) #12
  call void @_ZN8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %29) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %29) #12
  call void @_ZN8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %27) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %27) #12
  call void @_ZN8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %26) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %26) #12
  br label %469

469:                                              ; preds = %461
  %470 = load i32, ptr %25, align 4, !tbaa !39
  %471 = add i32 %470, 1
  store i32 %471, ptr %25, align 4, !tbaa !39
  br label %209, !llvm.loop !40

472:                                              ; preds = %273, %266
  %473 = landingpad { ptr, i32 }
          cleanup
  %474 = extractvalue { ptr, i32 } %473, 0
  store ptr %474, ptr %7, align 8
  %475 = extractvalue { ptr, i32 } %473, 1
  store i32 %475, ptr %8, align 4
  br label %554

476:                                              ; preds = %286, %284, %282, %280, %278, %276, %274
  %477 = landingpad { ptr, i32 }
          cleanup
  %478 = extractvalue { ptr, i32 } %477, 0
  store ptr %478, ptr %7, align 8
  %479 = extractvalue { ptr, i32 } %477, 1
  store i32 %479, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 12, ptr %28) #12
  br label %553

480:                                              ; preds = %295, %287
  %481 = landingpad { ptr, i32 }
          cleanup
  %482 = extractvalue { ptr, i32 } %481, 0
  store ptr %482, ptr %7, align 8
  %483 = extractvalue { ptr, i32 } %481, 1
  store i32 %483, ptr %8, align 4
  br label %552

484:                                              ; preds = %308, %306, %304, %302, %300, %298, %296
  %485 = landingpad { ptr, i32 }
          cleanup
  %486 = extractvalue { ptr, i32 } %485, 0
  store ptr %486, ptr %7, align 8
  %487 = extractvalue { ptr, i32 } %485, 1
  store i32 %487, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 12, ptr %30) #12
  br label %551

488:                                              ; preds = %347, %339, %337, %329, %327, %319, %317, %309
  %489 = landingpad { ptr, i32 }
          cleanup
  %490 = extractvalue { ptr, i32 } %489, 0
  store ptr %490, ptr %7, align 8
  %491 = extractvalue { ptr, i32 } %489, 1
  store i32 %491, ptr %8, align 4
  br label %551

492:                                              ; preds = %357, %349
  %493 = landingpad { ptr, i32 }
          cleanup
  %494 = extractvalue { ptr, i32 } %493, 0
  store ptr %494, ptr %7, align 8
  %495 = extractvalue { ptr, i32 } %493, 1
  store i32 %495, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 64, ptr %31) #12
  br label %551

496:                                              ; preds = %385, %372
  %497 = landingpad { ptr, i32 }
          cleanup
  %498 = extractvalue { ptr, i32 } %497, 0
  store ptr %498, ptr %7, align 8
  %499 = extractvalue { ptr, i32 } %497, 1
  store i32 %499, ptr %8, align 4
  br label %504

500:                                              ; preds = %390, %387
  %501 = landingpad { ptr, i32 }
          cleanup
  %502 = extractvalue { ptr, i32 } %501, 0
  store ptr %502, ptr %7, align 8
  %503 = extractvalue { ptr, i32 } %501, 1
  store i32 %503, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 12, ptr %37) #12
  br label %504

504:                                              ; preds = %500, %496
  call void @llvm.lifetime.end.p0(i64 12, ptr %35) #12
  call void @llvm.lifetime.end.p0(i64 12, ptr %34) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr %33) #12
  br label %550

505:                                              ; preds = %399, %391
  %506 = landingpad { ptr, i32 }
          cleanup
  %507 = extractvalue { ptr, i32 } %506, 0
  store ptr %507, ptr %7, align 8
  %508 = extractvalue { ptr, i32 } %506, 1
  store i32 %508, ptr %8, align 4
  br label %513

509:                                              ; preds = %404, %401
  %510 = landingpad { ptr, i32 }
          cleanup
  %511 = extractvalue { ptr, i32 } %510, 0
  store ptr %511, ptr %7, align 8
  %512 = extractvalue { ptr, i32 } %510, 1
  store i32 %512, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 12, ptr %42) #12
  br label %513

513:                                              ; preds = %509, %505
  call void @llvm.lifetime.end.p0(i64 12, ptr %40) #12
  call void @llvm.lifetime.end.p0(i64 12, ptr %39) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr %38) #12
  br label %550

514:                                              ; preds = %413, %405
  %515 = landingpad { ptr, i32 }
          cleanup
  %516 = extractvalue { ptr, i32 } %515, 0
  store ptr %516, ptr %7, align 8
  %517 = extractvalue { ptr, i32 } %515, 1
  store i32 %517, ptr %8, align 4
  br label %522

518:                                              ; preds = %418, %415
  %519 = landingpad { ptr, i32 }
          cleanup
  %520 = extractvalue { ptr, i32 } %519, 0
  store ptr %520, ptr %7, align 8
  %521 = extractvalue { ptr, i32 } %519, 1
  store i32 %521, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 12, ptr %47) #12
  br label %522

522:                                              ; preds = %518, %514
  call void @llvm.lifetime.end.p0(i64 12, ptr %45) #12
  call void @llvm.lifetime.end.p0(i64 12, ptr %44) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr %43) #12
  br label %550

523:                                              ; preds = %427, %419
  %524 = landingpad { ptr, i32 }
          cleanup
  %525 = extractvalue { ptr, i32 } %524, 0
  store ptr %525, ptr %7, align 8
  %526 = extractvalue { ptr, i32 } %524, 1
  store i32 %526, ptr %8, align 4
  br label %531

527:                                              ; preds = %432, %429
  %528 = landingpad { ptr, i32 }
          cleanup
  %529 = extractvalue { ptr, i32 } %528, 0
  store ptr %529, ptr %7, align 8
  %530 = extractvalue { ptr, i32 } %528, 1
  store i32 %530, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 12, ptr %52) #12
  br label %531

531:                                              ; preds = %527, %523
  call void @llvm.lifetime.end.p0(i64 12, ptr %50) #12
  call void @llvm.lifetime.end.p0(i64 12, ptr %49) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr %48) #12
  br label %550

532:                                              ; preds = %441, %433
  %533 = landingpad { ptr, i32 }
          cleanup
  %534 = extractvalue { ptr, i32 } %533, 0
  store ptr %534, ptr %7, align 8
  %535 = extractvalue { ptr, i32 } %533, 1
  store i32 %535, ptr %8, align 4
  br label %540

536:                                              ; preds = %446, %443
  %537 = landingpad { ptr, i32 }
          cleanup
  %538 = extractvalue { ptr, i32 } %537, 0
  store ptr %538, ptr %7, align 8
  %539 = extractvalue { ptr, i32 } %537, 1
  store i32 %539, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 12, ptr %57) #12
  br label %540

540:                                              ; preds = %536, %532
  call void @llvm.lifetime.end.p0(i64 12, ptr %55) #12
  call void @llvm.lifetime.end.p0(i64 12, ptr %54) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr %53) #12
  br label %550

541:                                              ; preds = %455, %447
  %542 = landingpad { ptr, i32 }
          cleanup
  %543 = extractvalue { ptr, i32 } %542, 0
  store ptr %543, ptr %7, align 8
  %544 = extractvalue { ptr, i32 } %542, 1
  store i32 %544, ptr %8, align 4
  br label %549

545:                                              ; preds = %460, %457
  %546 = landingpad { ptr, i32 }
          cleanup
  %547 = extractvalue { ptr, i32 } %546, 0
  store ptr %547, ptr %7, align 8
  %548 = extractvalue { ptr, i32 } %546, 1
  store i32 %548, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 12, ptr %62) #12
  br label %549

549:                                              ; preds = %545, %541
  call void @llvm.lifetime.end.p0(i64 12, ptr %60) #12
  call void @llvm.lifetime.end.p0(i64 12, ptr %59) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr %58) #12
  br label %550

550:                                              ; preds = %549, %540, %531, %522, %513, %504
  call void @llvm.lifetime.end.p0(i64 12, ptr %32) #12
  br label %551

551:                                              ; preds = %550, %492, %488, %484
  call void @_ZN8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %29) #12
  br label %552

552:                                              ; preds = %551, %480
  call void @llvm.lifetime.end.p0(i64 16, ptr %29) #12
  br label %553

553:                                              ; preds = %552, %476
  call void @_ZN8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %27) #12
  br label %554

554:                                              ; preds = %553, %472
  call void @llvm.lifetime.end.p0(i64 16, ptr %27) #12
  call void @_ZN8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %26) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %26) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #12
  br label %556

555:                                              ; preds = %214
  ret void

556:                                              ; preds = %554, %262, %261
  %557 = load ptr, ptr %7, align 8
  %558 = load i32, ptr %8, align 4
  %559 = insertvalue { ptr, i32 } poison, ptr %557, 0
  %560 = insertvalue { ptr, i32 } %559, i32 %558, 1
  resume { ptr, i32 } %560
}

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

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

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

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

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare { i64, i1 } @llvm.umul.with.overflow.i64(i64, i64) #9

; Function Attrs: nobuiltin allocsize(0)
declare noundef nonnull ptr @_Znam(i64 noundef) #10

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN10PointLightC2Ev(ptr noundef nonnull align 4 dereferenceable(496)) unnamed_addr #4 align 2

; Function Attrs: nobuiltin nounwind
declare void @_ZdaPvm(ptr noundef, i64 noundef) #11

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3glm11perspectiveIfEENS_3matILi4ELi4ET_LNS_9qualifierE0EEES2_S2_S2_S2_(ptr dead_on_unwind noalias writable sret(%"struct.glm::mat") align 4, float noundef, float noundef, float noundef, float noundef) #4

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef float @_ZN3glm7radiansIfEET_S1_(float noundef) #5

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local { <2 x float>, float } @_ZN3glmplIfLNS_9qualifierE0EEENS_3vecILi3ET_XT0_EEERKS4_S6_(ptr noundef nonnull align 4 dereferenceable(12), ptr noundef nonnull align 4 dereferenceable(12)) #4

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN3glm3vecILi3EfLNS_9qualifierE0EEC2IdddEET_T0_T1_(ptr noundef nonnull align 4 dereferenceable(12), double noundef, double noundef, double noundef) unnamed_addr #5 align 2

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { "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 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { inlinehint mustprogress uwtable "min-legal-vector-width"="64" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { 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 #7 = { 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 #8 = { mustprogress uwtable "min-legal-vector-width"="64" "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 #9 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #10 = { nobuiltin allocsize(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 #11 = { nobuiltin nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #12 = { nounwind }
attributes #13 = { builtin allocsize(0) }
attributes #14 = { builtin 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 = !{i64 0, i64 12, !10}
!10 = !{!7, !7, i64 0}
!11 = !{!12, !25, i64 724}
!12 = !{!"_ZTS5Scene", !13, i64 0, !13, i64 88, !14, i64 176, !19, i64 256, !15, i64 432, !20, i64 436, !6, i64 440, !16, i64 448, !20, i64 480, !21, i64 484, !6, i64 736, !26, i64 744, !26, i64 768}
!13 = !{!"_ZTS7CubeMap", !14, i64 0, !15, i64 80}
!14 = !{!"_ZTS7Texture", !15, i64 0, !15, i64 4, !15, i64 8, !15, i64 12, !16, i64 16, !16, i64 48}
!15 = !{!"int", !7, i64 0}
!16 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !17, i64 0, !18, i64 8, !7, i64 16}
!17 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !6, i64 0}
!18 = !{!"long", !7, i64 0}
!19 = !{!"_ZTS6Skybox", !15, i64 0, !14, i64 8, !13, i64 88}
!20 = !{!"bool", !7, i64 0}
!21 = !{!"_ZTS16DirectionalLight", !22, i64 0, !23, i64 100, !24, i64 112, !24, i64 176, !25, i64 240, !25, i64 244}
!22 = !{!"_ZTS9BaseLight", !23, i64 0, !24, i64 12, !20, i64 76, !25, i64 80, !25, i64 84, !25, i64 88, !15, i64 92, !15, i64 96}
!23 = !{!"_ZTSN3glm3vecILi3EfLNS_9qualifierE0EEE", !7, i64 0}
!24 = !{!"_ZTSN3glm3matILi4ELi4EfLNS_9qualifierE0EEE", !7, i64 0}
!25 = !{!"float", !7, i64 0}
!26 = !{!"_ZTSSt6vectorIP5ModelSaIS1_EE", !27, i64 0}
!27 = !{!"_ZTSSt12_Vector_baseIP5ModelSaIS1_EE", !28, i64 0}
!28 = !{!"_ZTSNSt12_Vector_baseIP5ModelSaIS1_EE12_Vector_implE", !29, i64 0}
!29 = !{!"_ZTSNSt12_Vector_baseIP5ModelSaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!30 = !{!22, !25, i64 80}
!31 = !{!22, !25, i64 84}
!32 = !{!22, !25, i64 88}
!33 = !{!12, !25, i64 728}
!34 = !{!22, !15, i64 92}
!35 = !{!25, !25, i64 0}
!36 = !{i64 0, i64 64, !10}
!37 = !{!12, !15, i64 432}
!38 = !{!12, !6, i64 736}
!39 = !{!15, !15, i64 0}
!40 = distinct !{!40, !41}
!41 = !{!"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"

%"struct.glm::mat" = type { [4 x %"struct.glm::vec.3"] }
%"struct.glm::vec.3" = type { %union.anon.4 }
%union.anon.4 = type { %struct.anon.5 }
%struct.anon.5 = type { float, float, float, float }
%"class.nlohmann::basic_json" = type { i8, %"union.nlohmann::basic_json<>::json_value" }
%"union.nlohmann::basic_json<>::json_value" = type { ptr }
%"struct.glm::vec" = type { %union.anon.0 }
%union.anon.0 = type { %struct.anon }
%struct.anon = type { float, float, float }
%struct.PointLight = type { %struct.BaseLight, %"struct.glm::vec", [6 x %"struct.glm::mat"] }
%struct.BaseLight = type { %"struct.glm::vec", %"struct.glm::mat", i8, float, float, float, i32, i32 }

@.str.23 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.42 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.43 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.44 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.45 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.46 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.47 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.48 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.49 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.50 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.51 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.52 = external hidden unnamed_addr constant [9 x i8], align 1

declare i32 @__gxx_personality_v0(...)

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

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

; Function Attrs: nofree nounwind
declare noundef i32 @printf(ptr nocapture noundef readonly, ...) local_unnamed_addr #1

; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3glmmlIfLNS_9qualifierE0EEENS_3matILi4ELi4ET_XT0_EEERKS4_S6_(ptr dead_on_unwind noalias writable sret(%"struct.glm::mat") align 4, ptr noundef nonnull align 4 dereferenceable(64), ptr noundef nonnull align 4 dereferenceable(64)) local_unnamed_addr #3

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3glm5orthoIfEENS_3matILi4ELi4ET_LNS_9qualifierE0EEES2_S2_S2_S2_S2_S2_(ptr dead_on_unwind noalias writable sret(%"struct.glm::mat") align 4, float noundef, float noundef, float noundef, float noundef, float noundef, float noundef) local_unnamed_addr #4

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3glm6lookAtIfLNS_9qualifierE0EEENS_3matILi4ELi4ET_XT0_EEERKNS_3vecILi3ES3_XT0_EEES8_S8_(ptr dead_on_unwind noalias writable sret(%"struct.glm::mat") align 4, ptr noundef nonnull align 4 dereferenceable(12), ptr noundef nonnull align 4 dereferenceable(12), ptr noundef nonnull align 4 dereferenceable(12)) local_unnamed_addr #4

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local { <2 x float>, float } @_ZN3glmmlIfLNS_9qualifierE0EEENS_3vecILi3ET_XT0_EEES3_RKS4_(float noundef, ptr noundef nonnull align 4 dereferenceable(12)) local_unnamed_addr #4

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local { <2 x float>, float } @_ZN3glmngIfLNS_9qualifierE0EEENS_3vecILi3ET_XT0_EEERKS4_(ptr noundef nonnull align 4 dereferenceable(12)) local_unnamed_addr #4

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN3glm3vecILi3EfLNS_9qualifierE0EEC2Efff(ptr noundef nonnull align 4 dereferenceable(12), float noundef, float noundef, float noundef) unnamed_addr #5 align 2

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN5Scene10loadLightsERKN8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerEEE(ptr noundef nonnull align 8 dereferenceable(792) %0, ptr noundef nonnull align 8 dereferenceable(16) %1) local_unnamed_addr #8 align 2 personality ptr @__gxx_personality_v0 {
  %3 = alloca %"class.nlohmann::basic_json", align 8
  %4 = alloca %"class.nlohmann::basic_json", align 8
  %5 = alloca %"struct.glm::vec", align 4
  %6 = alloca %"class.nlohmann::basic_json", align 8
  %7 = alloca %"struct.glm::vec", align 4
  %8 = alloca %"struct.glm::mat", align 4
  %9 = alloca %"struct.glm::mat", align 4
  %10 = alloca %"struct.glm::vec", align 8
  %11 = alloca %"struct.glm::vec", align 8
  %12 = alloca %"struct.glm::vec", align 4
  %13 = alloca %"struct.glm::vec", align 4
  %14 = alloca %"struct.glm::mat", align 4
  %15 = alloca %"class.nlohmann::basic_json", align 8
  %16 = alloca %"class.nlohmann::basic_json", align 8
  %17 = alloca %"struct.glm::vec", align 4
  %18 = alloca %"class.nlohmann::basic_json", align 8
  %19 = alloca %"struct.glm::vec", align 4
  %20 = alloca %"struct.glm::mat", align 4
  %21 = alloca %"struct.glm::vec", align 4
  %22 = alloca %"struct.glm::mat", align 4
  %23 = alloca %"struct.glm::vec", align 8
  %24 = alloca %"struct.glm::vec", align 4
  %25 = alloca %"struct.glm::vec", align 4
  %26 = alloca %"struct.glm::mat", align 4
  %27 = alloca %"struct.glm::vec", align 8
  %28 = alloca %"struct.glm::vec", align 4
  %29 = alloca %"struct.glm::vec", align 4
  %30 = alloca %"struct.glm::mat", align 4
  %31 = alloca %"struct.glm::vec", align 8
  %32 = alloca %"struct.glm::vec", align 4
  %33 = alloca %"struct.glm::vec", align 4
  %34 = alloca %"struct.glm::mat", align 4
  %35 = alloca %"struct.glm::vec", align 8
  %36 = alloca %"struct.glm::vec", align 4
  %37 = alloca %"struct.glm::vec", align 4
  %38 = alloca %"struct.glm::mat", align 4
  %39 = alloca %"struct.glm::vec", align 8
  %40 = alloca %"struct.glm::vec", align 4
  %41 = alloca %"struct.glm::vec", align 4
  %42 = alloca %"struct.glm::mat", align 4
  %43 = alloca %"struct.glm::vec", align 8
  %44 = alloca %"struct.glm::vec", align 4
  %45 = alloca %"struct.glm::vec", align 4
  %46 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.42)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %3) #11
  %47 = tail call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEixIKcEERKSA_PT_(ptr noundef nonnull align 8 dereferenceable(16) %1, ptr noundef nonnull @.str.43)
  call void @_ZN8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEC2ERKSA_(ptr noundef nonnull align 8 dereferenceable(16) %3, ptr noundef nonnull align 8 dereferenceable(16) %47)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %4) #11
  %48 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEixIKcEERSA_PT_(ptr noundef nonnull align 8 dereferenceable(16) %3, ptr noundef nonnull @.str.44)
          to label %49 unwind label %143

49:                                               ; preds = %2
  invoke void @_ZN8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEC2ERKSA_(ptr noundef nonnull align 8 dereferenceable(16) %4, ptr noundef nonnull align 8 dereferenceable(16) %48)
          to label %50 unwind label %143

50:                                               ; preds = %49
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %5) #11
  %51 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %4, i64 noundef 0)
          to label %52 unwind label %145

52:                                               ; preds = %50
  %53 = invoke noundef float @_ZNK8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEcvT_IfTnNSt9enable_ifIXaaaaaaaantsr3std10is_pointerISB_EE5valuentsr3std7is_sameISB_NS_6detail8json_refISA_EEEE5valuentsr3std7is_sameISB_cEE5valuentsr6detail13is_basic_jsonISB_EE5valuentsr3std7is_sameISB_St16initializer_listIcEEE5valueEiE4typeELi0EEEv(ptr noundef nonnull align 8 dereferenceable(16) %51)
          to label %54 unwind label %145

54:                                               ; preds = %52
  %55 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %4, i64 noundef 1)
          to label %56 unwind label %145

56:                                               ; preds = %54
  %57 = invoke noundef float @_ZNK8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEcvT_IfTnNSt9enable_ifIXaaaaaaaantsr3std10is_pointerISB_EE5valuentsr3std7is_sameISB_NS_6detail8json_refISA_EEEE5valuentsr3std7is_sameISB_cEE5valuentsr6detail13is_basic_jsonISB_EE5valuentsr3std7is_sameISB_St16initializer_listIcEEE5valueEiE4typeELi0EEEv(ptr noundef nonnull align 8 dereferenceable(16) %55)
          to label %58 unwind label %145

58:                                               ; preds = %56
  %59 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %4, i64 noundef 2)
          to label %60 unwind label %145

60:                                               ; preds = %58
  %61 = invoke noundef float @_ZNK8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEcvT_IfTnNSt9enable_ifIXaaaaaaaantsr3std10is_pointerISB_EE5valuentsr3std7is_sameISB_NS_6detail8json_refISA_EEEE5valuentsr3std7is_sameISB_cEE5valuentsr6detail13is_basic_jsonISB_EE5valuentsr3std7is_sameISB_St16initializer_listIcEEE5valueEiE4typeELi0EEEv(ptr noundef nonnull align 8 dereferenceable(16) %59)
          to label %62 unwind label %145

62:                                               ; preds = %60
  call void @_ZN3glm3vecILi3EfLNS_9qualifierE0EEC2Efff(ptr noundef nonnull align 4 dereferenceable(12) %5, float noundef %53, float noundef %57, float noundef %61)
  %63 = getelementptr inbounds i8, ptr %0, i64 484
  %64 = getelementptr inbounds i8, ptr %0, i64 584
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(12) %64, ptr noundef nonnull align 4 dereferenceable(12) %5, i64 12, i1 false), !tbaa.struct !5
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %5) #11
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %6) #11
  %65 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEixIKcEERSA_PT_(ptr noundef nonnull align 8 dereferenceable(16) %3, ptr noundef nonnull @.str.45)
          to label %66 unwind label %147

66:                                               ; preds = %62
  invoke void @_ZN8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEC2ERKSA_(ptr noundef nonnull align 8 dereferenceable(16) %6, ptr noundef nonnull align 8 dereferenceable(16) %65)
          to label %67 unwind label %147

67:                                               ; preds = %66
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %7) #11
  %68 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %6, i64 noundef 0)
          to label %69 unwind label %149

69:                                               ; preds = %67
  %70 = invoke noundef float @_ZNK8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEcvT_IfTnNSt9enable_ifIXaaaaaaaantsr3std10is_pointerISB_EE5valuentsr3std7is_sameISB_NS_6detail8json_refISA_EEEE5valuentsr3std7is_sameISB_cEE5valuentsr6detail13is_basic_jsonISB_EE5valuentsr3std7is_sameISB_St16initializer_listIcEEE5valueEiE4typeELi0EEEv(ptr noundef nonnull align 8 dereferenceable(16) %68)
          to label %71 unwind label %149

71:                                               ; preds = %69
  %72 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %6, i64 noundef 1)
          to label %73 unwind label %149

73:                                               ; preds = %71
  %74 = invoke noundef float @_ZNK8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEcvT_IfTnNSt9enable_ifIXaaaaaaaantsr3std10is_pointerISB_EE5valuentsr3std7is_sameISB_NS_6detail8json_refISA_EEEE5valuentsr3std7is_sameISB_cEE5valuentsr6detail13is_basic_jsonISB_EE5valuentsr3std7is_sameISB_St16initializer_listIcEEE5valueEiE4typeELi0EEEv(ptr noundef nonnull align 8 dereferenceable(16) %72)
          to label %75 unwind label %149

75:                                               ; preds = %73
  %76 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %6, i64 noundef 2)
          to label %77 unwind label %149

77:                                               ; preds = %75
  %78 = invoke noundef float @_ZNK8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEcvT_IfTnNSt9enable_ifIXaaaaaaaantsr3std10is_pointerISB_EE5valuentsr3std7is_sameISB_NS_6detail8json_refISA_EEEE5valuentsr3std7is_sameISB_cEE5valuentsr6detail13is_basic_jsonISB_EE5valuentsr3std7is_sameISB_St16initializer_listIcEEE5valueEiE4typeELi0EEEv(ptr noundef nonnull align 8 dereferenceable(16) %76)
          to label %79 unwind label %149

79:                                               ; preds = %77
  call void @_ZN3glm3vecILi3EfLNS_9qualifierE0EEC2Efff(ptr noundef nonnull align 4 dereferenceable(12) %7, float noundef %70, float noundef %74, float noundef %78)
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %63, ptr noundef nonnull align 4 dereferenceable(12) %7, i64 12, i1 false), !tbaa.struct !5
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %7) #11
  %80 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEixIKcEERSA_PT_(ptr noundef nonnull align 8 dereferenceable(16) %3, ptr noundef nonnull @.str.46)
          to label %81 unwind label %151

81:                                               ; preds = %79
  %82 = invoke noundef float @_ZNK8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEcvT_IfTnNSt9enable_ifIXaaaaaaaantsr3std10is_pointerISB_EE5valuentsr3std7is_sameISB_NS_6detail8json_refISA_EEEE5valuentsr3std7is_sameISB_cEE5valuentsr6detail13is_basic_jsonISB_EE5valuentsr3std7is_sameISB_St16initializer_listIcEEE5valueEiE4typeELi0EEEv(ptr noundef nonnull align 8 dereferenceable(16) %80)
          to label %83 unwind label %151

83:                                               ; preds = %81
  %84 = getelementptr inbounds i8, ptr %0, i64 724
  store float %82, ptr %84, align 4, !tbaa !9
  %85 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEixIKcEERSA_PT_(ptr noundef nonnull align 8 dereferenceable(16) %3, ptr noundef nonnull @.str.47)
          to label %86 unwind label %151

86:                                               ; preds = %83
  %87 = invoke noundef float @_ZNK8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEcvT_IfTnNSt9enable_ifIXaaaaaaaantsr3std10is_pointerISB_EE5valuentsr3std7is_sameISB_NS_6detail8json_refISA_EEEE5valuentsr3std7is_sameISB_cEE5valuentsr6detail13is_basic_jsonISB_EE5valuentsr3std7is_sameISB_St16initializer_listIcEEE5valueEiE4typeELi0EEEv(ptr noundef nonnull align 8 dereferenceable(16) %85)
          to label %88 unwind label %151

88:                                               ; preds = %86
  %89 = getelementptr inbounds i8, ptr %0, i64 564
  store float %87, ptr %89, align 4, !tbaa !29
  %90 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEixIKcEERSA_PT_(ptr noundef nonnull align 8 dereferenceable(16) %3, ptr noundef nonnull @.str.24)
          to label %91 unwind label %151

91:                                               ; preds = %88
  %92 = invoke noundef float @_ZNK8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEcvT_IfTnNSt9enable_ifIXaaaaaaaantsr3std10is_pointerISB_EE5valuentsr3std7is_sameISB_NS_6detail8json_refISA_EEEE5valuentsr3std7is_sameISB_cEE5valuentsr6detail13is_basic_jsonISB_EE5valuentsr3std7is_sameISB_St16initializer_listIcEEE5valueEiE4typeELi0EEEv(ptr noundef nonnull align 8 dereferenceable(16) %90)
          to label %93 unwind label %151

93:                                               ; preds = %91
  %94 = getelementptr inbounds i8, ptr %0, i64 568
  store float %92, ptr %94, align 8, !tbaa !30
  %95 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEixIKcEERSA_PT_(ptr noundef nonnull align 8 dereferenceable(16) %3, ptr noundef nonnull @.str.23)
          to label %96 unwind label %151

96:                                               ; preds = %93
  %97 = invoke noundef float @_ZNK8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEcvT_IfTnNSt9enable_ifIXaaaaaaaantsr3std10is_pointerISB_EE5valuentsr3std7is_sameISB_NS_6detail8json_refISA_EEEE5valuentsr3std7is_sameISB_cEE5valuentsr6detail13is_basic_jsonISB_EE5valuentsr3std7is_sameISB_St16initializer_listIcEEE5valueEiE4typeELi0EEEv(ptr noundef nonnull align 8 dereferenceable(16) %95)
          to label %98 unwind label %151

98:                                               ; preds = %96
  %99 = getelementptr inbounds i8, ptr %0, i64 572
  store float %97, ptr %99, align 4, !tbaa !31
  %100 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEixIKcEERSA_PT_(ptr noundef nonnull align 8 dereferenceable(16) %3, ptr noundef nonnull @.str.48)
          to label %101 unwind label %151

101:                                              ; preds = %98
  %102 = invoke noundef float @_ZNK8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEcvT_IfTnNSt9enable_ifIXaaaaaaaantsr3std10is_pointerISB_EE5valuentsr3std7is_sameISB_NS_6detail8json_refISA_EEEE5valuentsr3std7is_sameISB_cEE5valuentsr6detail13is_basic_jsonISB_EE5valuentsr3std7is_sameISB_St16initializer_listIcEEE5valueEiE4typeELi0EEEv(ptr noundef nonnull align 8 dereferenceable(16) %100)
          to label %103 unwind label %151

103:                                              ; preds = %101
  %104 = getelementptr inbounds i8, ptr %0, i64 728
  store float %102, ptr %104, align 8, !tbaa !32
  %105 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEixIKcEERSA_PT_(ptr noundef nonnull align 8 dereferenceable(16) %3, ptr noundef nonnull @.str.49)
          to label %106 unwind label %151

106:                                              ; preds = %103
  %107 = invoke noundef i32 @_ZNK8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEcvT_IjTnNSt9enable_ifIXaaaaaaaantsr3std10is_pointerISB_EE5valuentsr3std7is_sameISB_NS_6detail8json_refISA_EEEE5valuentsr3std7is_sameISB_cEE5valuentsr6detail13is_basic_jsonISB_EE5valuentsr3std7is_sameISB_St16initializer_listIcEEE5valueEiE4typeELi0EEEv(ptr noundef nonnull align 8 dereferenceable(16) %105)
          to label %108 unwind label %151

108:                                              ; preds = %106
  %109 = getelementptr inbounds i8, ptr %0, i64 576
  store i32 %107, ptr %109, align 8, !tbaa !33
  %110 = load float, ptr %104, align 8, !tbaa !32
  %111 = fneg float %110
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %8) #11
  %112 = load float, ptr %94, align 8, !tbaa !30
  %113 = load float, ptr %99, align 4, !tbaa !31
  invoke void @_ZN3glm5orthoIfEENS_3matILi4ELi4ET_LNS_9qualifierE0EEES2_S2_S2_S2_S2_S2_(ptr dead_on_unwind nonnull writable sret(%"struct.glm::mat") align 4 %8, float noundef %110, float noundef %111, float noundef %111, float noundef %110, float noundef %112, float noundef %113)
          to label %114 unwind label %153

114:                                              ; preds = %108
  %115 = getelementptr inbounds i8, ptr %0, i64 496
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(64) %115, ptr noundef nonnull align 4 dereferenceable(64) %8, i64 64, i1 false), !tbaa.struct !34
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %8) #11
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %9) #11
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %10) #11
  %116 = load float, ptr %84, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %11) #11
  %117 = invoke { <2 x float>, float } @_ZN3glmngIfLNS_9qualifierE0EEENS_3vecILi3ET_XT0_EEERKS4_(ptr noundef nonnull align 4 dereferenceable(12) %64)
          to label %118 unwind label %155

118:                                              ; preds = %114
  %.fca.0.extract43 = extractvalue { <2 x float>, float } %117, 0
  %.fca.1.extract44 = extractvalue { <2 x float>, float } %117, 1
  store <2 x float> %.fca.0.extract43, ptr %11, align 8
  %.sroa.246.0..sroa_idx = getelementptr inbounds i8, ptr %11, i64 8
  store float %.fca.1.extract44, ptr %.sroa.246.0..sroa_idx, align 8
  %119 = invoke { <2 x float>, float } @_ZN3glmmlIfLNS_9qualifierE0EEENS_3vecILi3ET_XT0_EEES3_RKS4_(float noundef %116, ptr noundef nonnull align 4 dereferenceable(12) %11)
          to label %120 unwind label %155

120:                                              ; preds = %118
  %.fca.0.extract39 = extractvalue { <2 x float>, float } %119, 0
  %.fca.1.extract40 = extractvalue { <2 x float>, float } %119, 1
  store <2 x float> %.fca.0.extract39, ptr %10, align 8
  %.sroa.242.0..sroa_idx = getelementptr inbounds i8, ptr %10, i64 8
  store float %.fca.1.extract40, ptr %.sroa.242.0..sroa_idx, align 8
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %12) #11
  call void @_ZN3glm3vecILi3EfLNS_9qualifierE0EEC2Efff(ptr noundef nonnull align 4 dereferenceable(12) %12, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 0.000000e+00)
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %13) #11
  call void @_ZN3glm3vecILi3EfLNS_9qualifierE0EEC2Efff(ptr noundef nonnull align 4 dereferenceable(12) %13, float noundef 0.000000e+00, float noundef 1.000000e+00, float noundef 0.000000e+00)
  invoke void @_ZN3glm6lookAtIfLNS_9qualifierE0EEENS_3matILi4ELi4ET_XT0_EEERKNS_3vecILi3ES3_XT0_EEES8_S8_(ptr dead_on_unwind nonnull writable sret(%"struct.glm::mat") align 4 %9, ptr noundef nonnull align 4 dereferenceable(12) %10, ptr noundef nonnull align 4 dereferenceable(12) %12, ptr noundef nonnull align 4 dereferenceable(12) %13)
          to label %121 unwind label %157

121:                                              ; preds = %120
  %122 = getelementptr inbounds i8, ptr %0, i64 596
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(64) %122, ptr noundef nonnull align 4 dereferenceable(64) %9, i64 64, i1 false), !tbaa.struct !34
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %13) #11
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %12) #11
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %11) #11
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %10) #11
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %9) #11
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %14) #11
  invoke void @_ZN3glmmlIfLNS_9qualifierE0EEENS_3matILi4ELi4ET_XT0_EEERKS4_S6_(ptr dead_on_unwind nonnull writable sret(%"struct.glm::mat") align 4 %14, ptr noundef nonnull align 4 dereferenceable(64) %115, ptr noundef nonnull align 4 dereferenceable(64) %122)
          to label %123 unwind label %160

123:                                              ; preds = %121
  %124 = getelementptr inbounds i8, ptr %0, i64 660
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(64) %124, ptr noundef nonnull align 4 dereferenceable(64) %14, i64 64, i1 false), !tbaa.struct !34
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %14) #11
  call void @_ZN8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %6) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %6) #11
  call void @_ZN8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %4) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %4) #11
  call void @_ZN8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %3) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %3) #11
  %125 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.50)
  %126 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEixIKcEERKSA_PT_(ptr noundef nonnull align 8 dereferenceable(16) %1, ptr noundef nonnull @.str.51)
  %127 = call noundef i64 @_ZNK8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %126) #11
  %128 = trunc i64 %127 to i32
  %129 = getelementptr inbounds i8, ptr %0, i64 432
  store i32 %128, ptr %129, align 8, !tbaa !35
  %130 = and i64 %127, 4294967295
  %131 = mul nuw nsw i64 %130, 496
  %132 = call noalias noundef nonnull ptr @_Znam(i64 noundef %131) #12
  %133 = icmp eq i64 %130, 0
  br i1 %133, label %.loopexit, label %134

134:                                              ; preds = %123
  %135 = getelementptr inbounds %struct.PointLight, ptr %132, i64 %130
  br label %136

136:                                              ; preds = %138, %134
  %137 = phi ptr [ %132, %134 ], [ %139, %138 ]
  invoke void @_ZN10PointLightC2Ev(ptr noundef nonnull align 4 dereferenceable(496) %137)
          to label %138 unwind label %166

138:                                              ; preds = %136
  %139 = getelementptr inbounds i8, ptr %137, i64 496
  %140 = icmp eq ptr %139, %135
  br i1 %140, label %.loopexit.loopexit, label %136

.loopexit.loopexit:                               ; preds = %138
  %.pre = load i32, ptr %129, align 8, !tbaa !35
  br label %.loopexit

.loopexit:                                        ; preds = %.loopexit.loopexit, %123
  %141 = phi i32 [ %.pre, %.loopexit.loopexit ], [ %128, %123 ]
  %142 = getelementptr inbounds i8, ptr %0, i64 736
  store ptr %132, ptr %142, align 8, !tbaa !36
  %.not = icmp eq i32 %141, 0
  br i1 %.not, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %.loopexit
  %.sroa.220.0..sroa_idx = getelementptr inbounds i8, ptr %23, i64 8
  %.sroa.216.0..sroa_idx = getelementptr inbounds i8, ptr %27, i64 8
  %.sroa.212.0..sroa_idx = getelementptr inbounds i8, ptr %31, i64 8
  %.sroa.28.0..sroa_idx = getelementptr inbounds i8, ptr %35, i64 8
  %.sroa.24.0..sroa_idx = getelementptr inbounds i8, ptr %39, i64 8
  %.sroa.2.0..sroa_idx = getelementptr inbounds i8, ptr %43, i64 8
  br label %168

._crit_edge:                                      ; preds = %268, %.loopexit
  ret void

143:                                              ; preds = %49, %2
  %144 = landingpad { ptr, i32 }
          cleanup
  br label %165

145:                                              ; preds = %60, %58, %56, %54, %52, %50
  %146 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %5) #11
  br label %164

147:                                              ; preds = %66, %62
  %148 = landingpad { ptr, i32 }
          cleanup
  br label %163

149:                                              ; preds = %77, %75, %73, %71, %69, %67
  %150 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %7) #11
  br label %162

151:                                              ; preds = %106, %103, %101, %98, %96, %93, %91, %88, %86, %83, %81, %79
  %152 = landingpad { ptr, i32 }
          cleanup
  br label %162

153:                                              ; preds = %108
  %154 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %8) #11
  br label %162

155:                                              ; preds = %118, %114
  %156 = landingpad { ptr, i32 }
          cleanup
  br label %159

157:                                              ; preds = %120
  %158 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %13) #11
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %12) #11
  br label %159

159:                                              ; preds = %157, %155
  %.pn = phi { ptr, i32 } [ %158, %157 ], [ %156, %155 ]
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %11) #11
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %10) #11
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %9) #11
  br label %162

160:                                              ; preds = %121
  %161 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %14) #11
  br label %162

162:                                              ; preds = %153, %159, %160, %151, %149
  %.pn81.pn = phi { ptr, i32 } [ %152, %151 ], [ %150, %149 ], [ %161, %160 ], [ %.pn, %159 ], [ %154, %153 ]
  call void @_ZN8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %6) #11
  br label %163

163:                                              ; preds = %162, %147
  %.pn81.pn.pn = phi { ptr, i32 } [ %.pn81.pn, %162 ], [ %148, %147 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %6) #11
  br label %164

164:                                              ; preds = %163, %145
  %.pn81.pn.pn.pn = phi { ptr, i32 } [ %.pn81.pn.pn, %163 ], [ %146, %145 ]
  call void @_ZN8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %4) #11
  br label %165

165:                                              ; preds = %164, %143
  %.pn81.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn81.pn.pn.pn, %164 ], [ %144, %143 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %4) #11
  call void @_ZN8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %3) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %3) #11
  br label %321

166:                                              ; preds = %136
  %167 = landingpad { ptr, i32 }
          cleanup
  call void @_ZdaPvm(ptr noundef nonnull %132, i64 noundef %131) #13
  br label %321

168:                                              ; preds = %.lr.ph, %268
  %indvars.iv = phi i64 [ 0, %.lr.ph ], [ %indvars.iv.next, %268 ]
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %15) #11
  %169 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEixIKcEERKSA_PT_(ptr noundef nonnull align 8 dereferenceable(16) %1, ptr noundef nonnull @.str.51)
  %170 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %169, i64 noundef %indvars.iv)
  call void @_ZN8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEC2ERKSA_(ptr noundef nonnull align 8 dereferenceable(16) %15, ptr noundef nonnull align 8 dereferenceable(16) %170)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %16) #11
  %171 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEixIKcEERSA_PT_(ptr noundef nonnull align 8 dereferenceable(16) %15, ptr noundef nonnull @.str.52)
          to label %172 unwind label %274

172:                                              ; preds = %168
  invoke void @_ZN8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEC2ERKSA_(ptr noundef nonnull align 8 dereferenceable(16) %16, ptr noundef nonnull align 8 dereferenceable(16) %171)
          to label %173 unwind label %274

173:                                              ; preds = %172
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %17) #11
  %174 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %16, i64 noundef 0)
          to label %175 unwind label %276

175:                                              ; preds = %173
  %176 = invoke noundef float @_ZNK8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEcvT_IfTnNSt9enable_ifIXaaaaaaaantsr3std10is_pointerISB_EE5valuentsr3std7is_sameISB_NS_6detail8json_refISA_EEEE5valuentsr3std7is_sameISB_cEE5valuentsr6detail13is_basic_jsonISB_EE5valuentsr3std7is_sameISB_St16initializer_listIcEEE5valueEiE4typeELi0EEEv(ptr noundef nonnull align 8 dereferenceable(16) %174)
          to label %177 unwind label %276

177:                                              ; preds = %175
  %178 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %16, i64 noundef 1)
          to label %179 unwind label %276

179:                                              ; preds = %177
  %180 = invoke noundef float @_ZNK8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEcvT_IfTnNSt9enable_ifIXaaaaaaaantsr3std10is_pointerISB_EE5valuentsr3std7is_sameISB_NS_6detail8json_refISA_EEEE5valuentsr3std7is_sameISB_cEE5valuentsr6detail13is_basic_jsonISB_EE5valuentsr3std7is_sameISB_St16initializer_listIcEEE5valueEiE4typeELi0EEEv(ptr noundef nonnull align 8 dereferenceable(16) %178)
          to label %181 unwind label %276

181:                                              ; preds = %179
  %182 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %16, i64 noundef 2)
          to label %183 unwind label %276

183:                                              ; preds = %181
  %184 = invoke noundef float @_ZNK8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEcvT_IfTnNSt9enable_ifIXaaaaaaaantsr3std10is_pointerISB_EE5valuentsr3std7is_sameISB_NS_6detail8json_refISA_EEEE5valuentsr3std7is_sameISB_cEE5valuentsr6detail13is_basic_jsonISB_EE5valuentsr3std7is_sameISB_St16initializer_listIcEEE5valueEiE4typeELi0EEEv(ptr noundef nonnull align 8 dereferenceable(16) %182)
          to label %185 unwind label %276

185:                                              ; preds = %183
  call void @_ZN3glm3vecILi3EfLNS_9qualifierE0EEC2Efff(ptr noundef nonnull align 4 dereferenceable(12) %17, float noundef %176, float noundef %180, float noundef %184)
  %186 = load ptr, ptr %142, align 8, !tbaa !36
  %187 = getelementptr inbounds %struct.PointLight, ptr %186, i64 %indvars.iv, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %187, ptr noundef nonnull align 4 dereferenceable(12) %17, i64 12, i1 false), !tbaa.struct !5
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %17) #11
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %18) #11
  %188 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEixIKcEERSA_PT_(ptr noundef nonnull align 8 dereferenceable(16) %15, ptr noundef nonnull @.str.45)
          to label %189 unwind label %278

189:                                              ; preds = %185
  invoke void @_ZN8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEC2ERKSA_(ptr noundef nonnull align 8 dereferenceable(16) %18, ptr noundef nonnull align 8 dereferenceable(16) %188)
          to label %190 unwind label %278

190:                                              ; preds = %189
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %19) #11
  %191 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %18, i64 noundef 0)
          to label %192 unwind label %280

192:                                              ; preds = %190
  %193 = invoke noundef float @_ZNK8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEcvT_IfTnNSt9enable_ifIXaaaaaaaantsr3std10is_pointerISB_EE5valuentsr3std7is_sameISB_NS_6detail8json_refISA_EEEE5valuentsr3std7is_sameISB_cEE5valuentsr6detail13is_basic_jsonISB_EE5valuentsr3std7is_sameISB_St16initializer_listIcEEE5valueEiE4typeELi0EEEv(ptr noundef nonnull align 8 dereferenceable(16) %191)
          to label %194 unwind label %280

194:                                              ; preds = %192
  %195 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %18, i64 noundef 1)
          to label %196 unwind label %280

196:                                              ; preds = %194
  %197 = invoke noundef float @_ZNK8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEcvT_IfTnNSt9enable_ifIXaaaaaaaantsr3std10is_pointerISB_EE5valuentsr3std7is_sameISB_NS_6detail8json_refISA_EEEE5valuentsr3std7is_sameISB_cEE5valuentsr6detail13is_basic_jsonISB_EE5valuentsr3std7is_sameISB_St16initializer_listIcEEE5valueEiE4typeELi0EEEv(ptr noundef nonnull align 8 dereferenceable(16) %195)
          to label %198 unwind label %280

198:                                              ; preds = %196
  %199 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %18, i64 noundef 2)
          to label %200 unwind label %280

200:                                              ; preds = %198
  %201 = invoke noundef float @_ZNK8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEcvT_IfTnNSt9enable_ifIXaaaaaaaantsr3std10is_pointerISB_EE5valuentsr3std7is_sameISB_NS_6detail8json_refISA_EEEE5valuentsr3std7is_sameISB_cEE5valuentsr6detail13is_basic_jsonISB_EE5valuentsr3std7is_sameISB_St16initializer_listIcEEE5valueEiE4typeELi0EEEv(ptr noundef nonnull align 8 dereferenceable(16) %199)
          to label %202 unwind label %280

202:                                              ; preds = %200
  call void @_ZN3glm3vecILi3EfLNS_9qualifierE0EEC2Efff(ptr noundef nonnull align 4 dereferenceable(12) %19, float noundef %193, float noundef %197, float noundef %201)
  %203 = load ptr, ptr %142, align 8, !tbaa !36
  %204 = getelementptr inbounds %struct.PointLight, ptr %203, i64 %indvars.iv
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %204, ptr noundef nonnull align 4 dereferenceable(12) %19, i64 12, i1 false), !tbaa.struct !5
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %19) #11
  %205 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEixIKcEERSA_PT_(ptr noundef nonnull align 8 dereferenceable(16) %15, ptr noundef nonnull @.str.47)
          to label %206 unwind label %282

206:                                              ; preds = %202
  %207 = invoke noundef float @_ZNK8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEcvT_IfTnNSt9enable_ifIXaaaaaaaantsr3std10is_pointerISB_EE5valuentsr3std7is_sameISB_NS_6detail8json_refISA_EEEE5valuentsr3std7is_sameISB_cEE5valuentsr6detail13is_basic_jsonISB_EE5valuentsr3std7is_sameISB_St16initializer_listIcEEE5valueEiE4typeELi0EEEv(ptr noundef nonnull align 8 dereferenceable(16) %205)
          to label %208 unwind label %282

208:                                              ; preds = %206
  %209 = load ptr, ptr %142, align 8, !tbaa !36
  %210 = getelementptr inbounds %struct.PointLight, ptr %209, i64 %indvars.iv, i32 0, i32 3
  store float %207, ptr %210, align 4, !tbaa !29
  %211 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEixIKcEERSA_PT_(ptr noundef nonnull align 8 dereferenceable(16) %15, ptr noundef nonnull @.str.24)
          to label %212 unwind label %282

212:                                              ; preds = %208
  %213 = invoke noundef float @_ZNK8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEcvT_IfTnNSt9enable_ifIXaaaaaaaantsr3std10is_pointerISB_EE5valuentsr3std7is_sameISB_NS_6detail8json_refISA_EEEE5valuentsr3std7is_sameISB_cEE5valuentsr6detail13is_basic_jsonISB_EE5valuentsr3std7is_sameISB_St16initializer_listIcEEE5valueEiE4typeELi0EEEv(ptr noundef nonnull align 8 dereferenceable(16) %211)
          to label %214 unwind label %282

214:                                              ; preds = %212
  %215 = load ptr, ptr %142, align 8, !tbaa !36
  %216 = getelementptr inbounds %struct.PointLight, ptr %215, i64 %indvars.iv, i32 0, i32 4
  store float %213, ptr %216, align 4, !tbaa !30
  %217 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEixIKcEERSA_PT_(ptr noundef nonnull align 8 dereferenceable(16) %15, ptr noundef nonnull @.str.23)
          to label %218 unwind label %282

218:                                              ; preds = %214
  %219 = invoke noundef float @_ZNK8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEcvT_IfTnNSt9enable_ifIXaaaaaaaantsr3std10is_pointerISB_EE5valuentsr3std7is_sameISB_NS_6detail8json_refISA_EEEE5valuentsr3std7is_sameISB_cEE5valuentsr6detail13is_basic_jsonISB_EE5valuentsr3std7is_sameISB_St16initializer_listIcEEE5valueEiE4typeELi0EEEv(ptr noundef nonnull align 8 dereferenceable(16) %217)
          to label %220 unwind label %282

220:                                              ; preds = %218
  %221 = load ptr, ptr %142, align 8, !tbaa !36
  %222 = getelementptr inbounds %struct.PointLight, ptr %221, i64 %indvars.iv, i32 0, i32 5
  store float %219, ptr %222, align 4, !tbaa !31
  %223 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEixIKcEERSA_PT_(ptr noundef nonnull align 8 dereferenceable(16) %15, ptr noundef nonnull @.str.49)
          to label %224 unwind label %282

224:                                              ; preds = %220
  %225 = invoke noundef i32 @_ZNK8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEEcvT_IjTnNSt9enable_ifIXaaaaaaaantsr3std10is_pointerISB_EE5valuentsr3std7is_sameISB_NS_6detail8json_refISA_EEEE5valuentsr3std7is_sameISB_cEE5valuentsr6detail13is_basic_jsonISB_EE5valuentsr3std7is_sameISB_St16initializer_listIcEEE5valueEiE4typeELi0EEEv(ptr noundef nonnull align 8 dereferenceable(16) %223)
          to label %226 unwind label %282

226:                                              ; preds = %224
  %227 = load ptr, ptr %142, align 8, !tbaa !36
  %228 = getelementptr inbounds %struct.PointLight, ptr %227, i64 %indvars.iv, i32 0, i32 6
  store i32 %225, ptr %228, align 4, !tbaa !33
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %20) #11
  %229 = call noundef float @_ZN3glm7radiansIfEET_S1_(float noundef 9.000000e+01)
  %230 = load ptr, ptr %142, align 8, !tbaa !36
  %231 = getelementptr inbounds %struct.PointLight, ptr %230, i64 %indvars.iv
  %232 = getelementptr inbounds i8, ptr %231, i64 84
  %233 = load float, ptr %232, align 4, !tbaa !30
  %234 = getelementptr inbounds i8, ptr %231, i64 88
  %235 = load float, ptr %234, align 4, !tbaa !31
  invoke void @_ZN3glm11perspectiveIfEENS_3matILi4ELi4ET_LNS_9qualifierE0EEES2_S2_S2_S2_(ptr dead_on_unwind nonnull writable sret(%"struct.glm::mat") align 4 %20, float noundef %229, float noundef 1.000000e+00, float noundef %233, float noundef %235)
          to label %236 unwind label %284

236:                                              ; preds = %226
  %237 = load ptr, ptr %142, align 8, !tbaa !36
  %238 = getelementptr inbounds %struct.PointLight, ptr %237, i64 %indvars.iv, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(64) %238, ptr noundef nonnull align 4 dereferenceable(64) %20, i64 64, i1 false), !tbaa.struct !34
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %20) #11
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %21) #11
  %239 = load ptr, ptr %142, align 8, !tbaa !36
  %240 = getelementptr inbounds %struct.PointLight, ptr %239, i64 %indvars.iv, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %21, ptr noundef nonnull align 4 dereferenceable(12) %240, i64 12, i1 false), !tbaa.struct !5
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %22) #11
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %23) #11
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %24) #11
  call void @_ZN3glm3vecILi3EfLNS_9qualifierE0EEC2IdddEET_T0_T1_(ptr noundef nonnull align 4 dereferenceable(12) %24, double noundef 1.000000e+00, double noundef 0.000000e+00, double noundef 0.000000e+00)
  %241 = invoke { <2 x float>, float } @_ZN3glmplIfLNS_9qualifierE0EEENS_3vecILi3ET_XT0_EEERKS4_S6_(ptr noundef nonnull align 4 dereferenceable(12) %21, ptr noundef nonnull align 4 dereferenceable(12) %24)
          to label %242 unwind label %286

242:                                              ; preds = %236
  %.fca.0.extract17 = extractvalue { <2 x float>, float } %241, 0
  %.fca.1.extract18 = extractvalue { <2 x float>, float } %241, 1
  store <2 x float> %.fca.0.extract17, ptr %23, align 8
  store float %.fca.1.extract18, ptr %.sroa.220.0..sroa_idx, align 8
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %25) #11
  call void @_ZN3glm3vecILi3EfLNS_9qualifierE0EEC2IdddEET_T0_T1_(ptr noundef nonnull align 4 dereferenceable(12) %25, double noundef 0.000000e+00, double noundef -1.000000e+00, double noundef 0.000000e+00)
  invoke void @_ZN3glm6lookAtIfLNS_9qualifierE0EEENS_3matILi4ELi4ET_XT0_EEERKNS_3vecILi3ES3_XT0_EEES8_S8_(ptr dead_on_unwind nonnull writable sret(%"struct.glm::mat") align 4 %22, ptr noundef nonnull align 4 dereferenceable(12) %21, ptr noundef nonnull align 4 dereferenceable(12) %23, ptr noundef nonnull align 4 dereferenceable(12) %25)
          to label %243 unwind label %288

243:                                              ; preds = %242
  %244 = load ptr, ptr %142, align 8, !tbaa !36
  %245 = getelementptr inbounds %struct.PointLight, ptr %244, i64 %indvars.iv, i32 2
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(64) %245, ptr noundef nonnull align 4 dereferenceable(64) %22, i64 64, i1 false), !tbaa.struct !34
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %25) #11
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %24) #11
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %23) #11
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %22) #11
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %26) #11
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %27) #11
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %28) #11
  call void @_ZN3glm3vecILi3EfLNS_9qualifierE0EEC2IdddEET_T0_T1_(ptr noundef nonnull align 4 dereferenceable(12) %28, double noundef -1.000000e+00, double noundef 0.000000e+00, double noundef 0.000000e+00)
  %246 = invoke { <2 x float>, float } @_ZN3glmplIfLNS_9qualifierE0EEENS_3vecILi3ET_XT0_EEERKS4_S6_(ptr noundef nonnull align 4 dereferenceable(12) %21, ptr noundef nonnull align 4 dereferenceable(12) %28)
          to label %247 unwind label %291

247:                                              ; preds = %243
  %.fca.0.extract13 = extractvalue { <2 x float>, float } %246, 0
  %.fca.1.extract14 = extractvalue { <2 x float>, float } %246, 1
  store <2 x float> %.fca.0.extract13, ptr %27, align 8
  store float %.fca.1.extract14, ptr %.sroa.216.0..sroa_idx, align 8
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %29) #11
  call void @_ZN3glm3vecILi3EfLNS_9qualifierE0EEC2IdddEET_T0_T1_(ptr noundef nonnull align 4 dereferenceable(12) %29, double noundef 0.000000e+00, double noundef -1.000000e+00, double noundef 0.000000e+00)
  invoke void @_ZN3glm6lookAtIfLNS_9qualifierE0EEENS_3matILi4ELi4ET_XT0_EEERKNS_3vecILi3ES3_XT0_EEES8_S8_(ptr dead_on_unwind nonnull writable sret(%"struct.glm::mat") align 4 %26, ptr noundef nonnull align 4 dereferenceable(12) %21, ptr noundef nonnull align 4 dereferenceable(12) %27, ptr noundef nonnull align 4 dereferenceable(12) %29)
          to label %248 unwind label %293

248:                                              ; preds = %247
  %249 = load ptr, ptr %142, align 8, !tbaa !36
  %250 = getelementptr inbounds %struct.PointLight, ptr %249, i64 %indvars.iv, i32 2, i64 1
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(64) %250, ptr noundef nonnull align 4 dereferenceable(64) %26, i64 64, i1 false), !tbaa.struct !34
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %29) #11
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %28) #11
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %27) #11
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %26) #11
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %30) #11
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %31) #11
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %32) #11
  call void @_ZN3glm3vecILi3EfLNS_9qualifierE0EEC2IdddEET_T0_T1_(ptr noundef nonnull align 4 dereferenceable(12) %32, double noundef 0.000000e+00, double noundef 1.000000e+00, double noundef 0.000000e+00)
  %251 = invoke { <2 x float>, float } @_ZN3glmplIfLNS_9qualifierE0EEENS_3vecILi3ET_XT0_EEERKS4_S6_(ptr noundef nonnull align 4 dereferenceable(12) %21, ptr noundef nonnull align 4 dereferenceable(12) %32)
          to label %252 unwind label %296

252:                                              ; preds = %248
  %.fca.0.extract9 = extractvalue { <2 x float>, float } %251, 0
  %.fca.1.extract10 = extractvalue { <2 x float>, float } %251, 1
  store <2 x float> %.fca.0.extract9, ptr %31, align 8
  store float %.fca.1.extract10, ptr %.sroa.212.0..sroa_idx, align 8
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %33) #11
  call void @_ZN3glm3vecILi3EfLNS_9qualifierE0EEC2IdddEET_T0_T1_(ptr noundef nonnull align 4 dereferenceable(12) %33, double noundef 0.000000e+00, double noundef 0.000000e+00, double noundef 1.000000e+00)
  invoke void @_ZN3glm6lookAtIfLNS_9qualifierE0EEENS_3matILi4ELi4ET_XT0_EEERKNS_3vecILi3ES3_XT0_EEES8_S8_(ptr dead_on_unwind nonnull writable sret(%"struct.glm::mat") align 4 %30, ptr noundef nonnull align 4 dereferenceable(12) %21, ptr noundef nonnull align 4 dereferenceable(12) %31, ptr noundef nonnull align 4 dereferenceable(12) %33)
          to label %253 unwind label %298

253:                                              ; preds = %252
  %254 = load ptr, ptr %142, align 8, !tbaa !36
  %255 = getelementptr inbounds %struct.PointLight, ptr %254, i64 %indvars.iv, i32 2, i64 2
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(64) %255, ptr noundef nonnull align 4 dereferenceable(64) %30, i64 64, i1 false), !tbaa.struct !34
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %33) #11
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %32) #11
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %31) #11
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %30) #11
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %34) #11
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %35) #11
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %36) #11
  call void @_ZN3glm3vecILi3EfLNS_9qualifierE0EEC2IdddEET_T0_T1_(ptr noundef nonnull align 4 dereferenceable(12) %36, double noundef 0.000000e+00, double noundef -1.000000e+00, double noundef 0.000000e+00)
  %256 = invoke { <2 x float>, float } @_ZN3glmplIfLNS_9qualifierE0EEENS_3vecILi3ET_XT0_EEERKS4_S6_(ptr noundef nonnull align 4 dereferenceable(12) %21, ptr noundef nonnull align 4 dereferenceable(12) %36)
          to label %257 unwind label %301

257:                                              ; preds = %253
  %.fca.0.extract5 = extractvalue { <2 x float>, float } %256, 0
  %.fca.1.extract6 = extractvalue { <2 x float>, float } %256, 1
  store <2 x float> %.fca.0.extract5, ptr %35, align 8
  store float %.fca.1.extract6, ptr %.sroa.28.0..sroa_idx, align 8
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %37) #11
  call void @_ZN3glm3vecILi3EfLNS_9qualifierE0EEC2IdddEET_T0_T1_(ptr noundef nonnull align 4 dereferenceable(12) %37, double noundef 0.000000e+00, double noundef 0.000000e+00, double noundef -1.000000e+00)
  invoke void @_ZN3glm6lookAtIfLNS_9qualifierE0EEENS_3matILi4ELi4ET_XT0_EEERKNS_3vecILi3ES3_XT0_EEES8_S8_(ptr dead_on_unwind nonnull writable sret(%"struct.glm::mat") align 4 %34, ptr noundef nonnull align 4 dereferenceable(12) %21, ptr noundef nonnull align 4 dereferenceable(12) %35, ptr noundef nonnull align 4 dereferenceable(12) %37)
          to label %258 unwind label %303

258:                                              ; preds = %257
  %259 = load ptr, ptr %142, align 8, !tbaa !36
  %260 = getelementptr inbounds %struct.PointLight, ptr %259, i64 %indvars.iv, i32 2, i64 3
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(64) %260, ptr noundef nonnull align 4 dereferenceable(64) %34, i64 64, i1 false), !tbaa.struct !34
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %37) #11
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %36) #11
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %35) #11
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %34) #11
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %38) #11
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %39) #11
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %40) #11
  call void @_ZN3glm3vecILi3EfLNS_9qualifierE0EEC2IdddEET_T0_T1_(ptr noundef nonnull align 4 dereferenceable(12) %40, double noundef 0.000000e+00, double noundef 0.000000e+00, double noundef 1.000000e+00)
  %261 = invoke { <2 x float>, float } @_ZN3glmplIfLNS_9qualifierE0EEENS_3vecILi3ET_XT0_EEERKS4_S6_(ptr noundef nonnull align 4 dereferenceable(12) %21, ptr noundef nonnull align 4 dereferenceable(12) %40)
          to label %262 unwind label %306

262:                                              ; preds = %258
  %.fca.0.extract1 = extractvalue { <2 x float>, float } %261, 0
  %.fca.1.extract2 = extractvalue { <2 x float>, float } %261, 1
  store <2 x float> %.fca.0.extract1, ptr %39, align 8
  store float %.fca.1.extract2, ptr %.sroa.24.0..sroa_idx, align 8
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %41) #11
  call void @_ZN3glm3vecILi3EfLNS_9qualifierE0EEC2IdddEET_T0_T1_(ptr noundef nonnull align 4 dereferenceable(12) %41, double noundef 0.000000e+00, double noundef -1.000000e+00, double noundef 0.000000e+00)
  invoke void @_ZN3glm6lookAtIfLNS_9qualifierE0EEENS_3matILi4ELi4ET_XT0_EEERKNS_3vecILi3ES3_XT0_EEES8_S8_(ptr dead_on_unwind nonnull writable sret(%"struct.glm::mat") align 4 %38, ptr noundef nonnull align 4 dereferenceable(12) %21, ptr noundef nonnull align 4 dereferenceable(12) %39, ptr noundef nonnull align 4 dereferenceable(12) %41)
          to label %263 unwind label %308

263:                                              ; preds = %262
  %264 = load ptr, ptr %142, align 8, !tbaa !36
  %265 = getelementptr inbounds %struct.PointLight, ptr %264, i64 %indvars.iv, i32 2, i64 4
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(64) %265, ptr noundef nonnull align 4 dereferenceable(64) %38, i64 64, i1 false), !tbaa.struct !34
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %41) #11
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %40) #11
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %39) #11
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %38) #11
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %42) #11
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %43) #11
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %44) #11
  call void @_ZN3glm3vecILi3EfLNS_9qualifierE0EEC2IdddEET_T0_T1_(ptr noundef nonnull align 4 dereferenceable(12) %44, double noundef 0.000000e+00, double noundef 0.000000e+00, double noundef -1.000000e+00)
  %266 = invoke { <2 x float>, float } @_ZN3glmplIfLNS_9qualifierE0EEENS_3vecILi3ET_XT0_EEERKS4_S6_(ptr noundef nonnull align 4 dereferenceable(12) %21, ptr noundef nonnull align 4 dereferenceable(12) %44)
          to label %267 unwind label %311

267:                                              ; preds = %263
  %.fca.0.extract = extractvalue { <2 x float>, float } %266, 0
  %.fca.1.extract = extractvalue { <2 x float>, float } %266, 1
  store <2 x float> %.fca.0.extract, ptr %43, align 8
  store float %.fca.1.extract, ptr %.sroa.2.0..sroa_idx, align 8
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %45) #11
  call void @_ZN3glm3vecILi3EfLNS_9qualifierE0EEC2IdddEET_T0_T1_(ptr noundef nonnull align 4 dereferenceable(12) %45, double noundef 0.000000e+00, double noundef -1.000000e+00, double noundef 0.000000e+00)
  invoke void @_ZN3glm6lookAtIfLNS_9qualifierE0EEENS_3matILi4ELi4ET_XT0_EEERKNS_3vecILi3ES3_XT0_EEES8_S8_(ptr dead_on_unwind nonnull writable sret(%"struct.glm::mat") align 4 %42, ptr noundef nonnull align 4 dereferenceable(12) %21, ptr noundef nonnull align 4 dereferenceable(12) %43, ptr noundef nonnull align 4 dereferenceable(12) %45)
          to label %268 unwind label %313

268:                                              ; preds = %267
  %269 = load ptr, ptr %142, align 8, !tbaa !36
  %270 = getelementptr inbounds %struct.PointLight, ptr %269, i64 %indvars.iv, i32 2, i64 5
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(64) %270, ptr noundef nonnull align 4 dereferenceable(64) %42, i64 64, i1 false), !tbaa.struct !34
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %45) #11
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %44) #11
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %43) #11
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %42) #11
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %21) #11
  call void @_ZN8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %18) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %18) #11
  call void @_ZN8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %16) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %16) #11
  call void @_ZN8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %15) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %15) #11
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %271 = load i32, ptr %129, align 8, !tbaa !35
  %272 = zext i32 %271 to i64
  %273 = icmp ult i64 %indvars.iv.next, %272
  br i1 %273, label %168, label %._crit_edge, !llvm.loop !37

274:                                              ; preds = %172, %168
  %275 = landingpad { ptr, i32 }
          cleanup
  br label %320

276:                                              ; preds = %183, %181, %179, %177, %175, %173
  %277 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %17) #11
  br label %319

278:                                              ; preds = %189, %185
  %279 = landingpad { ptr, i32 }
          cleanup
  br label %318

280:                                              ; preds = %200, %198, %196, %194, %192, %190
  %281 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %19) #11
  br label %317

282:                                              ; preds = %224, %220, %218, %214, %212, %208, %206, %202
  %283 = landingpad { ptr, i32 }
          cleanup
  br label %317

284:                                              ; preds = %226
  %285 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %20) #11
  br label %317

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

288:                                              ; preds = %242
  %289 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %25) #11
  br label %290

290:                                              ; preds = %288, %286
  %.pn87 = phi { ptr, i32 } [ %289, %288 ], [ %287, %286 ]
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %24) #11
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %23) #11
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %22) #11
  br label %316

291:                                              ; preds = %243
  %292 = landingpad { ptr, i32 }
          cleanup
  br label %295

293:                                              ; preds = %247
  %294 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %29) #11
  br label %295

295:                                              ; preds = %293, %291
  %.pn89 = phi { ptr, i32 } [ %294, %293 ], [ %292, %291 ]
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %28) #11
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %27) #11
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %26) #11
  br label %316

296:                                              ; preds = %248
  %297 = landingpad { ptr, i32 }
          cleanup
  br label %300

298:                                              ; preds = %252
  %299 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %33) #11
  br label %300

300:                                              ; preds = %298, %296
  %.pn91 = phi { ptr, i32 } [ %299, %298 ], [ %297, %296 ]
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %32) #11
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %31) #11
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %30) #11
  br label %316

301:                                              ; preds = %253
  %302 = landingpad { ptr, i32 }
          cleanup
  br label %305

303:                                              ; preds = %257
  %304 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %37) #11
  br label %305

305:                                              ; preds = %303, %301
  %.pn93 = phi { ptr, i32 } [ %304, %303 ], [ %302, %301 ]
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %36) #11
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %35) #11
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %34) #11
  br label %316

306:                                              ; preds = %258
  %307 = landingpad { ptr, i32 }
          cleanup
  br label %310

308:                                              ; preds = %262
  %309 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %41) #11
  br label %310

310:                                              ; preds = %308, %306
  %.pn95 = phi { ptr, i32 } [ %309, %308 ], [ %307, %306 ]
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %40) #11
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %39) #11
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %38) #11
  br label %316

311:                                              ; preds = %263
  %312 = landingpad { ptr, i32 }
          cleanup
  br label %315

313:                                              ; preds = %267
  %314 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %45) #11
  br label %315

315:                                              ; preds = %313, %311
  %.pn97 = phi { ptr, i32 } [ %314, %313 ], [ %312, %311 ]
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %44) #11
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %43) #11
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %42) #11
  br label %316

316:                                              ; preds = %315, %310, %305, %300, %295, %290
  %.pn97.pn = phi { ptr, i32 } [ %.pn97, %315 ], [ %.pn95, %310 ], [ %.pn93, %305 ], [ %.pn91, %300 ], [ %.pn89, %295 ], [ %.pn87, %290 ]
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %21) #11
  br label %317

317:                                              ; preds = %316, %284, %282, %280
  %.pn97.pn.pn = phi { ptr, i32 } [ %.pn97.pn, %316 ], [ %285, %284 ], [ %283, %282 ], [ %281, %280 ]
  call void @_ZN8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %18) #11
  br label %318

318:                                              ; preds = %317, %278
  %.pn97.pn.pn.pn = phi { ptr, i32 } [ %.pn97.pn.pn, %317 ], [ %279, %278 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %18) #11
  br label %319

319:                                              ; preds = %318, %276
  %.pn97.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn97.pn.pn.pn, %318 ], [ %277, %276 ]
  call void @_ZN8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %16) #11
  br label %320

320:                                              ; preds = %319, %274
  %.pn97.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn97.pn.pn.pn.pn, %319 ], [ %275, %274 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %16) #11
  call void @_ZN8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS_14adl_serializerEED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %15) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %15) #11
  br label %321

321:                                              ; preds = %320, %166, %165
  %.pn97.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn97.pn.pn.pn.pn.pn, %320 ], [ %167, %166 ], [ %.pn81.pn.pn.pn.pn, %165 ]
  resume { ptr, i32 } %.pn97.pn.pn.pn.pn.pn.pn
}

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

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

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

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

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

; Function Attrs: nobuiltin allocsize(0)
declare noundef nonnull ptr @_Znam(i64 noundef) local_unnamed_addr #9

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN10PointLightC2Ev(ptr noundef nonnull align 4 dereferenceable(496)) unnamed_addr #4 align 2

; Function Attrs: nobuiltin nounwind
declare void @_ZdaPvm(ptr noundef, i64 noundef) local_unnamed_addr #10

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3glm11perspectiveIfEENS_3matILi4ELi4ET_LNS_9qualifierE0EEES2_S2_S2_S2_(ptr dead_on_unwind noalias writable sret(%"struct.glm::mat") align 4, float noundef, float noundef, float noundef, float noundef) local_unnamed_addr #4

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef float @_ZN3glm7radiansIfEET_S1_(float noundef) local_unnamed_addr #5

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local { <2 x float>, float } @_ZN3glmplIfLNS_9qualifierE0EEENS_3vecILi3ET_XT0_EEERKS4_S6_(ptr noundef nonnull align 4 dereferenceable(12), ptr noundef nonnull align 4 dereferenceable(12)) local_unnamed_addr #4

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN3glm3vecILi3EfLNS_9qualifierE0EEC2IdddEET_T0_T1_(ptr noundef nonnull align 4 dereferenceable(12), double noundef, double noundef, double noundef) unnamed_addr #5 align 2

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nofree nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { inlinehint mustprogress uwtable "min-legal-vector-width"="64" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { 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 #7 = { 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 #8 = { mustprogress uwtable "min-legal-vector-width"="64" "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 #9 = { nobuiltin allocsize(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 #10 = { nobuiltin nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #11 = { nounwind }
attributes #12 = { builtin allocsize(0) }
attributes #13 = { builtin 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 = !{i64 0, i64 12, !6}
!6 = !{!7, !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !24, i64 724}
!10 = !{!"_ZTS5Scene", !11, i64 0, !11, i64 88, !12, i64 176, !18, i64 256, !13, i64 432, !19, i64 436, !16, i64 440, !14, i64 448, !19, i64 480, !20, i64 484, !16, i64 736, !25, i64 744, !25, i64 768}
!11 = !{!"_ZTS7CubeMap", !12, i64 0, !13, i64 80}
!12 = !{!"_ZTS7Texture", !13, i64 0, !13, i64 4, !13, i64 8, !13, i64 12, !14, i64 16, !14, i64 48}
!13 = !{!"int", !7, i64 0}
!14 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !15, i64 0, !17, i64 8, !7, i64 16}
!15 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !16, i64 0}
!16 = !{!"any pointer", !7, i64 0}
!17 = !{!"long", !7, i64 0}
!18 = !{!"_ZTS6Skybox", !13, i64 0, !12, i64 8, !11, i64 88}
!19 = !{!"bool", !7, i64 0}
!20 = !{!"_ZTS16DirectionalLight", !21, i64 0, !22, i64 100, !23, i64 112, !23, i64 176, !24, i64 240, !24, i64 244}
!21 = !{!"_ZTS9BaseLight", !22, i64 0, !23, i64 12, !19, i64 76, !24, i64 80, !24, i64 84, !24, i64 88, !13, i64 92, !13, i64 96}
!22 = !{!"_ZTSN3glm3vecILi3EfLNS_9qualifierE0EEE", !7, i64 0}
!23 = !{!"_ZTSN3glm3matILi4ELi4EfLNS_9qualifierE0EEE", !7, i64 0}
!24 = !{!"float", !7, i64 0}
!25 = !{!"_ZTSSt6vectorIP5ModelSaIS1_EE", !26, i64 0}
!26 = !{!"_ZTSSt12_Vector_baseIP5ModelSaIS1_EE", !27, i64 0}
!27 = !{!"_ZTSNSt12_Vector_baseIP5ModelSaIS1_EE12_Vector_implE", !28, i64 0}
!28 = !{!"_ZTSNSt12_Vector_baseIP5ModelSaIS1_EE17_Vector_impl_dataE", !16, i64 0, !16, i64 8, !16, i64 16}
!29 = !{!21, !24, i64 80}
!30 = !{!21, !24, i64 84}
!31 = !{!21, !24, i64 88}
!32 = !{!10, !24, i64 728}
!33 = !{!21, !13, i64 92}
!34 = !{i64 0, i64 64, !6}
!35 = !{!10, !13, i64 432}
!36 = !{!10, !16, i64 736}
!37 = distinct !{!37, !38}
!38 = !{!"llvm.loop.mustprogress"}


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