; LLVM IR from paroj/gltut :: Tut 16 Gamma and Textures/GammaLandscape.ll (Z7displayv)

; 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.ProgramData = type { i32, i32, i32 }
%struct.UnlitProgData = type { i32, i32, i32 }
%"class.glutil::ViewPole" = type <{ %"class.glutil::ViewProvider", %"struct.glutil::ViewData", %"struct.glutil::ViewScale", %"struct.glutil::ViewData", i32, i8, i8, [2 x i8], i32, float, %"struct.glm::detail::tvec2", %"struct.glm::detail::tquat", [4 x i8] }>
%"class.glutil::ViewProvider" = type { ptr }
%"struct.glutil::ViewScale" = type { float, float, float, float, float, float, float }
%"struct.glutil::ViewData" = type { %"struct.glm::detail::tvec3", %"struct.glm::detail::tquat", float, float }
%"struct.glm::detail::tvec3" = type { %union.anon.5 }
%union.anon.5 = type { %struct.anon }
%struct.anon = type { float, float, float }
%"struct.glm::detail::tvec2" = type { %union.anon.8 }
%union.anon.8 = type { %struct.anon.9 }
%struct.anon.9 = type { i32, i32 }
%"struct.glm::detail::tquat" = type { float, float, float, float }
%"struct.glm::detail::tvec4" = type { %union.anon.39 }
%union.anon.39 = type { %struct.anon.40 }
%struct.anon.40 = type { float, float, float, float }
%"class.glutil::MatrixStack" = type { %"class.std::stack", %"struct.glm::detail::tmat4x4" }
%"class.std::stack" = type { %"class.std::vector.43" }
%"class.std::vector.43" = type { %"struct.std::_Vector_base.44" }
%"struct.std::_Vector_base.44" = type { %"struct.std::_Vector_base<glm::detail::tmat4x4<float>, std::allocator<glm::detail::tmat4x4<float>>>::_Vector_impl" }
%"struct.std::_Vector_base<glm::detail::tmat4x4<float>, std::allocator<glm::detail::tmat4x4<float>>>::_Vector_impl" = type { %"struct.std::_Vector_base<glm::detail::tmat4x4<float>, std::allocator<glm::detail::tmat4x4<float>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<glm::detail::tmat4x4<float>, std::allocator<glm::detail::tmat4x4<float>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.glm::detail::tmat4x4" = type { [4 x %"struct.glm::detail::tvec4"] }
%struct.LightBlock = type { %"struct.glm::detail::tvec4", float, float, [2 x float], [4 x %struct.PerLight] }
%struct.PerLight = type { %"struct.glm::detail::tvec4", %"struct.glm::detail::tvec4" }
%"class.glutil::PushStack" = type { ptr }
%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%"class.std::allocator.0" = type { i8 }
%struct.anon.42 = type { float, float, float, float }

@g_progStandard = external dso_local global %struct.ProgramData, align 4
@g_progUnlit = external dso_local global %struct.UnlitProgData, align 4
@_funcptr_glUseProgram = external global ptr, align 8
@_funcptr_glUniform1i = external global ptr, align 8
@g_lightUniformBuffer = external dso_local global i32, align 4
@g_linearTexture = external dso_local global i32, align 4
@g_samplers = external dso_local global [2 x i32], align 4
@_funcptr_glBindTexture = external global ptr, align 8
@g_viewPole = external dso_local global %"class.glutil::ViewPole", align 8
@g_pLightEnv = external dso_local global ptr, align 8
@g_pTerrain = external dso_local global ptr, align 8
@g_pSphere = external dso_local global ptr, align 8
@_funcptr_glEnable = external global ptr, align 8
@_funcptr_glDepthMask = external global ptr, align 8
@_funcptr_glBindBuffer = external global ptr, align 8
@_funcptr_glBufferData = external global ptr, align 8
@g_currSampler = external dso_local global i32, align 4
@g_bDrawCameraPos = external dso_local global i8, align 1
@g_useGammaDisplay = external dso_local global i8, align 1
@_funcptr_glDisable = external global ptr, align 8
@_funcptr_glClearColor = external global ptr, align 8
@_funcptr_glClearDepth = external global ptr, align 8
@_funcptr_glClear = external global ptr, align 8
@_funcptr_glUniformMatrix4fv = external global ptr, align 8
@_funcptr_glActiveTexture = external global ptr, align 8
@_funcptr_glBindSampler = external global ptr, align 8
@.str.16 = external hidden unnamed_addr constant [8 x i8], align 1
@_funcptr_glUniform4fv = external global ptr, align 8
@.str.17 = external hidden unnamed_addr constant [5 x i8], align 1
@_funcptr_glUniform4f = external global ptr, align 8

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

declare i32 @__gxx_personality_v0(...)

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

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_Z7displayv() #2 personality ptr @__gxx_personality_v0 {
  %1 = alloca %"struct.glm::detail::tvec4", align 4
  %2 = alloca %"class.glutil::MatrixStack", align 8
  %3 = alloca %"struct.glm::detail::tmat4x4", align 4
  %4 = alloca ptr, align 8
  %5 = alloca i32, align 4
  %6 = alloca %struct.LightBlock, align 4
  %7 = alloca %"struct.glm::detail::tmat4x4", align 4
  %8 = alloca %"class.glutil::PushStack", align 8
  %9 = alloca %"class.std::__cxx11::basic_string", align 8
  %10 = alloca %"class.std::allocator.0", align 1
  %11 = alloca %"struct.glm::detail::tvec3", align 4
  %12 = alloca %"struct.glm::detail::tvec4", align 4
  %13 = alloca %"struct.glm::detail::tvec3", align 4
  %14 = alloca float, align 4
  %15 = alloca %"struct.glm::detail::tvec4", align 4
  %16 = alloca %"struct.glm::detail::tvec4", align 4
  %17 = alloca %"class.std::__cxx11::basic_string", align 8
  %18 = alloca %"class.std::allocator.0", align 1
  %19 = alloca i32, align 4
  %20 = alloca %"struct.glm::detail::tvec3", align 4
  %21 = alloca %"struct.glm::detail::tvec4", align 4
  %22 = alloca %"class.std::__cxx11::basic_string", align 8
  %23 = alloca %"class.std::allocator.0", align 1
  %24 = alloca %"struct.glm::detail::tvec3", align 4
  %25 = alloca float, align 4
  %26 = alloca float, align 4
  %27 = alloca float, align 4
  %28 = alloca %"class.std::__cxx11::basic_string", align 8
  %29 = alloca %"class.std::allocator.0", align 1
  %30 = alloca %"class.std::__cxx11::basic_string", align 8
  %31 = alloca %"class.std::allocator.0", align 1
  %32 = load ptr, ptr @g_pLightEnv, align 8, !tbaa !5
  %33 = icmp ne ptr %32, null
  br i1 %33, label %35, label %34

34:                                               ; preds = %0
  br label %336

35:                                               ; preds = %0
  %36 = load i8, ptr @g_useGammaDisplay, align 1, !tbaa !9, !range !11, !noundef !12
  %37 = trunc i8 %36 to i1
  br i1 %37, label %38, label %40

38:                                               ; preds = %35
  %39 = load ptr, ptr @_funcptr_glEnable, align 8, !tbaa !5
  call void %39(i32 noundef 36281)
  br label %42

40:                                               ; preds = %35
  %41 = load ptr, ptr @_funcptr_glDisable, align 8, !tbaa !5
  call void %41(i32 noundef 36281)
  br label %42

42:                                               ; preds = %40, %38
  %43 = load ptr, ptr @g_pLightEnv, align 8, !tbaa !5
  call void @_ZN8LightEnv10UpdateTimeEv(ptr noundef nonnull align 8 dereferenceable(192) %43)
  call void @llvm.lifetime.start.p0(i64 16, ptr %1) #6
  %44 = load ptr, ptr @g_pLightEnv, align 8, !tbaa !5
  call void @_ZNK8LightEnv18GetBackgroundColorEv(ptr dead_on_unwind writable sret(%"struct.glm::detail::tvec4") align 4 %1, ptr noundef nonnull align 8 dereferenceable(192) %44)
  %45 = load ptr, ptr @_funcptr_glClearColor, align 8, !tbaa !5
  %46 = getelementptr inbounds %"struct.glm::detail::tvec4", ptr %1, i32 0, i32 0
  %47 = getelementptr inbounds %struct.anon.42, ptr %46, i32 0, i32 0
  %48 = load float, ptr %47, align 4, !tbaa !13
  %49 = getelementptr inbounds %"struct.glm::detail::tvec4", ptr %1, i32 0, i32 0
  %50 = getelementptr inbounds %struct.anon.42, ptr %49, i32 0, i32 1
  %51 = load float, ptr %50, align 4, !tbaa !13
  %52 = getelementptr inbounds %"struct.glm::detail::tvec4", ptr %1, i32 0, i32 0
  %53 = getelementptr inbounds %struct.anon.42, ptr %52, i32 0, i32 2
  %54 = load float, ptr %53, align 4, !tbaa !13
  %55 = getelementptr inbounds %"struct.glm::detail::tvec4", ptr %1, i32 0, i32 0
  %56 = getelementptr inbounds %struct.anon.42, ptr %55, i32 0, i32 3
  %57 = load float, ptr %56, align 4, !tbaa !13
  call void %45(float noundef %48, float noundef %51, float noundef %54, float noundef %57)
  %58 = load ptr, ptr @_funcptr_glClearDepth, align 8, !tbaa !5
  call void %58(double noundef 1.000000e+00)
  %59 = load ptr, ptr @_funcptr_glClear, align 8, !tbaa !5
  call void %59(i32 noundef 16640)
  call void @llvm.lifetime.start.p0(i64 88, ptr %2) #6
  call void @_ZN6glutil11MatrixStackC2Ev(ptr noundef nonnull align 8 dereferenceable(88) %2)
  call void @llvm.lifetime.start.p0(i64 64, ptr %3) #6
  invoke void @_ZNK6glutil8ViewPole10CalcMatrixEv(ptr dead_on_unwind writable sret(%"struct.glm::detail::tmat4x4") align 4 %3, ptr noundef nonnull align 8 dereferenceable(148) @g_viewPole)
          to label %60 unwind label %151

60:                                               ; preds = %42
  invoke void @_ZN6glutil11MatrixStack11ApplyMatrixERKN3glm6detail7tmat4x4IfEE(ptr noundef nonnull align 8 dereferenceable(88) %2, ptr noundef nonnull align 4 dereferenceable(64) %3)
          to label %61 unwind label %151

61:                                               ; preds = %60
  call void @llvm.lifetime.end.p0(i64 64, ptr %3) #6
  call void @llvm.lifetime.start.p0(i64 160, ptr %6) #6
  %62 = load ptr, ptr @g_pLightEnv, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 64, ptr %7) #6
  invoke void @_ZNK6glutil8ViewPole10CalcMatrixEv(ptr dead_on_unwind writable sret(%"struct.glm::detail::tmat4x4") align 4 %7, ptr noundef nonnull align 8 dereferenceable(148) @g_viewPole)
          to label %63 unwind label %155

63:                                               ; preds = %61
  invoke void @_ZNK8LightEnv13GetLightBlockERKN3glm6detail7tmat4x4IfEE(ptr dead_on_unwind writable sret(%struct.LightBlock) align 4 %6, ptr noundef nonnull align 8 dereferenceable(192) %62, ptr noundef nonnull align 4 dereferenceable(64) %7)
          to label %64 unwind label %155

64:                                               ; preds = %63
  call void @llvm.lifetime.end.p0(i64 64, ptr %7) #6
  %65 = load ptr, ptr @_funcptr_glBindBuffer, align 8, !tbaa !5
  %66 = load i32, ptr @g_lightUniformBuffer, align 4, !tbaa !14
  invoke void %65(i32 noundef 35345, i32 noundef %66)
          to label %67 unwind label %159

