; LLVM IR from drohmer/cgp :: library/cgp/16_drawable/triangles_drawable (triangles_drawable)

; Unoptimized IR (clang -disable-llvm-passes):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%"class.std::allocator" = type { i8 }
%"struct.cgp::affine" = type { %"struct.cgp::rotation_transform", %"struct.cgp::numarray_stack.0", float, %"struct.cgp::numarray_stack.0" }
%"struct.cgp::rotation_transform" = type { %"struct.cgp::quaternion" }
%"struct.cgp::quaternion" = type { %"struct.cgp::numarray_stack" }
%"struct.cgp::numarray_stack" = type { float, float, float, float }
%"struct.cgp::numarray_stack.0" = type { float, float, float }
%"struct.cgp::material_mesh_drawable_phong" = type <{ %"struct.cgp::numarray_stack.0", float, %"struct.cgp::phong_parameters", %"struct.cgp::texture_settings_parameters", i8 }>
%"struct.cgp::phong_parameters" = type { float, float, float, float }
%"struct.cgp::texture_settings_parameters" = type { i8, i8, i8 }
%"struct.cgp::numarray" = type { %"class.std::vector" }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<cgp::numarray_stack<float, 3>, std::allocator<cgp::numarray_stack<float, 3>>>::_Vector_impl" }
%"struct.std::_Vector_base<cgp::numarray_stack<float, 3>, std::allocator<cgp::numarray_stack<float, 3>>>::_Vector_impl" = type { %"struct.std::_Vector_base<cgp::numarray_stack<float, 3>, std::allocator<cgp::numarray_stack<float, 3>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<cgp::numarray_stack<float, 3>, std::allocator<cgp::numarray_stack<float, 3>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.cgp::numarray.7" = type { %"class.std::vector.8" }
%"class.std::vector.8" = type { %"struct.std::_Vector_base.9" }
%"struct.std::_Vector_base.9" = type { %"struct.std::_Vector_base<cgp::numarray_stack<float, 2>, std::allocator<cgp::numarray_stack<float, 2>>>::_Vector_impl" }
%"struct.std::_Vector_base<cgp::numarray_stack<float, 2>, std::allocator<cgp::numarray_stack<float, 2>>>::_Vector_impl" = type { %"struct.std::_Vector_base<cgp::numarray_stack<float, 2>, std::allocator<cgp::numarray_stack<float, 2>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<cgp::numarray_stack<float, 2>, std::allocator<cgp::numarray_stack<float, 2>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.cgp::numarray_stack.13" = type { float, float }
%"struct.cgp::triangles_drawable" = type { %"struct.cgp::opengl_shader_structure", %"struct.cgp::opengl_texture_image_structure", %"struct.cgp::opengl_vbo_structure", %"struct.cgp::opengl_vbo_structure", %"struct.cgp::opengl_vbo_structure", %"struct.cgp::opengl_vbo_structure", i32, %"struct.cgp::affine", %"struct.cgp::affine_rts", %"struct.cgp::material_mesh_drawable_phong", i32, %"class.std::map" }
%"struct.cgp::opengl_shader_structure" = type { i32 }
%"struct.cgp::opengl_texture_image_structure" = type { i32, i32, i32, i32, i32 }
%"struct.cgp::opengl_vbo_structure" = type { %"struct.cgp::opengl_gpu_buffer", i32 }
%"struct.cgp::opengl_gpu_buffer" = type { i32, i32, i32, %"struct.cgp::opengl_gpu_buffer_details" }
%"struct.cgp::opengl_gpu_buffer_details" = type { i32, i32, i32 }
%"struct.cgp::affine_rts" = type { %"struct.cgp::rotation_transform", %"struct.cgp::numarray_stack.0", float }
%"class.std::map" = type { %"class.std::_Rb_tree" }
%"class.std::_Rb_tree" = type { %"struct.std::_Rb_tree<std::__cxx11::basic_string<char>, std::pair<const std::__cxx11::basic_string<char>, cgp::opengl_texture_image_structure>, std::_Select1st<std::pair<const std::__cxx11::basic_string<char>, cgp::opengl_texture_image_structure>>, std::less<std::__cxx11::basic_string<char>>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<std::__cxx11::basic_string<char>, std::pair<const std::__cxx11::basic_string<char>, cgp::opengl_texture_image_structure>, std::_Select1st<std::pair<const std::__cxx11::basic_string<char>, cgp::opengl_texture_image_structure>>, std::less<std::__cxx11::basic_string<char>>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"struct.std::_Rb_tree_header" = type { %"struct.std::_Rb_tree_node_base", i64 }
%"struct.std::_Rb_tree_node_base" = type { i32, ptr, ptr, ptr }

@.str = external hidden unnamed_addr constant [111 x i8], align 1
@__func__._ZN3cgp18triangles_drawable22initialize_data_on_gpuERKNS_8numarrayINS_14numarray_stackIfLi3EEEEES6_S6_S6_RKNS_23opengl_shader_structureERKNS_30opengl_texture_image_structureE = external hidden unnamed_addr constant [23 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [57 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [1 x i8], align 1
@glad_glGenVertexArrays = external global ptr, align 8
@glad_glBindVertexArray = external global ptr, align 8

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

70:                                               ; preds = %7
  call void @llvm.lifetime.start.p0(i64 32, ptr %19) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %20) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %20) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %19, ptr noundef @__func__._ZN3cgp18triangles_drawable22initialize_data_on_gpuERKNS_8numarrayINS_14numarray_stackIfLi3EEEEES6_S6_S6_RKNS_23opengl_shader_structureERKNS_30opengl_texture_image_structureE, ptr noundef nonnull align 1 dereferenceable(1) %20)
          to label %71 unwind label %86

71:                                               ; preds = %70
  invoke void @_ZN3cgp18check_opengl_errorERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_i(ptr noundef nonnull align 8 dereferenceable(32) %15, ptr noundef nonnull align 8 dereferenceable(32) %19, i32 noundef 21)
          to label %72 unwind label %90

72:                                               ; preds = %71
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %19) #9
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %20) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %20) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %19) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %15) #9
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %16) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %16) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %15) #9
  %73 = getelementptr inbounds %"struct.cgp::triangles_drawable", ptr %69, i32 0, i32 6
  %74 = load i32, ptr %73, align 8, !tbaa !9
  %75 = icmp ne i32 %74, 0
  br i1 %75, label %81, label %76

76:                                               ; preds = %72
  %77 = getelementptr inbounds %"struct.cgp::triangles_drawable", ptr %69, i32 0, i32 2
  %78 = getelementptr inbounds %"struct.cgp::opengl_gpu_buffer", ptr %77, i32 0, i32 1
  %79 = load i32, ptr %78, align 4, !tbaa !37
  %80 = icmp ne i32 %79, 0
  br i1 %80, label %81, label %96

81:                                               ; preds = %76, %72
  call void @_ZN3cgpL28warning_initialize_non_emptyEv()
  br label %96

82:                                               ; preds = %7
  %83 = landingpad { ptr, i32 }
          cleanup
  %84 = extractvalue { ptr, i32 } %83, 0
  store ptr %84, ptr %17, align 8
  %85 = extractvalue { ptr, i32 } %83, 1
  store i32 %85, ptr %18, align 4
  br label %95

86:                                               ; preds = %70
  %87 = landingpad { ptr, i32 }
          cleanup
  %88 = extractvalue { ptr, i32 } %87, 0
  store ptr %88, ptr %17, align 8
  %89 = extractvalue { ptr, i32 } %87, 1
  store i32 %89, ptr %18, align 4
  br label %94

90:                                               ; preds = %71
  %91 = landingpad { ptr, i32 }
          cleanup
  %92 = extractvalue { ptr, i32 } %91, 0
  store ptr %92, ptr %17, align 8
  %93 = extractvalue { ptr, i32 } %91, 1
  store i32 %93, ptr %18, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %19) #9
  br label %94

94:                                               ; preds = %90, %86
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %20) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %20) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %19) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %15) #9
  br label %95

95:                                               ; preds = %94, %82
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %16) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %16) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %15) #9
  br label %367

96:                                               ; preds = %81, %76
  %97 = load ptr, ptr %9, align 8, !tbaa !5
  %98 = call noundef i32 @_ZNK3cgp8numarrayINS_14numarray_stackIfLi3EEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %97)
  %99 = icmp eq i32 %98, 0
  br i1 %99, label %100, label %130

100:                                              ; preds = %96
  call void @llvm.lifetime.start.p0(i64 32, ptr %21) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %22) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %22) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %21, ptr noundef @.str.2, ptr noundef nonnull align 1 dereferenceable(1) %22)
          to label %101 unwind label %106

101:                                              ; preds = %100
  call void @llvm.lifetime.start.p0(i64 32, ptr %23) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %24) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %24) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %23, ptr noundef @.str.3, ptr noundef nonnull align 1 dereferenceable(1) %24)
          to label %102 unwind label %110

102:                                              ; preds = %101
  call void @llvm.lifetime.start.p0(i64 32, ptr %25) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %26) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %26) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %25, ptr noundef @.str, ptr noundef nonnull align 1 dereferenceable(1) %26)
          to label %103 unwind label %114

103:                                              ; preds = %102
  call void @llvm.lifetime.start.p0(i64 32, ptr %27) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %28) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %28) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef @__func__._ZN3cgp18triangles_drawable22initialize_data_on_gpuERKNS_8numarrayINS_14numarray_stackIfLi3EEEEES6_S6_S6_RKNS_23opengl_shader_structureERKNS_30opengl_texture_image_structureE, ptr noundef nonnull align 1 dereferenceable(1) %28)
          to label %104 unwind label %118

104:                                              ; preds = %103
  invoke void @_ZN3cgp12call_warningERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_S7_S7_i(ptr noundef nonnull align 8 dereferenceable(32) %21, ptr noundef nonnull align 8 dereferenceable(32) %23, ptr noundef nonnull align 8 dereferenceable(32) %25, ptr noundef nonnull align 8 dereferenceable(32) %27, i32 noundef 28)
          to label %105 unwind label %122

105:                                              ; preds = %104
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %27) #9
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %28) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %28) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %27) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %25) #9
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %26) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %26) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %25) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %23) #9
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %24) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %24) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %23) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %21) #9
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %22) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %22) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %21) #9
  br label %323

106:                                              ; preds = %100
  %107 = landingpad { ptr, i32 }
          cleanup
  %108 = extractvalue { ptr, i32 } %107, 0
  store ptr %108, ptr %17, align 8
  %109 = extractvalue { ptr, i32 } %107, 1
  store i32 %109, ptr %18, align 4
  br label %129

110:                                              ; preds = %101
  %111 = landingpad { ptr, i32 }
          cleanup
  %112 = extractvalue { ptr, i32 } %111, 0
  store ptr %112, ptr %17, align 8
  %113 = extractvalue { ptr, i32 } %111, 1
  store i32 %113, ptr %18, align 4
  br label %128

114:                                              ; preds = %102
  %115 = landingpad { ptr, i32 }
          cleanup
  %116 = extractvalue { ptr, i32 } %115, 0
  store ptr %116, ptr %17, align 8
  %117 = extractvalue { ptr, i32 } %115, 1
  store i32 %117, ptr %18, align 4
  br label %127

118:                                              ; preds = %103
  %119 = landingpad { ptr, i32 }
          cleanup
  %120 = extractvalue { ptr, i32 } %119, 0
  store ptr %120, ptr %17, align 8
  %121 = extractvalue { ptr, i32 } %119, 1
  store i32 %121, ptr %18, align 4
  br label %126

122:                                              ; preds = %104
  %123 = landingpad { ptr, i32 }
          cleanup
  %124 = extractvalue { ptr, i32 } %123, 0
  store ptr %124, ptr %17, align 8
  %125 = extractvalue { ptr, i32 } %123, 1
  store i32 %125, ptr %18, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %27) #9
  br label %126

