; LLVM IR from erwincoumans/tiny-differentiable-simulator :: src/visualizer/opengl/tiny_opengl3_app.ll (ZN14TinyOpenGL3App9draw_gridE12DrawGridData)

; 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.DrawGridData = type { i32, float, i32, i8, [4 x float] }
%"struct.TINY::TinyVector3" = type { float, float, float, i32 }
%"class.std::vector.15" = type { %"struct.std::_Vector_base.16" }
%"struct.std::_Vector_base.16" = type { %"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl" }
%"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl" = type { %"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl_data" }
%"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.20" = type { %"struct.std::_Vector_base.21" }
%"struct.std::_Vector_base.21" = type { %"struct.std::_Vector_base<TINY::TinyVector3<float, TINY::FloatUtils>, std::allocator<TINY::TinyVector3<float, TINY::FloatUtils>>>::_Vector_impl" }
%"struct.std::_Vector_base<TINY::TinyVector3<float, TINY::FloatUtils>, std::allocator<TINY::TinyVector3<float, TINY::FloatUtils>>>::_Vector_impl" = type { %"struct.std::_Vector_base<TINY::TinyVector3<float, TINY::FloatUtils>, std::allocator<TINY::TinyVector3<float, TINY::FloatUtils>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<TINY::TinyVector3<float, TINY::FloatUtils>, std::allocator<TINY::TinyVector3<float, TINY::FloatUtils>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%struct.TinyOpenGL3App = type { %struct.TinyCommonGraphicsApp.base, ptr, ptr, ptr }
%struct.TinyCommonGraphicsApp.base = type <{ ptr, ptr, ptr, ptr, ptr, i8, i8, i8, i8, float, float, float, float, i8, [3 x i8], [3 x float] }>

@glad_glGetError = external global ptr, align 8
@.str.3 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [119 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [2 x i8], align 1
@__PRETTY_FUNCTION__._ZN14TinyOpenGL3App9draw_gridE12DrawGridData = external hidden unnamed_addr constant [53 x i8], align 1

declare i32 @__gxx_personality_v0(...)

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

; Function Attrs: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) #1

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN14TinyOpenGL3App9draw_gridE12DrawGridData(ptr noundef nonnull align 8 dereferenceable(104) %0, ptr noundef byval(%struct.DrawGridData) align 8 %1) unnamed_addr #4 align 2 personality ptr @__gxx_personality_v0 {
  %3 = alloca ptr, align 8
  %4 = alloca i32, align 4
  %5 = alloca float, align 4
  %6 = alloca i32, align 4
  %7 = alloca %"struct.TINY::TinyVector3", align 4
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca %"class.std::vector.15", align 8
  %11 = alloca %"class.std::vector.20", align 8
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca ptr, align 8
  %15 = alloca i32, align 4
  %16 = alloca %"struct.TINY::TinyVector3", align 4
  %17 = alloca %"struct.TINY::TinyVector3", align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca %"struct.TINY::TinyVector3", align 4
  %21 = alloca %"struct.TINY::TinyVector3", align 4
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca %"struct.TINY::TinyVector3", align 4
  %25 = alloca %"struct.TINY::TinyVector3", align 4
  %26 = alloca %"struct.TINY::TinyVector3", align 4
  %27 = alloca %"struct.TINY::TinyVector3", align 4
  %28 = alloca %"struct.TINY::TinyVector3", align 4
  %29 = alloca %"struct.TINY::TinyVector3", align 4
  %30 = alloca %"struct.TINY::TinyVector3", align 4
  %31 = alloca %"struct.TINY::TinyVector3", align 4
  %32 = alloca %"struct.TINY::TinyVector3", align 4
  %33 = alloca %"struct.TINY::TinyVector3", align 4
  %34 = alloca %"struct.TINY::TinyVector3", align 4
  %35 = alloca %"struct.TINY::TinyVector3", align 4
  %36 = alloca %"struct.TINY::TinyVector3", align 4
  %37 = alloca %"struct.TINY::TinyVector3", align 4
  %38 = alloca %"struct.TINY::TinyVector3", align 4
  store ptr %0, ptr %3, align 8, !tbaa !5
  %39 = load ptr, ptr %3, align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr %4) #5
  %40 = getelementptr inbounds %struct.DrawGridData, ptr %1, i32 0, i32 0
  %41 = load i32, ptr %40, align 8, !tbaa !9
  store i32 %41, ptr %4, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 4, ptr %5) #5
  %42 = getelementptr inbounds %struct.DrawGridData, ptr %1, i32 0, i32 1
  %43 = load float, ptr %42, align 4, !tbaa !15
  store float %43, ptr %5, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #5
  %44 = getelementptr inbounds %struct.DrawGridData, ptr %1, i32 0, i32 2
  %45 = load i32, ptr %44, align 8, !tbaa !17
  store i32 %45, ptr %6, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 16, ptr %7) #5
  call void @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEC2Ei(ptr noundef nonnull align 4 dereferenceable(16) %7, i32 noundef 0)
  %46 = getelementptr inbounds %struct.DrawGridData, ptr %1, i32 0, i32 4
  %47 = getelementptr inbounds [4 x float], ptr %46, i64 0, i64 0
  %48 = load float, ptr %47, align 8, !tbaa !16
  %49 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEixEi(ptr noundef nonnull align 4 dereferenceable(16) %7, i32 noundef 0)
  store float %48, ptr %49, align 4, !tbaa !16
  %50 = getelementptr inbounds %struct.DrawGridData, ptr %1, i32 0, i32 4
  %51 = getelementptr inbounds [4 x float], ptr %50, i64 0, i64 1
  %52 = load float, ptr %51, align 4, !tbaa !16
  %53 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEixEi(ptr noundef nonnull align 4 dereferenceable(16) %7, i32 noundef 1)
  store float %52, ptr %53, align 4, !tbaa !16
  %54 = getelementptr inbounds %struct.DrawGridData, ptr %1, i32 0, i32 4
  %55 = getelementptr inbounds [4 x float], ptr %54, i64 0, i64 2
  %56 = load float, ptr %55, align 8, !tbaa !16
  %57 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEixEi(ptr noundef nonnull align 4 dereferenceable(16) %7, i32 noundef 2)
  store float %56, ptr %57, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #5
  store i32 -1, ptr %8, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #5
  store i32 -1, ptr %9, align 4, !tbaa !14
  %58 = load i32, ptr %6, align 4, !tbaa !14
  switch i32 %58, label %61 [
    i32 1, label %59
    i32 2, label %60
  ]

59:                                               ; preds = %2
  store i32 2, ptr %9, align 4, !tbaa !14
  store i32 0, ptr %8, align 4, !tbaa !14
  br label %62

60:                                               ; preds = %2
  store i32 1, ptr %9, align 4, !tbaa !14
  store i32 0, ptr %8, align 4, !tbaa !14
  br label %62

61:                                               ; preds = %2
  call void @__assert_fail(ptr noundef @.str.11, ptr noundef @.str.4, i32 noundef 1022, ptr noundef @__PRETTY_FUNCTION__._ZN14TinyOpenGL3App9draw_gridE12DrawGridData) #6
  unreachable

62:                                               ; preds = %60, %59
  call void @llvm.lifetime.start.p0(i64 24, ptr %10) #5
  call void @_ZNSt6vectorIjSaIjEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %10) #5
  call void @llvm.lifetime.start.p0(i64 24, ptr %11) #5
  call void @_ZNSt6vectorIN4TINY11TinyVector3IfNS0_10FloatUtilsEEESaIS3_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %11) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #5
  store i32 0, ptr %12, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #5
  %63 = load i32, ptr %4, align 4, !tbaa !14
  %64 = sub nsw i32 0, %63
  store i32 %64, ptr %13, align 4, !tbaa !14
  br label %65

65:                                               ; preds = %195, %62
  %66 = load i32, ptr %13, align 4, !tbaa !14
  %67 = load i32, ptr %4, align 4, !tbaa !14
  %68 = icmp sle i32 %66, %67
  br i1 %68, label %70, label %69

69:                                               ; preds = %65
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #5
  br label %217

70:                                               ; preds = %65
  %71 = load ptr, ptr @glad_glGetError, align 8, !tbaa !5
  %72 = invoke i32 %71()
          to label %73 unwind label %77

73:                                               ; preds = %70
  %74 = icmp eq i32 %72, 0
  br i1 %74, label %75, label %76

75:                                               ; preds = %73
  br label %82