67:                                               ; preds = %64
  %68 = load ptr, ptr @_funcptr_glBufferData, align 8, !tbaa !5
  invoke void %68(i32 noundef 35345, i64 noundef 160, ptr noundef %6, i32 noundef 35040)
          to label %69 unwind label %159

69:                                               ; preds = %67
  %70 = load ptr, ptr @_funcptr_glBindBuffer, align 8, !tbaa !5
  invoke void %70(i32 noundef 35345, i32 noundef 0)
          to label %71 unwind label %159

71:                                               ; preds = %69
  %72 = load ptr, ptr @g_pSphere, align 8, !tbaa !5
  %73 = icmp ne ptr %72, null
  br i1 %73, label %74, label %333

74:                                               ; preds = %71
  %75 = load ptr, ptr @g_pTerrain, align 8, !tbaa !5
  %76 = icmp ne ptr %75, null
  br i1 %76, label %77, label %333

77:                                               ; preds = %74
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #6
  invoke void @_ZN6glutil9PushStackC2ERNS_11MatrixStackE(ptr noundef nonnull align 8 dereferenceable(8) %8, ptr noundef nonnull align 8 dereferenceable(88) %2)
          to label %78 unwind label %163

78:                                               ; preds = %77
  invoke void @_ZN6glutil11MatrixStack7RotateXEf(ptr noundef nonnull align 8 dereferenceable(88) %2, float noundef -9.000000e+01)
          to label %79 unwind label %167

79:                                               ; preds = %78
  %80 = load ptr, ptr @_funcptr_glUseProgram, align 8, !tbaa !5
  %81 = load i32, ptr @g_progStandard, align 4, !tbaa !16
  invoke void %80(i32 noundef %81)
          to label %82 unwind label %167

82:                                               ; preds = %79
  %83 = load ptr, ptr @_funcptr_glUniformMatrix4fv, align 8, !tbaa !5
  %84 = load i32, ptr getelementptr inbounds (%struct.ProgramData, ptr @g_progStandard, i32 0, i32 1), align 4, !tbaa !18
  %85 = invoke noundef nonnull align 4 dereferenceable(64) ptr @_ZNK6glutil11MatrixStack3TopEv(ptr noundef nonnull align 8 dereferenceable(88) %2)
          to label %86 unwind label %167

86:                                               ; preds = %82
  %87 = invoke noundef ptr @_ZN3glm9value_ptrIfEEPKT_RKNS_6detail7tmat4x4IS1_EE(ptr noundef nonnull align 4 dereferenceable(64) %85)
          to label %88 unwind label %167

88:                                               ; preds = %86
  invoke void %83(i32 noundef %84, i32 noundef 1, i8 noundef zeroext 0, ptr noundef %87)
          to label %89 unwind label %167

89:                                               ; preds = %88
  %90 = load ptr, ptr @_funcptr_glUniform1i, align 8, !tbaa !5
  %91 = load i32, ptr getelementptr inbounds (%struct.ProgramData, ptr @g_progStandard, i32 0, i32 2), align 4, !tbaa !19
  %92 = load ptr, ptr @g_pLightEnv, align 8, !tbaa !5
  %93 = invoke noundef i32 @_ZNK8LightEnv12GetNumLightsEv(ptr noundef nonnull align 8 dereferenceable(192) %92)
          to label %94 unwind label %167

94:                                               ; preds = %89
  invoke void %90(i32 noundef %91, i32 noundef %93)
          to label %95 unwind label %167

95:                                               ; preds = %94
  %96 = load ptr, ptr @_funcptr_glActiveTexture, align 8, !tbaa !5
  invoke void %96(i32 noundef 33984)
          to label %97 unwind label %167

97:                                               ; preds = %95
  %98 = load ptr, ptr @_funcptr_glBindTexture, align 8, !tbaa !5
  %99 = load i32, ptr @g_linearTexture, align 4, !tbaa !14
  invoke void %98(i32 noundef 3553, i32 noundef %99)
          to label %100 unwind label %167

100:                                              ; preds = %97
  %101 = load ptr, ptr @_funcptr_glBindSampler, align 8, !tbaa !5
  %102 = load i32, ptr @g_currSampler, align 4, !tbaa !14
  %103 = sext i32 %102 to i64
  %104 = getelementptr inbounds [2 x i32], ptr @g_samplers, i64 0, i64 %103
  %105 = load i32, ptr %104, align 4, !tbaa !14
  invoke void %101(i32 noundef 0, i32 noundef %105)
          to label %106 unwind label %167

106:                                              ; preds = %100
  %107 = load ptr, ptr @g_pTerrain, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr %9) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr %10) #6
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %10) #6
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %9, ptr noundef @.str.16, ptr noundef nonnull align 1 dereferenceable(1) %10)
          to label %108 unwind label %171

108:                                              ; preds = %106
  invoke void @_ZNK9Framework4Mesh6RenderERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(8) %107, ptr noundef nonnull align 8 dereferenceable(32) %9)
          to label %109 unwind label %175

109:                                              ; preds = %108
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %9) #6
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %10) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %10) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %9) #6
  %110 = load ptr, ptr @_funcptr_glBindSampler, align 8, !tbaa !5
  invoke void %110(i32 noundef 0, i32 noundef 0)
          to label %111 unwind label %167

111:                                              ; preds = %109
  %112 = load ptr, ptr @_funcptr_glBindTexture, align 8, !tbaa !5
  invoke void %112(i32 noundef 3553, i32 noundef 0)
          to label %113 unwind label %167

113:                                              ; preds = %111
  %114 = load ptr, ptr @_funcptr_glUseProgram, align 8, !tbaa !5
  invoke void %114(i32 noundef 0)
          to label %115 unwind label %167

115:                                              ; preds = %113
  invoke void @_ZN6glutil9PushStack10ResetStackEv(ptr noundef nonnull align 8 dereferenceable(8) %8)
          to label %116 unwind label %167

116:                                              ; preds = %115
  call void @llvm.lifetime.start.p0(i64 12, ptr %11) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr %12) #6
  %117 = load ptr, ptr @g_pLightEnv, align 8, !tbaa !5
  invoke void @_ZNK8LightEnv20GetSunlightDirectionEv(ptr dead_on_unwind writable sret(%"struct.glm::detail::tvec4") align 4 %12, ptr noundef nonnull align 8 dereferenceable(192) %117)
          to label %118 unwind label %180

118:                                              ; preds = %116
  invoke void @_ZN3glm6detail5tvec3IfEC2IfEERKNS0_5tvec4IT_EE(ptr noundef nonnull align 4 dereferenceable(12) %11, ptr noundef nonnull align 4 dereferenceable(16) %12)
          to label %119 unwind label %180

119:                                              ; preds = %118
  call void @llvm.lifetime.end.p0(i64 16, ptr %12) #6
  call void @llvm.lifetime.start.p0(i64 12, ptr %13) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #6
  store float 5.000000e+02, ptr %14, align 4, !tbaa !20
  invoke void @_ZN3glm6detailmlIfEENS0_5tvec3IT_EERKS4_RKS3_(ptr dead_on_unwind writable sret(%"struct.glm::detail::tvec3") align 4 %13, ptr noundef nonnull align 4 dereferenceable(12) %11, ptr noundef nonnull align 4 dereferenceable(4) %14)
          to label %120 unwind label %184

120:                                              ; preds = %119
  invoke void @_ZN6glutil11MatrixStack9TranslateERKN3glm6detail5tvec3IfEE(ptr noundef nonnull align 8 dereferenceable(88) %2, ptr noundef nonnull align 4 dereferenceable(12) %13)
          to label %121 unwind label %184

121:                                              ; preds = %120
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #6
  call void @llvm.lifetime.end.p0(i64 12, ptr %13) #6
  invoke void @_ZN6glutil11MatrixStack5ScaleEfff(ptr noundef nonnull align 8 dereferenceable(88) %2, float noundef 3.000000e+01, float noundef 3.000000e+01, float noundef 3.000000e+01)
          to label %122 unwind label %188

122:                                              ; preds = %121
  %123 = load ptr, ptr @_funcptr_glUseProgram, align 8, !tbaa !5
  %124 = load i32, ptr @g_progUnlit, align 4, !tbaa !22
  invoke void %123(i32 noundef %124)
          to label %125 unwind label %188

125:                                              ; preds = %122
  %126 = load ptr, ptr @_funcptr_glUniformMatrix4fv, align 8, !tbaa !5
  %127 = load i32, ptr getelementptr inbounds (%struct.UnlitProgData, ptr @g_progUnlit, i32 0, i32 1), align 4, !tbaa !24
  %128 = invoke noundef nonnull align 4 dereferenceable(64) ptr @_ZNK6glutil11MatrixStack3TopEv(ptr noundef nonnull align 8 dereferenceable(88) %2)
          to label %129 unwind label %188

129:                                              ; preds = %125
  %130 = invoke noundef ptr @_ZN3glm9value_ptrIfEEPKT_RKNS_6detail7tmat4x4IS1_EE(ptr noundef nonnull align 4 dereferenceable(64) %128)
          to label %131 unwind label %188

131:                                              ; preds = %129
  invoke void %126(i32 noundef %127, i32 noundef 1, i8 noundef zeroext 0, ptr noundef %130)
          to label %132 unwind label %188

132:                                              ; preds = %131
  call void @llvm.lifetime.start.p0(i64 16, ptr %15) #6
  %133 = load ptr, ptr @g_pLightEnv, align 8, !tbaa !5
  invoke void @_ZNK8LightEnv26GetSunlightScaledIntensityEv(ptr dead_on_unwind writable sret(%"struct.glm::detail::tvec4") align 4 %15, ptr noundef nonnull align 8 dereferenceable(192) %133)
          to label %134 unwind label %192

134:                                              ; preds = %132
  call void @llvm.lifetime.start.p0(i64 16, ptr %16) #6
  invoke void @_ZN3glm6detail5tvec4IfEC2Ev(ptr noundef nonnull align 4 dereferenceable(16) %16)
          to label %135 unwind label %196

135:                                              ; preds = %134
  %136 = load ptr, ptr @_funcptr_glUniform4fv, align 8, !tbaa !5
  %137 = load i32, ptr getelementptr inbounds (%struct.UnlitProgData, ptr @g_progUnlit, i32 0, i32 2), align 4, !tbaa !25
  %138 = invoke noundef ptr @_ZN3glm9value_ptrIfEEPT_RNS_6detail5tvec4IS1_EE(ptr noundef nonnull align 4 dereferenceable(16) %15)
          to label %139 unwind label %196

139:                                              ; preds = %135
  invoke void %136(i32 noundef %137, i32 noundef 1, ptr noundef %138)
          to label %140 unwind label %196

140:                                              ; preds = %139
  %141 = load ptr, ptr @g_pSphere, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr %17) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr %18) #6
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %18) #6
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef @.str.17, ptr noundef nonnull align 1 dereferenceable(1) %18)
          to label %142 unwind label %200

142:                                              ; preds = %140
  invoke void @_ZNK9Framework4Mesh6RenderERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(8) %141, ptr noundef nonnull align 8 dereferenceable(32) %17)
          to label %143 unwind label %204

143:                                              ; preds = %142
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %17) #6
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %18) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %18) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %17) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %16) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %15) #6
  call void @llvm.lifetime.end.p0(i64 12, ptr %11) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #6
  store i32 0, ptr %19, align 4, !tbaa !14
  br label %144

144:                                              ; preds = %243, %143
  %145 = load i32, ptr %19, align 4, !tbaa !14
  %146 = load ptr, ptr @g_pLightEnv, align 8, !tbaa !5
  %147 = invoke noundef i32 @_ZNK8LightEnv17GetNumPointLightsEv(ptr noundef nonnull align 8 dereferenceable(192) %146)
          to label %148 unwind label %212