126:                                              ; preds = %122, %118
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %28) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %28) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %27) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %25) #9
  br label %127

127:                                              ; preds = %126, %114
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %26) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %26) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %25) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %23) #9
  br label %128

128:                                              ; preds = %127, %110
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %24) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %24) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %23) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %21) #9
  br label %129

129:                                              ; preds = %128, %106
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %22) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %22) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %21) #9
  br label %367

130:                                              ; preds = %96
  %131 = load ptr, ptr %13, align 8, !tbaa !5
  %132 = getelementptr inbounds %"struct.cgp::triangles_drawable", ptr %69, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %132, ptr align 4 %131, i64 4, i1 false), !tbaa.struct !38
  %133 = load ptr, ptr %14, align 8, !tbaa !5
  %134 = getelementptr inbounds %"struct.cgp::triangles_drawable", ptr %69, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %134, ptr align 4 %133, i64 20, i1 false), !tbaa.struct !40
  call void @llvm.lifetime.start.p0(i64 44, ptr %29) #9
  call void @_ZN3cgp6affineC1Ev(ptr noundef nonnull align 4 dereferenceable(44) %29)
  %135 = getelementptr inbounds %"struct.cgp::triangles_drawable", ptr %69, i32 0, i32 7
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %135, ptr align 4 %29, i64 44, i1 false)
  call void @llvm.lifetime.end.p0(i64 44, ptr %29) #9
  call void @llvm.lifetime.start.p0(i64 36, ptr %30) #9
  call void @llvm.memset.p0.i64(ptr align 4 %30, i8 0, i64 36, i1 false)
  call void @_ZN3cgp28material_mesh_drawable_phongC2Ev(ptr noundef nonnull align 4 dereferenceable(35) %30)
  %136 = getelementptr inbounds %"struct.cgp::triangles_drawable", ptr %69, i32 0, i32 9
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %136, ptr align 4 %30, i64 35, i1 false), !tbaa.struct !41
  call void @llvm.lifetime.end.p0(i64 36, ptr %30) #9
  %137 = getelementptr inbounds %"struct.cgp::triangles_drawable", ptr %69, i32 0, i32 2
  %138 = load ptr, ptr %9, align 8, !tbaa !5
  call void @_ZN3cgp20opengl_vbo_structure22initialize_data_on_gpuERKNS_8numarrayINS_14numarray_stackIfLi3EEEEEj(ptr noundef nonnull align 4 dereferenceable(28) %137, ptr noundef nonnull align 8 dereferenceable(24) %138, i32 noundef 0)
  %139 = load ptr, ptr %9, align 8, !tbaa !5
  %140 = call noundef i32 @_ZNK3cgp8numarrayINS_14numarray_stackIfLi3EEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %139)
  %141 = getelementptr inbounds %"struct.cgp::triangles_drawable", ptr %69, i32 0, i32 10
  store i32 %140, ptr %141, align 4, !tbaa !44
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #9
  %142 = load ptr, ptr %9, align 8, !tbaa !5
  %143 = call noundef i32 @_ZNK3cgp8numarrayINS_14numarray_stackIfLi3EEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %142)
  store i32 %143, ptr %31, align 4, !tbaa !39
  %144 = load ptr, ptr %10, align 8, !tbaa !5
  %145 = call noundef i32 @_ZNK3cgp8numarrayINS_14numarray_stackIfLi3EEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %144)
  %146 = load i32, ptr %31, align 4, !tbaa !39
  %147 = icmp slt i32 %145, %146
  br i1 %147, label %148, label %248

148:                                              ; preds = %130
  call void @llvm.lifetime.start.p0(i64 24, ptr %32) #9
  call void @_ZN3cgp8numarrayINS_14numarray_stackIfLi3EEEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %32)
  %149 = load i32, ptr %31, align 4, !tbaa !39
  %150 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN3cgp8numarrayINS_14numarray_stackIfLi3EEEE6resizeEi(ptr noundef nonnull align 8 dereferenceable(24) %32, i32 noundef %149)
          to label %151 unwind label %157

151:                                              ; preds = %148
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #9
  store i32 2, ptr %33, align 4, !tbaa !39
  br label %152

152:                                              ; preds = %236, %151
  %153 = load i32, ptr %33, align 4, !tbaa !39
  %154 = load i32, ptr %31, align 4, !tbaa !39
  %155 = icmp slt i32 %153, %154
  br i1 %155, label %161, label %156

156:                                              ; preds = %152
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #9
  br label %246

157:                                              ; preds = %148
  %158 = landingpad { ptr, i32 }
          cleanup
  %159 = extractvalue { ptr, i32 } %158, 0
  store ptr %159, ptr %17, align 8
  %160 = extractvalue { ptr, i32 } %158, 1
  store i32 %160, ptr %18, align 4
  br label %247

161:                                              ; preds = %152
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #9
  %162 = load ptr, ptr %9, align 8, !tbaa !5
  %163 = load i32, ptr %33, align 4, !tbaa !39
  %164 = sub nsw i32 %163, 2
  %165 = invoke noundef nonnull align 4 dereferenceable(12) ptr @_ZNK3cgp8numarrayINS_14numarray_stackIfLi3EEEEixEi(ptr noundef nonnull align 8 dereferenceable(24) %162, i32 noundef %164)
          to label %166 unwind label %192

166:                                              ; preds = %161
  store ptr %165, ptr %34, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #9
  %167 = load ptr, ptr %9, align 8, !tbaa !5
  %168 = load i32, ptr %33, align 4, !tbaa !39
  %169 = sub nsw i32 %168, 1
  %170 = invoke noundef nonnull align 4 dereferenceable(12) ptr @_ZNK3cgp8numarrayINS_14numarray_stackIfLi3EEEEixEi(ptr noundef nonnull align 8 dereferenceable(24) %167, i32 noundef %169)
          to label %171 unwind label %196

171:                                              ; preds = %166
  store ptr %170, ptr %35, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #9
  %172 = load ptr, ptr %9, align 8, !tbaa !5
  %173 = load i32, ptr %33, align 4, !tbaa !39
  %174 = invoke noundef nonnull align 4 dereferenceable(12) ptr @_ZNK3cgp8numarrayINS_14numarray_stackIfLi3EEEEixEi(ptr noundef nonnull align 8 dereferenceable(24) %172, i32 noundef %173)
          to label %175 unwind label %200

175:                                              ; preds = %171
  store ptr %174, ptr %36, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 12, ptr %37) #9
  %176 = load ptr, ptr %35, align 8, !tbaa !5
  %177 = load ptr, ptr %34, align 8, !tbaa !5
  %178 = invoke { <2 x float>, float } @_ZN3cgpmiERKNS_14numarray_stackIfLi3EEES3_(ptr noundef nonnull align 4 dereferenceable(12) %176, ptr noundef nonnull align 4 dereferenceable(12) %177)
          to label %179 unwind label %204

179:                                              ; preds = %175
  store { <2 x float>, float } %178, ptr %38, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %37, ptr align 8 %38, i64 12, i1 false)
  call void @llvm.lifetime.start.p0(i64 12, ptr %39) #9
  %180 = load ptr, ptr %36, align 8, !tbaa !5
  %181 = load ptr, ptr %34, align 8, !tbaa !5
  %182 = invoke { <2 x float>, float } @_ZN3cgpmiERKNS_14numarray_stackIfLi3EEES3_(ptr noundef nonnull align 4 dereferenceable(12) %180, ptr noundef nonnull align 4 dereferenceable(12) %181)
          to label %183 unwind label %208

183:                                              ; preds = %179
  store { <2 x float>, float } %182, ptr %40, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %39, ptr align 8 %40, i64 12, i1 false)
  call void @llvm.lifetime.start.p0(i64 12, ptr %41) #9
  %184 = invoke { <2 x float>, float } @_ZN3cgp5crossERKNS_14numarray_stackIfLi3EEES3_(ptr noundef nonnull align 4 dereferenceable(12) %37, ptr noundef nonnull align 4 dereferenceable(12) %39)
          to label %185 unwind label %212

185:                                              ; preds = %183
  store { <2 x float>, float } %184, ptr %42, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %41, ptr align 8 %42, i64 12, i1 false)
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #9
  %186 = invoke noundef float @_ZN3cgp4normERKNS_14numarray_stackIfLi3EEE(ptr noundef nonnull align 4 dereferenceable(12) %41)
          to label %187 unwind label %216

187:                                              ; preds = %185
  store float %186, ptr %43, align 4, !tbaa !42
  %188 = load float, ptr %43, align 4, !tbaa !42
  %189 = fcmp olt float %188, 0x3F1A36E2E0000000
  br i1 %189, label %190, label %224

190:                                              ; preds = %187
  call void @llvm.lifetime.start.p0(i64 12, ptr %44) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %45) #9
  store i32 1, ptr %45, align 4, !tbaa !39
  call void @llvm.lifetime.start.p0(i64 4, ptr %46) #9
  store i32 0, ptr %46, align 4, !tbaa !39
  call void @llvm.lifetime.start.p0(i64 4, ptr %47) #9
  store i32 0, ptr %47, align 4, !tbaa !39
  invoke void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %44, ptr noundef nonnull align 4 dereferenceable(4) %45, ptr noundef nonnull align 4 dereferenceable(4) %46, ptr noundef nonnull align 4 dereferenceable(4) %47)
          to label %191 unwind label %220

191:                                              ; preds = %190
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %41, ptr align 4 %44, i64 12, i1 false), !tbaa.struct !45
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %44) #9
  br label %224

192:                                              ; preds = %161
  %193 = landingpad { ptr, i32 }
          cleanup
  %194 = extractvalue { ptr, i32 } %193, 0
  store ptr %194, ptr %17, align 8
  %195 = extractvalue { ptr, i32 } %193, 1
  store i32 %195, ptr %18, align 4
  br label %245

196:                                              ; preds = %166
  %197 = landingpad { ptr, i32 }
          cleanup
  %198 = extractvalue { ptr, i32 } %197, 0
  store ptr %198, ptr %17, align 8
  %199 = extractvalue { ptr, i32 } %197, 1
  store i32 %199, ptr %18, align 4
  br label %244

200:                                              ; preds = %171
  %201 = landingpad { ptr, i32 }
          cleanup
  %202 = extractvalue { ptr, i32 } %201, 0
  store ptr %202, ptr %17, align 8
  %203 = extractvalue { ptr, i32 } %201, 1
  store i32 %203, ptr %18, align 4
  br label %243

204:                                              ; preds = %175
  %205 = landingpad { ptr, i32 }
          cleanup
  %206 = extractvalue { ptr, i32 } %205, 0
  store ptr %206, ptr %17, align 8
  %207 = extractvalue { ptr, i32 } %205, 1
  store i32 %207, ptr %18, align 4
  br label %242

208:                                              ; preds = %179
  %209 = landingpad { ptr, i32 }
          cleanup
  %210 = extractvalue { ptr, i32 } %209, 0
  store ptr %210, ptr %17, align 8
  %211 = extractvalue { ptr, i32 } %209, 1
  store i32 %211, ptr %18, align 4
  br label %241

212:                                              ; preds = %183
  %213 = landingpad { ptr, i32 }
          cleanup
  %214 = extractvalue { ptr, i32 } %213, 0
  store ptr %214, ptr %17, align 8
  %215 = extractvalue { ptr, i32 } %213, 1
  store i32 %215, ptr %18, align 4
  br label %240

216:                                              ; preds = %231, %227, %224, %185
  %217 = landingpad { ptr, i32 }
          cleanup
  %218 = extractvalue { ptr, i32 } %217, 0
  store ptr %218, ptr %17, align 8
  %219 = extractvalue { ptr, i32 } %217, 1
  store i32 %219, ptr %18, align 4
  br label %239