76:                                               ; preds = %73
  call void @__assert_fail(ptr noundef @.str.3, ptr noundef @.str.4, i32 noundef 1031, ptr noundef @__PRETTY_FUNCTION__._ZN14TinyOpenGL3App9draw_gridE12DrawGridData) #6
  unreachable

77:                                               ; preds = %147, %121, %70
  %78 = landingpad { ptr, i32 }
          cleanup
  %79 = extractvalue { ptr, i32 } %78, 0
  store ptr %79, ptr %14, align 8
  %80 = extractvalue { ptr, i32 } %78, 1
  store i32 %80, ptr %15, align 4
  br label %216

81:                                               ; No predecessors!
  br label %82

82:                                               ; preds = %81, %75
  call void @llvm.lifetime.start.p0(i64 16, ptr %16) #5
  invoke void @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEC2Efff(ptr noundef nonnull align 4 dereferenceable(16) %16, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 0.000000e+00)
          to label %83 unwind label %128

83:                                               ; preds = %82
  %84 = load i32, ptr %13, align 4, !tbaa !14
  %85 = sitofp i32 %84 to float
  %86 = load i32, ptr %8, align 4, !tbaa !14
  %87 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEixEi(ptr noundef nonnull align 4 dereferenceable(16) %16, i32 noundef %86)
          to label %88 unwind label %128

88:                                               ; preds = %83
  store float %85, ptr %87, align 4, !tbaa !16
  %89 = load float, ptr %5, align 4, !tbaa !16
  %90 = load i32, ptr %6, align 4, !tbaa !14
  %91 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEixEi(ptr noundef nonnull align 4 dereferenceable(16) %16, i32 noundef %90)
          to label %92 unwind label %128

92:                                               ; preds = %88
  store float %89, ptr %91, align 4, !tbaa !16
  %93 = load i32, ptr %4, align 4, !tbaa !14
  %94 = sub nsw i32 0, %93
  %95 = sitofp i32 %94 to float
  %96 = load i32, ptr %9, align 4, !tbaa !14
  %97 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEixEi(ptr noundef nonnull align 4 dereferenceable(16) %16, i32 noundef %96)
          to label %98 unwind label %128

98:                                               ; preds = %92
  store float %95, ptr %97, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 16, ptr %17) #5
  invoke void @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEC2Efff(ptr noundef nonnull align 4 dereferenceable(16) %17, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 0.000000e+00)
          to label %99 unwind label %132

99:                                               ; preds = %98
  %100 = load i32, ptr %13, align 4, !tbaa !14
  %101 = sitofp i32 %100 to float
  %102 = load i32, ptr %8, align 4, !tbaa !14
  %103 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEixEi(ptr noundef nonnull align 4 dereferenceable(16) %17, i32 noundef %102)
          to label %104 unwind label %132

104:                                              ; preds = %99
  store float %101, ptr %103, align 4, !tbaa !16
  %105 = load float, ptr %5, align 4, !tbaa !16
  %106 = load i32, ptr %6, align 4, !tbaa !14
  %107 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEixEi(ptr noundef nonnull align 4 dereferenceable(16) %17, i32 noundef %106)
          to label %108 unwind label %132

108:                                              ; preds = %104
  store float %105, ptr %107, align 4, !tbaa !16
  %109 = load i32, ptr %4, align 4, !tbaa !14
  %110 = sitofp i32 %109 to float
  %111 = load i32, ptr %9, align 4, !tbaa !14
  %112 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEixEi(ptr noundef nonnull align 4 dereferenceable(16) %17, i32 noundef %111)
          to label %113 unwind label %132

113:                                              ; preds = %108
  store float %110, ptr %112, align 4, !tbaa !16
  invoke void @_ZNSt6vectorIN4TINY11TinyVector3IfNS0_10FloatUtilsEEESaIS3_EE9push_backERKS3_(ptr noundef nonnull align 8 dereferenceable(24) %11, ptr noundef nonnull align 4 dereferenceable(16) %16)
          to label %114 unwind label %132

114:                                              ; preds = %113
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #5
  %115 = load i32, ptr %12, align 4, !tbaa !14
  %116 = add nsw i32 %115, 1
  store i32 %116, ptr %12, align 4, !tbaa !14
  store i32 %115, ptr %18, align 4, !tbaa !14
  invoke void @_ZNSt6vectorIjSaIjEE9push_backEOj(ptr noundef nonnull align 8 dereferenceable(24) %10, ptr noundef nonnull align 4 dereferenceable(4) %18)
          to label %117 unwind label %136

117:                                              ; preds = %114
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #5
  invoke void @_ZNSt6vectorIN4TINY11TinyVector3IfNS0_10FloatUtilsEEESaIS3_EE9push_backERKS3_(ptr noundef nonnull align 8 dereferenceable(24) %11, ptr noundef nonnull align 4 dereferenceable(16) %17)
          to label %118 unwind label %132

118:                                              ; preds = %117
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #5
  %119 = load i32, ptr %12, align 4, !tbaa !14
  %120 = add nsw i32 %119, 1
  store i32 %120, ptr %12, align 4, !tbaa !14
  store i32 %119, ptr %19, align 4, !tbaa !14
  invoke void @_ZNSt6vectorIjSaIjEE9push_backEOj(ptr noundef nonnull align 8 dereferenceable(24) %10, ptr noundef nonnull align 4 dereferenceable(4) %19)
          to label %121 unwind label %140

121:                                              ; preds = %118
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %17) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %16) #5
  %122 = load ptr, ptr @glad_glGetError, align 8, !tbaa !5
  %123 = invoke i32 %122()
          to label %124 unwind label %77

124:                                              ; preds = %121
  %125 = icmp eq i32 %123, 0
  br i1 %125, label %126, label %127

126:                                              ; preds = %124
  br label %147

127:                                              ; preds = %124
  call void @__assert_fail(ptr noundef @.str.3, ptr noundef @.str.4, i32 noundef 1047, ptr noundef @__PRETTY_FUNCTION__._ZN14TinyOpenGL3App9draw_gridE12DrawGridData) #6
  unreachable

128:                                              ; preds = %92, %88, %83, %82
  %129 = landingpad { ptr, i32 }
          cleanup
  %130 = extractvalue { ptr, i32 } %129, 0
  store ptr %130, ptr %14, align 8
  %131 = extractvalue { ptr, i32 } %129, 1
  store i32 %131, ptr %15, align 4
  br label %145

132:                                              ; preds = %117, %113, %108, %104, %99, %98
  %133 = landingpad { ptr, i32 }
          cleanup
  %134 = extractvalue { ptr, i32 } %133, 0
  store ptr %134, ptr %14, align 8
  %135 = extractvalue { ptr, i32 } %133, 1
  store i32 %135, ptr %15, align 4
  br label %144

136:                                              ; preds = %114
  %137 = landingpad { ptr, i32 }
          cleanup
  %138 = extractvalue { ptr, i32 } %137, 0
  store ptr %138, ptr %14, align 8
  %139 = extractvalue { ptr, i32 } %137, 1
  store i32 %139, ptr %15, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #5
  br label %144

140:                                              ; preds = %118
  %141 = landingpad { ptr, i32 }
          cleanup
  %142 = extractvalue { ptr, i32 } %141, 0
  store ptr %142, ptr %14, align 8
  %143 = extractvalue { ptr, i32 } %141, 1
  store i32 %143, ptr %15, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #5
  br label %144

144:                                              ; preds = %140, %136, %132
  call void @llvm.lifetime.end.p0(i64 16, ptr %17) #5
  br label %145

145:                                              ; preds = %144, %128
  call void @llvm.lifetime.end.p0(i64 16, ptr %16) #5
  br label %216

146:                                              ; No predecessors!
  br label %147

147:                                              ; preds = %146, %126
  %148 = load ptr, ptr @glad_glGetError, align 8, !tbaa !5
  %149 = invoke i32 %148()
          to label %150 unwind label %77

150:                                              ; preds = %147
  %151 = icmp eq i32 %149, 0
  br i1 %151, label %152, label %153

152:                                              ; preds = %150
  br label %155

153:                                              ; preds = %150
  call void @__assert_fail(ptr noundef @.str.3, ptr noundef @.str.4, i32 noundef 1049, ptr noundef @__PRETTY_FUNCTION__._ZN14TinyOpenGL3App9draw_gridE12DrawGridData) #6
  unreachable

154:                                              ; No predecessors!
  br label %155

155:                                              ; preds = %154, %152
  call void @llvm.lifetime.start.p0(i64 16, ptr %20) #5
  invoke void @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEC2Efff(ptr noundef nonnull align 4 dereferenceable(16) %20, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 0.000000e+00)
          to label %156 unwind label %198