148:                                              ; preds = %144
  %149 = icmp slt i32 %145, %147
  br i1 %149, label %216, label %150

150:                                              ; preds = %148
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #6
  br label %265

151:                                              ; preds = %60, %42
  %152 = landingpad { ptr, i32 }
          cleanup
  %153 = extractvalue { ptr, i32 } %152, 0
  store ptr %153, ptr %4, align 8
  %154 = extractvalue { ptr, i32 } %152, 1
  store i32 %154, ptr %5, align 4
  call void @llvm.lifetime.end.p0(i64 64, ptr %3) #6
  br label %338

155:                                              ; preds = %63, %61
  %156 = landingpad { ptr, i32 }
          cleanup
  %157 = extractvalue { ptr, i32 } %156, 0
  store ptr %157, ptr %4, align 8
  %158 = extractvalue { ptr, i32 } %156, 1
  store i32 %158, ptr %5, align 4
  call void @llvm.lifetime.end.p0(i64 64, ptr %7) #6
  br label %337

159:                                              ; preds = %334, %333, %69, %67, %64
  %160 = landingpad { ptr, i32 }
          cleanup
  %161 = extractvalue { ptr, i32 } %160, 0
  store ptr %161, ptr %4, align 8
  %162 = extractvalue { ptr, i32 } %160, 1
  store i32 %162, ptr %5, align 4
  br label %337

163:                                              ; preds = %77
  %164 = landingpad { ptr, i32 }
          cleanup
  %165 = extractvalue { ptr, i32 } %164, 0
  store ptr %165, ptr %4, align 8
  %166 = extractvalue { ptr, i32 } %164, 1
  store i32 %166, ptr %5, align 4
  br label %332

167:                                              ; preds = %301, %299, %297, %291, %290, %288, %284, %281, %279, %277, %269, %265, %115, %113, %111, %109, %100, %97, %95, %94, %89, %88, %86, %82, %79, %78
  %168 = landingpad { ptr, i32 }
          cleanup
  %169 = extractvalue { ptr, i32 } %168, 0
  store ptr %169, ptr %4, align 8
  %170 = extractvalue { ptr, i32 } %168, 1
  store i32 %170, ptr %5, align 4
  br label %331

171:                                              ; preds = %106
  %172 = landingpad { ptr, i32 }
          cleanup
  %173 = extractvalue { ptr, i32 } %172, 0
  store ptr %173, ptr %4, align 8
  %174 = extractvalue { ptr, i32 } %172, 1
  store i32 %174, ptr %5, align 4
  br label %179

175:                                              ; preds = %108
  %176 = landingpad { ptr, i32 }
          cleanup
  %177 = extractvalue { ptr, i32 } %176, 0
  store ptr %177, ptr %4, align 8
  %178 = extractvalue { ptr, i32 } %176, 1
  store i32 %178, ptr %5, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %9) #6
  br label %179

179:                                              ; preds = %175, %171
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %10) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %10) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %9) #6
  br label %331

180:                                              ; preds = %118, %116
  %181 = landingpad { ptr, i32 }
          cleanup
  %182 = extractvalue { ptr, i32 } %181, 0
  store ptr %182, ptr %4, align 8
  %183 = extractvalue { ptr, i32 } %181, 1
  store i32 %183, ptr %5, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %12) #6
  br label %211

184:                                              ; preds = %120, %119
  %185 = landingpad { ptr, i32 }
          cleanup
  %186 = extractvalue { ptr, i32 } %185, 0
  store ptr %186, ptr %4, align 8
  %187 = extractvalue { ptr, i32 } %185, 1
  store i32 %187, ptr %5, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #6
  call void @llvm.lifetime.end.p0(i64 12, ptr %13) #6
  br label %211

188:                                              ; preds = %131, %129, %125, %122, %121
  %189 = landingpad { ptr, i32 }
          cleanup
  %190 = extractvalue { ptr, i32 } %189, 0
  store ptr %190, ptr %4, align 8
  %191 = extractvalue { ptr, i32 } %189, 1
  store i32 %191, ptr %5, align 4
  br label %211

192:                                              ; preds = %132
  %193 = landingpad { ptr, i32 }
          cleanup
  %194 = extractvalue { ptr, i32 } %193, 0
  store ptr %194, ptr %4, align 8
  %195 = extractvalue { ptr, i32 } %193, 1
  store i32 %195, ptr %5, align 4
  br label %210

196:                                              ; preds = %139, %135, %134
  %197 = landingpad { ptr, i32 }
          cleanup
  %198 = extractvalue { ptr, i32 } %197, 0
  store ptr %198, ptr %4, align 8
  %199 = extractvalue { ptr, i32 } %197, 1
  store i32 %199, ptr %5, align 4
  br label %209

200:                                              ; preds = %140
  %201 = landingpad { ptr, i32 }
          cleanup
  %202 = extractvalue { ptr, i32 } %201, 0
  store ptr %202, ptr %4, align 8
  %203 = extractvalue { ptr, i32 } %201, 1
  store i32 %203, ptr %5, align 4
  br label %208

204:                                              ; preds = %142
  %205 = landingpad { ptr, i32 }
          cleanup
  %206 = extractvalue { ptr, i32 } %205, 0
  store ptr %206, ptr %4, align 8
  %207 = extractvalue { ptr, i32 } %205, 1
  store i32 %207, ptr %5, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %17) #6
  br label %208

208:                                              ; preds = %204, %200
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %18) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %18) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %17) #6
  br label %209

209:                                              ; preds = %208, %196
  call void @llvm.lifetime.end.p0(i64 16, ptr %16) #6
  br label %210

210:                                              ; preds = %209, %192
  call void @llvm.lifetime.end.p0(i64 16, ptr %15) #6
  br label %211

211:                                              ; preds = %210, %188, %184, %180
  call void @llvm.lifetime.end.p0(i64 12, ptr %11) #6
  br label %331

212:                                              ; preds = %230, %228, %224, %221, %216, %144
  %213 = landingpad { ptr, i32 }
          cleanup
  %214 = extractvalue { ptr, i32 } %213, 0
  store ptr %214, ptr %4, align 8
  %215 = extractvalue { ptr, i32 } %213, 1
  store i32 %215, ptr %5, align 4
  br label %264

216:                                              ; preds = %148
  invoke void @_ZN6glutil9PushStack10ResetStackEv(ptr noundef nonnull align 8 dereferenceable(8) %8)
          to label %217 unwind label %212

217:                                              ; preds = %216
  call void @llvm.lifetime.start.p0(i64 12, ptr %20) #6
  %218 = load ptr, ptr @g_pLightEnv, align 8, !tbaa !5
  %219 = load i32, ptr %19, align 4, !tbaa !14
  invoke void @_ZNK8LightEnv21GetPointLightWorldPosEi(ptr dead_on_unwind writable sret(%"struct.glm::detail::tvec3") align 4 %20, ptr noundef nonnull align 8 dereferenceable(192) %218, i32 noundef %219)
          to label %220 unwind label %246

220:                                              ; preds = %217
  invoke void @_ZN6glutil11MatrixStack9TranslateERKN3glm6detail5tvec3IfEE(ptr noundef nonnull align 8 dereferenceable(88) %2, ptr noundef nonnull align 4 dereferenceable(12) %20)
          to label %221 unwind label %246

221:                                              ; preds = %220
  call void @llvm.lifetime.end.p0(i64 12, ptr %20) #6
  %222 = load ptr, ptr @_funcptr_glUseProgram, align 8, !tbaa !5
  %223 = load i32, ptr @g_progUnlit, align 4, !tbaa !22
  invoke void %222(i32 noundef %223)
          to label %224 unwind label %212

224:                                              ; preds = %221
  %225 = load ptr, ptr @_funcptr_glUniformMatrix4fv, align 8, !tbaa !5
  %226 = load i32, ptr getelementptr inbounds (%struct.UnlitProgData, ptr @g_progUnlit, i32 0, i32 1), align 4, !tbaa !24
  %227 = invoke noundef nonnull align 4 dereferenceable(64) ptr @_ZNK6glutil11MatrixStack3TopEv(ptr noundef nonnull align 8 dereferenceable(88) %2)
          to label %228 unwind label %212

228:                                              ; preds = %224
  %229 = invoke noundef ptr @_ZN3glm9value_ptrIfEEPKT_RKNS_6detail7tmat4x4IS1_EE(ptr noundef nonnull align 4 dereferenceable(64) %227)
          to label %230 unwind label %212

230:                                              ; preds = %228
  invoke void %225(i32 noundef %226, i32 noundef 1, i8 noundef zeroext 0, ptr noundef %229)
          to label %231 unwind label %212

231:                                              ; preds = %230
  call void @llvm.lifetime.start.p0(i64 16, ptr %21) #6
  %232 = load ptr, ptr @g_pLightEnv, align 8, !tbaa !5
  %233 = load i32, ptr %19, align 4, !tbaa !14
  invoke void @_ZNK8LightEnv28GetPointLightScaledIntensityEi(ptr dead_on_unwind writable sret(%"struct.glm::detail::tvec4") align 4 %21, ptr noundef nonnull align 8 dereferenceable(192) %232, i32 noundef %233)
          to label %234 unwind label %250

234:                                              ; preds = %231
  %235 = load ptr, ptr @_funcptr_glUniform4fv, align 8, !tbaa !5
  %236 = load i32, ptr getelementptr inbounds (%struct.UnlitProgData, ptr @g_progUnlit, i32 0, i32 2), align 4, !tbaa !25
  %237 = invoke noundef ptr @_ZN3glm9value_ptrIfEEPT_RNS_6detail5tvec4IS1_EE(ptr noundef nonnull align 4 dereferenceable(16) %21)
          to label %238 unwind label %250

238:                                              ; preds = %234
  invoke void %235(i32 noundef %236, i32 noundef 1, ptr noundef %237)
          to label %239 unwind label %250

239:                                              ; preds = %238
  %240 = load ptr, ptr @g_pSphere, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr %22) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr %23) #6
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %23) #6
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %22, ptr noundef @.str.17, ptr noundef nonnull align 1 dereferenceable(1) %23)
          to label %241 unwind label %254

241:                                              ; preds = %239
  invoke void @_ZNK9Framework4Mesh6RenderERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(8) %240, ptr noundef nonnull align 8 dereferenceable(32) %22)
          to label %242 unwind label %258

242:                                              ; preds = %241
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %22) #6
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %23) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %23) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %22) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %21) #6
  br label %243

243:                                              ; preds = %242
  %244 = load i32, ptr %19, align 4, !tbaa !14
  %245 = add nsw i32 %244, 1
  store i32 %245, ptr %19, align 4, !tbaa !14
  br label %144, !llvm.loop !26

246:                                              ; preds = %220, %217
  %247 = landingpad { ptr, i32 }
          cleanup
  %248 = extractvalue { ptr, i32 } %247, 0
  store ptr %248, ptr %4, align 8
  %249 = extractvalue { ptr, i32 } %247, 1
  store i32 %249, ptr %5, align 4
  call void @llvm.lifetime.end.p0(i64 12, ptr %20) #6
  br label %264

250:                                              ; preds = %238, %234, %231
  %251 = landingpad { ptr, i32 }
          cleanup
  %252 = extractvalue { ptr, i32 } %251, 0
  store ptr %252, ptr %4, align 8
  %253 = extractvalue { ptr, i32 } %251, 1
  store i32 %253, ptr %5, align 4
  br label %263

254:                                              ; preds = %239
  %255 = landingpad { ptr, i32 }
          cleanup
  %256 = extractvalue { ptr, i32 } %255, 0
  store ptr %256, ptr %4, align 8
  %257 = extractvalue { ptr, i32 } %255, 1
  store i32 %257, ptr %5, align 4
  br label %262