220:                                              ; preds = %190
  %221 = landingpad { ptr, i32 }
          cleanup
  %222 = extractvalue { ptr, i32 } %221, 0
  store ptr %222, ptr %17, align 8
  %223 = extractvalue { ptr, i32 } %221, 1
  store i32 %223, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %44) #9
  br label %239

224:                                              ; preds = %191, %187
  %225 = load i32, ptr %33, align 4, !tbaa !39
  %226 = invoke noundef nonnull align 4 dereferenceable(12) ptr @_ZN3cgp8numarrayINS_14numarray_stackIfLi3EEEEixEi(ptr noundef nonnull align 8 dereferenceable(24) %32, i32 noundef %225)
          to label %227 unwind label %216

227:                                              ; preds = %224
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %226, ptr align 4 %41, i64 12, i1 false), !tbaa.struct !45
  %228 = load i32, ptr %33, align 4, !tbaa !39
  %229 = sub nsw i32 %228, 1
  %230 = invoke noundef nonnull align 4 dereferenceable(12) ptr @_ZN3cgp8numarrayINS_14numarray_stackIfLi3EEEEixEi(ptr noundef nonnull align 8 dereferenceable(24) %32, i32 noundef %229)
          to label %231 unwind label %216

231:                                              ; preds = %227
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %230, ptr align 4 %41, i64 12, i1 false), !tbaa.struct !45
  %232 = load i32, ptr %33, align 4, !tbaa !39
  %233 = sub nsw i32 %232, 2
  %234 = invoke noundef nonnull align 4 dereferenceable(12) ptr @_ZN3cgp8numarrayINS_14numarray_stackIfLi3EEEEixEi(ptr noundef nonnull align 8 dereferenceable(24) %32, i32 noundef %233)
          to label %235 unwind label %216

235:                                              ; preds = %231
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %234, ptr align 4 %41, i64 12, i1 false), !tbaa.struct !45
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %41) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %39) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %37) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #9
  br label %236

236:                                              ; preds = %235
  %237 = load i32, ptr %33, align 4, !tbaa !39
  %238 = add nsw i32 %237, 3
  store i32 %238, ptr %33, align 4, !tbaa !39
  br label %152, !llvm.loop !46

239:                                              ; preds = %220, %216
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #9
  br label %240

240:                                              ; preds = %239, %212
  call void @llvm.lifetime.end.p0(i64 12, ptr %41) #9
  br label %241

241:                                              ; preds = %240, %208
  call void @llvm.lifetime.end.p0(i64 12, ptr %39) #9
  br label %242

242:                                              ; preds = %241, %204
  call void @llvm.lifetime.end.p0(i64 12, ptr %37) #9
  br label %243

243:                                              ; preds = %242, %200
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #9
  br label %244

244:                                              ; preds = %243, %196
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #9
  br label %245

245:                                              ; preds = %244, %192
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #9
  br label %247

246:                                              ; preds = %156
  call void @_ZN3cgp8numarrayINS_14numarray_stackIfLi3EEEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %32) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr %32) #9
  br label %251

247:                                              ; preds = %245, %157
  call void @_ZN3cgp8numarrayINS_14numarray_stackIfLi3EEEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %32) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr %32) #9
  br label %366

248:                                              ; preds = %130
  %249 = getelementptr inbounds %"struct.cgp::triangles_drawable", ptr %69, i32 0, i32 3
  %250 = load ptr, ptr %10, align 8, !tbaa !5
  call void @_ZN3cgp20opengl_vbo_structure22initialize_data_on_gpuERKNS_8numarrayINS_14numarray_stackIfLi3EEEEEj(ptr noundef nonnull align 4 dereferenceable(28) %249, ptr noundef nonnull align 8 dereferenceable(24) %250, i32 noundef 0)
  br label %251

251:                                              ; preds = %248, %246
  %252 = load ptr, ptr %11, align 8, !tbaa !5
  %253 = call noundef i32 @_ZNK3cgp8numarrayINS_14numarray_stackIfLi3EEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %252)
  %254 = load i32, ptr %31, align 4, !tbaa !39
  %255 = icmp slt i32 %253, %254
  br i1 %255, label %256, label %274

256:                                              ; preds = %251
  call void @llvm.lifetime.start.p0(i64 24, ptr %48) #9
  call void @_ZN3cgp8numarrayINS_14numarray_stackIfLi3EEEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %48)
  %257 = load i32, ptr %31, align 4, !tbaa !39
  %258 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN3cgp8numarrayINS_14numarray_stackIfLi3EEEE6resizeEi(ptr noundef nonnull align 8 dereferenceable(24) %48, i32 noundef %257)
          to label %259 unwind label %265

259:                                              ; preds = %256
  call void @llvm.lifetime.start.p0(i64 12, ptr %49) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %50) #9
  store i32 1, ptr %50, align 4, !tbaa !39
  call void @llvm.lifetime.start.p0(i64 4, ptr %51) #9
  store i32 1, ptr %51, align 4, !tbaa !39
  call void @llvm.lifetime.start.p0(i64 4, ptr %52) #9
  store i32 1, ptr %52, align 4, !tbaa !39
  invoke void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %49, ptr noundef nonnull align 4 dereferenceable(4) %50, ptr noundef nonnull align 4 dereferenceable(4) %51, ptr noundef nonnull align 4 dereferenceable(4) %52)
          to label %260 unwind label %269

260:                                              ; preds = %259
  %261 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN3cgp8numarrayINS_14numarray_stackIfLi3EEEE4fillERKS2_(ptr noundef nonnull align 8 dereferenceable(24) %48, ptr noundef nonnull align 4 dereferenceable(12) %49)
          to label %262 unwind label %269

262:                                              ; preds = %260
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %50) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %49) #9
  %263 = getelementptr inbounds %"struct.cgp::triangles_drawable", ptr %69, i32 0, i32 4
  invoke void @_ZN3cgp20opengl_vbo_structure22initialize_data_on_gpuERKNS_8numarrayINS_14numarray_stackIfLi3EEEEEj(ptr noundef nonnull align 4 dereferenceable(28) %263, ptr noundef nonnull align 8 dereferenceable(24) %48, i32 noundef 0)
          to label %264 unwind label %265

264:                                              ; preds = %262
  call void @_ZN3cgp8numarrayINS_14numarray_stackIfLi3EEEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %48) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr %48) #9
  br label %277

265:                                              ; preds = %262, %256
  %266 = landingpad { ptr, i32 }
          cleanup
  %267 = extractvalue { ptr, i32 } %266, 0
  store ptr %267, ptr %17, align 8
  %268 = extractvalue { ptr, i32 } %266, 1
  store i32 %268, ptr %18, align 4
  br label %273

269:                                              ; preds = %260, %259
  %270 = landingpad { ptr, i32 }
          cleanup
  %271 = extractvalue { ptr, i32 } %270, 0
  store ptr %271, ptr %17, align 8
  %272 = extractvalue { ptr, i32 } %270, 1
  store i32 %272, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %50) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %49) #9
  br label %273

273:                                              ; preds = %269, %265
  call void @_ZN3cgp8numarrayINS_14numarray_stackIfLi3EEEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %48) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr %48) #9
  br label %366

274:                                              ; preds = %251
  %275 = getelementptr inbounds %"struct.cgp::triangles_drawable", ptr %69, i32 0, i32 4
  %276 = load ptr, ptr %11, align 8, !tbaa !5
  call void @_ZN3cgp20opengl_vbo_structure22initialize_data_on_gpuERKNS_8numarrayINS_14numarray_stackIfLi3EEEEEj(ptr noundef nonnull align 4 dereferenceable(28) %275, ptr noundef nonnull align 8 dereferenceable(24) %276, i32 noundef 0)
  br label %277

277:                                              ; preds = %274, %264
  %278 = load ptr, ptr %12, align 8, !tbaa !5
  %279 = call noundef i32 @_ZNK3cgp8numarrayINS_14numarray_stackIfLi3EEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %278)
  %280 = load i32, ptr %31, align 4, !tbaa !39
  %281 = icmp slt i32 %279, %280
  br i1 %281, label %282, label %300

282:                                              ; preds = %277
  call void @llvm.lifetime.start.p0(i64 24, ptr %53) #9
  call void @_ZN3cgp8numarrayINS_14numarray_stackIfLi2EEEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %53)
  %283 = load i32, ptr %31, align 4, !tbaa !39
  %284 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN3cgp8numarrayINS_14numarray_stackIfLi2EEEE6resizeEi(ptr noundef nonnull align 8 dereferenceable(24) %53, i32 noundef %283)
          to label %285 unwind label %291

285:                                              ; preds = %282
  call void @llvm.lifetime.start.p0(i64 8, ptr %54) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %55) #9
  store i32 0, ptr %55, align 4, !tbaa !39
  call void @llvm.lifetime.start.p0(i64 4, ptr %56) #9
  store i32 0, ptr %56, align 4, !tbaa !39
  invoke void @_ZN3cgp14numarray_stackIfLi2EEC2IiiEERKT_RKT0_(ptr noundef nonnull align 4 dereferenceable(8) %54, ptr noundef nonnull align 4 dereferenceable(4) %55, ptr noundef nonnull align 4 dereferenceable(4) %56)
          to label %286 unwind label %295

286:                                              ; preds = %285
  %287 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN3cgp8numarrayINS_14numarray_stackIfLi2EEEE4fillERKS2_(ptr noundef nonnull align 8 dereferenceable(24) %53, ptr noundef nonnull align 4 dereferenceable(8) %54)
          to label %288 unwind label %295

288:                                              ; preds = %286
  call void @llvm.lifetime.end.p0(i64 4, ptr %56) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %55) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #9
  %289 = getelementptr inbounds %"struct.cgp::triangles_drawable", ptr %69, i32 0, i32 5
  invoke void @_ZN3cgp20opengl_vbo_structure22initialize_data_on_gpuERKNS_8numarrayINS_14numarray_stackIfLi2EEEEEj(ptr noundef nonnull align 4 dereferenceable(28) %289, ptr noundef nonnull align 8 dereferenceable(24) %53, i32 noundef 0)
          to label %290 unwind label %291

290:                                              ; preds = %288
  call void @_ZN3cgp8numarrayINS_14numarray_stackIfLi2EEEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %53) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr %53) #9
  br label %303

291:                                              ; preds = %288, %282
  %292 = landingpad { ptr, i32 }
          cleanup
  %293 = extractvalue { ptr, i32 } %292, 0
  store ptr %293, ptr %17, align 8
  %294 = extractvalue { ptr, i32 } %292, 1
  store i32 %294, ptr %18, align 4
  br label %299

295:                                              ; preds = %286, %285
  %296 = landingpad { ptr, i32 }
          cleanup
  %297 = extractvalue { ptr, i32 } %296, 0
  store ptr %297, ptr %17, align 8
  %298 = extractvalue { ptr, i32 } %296, 1
  store i32 %298, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %56) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %55) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #9
  br label %299

299:                                              ; preds = %295, %291
  call void @_ZN3cgp8numarrayINS_14numarray_stackIfLi2EEEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %53) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr %53) #9
  br label %366

300:                                              ; preds = %277
  %301 = getelementptr inbounds %"struct.cgp::triangles_drawable", ptr %69, i32 0, i32 5
  %302 = load ptr, ptr %12, align 8, !tbaa !5
  call void @_ZN3cgp20opengl_vbo_structure22initialize_data_on_gpuERKNS_8numarrayINS_14numarray_stackIfLi3EEEEEj(ptr noundef nonnull align 4 dereferenceable(28) %301, ptr noundef nonnull align 8 dereferenceable(24) %302, i32 noundef 0)
  br label %303