156:                                              ; preds = %155
  %157 = load i32, ptr %4, align 4, !tbaa !14
  %158 = sub nsw i32 0, %157
  %159 = sitofp i32 %158 to float
  %160 = load i32, ptr %8, align 4, !tbaa !14
  %161 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEixEi(ptr noundef nonnull align 4 dereferenceable(16) %20, i32 noundef %160)
          to label %162 unwind label %198

162:                                              ; preds = %156
  store float %159, ptr %161, align 4, !tbaa !16
  %163 = load float, ptr %5, align 4, !tbaa !16
  %164 = load i32, ptr %6, align 4, !tbaa !14
  %165 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEixEi(ptr noundef nonnull align 4 dereferenceable(16) %20, i32 noundef %164)
          to label %166 unwind label %198

166:                                              ; preds = %162
  store float %163, ptr %165, align 4, !tbaa !16
  %167 = load i32, ptr %13, align 4, !tbaa !14
  %168 = sitofp i32 %167 to float
  %169 = load i32, ptr %9, align 4, !tbaa !14
  %170 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEixEi(ptr noundef nonnull align 4 dereferenceable(16) %20, i32 noundef %169)
          to label %171 unwind label %198

171:                                              ; preds = %166
  store float %168, ptr %170, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 16, ptr %21) #5
  invoke void @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEC2Efff(ptr noundef nonnull align 4 dereferenceable(16) %21, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 0.000000e+00)
          to label %172 unwind label %202

172:                                              ; preds = %171
  %173 = load i32, ptr %4, align 4, !tbaa !14
  %174 = sitofp i32 %173 to float
  %175 = load i32, ptr %8, align 4, !tbaa !14
  %176 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEixEi(ptr noundef nonnull align 4 dereferenceable(16) %21, i32 noundef %175)
          to label %177 unwind label %202

177:                                              ; preds = %172
  store float %174, ptr %176, align 4, !tbaa !16
  %178 = load float, ptr %5, align 4, !tbaa !16
  %179 = load i32, ptr %6, align 4, !tbaa !14
  %180 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEixEi(ptr noundef nonnull align 4 dereferenceable(16) %21, i32 noundef %179)
          to label %181 unwind label %202

181:                                              ; preds = %177
  store float %178, ptr %180, align 4, !tbaa !16
  %182 = load i32, ptr %13, align 4, !tbaa !14
  %183 = sitofp i32 %182 to float
  %184 = load i32, ptr %9, align 4, !tbaa !14
  %185 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEixEi(ptr noundef nonnull align 4 dereferenceable(16) %21, i32 noundef %184)
          to label %186 unwind label %202

186:                                              ; preds = %181
  store float %183, ptr %185, align 4, !tbaa !16
  invoke void @_ZNSt6vectorIN4TINY11TinyVector3IfNS0_10FloatUtilsEEESaIS3_EE9push_backERKS3_(ptr noundef nonnull align 8 dereferenceable(24) %11, ptr noundef nonnull align 4 dereferenceable(16) %20)
          to label %187 unwind label %202

187:                                              ; preds = %186
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #5
  %188 = load i32, ptr %12, align 4, !tbaa !14
  %189 = add nsw i32 %188, 1
  store i32 %189, ptr %12, align 4, !tbaa !14
  store i32 %188, ptr %22, align 4, !tbaa !14
  invoke void @_ZNSt6vectorIjSaIjEE9push_backEOj(ptr noundef nonnull align 8 dereferenceable(24) %10, ptr noundef nonnull align 4 dereferenceable(4) %22)
          to label %190 unwind label %206

190:                                              ; preds = %187
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #5
  invoke void @_ZNSt6vectorIN4TINY11TinyVector3IfNS0_10FloatUtilsEEESaIS3_EE9push_backERKS3_(ptr noundef nonnull align 8 dereferenceable(24) %11, ptr noundef nonnull align 4 dereferenceable(16) %21)
          to label %191 unwind label %202

191:                                              ; preds = %190
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #5
  %192 = load i32, ptr %12, align 4, !tbaa !14
  %193 = add nsw i32 %192, 1
  store i32 %193, ptr %12, align 4, !tbaa !14
  store i32 %192, ptr %23, align 4, !tbaa !14
  invoke void @_ZNSt6vectorIjSaIjEE9push_backEOj(ptr noundef nonnull align 8 dereferenceable(24) %10, ptr noundef nonnull align 4 dereferenceable(4) %23)
          to label %194 unwind label %210

194:                                              ; preds = %191
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %21) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %20) #5
  br label %195

195:                                              ; preds = %194
  %196 = load i32, ptr %13, align 4, !tbaa !14
  %197 = add nsw i32 %196, 1
  store i32 %197, ptr %13, align 4, !tbaa !14
  br label %65, !llvm.loop !18

198:                                              ; preds = %166, %162, %156, %155
  %199 = landingpad { ptr, i32 }
          cleanup
  %200 = extractvalue { ptr, i32 } %199, 0
  store ptr %200, ptr %14, align 8
  %201 = extractvalue { ptr, i32 } %199, 1
  store i32 %201, ptr %15, align 4
  br label %215

202:                                              ; preds = %190, %186, %181, %177, %172, %171
  %203 = landingpad { ptr, i32 }
          cleanup
  %204 = extractvalue { ptr, i32 } %203, 0
  store ptr %204, ptr %14, align 8
  %205 = extractvalue { ptr, i32 } %203, 1
  store i32 %205, ptr %15, align 4
  br label %214

206:                                              ; preds = %187
  %207 = landingpad { ptr, i32 }
          cleanup
  %208 = extractvalue { ptr, i32 } %207, 0
  store ptr %208, ptr %14, align 8
  %209 = extractvalue { ptr, i32 } %207, 1
  store i32 %209, ptr %15, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #5
  br label %214

210:                                              ; preds = %191
  %211 = landingpad { ptr, i32 }
          cleanup
  %212 = extractvalue { ptr, i32 } %211, 0
  store ptr %212, ptr %14, align 8
  %213 = extractvalue { ptr, i32 } %211, 1
  store i32 %213, ptr %15, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #5
  br label %214

214:                                              ; preds = %210, %206, %202
  call void @llvm.lifetime.end.p0(i64 16, ptr %21) #5
  br label %215

215:                                              ; preds = %214, %198
  call void @llvm.lifetime.end.p0(i64 16, ptr %20) #5
  br label %216

216:                                              ; preds = %215, %145, %77
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #5
  br label %359

217:                                              ; preds = %69
  %218 = getelementptr inbounds %struct.TinyOpenGL3App, ptr %39, i32 0, i32 3
  %219 = load ptr, ptr %218, align 8, !tbaa !20
  %220 = call noundef nonnull align 4 dereferenceable(16) ptr @_ZNSt6vectorIN4TINY11TinyVector3IfNS0_10FloatUtilsEEESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %11, i64 noundef 0) #5
  %221 = call noundef i64 @_ZNKSt6vectorIN4TINY11TinyVector3IfNS0_10FloatUtilsEEESaIS3_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %11) #5
  %222 = trunc i64 %221 to i32
  %223 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %10, i64 noundef 0) #5
  %224 = call noundef i64 @_ZNKSt6vectorIjSaIjEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %10) #5
  %225 = trunc i64 %224 to i32
  %226 = load ptr, ptr %219, align 8, !tbaa !23
  %227 = getelementptr inbounds ptr, ptr %226, i64 32
  %228 = load ptr, ptr %227, align 8
  invoke void %228(ptr noundef nonnull align 8 dereferenceable(60) %219, ptr noundef %220, ptr noundef nonnull align 4 dereferenceable(16) %7, i32 noundef %222, i32 noundef 16, ptr noundef %223, i32 noundef %225, float noundef 1.000000e+00)
          to label %229 unwind label %285

229:                                              ; preds = %217
  %230 = getelementptr inbounds %struct.DrawGridData, ptr %1, i32 0, i32 3
  %231 = load i8, ptr %230, align 4, !tbaa !25, !range !26, !noundef !27
  %232 = trunc i8 %231 to i1
  br i1 %232, label %233, label %358

233:                                              ; preds = %229
  %234 = getelementptr inbounds %struct.TinyOpenGL3App, ptr %39, i32 0, i32 3
  %235 = load ptr, ptr %234, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 16, ptr %24) #5
  invoke void @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEC2Efff(ptr noundef nonnull align 4 dereferenceable(16) %24, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 0.000000e+00)
          to label %236 unwind label %289