258:                                              ; preds = %241
  %259 = landingpad { ptr, i32 }
          cleanup
  %260 = extractvalue { ptr, i32 } %259, 0
  store ptr %260, ptr %4, align 8
  %261 = extractvalue { ptr, i32 } %259, 1
  store i32 %261, ptr %5, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %22) #6
  br label %262

262:                                              ; preds = %258, %254
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %23) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %23) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %22) #6
  br label %263

263:                                              ; preds = %262, %250
  call void @llvm.lifetime.end.p0(i64 16, ptr %21) #6
  br label %264

264:                                              ; preds = %263, %246, %212
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #6
  br label %331

265:                                              ; preds = %150
  invoke void @_ZN6glutil9PushStack10ResetStackEv(ptr noundef nonnull align 8 dereferenceable(8) %8)
          to label %266 unwind label %167

266:                                              ; preds = %265
  %267 = load i8, ptr @g_bDrawCameraPos, align 1, !tbaa !9, !range !11, !noundef !12
  %268 = trunc i8 %267 to i1
  br i1 %268, label %269, label %330

269:                                              ; preds = %266
  invoke void @_ZN6glutil11MatrixStack11SetIdentityEv(ptr noundef nonnull align 8 dereferenceable(88) %2)
          to label %270 unwind label %167

270:                                              ; preds = %269
  call void @llvm.lifetime.start.p0(i64 12, ptr %24) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #6
  store float 0.000000e+00, ptr %25, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #6
  store float 0.000000e+00, ptr %26, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #6
  %271 = invoke noundef nonnull align 4 dereferenceable(36) ptr @_ZNK6glutil8ViewPole7GetViewEv(ptr noundef nonnull align 8 dereferenceable(148) @g_viewPole)
          to label %272 unwind label %308

272:                                              ; preds = %270
  %273 = getelementptr inbounds %"struct.glutil::ViewData", ptr %271, i32 0, i32 2
  %274 = load float, ptr %273, align 4, !tbaa !28
  %275 = fneg float %274
  store float %275, ptr %27, align 4, !tbaa !20
  invoke void @_ZN3glm6detail5tvec3IfEC2ERKfS4_S4_(ptr noundef nonnull align 4 dereferenceable(12) %24, ptr noundef nonnull align 4 dereferenceable(4) %25, ptr noundef nonnull align 4 dereferenceable(4) %26, ptr noundef nonnull align 4 dereferenceable(4) %27)
          to label %276 unwind label %308

276:                                              ; preds = %272
  invoke void @_ZN6glutil11MatrixStack9TranslateERKN3glm6detail5tvec3IfEE(ptr noundef nonnull align 8 dereferenceable(88) %2, ptr noundef nonnull align 4 dereferenceable(12) %24)
          to label %277 unwind label %308

277:                                              ; preds = %276
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #6
  call void @llvm.lifetime.end.p0(i64 12, ptr %24) #6
  %278 = load ptr, ptr @_funcptr_glDisable, align 8, !tbaa !5
  invoke void %278(i32 noundef 2929)
          to label %279 unwind label %167

279:                                              ; preds = %277
  %280 = load ptr, ptr @_funcptr_glDepthMask, align 8, !tbaa !5
  invoke void %280(i8 noundef zeroext 0)
          to label %281 unwind label %167

281:                                              ; preds = %279
  %282 = load ptr, ptr @_funcptr_glUseProgram, align 8, !tbaa !5
  %283 = load i32, ptr @g_progUnlit, align 4, !tbaa !22
  invoke void %282(i32 noundef %283)
          to label %284 unwind label %167

284:                                              ; preds = %281
  %285 = load ptr, ptr @_funcptr_glUniformMatrix4fv, align 8, !tbaa !5
  %286 = load i32, ptr getelementptr inbounds (%struct.UnlitProgData, ptr @g_progUnlit, i32 0, i32 1), align 4, !tbaa !24
  %287 = invoke noundef nonnull align 4 dereferenceable(64) ptr @_ZNK6glutil11MatrixStack3TopEv(ptr noundef nonnull align 8 dereferenceable(88) %2)
          to label %288 unwind label %167

288:                                              ; preds = %284
  %289 = invoke noundef ptr @_ZN3glm9value_ptrIfEEPKT_RKNS_6detail7tmat4x4IS1_EE(ptr noundef nonnull align 4 dereferenceable(64) %287)
          to label %290 unwind label %167

290:                                              ; preds = %288
  invoke void %285(i32 noundef %286, i32 noundef 1, i8 noundef zeroext 0, ptr noundef %289)
          to label %291 unwind label %167

291:                                              ; preds = %290
  %292 = load ptr, ptr @_funcptr_glUniform4f, align 8, !tbaa !5
  %293 = load i32, ptr getelementptr inbounds (%struct.UnlitProgData, ptr @g_progUnlit, i32 0, i32 2), align 4, !tbaa !25
  invoke void %292(i32 noundef %293, float noundef 2.500000e-01, float noundef 2.500000e-01, float noundef 2.500000e-01, float noundef 1.000000e+00)
          to label %294 unwind label %167

294:                                              ; preds = %291
  %295 = load ptr, ptr @g_pSphere, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr %28) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr %29) #6
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %29) #6
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %28, ptr noundef @.str.17, ptr noundef nonnull align 1 dereferenceable(1) %29)
          to label %296 unwind label %312

296:                                              ; preds = %294
  invoke void @_ZNK9Framework4Mesh6RenderERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(8) %295, ptr noundef nonnull align 8 dereferenceable(32) %28)
          to label %297 unwind label %316

297:                                              ; preds = %296
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %28) #6
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %29) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %29) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %28) #6
  %298 = load ptr, ptr @_funcptr_glDepthMask, align 8, !tbaa !5
  invoke void %298(i8 noundef zeroext 1)
          to label %299 unwind label %167

299:                                              ; preds = %297
  %300 = load ptr, ptr @_funcptr_glEnable, align 8, !tbaa !5
  invoke void %300(i32 noundef 2929)
          to label %301 unwind label %167

301:                                              ; preds = %299
  %302 = load ptr, ptr @_funcptr_glUniform4f, align 8, !tbaa !5
  %303 = load i32, ptr getelementptr inbounds (%struct.UnlitProgData, ptr @g_progUnlit, i32 0, i32 2), align 4, !tbaa !25
  invoke void %302(i32 noundef %303, float noundef 1.000000e+00, float noundef 1.000000e+00, float noundef 1.000000e+00, float noundef 1.000000e+00)
          to label %304 unwind label %167

304:                                              ; preds = %301
  %305 = load ptr, ptr @g_pSphere, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr %30) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr %31) #6
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %31) #6
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %30, ptr noundef @.str.17, ptr noundef nonnull align 1 dereferenceable(1) %31)
          to label %306 unwind label %321

306:                                              ; preds = %304
  invoke void @_ZNK9Framework4Mesh6RenderERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(8) %305, ptr noundef nonnull align 8 dereferenceable(32) %30)
          to label %307 unwind label %325

307:                                              ; preds = %306
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %30) #6
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %31) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %31) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %30) #6
  br label %330

308:                                              ; preds = %276, %272, %270
  %309 = landingpad { ptr, i32 }
          cleanup
  %310 = extractvalue { ptr, i32 } %309, 0
  store ptr %310, ptr %4, align 8
  %311 = extractvalue { ptr, i32 } %309, 1
  store i32 %311, ptr %5, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #6
  call void @llvm.lifetime.end.p0(i64 12, ptr %24) #6
  br label %331

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

316:                                              ; preds = %296
  %317 = landingpad { ptr, i32 }
          cleanup
  %318 = extractvalue { ptr, i32 } %317, 0
  store ptr %318, ptr %4, align 8
  %319 = extractvalue { ptr, i32 } %317, 1
  store i32 %319, ptr %5, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %28) #6
  br label %320

320:                                              ; preds = %316, %312
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %29) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %29) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %28) #6
  br label %331

321:                                              ; preds = %304
  %322 = landingpad { ptr, i32 }
          cleanup
  %323 = extractvalue { ptr, i32 } %322, 0
  store ptr %323, ptr %4, align 8
  %324 = extractvalue { ptr, i32 } %322, 1
  store i32 %324, ptr %5, align 4
  br label %329

325:                                              ; preds = %306
  %326 = landingpad { ptr, i32 }
          cleanup
  %327 = extractvalue { ptr, i32 } %326, 0
  store ptr %327, ptr %4, align 8
  %328 = extractvalue { ptr, i32 } %326, 1
  store i32 %328, ptr %5, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %30) #6
  br label %329

329:                                              ; preds = %325, %321
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %31) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %31) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %30) #6
  br label %331

330:                                              ; preds = %307, %266
  call void @_ZN6glutil9PushStackD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %8) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #6
  br label %333

331:                                              ; preds = %329, %320, %308, %264, %211, %179, %167
  call void @_ZN6glutil9PushStackD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %8) #6
  br label %332

332:                                              ; preds = %331, %163
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #6
  br label %337

333:                                              ; preds = %330, %74, %71
  invoke void @glutPostRedisplay()
          to label %334 unwind label %159

334:                                              ; preds = %333
  invoke void @glutSwapBuffers()
          to label %335 unwind label %159

335:                                              ; preds = %334
  call void @llvm.lifetime.end.p0(i64 160, ptr %6) #6
  call void @_ZN6glutil11MatrixStackD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %2) #6
  call void @llvm.lifetime.end.p0(i64 88, ptr %2) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %1) #6
  br label %336

336:                                              ; preds = %335, %34
  ret void

337:                                              ; preds = %332, %159, %155
  call void @llvm.lifetime.end.p0(i64 160, ptr %6) #6
  br label %338

338:                                              ; preds = %337, %151
  call void @_ZN6glutil11MatrixStackD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %2) #6
  call void @llvm.lifetime.end.p0(i64 88, ptr %2) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %1) #6
  br label %339

339:                                              ; preds = %338
  %340 = load ptr, ptr %4, align 8
  %341 = load i32, ptr %5, align 4
  %342 = insertvalue { ptr, i32 } poison, ptr %340, 0
  %343 = insertvalue { ptr, i32 } %342, i32 %341, 1
  resume { ptr, i32 } %343
}

declare void @_ZN8LightEnv10UpdateTimeEv(ptr noundef nonnull align 8 dereferenceable(192)) #4

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNK8LightEnv18GetBackgroundColorEv(ptr dead_on_unwind noalias writable sret(%"struct.glm::detail::tvec4") align 4, ptr noundef nonnull align 8 dereferenceable(192)) #2 align 2

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

declare void @_ZN6glutil11MatrixStack11ApplyMatrixERKN3glm6detail7tmat4x4IfEE(ptr noundef nonnull align 8 dereferenceable(88), ptr noundef nonnull align 4 dereferenceable(64)) #4

declare void @_ZNK6glutil8ViewPole10CalcMatrixEv(ptr dead_on_unwind writable sret(%"struct.glm::detail::tmat4x4") align 4, ptr noundef nonnull align 8 dereferenceable(148)) unnamed_addr #4

declare void @_ZNK8LightEnv13GetLightBlockERKN3glm6detail7tmat4x4IfEE(ptr dead_on_unwind writable sret(%struct.LightBlock) align 4, ptr noundef nonnull align 8 dereferenceable(192), ptr noundef nonnull align 4 dereferenceable(64)) #4

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

declare void @_ZN6glutil11MatrixStack7RotateXEf(ptr noundef nonnull align 8 dereferenceable(88), float noundef) #4

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef ptr @_ZN3glm9value_ptrIfEEPKT_RKNS_6detail7tmat4x4IS1_EE(ptr noundef nonnull align 4 dereferenceable(64)) #5

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