303:                                              ; preds = %300, %290
  %304 = load ptr, ptr @glad_glGenVertexArrays, align 8, !tbaa !5
  %305 = getelementptr inbounds %"struct.cgp::triangles_drawable", ptr %69, i32 0, i32 6
  call void %304(i32 noundef 1, ptr noundef %305)
  call void @llvm.lifetime.start.p0(i64 32, ptr %57) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %58) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %58) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %57, ptr noundef @.str, ptr noundef nonnull align 1 dereferenceable(1) %58)
          to label %306 unwind label %324

306:                                              ; preds = %303
  call void @llvm.lifetime.start.p0(i64 32, ptr %59) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %60) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %60) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %59, ptr noundef @__func__._ZN3cgp18triangles_drawable22initialize_data_on_gpuERKNS_8numarrayINS_14numarray_stackIfLi3EEEEES6_S6_S6_RKNS_23opengl_shader_structureERKNS_30opengl_texture_image_structureE, ptr noundef nonnull align 1 dereferenceable(1) %60)
          to label %307 unwind label %328

307:                                              ; preds = %306
  invoke void @_ZN3cgp18check_opengl_errorERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_i(ptr noundef nonnull align 8 dereferenceable(32) %57, ptr noundef nonnull align 8 dereferenceable(32) %59, i32 noundef 93)
          to label %308 unwind label %332

308:                                              ; preds = %307
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %59) #9
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %60) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %60) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %59) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %57) #9
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %58) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %58) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %57) #9
  %309 = load ptr, ptr @glad_glBindVertexArray, align 8, !tbaa !5
  %310 = getelementptr inbounds %"struct.cgp::triangles_drawable", ptr %69, i32 0, i32 6
  %311 = load i32, ptr %310, align 8, !tbaa !9
  call void %309(i32 noundef %311)
  call void @llvm.lifetime.start.p0(i64 32, ptr %61) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %62) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %62) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %61, ptr noundef @.str, ptr noundef nonnull align 1 dereferenceable(1) %62)
          to label %312 unwind label %338

312:                                              ; preds = %308
  call void @llvm.lifetime.start.p0(i64 32, ptr %63) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %64) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %64) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %63, ptr noundef @__func__._ZN3cgp18triangles_drawable22initialize_data_on_gpuERKNS_8numarrayINS_14numarray_stackIfLi3EEEEES6_S6_S6_RKNS_23opengl_shader_structureERKNS_30opengl_texture_image_structureE, ptr noundef nonnull align 1 dereferenceable(1) %64)
          to label %313 unwind label %342

313:                                              ; preds = %312
  invoke void @_ZN3cgp18check_opengl_errorERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_i(ptr noundef nonnull align 8 dereferenceable(32) %61, ptr noundef nonnull align 8 dereferenceable(32) %63, i32 noundef 94)
          to label %314 unwind label %346

314:                                              ; preds = %313
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %63) #9
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %64) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %64) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %63) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %61) #9
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %62) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %62) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %61) #9
  %315 = getelementptr inbounds %"struct.cgp::triangles_drawable", ptr %69, i32 0, i32 2
  call void @_ZN3cgp23opengl_set_vao_locationERKNS_20opengl_vbo_structureEj(ptr noundef nonnull align 4 dereferenceable(28) %315, i32 noundef 0)
  %316 = getelementptr inbounds %"struct.cgp::triangles_drawable", ptr %69, i32 0, i32 3
  call void @_ZN3cgp23opengl_set_vao_locationERKNS_20opengl_vbo_structureEj(ptr noundef nonnull align 4 dereferenceable(28) %316, i32 noundef 1)
  %317 = getelementptr inbounds %"struct.cgp::triangles_drawable", ptr %69, i32 0, i32 4
  call void @_ZN3cgp23opengl_set_vao_locationERKNS_20opengl_vbo_structureEj(ptr noundef nonnull align 4 dereferenceable(28) %317, i32 noundef 2)
  %318 = getelementptr inbounds %"struct.cgp::triangles_drawable", ptr %69, i32 0, i32 5
  call void @_ZN3cgp23opengl_set_vao_locationERKNS_20opengl_vbo_structureEj(ptr noundef nonnull align 4 dereferenceable(28) %318, i32 noundef 3)
  %319 = load ptr, ptr @glad_glBindVertexArray, align 8, !tbaa !5
  call void %319(i32 noundef 0)
  call void @llvm.lifetime.start.p0(i64 32, ptr %65) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %66) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %66) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %65, ptr noundef @.str, ptr noundef nonnull align 1 dereferenceable(1) %66)
          to label %320 unwind label %352

320:                                              ; preds = %314
  call void @llvm.lifetime.start.p0(i64 32, ptr %67) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %68) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %68) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %67, ptr noundef @__func__._ZN3cgp18triangles_drawable22initialize_data_on_gpuERKNS_8numarrayINS_14numarray_stackIfLi3EEEEES6_S6_S6_RKNS_23opengl_shader_structureERKNS_30opengl_texture_image_structureE, ptr noundef nonnull align 1 dereferenceable(1) %68)
          to label %321 unwind label %356

321:                                              ; preds = %320
  invoke void @_ZN3cgp18check_opengl_errorERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_i(ptr noundef nonnull align 8 dereferenceable(32) %65, ptr noundef nonnull align 8 dereferenceable(32) %67, i32 noundef 99)
          to label %322 unwind label %360

322:                                              ; preds = %321
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %67) #9
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %68) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %68) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %67) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %65) #9
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %66) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %66) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %65) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #9
  br label %323

323:                                              ; preds = %322, %105
  ret void

324:                                              ; preds = %303
  %325 = landingpad { ptr, i32 }
          cleanup
  %326 = extractvalue { ptr, i32 } %325, 0
  store ptr %326, ptr %17, align 8
  %327 = extractvalue { ptr, i32 } %325, 1
  store i32 %327, ptr %18, align 4
  br label %337

328:                                              ; preds = %306
  %329 = landingpad { ptr, i32 }
          cleanup
  %330 = extractvalue { ptr, i32 } %329, 0
  store ptr %330, ptr %17, align 8
  %331 = extractvalue { ptr, i32 } %329, 1
  store i32 %331, ptr %18, align 4
  br label %336

332:                                              ; preds = %307
  %333 = landingpad { ptr, i32 }
          cleanup
  %334 = extractvalue { ptr, i32 } %333, 0
  store ptr %334, ptr %17, align 8
  %335 = extractvalue { ptr, i32 } %333, 1
  store i32 %335, ptr %18, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %59) #9
  br label %336

336:                                              ; preds = %332, %328
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %60) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %60) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %59) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %57) #9
  br label %337

337:                                              ; preds = %336, %324
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %58) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %58) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %57) #9
  br label %366

338:                                              ; preds = %308
  %339 = landingpad { ptr, i32 }
          cleanup
  %340 = extractvalue { ptr, i32 } %339, 0
  store ptr %340, ptr %17, align 8
  %341 = extractvalue { ptr, i32 } %339, 1
  store i32 %341, ptr %18, align 4
  br label %351

342:                                              ; preds = %312
  %343 = landingpad { ptr, i32 }
          cleanup
  %344 = extractvalue { ptr, i32 } %343, 0
  store ptr %344, ptr %17, align 8
  %345 = extractvalue { ptr, i32 } %343, 1
  store i32 %345, ptr %18, align 4
  br label %350

346:                                              ; preds = %313
  %347 = landingpad { ptr, i32 }
          cleanup
  %348 = extractvalue { ptr, i32 } %347, 0
  store ptr %348, ptr %17, align 8
  %349 = extractvalue { ptr, i32 } %347, 1
  store i32 %349, ptr %18, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %63) #9
  br label %350

350:                                              ; preds = %346, %342
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %64) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %64) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %63) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %61) #9
  br label %351

351:                                              ; preds = %350, %338
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %62) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %62) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %61) #9
  br label %366

352:                                              ; preds = %314
  %353 = landingpad { ptr, i32 }
          cleanup
  %354 = extractvalue { ptr, i32 } %353, 0
  store ptr %354, ptr %17, align 8
  %355 = extractvalue { ptr, i32 } %353, 1
  store i32 %355, ptr %18, align 4
  br label %365

356:                                              ; preds = %320
  %357 = landingpad { ptr, i32 }
          cleanup
  %358 = extractvalue { ptr, i32 } %357, 0
  store ptr %358, ptr %17, align 8
  %359 = extractvalue { ptr, i32 } %357, 1
  store i32 %359, ptr %18, align 4
  br label %364

360:                                              ; preds = %321
  %361 = landingpad { ptr, i32 }
          cleanup
  %362 = extractvalue { ptr, i32 } %361, 0
  store ptr %362, ptr %17, align 8
  %363 = extractvalue { ptr, i32 } %361, 1
  store i32 %363, ptr %18, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %67) #9
  br label %364

364:                                              ; preds = %360, %356
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %68) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %68) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %67) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %65) #9
  br label %365

365:                                              ; preds = %364, %352
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %66) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %66) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %65) #9
  br label %366

366:                                              ; preds = %365, %351, %337, %299, %273, %247
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #9
  br label %367

367:                                              ; preds = %366, %129, %95
  %368 = load ptr, ptr %17, align 8
  %369 = load i32, ptr %18, align 4
  %370 = insertvalue { ptr, i32 } poison, ptr %368, 0
  %371 = insertvalue { ptr, i32 } %370, i32 %369, 1
  resume { ptr, i32 } %371
}

declare void @_ZN3cgp18check_opengl_errorERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_i(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32), i32 noundef) #1

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

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #3 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 #4 align 2

declare i32 @__gxx_personality_v0(...)

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32)) 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 #3 align 2

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

; Function Attrs: mustprogress uwtable
declare hidden void @_ZN3cgpL28warning_initialize_non_emptyEv() #4

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

declare void @_ZN3cgp12call_warningERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_S7_S7_i(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32), i32 noundef) #1

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

declare void @_ZN3cgp6affineC1Ev(ptr noundef nonnull align 4 dereferenceable(44)) unnamed_addr #1

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #6

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