236:                                              ; preds = %233
  call void @llvm.lifetime.start.p0(i64 16, ptr %25) #5
  invoke void @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEC2Efff(ptr noundef nonnull align 4 dereferenceable(16) %25, float noundef 1.000000e+00, float noundef 0.000000e+00, float noundef 0.000000e+00)
          to label %237 unwind label %293

237:                                              ; preds = %236
  call void @llvm.lifetime.start.p0(i64 16, ptr %26) #5
  invoke void @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEC2Efff(ptr noundef nonnull align 4 dereferenceable(16) %26, float noundef 1.000000e+00, float noundef 0.000000e+00, float noundef 0.000000e+00)
          to label %238 unwind label %297

238:                                              ; preds = %237
  %239 = load ptr, ptr %235, align 8, !tbaa !23
  %240 = getelementptr inbounds ptr, ptr %239, i64 31
  %241 = load ptr, ptr %240, align 8
  invoke void %241(ptr noundef nonnull align 8 dereferenceable(60) %235, ptr noundef nonnull align 4 dereferenceable(16) %24, ptr noundef nonnull align 4 dereferenceable(16) %25, ptr noundef nonnull align 4 dereferenceable(16) %26, float noundef 3.000000e+00)
          to label %242 unwind label %297

242:                                              ; preds = %238
  call void @llvm.lifetime.end.p0(i64 16, ptr %26) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %25) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %24) #5
  %243 = getelementptr inbounds %struct.TinyOpenGL3App, ptr %39, i32 0, i32 3
  %244 = load ptr, ptr %243, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 16, ptr %27) #5
  invoke void @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEC2Efff(ptr noundef nonnull align 4 dereferenceable(16) %27, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 0.000000e+00)
          to label %245 unwind label %303

245:                                              ; preds = %242
  call void @llvm.lifetime.start.p0(i64 16, ptr %28) #5
  invoke void @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEC2Efff(ptr noundef nonnull align 4 dereferenceable(16) %28, float noundef 0.000000e+00, float noundef 1.000000e+00, float noundef 0.000000e+00)
          to label %246 unwind label %307

246:                                              ; preds = %245
  call void @llvm.lifetime.start.p0(i64 16, ptr %29) #5
  invoke void @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEC2Efff(ptr noundef nonnull align 4 dereferenceable(16) %29, float noundef 0.000000e+00, float noundef 1.000000e+00, float noundef 0.000000e+00)
          to label %247 unwind label %311

247:                                              ; preds = %246
  %248 = load ptr, ptr %244, align 8, !tbaa !23
  %249 = getelementptr inbounds ptr, ptr %248, i64 31
  %250 = load ptr, ptr %249, align 8
  invoke void %250(ptr noundef nonnull align 8 dereferenceable(60) %244, ptr noundef nonnull align 4 dereferenceable(16) %27, ptr noundef nonnull align 4 dereferenceable(16) %28, ptr noundef nonnull align 4 dereferenceable(16) %29, float noundef 3.000000e+00)
          to label %251 unwind label %311

251:                                              ; preds = %247
  call void @llvm.lifetime.end.p0(i64 16, ptr %29) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %28) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %27) #5
  %252 = getelementptr inbounds %struct.TinyOpenGL3App, ptr %39, i32 0, i32 3
  %253 = load ptr, ptr %252, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 16, ptr %30) #5
  invoke void @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEC2Efff(ptr noundef nonnull align 4 dereferenceable(16) %30, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 0.000000e+00)
          to label %254 unwind label %317

254:                                              ; preds = %251
  call void @llvm.lifetime.start.p0(i64 16, ptr %31) #5
  invoke void @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEC2Efff(ptr noundef nonnull align 4 dereferenceable(16) %31, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 1.000000e+00)
          to label %255 unwind label %321

255:                                              ; preds = %254
  call void @llvm.lifetime.start.p0(i64 16, ptr %32) #5
  invoke void @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEC2Efff(ptr noundef nonnull align 4 dereferenceable(16) %32, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 1.000000e+00)
          to label %256 unwind label %325

256:                                              ; preds = %255
  %257 = load ptr, ptr %253, align 8, !tbaa !23
  %258 = getelementptr inbounds ptr, ptr %257, i64 31
  %259 = load ptr, ptr %258, align 8
  invoke void %259(ptr noundef nonnull align 8 dereferenceable(60) %253, ptr noundef nonnull align 4 dereferenceable(16) %30, ptr noundef nonnull align 4 dereferenceable(16) %31, ptr noundef nonnull align 4 dereferenceable(16) %32, float noundef 3.000000e+00)
          to label %260 unwind label %325

260:                                              ; preds = %256
  call void @llvm.lifetime.end.p0(i64 16, ptr %32) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %31) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %30) #5
  %261 = getelementptr inbounds %struct.TinyOpenGL3App, ptr %39, i32 0, i32 3
  %262 = load ptr, ptr %261, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 16, ptr %33) #5
  invoke void @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEC2Efff(ptr noundef nonnull align 4 dereferenceable(16) %33, float noundef 1.000000e+00, float noundef 0.000000e+00, float noundef 0.000000e+00)
          to label %263 unwind label %331

263:                                              ; preds = %260
  call void @llvm.lifetime.start.p0(i64 16, ptr %34) #5
  invoke void @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEC2Efff(ptr noundef nonnull align 4 dereferenceable(16) %34, float noundef 1.000000e+00, float noundef 0.000000e+00, float noundef 0.000000e+00)
          to label %264 unwind label %335

264:                                              ; preds = %263
  %265 = load ptr, ptr %262, align 8, !tbaa !23
  %266 = getelementptr inbounds ptr, ptr %265, i64 34
  %267 = load ptr, ptr %266, align 8
  invoke void %267(ptr noundef nonnull align 8 dereferenceable(60) %262, ptr noundef nonnull align 4 dereferenceable(16) %33, ptr noundef nonnull align 4 dereferenceable(16) %34, float noundef 6.000000e+00)
          to label %268 unwind label %335

268:                                              ; preds = %264
  call void @llvm.lifetime.end.p0(i64 16, ptr %34) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %33) #5
  %269 = getelementptr inbounds %struct.TinyOpenGL3App, ptr %39, i32 0, i32 3
  %270 = load ptr, ptr %269, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 16, ptr %35) #5
  invoke void @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEC2Efff(ptr noundef nonnull align 4 dereferenceable(16) %35, float noundef 0.000000e+00, float noundef 1.000000e+00, float noundef 0.000000e+00)
          to label %271 unwind label %340

271:                                              ; preds = %268
  call void @llvm.lifetime.start.p0(i64 16, ptr %36) #5
  invoke void @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEC2Efff(ptr noundef nonnull align 4 dereferenceable(16) %36, float noundef 0.000000e+00, float noundef 1.000000e+00, float noundef 0.000000e+00)
          to label %272 unwind label %344

272:                                              ; preds = %271
  %273 = load ptr, ptr %270, align 8, !tbaa !23
  %274 = getelementptr inbounds ptr, ptr %273, i64 34
  %275 = load ptr, ptr %274, align 8
  invoke void %275(ptr noundef nonnull align 8 dereferenceable(60) %270, ptr noundef nonnull align 4 dereferenceable(16) %35, ptr noundef nonnull align 4 dereferenceable(16) %36, float noundef 6.000000e+00)
          to label %276 unwind label %344

276:                                              ; preds = %272
  call void @llvm.lifetime.end.p0(i64 16, ptr %36) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %35) #5
  %277 = getelementptr inbounds %struct.TinyOpenGL3App, ptr %39, i32 0, i32 3
  %278 = load ptr, ptr %277, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 16, ptr %37) #5
  invoke void @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEC2Efff(ptr noundef nonnull align 4 dereferenceable(16) %37, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 1.000000e+00)
          to label %279 unwind label %349

279:                                              ; preds = %276
  call void @llvm.lifetime.start.p0(i64 16, ptr %38) #5
  invoke void @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEC2Efff(ptr noundef nonnull align 4 dereferenceable(16) %38, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 1.000000e+00)
          to label %280 unwind label %353

280:                                              ; preds = %279
  %281 = load ptr, ptr %278, align 8, !tbaa !23
  %282 = getelementptr inbounds ptr, ptr %281, i64 34
  %283 = load ptr, ptr %282, align 8
  invoke void %283(ptr noundef nonnull align 8 dereferenceable(60) %278, ptr noundef nonnull align 4 dereferenceable(16) %37, ptr noundef nonnull align 4 dereferenceable(16) %38, float noundef 6.000000e+00)
          to label %284 unwind label %353