declare noundef i32 @_ZNK8LightEnv12GetNumLightsEv(ptr noundef nonnull align 8 dereferenceable(192)) #4

declare void @_ZNK9Framework4Mesh6RenderERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(32)) #4

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

declare void @_ZNK8LightEnv20GetSunlightDirectionEv(ptr dead_on_unwind writable sret(%"struct.glm::detail::tvec4") align 4, ptr noundef nonnull align 8 dereferenceable(192)) #4

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

declare void @_ZN6glutil11MatrixStack9TranslateERKN3glm6detail5tvec3IfEE(ptr noundef nonnull align 8 dereferenceable(88), ptr noundef nonnull align 4 dereferenceable(12)) #4

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

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

declare void @_ZNK8LightEnv26GetSunlightScaledIntensityEv(ptr dead_on_unwind writable sret(%"struct.glm::detail::tvec4") align 4, ptr noundef nonnull align 8 dereferenceable(192)) #4

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN3glm6detail5tvec4IfEC2Ev(ptr noundef nonnull align 4 dereferenceable(16)) unnamed_addr #3 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZN3glm9value_ptrIfEEPT_RNS_6detail5tvec4IS1_EE(ptr noundef nonnull align 4 dereferenceable(16)) #3

declare noundef i32 @_ZNK8LightEnv17GetNumPointLightsEv(ptr noundef nonnull align 8 dereferenceable(192)) #4

declare void @_ZNK8LightEnv21GetPointLightWorldPosEi(ptr dead_on_unwind writable sret(%"struct.glm::detail::tvec3") align 4, ptr noundef nonnull align 8 dereferenceable(192), i32 noundef) #4

declare void @_ZNK8LightEnv28GetPointLightScaledIntensityEi(ptr dead_on_unwind writable sret(%"struct.glm::detail::tvec4") align 4, ptr noundef nonnull align 8 dereferenceable(192), i32 noundef) #4

declare void @_ZN6glutil11MatrixStack11SetIdentityEv(ptr noundef nonnull align 8 dereferenceable(88)) #4

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

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

declare void @glutPostRedisplay() #4

declare void @glutSwapBuffers() #4

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN6glutil11MatrixStackD2Ev(ptr noundef nonnull align 8 dereferenceable(88)) unnamed_addr #3 align 2

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"bool", !7, i64 0}
!11 = !{i8 0, i8 2}
!12 = !{}
!13 = !{!7, !7, i64 0}
!14 = !{!15, !15, i64 0}
!15 = !{!"int", !7, i64 0}
!16 = !{!17, !15, i64 0}
!17 = !{!"_ZTS11ProgramData", !15, i64 0, !15, i64 4, !15, i64 8}
!18 = !{!17, !15, i64 4}
!19 = !{!17, !15, i64 8}
!20 = !{!21, !21, i64 0}
!21 = !{!"float", !7, i64 0}
!22 = !{!23, !15, i64 0}
!23 = !{!"_ZTS13UnlitProgData", !15, i64 0, !15, i64 4, !15, i64 8}
!24 = !{!23, !15, i64 4}
!25 = !{!23, !15, i64 8}
!26 = distinct !{!26, !27}
!27 = !{!"llvm.loop.mustprogress"}
!28 = !{!29, !21, i64 28}
!29 = !{!"_ZTSN6glutil8ViewDataE", !30, i64 0, !31, i64 12, !21, i64 28, !21, i64 32}
!30 = !{!"_ZTSN3glm6detail5tvec3IfEE", !7, i64 0}
!31 = !{!"_ZTSN3glm6detail5tquatIfEE", !21, i64 0, !21, i64 4, !21, i64 8, !21, i64 12}


; 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.ProgramData = type { i32, i32, i32 }
%struct.UnlitProgData = type { i32, i32, i32 }
%"class.glutil::ViewPole" = type <{ %"class.glutil::ViewProvider", %"struct.glutil::ViewData", %"struct.glutil::ViewScale", %"struct.glutil::ViewData", i32, i8, i8, [2 x i8], i32, float, %"struct.glm::detail::tvec2", %"struct.glm::detail::tquat", [4 x i8] }>
%"class.glutil::ViewProvider" = type { ptr }
%"struct.glutil::ViewScale" = type { float, float, float, float, float, float, float }
%"struct.glutil::ViewData" = type { %"struct.glm::detail::tvec3", %"struct.glm::detail::tquat", float, float }
%"struct.glm::detail::tvec3" = type { %union.anon.5 }
%union.anon.5 = type { %struct.anon }
%struct.anon = type { float, float, float }
%"struct.glm::detail::tvec2" = type { %union.anon.8 }
%union.anon.8 = type { %struct.anon.9 }
%struct.anon.9 = type { i32, i32 }
%"struct.glm::detail::tquat" = type { float, float, float, float }
%"struct.glm::detail::tvec4" = type { %union.anon.39 }
%union.anon.39 = type { %struct.anon.40 }
%struct.anon.40 = type { float, float, float, float }
%"class.glutil::MatrixStack" = type { %"class.std::stack", %"struct.glm::detail::tmat4x4" }
%"class.std::stack" = type { %"class.std::vector.43" }
%"class.std::vector.43" = type { %"struct.std::_Vector_base.44" }
%"struct.std::_Vector_base.44" = type { %"struct.std::_Vector_base<glm::detail::tmat4x4<float>, std::allocator<glm::detail::tmat4x4<float>>>::_Vector_impl" }
%"struct.std::_Vector_base<glm::detail::tmat4x4<float>, std::allocator<glm::detail::tmat4x4<float>>>::_Vector_impl" = type { %"struct.std::_Vector_base<glm::detail::tmat4x4<float>, std::allocator<glm::detail::tmat4x4<float>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<glm::detail::tmat4x4<float>, std::allocator<glm::detail::tmat4x4<float>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.glm::detail::tmat4x4" = type { [4 x %"struct.glm::detail::tvec4"] }
%struct.LightBlock = type { %"struct.glm::detail::tvec4", float, float, [2 x float], [4 x %struct.PerLight] }
%struct.PerLight = type { %"struct.glm::detail::tvec4", %"struct.glm::detail::tvec4" }
%"class.glutil::PushStack" = type { ptr }
%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%"class.std::allocator.0" = type { i8 }

@g_progStandard = external dso_local local_unnamed_addr global %struct.ProgramData, align 4
@g_progUnlit = external dso_local local_unnamed_addr global %struct.UnlitProgData, align 4
@_funcptr_glUseProgram = external local_unnamed_addr global ptr, align 8
@_funcptr_glUniform1i = external local_unnamed_addr global ptr, align 8
@g_lightUniformBuffer = external dso_local local_unnamed_addr global i32, align 4
@g_linearTexture = external dso_local local_unnamed_addr global i32, align 4
@g_samplers = external dso_local local_unnamed_addr global [2 x i32], align 4
@_funcptr_glBindTexture = external local_unnamed_addr global ptr, align 8
@g_viewPole = external dso_local global %"class.glutil::ViewPole", align 8
@g_pLightEnv = external dso_local local_unnamed_addr global ptr, align 8
@g_pTerrain = external dso_local local_unnamed_addr global ptr, align 8
@g_pSphere = external dso_local local_unnamed_addr global ptr, align 8
@_funcptr_glEnable = external local_unnamed_addr global ptr, align 8
@_funcptr_glDepthMask = external local_unnamed_addr global ptr, align 8
@_funcptr_glBindBuffer = external local_unnamed_addr global ptr, align 8
@_funcptr_glBufferData = external local_unnamed_addr global ptr, align 8
@g_currSampler = external dso_local local_unnamed_addr global i32, align 4
@g_bDrawCameraPos = external dso_local local_unnamed_addr global i8, align 1
@g_useGammaDisplay = external dso_local local_unnamed_addr global i8, align 1
@_funcptr_glDisable = external local_unnamed_addr global ptr, align 8
@_funcptr_glClearColor = external local_unnamed_addr global ptr, align 8
@_funcptr_glClearDepth = external local_unnamed_addr global ptr, align 8
@_funcptr_glClear = external local_unnamed_addr global ptr, align 8
@_funcptr_glUniformMatrix4fv = external local_unnamed_addr global ptr, align 8
@_funcptr_glActiveTexture = external local_unnamed_addr global ptr, align 8
@_funcptr_glBindSampler = external local_unnamed_addr global ptr, align 8
@.str.16 = external hidden unnamed_addr constant [8 x i8], align 1
@_funcptr_glUniform4fv = external local_unnamed_addr global ptr, align 8
@.str.17 = external hidden unnamed_addr constant [5 x i8], align 1
@_funcptr_glUniform4f = external local_unnamed_addr global ptr, align 8

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

declare i32 @__gxx_personality_v0(...)

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

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_Z7displayv() local_unnamed_addr #2 personality ptr @__gxx_personality_v0 {
  %1 = alloca %"struct.glm::detail::tvec4", align 4
  %2 = alloca %"class.glutil::MatrixStack", align 8
  %3 = alloca %"struct.glm::detail::tmat4x4", align 4
  %4 = alloca %struct.LightBlock, align 4
  %5 = alloca %"struct.glm::detail::tmat4x4", align 4
  %6 = alloca %"class.glutil::PushStack", align 8
  %7 = alloca %"class.std::__cxx11::basic_string", align 8
  %8 = alloca %"class.std::allocator.0", align 1
  %9 = alloca %"struct.glm::detail::tvec3", align 4
  %10 = alloca %"struct.glm::detail::tvec4", align 4
  %11 = alloca %"struct.glm::detail::tvec3", align 4
  %12 = alloca float, align 4
  %13 = alloca %"struct.glm::detail::tvec4", align 4
  %14 = alloca %"struct.glm::detail::tvec4", align 4
  %15 = alloca %"class.std::__cxx11::basic_string", align 8
  %16 = alloca %"class.std::allocator.0", align 1
  %17 = alloca %"struct.glm::detail::tvec3", align 4
  %18 = alloca %"struct.glm::detail::tvec4", align 4
  %19 = alloca %"class.std::__cxx11::basic_string", align 8
  %20 = alloca %"class.std::allocator.0", align 1
  %21 = alloca %"struct.glm::detail::tvec3", align 4
  %22 = alloca float, align 4
  %23 = alloca float, align 4
  %24 = alloca float, align 4
  %25 = alloca %"class.std::__cxx11::basic_string", align 8
  %26 = alloca %"class.std::allocator.0", align 1
  %27 = alloca %"class.std::__cxx11::basic_string", align 8
  %28 = alloca %"class.std::allocator.0", align 1
  %29 = load ptr, ptr @g_pLightEnv, align 8, !tbaa !5
  %.not = icmp eq ptr %29, null
  br i1 %.not, label %256, label %30

30:                                               ; preds = %0
  %31 = load i8, ptr @g_useGammaDisplay, align 1, !tbaa !9, !range !11, !noundef !12
  %32 = trunc nuw i8 %31 to i1
  %_funcptr_glEnable.val = load ptr, ptr @_funcptr_glEnable, align 8
  %_funcptr_glDisable.val = load ptr, ptr @_funcptr_glDisable, align 8
  %33 = select i1 %32, ptr %_funcptr_glEnable.val, ptr %_funcptr_glDisable.val
  tail call void %33(i32 noundef 36281)
  %34 = load ptr, ptr @g_pLightEnv, align 8, !tbaa !5
  tail call void @_ZN8LightEnv10UpdateTimeEv(ptr noundef nonnull align 8 dereferenceable(192) %34)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %1) #6
  %35 = load ptr, ptr @g_pLightEnv, align 8, !tbaa !5
  call void @_ZNK8LightEnv18GetBackgroundColorEv(ptr dead_on_unwind nonnull writable sret(%"struct.glm::detail::tvec4") align 4 %1, ptr noundef nonnull align 8 dereferenceable(192) %35)
  %36 = load ptr, ptr @_funcptr_glClearColor, align 8, !tbaa !5
  %37 = load float, ptr %1, align 4, !tbaa !13
  %38 = getelementptr inbounds i8, ptr %1, i64 4
  %39 = load float, ptr %38, align 4, !tbaa !13
  %40 = getelementptr inbounds i8, ptr %1, i64 8
  %41 = load float, ptr %40, align 4, !tbaa !13
  %42 = getelementptr inbounds i8, ptr %1, i64 12
  %43 = load float, ptr %42, align 4, !tbaa !13
  call void %36(float noundef %37, float noundef %39, float noundef %41, float noundef %43)
  %44 = load ptr, ptr @_funcptr_glClearDepth, align 8, !tbaa !5
  call void %44(double noundef 1.000000e+00)
  %45 = load ptr, ptr @_funcptr_glClear, align 8, !tbaa !5
  call void %45(i32 noundef 16640)
  call void @llvm.lifetime.start.p0(i64 88, ptr nonnull %2) #6
  call void @_ZN6glutil11MatrixStackC2Ev(ptr noundef nonnull align 8 dereferenceable(88) %2)
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %3) #6
  invoke void @_ZNK6glutil8ViewPole10CalcMatrixEv(ptr dead_on_unwind nonnull writable sret(%"struct.glm::detail::tmat4x4") align 4 %3, ptr noundef nonnull align 8 dereferenceable(148) @g_viewPole)
          to label %46 unwind label %130