declare void @_ZN3cgp20opengl_vbo_structure22initialize_data_on_gpuERKNS_8numarrayINS_14numarray_stackIfLi3EEEEEj(ptr noundef nonnull align 4 dereferenceable(28), ptr noundef nonnull align 8 dereferenceable(24), i32 noundef) #1

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

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

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef float @_ZN3cgp4normERKNS_14numarray_stackIfLi3EEE(ptr noundef nonnull align 4 dereferenceable(12)) #7

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(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
declare dso_local noundef nonnull align 4 dereferenceable(12) ptr @_ZN3cgp8numarrayINS_14numarray_stackIfLi3EEEEixEi(ptr noundef nonnull align 8 dereferenceable(24), i32 noundef) #4 align 2

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

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

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

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

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

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

declare void @_ZN3cgp20opengl_vbo_structure22initialize_data_on_gpuERKNS_8numarrayINS_14numarray_stackIfLi2EEEEEj(ptr noundef nonnull align 4 dereferenceable(28), ptr noundef nonnull align 8 dereferenceable(24), i32 noundef) #1

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

declare void @_ZN3cgp23opengl_set_vao_locationERKNS_20opengl_vbo_structureEj(ptr noundef nonnull align 4 dereferenceable(28), i32 noundef) #1

attributes #0 = { mustprogress uwtable "min-legal-vector-width"="64" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { 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 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #6 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #7 = { 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 #8 = { 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 #9 = { 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, !12, i64 136}
!10 = !{!"_ZTSN3cgp18triangles_drawableE", !11, i64 0, !13, i64 4, !14, i64 24, !14, i64 52, !14, i64 80, !14, i64 108, !12, i64 136, !17, i64 140, !23, i64 184, !24, i64 216, !12, i64 252, !28, i64 256}
!11 = !{!"_ZTSN3cgp23opengl_shader_structureE", !12, i64 0}
!12 = !{!"int", !7, i64 0}
!13 = !{!"_ZTSN3cgp30opengl_texture_image_structureE", !12, i64 0, !12, i64 4, !12, i64 8, !12, i64 12, !12, i64 16}
!14 = !{!"_ZTSN3cgp20opengl_vbo_structureE", !15, i64 0, !12, i64 24}
!15 = !{!"_ZTSN3cgp17opengl_gpu_bufferE", !12, i64 0, !12, i64 4, !12, i64 8, !16, i64 12}
!16 = !{!"_ZTSN3cgp25opengl_gpu_buffer_detailsE", !12, i64 0, !12, i64 4, !12, i64 8}
!17 = !{!"_ZTSN3cgp6affineE", !18, i64 0, !22, i64 16, !21, i64 28, !22, i64 32}
!18 = !{!"_ZTSN3cgp18rotation_transformE", !19, i64 0}
!19 = !{!"_ZTSN3cgp10quaternionE", !20, i64 0}
!20 = !{!"_ZTSN3cgp14numarray_stackIfLi4EEE", !21, i64 0, !21, i64 4, !21, i64 8, !21, i64 12}
!21 = !{!"float", !7, i64 0}
!22 = !{!"_ZTSN3cgp14numarray_stackIfLi3EEE", !21, i64 0, !21, i64 4, !21, i64 8}
!23 = !{!"_ZTSN3cgp10affine_rtsE", !18, i64 0, !22, i64 16, !21, i64 28}
!24 = !{!"_ZTSN3cgp28material_mesh_drawable_phongE", !22, i64 0, !21, i64 12, !25, i64 16, !26, i64 32}
!25 = !{!"_ZTSN3cgp16phong_parametersE", !21, i64 0, !21, i64 4, !21, i64 8, !21, i64 12}
!26 = !{!"_ZTSN3cgp27texture_settings_parametersE", !27, i64 0, !27, i64 1, !27, i64 2}
!27 = !{!"bool", !7, i64 0}
!28 = !{!"_ZTSSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3cgp30opengl_texture_image_structureESt4lessIS5_ESaISt4pairIKS5_S7_EEE", !29, i64 0}
!29 = !{!"_ZTSSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N3cgp30opengl_texture_image_structureEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE", !30, i64 0}
!30 = !{!"_ZTSNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N3cgp30opengl_texture_image_structureEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE13_Rb_tree_implISE_Lb1EEE", !31, i64 0, !33, i64 8}
!31 = !{!"_ZTSSt20_Rb_tree_key_compareISt4lessINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEE", !32, i64 0}
!32 = !{!"_ZTSSt4lessINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEE"}
!33 = !{!"_ZTSSt15_Rb_tree_header", !34, i64 0, !36, i64 32}
!34 = !{!"_ZTSSt18_Rb_tree_node_base", !35, i64 0, !6, i64 8, !6, i64 16, !6, i64 24}
!35 = !{!"_ZTSSt14_Rb_tree_color", !7, i64 0}
!36 = !{!"long", !7, i64 0}
!37 = !{!15, !12, i64 4}
!38 = !{i64 0, i64 4, !39}
!39 = !{!12, !12, i64 0}
!40 = !{i64 0, i64 4, !39, i64 4, i64 4, !39, i64 8, i64 4, !39, i64 12, i64 4, !39, i64 16, i64 4, !39}
!41 = !{i64 0, i64 4, !42, i64 4, i64 4, !42, i64 8, i64 4, !42, i64 12, i64 4, !42, i64 16, i64 4, !42, i64 20, i64 4, !42, i64 24, i64 4, !42, i64 28, i64 4, !42, i64 32, i64 1, !43, i64 33, i64 1, !43, i64 34, i64 1, !43}
!42 = !{!21, !21, i64 0}
!43 = !{!27, !27, i64 0}
!44 = !{!10, !12, i64 252}
!45 = !{i64 0, i64 4, !42, i64 4, i64 4, !42, i64 8, i64 4, !42}
!46 = distinct !{!46, !47}
!47 = !{!"llvm.loop.mustprogress"}


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

%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%"class.std::allocator" = type { i8 }
%"struct.cgp::affine" = type { %"struct.cgp::rotation_transform", %"struct.cgp::numarray_stack.0", float, %"struct.cgp::numarray_stack.0" }
%"struct.cgp::rotation_transform" = type { %"struct.cgp::quaternion" }
%"struct.cgp::quaternion" = type { %"struct.cgp::numarray_stack" }
%"struct.cgp::numarray_stack" = type { float, float, float, float }
%"struct.cgp::numarray_stack.0" = type { float, float, float }
%"struct.cgp::material_mesh_drawable_phong" = type <{ %"struct.cgp::numarray_stack.0", float, %"struct.cgp::phong_parameters", %"struct.cgp::texture_settings_parameters", i8 }>
%"struct.cgp::phong_parameters" = type { float, float, float, float }
%"struct.cgp::texture_settings_parameters" = type { i8, i8, i8 }
%"struct.cgp::numarray" = type { %"class.std::vector" }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<cgp::numarray_stack<float, 3>, std::allocator<cgp::numarray_stack<float, 3>>>::_Vector_impl" }
%"struct.std::_Vector_base<cgp::numarray_stack<float, 3>, std::allocator<cgp::numarray_stack<float, 3>>>::_Vector_impl" = type { %"struct.std::_Vector_base<cgp::numarray_stack<float, 3>, std::allocator<cgp::numarray_stack<float, 3>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<cgp::numarray_stack<float, 3>, std::allocator<cgp::numarray_stack<float, 3>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.cgp::numarray.7" = type { %"class.std::vector.8" }
%"class.std::vector.8" = type { %"struct.std::_Vector_base.9" }
%"struct.std::_Vector_base.9" = type { %"struct.std::_Vector_base<cgp::numarray_stack<float, 2>, std::allocator<cgp::numarray_stack<float, 2>>>::_Vector_impl" }
%"struct.std::_Vector_base<cgp::numarray_stack<float, 2>, std::allocator<cgp::numarray_stack<float, 2>>>::_Vector_impl" = type { %"struct.std::_Vector_base<cgp::numarray_stack<float, 2>, std::allocator<cgp::numarray_stack<float, 2>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<cgp::numarray_stack<float, 2>, std::allocator<cgp::numarray_stack<float, 2>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.cgp::numarray_stack.13" = type { float, float }

@.str = external hidden unnamed_addr constant [111 x i8], align 1
@__func__._ZN3cgp18triangles_drawable22initialize_data_on_gpuERKNS_8numarrayINS_14numarray_stackIfLi3EEEEES6_S6_S6_RKNS_23opengl_shader_structureERKNS_30opengl_texture_image_structureE = external hidden unnamed_addr constant [23 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [57 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [1 x i8], align 1
@glad_glGenVertexArrays = external local_unnamed_addr global ptr, align 8
@glad_glBindVertexArray = external local_unnamed_addr global ptr, align 8

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN3cgp18triangles_drawable22initialize_data_on_gpuERKNS_8numarrayINS_14numarray_stackIfLi3EEEEES6_S6_S6_RKNS_23opengl_shader_structureERKNS_30opengl_texture_image_structureE(ptr noundef nonnull align 8 dereferenceable(304) %0, ptr noundef nonnull align 8 dereferenceable(24) %1, ptr noundef nonnull align 8 dereferenceable(24) %2, ptr noundef nonnull align 8 dereferenceable(24) %3, ptr noundef nonnull align 8 dereferenceable(24) %4, ptr nocapture noundef nonnull readonly align 4 dereferenceable(4) %5, ptr nocapture noundef nonnull readonly align 4 dereferenceable(20) %6) local_unnamed_addr #0 align 2 personality ptr @__gxx_personality_v0 {
  %8 = alloca %"class.std::__cxx11::basic_string", align 8
  %9 = alloca %"class.std::allocator", align 1
  %10 = alloca %"class.std::__cxx11::basic_string", align 8
  %11 = alloca %"class.std::allocator", align 1
  %12 = alloca %"class.std::__cxx11::basic_string", align 8
  %13 = alloca %"class.std::allocator", align 1
  %14 = alloca %"class.std::__cxx11::basic_string", align 8
  %15 = alloca %"class.std::allocator", align 1
  %16 = alloca %"class.std::__cxx11::basic_string", align 8
  %17 = alloca %"class.std::allocator", align 1
  %18 = alloca %"class.std::__cxx11::basic_string", align 8
  %19 = alloca %"class.std::allocator", align 1
  %20 = alloca %"struct.cgp::affine", align 4
  %21 = alloca %"struct.cgp::material_mesh_drawable_phong", align 4
  %22 = alloca %"struct.cgp::numarray", align 8
  %23 = alloca %"struct.cgp::numarray_stack.0", align 8
  %24 = alloca %"struct.cgp::numarray_stack.0", align 8
  %25 = alloca %"struct.cgp::numarray_stack.0", align 8
  %26 = alloca %"struct.cgp::numarray_stack.0", align 4
  %27 = alloca i32, align 4
  %28 = alloca i32, align 4
  %29 = alloca i32, align 4
  %30 = alloca %"struct.cgp::numarray", align 8
  %31 = alloca %"struct.cgp::numarray_stack.0", align 4
  %32 = alloca i32, align 4
  %33 = alloca i32, align 4
  %34 = alloca i32, align 4
  %35 = alloca %"struct.cgp::numarray.7", align 8
  %36 = alloca %"struct.cgp::numarray_stack.13", align 4
  %37 = alloca i32, align 4
  %38 = alloca i32, align 4
  %39 = alloca %"class.std::__cxx11::basic_string", align 8
  %40 = alloca %"class.std::allocator", align 1
  %41 = alloca %"class.std::__cxx11::basic_string", align 8
  %42 = alloca %"class.std::allocator", align 1
  %43 = alloca %"class.std::__cxx11::basic_string", align 8
  %44 = alloca %"class.std::allocator", align 1
  %45 = alloca %"class.std::__cxx11::basic_string", align 8
  %46 = alloca %"class.std::allocator", align 1
  %47 = alloca %"class.std::__cxx11::basic_string", align 8
  %48 = alloca %"class.std::allocator", align 1
  %49 = alloca %"class.std::__cxx11::basic_string", align 8
  %50 = alloca %"class.std::allocator", align 1
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %8) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %9) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %9) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %8, ptr noundef nonnull @.str, ptr noundef nonnull align 1 dereferenceable(1) %9)
          to label %51 unwind label %59

51:                                               ; preds = %7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %10) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %11) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %11) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %10, ptr noundef nonnull @__func__._ZN3cgp18triangles_drawable22initialize_data_on_gpuERKNS_8numarrayINS_14numarray_stackIfLi3EEEEES6_S6_S6_RKNS_23opengl_shader_structureERKNS_30opengl_texture_image_structureE, ptr noundef nonnull align 1 dereferenceable(1) %11)
          to label %52 unwind label %61

52:                                               ; preds = %51
  invoke void @_ZN3cgp18check_opengl_errorERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_i(ptr noundef nonnull align 8 dereferenceable(32) %8, ptr noundef nonnull align 8 dereferenceable(32) %10, i32 noundef 21)
          to label %53 unwind label %63

53:                                               ; preds = %52
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %10) #9
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %11) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %11) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %10) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %8) #9
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %9) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %9) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %8) #9
  %54 = getelementptr inbounds i8, ptr %0, i64 136
  %55 = load i32, ptr %54, align 8, !tbaa !5
  %.not = icmp eq i32 %55, 0
  %56 = getelementptr inbounds i8, ptr %0, i64 28
  %57 = load i32, ptr %56, align 4
  %.not73 = icmp eq i32 %57, 0
  %or.cond = select i1 %.not, i1 %.not73, i1 false
  br i1 %or.cond, label %67, label %58