284:                                              ; preds = %280
  call void @llvm.lifetime.end.p0(i64 16, ptr %38) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %37) #5
  br label %358

285:                                              ; preds = %217
  %286 = landingpad { ptr, i32 }
          cleanup
  %287 = extractvalue { ptr, i32 } %286, 0
  store ptr %287, ptr %14, align 8
  %288 = extractvalue { ptr, i32 } %286, 1
  store i32 %288, ptr %15, align 4
  br label %359

289:                                              ; preds = %233
  %290 = landingpad { ptr, i32 }
          cleanup
  %291 = extractvalue { ptr, i32 } %290, 0
  store ptr %291, ptr %14, align 8
  %292 = extractvalue { ptr, i32 } %290, 1
  store i32 %292, ptr %15, align 4
  br label %302

293:                                              ; preds = %236
  %294 = landingpad { ptr, i32 }
          cleanup
  %295 = extractvalue { ptr, i32 } %294, 0
  store ptr %295, ptr %14, align 8
  %296 = extractvalue { ptr, i32 } %294, 1
  store i32 %296, ptr %15, align 4
  br label %301

297:                                              ; preds = %238, %237
  %298 = landingpad { ptr, i32 }
          cleanup
  %299 = extractvalue { ptr, i32 } %298, 0
  store ptr %299, ptr %14, align 8
  %300 = extractvalue { ptr, i32 } %298, 1
  store i32 %300, ptr %15, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %26) #5
  br label %301

301:                                              ; preds = %297, %293
  call void @llvm.lifetime.end.p0(i64 16, ptr %25) #5
  br label %302

302:                                              ; preds = %301, %289
  call void @llvm.lifetime.end.p0(i64 16, ptr %24) #5
  br label %359

303:                                              ; preds = %242
  %304 = landingpad { ptr, i32 }
          cleanup
  %305 = extractvalue { ptr, i32 } %304, 0
  store ptr %305, ptr %14, align 8
  %306 = extractvalue { ptr, i32 } %304, 1
  store i32 %306, ptr %15, align 4
  br label %316

307:                                              ; preds = %245
  %308 = landingpad { ptr, i32 }
          cleanup
  %309 = extractvalue { ptr, i32 } %308, 0
  store ptr %309, ptr %14, align 8
  %310 = extractvalue { ptr, i32 } %308, 1
  store i32 %310, ptr %15, align 4
  br label %315

311:                                              ; preds = %247, %246
  %312 = landingpad { ptr, i32 }
          cleanup
  %313 = extractvalue { ptr, i32 } %312, 0
  store ptr %313, ptr %14, align 8
  %314 = extractvalue { ptr, i32 } %312, 1
  store i32 %314, ptr %15, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %29) #5
  br label %315

315:                                              ; preds = %311, %307
  call void @llvm.lifetime.end.p0(i64 16, ptr %28) #5
  br label %316

316:                                              ; preds = %315, %303
  call void @llvm.lifetime.end.p0(i64 16, ptr %27) #5
  br label %359

317:                                              ; preds = %251
  %318 = landingpad { ptr, i32 }
          cleanup
  %319 = extractvalue { ptr, i32 } %318, 0
  store ptr %319, ptr %14, align 8
  %320 = extractvalue { ptr, i32 } %318, 1
  store i32 %320, ptr %15, align 4
  br label %330

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

325:                                              ; preds = %256, %255
  %326 = landingpad { ptr, i32 }
          cleanup
  %327 = extractvalue { ptr, i32 } %326, 0
  store ptr %327, ptr %14, align 8
  %328 = extractvalue { ptr, i32 } %326, 1
  store i32 %328, ptr %15, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %32) #5
  br label %329

329:                                              ; preds = %325, %321
  call void @llvm.lifetime.end.p0(i64 16, ptr %31) #5
  br label %330

330:                                              ; preds = %329, %317
  call void @llvm.lifetime.end.p0(i64 16, ptr %30) #5
  br label %359

331:                                              ; preds = %260
  %332 = landingpad { ptr, i32 }
          cleanup
  %333 = extractvalue { ptr, i32 } %332, 0
  store ptr %333, ptr %14, align 8
  %334 = extractvalue { ptr, i32 } %332, 1
  store i32 %334, ptr %15, align 4
  br label %339

335:                                              ; preds = %264, %263
  %336 = landingpad { ptr, i32 }
          cleanup
  %337 = extractvalue { ptr, i32 } %336, 0
  store ptr %337, ptr %14, align 8
  %338 = extractvalue { ptr, i32 } %336, 1
  store i32 %338, ptr %15, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %34) #5
  br label %339

339:                                              ; preds = %335, %331
  call void @llvm.lifetime.end.p0(i64 16, ptr %33) #5
  br label %359

340:                                              ; preds = %268
  %341 = landingpad { ptr, i32 }
          cleanup
  %342 = extractvalue { ptr, i32 } %341, 0
  store ptr %342, ptr %14, align 8
  %343 = extractvalue { ptr, i32 } %341, 1
  store i32 %343, ptr %15, align 4
  br label %348

344:                                              ; preds = %272, %271
  %345 = landingpad { ptr, i32 }
          cleanup
  %346 = extractvalue { ptr, i32 } %345, 0
  store ptr %346, ptr %14, align 8
  %347 = extractvalue { ptr, i32 } %345, 1
  store i32 %347, ptr %15, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %36) #5
  br label %348

348:                                              ; preds = %344, %340
  call void @llvm.lifetime.end.p0(i64 16, ptr %35) #5
  br label %359

349:                                              ; preds = %276
  %350 = landingpad { ptr, i32 }
          cleanup
  %351 = extractvalue { ptr, i32 } %350, 0
  store ptr %351, ptr %14, align 8
  %352 = extractvalue { ptr, i32 } %350, 1
  store i32 %352, ptr %15, align 4
  br label %357

353:                                              ; preds = %280, %279
  %354 = landingpad { ptr, i32 }
          cleanup
  %355 = extractvalue { ptr, i32 } %354, 0
  store ptr %355, ptr %14, align 8
  %356 = extractvalue { ptr, i32 } %354, 1
  store i32 %356, ptr %15, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %38) #5
  br label %357

357:                                              ; preds = %353, %349
  call void @llvm.lifetime.end.p0(i64 16, ptr %37) #5
  br label %359

358:                                              ; preds = %284, %229
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #5
  call void @_ZNSt6vectorIN4TINY11TinyVector3IfNS0_10FloatUtilsEEESaIS3_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %11) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr %11) #5
  call void @_ZNSt6vectorIjSaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %10) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr %10) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %7) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %4) #5
  ret void

359:                                              ; preds = %357, %348, %339, %330, %316, %302, %285, %216
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #5
  call void @_ZNSt6vectorIN4TINY11TinyVector3IfNS0_10FloatUtilsEEESaIS3_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %11) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr %11) #5
  call void @_ZNSt6vectorIjSaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %10) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr %10) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %7) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %4) #5
  br label %360