46:                                               ; preds = %30
  invoke void @_ZN6glutil11MatrixStack11ApplyMatrixERKN3glm6detail7tmat4x4IfEE(ptr noundef nonnull align 8 dereferenceable(88) %2, ptr noundef nonnull align 4 dereferenceable(64) %3)
          to label %47 unwind label %130

47:                                               ; preds = %46
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %3) #6
  call void @llvm.lifetime.start.p0(i64 160, ptr nonnull %4) #6
  %48 = load ptr, ptr @g_pLightEnv, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %5) #6
  invoke void @_ZNK6glutil8ViewPole10CalcMatrixEv(ptr dead_on_unwind nonnull writable sret(%"struct.glm::detail::tmat4x4") align 4 %5, ptr noundef nonnull align 8 dereferenceable(148) @g_viewPole)
          to label %49 unwind label %132

49:                                               ; preds = %47
  invoke void @_ZNK8LightEnv13GetLightBlockERKN3glm6detail7tmat4x4IfEE(ptr dead_on_unwind nonnull writable sret(%struct.LightBlock) align 4 %4, ptr noundef nonnull align 8 dereferenceable(192) %48, ptr noundef nonnull align 4 dereferenceable(64) %5)
          to label %50 unwind label %132

50:                                               ; preds = %49
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %5) #6
  %51 = load ptr, ptr @_funcptr_glBindBuffer, align 8, !tbaa !5
  %52 = load i32, ptr @g_lightUniformBuffer, align 4, !tbaa !14
  invoke void %51(i32 noundef 35345, i32 noundef %52)
          to label %53 unwind label %134

53:                                               ; preds = %50
  %54 = load ptr, ptr @_funcptr_glBufferData, align 8, !tbaa !5
  invoke void %54(i32 noundef 35345, i64 noundef 160, ptr noundef nonnull %4, i32 noundef 35040)
          to label %55 unwind label %134

55:                                               ; preds = %53
  %56 = load ptr, ptr @_funcptr_glBindBuffer, align 8, !tbaa !5
  invoke void %56(i32 noundef 35345, i32 noundef 0)
          to label %57 unwind label %134

57:                                               ; preds = %55
  %58 = load ptr, ptr @g_pSphere, align 8, !tbaa !5
  %59 = icmp ne ptr %58, null
  %60 = load ptr, ptr @g_pTerrain, align 8
  %61 = icmp ne ptr %60, null
  %or.cond = select i1 %59, i1 %61, i1 false
  br i1 %or.cond, label %62, label %253

62:                                               ; preds = %57
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %6) #6
  invoke void @_ZN6glutil9PushStackC2ERNS_11MatrixStackE(ptr noundef nonnull align 8 dereferenceable(8) %6, ptr noundef nonnull align 8 dereferenceable(88) %2)
          to label %63 unwind label %136

63:                                               ; preds = %62
  invoke void @_ZN6glutil11MatrixStack7RotateXEf(ptr noundef nonnull align 8 dereferenceable(88) %2, float noundef -9.000000e+01)
          to label %64 unwind label %138

64:                                               ; preds = %63
  %65 = load ptr, ptr @_funcptr_glUseProgram, align 8, !tbaa !5
  %66 = load i32, ptr @g_progStandard, align 4, !tbaa !16
  invoke void %65(i32 noundef %66)
          to label %67 unwind label %138

67:                                               ; preds = %64
  %68 = load ptr, ptr @_funcptr_glUniformMatrix4fv, align 8, !tbaa !5
  %69 = load i32, ptr getelementptr inbounds (i8, ptr @g_progStandard, i64 4), align 4, !tbaa !18
  %70 = call noundef nonnull align 4 dereferenceable(64) ptr @_ZNK6glutil11MatrixStack3TopEv(ptr noundef nonnull align 8 dereferenceable(88) %2)
  %71 = invoke noundef ptr @_ZN3glm9value_ptrIfEEPKT_RKNS_6detail7tmat4x4IS1_EE(ptr noundef nonnull align 4 dereferenceable(64) %70)
          to label %72 unwind label %138

72:                                               ; preds = %67
  invoke void %68(i32 noundef %69, i32 noundef 1, i8 noundef zeroext 0, ptr noundef %71)
          to label %73 unwind label %138

73:                                               ; preds = %72
  %74 = load ptr, ptr @_funcptr_glUniform1i, align 8, !tbaa !5
  %75 = load i32, ptr getelementptr inbounds (i8, ptr @g_progStandard, i64 8), align 4, !tbaa !19
  %76 = load ptr, ptr @g_pLightEnv, align 8, !tbaa !5
  %77 = invoke noundef i32 @_ZNK8LightEnv12GetNumLightsEv(ptr noundef nonnull align 8 dereferenceable(192) %76)
          to label %78 unwind label %138

78:                                               ; preds = %73
  invoke void %74(i32 noundef %75, i32 noundef %77)
          to label %79 unwind label %138

79:                                               ; preds = %78
  %80 = load ptr, ptr @_funcptr_glActiveTexture, align 8, !tbaa !5
  invoke void %80(i32 noundef 33984)
          to label %81 unwind label %138

81:                                               ; preds = %79
  %82 = load ptr, ptr @_funcptr_glBindTexture, align 8, !tbaa !5
  %83 = load i32, ptr @g_linearTexture, align 4, !tbaa !14
  invoke void %82(i32 noundef 3553, i32 noundef %83)
          to label %84 unwind label %138

84:                                               ; preds = %81
  %85 = load ptr, ptr @_funcptr_glBindSampler, align 8, !tbaa !5
  %86 = load i32, ptr @g_currSampler, align 4, !tbaa !14
  %87 = sext i32 %86 to i64
  %88 = getelementptr inbounds [2 x i32], ptr @g_samplers, i64 0, i64 %87
  %89 = load i32, ptr %88, align 4, !tbaa !14
  invoke void %85(i32 noundef 0, i32 noundef %89)
          to label %90 unwind label %138

90:                                               ; preds = %84
  %91 = load ptr, ptr @g_pTerrain, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %7) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %8) #6
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %8) #6
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %7, ptr noundef nonnull @.str.16, ptr noundef nonnull align 1 dereferenceable(1) %8)
          to label %92 unwind label %140

92:                                               ; preds = %90
  invoke void @_ZNK9Framework4Mesh6RenderERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(8) %91, ptr noundef nonnull align 8 dereferenceable(32) %7)
          to label %93 unwind label %142

93:                                               ; preds = %92
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %7) #6
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %8) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %8) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %7) #6
  %94 = load ptr, ptr @_funcptr_glBindSampler, align 8, !tbaa !5
  invoke void %94(i32 noundef 0, i32 noundef 0)
          to label %95 unwind label %138

95:                                               ; preds = %93
  %96 = load ptr, ptr @_funcptr_glBindTexture, align 8, !tbaa !5
  invoke void %96(i32 noundef 3553, i32 noundef 0)
          to label %97 unwind label %138

97:                                               ; preds = %95
  %98 = load ptr, ptr @_funcptr_glUseProgram, align 8, !tbaa !5
  invoke void %98(i32 noundef 0)
          to label %99 unwind label %138

99:                                               ; preds = %97
  invoke void @_ZN6glutil9PushStack10ResetStackEv(ptr noundef nonnull align 8 dereferenceable(8) %6)
          to label %100 unwind label %138

100:                                              ; preds = %99
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %9) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %10) #6
  %101 = load ptr, ptr @g_pLightEnv, align 8, !tbaa !5
  invoke void @_ZNK8LightEnv20GetSunlightDirectionEv(ptr dead_on_unwind nonnull writable sret(%"struct.glm::detail::tvec4") align 4 %10, ptr noundef nonnull align 8 dereferenceable(192) %101)
          to label %102 unwind label %145

102:                                              ; preds = %100
  call void @_ZN3glm6detail5tvec3IfEC2IfEERKNS0_5tvec4IT_EE(ptr noundef nonnull align 4 dereferenceable(12) %9, ptr noundef nonnull align 4 dereferenceable(16) %10)
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %10) #6
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %11) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %12) #6
  store float 5.000000e+02, ptr %12, align 4, !tbaa !20
  invoke void @_ZN3glm6detailmlIfEENS0_5tvec3IT_EERKS4_RKS3_(ptr dead_on_unwind nonnull writable sret(%"struct.glm::detail::tvec3") align 4 %11, ptr noundef nonnull align 4 dereferenceable(12) %9, ptr noundef nonnull align 4 dereferenceable(4) %12)
          to label %103 unwind label %147

103:                                              ; preds = %102
  invoke void @_ZN6glutil11MatrixStack9TranslateERKN3glm6detail5tvec3IfEE(ptr noundef nonnull align 8 dereferenceable(88) %2, ptr noundef nonnull align 4 dereferenceable(12) %11)
          to label %104 unwind label %147

104:                                              ; preds = %103
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %12) #6
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %11) #6
  invoke void @_ZN6glutil11MatrixStack5ScaleEfff(ptr noundef nonnull align 8 dereferenceable(88) %2, float noundef 3.000000e+01, float noundef 3.000000e+01, float noundef 3.000000e+01)
          to label %105 unwind label %149

105:                                              ; preds = %104
  %106 = load ptr, ptr @_funcptr_glUseProgram, align 8, !tbaa !5
  %107 = load i32, ptr @g_progUnlit, align 4, !tbaa !22
  invoke void %106(i32 noundef %107)
          to label %108 unwind label %149

108:                                              ; preds = %105
  %109 = load ptr, ptr @_funcptr_glUniformMatrix4fv, align 8, !tbaa !5
  %110 = load i32, ptr getelementptr inbounds (i8, ptr @g_progUnlit, i64 4), align 4, !tbaa !24
  %111 = call noundef nonnull align 4 dereferenceable(64) ptr @_ZNK6glutil11MatrixStack3TopEv(ptr noundef nonnull align 8 dereferenceable(88) %2)
  %112 = invoke noundef ptr @_ZN3glm9value_ptrIfEEPKT_RKNS_6detail7tmat4x4IS1_EE(ptr noundef nonnull align 4 dereferenceable(64) %111)
          to label %113 unwind label %149