58:                                               ; preds = %53
  call void @_ZN3cgpL28warning_initialize_non_emptyEv()
  br label %67

59:                                               ; preds = %7
  %60 = landingpad { ptr, i32 }
          cleanup
  br label %66

61:                                               ; preds = %51
  %62 = landingpad { ptr, i32 }
          cleanup
  br label %65

63:                                               ; preds = %52
  %64 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %10) #9
  br label %65

65:                                               ; preds = %63, %61
  %.pn = phi { ptr, i32 } [ %64, %63 ], [ %62, %61 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %11) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %11) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %10) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %8) #9
  br label %66

66:                                               ; preds = %65, %59
  %.pn.pn = phi { ptr, i32 } [ %.pn, %65 ], [ %60, %59 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %9) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %9) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %8) #9
  br label %226

67:                                               ; preds = %53, %58
  %68 = call noundef i32 @_ZNK3cgp8numarrayINS_14numarray_stackIfLi3EEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %1)
  %69 = icmp eq i32 %68, 0
  br i1 %69, label %70, label %90

70:                                               ; preds = %67
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %12) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %13) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %13) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %12, ptr noundef nonnull @.str.2, ptr noundef nonnull align 1 dereferenceable(1) %13)
          to label %71 unwind label %76

71:                                               ; preds = %70
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %14) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %15) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %15) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %14, ptr noundef nonnull @.str.3, ptr noundef nonnull align 1 dereferenceable(1) %15)
          to label %72 unwind label %78

72:                                               ; preds = %71
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %16) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %17) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %17) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %16, ptr noundef nonnull @.str, ptr noundef nonnull align 1 dereferenceable(1) %17)
          to label %73 unwind label %80

73:                                               ; preds = %72
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %18) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %19) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %19) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %18, ptr noundef nonnull @__func__._ZN3cgp18triangles_drawable22initialize_data_on_gpuERKNS_8numarrayINS_14numarray_stackIfLi3EEEEES6_S6_S6_RKNS_23opengl_shader_structureERKNS_30opengl_texture_image_structureE, ptr noundef nonnull align 1 dereferenceable(1) %19)
          to label %74 unwind label %82

74:                                               ; preds = %73
  invoke void @_ZN3cgp12call_warningERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_S7_S7_i(ptr noundef nonnull align 8 dereferenceable(32) %12, ptr noundef nonnull align 8 dereferenceable(32) %14, ptr noundef nonnull align 8 dereferenceable(32) %16, ptr noundef nonnull align 8 dereferenceable(32) %18, i32 noundef 28)
          to label %75 unwind label %84

75:                                               ; preds = %74
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %18) #9
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %19) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %19) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %18) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %16) #9
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %17) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %17) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %16) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %14) #9
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %15) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %15) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %14) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %12) #9
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %13) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %13) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %12) #9
  br label %201

76:                                               ; preds = %70
  %77 = landingpad { ptr, i32 }
          cleanup
  br label %89

78:                                               ; preds = %71
  %79 = landingpad { ptr, i32 }
          cleanup
  br label %88

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

82:                                               ; preds = %73
  %83 = landingpad { ptr, i32 }
          cleanup
  br label %86

84:                                               ; preds = %74
  %85 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %18) #9
  br label %86

86:                                               ; preds = %84, %82
  %.pn94 = phi { ptr, i32 } [ %85, %84 ], [ %83, %82 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %19) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %19) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %18) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %16) #9
  br label %87

87:                                               ; preds = %86, %80
  %.pn94.pn = phi { ptr, i32 } [ %.pn94, %86 ], [ %81, %80 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %17) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %17) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %16) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %14) #9
  br label %88

88:                                               ; preds = %87, %78
  %.pn94.pn.pn = phi { ptr, i32 } [ %.pn94.pn, %87 ], [ %79, %78 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %15) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %15) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %14) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %12) #9
  br label %89

89:                                               ; preds = %88, %76
  %.pn94.pn.pn.pn = phi { ptr, i32 } [ %.pn94.pn.pn, %88 ], [ %77, %76 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %13) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %13) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %12) #9
  br label %226

90:                                               ; preds = %67
  %91 = load i32, ptr %5, align 4, !tbaa !36
  store i32 %91, ptr %0, align 8, !tbaa !36
  %92 = getelementptr inbounds i8, ptr %0, i64 4
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(20) %92, ptr noundef nonnull align 4 dereferenceable(20) %6, i64 20, i1 false), !tbaa.struct !37
  call void @llvm.lifetime.start.p0(i64 44, ptr nonnull %20) #9
  call void @_ZN3cgp6affineC1Ev(ptr noundef nonnull align 4 dereferenceable(44) %20)
  %93 = getelementptr inbounds i8, ptr %0, i64 140
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(44) %93, ptr noundef nonnull align 4 dereferenceable(44) %20, i64 44, i1 false)
  call void @llvm.lifetime.end.p0(i64 44, ptr nonnull %20) #9
  call void @llvm.lifetime.start.p0(i64 36, ptr nonnull %21) #9
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 4 dereferenceable(36) %21, i8 0, i64 36, i1 false)
  call void @_ZN3cgp28material_mesh_drawable_phongC2Ev(ptr noundef nonnull align 4 dereferenceable(35) %21)
  %94 = getelementptr inbounds i8, ptr %0, i64 216
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(35) %94, ptr noundef nonnull align 4 dereferenceable(35) %21, i64 35, i1 false), !tbaa.struct !38
  call void @llvm.lifetime.end.p0(i64 36, ptr nonnull %21) #9
  %95 = getelementptr inbounds i8, ptr %0, i64 24
  call void @_ZN3cgp20opengl_vbo_structure22initialize_data_on_gpuERKNS_8numarrayINS_14numarray_stackIfLi3EEEEEj(ptr noundef nonnull align 4 dereferenceable(28) %95, ptr noundef nonnull align 8 dereferenceable(24) %1, i32 noundef 0)
  %96 = call noundef i32 @_ZNK3cgp8numarrayINS_14numarray_stackIfLi3EEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %1)
  %97 = getelementptr inbounds i8, ptr %0, i64 252
  store i32 %96, ptr %97, align 4, !tbaa !41
  %98 = call noundef i32 @_ZNK3cgp8numarrayINS_14numarray_stackIfLi3EEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %1)
  %99 = call noundef i32 @_ZNK3cgp8numarrayINS_14numarray_stackIfLi3EEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %2)
  %100 = icmp slt i32 %99, %98
  br i1 %100, label %101, label %152

101:                                              ; preds = %90
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %22) #9
  call void @_ZN3cgp8numarrayINS_14numarray_stackIfLi3EEEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %22)
  %102 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN3cgp8numarrayINS_14numarray_stackIfLi3EEEE6resizeEi(ptr noundef nonnull align 8 dereferenceable(24) %22, i32 noundef %98)
          to label %.preheader unwind label %104

.preheader:                                       ; preds = %101
  %103 = icmp sgt i32 %98, 2
  br i1 %103, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %.preheader
  %.sroa.28.0..sroa_idx = getelementptr inbounds i8, ptr %23, i64 8
  %.sroa.24.0..sroa_idx = getelementptr inbounds i8, ptr %24, i64 8
  %.sroa.2.0..sroa_idx = getelementptr inbounds i8, ptr %25, i64 8
  br label %106

._crit_edge:                                      ; preds = %145, %.preheader
  call void @_ZN3cgp8numarrayINS_14numarray_stackIfLi3EEEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %22) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %22) #9
  br label %154

104:                                              ; preds = %101
  %105 = landingpad { ptr, i32 }
          cleanup
  br label %151

106:                                              ; preds = %.lr.ph, %145
  %.067101 = phi i32 [ 2, %.lr.ph ], [ %146, %145 ]
  %107 = add nsw i32 %.067101, -2
  %108 = invoke noundef nonnull align 4 dereferenceable(12) ptr @_ZNK3cgp8numarrayINS_14numarray_stackIfLi3EEEEixEi(ptr noundef nonnull align 8 dereferenceable(24) %1, i32 noundef %107)
          to label %109 unwind label %125

109:                                              ; preds = %106
  %110 = add nsw i32 %.067101, -1
  %111 = invoke noundef nonnull align 4 dereferenceable(12) ptr @_ZNK3cgp8numarrayINS_14numarray_stackIfLi3EEEEixEi(ptr noundef nonnull align 8 dereferenceable(24) %1, i32 noundef %110)
          to label %112 unwind label %127

112:                                              ; preds = %109
  %113 = invoke noundef nonnull align 4 dereferenceable(12) ptr @_ZNK3cgp8numarrayINS_14numarray_stackIfLi3EEEEixEi(ptr noundef nonnull align 8 dereferenceable(24) %1, i32 noundef %.067101)
          to label %114 unwind label %129

114:                                              ; preds = %112
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %23) #9
  %115 = invoke { <2 x float>, float } @_ZN3cgpmiERKNS_14numarray_stackIfLi3EEES3_(ptr noundef nonnull align 4 dereferenceable(12) %111, ptr noundef nonnull align 4 dereferenceable(12) %108)
          to label %116 unwind label %131

116:                                              ; preds = %114
  %.fca.0.extract5 = extractvalue { <2 x float>, float } %115, 0
  %.fca.1.extract6 = extractvalue { <2 x float>, float } %115, 1
  store <2 x float> %.fca.0.extract5, ptr %23, align 8
  store float %.fca.1.extract6, ptr %.sroa.28.0..sroa_idx, align 8
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %24) #9
  %117 = invoke { <2 x float>, float } @_ZN3cgpmiERKNS_14numarray_stackIfLi3EEES3_(ptr noundef nonnull align 4 dereferenceable(12) %113, ptr noundef nonnull align 4 dereferenceable(12) %108)
          to label %118 unwind label %133

118:                                              ; preds = %116
  %.fca.0.extract1 = extractvalue { <2 x float>, float } %117, 0
  %.fca.1.extract2 = extractvalue { <2 x float>, float } %117, 1
  store <2 x float> %.fca.0.extract1, ptr %24, align 8
  store float %.fca.1.extract2, ptr %.sroa.24.0..sroa_idx, align 8
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %25) #9
  %119 = invoke { <2 x float>, float } @_ZN3cgp5crossERKNS_14numarray_stackIfLi3EEES3_(ptr noundef nonnull align 4 dereferenceable(12) %23, ptr noundef nonnull align 4 dereferenceable(12) %24)
          to label %120 unwind label %135

120:                                              ; preds = %118
  %.fca.0.extract = extractvalue { <2 x float>, float } %119, 0
  %.fca.1.extract = extractvalue { <2 x float>, float } %119, 1
  store <2 x float> %.fca.0.extract, ptr %25, align 8
  store float %.fca.1.extract, ptr %.sroa.2.0..sroa_idx, align 8
  %121 = invoke noundef float @_ZN3cgp4normERKNS_14numarray_stackIfLi3EEE(ptr noundef nonnull align 4 dereferenceable(12) %25)
          to label %122 unwind label %137

122:                                              ; preds = %120
  %123 = fcmp olt float %121, 0x3F1A36E2E0000000
  br i1 %123, label %124, label %139

124:                                              ; preds = %122
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %26) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %27) #9
  store i32 1, ptr %27, align 4, !tbaa !36
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %28) #9
  store i32 0, ptr %28, align 4, !tbaa !36
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %29) #9
  store i32 0, ptr %29, align 4, !tbaa !36
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %26, ptr noundef nonnull align 4 dereferenceable(4) %27, ptr noundef nonnull align 4 dereferenceable(4) %28, ptr noundef nonnull align 4 dereferenceable(4) %29)
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(12) %25, ptr noundef nonnull align 4 dereferenceable(12) %26, i64 12, i1 false), !tbaa.struct !42
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %29) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %28) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %27) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %26) #9
  br label %139