360:                                              ; preds = %359
  %361 = load ptr, ptr %14, align 8
  %362 = load i32, ptr %15, align 4
  %363 = insertvalue { ptr, i32 } poison, ptr %361, 0
  %364 = insertvalue { ptr, i32 } %363, i32 %362, 1
  resume { ptr, i32 } %364
}

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt6vectorIN4TINY11TinyVector3IfNS0_10FloatUtilsEEESaIS3_EE9push_backERKS3_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 4 dereferenceable(16)) #4 align 2

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

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

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

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

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

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

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

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { mustprogress 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 #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 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { nounwind }
attributes #6 = { noreturn 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, !11, i64 0}
!10 = !{!"_ZTS12DrawGridData", !11, i64 0, !12, i64 4, !11, i64 8, !13, i64 12, !7, i64 16}
!11 = !{!"int", !7, i64 0}
!12 = !{!"float", !7, i64 0}
!13 = !{!"bool", !7, i64 0}
!14 = !{!11, !11, i64 0}
!15 = !{!10, !12, i64 4}
!16 = !{!12, !12, i64 0}
!17 = !{!10, !11, i64 8}
!18 = distinct !{!18, !19}
!19 = !{!"llvm.loop.mustprogress"}
!20 = !{!21, !6, i64 96}
!21 = !{!"_ZTS14TinyOpenGL3App", !22, i64 0, !6, i64 80, !6, i64 88, !6, i64 96}
!22 = !{!"_ZTS21TinyCommonGraphicsApp", !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !13, i64 40, !13, i64 41, !13, i64 42, !12, i64 44, !12, i64 48, !12, i64 52, !12, i64 56, !13, i64 60, !7, i64 64}
!23 = !{!24, !24, i64 0}
!24 = !{!"vtable pointer", !8, i64 0}
!25 = !{!10, !13, i64 12}
!26 = !{i8 0, i8 2}
!27 = !{}


; 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.DrawGridData = type { i32, float, i32, i8, [4 x float] }
%"struct.TINY::TinyVector3" = type { float, float, float, i32 }
%"class.std::vector.15" = type { %"struct.std::_Vector_base.16" }
%"struct.std::_Vector_base.16" = type { %"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl" }
%"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl" = type { %"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl_data" }
%"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.20" = type { %"struct.std::_Vector_base.21" }
%"struct.std::_Vector_base.21" = type { %"struct.std::_Vector_base<TINY::TinyVector3<float, TINY::FloatUtils>, std::allocator<TINY::TinyVector3<float, TINY::FloatUtils>>>::_Vector_impl" }
%"struct.std::_Vector_base<TINY::TinyVector3<float, TINY::FloatUtils>, std::allocator<TINY::TinyVector3<float, TINY::FloatUtils>>>::_Vector_impl" = type { %"struct.std::_Vector_base<TINY::TinyVector3<float, TINY::FloatUtils>, std::allocator<TINY::TinyVector3<float, TINY::FloatUtils>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<TINY::TinyVector3<float, TINY::FloatUtils>, std::allocator<TINY::TinyVector3<float, TINY::FloatUtils>>>::_Vector_impl_data" = type { ptr, ptr, ptr }

@glad_glGetError = external local_unnamed_addr global ptr, align 8
@.str.3 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [119 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [2 x i8], align 1
@__PRETTY_FUNCTION__._ZN14TinyOpenGL3App9draw_gridE12DrawGridData = external hidden unnamed_addr constant [53 x i8], align 1

declare i32 @__gxx_personality_v0(...)

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

; Function Attrs: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) local_unnamed_addr #1

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN14TinyOpenGL3App9draw_gridE12DrawGridData(ptr nocapture noundef nonnull readonly align 8 dereferenceable(104) %0, ptr nocapture noundef readonly byval(%struct.DrawGridData) align 8 %1) unnamed_addr #4 align 2 personality ptr @__gxx_personality_v0 {
  %3 = alloca %"struct.TINY::TinyVector3", align 4
  %4 = alloca %"class.std::vector.15", align 8
  %5 = alloca %"class.std::vector.20", align 8
  %6 = alloca %"struct.TINY::TinyVector3", align 4
  %7 = alloca %"struct.TINY::TinyVector3", align 4
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca %"struct.TINY::TinyVector3", align 4
  %11 = alloca %"struct.TINY::TinyVector3", align 4
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca %"struct.TINY::TinyVector3", align 4
  %15 = alloca %"struct.TINY::TinyVector3", align 4
  %16 = alloca %"struct.TINY::TinyVector3", align 4
  %17 = alloca %"struct.TINY::TinyVector3", align 4
  %18 = alloca %"struct.TINY::TinyVector3", align 4
  %19 = alloca %"struct.TINY::TinyVector3", align 4
  %20 = alloca %"struct.TINY::TinyVector3", align 4
  %21 = alloca %"struct.TINY::TinyVector3", align 4
  %22 = alloca %"struct.TINY::TinyVector3", align 4
  %23 = alloca %"struct.TINY::TinyVector3", align 4
  %24 = alloca %"struct.TINY::TinyVector3", align 4
  %25 = alloca %"struct.TINY::TinyVector3", align 4
  %26 = alloca %"struct.TINY::TinyVector3", align 4
  %27 = alloca %"struct.TINY::TinyVector3", align 4
  %28 = alloca %"struct.TINY::TinyVector3", align 4
  %29 = load i32, ptr %1, align 8, !tbaa !5
  %30 = getelementptr inbounds i8, ptr %1, i64 4
  %31 = load float, ptr %30, align 4, !tbaa !12
  %32 = getelementptr inbounds i8, ptr %1, i64 8
  %33 = load i32, ptr %32, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %3) #5
  call void @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEC2Ei(ptr noundef nonnull align 4 dereferenceable(16) %3, i32 noundef 0)
  %34 = getelementptr inbounds i8, ptr %1, i64 16
  %35 = load float, ptr %34, align 8, !tbaa !14
  %36 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEixEi(ptr noundef nonnull align 4 dereferenceable(16) %3, i32 noundef 0)
  store float %35, ptr %36, align 4, !tbaa !14
  %37 = getelementptr inbounds i8, ptr %1, i64 20
  %38 = load float, ptr %37, align 4, !tbaa !14
  %39 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEixEi(ptr noundef nonnull align 4 dereferenceable(16) %3, i32 noundef 1)
  store float %38, ptr %39, align 4, !tbaa !14
  %40 = getelementptr inbounds i8, ptr %1, i64 24
  %41 = load float, ptr %40, align 8, !tbaa !14
  %42 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEixEi(ptr noundef nonnull align 4 dereferenceable(16) %3, i32 noundef 2)
  store float %41, ptr %42, align 4, !tbaa !14
  switch i32 %33, label %44 [
    i32 1, label %45
    i32 2, label %43
  ]

43:                                               ; preds = %2
  br label %45

44:                                               ; preds = %2
  call void @__assert_fail(ptr noundef nonnull @.str.11, ptr noundef nonnull @.str.4, i32 noundef 1022, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN14TinyOpenGL3App9draw_gridE12DrawGridData) #6
  unreachable

45:                                               ; preds = %2, %43
  %.041 = phi i32 [ 1, %43 ], [ 2, %2 ]
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %4) #5
  call void @_ZNSt6vectorIjSaIjEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %4) #5
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %5) #5
  call void @_ZNSt6vectorIN4TINY11TinyVector3IfNS0_10FloatUtilsEEESaIS3_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %5) #5
  %.not49 = icmp slt i32 %29, 0
  br i1 %.not49, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %45
  %46 = sub nsw i32 0, %29
  %47 = sitofp i32 %46 to float
  %48 = uitofp nneg i32 %29 to float
  br label %60

._crit_edge:                                      ; preds = %111, %45
  %49 = getelementptr inbounds i8, ptr %0, i64 96
  %50 = load ptr, ptr %49, align 8, !tbaa !15
  %51 = call noundef nonnull align 4 dereferenceable(16) ptr @_ZNSt6vectorIN4TINY11TinyVector3IfNS0_10FloatUtilsEEESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %5, i64 noundef 0) #5
  %52 = call noundef i64 @_ZNKSt6vectorIN4TINY11TinyVector3IfNS0_10FloatUtilsEEESaIS3_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %5) #5
  %53 = trunc i64 %52 to i32
  %54 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %4, i64 noundef 0) #5
  %55 = call noundef i64 @_ZNKSt6vectorIjSaIjEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %4) #5
  %56 = trunc i64 %55 to i32
  %57 = load ptr, ptr %50, align 8, !tbaa !19
  %58 = getelementptr inbounds i8, ptr %57, i64 256
  %59 = load ptr, ptr %58, align 8
  invoke void %59(ptr noundef nonnull align 8 dereferenceable(60) %50, ptr noundef nonnull %51, ptr noundef nonnull align 4 dereferenceable(16) %3, i32 noundef %53, i32 noundef 16, ptr noundef nonnull %54, i32 noundef %56, float noundef 1.000000e+00)
          to label %121 unwind label %156

60:                                               ; preds = %.lr.ph, %111
  %.03951 = phi i32 [ %46, %.lr.ph ], [ %113, %111 ]
  %.04050 = phi i32 [ 0, %.lr.ph ], [ %112, %111 ]
  %61 = load ptr, ptr @glad_glGetError, align 8, !tbaa !21
  %62 = invoke i32 %61()
          to label %63 unwind label %66

63:                                               ; preds = %60
  %64 = icmp eq i32 %62, 0
  br i1 %64, label %68, label %65

65:                                               ; preds = %63
  call void @__assert_fail(ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.4, i32 noundef 1031, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN14TinyOpenGL3App9draw_gridE12DrawGridData) #6
  unreachable

66:                                               ; preds = %94, %81, %60
  %67 = landingpad { ptr, i32 }
          cleanup
  br label %171