113:                                              ; preds = %108
  invoke void %109(i32 noundef %110, i32 noundef 1, i8 noundef zeroext 0, ptr noundef %112)
          to label %114 unwind label %149

114:                                              ; preds = %113
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %13) #6
  %115 = load ptr, ptr @g_pLightEnv, align 8, !tbaa !5
  invoke void @_ZNK8LightEnv26GetSunlightScaledIntensityEv(ptr dead_on_unwind nonnull writable sret(%"struct.glm::detail::tvec4") align 4 %13, ptr noundef nonnull align 8 dereferenceable(192) %115)
          to label %116 unwind label %151

116:                                              ; preds = %114
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %14) #6
  call void @_ZN3glm6detail5tvec4IfEC2Ev(ptr noundef nonnull align 4 dereferenceable(16) %14)
  %117 = load ptr, ptr @_funcptr_glUniform4fv, align 8, !tbaa !5
  %118 = load i32, ptr getelementptr inbounds (i8, ptr @g_progUnlit, i64 8), align 4, !tbaa !25
  %119 = call noundef ptr @_ZN3glm9value_ptrIfEEPT_RNS_6detail5tvec4IS1_EE(ptr noundef nonnull align 4 dereferenceable(16) %13)
  invoke void %117(i32 noundef %118, i32 noundef 1, ptr noundef %119)
          to label %120 unwind label %153

120:                                              ; preds = %116
  %121 = load ptr, ptr @g_pSphere, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %15) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %16) #6
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %16) #6
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %15, ptr noundef nonnull @.str.17, ptr noundef nonnull align 1 dereferenceable(1) %16)
          to label %122 unwind label %155

122:                                              ; preds = %120
  invoke void @_ZNK9Framework4Mesh6RenderERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(8) %121, ptr noundef nonnull align 8 dereferenceable(32) %15)
          to label %123 unwind label %157

123:                                              ; preds = %122
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %15) #6
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %16) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %16) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %15) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %14) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %13) #6
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %9) #6
  br label %124

124:                                              ; preds = %187, %123
  %.0 = phi i32 [ 0, %123 ], [ %188, %187 ]
  %125 = load ptr, ptr @g_pLightEnv, align 8, !tbaa !5
  %126 = invoke noundef i32 @_ZNK8LightEnv17GetNumPointLightsEv(ptr noundef nonnull align 8 dereferenceable(192) %125)
          to label %127 unwind label %163

127:                                              ; preds = %124
  %128 = icmp slt i32 %.0, %126
  br i1 %128, label %165, label %129

129:                                              ; preds = %127
  invoke void @_ZN6glutil9PushStack10ResetStackEv(ptr noundef nonnull align 8 dereferenceable(8) %6)
          to label %199 unwind label %138

130:                                              ; preds = %46, %30
  %131 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %3) #6
  br label %258

132:                                              ; preds = %49, %47
  %133 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %5) #6
  br label %257

134:                                              ; preds = %254, %253, %55, %53, %50
  %135 = landingpad { ptr, i32 }
          cleanup
  br label %257

136:                                              ; preds = %62
  %137 = landingpad { ptr, i32 }
          cleanup
  br label %252

138:                                              ; preds = %231, %229, %227, %221, %220, %215, %212, %210, %208, %202, %129, %99, %97, %95, %93, %84, %81, %79, %78, %73, %72, %67, %64, %63
  %139 = landingpad { ptr, i32 }
          cleanup
  br label %251

140:                                              ; preds = %90
  %141 = landingpad { ptr, i32 }
          cleanup
  br label %144

142:                                              ; preds = %92
  %143 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %7) #6
  br label %144

144:                                              ; preds = %142, %140
  %.pn = phi { ptr, i32 } [ %143, %142 ], [ %141, %140 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %8) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %8) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %7) #6
  br label %251

145:                                              ; preds = %100
  %146 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %10) #6
  br label %162

147:                                              ; preds = %103, %102
  %148 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %12) #6
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %11) #6
  br label %162

149:                                              ; preds = %113, %108, %105, %104
  %150 = landingpad { ptr, i32 }
          cleanup
  br label %162

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

153:                                              ; preds = %116
  %154 = landingpad { ptr, i32 }
          cleanup
  br label %160

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

157:                                              ; preds = %122
  %158 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %15) #6
  br label %159

159:                                              ; preds = %157, %155
  %.pn22 = phi { ptr, i32 } [ %158, %157 ], [ %156, %155 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %16) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %16) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %15) #6
  br label %160

160:                                              ; preds = %159, %153
  %.pn22.pn = phi { ptr, i32 } [ %.pn22, %159 ], [ %154, %153 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %14) #6
  br label %161

161:                                              ; preds = %160, %151
  %.pn22.pn.pn = phi { ptr, i32 } [ %.pn22.pn, %160 ], [ %152, %151 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %13) #6
  br label %162

162:                                              ; preds = %161, %149, %147, %145
  %.pn22.pn.pn.pn = phi { ptr, i32 } [ %.pn22.pn.pn, %161 ], [ %150, %149 ], [ %148, %147 ], [ %146, %145 ]
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %9) #6
  br label %251

163:                                              ; preds = %177, %172, %169, %165, %124
  %164 = landingpad { ptr, i32 }
          cleanup
  br label %251

165:                                              ; preds = %127
  invoke void @_ZN6glutil9PushStack10ResetStackEv(ptr noundef nonnull align 8 dereferenceable(8) %6)
          to label %166 unwind label %163

166:                                              ; preds = %165
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %17) #6
  %167 = load ptr, ptr @g_pLightEnv, align 8, !tbaa !5
  invoke void @_ZNK8LightEnv21GetPointLightWorldPosEi(ptr dead_on_unwind nonnull writable sret(%"struct.glm::detail::tvec3") align 4 %17, ptr noundef nonnull align 8 dereferenceable(192) %167, i32 noundef %.0)
          to label %168 unwind label %189

168:                                              ; preds = %166
  invoke void @_ZN6glutil11MatrixStack9TranslateERKN3glm6detail5tvec3IfEE(ptr noundef nonnull align 8 dereferenceable(88) %2, ptr noundef nonnull align 4 dereferenceable(12) %17)
          to label %169 unwind label %189

169:                                              ; preds = %168
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %17) #6
  %170 = load ptr, ptr @_funcptr_glUseProgram, align 8, !tbaa !5
  %171 = load i32, ptr @g_progUnlit, align 4, !tbaa !22
  invoke void %170(i32 noundef %171)
          to label %172 unwind label %163

172:                                              ; preds = %169
  %173 = load ptr, ptr @_funcptr_glUniformMatrix4fv, align 8, !tbaa !5
  %174 = load i32, ptr getelementptr inbounds (i8, ptr @g_progUnlit, i64 4), align 4, !tbaa !24
  %175 = call noundef nonnull align 4 dereferenceable(64) ptr @_ZNK6glutil11MatrixStack3TopEv(ptr noundef nonnull align 8 dereferenceable(88) %2)
  %176 = invoke noundef ptr @_ZN3glm9value_ptrIfEEPKT_RKNS_6detail7tmat4x4IS1_EE(ptr noundef nonnull align 4 dereferenceable(64) %175)
          to label %177 unwind label %163

177:                                              ; preds = %172
  invoke void %173(i32 noundef %174, i32 noundef 1, i8 noundef zeroext 0, ptr noundef %176)
          to label %178 unwind label %163

178:                                              ; preds = %177
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %18) #6
  %179 = load ptr, ptr @g_pLightEnv, align 8, !tbaa !5
  invoke void @_ZNK8LightEnv28GetPointLightScaledIntensityEi(ptr dead_on_unwind nonnull writable sret(%"struct.glm::detail::tvec4") align 4 %18, ptr noundef nonnull align 8 dereferenceable(192) %179, i32 noundef %.0)
          to label %180 unwind label %191

180:                                              ; preds = %178
  %181 = load ptr, ptr @_funcptr_glUniform4fv, align 8, !tbaa !5
  %182 = load i32, ptr getelementptr inbounds (i8, ptr @g_progUnlit, i64 8), align 4, !tbaa !25
  %183 = call noundef ptr @_ZN3glm9value_ptrIfEEPT_RNS_6detail5tvec4IS1_EE(ptr noundef nonnull align 4 dereferenceable(16) %18)
  invoke void %181(i32 noundef %182, i32 noundef 1, ptr noundef %183)
          to label %184 unwind label %191

184:                                              ; preds = %180
  %185 = load ptr, ptr @g_pSphere, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %19) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %20) #6
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %20) #6
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %19, ptr noundef nonnull @.str.17, ptr noundef nonnull align 1 dereferenceable(1) %20)
          to label %186 unwind label %193

186:                                              ; preds = %184
  invoke void @_ZNK9Framework4Mesh6RenderERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(8) %185, ptr noundef nonnull align 8 dereferenceable(32) %19)
          to label %187 unwind label %195

187:                                              ; preds = %186
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %19) #6
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %20) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %20) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %19) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %18) #6
  %188 = add nuw nsw i32 %.0, 1
  br label %124, !llvm.loop !26

189:                                              ; preds = %168, %166
  %190 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %17) #6
  br label %251

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

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

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

197:                                              ; preds = %195, %193
  %.pn31 = phi { ptr, i32 } [ %196, %195 ], [ %194, %193 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %20) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %20) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %19) #6
  br label %198

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

199:                                              ; preds = %129
  %200 = load i8, ptr @g_bDrawCameraPos, align 1, !tbaa !9, !range !11, !noundef !12
  %201 = trunc nuw i8 %200 to i1
  br i1 %201, label %202, label %250

202:                                              ; preds = %199
  invoke void @_ZN6glutil11MatrixStack11SetIdentityEv(ptr noundef nonnull align 8 dereferenceable(88) %2)
          to label %203 unwind label %138

203:                                              ; preds = %202
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %21) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %22) #6
  store float 0.000000e+00, ptr %22, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %23) #6
  store float 0.000000e+00, ptr %23, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %24) #6
  %204 = call noundef nonnull align 4 dereferenceable(36) ptr @_ZNK6glutil8ViewPole7GetViewEv(ptr noundef nonnull align 8 dereferenceable(148) @g_viewPole)
  %205 = getelementptr inbounds i8, ptr %204, i64 28
  %206 = load float, ptr %205, align 4, !tbaa !28
  %207 = fneg float %206
  store float %207, ptr %24, align 4, !tbaa !20
  call void @_ZN3glm6detail5tvec3IfEC2ERKfS4_S4_(ptr noundef nonnull align 4 dereferenceable(12) %21, ptr noundef nonnull align 4 dereferenceable(4) %22, ptr noundef nonnull align 4 dereferenceable(4) %23, ptr noundef nonnull align 4 dereferenceable(4) %24)
  invoke void @_ZN6glutil11MatrixStack9TranslateERKN3glm6detail5tvec3IfEE(ptr noundef nonnull align 8 dereferenceable(88) %2, ptr noundef nonnull align 4 dereferenceable(12) %21)
          to label %208 unwind label %238

208:                                              ; preds = %203
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %24) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %23) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %22) #6
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %21) #6
  %209 = load ptr, ptr @_funcptr_glDisable, align 8, !tbaa !5
  invoke void %209(i32 noundef 2929)
          to label %210 unwind label %138

210:                                              ; preds = %208
  %211 = load ptr, ptr @_funcptr_glDepthMask, align 8, !tbaa !5
  invoke void %211(i8 noundef zeroext 0)
          to label %212 unwind label %138

212:                                              ; preds = %210
  %213 = load ptr, ptr @_funcptr_glUseProgram, align 8, !tbaa !5
  %214 = load i32, ptr @g_progUnlit, align 4, !tbaa !22
  invoke void %213(i32 noundef %214)
          to label %215 unwind label %138