125:                                              ; preds = %106
  %126 = landingpad { ptr, i32 }
          cleanup
  br label %151

127:                                              ; preds = %109
  %128 = landingpad { ptr, i32 }
          cleanup
  br label %151

129:                                              ; preds = %112
  %130 = landingpad { ptr, i32 }
          cleanup
  br label %151

131:                                              ; preds = %114
  %132 = landingpad { ptr, i32 }
          cleanup
  br label %150

133:                                              ; preds = %116
  %134 = landingpad { ptr, i32 }
          cleanup
  br label %149

135:                                              ; preds = %118
  %136 = landingpad { ptr, i32 }
          cleanup
  br label %148

137:                                              ; preds = %143, %141, %139, %120
  %138 = landingpad { ptr, i32 }
          cleanup
  br label %148

139:                                              ; preds = %124, %122
  %140 = invoke noundef nonnull align 4 dereferenceable(12) ptr @_ZN3cgp8numarrayINS_14numarray_stackIfLi3EEEEixEi(ptr noundef nonnull align 8 dereferenceable(24) %22, i32 noundef %.067101)
          to label %141 unwind label %137

141:                                              ; preds = %139
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %140, ptr noundef nonnull align 8 dereferenceable(12) %25, i64 12, i1 false), !tbaa.struct !42
  %142 = invoke noundef nonnull align 4 dereferenceable(12) ptr @_ZN3cgp8numarrayINS_14numarray_stackIfLi3EEEEixEi(ptr noundef nonnull align 8 dereferenceable(24) %22, i32 noundef %110)
          to label %143 unwind label %137

143:                                              ; preds = %141
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %142, ptr noundef nonnull align 8 dereferenceable(12) %25, i64 12, i1 false), !tbaa.struct !42
  %144 = invoke noundef nonnull align 4 dereferenceable(12) ptr @_ZN3cgp8numarrayINS_14numarray_stackIfLi3EEEEixEi(ptr noundef nonnull align 8 dereferenceable(24) %22, i32 noundef %107)
          to label %145 unwind label %137

145:                                              ; preds = %143
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %144, ptr noundef nonnull align 8 dereferenceable(12) %25, i64 12, i1 false), !tbaa.struct !42
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %25) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %24) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %23) #9
  %146 = add nuw nsw i32 %.067101, 3
  %147 = icmp slt i32 %146, %98
  br i1 %147, label %106, label %._crit_edge, !llvm.loop !43

148:                                              ; preds = %137, %135
  %.pn85 = phi { ptr, i32 } [ %138, %137 ], [ %136, %135 ]
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %25) #9
  br label %149

149:                                              ; preds = %148, %133
  %.pn85.pn = phi { ptr, i32 } [ %.pn85, %148 ], [ %134, %133 ]
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %24) #9
  br label %150

150:                                              ; preds = %149, %131
  %.pn85.pn.pn = phi { ptr, i32 } [ %.pn85.pn, %149 ], [ %132, %131 ]
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %23) #9
  br label %151

151:                                              ; preds = %125, %129, %150, %127, %104
  %.pn85.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %105, %104 ], [ %126, %125 ], [ %128, %127 ], [ %.pn85.pn.pn, %150 ], [ %130, %129 ]
  call void @_ZN3cgp8numarrayINS_14numarray_stackIfLi3EEEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %22) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %22) #9
  br label %226

152:                                              ; preds = %90
  %153 = getelementptr inbounds i8, ptr %0, i64 52
  call void @_ZN3cgp20opengl_vbo_structure22initialize_data_on_gpuERKNS_8numarrayINS_14numarray_stackIfLi3EEEEEj(ptr noundef nonnull align 4 dereferenceable(28) %153, ptr noundef nonnull align 8 dereferenceable(24) %2, i32 noundef 0)
  br label %154

154:                                              ; preds = %152, %._crit_edge
  %155 = call noundef i32 @_ZNK3cgp8numarrayINS_14numarray_stackIfLi3EEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %3)
  %156 = icmp slt i32 %155, %98
  br i1 %156, label %157, label %165

157:                                              ; preds = %154
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %30) #9
  call void @_ZN3cgp8numarrayINS_14numarray_stackIfLi3EEEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %30)
  %158 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN3cgp8numarrayINS_14numarray_stackIfLi3EEEE6resizeEi(ptr noundef nonnull align 8 dereferenceable(24) %30, i32 noundef %98)
          to label %159 unwind label %163

159:                                              ; preds = %157
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %31) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %32) #9
  store i32 1, ptr %32, align 4, !tbaa !36
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %33) #9
  store i32 1, ptr %33, align 4, !tbaa !36
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %34) #9
  store i32 1, ptr %34, align 4, !tbaa !36
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %31, ptr noundef nonnull align 4 dereferenceable(4) %32, ptr noundef nonnull align 4 dereferenceable(4) %33, ptr noundef nonnull align 4 dereferenceable(4) %34)
  %160 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZN3cgp8numarrayINS_14numarray_stackIfLi3EEEE4fillERKS2_(ptr noundef nonnull align 8 dereferenceable(24) %30, ptr noundef nonnull align 4 dereferenceable(12) %31)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %34) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %33) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %32) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %31) #9
  %161 = getelementptr inbounds i8, ptr %0, i64 80
  invoke void @_ZN3cgp20opengl_vbo_structure22initialize_data_on_gpuERKNS_8numarrayINS_14numarray_stackIfLi3EEEEEj(ptr noundef nonnull align 4 dereferenceable(28) %161, ptr noundef nonnull align 8 dereferenceable(24) %30, i32 noundef 0)
          to label %162 unwind label %163

162:                                              ; preds = %159
  call void @_ZN3cgp8numarrayINS_14numarray_stackIfLi3EEEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %30) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %30) #9
  br label %167

163:                                              ; preds = %159, %157
  %164 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3cgp8numarrayINS_14numarray_stackIfLi3EEEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %30) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %30) #9
  br label %226

165:                                              ; preds = %154
  %166 = getelementptr inbounds i8, ptr %0, i64 80
  call void @_ZN3cgp20opengl_vbo_structure22initialize_data_on_gpuERKNS_8numarrayINS_14numarray_stackIfLi3EEEEEj(ptr noundef nonnull align 4 dereferenceable(28) %166, ptr noundef nonnull align 8 dereferenceable(24) %3, i32 noundef 0)
  br label %167

167:                                              ; preds = %165, %162
  %168 = call noundef i32 @_ZNK3cgp8numarrayINS_14numarray_stackIfLi3EEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %4)
  %169 = icmp slt i32 %168, %98
  br i1 %169, label %170, label %182

170:                                              ; preds = %167
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %35) #9
  call void @_ZN3cgp8numarrayINS_14numarray_stackIfLi2EEEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %35)
  %171 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN3cgp8numarrayINS_14numarray_stackIfLi2EEEE6resizeEi(ptr noundef nonnull align 8 dereferenceable(24) %35, i32 noundef %98)
          to label %172 unwind label %177

172:                                              ; preds = %170
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %36) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %37) #9
  store i32 0, ptr %37, align 4, !tbaa !36
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %38) #9
  store i32 0, ptr %38, align 4, !tbaa !36
  call void @_ZN3cgp14numarray_stackIfLi2EEC2IiiEERKT_RKT0_(ptr noundef nonnull align 4 dereferenceable(8) %36, ptr noundef nonnull align 4 dereferenceable(4) %37, ptr noundef nonnull align 4 dereferenceable(4) %38)
  %173 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN3cgp8numarrayINS_14numarray_stackIfLi2EEEE4fillERKS2_(ptr noundef nonnull align 8 dereferenceable(24) %35, ptr noundef nonnull align 4 dereferenceable(8) %36)
          to label %174 unwind label %179

174:                                              ; preds = %172
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %38) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %37) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %36) #9
  %175 = getelementptr inbounds i8, ptr %0, i64 108
  invoke void @_ZN3cgp20opengl_vbo_structure22initialize_data_on_gpuERKNS_8numarrayINS_14numarray_stackIfLi2EEEEEj(ptr noundef nonnull align 4 dereferenceable(28) %175, ptr noundef nonnull align 8 dereferenceable(24) %35, i32 noundef 0)
          to label %176 unwind label %177

176:                                              ; preds = %174
  call void @_ZN3cgp8numarrayINS_14numarray_stackIfLi2EEEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %35) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %35) #9
  br label %184

177:                                              ; preds = %174, %170
  %178 = landingpad { ptr, i32 }
          cleanup
  br label %181

179:                                              ; preds = %172
  %180 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %38) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %37) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %36) #9
  br label %181

181:                                              ; preds = %179, %177
  %.pn74 = phi { ptr, i32 } [ %178, %177 ], [ %180, %179 ]
  call void @_ZN3cgp8numarrayINS_14numarray_stackIfLi2EEEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %35) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %35) #9
  br label %226

182:                                              ; preds = %167
  %183 = getelementptr inbounds i8, ptr %0, i64 108
  call void @_ZN3cgp20opengl_vbo_structure22initialize_data_on_gpuERKNS_8numarrayINS_14numarray_stackIfLi3EEEEEj(ptr noundef nonnull align 4 dereferenceable(28) %183, ptr noundef nonnull align 8 dereferenceable(24) %4, i32 noundef 0)
  br label %184

184:                                              ; preds = %182, %176
  %185 = load ptr, ptr @glad_glGenVertexArrays, align 8, !tbaa !45
  call void %185(i32 noundef 1, ptr noundef nonnull %54)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %39) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %40) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %40) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %39, ptr noundef nonnull @.str, ptr noundef nonnull align 1 dereferenceable(1) %40)
          to label %186 unwind label %202

186:                                              ; preds = %184
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %41) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %42) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %42) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %41, ptr noundef nonnull @__func__._ZN3cgp18triangles_drawable22initialize_data_on_gpuERKNS_8numarrayINS_14numarray_stackIfLi3EEEEES6_S6_S6_RKNS_23opengl_shader_structureERKNS_30opengl_texture_image_structureE, ptr noundef nonnull align 1 dereferenceable(1) %42)
          to label %187 unwind label %204

187:                                              ; preds = %186
  invoke void @_ZN3cgp18check_opengl_errorERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_i(ptr noundef nonnull align 8 dereferenceable(32) %39, ptr noundef nonnull align 8 dereferenceable(32) %41, i32 noundef 93)
          to label %188 unwind label %206

188:                                              ; preds = %187
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %41) #9
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %42) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %42) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %41) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %39) #9
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %40) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %40) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %39) #9
  %189 = load ptr, ptr @glad_glBindVertexArray, align 8, !tbaa !45
  %190 = load i32, ptr %54, align 8, !tbaa !5
  call void %189(i32 noundef %190)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %43) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %44) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %44) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %43, ptr noundef nonnull @.str, ptr noundef nonnull align 1 dereferenceable(1) %44)
          to label %191 unwind label %210

191:                                              ; preds = %188
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %45) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %46) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %46) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %45, ptr noundef nonnull @__func__._ZN3cgp18triangles_drawable22initialize_data_on_gpuERKNS_8numarrayINS_14numarray_stackIfLi3EEEEES6_S6_S6_RKNS_23opengl_shader_structureERKNS_30opengl_texture_image_structureE, ptr noundef nonnull align 1 dereferenceable(1) %46)
          to label %192 unwind label %212

192:                                              ; preds = %191
  invoke void @_ZN3cgp18check_opengl_errorERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_i(ptr noundef nonnull align 8 dereferenceable(32) %43, ptr noundef nonnull align 8 dereferenceable(32) %45, i32 noundef 94)
          to label %193 unwind label %214