68:                                               ; preds = %63
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %6) #5
  call void @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEC2Efff(ptr noundef nonnull align 4 dereferenceable(16) %6, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 0.000000e+00)
  %69 = sitofp i32 %.03951 to float
  %70 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEixEi(ptr noundef nonnull align 4 dereferenceable(16) %6, i32 noundef 0)
  store float %69, ptr %70, align 4, !tbaa !14
  %71 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEixEi(ptr noundef nonnull align 4 dereferenceable(16) %6, i32 noundef %33)
  store float %31, ptr %71, align 4, !tbaa !14
  %72 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEixEi(ptr noundef nonnull align 4 dereferenceable(16) %6, i32 noundef %.041)
  store float %47, ptr %72, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %7) #5
  call void @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEC2Efff(ptr noundef nonnull align 4 dereferenceable(16) %7, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 0.000000e+00)
  %73 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEixEi(ptr noundef nonnull align 4 dereferenceable(16) %7, i32 noundef 0)
  store float %69, ptr %73, align 4, !tbaa !14
  %74 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEixEi(ptr noundef nonnull align 4 dereferenceable(16) %7, i32 noundef %33)
  store float %31, ptr %74, align 4, !tbaa !14
  %75 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEixEi(ptr noundef nonnull align 4 dereferenceable(16) %7, i32 noundef %.041)
  store float %48, ptr %75, align 4, !tbaa !14
  invoke void @_ZNSt6vectorIN4TINY11TinyVector3IfNS0_10FloatUtilsEEESaIS3_EE9push_backERKS3_(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 4 dereferenceable(16) %6)
          to label %76 unwind label %87

76:                                               ; preds = %68
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %8) #5
  %77 = or disjoint i32 %.04050, 1
  store i32 %.04050, ptr %8, align 4, !tbaa !22
  invoke void @_ZNSt6vectorIjSaIjEE9push_backEOj(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 4 dereferenceable(4) %8)
          to label %78 unwind label %89

78:                                               ; preds = %76
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %8) #5
  invoke void @_ZNSt6vectorIN4TINY11TinyVector3IfNS0_10FloatUtilsEEESaIS3_EE9push_backERKS3_(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 4 dereferenceable(16) %7)
          to label %79 unwind label %87

79:                                               ; preds = %78
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %9) #5
  %80 = or disjoint i32 %.04050, 2
  store i32 %77, ptr %9, align 4, !tbaa !22
  invoke void @_ZNSt6vectorIjSaIjEE9push_backEOj(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 4 dereferenceable(4) %9)
          to label %81 unwind label %91

81:                                               ; preds = %79
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %9) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %7) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %6) #5
  %82 = load ptr, ptr @glad_glGetError, align 8, !tbaa !21
  %83 = invoke i32 %82()
          to label %84 unwind label %66

84:                                               ; preds = %81
  %85 = icmp eq i32 %83, 0
  br i1 %85, label %94, label %86

86:                                               ; preds = %84
  call void @__assert_fail(ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.4, i32 noundef 1047, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN14TinyOpenGL3App9draw_gridE12DrawGridData) #6
  unreachable

87:                                               ; preds = %78, %68
  %88 = landingpad { ptr, i32 }
          cleanup
  br label %93

89:                                               ; preds = %76
  %90 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %8) #5
  br label %93

91:                                               ; preds = %79
  %92 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %9) #5
  br label %93

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

94:                                               ; preds = %84
  %95 = load ptr, ptr @glad_glGetError, align 8, !tbaa !21
  %96 = invoke i32 %95()
          to label %97 unwind label %66

97:                                               ; preds = %94
  %98 = icmp eq i32 %96, 0
  br i1 %98, label %100, label %99

99:                                               ; preds = %97
  call void @__assert_fail(ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.4, i32 noundef 1049, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN14TinyOpenGL3App9draw_gridE12DrawGridData) #6
  unreachable

100:                                              ; preds = %97
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %10) #5
  call void @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEC2Efff(ptr noundef nonnull align 4 dereferenceable(16) %10, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 0.000000e+00)
  %101 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEixEi(ptr noundef nonnull align 4 dereferenceable(16) %10, i32 noundef 0)
  store float %47, ptr %101, align 4, !tbaa !14
  %102 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEixEi(ptr noundef nonnull align 4 dereferenceable(16) %10, i32 noundef %33)
  store float %31, ptr %102, align 4, !tbaa !14
  %103 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEixEi(ptr noundef nonnull align 4 dereferenceable(16) %10, i32 noundef %.041)
  store float %69, ptr %103, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %11) #5
  call void @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEC2Efff(ptr noundef nonnull align 4 dereferenceable(16) %11, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 0.000000e+00)
  %104 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEixEi(ptr noundef nonnull align 4 dereferenceable(16) %11, i32 noundef 0)
  store float %48, ptr %104, align 4, !tbaa !14
  %105 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEixEi(ptr noundef nonnull align 4 dereferenceable(16) %11, i32 noundef %33)
  store float %31, ptr %105, align 4, !tbaa !14
  %106 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEixEi(ptr noundef nonnull align 4 dereferenceable(16) %11, i32 noundef %.041)
  store float %69, ptr %106, align 4, !tbaa !14
  invoke void @_ZNSt6vectorIN4TINY11TinyVector3IfNS0_10FloatUtilsEEESaIS3_EE9push_backERKS3_(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 4 dereferenceable(16) %10)
          to label %107 unwind label %114

107:                                              ; preds = %100
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %12) #5
  %108 = or disjoint i32 %.04050, 3
  store i32 %80, ptr %12, align 4, !tbaa !22
  invoke void @_ZNSt6vectorIjSaIjEE9push_backEOj(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 4 dereferenceable(4) %12)
          to label %109 unwind label %116

109:                                              ; preds = %107
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %12) #5
  invoke void @_ZNSt6vectorIN4TINY11TinyVector3IfNS0_10FloatUtilsEEESaIS3_EE9push_backERKS3_(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 4 dereferenceable(16) %11)
          to label %110 unwind label %114

110:                                              ; preds = %109
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %13) #5
  store i32 %108, ptr %13, align 4, !tbaa !22
  invoke void @_ZNSt6vectorIjSaIjEE9push_backEOj(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 4 dereferenceable(4) %13)
          to label %111 unwind label %118

111:                                              ; preds = %110
  %112 = add nuw nsw i32 %.04050, 4
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %13) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %11) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %10) #5
  %113 = add i32 %.03951, 1
  %exitcond.not = icmp eq i32 %.03951, %29
  br i1 %exitcond.not, label %._crit_edge, label %60, !llvm.loop !23

114:                                              ; preds = %109, %100
  %115 = landingpad { ptr, i32 }
          cleanup
  br label %120

116:                                              ; preds = %107
  %117 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %12) #5
  br label %120

118:                                              ; preds = %110
  %119 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %13) #5
  br label %120

120:                                              ; preds = %118, %116, %114
  %.pn45 = phi { ptr, i32 } [ %119, %118 ], [ %115, %114 ], [ %117, %116 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %11) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %10) #5
  br label %171

121:                                              ; preds = %._crit_edge
  %122 = getelementptr inbounds i8, ptr %1, i64 12
  %123 = load i8, ptr %122, align 4, !tbaa !25, !range !26, !noundef !27
  %124 = trunc nuw i8 %123 to i1
  br i1 %124, label %125, label %170

125:                                              ; preds = %121
  %126 = load ptr, ptr %49, align 8, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %14) #5
  call void @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEC2Efff(ptr noundef nonnull align 4 dereferenceable(16) %14, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 0.000000e+00)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %15) #5
  call void @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEC2Efff(ptr noundef nonnull align 4 dereferenceable(16) %15, float noundef 1.000000e+00, float noundef 0.000000e+00, float noundef 0.000000e+00)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %16) #5
  call void @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEC2Efff(ptr noundef nonnull align 4 dereferenceable(16) %16, float noundef 1.000000e+00, float noundef 0.000000e+00, float noundef 0.000000e+00)
  %127 = load ptr, ptr %126, align 8, !tbaa !19
  %128 = getelementptr inbounds i8, ptr %127, i64 248
  %129 = load ptr, ptr %128, align 8
  invoke void %129(ptr noundef nonnull align 8 dereferenceable(60) %126, ptr noundef nonnull align 4 dereferenceable(16) %14, ptr noundef nonnull align 4 dereferenceable(16) %15, ptr noundef nonnull align 4 dereferenceable(16) %16, float noundef 3.000000e+00)
          to label %130 unwind label %158