215:                                              ; preds = %212
  %216 = load ptr, ptr @_funcptr_glUniformMatrix4fv, align 8, !tbaa !5
  %217 = load i32, ptr getelementptr inbounds (i8, ptr @g_progUnlit, i64 4), align 4, !tbaa !24
  %218 = call noundef nonnull align 4 dereferenceable(64) ptr @_ZNK6glutil11MatrixStack3TopEv(ptr noundef nonnull align 8 dereferenceable(88) %2)
  %219 = invoke noundef ptr @_ZN3glm9value_ptrIfEEPKT_RKNS_6detail7tmat4x4IS1_EE(ptr noundef nonnull align 4 dereferenceable(64) %218)
          to label %220 unwind label %138

220:                                              ; preds = %215
  invoke void %216(i32 noundef %217, i32 noundef 1, i8 noundef zeroext 0, ptr noundef %219)
          to label %221 unwind label %138

221:                                              ; preds = %220
  %222 = load ptr, ptr @_funcptr_glUniform4f, align 8, !tbaa !5
  %223 = load i32, ptr getelementptr inbounds (i8, ptr @g_progUnlit, i64 8), align 4, !tbaa !25
  invoke void %222(i32 noundef %223, float noundef 2.500000e-01, float noundef 2.500000e-01, float noundef 2.500000e-01, float noundef 1.000000e+00)
          to label %224 unwind label %138

224:                                              ; preds = %221
  %225 = load ptr, ptr @g_pSphere, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %25) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %26) #6
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %26) #6
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %25, ptr noundef nonnull @.str.17, ptr noundef nonnull align 1 dereferenceable(1) %26)
          to label %226 unwind label %240

226:                                              ; preds = %224
  invoke void @_ZNK9Framework4Mesh6RenderERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(8) %225, ptr noundef nonnull align 8 dereferenceable(32) %25)
          to label %227 unwind label %242

227:                                              ; preds = %226
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %25) #6
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %26) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %26) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %25) #6
  %228 = load ptr, ptr @_funcptr_glDepthMask, align 8, !tbaa !5
  invoke void %228(i8 noundef zeroext 1)
          to label %229 unwind label %138

229:                                              ; preds = %227
  %230 = load ptr, ptr @_funcptr_glEnable, align 8, !tbaa !5
  invoke void %230(i32 noundef 2929)
          to label %231 unwind label %138

231:                                              ; preds = %229
  %232 = load ptr, ptr @_funcptr_glUniform4f, align 8, !tbaa !5
  %233 = load i32, ptr getelementptr inbounds (i8, ptr @g_progUnlit, i64 8), align 4, !tbaa !25
  invoke void %232(i32 noundef %233, float noundef 1.000000e+00, float noundef 1.000000e+00, float noundef 1.000000e+00, float noundef 1.000000e+00)
          to label %234 unwind label %138

234:                                              ; preds = %231
  %235 = load ptr, ptr @g_pSphere, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %27) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %28) #6
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %28) #6
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef nonnull @.str.17, ptr noundef nonnull align 1 dereferenceable(1) %28)
          to label %236 unwind label %245

236:                                              ; preds = %234
  invoke void @_ZNK9Framework4Mesh6RenderERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(8) %235, ptr noundef nonnull align 8 dereferenceable(32) %27)
          to label %237 unwind label %247

237:                                              ; preds = %236
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %27) #6
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %28) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %28) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %27) #6
  br label %250

238:                                              ; preds = %203
  %239 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %24) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %23) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %22) #6
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %21) #6
  br label %251

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

242:                                              ; preds = %226
  %243 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %25) #6
  br label %244

244:                                              ; preds = %242, %240
  %.pn27 = phi { ptr, i32 } [ %243, %242 ], [ %241, %240 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %26) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %26) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %25) #6
  br label %251

245:                                              ; preds = %234
  %246 = landingpad { ptr, i32 }
          cleanup
  br label %249

247:                                              ; preds = %236
  %248 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %27) #6
  br label %249

249:                                              ; preds = %247, %245
  %.pn29 = phi { ptr, i32 } [ %248, %247 ], [ %246, %245 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %28) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %28) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %27) #6
  br label %251

250:                                              ; preds = %237, %199
  call void @_ZN6glutil9PushStackD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %6) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #6
  br label %253

251:                                              ; preds = %163, %189, %198, %249, %244, %238, %162, %144, %138
  %.pn31.pn.pn.pn = phi { ptr, i32 } [ %.pn29, %249 ], [ %139, %138 ], [ %.pn27, %244 ], [ %239, %238 ], [ %.pn22.pn.pn.pn, %162 ], [ %.pn, %144 ], [ %.pn31.pn, %198 ], [ %164, %163 ], [ %190, %189 ]
  call void @_ZN6glutil9PushStackD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %6) #6
  br label %252

252:                                              ; preds = %251, %136
  %.pn31.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn31.pn.pn.pn, %251 ], [ %137, %136 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #6
  br label %257

253:                                              ; preds = %250, %57
  invoke void @glutPostRedisplay()
          to label %254 unwind label %134

254:                                              ; preds = %253
  invoke void @glutSwapBuffers()
          to label %255 unwind label %134

255:                                              ; preds = %254
  call void @llvm.lifetime.end.p0(i64 160, ptr nonnull %4) #6
  call void @_ZN6glutil11MatrixStackD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %2) #6
  call void @llvm.lifetime.end.p0(i64 88, ptr nonnull %2) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %1) #6
  br label %256

256:                                              ; preds = %0, %255
  ret void

257:                                              ; preds = %252, %134, %132
  %.pn31.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn31.pn.pn.pn.pn, %252 ], [ %135, %134 ], [ %133, %132 ]
  call void @llvm.lifetime.end.p0(i64 160, ptr nonnull %4) #6
  br label %258

258:                                              ; preds = %257, %130
  %.pn31.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn31.pn.pn.pn.pn.pn, %257 ], [ %131, %130 ]
  call void @_ZN6glutil11MatrixStackD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %2) #6
  call void @llvm.lifetime.end.p0(i64 88, ptr nonnull %2) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %1) #6
  resume { ptr, i32 } %.pn31.pn.pn.pn.pn.pn.pn
}

declare void @_ZN8LightEnv10UpdateTimeEv(ptr noundef nonnull align 8 dereferenceable(192)) local_unnamed_addr #4

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNK8LightEnv18GetBackgroundColorEv(ptr dead_on_unwind noalias writable sret(%"struct.glm::detail::tvec4") align 4, ptr noundef nonnull align 8 dereferenceable(192)) local_unnamed_addr #2 align 2

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

declare void @_ZN6glutil11MatrixStack11ApplyMatrixERKN3glm6detail7tmat4x4IfEE(ptr noundef nonnull align 8 dereferenceable(88), ptr noundef nonnull align 4 dereferenceable(64)) local_unnamed_addr #4

declare void @_ZNK6glutil8ViewPole10CalcMatrixEv(ptr dead_on_unwind writable sret(%"struct.glm::detail::tmat4x4") align 4, ptr noundef nonnull align 8 dereferenceable(148)) unnamed_addr #4

declare void @_ZNK8LightEnv13GetLightBlockERKN3glm6detail7tmat4x4IfEE(ptr dead_on_unwind writable sret(%struct.LightBlock) align 4, ptr noundef nonnull align 8 dereferenceable(192), ptr noundef nonnull align 4 dereferenceable(64)) local_unnamed_addr #4

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

declare void @_ZN6glutil11MatrixStack7RotateXEf(ptr noundef nonnull align 8 dereferenceable(88), float noundef) local_unnamed_addr #4

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef ptr @_ZN3glm9value_ptrIfEEPKT_RKNS_6detail7tmat4x4IS1_EE(ptr noundef nonnull align 4 dereferenceable(64)) local_unnamed_addr #5

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(64) ptr @_ZNK6glutil11MatrixStack3TopEv(ptr noundef nonnull align 8 dereferenceable(88)) local_unnamed_addr #1 align 2

declare noundef i32 @_ZNK8LightEnv12GetNumLightsEv(ptr noundef nonnull align 8 dereferenceable(192)) local_unnamed_addr #4

declare void @_ZNK9Framework4Mesh6RenderERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #4

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

declare void @_ZNK8LightEnv20GetSunlightDirectionEv(ptr dead_on_unwind writable sret(%"struct.glm::detail::tvec4") align 4, ptr noundef nonnull align 8 dereferenceable(192)) local_unnamed_addr #4

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

declare void @_ZN6glutil11MatrixStack9TranslateERKN3glm6detail5tvec3IfEE(ptr noundef nonnull align 8 dereferenceable(88), ptr noundef nonnull align 4 dereferenceable(12)) local_unnamed_addr #4

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

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

declare void @_ZNK8LightEnv26GetSunlightScaledIntensityEv(ptr dead_on_unwind writable sret(%"struct.glm::detail::tvec4") align 4, ptr noundef nonnull align 8 dereferenceable(192)) local_unnamed_addr #4

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN3glm6detail5tvec4IfEC2Ev(ptr noundef nonnull align 4 dereferenceable(16)) unnamed_addr #3 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZN3glm9value_ptrIfEEPT_RNS_6detail5tvec4IS1_EE(ptr noundef nonnull align 4 dereferenceable(16)) local_unnamed_addr #3

declare noundef i32 @_ZNK8LightEnv17GetNumPointLightsEv(ptr noundef nonnull align 8 dereferenceable(192)) local_unnamed_addr #4

declare void @_ZNK8LightEnv21GetPointLightWorldPosEi(ptr dead_on_unwind writable sret(%"struct.glm::detail::tvec3") align 4, ptr noundef nonnull align 8 dereferenceable(192), i32 noundef) local_unnamed_addr #4

declare void @_ZNK8LightEnv28GetPointLightScaledIntensityEi(ptr dead_on_unwind writable sret(%"struct.glm::detail::tvec4") align 4, ptr noundef nonnull align 8 dereferenceable(192), i32 noundef) local_unnamed_addr #4

declare void @_ZN6glutil11MatrixStack11SetIdentityEv(ptr noundef nonnull align 8 dereferenceable(88)) local_unnamed_addr #4

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

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

declare void @glutPostRedisplay() local_unnamed_addr #4

declare void @glutSwapBuffers() local_unnamed_addr #4

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN6glutil11MatrixStackD2Ev(ptr noundef nonnull align 8 dereferenceable(88)) unnamed_addr #3 align 2

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"bool", !7, i64 0}
!11 = !{i8 0, i8 2}
!12 = !{}
!13 = !{!7, !7, i64 0}
!14 = !{!15, !15, i64 0}
!15 = !{!"int", !7, i64 0}
!16 = !{!17, !15, i64 0}
!17 = !{!"_ZTS11ProgramData", !15, i64 0, !15, i64 4, !15, i64 8}
!18 = !{!17, !15, i64 4}
!19 = !{!17, !15, i64 8}
!20 = !{!21, !21, i64 0}
!21 = !{!"float", !7, i64 0}
!22 = !{!23, !15, i64 0}
!23 = !{!"_ZTS13UnlitProgData", !15, i64 0, !15, i64 4, !15, i64 8}
!24 = !{!23, !15, i64 4}
!25 = !{!23, !15, i64 8}
!26 = distinct !{!26, !27}
!27 = !{!"llvm.loop.mustprogress"}
!28 = !{!29, !21, i64 28}
!29 = !{!"_ZTSN6glutil8ViewDataE", !30, i64 0, !31, i64 12, !21, i64 28, !21, i64 32}
!30 = !{!"_ZTSN3glm6detail5tvec3IfEE", !7, i64 0}
!31 = !{!"_ZTSN3glm6detail5tquatIfEE", !21, i64 0, !21, i64 4, !21, i64 8, !21, i64 12}


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