193:                                              ; preds = %192
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %45) #9
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %46) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %46) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %45) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %43) #9
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %44) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %44) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %43) #9
  call void @_ZN3cgp23opengl_set_vao_locationERKNS_20opengl_vbo_structureEj(ptr noundef nonnull align 4 dereferenceable(28) %95, i32 noundef 0)
  %194 = getelementptr inbounds i8, ptr %0, i64 52
  call void @_ZN3cgp23opengl_set_vao_locationERKNS_20opengl_vbo_structureEj(ptr noundef nonnull align 4 dereferenceable(28) %194, i32 noundef 1)
  %195 = getelementptr inbounds i8, ptr %0, i64 80
  call void @_ZN3cgp23opengl_set_vao_locationERKNS_20opengl_vbo_structureEj(ptr noundef nonnull align 4 dereferenceable(28) %195, i32 noundef 2)
  %196 = getelementptr inbounds i8, ptr %0, i64 108
  call void @_ZN3cgp23opengl_set_vao_locationERKNS_20opengl_vbo_structureEj(ptr noundef nonnull align 4 dereferenceable(28) %196, i32 noundef 3)
  %197 = load ptr, ptr @glad_glBindVertexArray, align 8, !tbaa !45
  call void %197(i32 noundef 0)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %47) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %48) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %48) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %47, ptr noundef nonnull @.str, ptr noundef nonnull align 1 dereferenceable(1) %48)
          to label %198 unwind label %218

198:                                              ; preds = %193
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %49) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %50) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %50) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %49, ptr noundef nonnull @__func__._ZN3cgp18triangles_drawable22initialize_data_on_gpuERKNS_8numarrayINS_14numarray_stackIfLi3EEEEES6_S6_S6_RKNS_23opengl_shader_structureERKNS_30opengl_texture_image_structureE, ptr noundef nonnull align 1 dereferenceable(1) %50)
          to label %199 unwind label %220

199:                                              ; preds = %198
  invoke void @_ZN3cgp18check_opengl_errorERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_i(ptr noundef nonnull align 8 dereferenceable(32) %47, ptr noundef nonnull align 8 dereferenceable(32) %49, i32 noundef 99)
          to label %200 unwind label %222

200:                                              ; preds = %199
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %49) #9
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %50) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %50) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %49) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %47) #9
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %48) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %48) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %47) #9
  br label %201

201:                                              ; preds = %200, %75
  ret void

202:                                              ; preds = %184
  %203 = landingpad { ptr, i32 }
          cleanup
  br label %209

204:                                              ; preds = %186
  %205 = landingpad { ptr, i32 }
          cleanup
  br label %208

206:                                              ; preds = %187
  %207 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %41) #9
  br label %208

208:                                              ; preds = %206, %204
  %.pn76 = phi { ptr, i32 } [ %207, %206 ], [ %205, %204 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %42) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %42) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %41) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %39) #9
  br label %209

209:                                              ; preds = %208, %202
  %.pn76.pn = phi { ptr, i32 } [ %.pn76, %208 ], [ %203, %202 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %40) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %40) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %39) #9
  br label %226

210:                                              ; preds = %188
  %211 = landingpad { ptr, i32 }
          cleanup
  br label %217

212:                                              ; preds = %191
  %213 = landingpad { ptr, i32 }
          cleanup
  br label %216

214:                                              ; preds = %192
  %215 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %45) #9
  br label %216

216:                                              ; preds = %214, %212
  %.pn79 = phi { ptr, i32 } [ %215, %214 ], [ %213, %212 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %46) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %46) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %45) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %43) #9
  br label %217

217:                                              ; preds = %216, %210
  %.pn79.pn = phi { ptr, i32 } [ %.pn79, %216 ], [ %211, %210 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %44) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %44) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %43) #9
  br label %226

218:                                              ; preds = %193
  %219 = landingpad { ptr, i32 }
          cleanup
  br label %225

220:                                              ; preds = %198
  %221 = landingpad { ptr, i32 }
          cleanup
  br label %224

222:                                              ; preds = %199
  %223 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %49) #9
  br label %224

224:                                              ; preds = %222, %220
  %.pn82 = phi { ptr, i32 } [ %223, %222 ], [ %221, %220 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %50) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %50) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %49) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %47) #9
  br label %225

225:                                              ; preds = %224, %218
  %.pn82.pn = phi { ptr, i32 } [ %.pn82, %224 ], [ %219, %218 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %48) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %48) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %47) #9
  br label %226

226:                                              ; preds = %151, %163, %181, %209, %217, %225, %89, %66
  %.pn94.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn94.pn.pn.pn, %89 ], [ %.pn.pn, %66 ], [ %.pn85.pn.pn.pn.pn.pn.pn, %151 ], [ %.pn82.pn, %225 ], [ %.pn79.pn, %217 ], [ %.pn76.pn, %209 ], [ %.pn74, %181 ], [ %164, %163 ]
  resume { ptr, i32 } %.pn94.pn.pn.pn.pn
}

declare void @_ZN3cgp18check_opengl_errorERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_i(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32), i32 noundef) local_unnamed_addr #1

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

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #3 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 #4 align 2

declare i32 @__gxx_personality_v0(...)

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32)) 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 #3 align 2

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

; Function Attrs: mustprogress uwtable
declare hidden void @_ZN3cgpL28warning_initialize_non_emptyEv() local_unnamed_addr #4

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

declare void @_ZN3cgp12call_warningERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_S7_S7_i(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32), i32 noundef) local_unnamed_addr #1

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

declare void @_ZN3cgp6affineC1Ev(ptr noundef nonnull align 4 dereferenceable(44)) unnamed_addr #1

; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #6

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

declare void @_ZN3cgp20opengl_vbo_structure22initialize_data_on_gpuERKNS_8numarrayINS_14numarray_stackIfLi3EEEEEj(ptr noundef nonnull align 4 dereferenceable(28), ptr noundef nonnull align 8 dereferenceable(24), i32 noundef) local_unnamed_addr #1

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

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

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef float @_ZN3cgp4normERKNS_14numarray_stackIfLi3EEE(ptr noundef nonnull align 4 dereferenceable(12)) local_unnamed_addr #7

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(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
declare dso_local noundef nonnull align 4 dereferenceable(12) ptr @_ZN3cgp8numarrayINS_14numarray_stackIfLi3EEEEixEi(ptr noundef nonnull align 8 dereferenceable(24), i32 noundef) local_unnamed_addr #4 align 2

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

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

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

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

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

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

declare void @_ZN3cgp20opengl_vbo_structure22initialize_data_on_gpuERKNS_8numarrayINS_14numarray_stackIfLi2EEEEEj(ptr noundef nonnull align 4 dereferenceable(28), ptr noundef nonnull align 8 dereferenceable(24), i32 noundef) local_unnamed_addr #1

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

declare void @_ZN3cgp23opengl_set_vao_locationERKNS_20opengl_vbo_structureEj(ptr noundef nonnull align 4 dereferenceable(28), i32 noundef) local_unnamed_addr #1

attributes #0 = { mustprogress uwtable "min-legal-vector-width"="64" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { 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 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #6 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #7 = { 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 #8 = { 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 #9 = { 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, !8, i64 136}
!6 = !{!"_ZTSN3cgp18triangles_drawableE", !7, i64 0, !11, i64 4, !12, i64 24, !12, i64 52, !12, i64 80, !12, i64 108, !8, i64 136, !15, i64 140, !21, i64 184, !22, i64 216, !8, i64 252, !26, i64 256}
!7 = !{!"_ZTSN3cgp23opengl_shader_structureE", !8, i64 0}
!8 = !{!"int", !9, i64 0}
!9 = !{!"omnipotent char", !10, i64 0}
!10 = !{!"Simple C++ TBAA"}
!11 = !{!"_ZTSN3cgp30opengl_texture_image_structureE", !8, i64 0, !8, i64 4, !8, i64 8, !8, i64 12, !8, i64 16}
!12 = !{!"_ZTSN3cgp20opengl_vbo_structureE", !13, i64 0, !8, i64 24}
!13 = !{!"_ZTSN3cgp17opengl_gpu_bufferE", !8, i64 0, !8, i64 4, !8, i64 8, !14, i64 12}
!14 = !{!"_ZTSN3cgp25opengl_gpu_buffer_detailsE", !8, i64 0, !8, i64 4, !8, i64 8}
!15 = !{!"_ZTSN3cgp6affineE", !16, i64 0, !20, i64 16, !19, i64 28, !20, i64 32}
!16 = !{!"_ZTSN3cgp18rotation_transformE", !17, i64 0}
!17 = !{!"_ZTSN3cgp10quaternionE", !18, i64 0}
!18 = !{!"_ZTSN3cgp14numarray_stackIfLi4EEE", !19, i64 0, !19, i64 4, !19, i64 8, !19, i64 12}
!19 = !{!"float", !9, i64 0}
!20 = !{!"_ZTSN3cgp14numarray_stackIfLi3EEE", !19, i64 0, !19, i64 4, !19, i64 8}
!21 = !{!"_ZTSN3cgp10affine_rtsE", !16, i64 0, !20, i64 16, !19, i64 28}
!22 = !{!"_ZTSN3cgp28material_mesh_drawable_phongE", !20, i64 0, !19, i64 12, !23, i64 16, !24, i64 32}
!23 = !{!"_ZTSN3cgp16phong_parametersE", !19, i64 0, !19, i64 4, !19, i64 8, !19, i64 12}
!24 = !{!"_ZTSN3cgp27texture_settings_parametersE", !25, i64 0, !25, i64 1, !25, i64 2}
!25 = !{!"bool", !9, i64 0}
!26 = !{!"_ZTSSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3cgp30opengl_texture_image_structureESt4lessIS5_ESaISt4pairIKS5_S7_EEE", !27, i64 0}
!27 = !{!"_ZTSSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N3cgp30opengl_texture_image_structureEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE", !28, i64 0}
!28 = !{!"_ZTSNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N3cgp30opengl_texture_image_structureEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE13_Rb_tree_implISE_Lb1EEE", !29, i64 0, !31, i64 8}
!29 = !{!"_ZTSSt20_Rb_tree_key_compareISt4lessINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEE", !30, i64 0}
!30 = !{!"_ZTSSt4lessINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEE"}
!31 = !{!"_ZTSSt15_Rb_tree_header", !32, i64 0, !35, i64 32}
!32 = !{!"_ZTSSt18_Rb_tree_node_base", !33, i64 0, !34, i64 8, !34, i64 16, !34, i64 24}
!33 = !{!"_ZTSSt14_Rb_tree_color", !9, i64 0}
!34 = !{!"any pointer", !9, i64 0}
!35 = !{!"long", !9, i64 0}
!36 = !{!8, !8, i64 0}
!37 = !{i64 0, i64 4, !36, i64 4, i64 4, !36, i64 8, i64 4, !36, i64 12, i64 4, !36, i64 16, i64 4, !36}
!38 = !{i64 0, i64 4, !39, i64 4, i64 4, !39, i64 8, i64 4, !39, i64 12, i64 4, !39, i64 16, i64 4, !39, i64 20, i64 4, !39, i64 24, i64 4, !39, i64 28, i64 4, !39, i64 32, i64 1, !40, i64 33, i64 1, !40, i64 34, i64 1, !40}
!39 = !{!19, !19, i64 0}
!40 = !{!25, !25, i64 0}
!41 = !{!6, !8, i64 252}
!42 = !{i64 0, i64 4, !39, i64 4, i64 4, !39, i64 8, i64 4, !39}
!43 = distinct !{!43, !44}
!44 = !{!"llvm.loop.mustprogress"}
!45 = !{!34, !34, i64 0}


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