130:                                              ; preds = %125
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %16) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %15) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %14) #5
  %131 = load ptr, ptr %49, align 8, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %17) #5
  call void @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEC2Efff(ptr noundef nonnull align 4 dereferenceable(16) %17, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 0.000000e+00)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %18) #5
  call void @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEC2Efff(ptr noundef nonnull align 4 dereferenceable(16) %18, float noundef 0.000000e+00, float noundef 1.000000e+00, float noundef 0.000000e+00)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %19) #5
  call void @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEC2Efff(ptr noundef nonnull align 4 dereferenceable(16) %19, float noundef 0.000000e+00, float noundef 1.000000e+00, float noundef 0.000000e+00)
  %132 = load ptr, ptr %131, align 8, !tbaa !19
  %133 = getelementptr inbounds i8, ptr %132, i64 248
  %134 = load ptr, ptr %133, align 8
  invoke void %134(ptr noundef nonnull align 8 dereferenceable(60) %131, ptr noundef nonnull align 4 dereferenceable(16) %17, ptr noundef nonnull align 4 dereferenceable(16) %18, ptr noundef nonnull align 4 dereferenceable(16) %19, float noundef 3.000000e+00)
          to label %135 unwind label %160

135:                                              ; preds = %130
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %19) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %18) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %17) #5
  %136 = load ptr, ptr %49, align 8, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %20) #5
  call void @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEC2Efff(ptr noundef nonnull align 4 dereferenceable(16) %20, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 0.000000e+00)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %21) #5
  call void @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEC2Efff(ptr noundef nonnull align 4 dereferenceable(16) %21, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 1.000000e+00)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %22) #5
  call void @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEC2Efff(ptr noundef nonnull align 4 dereferenceable(16) %22, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 1.000000e+00)
  %137 = load ptr, ptr %136, align 8, !tbaa !19
  %138 = getelementptr inbounds i8, ptr %137, i64 248
  %139 = load ptr, ptr %138, align 8
  invoke void %139(ptr noundef nonnull align 8 dereferenceable(60) %136, ptr noundef nonnull align 4 dereferenceable(16) %20, ptr noundef nonnull align 4 dereferenceable(16) %21, ptr noundef nonnull align 4 dereferenceable(16) %22, float noundef 3.000000e+00)
          to label %140 unwind label %162

140:                                              ; preds = %135
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %22) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %21) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %20) #5
  %141 = load ptr, ptr %49, align 8, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %23) #5
  call void @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEC2Efff(ptr noundef nonnull align 4 dereferenceable(16) %23, float noundef 1.000000e+00, float noundef 0.000000e+00, float noundef 0.000000e+00)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %24) #5
  call void @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEC2Efff(ptr noundef nonnull align 4 dereferenceable(16) %24, float noundef 1.000000e+00, float noundef 0.000000e+00, float noundef 0.000000e+00)
  %142 = load ptr, ptr %141, align 8, !tbaa !19
  %143 = getelementptr inbounds i8, ptr %142, i64 272
  %144 = load ptr, ptr %143, align 8
  invoke void %144(ptr noundef nonnull align 8 dereferenceable(60) %141, ptr noundef nonnull align 4 dereferenceable(16) %23, ptr noundef nonnull align 4 dereferenceable(16) %24, float noundef 6.000000e+00)
          to label %145 unwind label %164

145:                                              ; preds = %140
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %24) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %23) #5
  %146 = load ptr, ptr %49, align 8, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %25) #5
  call void @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEC2Efff(ptr noundef nonnull align 4 dereferenceable(16) %25, float noundef 0.000000e+00, float noundef 1.000000e+00, float noundef 0.000000e+00)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %26) #5
  call void @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEC2Efff(ptr noundef nonnull align 4 dereferenceable(16) %26, float noundef 0.000000e+00, float noundef 1.000000e+00, float noundef 0.000000e+00)
  %147 = load ptr, ptr %146, align 8, !tbaa !19
  %148 = getelementptr inbounds i8, ptr %147, i64 272
  %149 = load ptr, ptr %148, align 8
  invoke void %149(ptr noundef nonnull align 8 dereferenceable(60) %146, ptr noundef nonnull align 4 dereferenceable(16) %25, ptr noundef nonnull align 4 dereferenceable(16) %26, float noundef 6.000000e+00)
          to label %150 unwind label %166

150:                                              ; preds = %145
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %26) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %25) #5
  %151 = load ptr, ptr %49, align 8, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %27) #5
  call void @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEC2Efff(ptr noundef nonnull align 4 dereferenceable(16) %27, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 1.000000e+00)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %28) #5
  call void @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEC2Efff(ptr noundef nonnull align 4 dereferenceable(16) %28, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 1.000000e+00)
  %152 = load ptr, ptr %151, align 8, !tbaa !19
  %153 = getelementptr inbounds i8, ptr %152, i64 272
  %154 = load ptr, ptr %153, align 8
  invoke void %154(ptr noundef nonnull align 8 dereferenceable(60) %151, ptr noundef nonnull align 4 dereferenceable(16) %27, ptr noundef nonnull align 4 dereferenceable(16) %28, float noundef 6.000000e+00)
          to label %155 unwind label %168

155:                                              ; preds = %150
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %28) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %27) #5
  br label %170

156:                                              ; preds = %._crit_edge
  %157 = landingpad { ptr, i32 }
          cleanup
  br label %171

158:                                              ; preds = %125
  %159 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %16) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %15) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %14) #5
  br label %171

160:                                              ; preds = %130
  %161 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %19) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %18) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %17) #5
  br label %171

162:                                              ; preds = %135
  %163 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %22) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %21) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %20) #5
  br label %171

164:                                              ; preds = %140
  %165 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %24) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %23) #5
  br label %171

166:                                              ; preds = %145
  %167 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %26) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %25) #5
  br label %171

168:                                              ; preds = %150
  %169 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %28) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %27) #5
  br label %171

170:                                              ; preds = %155, %121
  call void @_ZNSt6vectorIN4TINY11TinyVector3IfNS0_10FloatUtilsEEESaIS3_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %5) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %5) #5
  call void @_ZNSt6vectorIjSaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %4) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %4) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %3) #5
  ret void

171:                                              ; preds = %66, %93, %120, %168, %166, %164, %162, %160, %158, %156
  %.pn45.pn.pn = phi { ptr, i32 } [ %169, %168 ], [ %167, %166 ], [ %165, %164 ], [ %163, %162 ], [ %161, %160 ], [ %159, %158 ], [ %157, %156 ], [ %.pn45, %120 ], [ %67, %66 ], [ %.pn, %93 ]
  call void @_ZNSt6vectorIN4TINY11TinyVector3IfNS0_10FloatUtilsEEESaIS3_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %5) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %5) #5
  call void @_ZNSt6vectorIjSaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %4) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %4) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %3) #5
  resume { ptr, i32 } %.pn45.pn.pn
}

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt6vectorIN4TINY11TinyVector3IfNS0_10FloatUtilsEEESaIS3_EE9push_backERKS3_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 4 dereferenceable(16)) local_unnamed_addr #4 align 2

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

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

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

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

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

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

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

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { mustprogress 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 #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 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { nounwind }
attributes #6 = { noreturn 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, !7, i64 0}
!6 = !{!"_ZTS12DrawGridData", !7, i64 0, !10, i64 4, !7, i64 8, !11, i64 12, !8, i64 16}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!"float", !8, i64 0}
!11 = !{!"bool", !8, i64 0}
!12 = !{!6, !10, i64 4}
!13 = !{!6, !7, i64 8}
!14 = !{!10, !10, i64 0}
!15 = !{!16, !18, i64 96}
!16 = !{!"_ZTS14TinyOpenGL3App", !17, i64 0, !18, i64 80, !18, i64 88, !18, i64 96}
!17 = !{!"_ZTS21TinyCommonGraphicsApp", !18, i64 8, !18, i64 16, !18, i64 24, !18, i64 32, !11, i64 40, !11, i64 41, !11, i64 42, !10, i64 44, !10, i64 48, !10, i64 52, !10, i64 56, !11, i64 60, !8, i64 64}
!18 = !{!"any pointer", !8, i64 0}
!19 = !{!20, !20, i64 0}
!20 = !{!"vtable pointer", !9, i64 0}
!21 = !{!18, !18, i64 0}
!22 = !{!7, !7, i64 0}
!23 = distinct !{!23, !24}
!24 = !{!"llvm.loop.mustprogress"}
!25 = !{!6, !11, i64 12}
!26 = !{i8 0, i8 2}
!27 = !{}


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