; LLVM IR from drohmer/cgp :: library/cgp/19_camera_controller/test (test_camera_controller)

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

%"struct.cgp::camera_controller_orbit" = type { %"struct.cgp::camera_controller_generic_base", %"struct.cgp::camera_orbit" }
%"struct.cgp::camera_controller_generic_base" = type { i8, ptr, ptr }
%"struct.cgp::camera_orbit" = type { %"struct.cgp::camera_generic_base", %"struct.cgp::rotation_transform", %"struct.cgp::numarray_stack.0", float }
%"struct.cgp::camera_generic_base" = type { ptr }
%"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 }
%"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::camera_controller_orbit_euler" = type { %"struct.cgp::camera_controller_generic_base", %"struct.cgp::camera_orbit_euler" }
%"struct.cgp::camera_orbit_euler" = type { %"struct.cgp::camera_generic_base", float, float, float, %"struct.cgp::numarray_stack.0", %"struct.cgp::numarray_stack.0", float }
%"struct.cgp::camera_controller_first_person" = type <{ %"struct.cgp::camera_controller_generic_base", %"struct.cgp::camera_first_person", float, float, i8, [7 x i8] }>
%"struct.cgp::camera_first_person" = type <{ %"struct.cgp::camera_generic_base", %"struct.cgp::rotation_transform", %"struct.cgp::numarray_stack.0", [4 x i8] }>
%"struct.cgp::camera_controller_first_person_euler" = type <{ %"struct.cgp::camera_controller_generic_base", %"struct.cgp::camera_first_person_euler", i8, [7 x i8] }>
%"struct.cgp::camera_first_person_euler" = type <{ %"struct.cgp::camera_generic_base", float, float, float, %"struct.cgp::numarray_stack.0", %"struct.cgp::numarray_stack.0", [4 x i8] }>

@.str = external hidden unnamed_addr constant [54 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [1 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [110 x i8], align 1
@__func__._ZN8cgp_test22test_camera_controllerEv = external hidden unnamed_addr constant [23 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [58 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [55 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [59 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [56 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [58 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [69 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [58 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [56 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [73 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [79 x i8], align 1

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN8cgp_test22test_camera_controllerEv() #0 personality ptr @__gxx_personality_v0 {
  %1 = alloca %"struct.cgp::camera_controller_orbit", align 8
  %2 = alloca %"struct.cgp::numarray_stack.0", align 4
  %3 = alloca i32, align 4
  %4 = alloca i32, align 4
  %5 = alloca i32, align 4
  %6 = alloca %"struct.cgp::numarray_stack.0", align 4
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca %"struct.cgp::numarray_stack.0", align 4
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca %"struct.cgp::numarray_stack.0", align 4
  %15 = alloca { <2 x float>, float }, align 8
  %16 = alloca %"struct.cgp::numarray_stack.0", align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca %"class.std::__cxx11::basic_string", align 8
  %21 = alloca %"class.std::allocator", align 1
  %22 = alloca ptr, align 8
  %23 = alloca i32, align 4
  %24 = alloca %"class.std::__cxx11::basic_string", align 8
  %25 = alloca %"class.std::allocator", align 1
  %26 = alloca %"class.std::__cxx11::basic_string", align 8
  %27 = alloca %"class.std::allocator", align 1
  %28 = alloca %"class.std::__cxx11::basic_string", align 8
  %29 = alloca %"class.std::allocator", align 1
  %30 = alloca %"struct.cgp::numarray_stack.0", align 4
  %31 = alloca { <2 x float>, float }, align 8
  %32 = alloca %"struct.cgp::numarray_stack.0", align 4
  %33 = alloca i32, align 4
  %34 = alloca i32, align 4
  %35 = alloca i32, align 4
  %36 = alloca %"class.std::__cxx11::basic_string", align 8
  %37 = alloca %"class.std::allocator", align 1
  %38 = alloca %"class.std::__cxx11::basic_string", align 8
  %39 = alloca %"class.std::allocator", align 1
  %40 = alloca %"class.std::__cxx11::basic_string", align 8
  %41 = alloca %"class.std::allocator", align 1
  %42 = alloca %"class.std::__cxx11::basic_string", align 8
  %43 = alloca %"class.std::allocator", align 1
  %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_stack.0", align 4
  %49 = alloca i32, align 4
  %50 = alloca i32, align 4
  %51 = alloca i32, align 4
  %52 = alloca %"struct.cgp::numarray_stack.0", align 4
  %53 = alloca i32, align 4
  %54 = alloca i32, align 4
  %55 = alloca i32, align 4
  %56 = alloca %"struct.cgp::numarray_stack.0", align 4
  %57 = alloca { <2 x float>, float }, align 8
  %58 = alloca %"struct.cgp::numarray_stack.0", align 4
  %59 = alloca i32, align 4
  %60 = alloca i32, align 4
  %61 = alloca i32, align 4
  %62 = alloca %"class.std::__cxx11::basic_string", align 8
  %63 = alloca %"class.std::allocator", align 1
  %64 = alloca %"class.std::__cxx11::basic_string", align 8
  %65 = alloca %"class.std::allocator", align 1
  %66 = alloca %"class.std::__cxx11::basic_string", align 8
  %67 = alloca %"class.std::allocator", align 1
  %68 = alloca %"class.std::__cxx11::basic_string", align 8
  %69 = alloca %"class.std::allocator", align 1
  %70 = alloca %"struct.cgp::numarray_stack.0", align 4
  %71 = alloca { <2 x float>, float }, align 8
  %72 = alloca %"struct.cgp::numarray_stack.0", align 4
  %73 = alloca i32, align 4
  %74 = alloca i32, align 4
  %75 = alloca i32, align 4
  %76 = alloca %"class.std::__cxx11::basic_string", align 8
  %77 = alloca %"class.std::allocator", align 1
  %78 = alloca %"class.std::__cxx11::basic_string", align 8
  %79 = alloca %"class.std::allocator", align 1
  %80 = alloca %"class.std::__cxx11::basic_string", align 8
  %81 = alloca %"class.std::allocator", align 1
  %82 = alloca %"class.std::__cxx11::basic_string", align 8
  %83 = alloca %"class.std::allocator", align 1
  %84 = alloca %"struct.cgp::numarray_stack.0", align 4
  %85 = alloca i32, align 4
  %86 = alloca i32, align 4
  %87 = alloca i32, align 4
  %88 = alloca %"struct.cgp::numarray_stack.0", align 4
  %89 = alloca i32, align 4
  %90 = alloca i32, align 4
  %91 = alloca i32, align 4
  %92 = alloca %"struct.cgp::numarray_stack.0", align 4
  %93 = alloca i32, align 4
  %94 = alloca i32, align 4
  %95 = alloca i32, align 4
  %96 = alloca %"struct.cgp::numarray_stack.0", align 4
  %97 = alloca { <2 x float>, float }, align 8
  %98 = alloca %"struct.cgp::numarray_stack.0", align 4
  %99 = alloca i32, align 4
  %100 = alloca i32, align 4
  %101 = alloca i32, align 4
  %102 = alloca %"class.std::__cxx11::basic_string", align 8
  %103 = alloca %"class.std::allocator", align 1
  %104 = alloca %"class.std::__cxx11::basic_string", align 8
  %105 = alloca %"class.std::allocator", align 1
  %106 = alloca %"class.std::__cxx11::basic_string", align 8
  %107 = alloca %"class.std::allocator", align 1
  %108 = alloca %"class.std::__cxx11::basic_string", align 8
  %109 = alloca %"class.std::allocator", align 1
  %110 = alloca %"struct.cgp::numarray_stack.0", align 4
  %111 = alloca { <2 x float>, float }, align 8
  %112 = alloca %"struct.cgp::numarray_stack.0", align 4
  %113 = alloca i32, align 4
  %114 = alloca i32, align 4
  %115 = alloca i32, align 4
  %116 = alloca %"class.std::__cxx11::basic_string", align 8
  %117 = alloca %"class.std::allocator", align 1
  %118 = alloca %"class.std::__cxx11::basic_string", align 8
  %119 = alloca %"class.std::allocator", align 1
  %120 = alloca %"class.std::__cxx11::basic_string", align 8
  %121 = alloca %"class.std::allocator", align 1
  %122 = alloca %"class.std::__cxx11::basic_string", align 8
  %123 = alloca %"class.std::allocator", align 1
  %124 = alloca float, align 4
  %125 = alloca %"struct.cgp::numarray_stack.0", align 4
  %126 = alloca i32, align 4
  %127 = alloca i32, align 4
  %128 = alloca i32, align 4
  %129 = alloca %"struct.cgp::numarray_stack.0", align 4
  %130 = alloca i32, align 4
  %131 = alloca i32, align 4
  %132 = alloca i32, align 4
  %133 = alloca %"struct.cgp::numarray_stack.0", align 4
  %134 = alloca i32, align 4
  %135 = alloca i32, align 4
  %136 = alloca i32, align 4
  %137 = alloca %"struct.cgp::numarray_stack.0", align 4
  %138 = alloca { <2 x float>, float }, align 8
  %139 = alloca %"struct.cgp::numarray_stack.0", align 4
  %140 = alloca float, align 4
  %141 = alloca float, align 4
  %142 = alloca i32, align 4
  %143 = alloca %"class.std::__cxx11::basic_string", align 8
  %144 = alloca %"class.std::allocator", align 1
  %145 = alloca %"class.std::__cxx11::basic_string", align 8
  %146 = alloca %"class.std::allocator", align 1
  %147 = alloca %"class.std::__cxx11::basic_string", align 8
  %148 = alloca %"class.std::allocator", align 1
  %149 = alloca %"class.std::__cxx11::basic_string", align 8
  %150 = alloca %"class.std::allocator", align 1
  %151 = alloca %"struct.cgp::numarray_stack.0", align 4
  %152 = alloca { <2 x float>, float }, align 8
  %153 = alloca %"struct.cgp::numarray_stack.0", align 4
  %154 = alloca i32, align 4
  %155 = alloca i32, align 4
  %156 = alloca i32, align 4
  %157 = alloca %"class.std::__cxx11::basic_string", align 8
  %158 = alloca %"class.std::allocator", align 1
  %159 = alloca %"class.std::__cxx11::basic_string", align 8
  %160 = alloca %"class.std::allocator", align 1
  %161 = alloca %"class.std::__cxx11::basic_string", align 8
  %162 = alloca %"class.std::allocator", align 1
  %163 = alloca %"class.std::__cxx11::basic_string", align 8
  %164 = alloca %"class.std::allocator", align 1
  %165 = alloca %"struct.cgp::camera_controller_orbit_euler", align 8
  %166 = alloca %"struct.cgp::numarray_stack.0", align 4
  %167 = alloca i32, align 4
  %168 = alloca i32, align 4
  %169 = alloca i32, align 4
  %170 = alloca %"struct.cgp::numarray_stack.0", align 4
  %171 = alloca i32, align 4
  %172 = alloca i32, align 4
  %173 = alloca i32, align 4
  %174 = alloca %"struct.cgp::numarray_stack.0", align 4
  %175 = alloca i32, align 4
  %176 = alloca i32, align 4
  %177 = alloca i32, align 4
  %178 = alloca %"struct.cgp::numarray_stack.0", align 4
  %179 = alloca { <2 x float>, float }, align 8
  %180 = alloca %"struct.cgp::numarray_stack.0", align 4
  %181 = alloca i32, align 4
  %182 = alloca i32, align 4
  %183 = alloca i32, align 4
  %184 = alloca %"class.std::__cxx11::basic_string", align 8
  %185 = alloca %"class.std::allocator", align 1
  %186 = alloca %"class.std::__cxx11::basic_string", align 8
  %187 = alloca %"class.std::allocator", align 1
  %188 = alloca %"class.std::__cxx11::basic_string", align 8
  %189 = alloca %"class.std::allocator", align 1
  %190 = alloca %"class.std::__cxx11::basic_string", align 8
  %191 = alloca %"class.std::allocator", align 1
  %192 = alloca %"struct.cgp::numarray_stack.0", align 4
  %193 = alloca { <2 x float>, float }, align 8
  %194 = alloca %"struct.cgp::numarray_stack.0", align 4
  %195 = alloca i32, align 4
  %196 = alloca i32, align 4
  %197 = alloca i32, align 4
  %198 = alloca %"class.std::__cxx11::basic_string", align 8
  %199 = alloca %"class.std::allocator", align 1
  %200 = alloca %"class.std::__cxx11::basic_string", align 8
  %201 = alloca %"class.std::allocator", align 1
  %202 = alloca %"class.std::__cxx11::basic_string", align 8
  %203 = alloca %"class.std::allocator", align 1
  %204 = alloca %"class.std::__cxx11::basic_string", align 8
  %205 = alloca %"class.std::allocator", align 1
  %206 = alloca %"struct.cgp::numarray_stack.0", align 4
  %207 = alloca i32, align 4
  %208 = alloca i32, align 4
  %209 = alloca i32, align 4
  %210 = alloca %"struct.cgp::numarray_stack.0", align 4
  %211 = alloca i32, align 4
  %212 = alloca i32, align 4
  %213 = alloca i32, align 4
  %214 = alloca %"struct.cgp::numarray_stack.0", align 4
  %215 = alloca i32, align 4
  %216 = alloca i32, align 4
  %217 = alloca i32, align 4
  %218 = alloca %"struct.cgp::numarray_stack.0", align 4
  %219 = alloca { <2 x float>, float }, align 8
  %220 = alloca %"struct.cgp::numarray_stack.0", align 4
  %221 = alloca i32, align 4
  %222 = alloca i32, align 4
  %223 = alloca i32, align 4
  %224 = alloca %"class.std::__cxx11::basic_string", align 8
  %225 = alloca %"class.std::allocator", align 1
  %226 = alloca %"class.std::__cxx11::basic_string", align 8
  %227 = alloca %"class.std::allocator", align 1
  %228 = alloca %"class.std::__cxx11::basic_string", align 8
  %229 = alloca %"class.std::allocator", align 1
  %230 = alloca %"class.std::__cxx11::basic_string", align 8
  %231 = alloca %"class.std::allocator", align 1
  %232 = alloca %"struct.cgp::numarray_stack.0", align 4
  %233 = alloca { <2 x float>, float }, align 8
  %234 = alloca %"struct.cgp::numarray_stack.0", align 4
  %235 = alloca i32, align 4
  %236 = alloca i32, align 4
  %237 = alloca i32, align 4
  %238 = alloca %"class.std::__cxx11::basic_string", align 8
  %239 = alloca %"class.std::allocator", align 1
  %240 = alloca %"class.std::__cxx11::basic_string", align 8
  %241 = alloca %"class.std::allocator", align 1
  %242 = alloca %"class.std::__cxx11::basic_string", align 8
  %243 = alloca %"class.std::allocator", align 1
  %244 = alloca %"class.std::__cxx11::basic_string", align 8
  %245 = alloca %"class.std::allocator", align 1
  %246 = alloca %"struct.cgp::numarray_stack.0", align 4
  %247 = alloca i32, align 4
  %248 = alloca i32, align 4
  %249 = alloca i32, align 4
  %250 = alloca %"struct.cgp::numarray_stack.0", align 4
  %251 = alloca i32, align 4
  %252 = alloca i32, align 4
  %253 = alloca i32, align 4
  %254 = alloca %"struct.cgp::numarray_stack.0", align 4
  %255 = alloca i32, align 4
  %256 = alloca i32, align 4
  %257 = alloca i32, align 4
  %258 = alloca %"struct.cgp::numarray_stack.0", align 4
  %259 = alloca { <2 x float>, float }, align 8
  %260 = alloca %"struct.cgp::numarray_stack.0", align 4
  %261 = alloca i32, align 4
  %262 = alloca i32, align 4
  %263 = alloca i32, align 4
  %264 = alloca %"class.std::__cxx11::basic_string", align 8
  %265 = alloca %"class.std::allocator", align 1
  %266 = alloca %"class.std::__cxx11::basic_string", align 8
  %267 = alloca %"class.std::allocator", align 1
  %268 = alloca %"class.std::__cxx11::basic_string", align 8
  %269 = alloca %"class.std::allocator", align 1
  %270 = alloca %"class.std::__cxx11::basic_string", align 8
  %271 = alloca %"class.std::allocator", align 1
  %272 = alloca %"struct.cgp::numarray_stack.0", align 4
  %273 = alloca { <2 x float>, float }, align 8
  %274 = alloca %"struct.cgp::numarray_stack.0", align 4
  %275 = alloca i32, align 4
  %276 = alloca i32, align 4
  %277 = alloca i32, align 4
  %278 = alloca %"class.std::__cxx11::basic_string", align 8
  %279 = alloca %"class.std::allocator", align 1
  %280 = alloca %"class.std::__cxx11::basic_string", align 8
  %281 = alloca %"class.std::allocator", align 1
  %282 = alloca %"class.std::__cxx11::basic_string", align 8
  %283 = alloca %"class.std::allocator", align 1
  %284 = alloca %"class.std::__cxx11::basic_string", align 8
  %285 = alloca %"class.std::allocator", align 1
  %286 = alloca float, align 4
  %287 = alloca %"struct.cgp::numarray_stack.0", align 4
  %288 = alloca i32, align 4
  %289 = alloca i32, align 4
  %290 = alloca i32, align 4
  %291 = alloca %"struct.cgp::numarray_stack.0", align 4
  %292 = alloca i32, align 4
  %293 = alloca i32, align 4
  %294 = alloca i32, align 4
  %295 = alloca %"struct.cgp::numarray_stack.0", align 4
  %296 = alloca i32, align 4
  %297 = alloca i32, align 4
  %298 = alloca i32, align 4
  %299 = alloca %"struct.cgp::numarray_stack.0", align 4
  %300 = alloca { <2 x float>, float }, align 8
  %301 = alloca %"struct.cgp::numarray_stack.0", align 4
  %302 = alloca float, align 4
  %303 = alloca float, align 4
  %304 = alloca i32, align 4
  %305 = alloca %"class.std::__cxx11::basic_string", align 8
  %306 = alloca %"class.std::allocator", align 1
  %307 = alloca %"class.std::__cxx11::basic_string", align 8
  %308 = alloca %"class.std::allocator", align 1
  %309 = alloca %"class.std::__cxx11::basic_string", align 8
  %310 = alloca %"class.std::allocator", align 1
  %311 = alloca %"class.std::__cxx11::basic_string", align 8
  %312 = alloca %"class.std::allocator", align 1
  %313 = alloca %"struct.cgp::numarray_stack.0", align 4
  %314 = alloca { <2 x float>, float }, align 8
  %315 = alloca %"struct.cgp::numarray_stack.0", align 4
  %316 = alloca i32, align 4
  %317 = alloca i32, align 4
  %318 = alloca i32, align 4
  %319 = alloca %"class.std::__cxx11::basic_string", align 8
  %320 = alloca %"class.std::allocator", align 1
  %321 = alloca %"class.std::__cxx11::basic_string", align 8
  %322 = alloca %"class.std::allocator", align 1
  %323 = alloca %"class.std::__cxx11::basic_string", align 8
  %324 = alloca %"class.std::allocator", align 1
  %325 = alloca %"class.std::__cxx11::basic_string", align 8
  %326 = alloca %"class.std::allocator", align 1
  %327 = alloca %"struct.cgp::camera_controller_first_person", align 8
  %328 = alloca %"struct.cgp::numarray_stack.0", align 4
  %329 = alloca i32, align 4
  %330 = alloca i32, align 4
  %331 = alloca i32, align 4
  %332 = alloca %"struct.cgp::numarray_stack.0", align 4
  %333 = alloca i32, align 4
  %334 = alloca i32, align 4
  %335 = alloca i32, align 4
  %336 = alloca %"struct.cgp::numarray_stack.0", align 4
  %337 = alloca i32, align 4
  %338 = alloca i32, align 4
  %339 = alloca i32, align 4
  %340 = alloca %"struct.cgp::numarray_stack.0", align 4
  %341 = alloca { <2 x float>, float }, align 8
  %342 = alloca %"struct.cgp::numarray_stack.0", align 4
  %343 = alloca i32, align 4
  %344 = alloca i32, align 4
  %345 = alloca i32, align 4
  %346 = alloca %"class.std::__cxx11::basic_string", align 8
  %347 = alloca %"class.std::allocator", align 1
  %348 = alloca %"class.std::__cxx11::basic_string", align 8
  %349 = alloca %"class.std::allocator", align 1
  %350 = alloca %"class.std::__cxx11::basic_string", align 8
  %351 = alloca %"class.std::allocator", align 1
  %352 = alloca %"class.std::__cxx11::basic_string", align 8
  %353 = alloca %"class.std::allocator", align 1
  %354 = alloca %"struct.cgp::numarray_stack.0", align 4
  %355 = alloca { <2 x float>, float }, align 8
  %356 = alloca %"struct.cgp::numarray_stack.0", align 4
  %357 = alloca i32, align 4
  %358 = alloca i32, align 4
  %359 = alloca i32, align 4
  %360 = alloca %"class.std::__cxx11::basic_string", align 8
  %361 = alloca %"class.std::allocator", align 1
  %362 = alloca %"class.std::__cxx11::basic_string", align 8
  %363 = alloca %"class.std::allocator", align 1
  %364 = alloca %"class.std::__cxx11::basic_string", align 8
  %365 = alloca %"class.std::allocator", align 1
  %366 = alloca %"class.std::__cxx11::basic_string", align 8
  %367 = alloca %"class.std::allocator", align 1
  %368 = alloca %"struct.cgp::numarray_stack.0", align 4
  %369 = alloca i32, align 4
  %370 = alloca i32, align 4
  %371 = alloca i32, align 4
  %372 = alloca %"struct.cgp::numarray_stack.0", align 4
  %373 = alloca i32, align 4
  %374 = alloca i32, align 4
  %375 = alloca i32, align 4
  %376 = alloca %"struct.cgp::numarray_stack.0", align 4
  %377 = alloca i32, align 4
  %378 = alloca i32, align 4
  %379 = alloca i32, align 4
  %380 = alloca %"struct.cgp::numarray_stack.0", align 4
  %381 = alloca { <2 x float>, float }, align 8
  %382 = alloca %"struct.cgp::numarray_stack.0", align 4
  %383 = alloca i32, align 4
  %384 = alloca i32, align 4
  %385 = alloca i32, align 4
  %386 = alloca %"class.std::__cxx11::basic_string", align 8
  %387 = alloca %"class.std::allocator", align 1
  %388 = alloca %"class.std::__cxx11::basic_string", align 8
  %389 = alloca %"class.std::allocator", align 1
  %390 = alloca %"class.std::__cxx11::basic_string", align 8
  %391 = alloca %"class.std::allocator", align 1
  %392 = alloca %"class.std::__cxx11::basic_string", align 8
  %393 = alloca %"class.std::allocator", align 1
  %394 = alloca %"struct.cgp::numarray_stack.0", align 4
  %395 = alloca { <2 x float>, float }, align 8
  %396 = alloca %"struct.cgp::numarray_stack.0", align 4
  %397 = alloca i32, align 4
  %398 = alloca i32, align 4
  %399 = alloca i32, align 4
  %400 = alloca %"class.std::__cxx11::basic_string", align 8
  %401 = alloca %"class.std::allocator", align 1
  %402 = alloca %"class.std::__cxx11::basic_string", align 8
  %403 = alloca %"class.std::allocator", align 1
  %404 = alloca %"class.std::__cxx11::basic_string", align 8
  %405 = alloca %"class.std::allocator", align 1
  %406 = alloca %"class.std::__cxx11::basic_string", align 8
  %407 = alloca %"class.std::allocator", align 1
  %408 = alloca %"struct.cgp::numarray_stack.0", align 4
  %409 = alloca i32, align 4
  %410 = alloca i32, align 4
  %411 = alloca i32, align 4
  %412 = alloca %"struct.cgp::numarray_stack.0", align 4
  %413 = alloca i32, align 4
  %414 = alloca i32, align 4
  %415 = alloca i32, align 4
  %416 = alloca %"struct.cgp::numarray_stack.0", align 4
  %417 = alloca i32, align 4
  %418 = alloca i32, align 4
  %419 = alloca i32, align 4
  %420 = alloca %"struct.cgp::numarray_stack.0", align 4
  %421 = alloca { <2 x float>, float }, align 8
  %422 = alloca %"struct.cgp::numarray_stack.0", align 4
  %423 = alloca i32, align 4
  %424 = alloca i32, align 4
  %425 = alloca i32, align 4
  %426 = alloca %"class.std::__cxx11::basic_string", align 8
  %427 = alloca %"class.std::allocator", align 1
  %428 = alloca %"class.std::__cxx11::basic_string", align 8
  %429 = alloca %"class.std::allocator", align 1
  %430 = alloca %"class.std::__cxx11::basic_string", align 8
  %431 = alloca %"class.std::allocator", align 1
  %432 = alloca %"class.std::__cxx11::basic_string", align 8
  %433 = alloca %"class.std::allocator", align 1
  %434 = alloca %"struct.cgp::numarray_stack.0", align 4
  %435 = alloca { <2 x float>, float }, align 8
  %436 = alloca %"struct.cgp::numarray_stack.0", align 4
  %437 = alloca i32, align 4
  %438 = alloca i32, align 4
  %439 = alloca i32, align 4
  %440 = alloca %"class.std::__cxx11::basic_string", align 8
  %441 = alloca %"class.std::allocator", align 1
  %442 = alloca %"class.std::__cxx11::basic_string", align 8
  %443 = alloca %"class.std::allocator", align 1
  %444 = alloca %"class.std::__cxx11::basic_string", align 8
  %445 = alloca %"class.std::allocator", align 1
  %446 = alloca %"class.std::__cxx11::basic_string", align 8
  %447 = alloca %"class.std::allocator", align 1
  %448 = alloca float, align 4
  %449 = alloca %"struct.cgp::numarray_stack.0", align 4
  %450 = alloca i32, align 4
  %451 = alloca i32, align 4
  %452 = alloca i32, align 4
  %453 = alloca %"struct.cgp::numarray_stack.0", align 4
  %454 = alloca i32, align 4
  %455 = alloca i32, align 4
  %456 = alloca i32, align 4
  %457 = alloca %"struct.cgp::numarray_stack.0", align 4
  %458 = alloca i32, align 4
  %459 = alloca i32, align 4
  %460 = alloca i32, align 4
  %461 = alloca %"struct.cgp::numarray_stack.0", align 4
  %462 = alloca { <2 x float>, float }, align 8
  %463 = alloca %"struct.cgp::numarray_stack.0", align 4
  %464 = alloca float, align 4
  %465 = alloca float, align 4
  %466 = alloca i32, align 4
  %467 = alloca %"class.std::__cxx11::basic_string", align 8
  %468 = alloca %"class.std::allocator", align 1
  %469 = alloca %"class.std::__cxx11::basic_string", align 8
  %470 = alloca %"class.std::allocator", align 1
  %471 = alloca %"class.std::__cxx11::basic_string", align 8
  %472 = alloca %"class.std::allocator", align 1
  %473 = alloca %"class.std::__cxx11::basic_string", align 8
  %474 = alloca %"class.std::allocator", align 1
  %475 = alloca %"struct.cgp::numarray_stack.0", align 4
  %476 = alloca { <2 x float>, float }, align 8
  %477 = alloca %"struct.cgp::numarray_stack.0", align 4
  %478 = alloca i32, align 4
  %479 = alloca i32, align 4
  %480 = alloca i32, align 4
  %481 = alloca %"class.std::__cxx11::basic_string", align 8
  %482 = alloca %"class.std::allocator", align 1
  %483 = alloca %"class.std::__cxx11::basic_string", align 8
  %484 = alloca %"class.std::allocator", align 1
  %485 = alloca %"class.std::__cxx11::basic_string", align 8
  %486 = alloca %"class.std::allocator", align 1
  %487 = alloca %"class.std::__cxx11::basic_string", align 8
  %488 = alloca %"class.std::allocator", align 1
  %489 = alloca %"struct.cgp::camera_controller_first_person_euler", align 8
  %490 = alloca %"struct.cgp::numarray_stack.0", align 4
  %491 = alloca i32, align 4
  %492 = alloca i32, align 4
  %493 = alloca i32, align 4
  %494 = alloca %"struct.cgp::numarray_stack.0", align 4
  %495 = alloca i32, align 4
  %496 = alloca i32, align 4
  %497 = alloca i32, align 4
  %498 = alloca %"struct.cgp::numarray_stack.0", align 4
  %499 = alloca i32, align 4
  %500 = alloca i32, align 4
  %501 = alloca i32, align 4
  %502 = alloca %"struct.cgp::numarray_stack.0", align 4
  %503 = alloca { <2 x float>, float }, align 8
  %504 = alloca %"struct.cgp::numarray_stack.0", align 4
  %505 = alloca i32, align 4
  %506 = alloca i32, align 4
  %507 = alloca i32, align 4
  %508 = alloca %"class.std::__cxx11::basic_string", align 8
  %509 = alloca %"class.std::allocator", align 1
  %510 = alloca %"class.std::__cxx11::basic_string", align 8
  %511 = alloca %"class.std::allocator", align 1
  %512 = alloca %"class.std::__cxx11::basic_string", align 8
  %513 = alloca %"class.std::allocator", align 1
  %514 = alloca %"class.std::__cxx11::basic_string", align 8
  %515 = alloca %"class.std::allocator", align 1
  %516 = alloca %"struct.cgp::numarray_stack.0", align 4
  %517 = alloca { <2 x float>, float }, align 8
  %518 = alloca %"struct.cgp::numarray_stack.0", align 4
  %519 = alloca i32, align 4
  %520 = alloca i32, align 4
  %521 = alloca i32, align 4
  %522 = alloca %"class.std::__cxx11::basic_string", align 8
  %523 = alloca %"class.std::allocator", align 1
  %524 = alloca %"class.std::__cxx11::basic_string", align 8
  %525 = alloca %"class.std::allocator", align 1
  %526 = alloca %"class.std::__cxx11::basic_string", align 8
  %527 = alloca %"class.std::allocator", align 1
  %528 = alloca %"class.std::__cxx11::basic_string", align 8
  %529 = alloca %"class.std::allocator", align 1
  %530 = alloca %"struct.cgp::numarray_stack.0", align 4
  %531 = alloca i32, align 4
  %532 = alloca i32, align 4
  %533 = alloca i32, align 4
  %534 = alloca %"struct.cgp::numarray_stack.0", align 4
  %535 = alloca i32, align 4
  %536 = alloca i32, align 4
  %537 = alloca i32, align 4
  %538 = alloca %"struct.cgp::numarray_stack.0", align 4
  %539 = alloca i32, align 4
  %540 = alloca i32, align 4
  %541 = alloca i32, align 4
  %542 = alloca %"struct.cgp::numarray_stack.0", align 4
  %543 = alloca { <2 x float>, float }, align 8
  %544 = alloca %"struct.cgp::numarray_stack.0", align 4
  %545 = alloca i32, align 4
  %546 = alloca i32, align 4
  %547 = alloca i32, align 4
  %548 = alloca %"class.std::__cxx11::basic_string", align 8
  %549 = alloca %"class.std::allocator", align 1
  %550 = alloca %"class.std::__cxx11::basic_string", align 8
  %551 = alloca %"class.std::allocator", align 1
  %552 = alloca %"class.std::__cxx11::basic_string", align 8
  %553 = alloca %"class.std::allocator", align 1
  %554 = alloca %"class.std::__cxx11::basic_string", align 8
  %555 = alloca %"class.std::allocator", align 1
  %556 = alloca %"struct.cgp::numarray_stack.0", align 4
  %557 = alloca { <2 x float>, float }, align 8
  %558 = alloca %"struct.cgp::numarray_stack.0", align 4
  %559 = alloca i32, align 4
  %560 = alloca i32, align 4
  %561 = alloca i32, align 4
  %562 = alloca %"class.std::__cxx11::basic_string", align 8
  %563 = alloca %"class.std::allocator", align 1
  %564 = alloca %"class.std::__cxx11::basic_string", align 8
  %565 = alloca %"class.std::allocator", align 1
  %566 = alloca %"class.std::__cxx11::basic_string", align 8
  %567 = alloca %"class.std::allocator", align 1
  %568 = alloca %"class.std::__cxx11::basic_string", align 8
  %569 = alloca %"class.std::allocator", align 1
  %570 = alloca %"struct.cgp::numarray_stack.0", align 4
  %571 = alloca i32, align 4
  %572 = alloca i32, align 4
  %573 = alloca i32, align 4
  %574 = alloca %"struct.cgp::numarray_stack.0", align 4
  %575 = alloca i32, align 4
  %576 = alloca i32, align 4
  %577 = alloca i32, align 4
  %578 = alloca %"struct.cgp::numarray_stack.0", align 4
  %579 = alloca i32, align 4
  %580 = alloca i32, align 4
  %581 = alloca i32, align 4
  %582 = alloca %"struct.cgp::numarray_stack.0", align 4
  %583 = alloca { <2 x float>, float }, align 8
  %584 = alloca %"struct.cgp::numarray_stack.0", align 4
  %585 = alloca i32, align 4
  %586 = alloca i32, align 4
  %587 = alloca i32, align 4
  %588 = alloca %"class.std::__cxx11::basic_string", align 8
  %589 = alloca %"class.std::allocator", align 1
  %590 = alloca %"class.std::__cxx11::basic_string", align 8
  %591 = alloca %"class.std::allocator", align 1
  %592 = alloca %"class.std::__cxx11::basic_string", align 8
  %593 = alloca %"class.std::allocator", align 1
  %594 = alloca %"class.std::__cxx11::basic_string", align 8
  %595 = alloca %"class.std::allocator", align 1
  %596 = alloca %"struct.cgp::numarray_stack.0", align 4
  %597 = alloca { <2 x float>, float }, align 8
  %598 = alloca %"struct.cgp::numarray_stack.0", align 4
  %599 = alloca i32, align 4
  %600 = alloca i32, align 4
  %601 = alloca i32, align 4
  %602 = alloca %"class.std::__cxx11::basic_string", align 8
  %603 = alloca %"class.std::allocator", align 1
  %604 = alloca %"class.std::__cxx11::basic_string", align 8
  %605 = alloca %"class.std::allocator", align 1
  %606 = alloca %"class.std::__cxx11::basic_string", align 8
  %607 = alloca %"class.std::allocator", align 1
  %608 = alloca %"class.std::__cxx11::basic_string", align 8
  %609 = alloca %"class.std::allocator", align 1
  %610 = alloca float, align 4
  %611 = alloca %"struct.cgp::numarray_stack.0", align 4
  %612 = alloca i32, align 4
  %613 = alloca i32, align 4
  %614 = alloca i32, align 4
  %615 = alloca %"struct.cgp::numarray_stack.0", align 4
  %616 = alloca i32, align 4
  %617 = alloca i32, align 4
  %618 = alloca i32, align 4
  %619 = alloca %"struct.cgp::numarray_stack.0", align 4
  %620 = alloca i32, align 4
  %621 = alloca i32, align 4
  %622 = alloca i32, align 4
  %623 = alloca %"struct.cgp::numarray_stack.0", align 4
  %624 = alloca { <2 x float>, float }, align 8
  %625 = alloca %"struct.cgp::numarray_stack.0", align 4
  %626 = alloca float, align 4
  %627 = alloca float, align 4
  %628 = alloca i32, align 4
  %629 = alloca %"class.std::__cxx11::basic_string", align 8
  %630 = alloca %"class.std::allocator", align 1
  %631 = alloca %"class.std::__cxx11::basic_string", align 8
  %632 = alloca %"class.std::allocator", align 1
  %633 = alloca %"class.std::__cxx11::basic_string", align 8
  %634 = alloca %"class.std::allocator", align 1
  %635 = alloca %"class.std::__cxx11::basic_string", align 8
  %636 = alloca %"class.std::allocator", align 1
  %637 = alloca %"struct.cgp::numarray_stack.0", align 4
  %638 = alloca { <2 x float>, float }, align 8
  %639 = alloca %"struct.cgp::numarray_stack.0", align 4
  %640 = alloca i32, align 4
  %641 = alloca i32, align 4
  %642 = alloca i32, align 4
  %643 = alloca %"class.std::__cxx11::basic_string", align 8
  %644 = alloca %"class.std::allocator", align 1
  %645 = alloca %"class.std::__cxx11::basic_string", align 8
  %646 = alloca %"class.std::allocator", align 1
  %647 = alloca %"class.std::__cxx11::basic_string", align 8
  %648 = alloca %"class.std::allocator", align 1
  %649 = alloca %"class.std::__cxx11::basic_string", align 8
  %650 = alloca %"class.std::allocator", align 1
  call void @llvm.lifetime.start.p0(i64 64, ptr %1) #9
  call void @_ZN3cgp23camera_controller_orbitC2Ev(ptr noundef nonnull align 8 dereferenceable(64) %1)
  call void @llvm.lifetime.start.p0(i64 12, ptr %2) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %3) #9
  store i32 1, ptr %3, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %4) #9
  store i32 0, ptr %4, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %5) #9
  store i32 0, ptr %5, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %2, ptr noundef nonnull align 4 dereferenceable(4) %3, ptr noundef nonnull align 4 dereferenceable(4) %4, ptr noundef nonnull align 4 dereferenceable(4) %5)
  call void @llvm.lifetime.start.p0(i64 12, ptr %6) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #9
  store i32 0, ptr %7, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #9
  store i32 0, ptr %8, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #9
  store i32 0, ptr %9, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %6, ptr noundef nonnull align 4 dereferenceable(4) %7, ptr noundef nonnull align 4 dereferenceable(4) %8, ptr noundef nonnull align 4 dereferenceable(4) %9)
  call void @llvm.lifetime.start.p0(i64 12, ptr %10) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #9
  store i32 0, ptr %11, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #9
  store i32 0, ptr %12, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #9
  store i32 1, ptr %13, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %10, ptr noundef nonnull align 4 dereferenceable(4) %11, ptr noundef nonnull align 4 dereferenceable(4) %12, ptr noundef nonnull align 4 dereferenceable(4) %13)
  call void @_ZN3cgp23camera_controller_orbit7look_atERKNS_14numarray_stackIfLi3EEES4_S4_(ptr noundef nonnull align 8 dereferenceable(64) %1, ptr noundef nonnull align 4 dereferenceable(12) %2, ptr noundef nonnull align 4 dereferenceable(12) %6, ptr noundef nonnull align 4 dereferenceable(12) %10)
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %10) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %6) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %4) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %3) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %2) #9
  call void @llvm.lifetime.start.p0(i64 12, ptr %14) #9
  %651 = getelementptr inbounds %"struct.cgp::camera_controller_orbit", ptr %1, i32 0, i32 1
  %652 = call { <2 x float>, float } @_ZNK3cgp19camera_generic_base5frontEv(ptr noundef nonnull align 8 dereferenceable(8) %651)
  store { <2 x float>, float } %652, ptr %15, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %14, ptr align 8 %15, i64 12, i1 false)
  call void @llvm.lifetime.start.p0(i64 12, ptr %16) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #9
  store i32 -1, ptr %17, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #9
  store i32 0, ptr %18, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #9
  store i32 0, ptr %19, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %16, ptr noundef nonnull align 4 dereferenceable(4) %17, ptr noundef nonnull align 4 dereferenceable(4) %18, ptr noundef nonnull align 4 dereferenceable(4) %19)
  %653 = call noundef zeroext i1 @_ZN3cgp8is_equalIfLi3EEEbRKNS_14numarray_stackIT_XT0_EEES5_(ptr noundef nonnull align 4 dereferenceable(12) %14, ptr noundef nonnull align 4 dereferenceable(12) %16)
  %654 = zext i1 %653 to i32
  %655 = icmp eq i32 %654, 0
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %16) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %14) #9
  br i1 %655, label %656, label %686

656:                                              ; preds = %0
  call void @llvm.lifetime.start.p0(i64 32, ptr %20) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %21) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %21) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %20, ptr noundef @.str, ptr noundef nonnull align 1 dereferenceable(1) %21)
          to label %657 unwind label %662

657:                                              ; preds = %656
  call void @llvm.lifetime.start.p0(i64 32, ptr %24) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %25) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %25) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %24, ptr noundef @.str.1, ptr noundef nonnull align 1 dereferenceable(1) %25)
          to label %658 unwind label %666

658:                                              ; preds = %657
  call void @llvm.lifetime.start.p0(i64 32, ptr %26) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %27) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %27) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %26, ptr noundef @.str.2, ptr noundef nonnull align 1 dereferenceable(1) %27)
          to label %659 unwind label %670

659:                                              ; preds = %658
  call void @llvm.lifetime.start.p0(i64 32, ptr %28) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %29) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %29) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %28, ptr noundef @__func__._ZN8cgp_test22test_camera_controllerEv, ptr noundef nonnull align 1 dereferenceable(1) %29)
          to label %660 unwind label %674

660:                                              ; preds = %659
  invoke void @_ZN3cgp10call_errorERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_S7_S7_i(ptr noundef nonnull align 8 dereferenceable(32) %20, ptr noundef nonnull align 8 dereferenceable(32) %24, ptr noundef nonnull align 8 dereferenceable(32) %26, ptr noundef nonnull align 8 dereferenceable(32) %28, i32 noundef 19) #10
          to label %661 unwind label %678

661:                                              ; preds = %660
  unreachable

662:                                              ; preds = %656
  %663 = landingpad { ptr, i32 }
          cleanup
  %664 = extractvalue { ptr, i32 } %663, 0
  store ptr %664, ptr %22, align 8
  %665 = extractvalue { ptr, i32 } %663, 1
  store i32 %665, ptr %23, align 4
  br label %685

666:                                              ; preds = %657
  %667 = landingpad { ptr, i32 }
          cleanup
  %668 = extractvalue { ptr, i32 } %667, 0
  store ptr %668, ptr %22, align 8
  %669 = extractvalue { ptr, i32 } %667, 1
  store i32 %669, ptr %23, align 4
  br label %684

670:                                              ; preds = %658
  %671 = landingpad { ptr, i32 }
          cleanup
  %672 = extractvalue { ptr, i32 } %671, 0
  store ptr %672, ptr %22, align 8
  %673 = extractvalue { ptr, i32 } %671, 1
  store i32 %673, ptr %23, align 4
  br label %683

674:                                              ; preds = %659
  %675 = landingpad { ptr, i32 }
          cleanup
  %676 = extractvalue { ptr, i32 } %675, 0
  store ptr %676, ptr %22, align 8
  %677 = extractvalue { ptr, i32 } %675, 1
  store i32 %677, ptr %23, align 4
  br label %682

678:                                              ; preds = %660
  %679 = landingpad { ptr, i32 }
          cleanup
  %680 = extractvalue { ptr, i32 } %679, 0
  store ptr %680, ptr %22, align 8
  %681 = extractvalue { ptr, i32 } %679, 1
  store i32 %681, ptr %23, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %28) #9
  br label %682

682:                                              ; preds = %678, %674
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %29) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %29) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %28) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %26) #9
  br label %683

683:                                              ; preds = %682, %670
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %27) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %27) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %26) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %24) #9
  br label %684

684:                                              ; preds = %683, %666
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %25) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %25) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %24) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %20) #9
  br label %685

685:                                              ; preds = %684, %662
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %21) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %21) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %20) #9
  br label %956

686:                                              ; preds = %0
  call void @llvm.lifetime.start.p0(i64 12, ptr %30) #9
  %687 = getelementptr inbounds %"struct.cgp::camera_controller_orbit", ptr %1, i32 0, i32 1
  %688 = call { <2 x float>, float } @_ZNK3cgp12camera_orbit8positionEv(ptr noundef nonnull align 8 dereferenceable(40) %687)
  store { <2 x float>, float } %688, ptr %31, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %30, ptr align 8 %31, i64 12, i1 false)
  call void @llvm.lifetime.start.p0(i64 12, ptr %32) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #9
  store i32 1, ptr %33, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #9
  store i32 0, ptr %34, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #9
  store i32 0, ptr %35, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %32, ptr noundef nonnull align 4 dereferenceable(4) %33, ptr noundef nonnull align 4 dereferenceable(4) %34, ptr noundef nonnull align 4 dereferenceable(4) %35)
  %689 = call noundef zeroext i1 @_ZN3cgp8is_equalIfLi3EEEbRKNS_14numarray_stackIT_XT0_EEES5_(ptr noundef nonnull align 4 dereferenceable(12) %30, ptr noundef nonnull align 4 dereferenceable(12) %32)
  %690 = zext i1 %689 to i32
  %691 = icmp eq i32 %690, 0
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %32) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %30) #9
  br i1 %691, label %692, label %722

692:                                              ; preds = %686
  call void @llvm.lifetime.start.p0(i64 32, ptr %36) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %37) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %37) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %36, ptr noundef @.str.3, ptr noundef nonnull align 1 dereferenceable(1) %37)
          to label %693 unwind label %698

693:                                              ; preds = %692
  call void @llvm.lifetime.start.p0(i64 32, ptr %38) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %39) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %39) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %38, ptr noundef @.str.1, ptr noundef nonnull align 1 dereferenceable(1) %39)
          to label %694 unwind label %702

694:                                              ; preds = %693
  call void @llvm.lifetime.start.p0(i64 32, ptr %40) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %41) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %41) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %40, ptr noundef @.str.2, ptr noundef nonnull align 1 dereferenceable(1) %41)
          to label %695 unwind label %706

695:                                              ; preds = %694
  call void @llvm.lifetime.start.p0(i64 32, ptr %42) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %43) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %43) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %42, ptr noundef @__func__._ZN8cgp_test22test_camera_controllerEv, ptr noundef nonnull align 1 dereferenceable(1) %43)
          to label %696 unwind label %710

696:                                              ; preds = %695
  invoke void @_ZN3cgp10call_errorERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_S7_S7_i(ptr noundef nonnull align 8 dereferenceable(32) %36, ptr noundef nonnull align 8 dereferenceable(32) %38, ptr noundef nonnull align 8 dereferenceable(32) %40, ptr noundef nonnull align 8 dereferenceable(32) %42, i32 noundef 20) #10
          to label %697 unwind label %714

697:                                              ; preds = %696
  unreachable

698:                                              ; preds = %692
  %699 = landingpad { ptr, i32 }
          cleanup
  %700 = extractvalue { ptr, i32 } %699, 0
  store ptr %700, ptr %22, align 8
  %701 = extractvalue { ptr, i32 } %699, 1
  store i32 %701, ptr %23, align 4
  br label %721

702:                                              ; preds = %693
  %703 = landingpad { ptr, i32 }
          cleanup
  %704 = extractvalue { ptr, i32 } %703, 0
  store ptr %704, ptr %22, align 8
  %705 = extractvalue { ptr, i32 } %703, 1
  store i32 %705, ptr %23, align 4
  br label %720

706:                                              ; preds = %694
  %707 = landingpad { ptr, i32 }
          cleanup
  %708 = extractvalue { ptr, i32 } %707, 0
  store ptr %708, ptr %22, align 8
  %709 = extractvalue { ptr, i32 } %707, 1
  store i32 %709, ptr %23, align 4
  br label %719

710:                                              ; preds = %695
  %711 = landingpad { ptr, i32 }
          cleanup
  %712 = extractvalue { ptr, i32 } %711, 0
  store ptr %712, ptr %22, align 8
  %713 = extractvalue { ptr, i32 } %711, 1
  store i32 %713, ptr %23, align 4
  br label %718

714:                                              ; preds = %696
  %715 = landingpad { ptr, i32 }
          cleanup
  %716 = extractvalue { ptr, i32 } %715, 0
  store ptr %716, ptr %22, align 8
  %717 = extractvalue { ptr, i32 } %715, 1
  store i32 %717, ptr %23, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %42) #9
  br label %718

718:                                              ; preds = %714, %710
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %43) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %43) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %42) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %40) #9
  br label %719

719:                                              ; preds = %718, %706
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %41) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %41) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %40) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %38) #9
  br label %720

720:                                              ; preds = %719, %702
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %39) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %39) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %38) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %36) #9
  br label %721

721:                                              ; preds = %720, %698
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %37) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %37) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %36) #9
  br label %956

722:                                              ; preds = %686
  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 !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %46) #9
  store i32 0, ptr %46, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %47) #9
  store i32 0, ptr %47, align 4, !tbaa !5
  call 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)
  call void @llvm.lifetime.start.p0(i64 12, ptr %48) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %49) #9
  store i32 0, ptr %49, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %50) #9
  store i32 0, ptr %50, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %51) #9
  store i32 0, ptr %51, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %48, ptr noundef nonnull align 4 dereferenceable(4) %49, ptr noundef nonnull align 4 dereferenceable(4) %50, ptr noundef nonnull align 4 dereferenceable(4) %51)
  call void @llvm.lifetime.start.p0(i64 12, ptr %52) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %53) #9
  store i32 0, ptr %53, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %54) #9
  store i32 0, ptr %54, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %55) #9
  store i32 1, ptr %55, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %52, ptr noundef nonnull align 4 dereferenceable(4) %53, ptr noundef nonnull align 4 dereferenceable(4) %54, ptr noundef nonnull align 4 dereferenceable(4) %55)
  call void @_ZN3cgp23camera_controller_orbit7look_atERKNS_14numarray_stackIfLi3EEES4_S4_(ptr noundef nonnull align 8 dereferenceable(64) %1, ptr noundef nonnull align 4 dereferenceable(12) %44, ptr noundef nonnull align 4 dereferenceable(12) %48, ptr noundef nonnull align 4 dereferenceable(12) %52)
  call void @llvm.lifetime.end.p0(i64 4, ptr %55) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %54) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #9
  call void @llvm.lifetime.end.p0(i64 12, 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 4, ptr %49) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %48) #9
  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
  call void @llvm.lifetime.start.p0(i64 12, ptr %56) #9
  %723 = getelementptr inbounds %"struct.cgp::camera_controller_orbit", ptr %1, i32 0, i32 1
  %724 = call { <2 x float>, float } @_ZNK3cgp19camera_generic_base5frontEv(ptr noundef nonnull align 8 dereferenceable(8) %723)
  store { <2 x float>, float } %724, ptr %57, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %56, ptr align 8 %57, i64 12, i1 false)
  call void @llvm.lifetime.start.p0(i64 12, ptr %58) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %59) #9
  store i32 1, ptr %59, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %60) #9
  store i32 0, ptr %60, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %61) #9
  store i32 0, ptr %61, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %58, ptr noundef nonnull align 4 dereferenceable(4) %59, ptr noundef nonnull align 4 dereferenceable(4) %60, ptr noundef nonnull align 4 dereferenceable(4) %61)
  %725 = call noundef zeroext i1 @_ZN3cgp8is_equalIfLi3EEEbRKNS_14numarray_stackIT_XT0_EEES5_(ptr noundef nonnull align 4 dereferenceable(12) %56, ptr noundef nonnull align 4 dereferenceable(12) %58)
  %726 = zext i1 %725 to i32
  %727 = icmp eq i32 %726, 0
  call void @llvm.lifetime.end.p0(i64 4, ptr %61) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %60) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %59) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %58) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %56) #9
  br i1 %727, label %728, label %758

728:                                              ; preds = %722
  call void @llvm.lifetime.start.p0(i64 32, ptr %62) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %63) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %63) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %62, ptr noundef @.str.4, ptr noundef nonnull align 1 dereferenceable(1) %63)
          to label %729 unwind label %734

729:                                              ; preds = %728
  call void @llvm.lifetime.start.p0(i64 32, ptr %64) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %65) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %65) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %64, ptr noundef @.str.1, ptr noundef nonnull align 1 dereferenceable(1) %65)
          to label %730 unwind label %738

730:                                              ; preds = %729
  call void @llvm.lifetime.start.p0(i64 32, ptr %66) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %67) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %67) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %66, ptr noundef @.str.2, ptr noundef nonnull align 1 dereferenceable(1) %67)
          to label %731 unwind label %742

731:                                              ; preds = %730
  call void @llvm.lifetime.start.p0(i64 32, ptr %68) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %69) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %69) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %68, ptr noundef @__func__._ZN8cgp_test22test_camera_controllerEv, ptr noundef nonnull align 1 dereferenceable(1) %69)
          to label %732 unwind label %746

732:                                              ; preds = %731
  invoke void @_ZN3cgp10call_errorERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_S7_S7_i(ptr noundef nonnull align 8 dereferenceable(32) %62, ptr noundef nonnull align 8 dereferenceable(32) %64, ptr noundef nonnull align 8 dereferenceable(32) %66, ptr noundef nonnull align 8 dereferenceable(32) %68, i32 noundef 23) #10
          to label %733 unwind label %750

733:                                              ; preds = %732
  unreachable

734:                                              ; preds = %728
  %735 = landingpad { ptr, i32 }
          cleanup
  %736 = extractvalue { ptr, i32 } %735, 0
  store ptr %736, ptr %22, align 8
  %737 = extractvalue { ptr, i32 } %735, 1
  store i32 %737, ptr %23, align 4
  br label %757

738:                                              ; preds = %729
  %739 = landingpad { ptr, i32 }
          cleanup
  %740 = extractvalue { ptr, i32 } %739, 0
  store ptr %740, ptr %22, align 8
  %741 = extractvalue { ptr, i32 } %739, 1
  store i32 %741, ptr %23, align 4
  br label %756

742:                                              ; preds = %730
  %743 = landingpad { ptr, i32 }
          cleanup
  %744 = extractvalue { ptr, i32 } %743, 0
  store ptr %744, ptr %22, align 8
  %745 = extractvalue { ptr, i32 } %743, 1
  store i32 %745, ptr %23, align 4
  br label %755

746:                                              ; preds = %731
  %747 = landingpad { ptr, i32 }
          cleanup
  %748 = extractvalue { ptr, i32 } %747, 0
  store ptr %748, ptr %22, align 8
  %749 = extractvalue { ptr, i32 } %747, 1
  store i32 %749, ptr %23, align 4
  br label %754

750:                                              ; preds = %732
  %751 = landingpad { ptr, i32 }
          cleanup
  %752 = extractvalue { ptr, i32 } %751, 0
  store ptr %752, ptr %22, align 8
  %753 = extractvalue { ptr, i32 } %751, 1
  store i32 %753, ptr %23, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %68) #9
  br label %754

754:                                              ; preds = %750, %746
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %69) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %69) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %68) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %66) #9
  br label %755

755:                                              ; preds = %754, %742
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %67) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %67) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %66) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %64) #9
  br label %756

756:                                              ; preds = %755, %738
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %65) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %65) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %64) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %62) #9
  br label %757

757:                                              ; preds = %756, %734
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %63) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %63) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %62) #9
  br label %956

758:                                              ; preds = %722
  call void @llvm.lifetime.start.p0(i64 12, ptr %70) #9
  %759 = getelementptr inbounds %"struct.cgp::camera_controller_orbit", ptr %1, i32 0, i32 1
  %760 = call { <2 x float>, float } @_ZNK3cgp12camera_orbit8positionEv(ptr noundef nonnull align 8 dereferenceable(40) %759)
  store { <2 x float>, float } %760, ptr %71, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %70, ptr align 8 %71, i64 12, i1 false)
  call void @llvm.lifetime.start.p0(i64 12, ptr %72) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %73) #9
  store i32 -1, ptr %73, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %74) #9
  store i32 0, ptr %74, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %75) #9
  store i32 0, ptr %75, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %72, ptr noundef nonnull align 4 dereferenceable(4) %73, ptr noundef nonnull align 4 dereferenceable(4) %74, ptr noundef nonnull align 4 dereferenceable(4) %75)
  %761 = call noundef zeroext i1 @_ZN3cgp8is_equalIfLi3EEEbRKNS_14numarray_stackIT_XT0_EEES5_(ptr noundef nonnull align 4 dereferenceable(12) %70, ptr noundef nonnull align 4 dereferenceable(12) %72)
  %762 = zext i1 %761 to i32
  %763 = icmp eq i32 %762, 0
  call void @llvm.lifetime.end.p0(i64 4, ptr %75) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %74) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %73) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %72) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %70) #9
  br i1 %763, label %764, label %794

764:                                              ; preds = %758
  call void @llvm.lifetime.start.p0(i64 32, ptr %76) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %77) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %77) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %76, ptr noundef @.str.5, ptr noundef nonnull align 1 dereferenceable(1) %77)
          to label %765 unwind label %770

765:                                              ; preds = %764
  call void @llvm.lifetime.start.p0(i64 32, ptr %78) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %79) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %79) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %78, ptr noundef @.str.1, ptr noundef nonnull align 1 dereferenceable(1) %79)
          to label %766 unwind label %774

766:                                              ; preds = %765
  call void @llvm.lifetime.start.p0(i64 32, ptr %80) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %81) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %81) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %80, ptr noundef @.str.2, ptr noundef nonnull align 1 dereferenceable(1) %81)
          to label %767 unwind label %778

767:                                              ; preds = %766
  call void @llvm.lifetime.start.p0(i64 32, ptr %82) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %83) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %83) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %82, ptr noundef @__func__._ZN8cgp_test22test_camera_controllerEv, ptr noundef nonnull align 1 dereferenceable(1) %83)
          to label %768 unwind label %782

768:                                              ; preds = %767
  invoke void @_ZN3cgp10call_errorERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_S7_S7_i(ptr noundef nonnull align 8 dereferenceable(32) %76, ptr noundef nonnull align 8 dereferenceable(32) %78, ptr noundef nonnull align 8 dereferenceable(32) %80, ptr noundef nonnull align 8 dereferenceable(32) %82, i32 noundef 24) #10
          to label %769 unwind label %786

769:                                              ; preds = %768
  unreachable

770:                                              ; preds = %764
  %771 = landingpad { ptr, i32 }
          cleanup
  %772 = extractvalue { ptr, i32 } %771, 0
  store ptr %772, ptr %22, align 8
  %773 = extractvalue { ptr, i32 } %771, 1
  store i32 %773, ptr %23, align 4
  br label %793

774:                                              ; preds = %765
  %775 = landingpad { ptr, i32 }
          cleanup
  %776 = extractvalue { ptr, i32 } %775, 0
  store ptr %776, ptr %22, align 8
  %777 = extractvalue { ptr, i32 } %775, 1
  store i32 %777, ptr %23, align 4
  br label %792

778:                                              ; preds = %766
  %779 = landingpad { ptr, i32 }
          cleanup
  %780 = extractvalue { ptr, i32 } %779, 0
  store ptr %780, ptr %22, align 8
  %781 = extractvalue { ptr, i32 } %779, 1
  store i32 %781, ptr %23, align 4
  br label %791

782:                                              ; preds = %767
  %783 = landingpad { ptr, i32 }
          cleanup
  %784 = extractvalue { ptr, i32 } %783, 0
  store ptr %784, ptr %22, align 8
  %785 = extractvalue { ptr, i32 } %783, 1
  store i32 %785, ptr %23, align 4
  br label %790

786:                                              ; preds = %768
  %787 = landingpad { ptr, i32 }
          cleanup
  %788 = extractvalue { ptr, i32 } %787, 0
  store ptr %788, ptr %22, align 8
  %789 = extractvalue { ptr, i32 } %787, 1
  store i32 %789, ptr %23, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %82) #9
  br label %790

790:                                              ; preds = %786, %782
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %83) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %83) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %82) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %80) #9
  br label %791

791:                                              ; preds = %790, %778
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %81) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %81) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %80) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %78) #9
  br label %792

792:                                              ; preds = %791, %774
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %79) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %79) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %78) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %76) #9
  br label %793

793:                                              ; preds = %792, %770
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %77) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %77) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %76) #9
  br label %956

794:                                              ; preds = %758
  call void @llvm.lifetime.start.p0(i64 12, ptr %84) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %85) #9
  store i32 0, ptr %85, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %86) #9
  store i32 1, ptr %86, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %87) #9
  store i32 0, ptr %87, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %84, ptr noundef nonnull align 4 dereferenceable(4) %85, ptr noundef nonnull align 4 dereferenceable(4) %86, ptr noundef nonnull align 4 dereferenceable(4) %87)
  call void @llvm.lifetime.start.p0(i64 12, ptr %88) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %89) #9
  store i32 0, ptr %89, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %90) #9
  store i32 0, ptr %90, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %91) #9
  store i32 0, ptr %91, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %88, ptr noundef nonnull align 4 dereferenceable(4) %89, ptr noundef nonnull align 4 dereferenceable(4) %90, ptr noundef nonnull align 4 dereferenceable(4) %91)
  call void @llvm.lifetime.start.p0(i64 12, ptr %92) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %93) #9
  store i32 0, ptr %93, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %94) #9
  store i32 0, ptr %94, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %95) #9
  store i32 1, ptr %95, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %92, ptr noundef nonnull align 4 dereferenceable(4) %93, ptr noundef nonnull align 4 dereferenceable(4) %94, ptr noundef nonnull align 4 dereferenceable(4) %95)
  call void @_ZN3cgp23camera_controller_orbit7look_atERKNS_14numarray_stackIfLi3EEES4_S4_(ptr noundef nonnull align 8 dereferenceable(64) %1, ptr noundef nonnull align 4 dereferenceable(12) %84, ptr noundef nonnull align 4 dereferenceable(12) %88, ptr noundef nonnull align 4 dereferenceable(12) %92)
  call void @llvm.lifetime.end.p0(i64 4, ptr %95) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %94) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %93) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %92) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %91) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %90) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %89) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %88) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %87) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %86) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %85) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %84) #9
  call void @llvm.lifetime.start.p0(i64 12, ptr %96) #9
  %795 = getelementptr inbounds %"struct.cgp::camera_controller_orbit", ptr %1, i32 0, i32 1
  %796 = call { <2 x float>, float } @_ZNK3cgp19camera_generic_base5frontEv(ptr noundef nonnull align 8 dereferenceable(8) %795)
  store { <2 x float>, float } %796, ptr %97, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %96, ptr align 8 %97, i64 12, i1 false)
  call void @llvm.lifetime.start.p0(i64 12, ptr %98) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %99) #9
  store i32 0, ptr %99, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %100) #9
  store i32 -1, ptr %100, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %101) #9
  store i32 0, ptr %101, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %98, ptr noundef nonnull align 4 dereferenceable(4) %99, ptr noundef nonnull align 4 dereferenceable(4) %100, ptr noundef nonnull align 4 dereferenceable(4) %101)
  %797 = call noundef zeroext i1 @_ZN3cgp8is_equalIfLi3EEEbRKNS_14numarray_stackIT_XT0_EEES5_(ptr noundef nonnull align 4 dereferenceable(12) %96, ptr noundef nonnull align 4 dereferenceable(12) %98)
  %798 = zext i1 %797 to i32
  %799 = icmp eq i32 %798, 0
  call void @llvm.lifetime.end.p0(i64 4, ptr %101) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %100) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %99) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %98) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %96) #9
  br i1 %799, label %800, label %830

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

801:                                              ; preds = %800
  call void @llvm.lifetime.start.p0(i64 32, ptr %104) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %105) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %105) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %104, ptr noundef @.str.1, ptr noundef nonnull align 1 dereferenceable(1) %105)
          to label %802 unwind label %810

802:                                              ; preds = %801
  call void @llvm.lifetime.start.p0(i64 32, ptr %106) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %107) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %107) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %106, ptr noundef @.str.2, ptr noundef nonnull align 1 dereferenceable(1) %107)
          to label %803 unwind label %814

803:                                              ; preds = %802
  call void @llvm.lifetime.start.p0(i64 32, ptr %108) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %109) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %109) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %108, ptr noundef @__func__._ZN8cgp_test22test_camera_controllerEv, ptr noundef nonnull align 1 dereferenceable(1) %109)
          to label %804 unwind label %818

804:                                              ; preds = %803
  invoke void @_ZN3cgp10call_errorERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_S7_S7_i(ptr noundef nonnull align 8 dereferenceable(32) %102, ptr noundef nonnull align 8 dereferenceable(32) %104, ptr noundef nonnull align 8 dereferenceable(32) %106, ptr noundef nonnull align 8 dereferenceable(32) %108, i32 noundef 27) #10
          to label %805 unwind label %822

805:                                              ; preds = %804
  unreachable

806:                                              ; preds = %800
  %807 = landingpad { ptr, i32 }
          cleanup
  %808 = extractvalue { ptr, i32 } %807, 0
  store ptr %808, ptr %22, align 8
  %809 = extractvalue { ptr, i32 } %807, 1
  store i32 %809, ptr %23, align 4
  br label %829

810:                                              ; preds = %801
  %811 = landingpad { ptr, i32 }
          cleanup
  %812 = extractvalue { ptr, i32 } %811, 0
  store ptr %812, ptr %22, align 8
  %813 = extractvalue { ptr, i32 } %811, 1
  store i32 %813, ptr %23, align 4
  br label %828

814:                                              ; preds = %802
  %815 = landingpad { ptr, i32 }
          cleanup
  %816 = extractvalue { ptr, i32 } %815, 0
  store ptr %816, ptr %22, align 8
  %817 = extractvalue { ptr, i32 } %815, 1
  store i32 %817, ptr %23, align 4
  br label %827

818:                                              ; preds = %803
  %819 = landingpad { ptr, i32 }
          cleanup
  %820 = extractvalue { ptr, i32 } %819, 0
  store ptr %820, ptr %22, align 8
  %821 = extractvalue { ptr, i32 } %819, 1
  store i32 %821, ptr %23, align 4
  br label %826

822:                                              ; preds = %804
  %823 = landingpad { ptr, i32 }
          cleanup
  %824 = extractvalue { ptr, i32 } %823, 0
  store ptr %824, ptr %22, align 8
  %825 = extractvalue { ptr, i32 } %823, 1
  store i32 %825, ptr %23, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %108) #9
  br label %826

826:                                              ; preds = %822, %818
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %109) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %109) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %108) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %106) #9
  br label %827

827:                                              ; preds = %826, %814
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %107) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %107) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %106) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %104) #9
  br label %828

828:                                              ; preds = %827, %810
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %105) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %105) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %104) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %102) #9
  br label %829

829:                                              ; preds = %828, %806
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %103) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %103) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %102) #9
  br label %956

830:                                              ; preds = %794
  call void @llvm.lifetime.start.p0(i64 12, ptr %110) #9
  %831 = getelementptr inbounds %"struct.cgp::camera_controller_orbit", ptr %1, i32 0, i32 1
  %832 = call { <2 x float>, float } @_ZNK3cgp12camera_orbit8positionEv(ptr noundef nonnull align 8 dereferenceable(40) %831)
  store { <2 x float>, float } %832, ptr %111, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %110, ptr align 8 %111, i64 12, i1 false)
  call void @llvm.lifetime.start.p0(i64 12, ptr %112) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %113) #9
  store i32 0, ptr %113, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %114) #9
  store i32 1, ptr %114, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %115) #9
  store i32 0, ptr %115, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %112, ptr noundef nonnull align 4 dereferenceable(4) %113, ptr noundef nonnull align 4 dereferenceable(4) %114, ptr noundef nonnull align 4 dereferenceable(4) %115)
  %833 = call noundef zeroext i1 @_ZN3cgp8is_equalIfLi3EEEbRKNS_14numarray_stackIT_XT0_EEES5_(ptr noundef nonnull align 4 dereferenceable(12) %110, ptr noundef nonnull align 4 dereferenceable(12) %112)
  %834 = zext i1 %833 to i32
  %835 = icmp eq i32 %834, 0
  call void @llvm.lifetime.end.p0(i64 4, ptr %115) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %114) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %113) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %112) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %110) #9
  br i1 %835, label %836, label %866

836:                                              ; preds = %830
  call void @llvm.lifetime.start.p0(i64 32, ptr %116) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %117) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %117) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %116, ptr noundef @.str.7, ptr noundef nonnull align 1 dereferenceable(1) %117)
          to label %837 unwind label %842

837:                                              ; preds = %836
  call void @llvm.lifetime.start.p0(i64 32, ptr %118) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %119) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %119) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %118, ptr noundef @.str.1, ptr noundef nonnull align 1 dereferenceable(1) %119)
          to label %838 unwind label %846

838:                                              ; preds = %837
  call void @llvm.lifetime.start.p0(i64 32, ptr %120) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %121) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %121) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %120, ptr noundef @.str.2, ptr noundef nonnull align 1 dereferenceable(1) %121)
          to label %839 unwind label %850

839:                                              ; preds = %838
  call void @llvm.lifetime.start.p0(i64 32, ptr %122) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %123) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %123) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %122, ptr noundef @__func__._ZN8cgp_test22test_camera_controllerEv, ptr noundef nonnull align 1 dereferenceable(1) %123)
          to label %840 unwind label %854

840:                                              ; preds = %839
  invoke void @_ZN3cgp10call_errorERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_S7_S7_i(ptr noundef nonnull align 8 dereferenceable(32) %116, ptr noundef nonnull align 8 dereferenceable(32) %118, ptr noundef nonnull align 8 dereferenceable(32) %120, ptr noundef nonnull align 8 dereferenceable(32) %122, i32 noundef 28) #10
          to label %841 unwind label %858

841:                                              ; preds = %840
  unreachable

842:                                              ; preds = %836
  %843 = landingpad { ptr, i32 }
          cleanup
  %844 = extractvalue { ptr, i32 } %843, 0
  store ptr %844, ptr %22, align 8
  %845 = extractvalue { ptr, i32 } %843, 1
  store i32 %845, ptr %23, align 4
  br label %865

846:                                              ; preds = %837
  %847 = landingpad { ptr, i32 }
          cleanup
  %848 = extractvalue { ptr, i32 } %847, 0
  store ptr %848, ptr %22, align 8
  %849 = extractvalue { ptr, i32 } %847, 1
  store i32 %849, ptr %23, align 4
  br label %864

850:                                              ; preds = %838
  %851 = landingpad { ptr, i32 }
          cleanup
  %852 = extractvalue { ptr, i32 } %851, 0
  store ptr %852, ptr %22, align 8
  %853 = extractvalue { ptr, i32 } %851, 1
  store i32 %853, ptr %23, align 4
  br label %863

854:                                              ; preds = %839
  %855 = landingpad { ptr, i32 }
          cleanup
  %856 = extractvalue { ptr, i32 } %855, 0
  store ptr %856, ptr %22, align 8
  %857 = extractvalue { ptr, i32 } %855, 1
  store i32 %857, ptr %23, align 4
  br label %862

858:                                              ; preds = %840
  %859 = landingpad { ptr, i32 }
          cleanup
  %860 = extractvalue { ptr, i32 } %859, 0
  store ptr %860, ptr %22, align 8
  %861 = extractvalue { ptr, i32 } %859, 1
  store i32 %861, ptr %23, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %122) #9
  br label %862

862:                                              ; preds = %858, %854
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %123) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %123) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %122) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %120) #9
  br label %863

863:                                              ; preds = %862, %850
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %121) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %121) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %120) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %118) #9
  br label %864

864:                                              ; preds = %863, %846
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %119) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %119) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %118) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %116) #9
  br label %865

865:                                              ; preds = %864, %842
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %117) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %117) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %116) #9
  br label %956

866:                                              ; preds = %830
  call void @llvm.lifetime.start.p0(i64 4, ptr %124) #9
  %867 = call noundef float @_ZSt4sqrtf(float noundef 2.000000e+00)
  store float %867, ptr %124, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 12, ptr %125) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %126) #9
  store i32 1, ptr %126, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %127) #9
  store i32 1, ptr %127, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %128) #9
  store i32 0, ptr %128, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %125, ptr noundef nonnull align 4 dereferenceable(4) %126, ptr noundef nonnull align 4 dereferenceable(4) %127, ptr noundef nonnull align 4 dereferenceable(4) %128)
  call void @llvm.lifetime.start.p0(i64 12, ptr %129) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %130) #9
  store i32 0, ptr %130, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %131) #9
  store i32 0, ptr %131, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %132) #9
  store i32 0, ptr %132, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %129, ptr noundef nonnull align 4 dereferenceable(4) %130, ptr noundef nonnull align 4 dereferenceable(4) %131, ptr noundef nonnull align 4 dereferenceable(4) %132)
  call void @llvm.lifetime.start.p0(i64 12, ptr %133) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %134) #9
  store i32 0, ptr %134, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %135) #9
  store i32 0, ptr %135, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %136) #9
  store i32 1, ptr %136, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %133, ptr noundef nonnull align 4 dereferenceable(4) %134, ptr noundef nonnull align 4 dereferenceable(4) %135, ptr noundef nonnull align 4 dereferenceable(4) %136)
  call void @_ZN3cgp23camera_controller_orbit7look_atERKNS_14numarray_stackIfLi3EEES4_S4_(ptr noundef nonnull align 8 dereferenceable(64) %1, ptr noundef nonnull align 4 dereferenceable(12) %125, ptr noundef nonnull align 4 dereferenceable(12) %129, ptr noundef nonnull align 4 dereferenceable(12) %133)
  call void @llvm.lifetime.end.p0(i64 4, ptr %136) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %135) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %134) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %133) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %132) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %131) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %130) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %129) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %128) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %127) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %126) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %125) #9
  call void @llvm.lifetime.start.p0(i64 12, ptr %137) #9
  %868 = getelementptr inbounds %"struct.cgp::camera_controller_orbit", ptr %1, i32 0, i32 1
  %869 = call { <2 x float>, float } @_ZNK3cgp19camera_generic_base5frontEv(ptr noundef nonnull align 8 dereferenceable(8) %868)
  store { <2 x float>, float } %869, ptr %138, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %137, ptr align 8 %138, i64 12, i1 false)
  call void @llvm.lifetime.start.p0(i64 12, ptr %139) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %140) #9
  %870 = load float, ptr %124, align 4, !tbaa !9
  %871 = fdiv float -1.000000e+00, %870
  store float %871, ptr %140, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %141) #9
  %872 = load float, ptr %124, align 4, !tbaa !9
  %873 = fdiv float -1.000000e+00, %872
  store float %873, ptr %141, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %142) #9
  store i32 0, ptr %142, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IffiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %139, ptr noundef nonnull align 4 dereferenceable(4) %140, ptr noundef nonnull align 4 dereferenceable(4) %141, ptr noundef nonnull align 4 dereferenceable(4) %142)
  %874 = call noundef zeroext i1 @_ZN3cgp8is_equalIfLi3EEEbRKNS_14numarray_stackIT_XT0_EEES5_(ptr noundef nonnull align 4 dereferenceable(12) %137, ptr noundef nonnull align 4 dereferenceable(12) %139)
  %875 = zext i1 %874 to i32
  %876 = icmp eq i32 %875, 0
  call void @llvm.lifetime.end.p0(i64 4, ptr %142) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %141) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %140) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %139) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %137) #9
  br i1 %876, label %877, label %907

877:                                              ; preds = %866
  call void @llvm.lifetime.start.p0(i64 32, ptr %143) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %144) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %144) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %143, ptr noundef @.str.8, ptr noundef nonnull align 1 dereferenceable(1) %144)
          to label %878 unwind label %883

878:                                              ; preds = %877
  call void @llvm.lifetime.start.p0(i64 32, ptr %145) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %146) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %146) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %145, ptr noundef @.str.1, ptr noundef nonnull align 1 dereferenceable(1) %146)
          to label %879 unwind label %887

879:                                              ; preds = %878
  call void @llvm.lifetime.start.p0(i64 32, ptr %147) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %148) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %148) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %147, ptr noundef @.str.2, ptr noundef nonnull align 1 dereferenceable(1) %148)
          to label %880 unwind label %891

880:                                              ; preds = %879
  call void @llvm.lifetime.start.p0(i64 32, ptr %149) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %150) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %150) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %149, ptr noundef @__func__._ZN8cgp_test22test_camera_controllerEv, ptr noundef nonnull align 1 dereferenceable(1) %150)
          to label %881 unwind label %895

881:                                              ; preds = %880
  invoke void @_ZN3cgp10call_errorERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_S7_S7_i(ptr noundef nonnull align 8 dereferenceable(32) %143, ptr noundef nonnull align 8 dereferenceable(32) %145, ptr noundef nonnull align 8 dereferenceable(32) %147, ptr noundef nonnull align 8 dereferenceable(32) %149, i32 noundef 32) #10
          to label %882 unwind label %899

882:                                              ; preds = %881
  unreachable

883:                                              ; preds = %877
  %884 = landingpad { ptr, i32 }
          cleanup
  %885 = extractvalue { ptr, i32 } %884, 0
  store ptr %885, ptr %22, align 8
  %886 = extractvalue { ptr, i32 } %884, 1
  store i32 %886, ptr %23, align 4
  br label %906

887:                                              ; preds = %878
  %888 = landingpad { ptr, i32 }
          cleanup
  %889 = extractvalue { ptr, i32 } %888, 0
  store ptr %889, ptr %22, align 8
  %890 = extractvalue { ptr, i32 } %888, 1
  store i32 %890, ptr %23, align 4
  br label %905

891:                                              ; preds = %879
  %892 = landingpad { ptr, i32 }
          cleanup
  %893 = extractvalue { ptr, i32 } %892, 0
  store ptr %893, ptr %22, align 8
  %894 = extractvalue { ptr, i32 } %892, 1
  store i32 %894, ptr %23, align 4
  br label %904

895:                                              ; preds = %880
  %896 = landingpad { ptr, i32 }
          cleanup
  %897 = extractvalue { ptr, i32 } %896, 0
  store ptr %897, ptr %22, align 8
  %898 = extractvalue { ptr, i32 } %896, 1
  store i32 %898, ptr %23, align 4
  br label %903

899:                                              ; preds = %881
  %900 = landingpad { ptr, i32 }
          cleanup
  %901 = extractvalue { ptr, i32 } %900, 0
  store ptr %901, ptr %22, align 8
  %902 = extractvalue { ptr, i32 } %900, 1
  store i32 %902, ptr %23, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %149) #9
  br label %903

903:                                              ; preds = %899, %895
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %150) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %150) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %149) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %147) #9
  br label %904

904:                                              ; preds = %903, %891
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %148) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %148) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %147) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %145) #9
  br label %905

905:                                              ; preds = %904, %887
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %146) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %146) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %145) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %143) #9
  br label %906

906:                                              ; preds = %905, %883
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %144) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %144) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %143) #9
  br label %955

907:                                              ; preds = %866
  call void @llvm.lifetime.start.p0(i64 12, ptr %151) #9
  %908 = getelementptr inbounds %"struct.cgp::camera_controller_orbit", ptr %1, i32 0, i32 1
  %909 = call { <2 x float>, float } @_ZNK3cgp12camera_orbit8positionEv(ptr noundef nonnull align 8 dereferenceable(40) %908)
  store { <2 x float>, float } %909, ptr %152, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %151, ptr align 8 %152, i64 12, i1 false)
  call void @llvm.lifetime.start.p0(i64 12, ptr %153) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %154) #9
  store i32 1, ptr %154, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %155) #9
  store i32 1, ptr %155, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %156) #9
  store i32 0, ptr %156, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %153, ptr noundef nonnull align 4 dereferenceable(4) %154, ptr noundef nonnull align 4 dereferenceable(4) %155, ptr noundef nonnull align 4 dereferenceable(4) %156)
  %910 = call noundef zeroext i1 @_ZN3cgp8is_equalIfLi3EEEbRKNS_14numarray_stackIT_XT0_EEES5_(ptr noundef nonnull align 4 dereferenceable(12) %151, ptr noundef nonnull align 4 dereferenceable(12) %153)
  %911 = zext i1 %910 to i32
  %912 = icmp eq i32 %911, 0
  call void @llvm.lifetime.end.p0(i64 4, ptr %156) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %155) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %154) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %153) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %151) #9
  br i1 %912, label %913, label %943

913:                                              ; preds = %907
  call void @llvm.lifetime.start.p0(i64 32, ptr %157) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %158) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %158) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %157, ptr noundef @.str.9, ptr noundef nonnull align 1 dereferenceable(1) %158)
          to label %914 unwind label %919

914:                                              ; preds = %913
  call void @llvm.lifetime.start.p0(i64 32, ptr %159) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %160) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %160) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %159, ptr noundef @.str.1, ptr noundef nonnull align 1 dereferenceable(1) %160)
          to label %915 unwind label %923

915:                                              ; preds = %914
  call void @llvm.lifetime.start.p0(i64 32, ptr %161) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %162) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %162) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %161, ptr noundef @.str.2, ptr noundef nonnull align 1 dereferenceable(1) %162)
          to label %916 unwind label %927

916:                                              ; preds = %915
  call void @llvm.lifetime.start.p0(i64 32, ptr %163) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %164) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %164) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %163, ptr noundef @__func__._ZN8cgp_test22test_camera_controllerEv, ptr noundef nonnull align 1 dereferenceable(1) %164)
          to label %917 unwind label %931

917:                                              ; preds = %916
  invoke void @_ZN3cgp10call_errorERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_S7_S7_i(ptr noundef nonnull align 8 dereferenceable(32) %157, ptr noundef nonnull align 8 dereferenceable(32) %159, ptr noundef nonnull align 8 dereferenceable(32) %161, ptr noundef nonnull align 8 dereferenceable(32) %163, i32 noundef 33) #10
          to label %918 unwind label %935

918:                                              ; preds = %917
  unreachable

919:                                              ; preds = %913
  %920 = landingpad { ptr, i32 }
          cleanup
  %921 = extractvalue { ptr, i32 } %920, 0
  store ptr %921, ptr %22, align 8
  %922 = extractvalue { ptr, i32 } %920, 1
  store i32 %922, ptr %23, align 4
  br label %942

923:                                              ; preds = %914
  %924 = landingpad { ptr, i32 }
          cleanup
  %925 = extractvalue { ptr, i32 } %924, 0
  store ptr %925, ptr %22, align 8
  %926 = extractvalue { ptr, i32 } %924, 1
  store i32 %926, ptr %23, align 4
  br label %941

927:                                              ; preds = %915
  %928 = landingpad { ptr, i32 }
          cleanup
  %929 = extractvalue { ptr, i32 } %928, 0
  store ptr %929, ptr %22, align 8
  %930 = extractvalue { ptr, i32 } %928, 1
  store i32 %930, ptr %23, align 4
  br label %940

931:                                              ; preds = %916
  %932 = landingpad { ptr, i32 }
          cleanup
  %933 = extractvalue { ptr, i32 } %932, 0
  store ptr %933, ptr %22, align 8
  %934 = extractvalue { ptr, i32 } %932, 1
  store i32 %934, ptr %23, align 4
  br label %939

935:                                              ; preds = %917
  %936 = landingpad { ptr, i32 }
          cleanup
  %937 = extractvalue { ptr, i32 } %936, 0
  store ptr %937, ptr %22, align 8
  %938 = extractvalue { ptr, i32 } %936, 1
  store i32 %938, ptr %23, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %163) #9
  br label %939

939:                                              ; preds = %935, %931
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %164) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %164) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %163) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %161) #9
  br label %940

940:                                              ; preds = %939, %927
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %162) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %162) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %161) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %159) #9
  br label %941

941:                                              ; preds = %940, %923
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %160) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %160) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %159) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %157) #9
  br label %942

942:                                              ; preds = %941, %919
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %158) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %158) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %157) #9
  br label %955

943:                                              ; preds = %907
  call void @llvm.lifetime.end.p0(i64 4, ptr %124) #9
  call void @llvm.lifetime.end.p0(i64 64, ptr %1) #9
  call void @llvm.lifetime.start.p0(i64 72, ptr %165) #9
  call void @_ZN3cgp29camera_controller_orbit_eulerC2Ev(ptr noundef nonnull align 8 dereferenceable(72) %165)
  call void @llvm.lifetime.start.p0(i64 12, ptr %166) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %167) #9
  store i32 1, ptr %167, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %168) #9
  store i32 0, ptr %168, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %169) #9
  store i32 0, ptr %169, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %166, ptr noundef nonnull align 4 dereferenceable(4) %167, ptr noundef nonnull align 4 dereferenceable(4) %168, ptr noundef nonnull align 4 dereferenceable(4) %169)
  call void @llvm.lifetime.start.p0(i64 12, ptr %170) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %171) #9
  store i32 0, ptr %171, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %172) #9
  store i32 0, ptr %172, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %173) #9
  store i32 0, ptr %173, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %170, ptr noundef nonnull align 4 dereferenceable(4) %171, ptr noundef nonnull align 4 dereferenceable(4) %172, ptr noundef nonnull align 4 dereferenceable(4) %173)
  call void @llvm.lifetime.start.p0(i64 12, ptr %174) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %175) #9
  store i32 0, ptr %175, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %176) #9
  store i32 0, ptr %176, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %177) #9
  store i32 1, ptr %177, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %174, ptr noundef nonnull align 4 dereferenceable(4) %175, ptr noundef nonnull align 4 dereferenceable(4) %176, ptr noundef nonnull align 4 dereferenceable(4) %177)
  call void @_ZN3cgp29camera_controller_orbit_euler7look_atERKNS_14numarray_stackIfLi3EEES4_S4_(ptr noundef nonnull align 8 dereferenceable(72) %165, ptr noundef nonnull align 4 dereferenceable(12) %166, ptr noundef nonnull align 4 dereferenceable(12) %170, ptr noundef nonnull align 4 dereferenceable(12) %174)
  call void @llvm.lifetime.end.p0(i64 4, ptr %177) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %176) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %175) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %174) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %173) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %172) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %171) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %170) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %169) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %168) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %167) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %166) #9
  call void @llvm.lifetime.start.p0(i64 12, ptr %178) #9
  %944 = getelementptr inbounds %"struct.cgp::camera_controller_orbit_euler", ptr %165, i32 0, i32 1
  %945 = call { <2 x float>, float } @_ZNK3cgp19camera_generic_base5frontEv(ptr noundef nonnull align 8 dereferenceable(8) %944)
  store { <2 x float>, float } %945, ptr %179, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %178, ptr align 8 %179, i64 12, i1 false)
  call void @llvm.lifetime.start.p0(i64 12, ptr %180) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %181) #9
  store i32 -1, ptr %181, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %182) #9
  store i32 0, ptr %182, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %183) #9
  store i32 0, ptr %183, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %180, ptr noundef nonnull align 4 dereferenceable(4) %181, ptr noundef nonnull align 4 dereferenceable(4) %182, ptr noundef nonnull align 4 dereferenceable(4) %183)
  %946 = call noundef zeroext i1 @_ZN3cgp8is_equalIfLi3EEEbRKNS_14numarray_stackIT_XT0_EEES5_(ptr noundef nonnull align 4 dereferenceable(12) %178, ptr noundef nonnull align 4 dereferenceable(12) %180)
  %947 = zext i1 %946 to i32
  %948 = icmp eq i32 %947, 0
  call void @llvm.lifetime.end.p0(i64 4, ptr %183) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %182) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %181) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %180) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %178) #9
  br i1 %948, label %949, label %981

949:                                              ; preds = %943
  call void @llvm.lifetime.start.p0(i64 32, ptr %184) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %185) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %185) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %184, ptr noundef @.str.10, ptr noundef nonnull align 1 dereferenceable(1) %185)
          to label %950 unwind label %957

950:                                              ; preds = %949
  call void @llvm.lifetime.start.p0(i64 32, ptr %186) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %187) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %187) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %186, ptr noundef @.str.1, ptr noundef nonnull align 1 dereferenceable(1) %187)
          to label %951 unwind label %961

951:                                              ; preds = %950
  call void @llvm.lifetime.start.p0(i64 32, ptr %188) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %189) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %189) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %188, ptr noundef @.str.2, ptr noundef nonnull align 1 dereferenceable(1) %189)
          to label %952 unwind label %965

952:                                              ; preds = %951
  call void @llvm.lifetime.start.p0(i64 32, ptr %190) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %191) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %191) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %190, ptr noundef @__func__._ZN8cgp_test22test_camera_controllerEv, ptr noundef nonnull align 1 dereferenceable(1) %191)
          to label %953 unwind label %969

953:                                              ; preds = %952
  invoke void @_ZN3cgp10call_errorERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_S7_S7_i(ptr noundef nonnull align 8 dereferenceable(32) %184, ptr noundef nonnull align 8 dereferenceable(32) %186, ptr noundef nonnull align 8 dereferenceable(32) %188, ptr noundef nonnull align 8 dereferenceable(32) %190, i32 noundef 39) #10
          to label %954 unwind label %973

954:                                              ; preds = %953
  unreachable

955:                                              ; preds = %942, %906
  call void @llvm.lifetime.end.p0(i64 4, ptr %124) #9
  br label %956

956:                                              ; preds = %955, %865, %829, %793, %757, %721, %685
  call void @llvm.lifetime.end.p0(i64 64, ptr %1) #9
  br label %1831

957:                                              ; preds = %949
  %958 = landingpad { ptr, i32 }
          cleanup
  %959 = extractvalue { ptr, i32 } %958, 0
  store ptr %959, ptr %22, align 8
  %960 = extractvalue { ptr, i32 } %958, 1
  store i32 %960, ptr %23, align 4
  br label %980

961:                                              ; preds = %950
  %962 = landingpad { ptr, i32 }
          cleanup
  %963 = extractvalue { ptr, i32 } %962, 0
  store ptr %963, ptr %22, align 8
  %964 = extractvalue { ptr, i32 } %962, 1
  store i32 %964, ptr %23, align 4
  br label %979

965:                                              ; preds = %951
  %966 = landingpad { ptr, i32 }
          cleanup
  %967 = extractvalue { ptr, i32 } %966, 0
  store ptr %967, ptr %22, align 8
  %968 = extractvalue { ptr, i32 } %966, 1
  store i32 %968, ptr %23, align 4
  br label %978

969:                                              ; preds = %952
  %970 = landingpad { ptr, i32 }
          cleanup
  %971 = extractvalue { ptr, i32 } %970, 0
  store ptr %971, ptr %22, align 8
  %972 = extractvalue { ptr, i32 } %970, 1
  store i32 %972, ptr %23, align 4
  br label %977

973:                                              ; preds = %953
  %974 = landingpad { ptr, i32 }
          cleanup
  %975 = extractvalue { ptr, i32 } %974, 0
  store ptr %975, ptr %22, align 8
  %976 = extractvalue { ptr, i32 } %974, 1
  store i32 %976, ptr %23, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %190) #9
  br label %977

977:                                              ; preds = %973, %969
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %191) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %191) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %190) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %188) #9
  br label %978

978:                                              ; preds = %977, %965
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %189) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %189) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %188) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %186) #9
  br label %979

979:                                              ; preds = %978, %961
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %187) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %187) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %186) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %184) #9
  br label %980

980:                                              ; preds = %979, %957
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %185) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %185) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %184) #9
  br label %1251

981:                                              ; preds = %943
  call void @llvm.lifetime.start.p0(i64 12, ptr %192) #9
  %982 = getelementptr inbounds %"struct.cgp::camera_controller_orbit_euler", ptr %165, i32 0, i32 1
  %983 = call { <2 x float>, float } @_ZNK3cgp18camera_orbit_euler8positionEv(ptr noundef nonnull align 8 dereferenceable(48) %982)
  store { <2 x float>, float } %983, ptr %193, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %192, ptr align 8 %193, i64 12, i1 false)
  call void @llvm.lifetime.start.p0(i64 12, ptr %194) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %195) #9
  store i32 1, ptr %195, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %196) #9
  store i32 0, ptr %196, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %197) #9
  store i32 0, ptr %197, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %194, ptr noundef nonnull align 4 dereferenceable(4) %195, ptr noundef nonnull align 4 dereferenceable(4) %196, ptr noundef nonnull align 4 dereferenceable(4) %197)
  %984 = call noundef zeroext i1 @_ZN3cgp8is_equalIfLi3EEEbRKNS_14numarray_stackIT_XT0_EEES5_(ptr noundef nonnull align 4 dereferenceable(12) %192, ptr noundef nonnull align 4 dereferenceable(12) %194)
  %985 = zext i1 %984 to i32
  %986 = icmp eq i32 %985, 0
  call void @llvm.lifetime.end.p0(i64 4, ptr %197) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %196) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %195) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %194) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %192) #9
  br i1 %986, label %987, label %1017

987:                                              ; preds = %981
  call void @llvm.lifetime.start.p0(i64 32, ptr %198) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %199) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %199) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %198, ptr noundef @.str.3, ptr noundef nonnull align 1 dereferenceable(1) %199)
          to label %988 unwind label %993

988:                                              ; preds = %987
  call void @llvm.lifetime.start.p0(i64 32, ptr %200) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %201) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %201) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %200, ptr noundef @.str.1, ptr noundef nonnull align 1 dereferenceable(1) %201)
          to label %989 unwind label %997

989:                                              ; preds = %988
  call void @llvm.lifetime.start.p0(i64 32, ptr %202) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %203) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %203) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %202, ptr noundef @.str.2, ptr noundef nonnull align 1 dereferenceable(1) %203)
          to label %990 unwind label %1001

990:                                              ; preds = %989
  call void @llvm.lifetime.start.p0(i64 32, ptr %204) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %205) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %205) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %204, ptr noundef @__func__._ZN8cgp_test22test_camera_controllerEv, ptr noundef nonnull align 1 dereferenceable(1) %205)
          to label %991 unwind label %1005

991:                                              ; preds = %990
  invoke void @_ZN3cgp10call_errorERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_S7_S7_i(ptr noundef nonnull align 8 dereferenceable(32) %198, ptr noundef nonnull align 8 dereferenceable(32) %200, ptr noundef nonnull align 8 dereferenceable(32) %202, ptr noundef nonnull align 8 dereferenceable(32) %204, i32 noundef 40) #10
          to label %992 unwind label %1009

992:                                              ; preds = %991
  unreachable

993:                                              ; preds = %987
  %994 = landingpad { ptr, i32 }
          cleanup
  %995 = extractvalue { ptr, i32 } %994, 0
  store ptr %995, ptr %22, align 8
  %996 = extractvalue { ptr, i32 } %994, 1
  store i32 %996, ptr %23, align 4
  br label %1016

997:                                              ; preds = %988
  %998 = landingpad { ptr, i32 }
          cleanup
  %999 = extractvalue { ptr, i32 } %998, 0
  store ptr %999, ptr %22, align 8
  %1000 = extractvalue { ptr, i32 } %998, 1
  store i32 %1000, ptr %23, align 4
  br label %1015

1001:                                             ; preds = %989
  %1002 = landingpad { ptr, i32 }
          cleanup
  %1003 = extractvalue { ptr, i32 } %1002, 0
  store ptr %1003, ptr %22, align 8
  %1004 = extractvalue { ptr, i32 } %1002, 1
  store i32 %1004, ptr %23, align 4
  br label %1014

1005:                                             ; preds = %990
  %1006 = landingpad { ptr, i32 }
          cleanup
  %1007 = extractvalue { ptr, i32 } %1006, 0
  store ptr %1007, ptr %22, align 8
  %1008 = extractvalue { ptr, i32 } %1006, 1
  store i32 %1008, ptr %23, align 4
  br label %1013

1009:                                             ; preds = %991
  %1010 = landingpad { ptr, i32 }
          cleanup
  %1011 = extractvalue { ptr, i32 } %1010, 0
  store ptr %1011, ptr %22, align 8
  %1012 = extractvalue { ptr, i32 } %1010, 1
  store i32 %1012, ptr %23, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %204) #9
  br label %1013

1013:                                             ; preds = %1009, %1005
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %205) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %205) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %204) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %202) #9
  br label %1014

1014:                                             ; preds = %1013, %1001
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %203) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %203) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %202) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %200) #9
  br label %1015

1015:                                             ; preds = %1014, %997
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %201) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %201) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %200) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %198) #9
  br label %1016

1016:                                             ; preds = %1015, %993
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %199) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %199) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %198) #9
  br label %1251

1017:                                             ; preds = %981
  call void @llvm.lifetime.start.p0(i64 12, ptr %206) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %207) #9
  store i32 -1, ptr %207, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %208) #9
  store i32 0, ptr %208, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %209) #9
  store i32 0, ptr %209, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %206, ptr noundef nonnull align 4 dereferenceable(4) %207, ptr noundef nonnull align 4 dereferenceable(4) %208, ptr noundef nonnull align 4 dereferenceable(4) %209)
  call void @llvm.lifetime.start.p0(i64 12, ptr %210) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %211) #9
  store i32 0, ptr %211, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %212) #9
  store i32 0, ptr %212, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %213) #9
  store i32 0, ptr %213, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %210, ptr noundef nonnull align 4 dereferenceable(4) %211, ptr noundef nonnull align 4 dereferenceable(4) %212, ptr noundef nonnull align 4 dereferenceable(4) %213)
  call void @llvm.lifetime.start.p0(i64 12, ptr %214) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %215) #9
  store i32 0, ptr %215, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %216) #9
  store i32 0, ptr %216, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %217) #9
  store i32 1, ptr %217, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %214, ptr noundef nonnull align 4 dereferenceable(4) %215, ptr noundef nonnull align 4 dereferenceable(4) %216, ptr noundef nonnull align 4 dereferenceable(4) %217)
  call void @_ZN3cgp29camera_controller_orbit_euler7look_atERKNS_14numarray_stackIfLi3EEES4_S4_(ptr noundef nonnull align 8 dereferenceable(72) %165, ptr noundef nonnull align 4 dereferenceable(12) %206, ptr noundef nonnull align 4 dereferenceable(12) %210, ptr noundef nonnull align 4 dereferenceable(12) %214)
  call void @llvm.lifetime.end.p0(i64 4, ptr %217) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %216) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %215) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %214) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %213) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %212) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %211) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %210) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %209) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %208) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %207) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %206) #9
  call void @llvm.lifetime.start.p0(i64 12, ptr %218) #9
  %1018 = getelementptr inbounds %"struct.cgp::camera_controller_orbit_euler", ptr %165, i32 0, i32 1
  %1019 = call { <2 x float>, float } @_ZNK3cgp19camera_generic_base5frontEv(ptr noundef nonnull align 8 dereferenceable(8) %1018)
  store { <2 x float>, float } %1019, ptr %219, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %218, ptr align 8 %219, i64 12, i1 false)
  call void @llvm.lifetime.start.p0(i64 12, ptr %220) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %221) #9
  store i32 1, ptr %221, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %222) #9
  store i32 0, ptr %222, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %223) #9
  store i32 0, ptr %223, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %220, ptr noundef nonnull align 4 dereferenceable(4) %221, ptr noundef nonnull align 4 dereferenceable(4) %222, ptr noundef nonnull align 4 dereferenceable(4) %223)
  %1020 = call noundef zeroext i1 @_ZN3cgp8is_equalIfLi3EEEbRKNS_14numarray_stackIT_XT0_EEES5_(ptr noundef nonnull align 4 dereferenceable(12) %218, ptr noundef nonnull align 4 dereferenceable(12) %220)
  %1021 = zext i1 %1020 to i32
  %1022 = icmp eq i32 %1021, 0
  call void @llvm.lifetime.end.p0(i64 4, ptr %223) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %222) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %221) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %220) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %218) #9
  br i1 %1022, label %1023, label %1053

1023:                                             ; preds = %1017
  call void @llvm.lifetime.start.p0(i64 32, ptr %224) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %225) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %225) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %224, ptr noundef @.str.4, ptr noundef nonnull align 1 dereferenceable(1) %225)
          to label %1024 unwind label %1029

1024:                                             ; preds = %1023
  call void @llvm.lifetime.start.p0(i64 32, ptr %226) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %227) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %227) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %226, ptr noundef @.str.1, ptr noundef nonnull align 1 dereferenceable(1) %227)
          to label %1025 unwind label %1033

1025:                                             ; preds = %1024
  call void @llvm.lifetime.start.p0(i64 32, ptr %228) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %229) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %229) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %228, ptr noundef @.str.2, ptr noundef nonnull align 1 dereferenceable(1) %229)
          to label %1026 unwind label %1037

1026:                                             ; preds = %1025
  call void @llvm.lifetime.start.p0(i64 32, ptr %230) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %231) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %231) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %230, ptr noundef @__func__._ZN8cgp_test22test_camera_controllerEv, ptr noundef nonnull align 1 dereferenceable(1) %231)
          to label %1027 unwind label %1041

1027:                                             ; preds = %1026
  invoke void @_ZN3cgp10call_errorERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_S7_S7_i(ptr noundef nonnull align 8 dereferenceable(32) %224, ptr noundef nonnull align 8 dereferenceable(32) %226, ptr noundef nonnull align 8 dereferenceable(32) %228, ptr noundef nonnull align 8 dereferenceable(32) %230, i32 noundef 43) #10
          to label %1028 unwind label %1045

1028:                                             ; preds = %1027
  unreachable

1029:                                             ; preds = %1023
  %1030 = landingpad { ptr, i32 }
          cleanup
  %1031 = extractvalue { ptr, i32 } %1030, 0
  store ptr %1031, ptr %22, align 8
  %1032 = extractvalue { ptr, i32 } %1030, 1
  store i32 %1032, ptr %23, align 4
  br label %1052

1033:                                             ; preds = %1024
  %1034 = landingpad { ptr, i32 }
          cleanup
  %1035 = extractvalue { ptr, i32 } %1034, 0
  store ptr %1035, ptr %22, align 8
  %1036 = extractvalue { ptr, i32 } %1034, 1
  store i32 %1036, ptr %23, align 4
  br label %1051

1037:                                             ; preds = %1025
  %1038 = landingpad { ptr, i32 }
          cleanup
  %1039 = extractvalue { ptr, i32 } %1038, 0
  store ptr %1039, ptr %22, align 8
  %1040 = extractvalue { ptr, i32 } %1038, 1
  store i32 %1040, ptr %23, align 4
  br label %1050

1041:                                             ; preds = %1026
  %1042 = landingpad { ptr, i32 }
          cleanup
  %1043 = extractvalue { ptr, i32 } %1042, 0
  store ptr %1043, ptr %22, align 8
  %1044 = extractvalue { ptr, i32 } %1042, 1
  store i32 %1044, ptr %23, align 4
  br label %1049

1045:                                             ; preds = %1027
  %1046 = landingpad { ptr, i32 }
          cleanup
  %1047 = extractvalue { ptr, i32 } %1046, 0
  store ptr %1047, ptr %22, align 8
  %1048 = extractvalue { ptr, i32 } %1046, 1
  store i32 %1048, ptr %23, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %230) #9
  br label %1049

1049:                                             ; preds = %1045, %1041
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %231) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %231) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %230) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %228) #9
  br label %1050

1050:                                             ; preds = %1049, %1037
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %229) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %229) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %228) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %226) #9
  br label %1051

1051:                                             ; preds = %1050, %1033
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %227) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %227) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %226) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %224) #9
  br label %1052

1052:                                             ; preds = %1051, %1029
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %225) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %225) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %224) #9
  br label %1251

1053:                                             ; preds = %1017
  call void @llvm.lifetime.start.p0(i64 12, ptr %232) #9
  %1054 = getelementptr inbounds %"struct.cgp::camera_controller_orbit_euler", ptr %165, i32 0, i32 1
  %1055 = call { <2 x float>, float } @_ZNK3cgp18camera_orbit_euler8positionEv(ptr noundef nonnull align 8 dereferenceable(48) %1054)
  store { <2 x float>, float } %1055, ptr %233, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %232, ptr align 8 %233, i64 12, i1 false)
  call void @llvm.lifetime.start.p0(i64 12, ptr %234) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %235) #9
  store i32 -1, ptr %235, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %236) #9
  store i32 0, ptr %236, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %237) #9
  store i32 0, ptr %237, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %234, ptr noundef nonnull align 4 dereferenceable(4) %235, ptr noundef nonnull align 4 dereferenceable(4) %236, ptr noundef nonnull align 4 dereferenceable(4) %237)
  %1056 = call noundef zeroext i1 @_ZN3cgp8is_equalIfLi3EEEbRKNS_14numarray_stackIT_XT0_EEES5_(ptr noundef nonnull align 4 dereferenceable(12) %232, ptr noundef nonnull align 4 dereferenceable(12) %234)
  %1057 = zext i1 %1056 to i32
  %1058 = icmp eq i32 %1057, 0
  call void @llvm.lifetime.end.p0(i64 4, ptr %237) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %236) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %235) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %234) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %232) #9
  br i1 %1058, label %1059, label %1089

1059:                                             ; preds = %1053
  call void @llvm.lifetime.start.p0(i64 32, ptr %238) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %239) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %239) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %238, ptr noundef @.str.5, ptr noundef nonnull align 1 dereferenceable(1) %239)
          to label %1060 unwind label %1065

1060:                                             ; preds = %1059
  call void @llvm.lifetime.start.p0(i64 32, ptr %240) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %241) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %241) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %240, ptr noundef @.str.1, ptr noundef nonnull align 1 dereferenceable(1) %241)
          to label %1061 unwind label %1069

1061:                                             ; preds = %1060
  call void @llvm.lifetime.start.p0(i64 32, ptr %242) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %243) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %243) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %242, ptr noundef @.str.2, ptr noundef nonnull align 1 dereferenceable(1) %243)
          to label %1062 unwind label %1073

1062:                                             ; preds = %1061
  call void @llvm.lifetime.start.p0(i64 32, ptr %244) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %245) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %245) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %244, ptr noundef @__func__._ZN8cgp_test22test_camera_controllerEv, ptr noundef nonnull align 1 dereferenceable(1) %245)
          to label %1063 unwind label %1077

1063:                                             ; preds = %1062
  invoke void @_ZN3cgp10call_errorERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_S7_S7_i(ptr noundef nonnull align 8 dereferenceable(32) %238, ptr noundef nonnull align 8 dereferenceable(32) %240, ptr noundef nonnull align 8 dereferenceable(32) %242, ptr noundef nonnull align 8 dereferenceable(32) %244, i32 noundef 44) #10
          to label %1064 unwind label %1081

1064:                                             ; preds = %1063
  unreachable

1065:                                             ; preds = %1059
  %1066 = landingpad { ptr, i32 }
          cleanup
  %1067 = extractvalue { ptr, i32 } %1066, 0
  store ptr %1067, ptr %22, align 8
  %1068 = extractvalue { ptr, i32 } %1066, 1
  store i32 %1068, ptr %23, align 4
  br label %1088

1069:                                             ; preds = %1060
  %1070 = landingpad { ptr, i32 }
          cleanup
  %1071 = extractvalue { ptr, i32 } %1070, 0
  store ptr %1071, ptr %22, align 8
  %1072 = extractvalue { ptr, i32 } %1070, 1
  store i32 %1072, ptr %23, align 4
  br label %1087

1073:                                             ; preds = %1061
  %1074 = landingpad { ptr, i32 }
          cleanup
  %1075 = extractvalue { ptr, i32 } %1074, 0
  store ptr %1075, ptr %22, align 8
  %1076 = extractvalue { ptr, i32 } %1074, 1
  store i32 %1076, ptr %23, align 4
  br label %1086

1077:                                             ; preds = %1062
  %1078 = landingpad { ptr, i32 }
          cleanup
  %1079 = extractvalue { ptr, i32 } %1078, 0
  store ptr %1079, ptr %22, align 8
  %1080 = extractvalue { ptr, i32 } %1078, 1
  store i32 %1080, ptr %23, align 4
  br label %1085

1081:                                             ; preds = %1063
  %1082 = landingpad { ptr, i32 }
          cleanup
  %1083 = extractvalue { ptr, i32 } %1082, 0
  store ptr %1083, ptr %22, align 8
  %1084 = extractvalue { ptr, i32 } %1082, 1
  store i32 %1084, ptr %23, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %244) #9
  br label %1085

1085:                                             ; preds = %1081, %1077
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %245) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %245) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %244) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %242) #9
  br label %1086

1086:                                             ; preds = %1085, %1073
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %243) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %243) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %242) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %240) #9
  br label %1087

1087:                                             ; preds = %1086, %1069
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %241) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %241) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %240) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %238) #9
  br label %1088

1088:                                             ; preds = %1087, %1065
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %239) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %239) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %238) #9
  br label %1251

1089:                                             ; preds = %1053
  call void @llvm.lifetime.start.p0(i64 12, ptr %246) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %247) #9
  store i32 0, ptr %247, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %248) #9
  store i32 1, ptr %248, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %249) #9
  store i32 0, ptr %249, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %246, ptr noundef nonnull align 4 dereferenceable(4) %247, ptr noundef nonnull align 4 dereferenceable(4) %248, ptr noundef nonnull align 4 dereferenceable(4) %249)
  call void @llvm.lifetime.start.p0(i64 12, ptr %250) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %251) #9
  store i32 0, ptr %251, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %252) #9
  store i32 0, ptr %252, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %253) #9
  store i32 0, ptr %253, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %250, ptr noundef nonnull align 4 dereferenceable(4) %251, ptr noundef nonnull align 4 dereferenceable(4) %252, ptr noundef nonnull align 4 dereferenceable(4) %253)
  call void @llvm.lifetime.start.p0(i64 12, ptr %254) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %255) #9
  store i32 0, ptr %255, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %256) #9
  store i32 0, ptr %256, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %257) #9
  store i32 1, ptr %257, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %254, ptr noundef nonnull align 4 dereferenceable(4) %255, ptr noundef nonnull align 4 dereferenceable(4) %256, ptr noundef nonnull align 4 dereferenceable(4) %257)
  call void @_ZN3cgp29camera_controller_orbit_euler7look_atERKNS_14numarray_stackIfLi3EEES4_S4_(ptr noundef nonnull align 8 dereferenceable(72) %165, ptr noundef nonnull align 4 dereferenceable(12) %246, ptr noundef nonnull align 4 dereferenceable(12) %250, ptr noundef nonnull align 4 dereferenceable(12) %254)
  call void @llvm.lifetime.end.p0(i64 4, ptr %257) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %256) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %255) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %254) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %253) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %252) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %251) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %250) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %249) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %248) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %247) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %246) #9
  call void @llvm.lifetime.start.p0(i64 12, ptr %258) #9
  %1090 = getelementptr inbounds %"struct.cgp::camera_controller_orbit_euler", ptr %165, i32 0, i32 1
  %1091 = call { <2 x float>, float } @_ZNK3cgp19camera_generic_base5frontEv(ptr noundef nonnull align 8 dereferenceable(8) %1090)
  store { <2 x float>, float } %1091, ptr %259, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %258, ptr align 8 %259, i64 12, i1 false)
  call void @llvm.lifetime.start.p0(i64 12, ptr %260) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %261) #9
  store i32 0, ptr %261, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %262) #9
  store i32 -1, ptr %262, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %263) #9
  store i32 0, ptr %263, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %260, ptr noundef nonnull align 4 dereferenceable(4) %261, ptr noundef nonnull align 4 dereferenceable(4) %262, ptr noundef nonnull align 4 dereferenceable(4) %263)
  %1092 = call noundef zeroext i1 @_ZN3cgp8is_equalIfLi3EEEbRKNS_14numarray_stackIT_XT0_EEES5_(ptr noundef nonnull align 4 dereferenceable(12) %258, ptr noundef nonnull align 4 dereferenceable(12) %260)
  %1093 = zext i1 %1092 to i32
  %1094 = icmp eq i32 %1093, 0
  call void @llvm.lifetime.end.p0(i64 4, ptr %263) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %262) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %261) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %260) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %258) #9
  br i1 %1094, label %1095, label %1125

1095:                                             ; preds = %1089
  call void @llvm.lifetime.start.p0(i64 32, ptr %264) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %265) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %265) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %264, ptr noundef @.str.6, ptr noundef nonnull align 1 dereferenceable(1) %265)
          to label %1096 unwind label %1101

1096:                                             ; preds = %1095
  call void @llvm.lifetime.start.p0(i64 32, ptr %266) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %267) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %267) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %266, ptr noundef @.str.1, ptr noundef nonnull align 1 dereferenceable(1) %267)
          to label %1097 unwind label %1105

1097:                                             ; preds = %1096
  call void @llvm.lifetime.start.p0(i64 32, ptr %268) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %269) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %269) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %268, ptr noundef @.str.2, ptr noundef nonnull align 1 dereferenceable(1) %269)
          to label %1098 unwind label %1109

1098:                                             ; preds = %1097
  call void @llvm.lifetime.start.p0(i64 32, ptr %270) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %271) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %271) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %270, ptr noundef @__func__._ZN8cgp_test22test_camera_controllerEv, ptr noundef nonnull align 1 dereferenceable(1) %271)
          to label %1099 unwind label %1113

1099:                                             ; preds = %1098
  invoke void @_ZN3cgp10call_errorERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_S7_S7_i(ptr noundef nonnull align 8 dereferenceable(32) %264, ptr noundef nonnull align 8 dereferenceable(32) %266, ptr noundef nonnull align 8 dereferenceable(32) %268, ptr noundef nonnull align 8 dereferenceable(32) %270, i32 noundef 47) #10
          to label %1100 unwind label %1117

1100:                                             ; preds = %1099
  unreachable

1101:                                             ; preds = %1095
  %1102 = landingpad { ptr, i32 }
          cleanup
  %1103 = extractvalue { ptr, i32 } %1102, 0
  store ptr %1103, ptr %22, align 8
  %1104 = extractvalue { ptr, i32 } %1102, 1
  store i32 %1104, ptr %23, align 4
  br label %1124

1105:                                             ; preds = %1096
  %1106 = landingpad { ptr, i32 }
          cleanup
  %1107 = extractvalue { ptr, i32 } %1106, 0
  store ptr %1107, ptr %22, align 8
  %1108 = extractvalue { ptr, i32 } %1106, 1
  store i32 %1108, ptr %23, align 4
  br label %1123

1109:                                             ; preds = %1097
  %1110 = landingpad { ptr, i32 }
          cleanup
  %1111 = extractvalue { ptr, i32 } %1110, 0
  store ptr %1111, ptr %22, align 8
  %1112 = extractvalue { ptr, i32 } %1110, 1
  store i32 %1112, ptr %23, align 4
  br label %1122

1113:                                             ; preds = %1098
  %1114 = landingpad { ptr, i32 }
          cleanup
  %1115 = extractvalue { ptr, i32 } %1114, 0
  store ptr %1115, ptr %22, align 8
  %1116 = extractvalue { ptr, i32 } %1114, 1
  store i32 %1116, ptr %23, align 4
  br label %1121

1117:                                             ; preds = %1099
  %1118 = landingpad { ptr, i32 }
          cleanup
  %1119 = extractvalue { ptr, i32 } %1118, 0
  store ptr %1119, ptr %22, align 8
  %1120 = extractvalue { ptr, i32 } %1118, 1
  store i32 %1120, ptr %23, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %270) #9
  br label %1121

1121:                                             ; preds = %1117, %1113
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %271) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %271) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %270) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %268) #9
  br label %1122

1122:                                             ; preds = %1121, %1109
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %269) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %269) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %268) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %266) #9
  br label %1123

1123:                                             ; preds = %1122, %1105
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %267) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %267) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %266) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %264) #9
  br label %1124

1124:                                             ; preds = %1123, %1101
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %265) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %265) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %264) #9
  br label %1251

1125:                                             ; preds = %1089
  call void @llvm.lifetime.start.p0(i64 12, ptr %272) #9
  %1126 = getelementptr inbounds %"struct.cgp::camera_controller_orbit_euler", ptr %165, i32 0, i32 1
  %1127 = call { <2 x float>, float } @_ZNK3cgp18camera_orbit_euler8positionEv(ptr noundef nonnull align 8 dereferenceable(48) %1126)
  store { <2 x float>, float } %1127, ptr %273, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %272, ptr align 8 %273, i64 12, i1 false)
  call void @llvm.lifetime.start.p0(i64 12, ptr %274) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %275) #9
  store i32 0, ptr %275, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %276) #9
  store i32 1, ptr %276, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %277) #9
  store i32 0, ptr %277, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %274, ptr noundef nonnull align 4 dereferenceable(4) %275, ptr noundef nonnull align 4 dereferenceable(4) %276, ptr noundef nonnull align 4 dereferenceable(4) %277)
  %1128 = call noundef zeroext i1 @_ZN3cgp8is_equalIfLi3EEEbRKNS_14numarray_stackIT_XT0_EEES5_(ptr noundef nonnull align 4 dereferenceable(12) %272, ptr noundef nonnull align 4 dereferenceable(12) %274)
  %1129 = zext i1 %1128 to i32
  %1130 = icmp eq i32 %1129, 0
  call void @llvm.lifetime.end.p0(i64 4, ptr %277) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %276) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %275) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %274) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %272) #9
  br i1 %1130, label %1131, label %1161

1131:                                             ; preds = %1125
  call void @llvm.lifetime.start.p0(i64 32, ptr %278) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %279) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %279) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %278, ptr noundef @.str.7, ptr noundef nonnull align 1 dereferenceable(1) %279)
          to label %1132 unwind label %1137

1132:                                             ; preds = %1131
  call void @llvm.lifetime.start.p0(i64 32, ptr %280) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %281) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %281) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %280, ptr noundef @.str.1, ptr noundef nonnull align 1 dereferenceable(1) %281)
          to label %1133 unwind label %1141

1133:                                             ; preds = %1132
  call void @llvm.lifetime.start.p0(i64 32, ptr %282) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %283) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %283) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %282, ptr noundef @.str.2, ptr noundef nonnull align 1 dereferenceable(1) %283)
          to label %1134 unwind label %1145

1134:                                             ; preds = %1133
  call void @llvm.lifetime.start.p0(i64 32, ptr %284) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %285) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %285) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %284, ptr noundef @__func__._ZN8cgp_test22test_camera_controllerEv, ptr noundef nonnull align 1 dereferenceable(1) %285)
          to label %1135 unwind label %1149

1135:                                             ; preds = %1134
  invoke void @_ZN3cgp10call_errorERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_S7_S7_i(ptr noundef nonnull align 8 dereferenceable(32) %278, ptr noundef nonnull align 8 dereferenceable(32) %280, ptr noundef nonnull align 8 dereferenceable(32) %282, ptr noundef nonnull align 8 dereferenceable(32) %284, i32 noundef 48) #10
          to label %1136 unwind label %1153

1136:                                             ; preds = %1135
  unreachable

1137:                                             ; preds = %1131
  %1138 = landingpad { ptr, i32 }
          cleanup
  %1139 = extractvalue { ptr, i32 } %1138, 0
  store ptr %1139, ptr %22, align 8
  %1140 = extractvalue { ptr, i32 } %1138, 1
  store i32 %1140, ptr %23, align 4
  br label %1160

1141:                                             ; preds = %1132
  %1142 = landingpad { ptr, i32 }
          cleanup
  %1143 = extractvalue { ptr, i32 } %1142, 0
  store ptr %1143, ptr %22, align 8
  %1144 = extractvalue { ptr, i32 } %1142, 1
  store i32 %1144, ptr %23, align 4
  br label %1159

1145:                                             ; preds = %1133
  %1146 = landingpad { ptr, i32 }
          cleanup
  %1147 = extractvalue { ptr, i32 } %1146, 0
  store ptr %1147, ptr %22, align 8
  %1148 = extractvalue { ptr, i32 } %1146, 1
  store i32 %1148, ptr %23, align 4
  br label %1158

1149:                                             ; preds = %1134
  %1150 = landingpad { ptr, i32 }
          cleanup
  %1151 = extractvalue { ptr, i32 } %1150, 0
  store ptr %1151, ptr %22, align 8
  %1152 = extractvalue { ptr, i32 } %1150, 1
  store i32 %1152, ptr %23, align 4
  br label %1157

1153:                                             ; preds = %1135
  %1154 = landingpad { ptr, i32 }
          cleanup
  %1155 = extractvalue { ptr, i32 } %1154, 0
  store ptr %1155, ptr %22, align 8
  %1156 = extractvalue { ptr, i32 } %1154, 1
  store i32 %1156, ptr %23, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %284) #9
  br label %1157

1157:                                             ; preds = %1153, %1149
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %285) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %285) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %284) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %282) #9
  br label %1158

1158:                                             ; preds = %1157, %1145
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %283) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %283) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %282) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %280) #9
  br label %1159

1159:                                             ; preds = %1158, %1141
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %281) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %281) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %280) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %278) #9
  br label %1160

1160:                                             ; preds = %1159, %1137
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %279) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %279) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %278) #9
  br label %1251

1161:                                             ; preds = %1125
  call void @llvm.lifetime.start.p0(i64 4, ptr %286) #9
  %1162 = call noundef float @_ZSt4sqrtf(float noundef 2.000000e+00)
  store float %1162, ptr %286, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 12, ptr %287) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %288) #9
  store i32 1, ptr %288, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %289) #9
  store i32 1, ptr %289, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %290) #9
  store i32 0, ptr %290, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %287, ptr noundef nonnull align 4 dereferenceable(4) %288, ptr noundef nonnull align 4 dereferenceable(4) %289, ptr noundef nonnull align 4 dereferenceable(4) %290)
  call void @llvm.lifetime.start.p0(i64 12, ptr %291) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %292) #9
  store i32 0, ptr %292, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %293) #9
  store i32 0, ptr %293, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %294) #9
  store i32 0, ptr %294, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %291, ptr noundef nonnull align 4 dereferenceable(4) %292, ptr noundef nonnull align 4 dereferenceable(4) %293, ptr noundef nonnull align 4 dereferenceable(4) %294)
  call void @llvm.lifetime.start.p0(i64 12, ptr %295) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %296) #9
  store i32 0, ptr %296, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %297) #9
  store i32 0, ptr %297, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %298) #9
  store i32 1, ptr %298, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %295, ptr noundef nonnull align 4 dereferenceable(4) %296, ptr noundef nonnull align 4 dereferenceable(4) %297, ptr noundef nonnull align 4 dereferenceable(4) %298)
  call void @_ZN3cgp29camera_controller_orbit_euler7look_atERKNS_14numarray_stackIfLi3EEES4_S4_(ptr noundef nonnull align 8 dereferenceable(72) %165, ptr noundef nonnull align 4 dereferenceable(12) %287, ptr noundef nonnull align 4 dereferenceable(12) %291, ptr noundef nonnull align 4 dereferenceable(12) %295)
  call void @llvm.lifetime.end.p0(i64 4, ptr %298) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %297) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %296) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %295) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %294) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %293) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %292) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %291) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %290) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %289) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %288) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %287) #9
  call void @llvm.lifetime.start.p0(i64 12, ptr %299) #9
  %1163 = getelementptr inbounds %"struct.cgp::camera_controller_orbit_euler", ptr %165, i32 0, i32 1
  %1164 = call { <2 x float>, float } @_ZNK3cgp19camera_generic_base5frontEv(ptr noundef nonnull align 8 dereferenceable(8) %1163)
  store { <2 x float>, float } %1164, ptr %300, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %299, ptr align 8 %300, i64 12, i1 false)
  call void @llvm.lifetime.start.p0(i64 12, ptr %301) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %302) #9
  %1165 = load float, ptr %286, align 4, !tbaa !9
  %1166 = fdiv float -1.000000e+00, %1165
  store float %1166, ptr %302, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %303) #9
  %1167 = load float, ptr %286, align 4, !tbaa !9
  %1168 = fdiv float -1.000000e+00, %1167
  store float %1168, ptr %303, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %304) #9
  store i32 0, ptr %304, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IffiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %301, ptr noundef nonnull align 4 dereferenceable(4) %302, ptr noundef nonnull align 4 dereferenceable(4) %303, ptr noundef nonnull align 4 dereferenceable(4) %304)
  %1169 = call noundef zeroext i1 @_ZN3cgp8is_equalIfLi3EEEbRKNS_14numarray_stackIT_XT0_EEES5_(ptr noundef nonnull align 4 dereferenceable(12) %299, ptr noundef nonnull align 4 dereferenceable(12) %301)
  %1170 = zext i1 %1169 to i32
  %1171 = icmp eq i32 %1170, 0
  call void @llvm.lifetime.end.p0(i64 4, ptr %304) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %303) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %302) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %301) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %299) #9
  br i1 %1171, label %1172, label %1202

1172:                                             ; preds = %1161
  call void @llvm.lifetime.start.p0(i64 32, ptr %305) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %306) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %306) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %305, ptr noundef @.str.11, ptr noundef nonnull align 1 dereferenceable(1) %306)
          to label %1173 unwind label %1178

1173:                                             ; preds = %1172
  call void @llvm.lifetime.start.p0(i64 32, ptr %307) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %308) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %308) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %307, ptr noundef @.str.1, ptr noundef nonnull align 1 dereferenceable(1) %308)
          to label %1174 unwind label %1182

1174:                                             ; preds = %1173
  call void @llvm.lifetime.start.p0(i64 32, ptr %309) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %310) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %310) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %309, ptr noundef @.str.2, ptr noundef nonnull align 1 dereferenceable(1) %310)
          to label %1175 unwind label %1186

1175:                                             ; preds = %1174
  call void @llvm.lifetime.start.p0(i64 32, ptr %311) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %312) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %312) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %311, ptr noundef @__func__._ZN8cgp_test22test_camera_controllerEv, ptr noundef nonnull align 1 dereferenceable(1) %312)
          to label %1176 unwind label %1190

1176:                                             ; preds = %1175
  invoke void @_ZN3cgp10call_errorERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_S7_S7_i(ptr noundef nonnull align 8 dereferenceable(32) %305, ptr noundef nonnull align 8 dereferenceable(32) %307, ptr noundef nonnull align 8 dereferenceable(32) %309, ptr noundef nonnull align 8 dereferenceable(32) %311, i32 noundef 52) #10
          to label %1177 unwind label %1194

1177:                                             ; preds = %1176
  unreachable

1178:                                             ; preds = %1172
  %1179 = landingpad { ptr, i32 }
          cleanup
  %1180 = extractvalue { ptr, i32 } %1179, 0
  store ptr %1180, ptr %22, align 8
  %1181 = extractvalue { ptr, i32 } %1179, 1
  store i32 %1181, ptr %23, align 4
  br label %1201

1182:                                             ; preds = %1173
  %1183 = landingpad { ptr, i32 }
          cleanup
  %1184 = extractvalue { ptr, i32 } %1183, 0
  store ptr %1184, ptr %22, align 8
  %1185 = extractvalue { ptr, i32 } %1183, 1
  store i32 %1185, ptr %23, align 4
  br label %1200

1186:                                             ; preds = %1174
  %1187 = landingpad { ptr, i32 }
          cleanup
  %1188 = extractvalue { ptr, i32 } %1187, 0
  store ptr %1188, ptr %22, align 8
  %1189 = extractvalue { ptr, i32 } %1187, 1
  store i32 %1189, ptr %23, align 4
  br label %1199

1190:                                             ; preds = %1175
  %1191 = landingpad { ptr, i32 }
          cleanup
  %1192 = extractvalue { ptr, i32 } %1191, 0
  store ptr %1192, ptr %22, align 8
  %1193 = extractvalue { ptr, i32 } %1191, 1
  store i32 %1193, ptr %23, align 4
  br label %1198

1194:                                             ; preds = %1176
  %1195 = landingpad { ptr, i32 }
          cleanup
  %1196 = extractvalue { ptr, i32 } %1195, 0
  store ptr %1196, ptr %22, align 8
  %1197 = extractvalue { ptr, i32 } %1195, 1
  store i32 %1197, ptr %23, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %311) #9
  br label %1198

1198:                                             ; preds = %1194, %1190
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %312) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %312) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %311) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %309) #9
  br label %1199

1199:                                             ; preds = %1198, %1186
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %310) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %310) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %309) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %307) #9
  br label %1200

1200:                                             ; preds = %1199, %1182
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %308) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %308) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %307) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %305) #9
  br label %1201

1201:                                             ; preds = %1200, %1178
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %306) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %306) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %305) #9
  br label %1250

1202:                                             ; preds = %1161
  call void @llvm.lifetime.start.p0(i64 12, ptr %313) #9
  %1203 = getelementptr inbounds %"struct.cgp::camera_controller_orbit_euler", ptr %165, i32 0, i32 1
  %1204 = call { <2 x float>, float } @_ZNK3cgp18camera_orbit_euler8positionEv(ptr noundef nonnull align 8 dereferenceable(48) %1203)
  store { <2 x float>, float } %1204, ptr %314, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %313, ptr align 8 %314, i64 12, i1 false)
  call void @llvm.lifetime.start.p0(i64 12, ptr %315) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %316) #9
  store i32 1, ptr %316, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %317) #9
  store i32 1, ptr %317, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %318) #9
  store i32 0, ptr %318, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %315, ptr noundef nonnull align 4 dereferenceable(4) %316, ptr noundef nonnull align 4 dereferenceable(4) %317, ptr noundef nonnull align 4 dereferenceable(4) %318)
  %1205 = call noundef zeroext i1 @_ZN3cgp8is_equalIfLi3EEEbRKNS_14numarray_stackIT_XT0_EEES5_(ptr noundef nonnull align 4 dereferenceable(12) %313, ptr noundef nonnull align 4 dereferenceable(12) %315)
  %1206 = zext i1 %1205 to i32
  %1207 = icmp eq i32 %1206, 0
  call void @llvm.lifetime.end.p0(i64 4, ptr %318) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %317) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %316) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %315) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %313) #9
  br i1 %1207, label %1208, label %1238

1208:                                             ; preds = %1202
  call void @llvm.lifetime.start.p0(i64 32, ptr %319) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %320) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %320) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %319, ptr noundef @.str.9, ptr noundef nonnull align 1 dereferenceable(1) %320)
          to label %1209 unwind label %1214

1209:                                             ; preds = %1208
  call void @llvm.lifetime.start.p0(i64 32, ptr %321) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %322) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %322) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %321, ptr noundef @.str.1, ptr noundef nonnull align 1 dereferenceable(1) %322)
          to label %1210 unwind label %1218

1210:                                             ; preds = %1209
  call void @llvm.lifetime.start.p0(i64 32, ptr %323) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %324) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %324) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %323, ptr noundef @.str.2, ptr noundef nonnull align 1 dereferenceable(1) %324)
          to label %1211 unwind label %1222

1211:                                             ; preds = %1210
  call void @llvm.lifetime.start.p0(i64 32, ptr %325) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %326) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %326) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %325, ptr noundef @__func__._ZN8cgp_test22test_camera_controllerEv, ptr noundef nonnull align 1 dereferenceable(1) %326)
          to label %1212 unwind label %1226

1212:                                             ; preds = %1211
  invoke void @_ZN3cgp10call_errorERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_S7_S7_i(ptr noundef nonnull align 8 dereferenceable(32) %319, ptr noundef nonnull align 8 dereferenceable(32) %321, ptr noundef nonnull align 8 dereferenceable(32) %323, ptr noundef nonnull align 8 dereferenceable(32) %325, i32 noundef 53) #10
          to label %1213 unwind label %1230

1213:                                             ; preds = %1212
  unreachable

1214:                                             ; preds = %1208
  %1215 = landingpad { ptr, i32 }
          cleanup
  %1216 = extractvalue { ptr, i32 } %1215, 0
  store ptr %1216, ptr %22, align 8
  %1217 = extractvalue { ptr, i32 } %1215, 1
  store i32 %1217, ptr %23, align 4
  br label %1237

1218:                                             ; preds = %1209
  %1219 = landingpad { ptr, i32 }
          cleanup
  %1220 = extractvalue { ptr, i32 } %1219, 0
  store ptr %1220, ptr %22, align 8
  %1221 = extractvalue { ptr, i32 } %1219, 1
  store i32 %1221, ptr %23, align 4
  br label %1236

1222:                                             ; preds = %1210
  %1223 = landingpad { ptr, i32 }
          cleanup
  %1224 = extractvalue { ptr, i32 } %1223, 0
  store ptr %1224, ptr %22, align 8
  %1225 = extractvalue { ptr, i32 } %1223, 1
  store i32 %1225, ptr %23, align 4
  br label %1235

1226:                                             ; preds = %1211
  %1227 = landingpad { ptr, i32 }
          cleanup
  %1228 = extractvalue { ptr, i32 } %1227, 0
  store ptr %1228, ptr %22, align 8
  %1229 = extractvalue { ptr, i32 } %1227, 1
  store i32 %1229, ptr %23, align 4
  br label %1234

1230:                                             ; preds = %1212
  %1231 = landingpad { ptr, i32 }
          cleanup
  %1232 = extractvalue { ptr, i32 } %1231, 0
  store ptr %1232, ptr %22, align 8
  %1233 = extractvalue { ptr, i32 } %1231, 1
  store i32 %1233, ptr %23, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %325) #9
  br label %1234

1234:                                             ; preds = %1230, %1226
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %326) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %326) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %325) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %323) #9
  br label %1235

1235:                                             ; preds = %1234, %1222
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %324) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %324) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %323) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %321) #9
  br label %1236

1236:                                             ; preds = %1235, %1218
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %322) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %322) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %321) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %319) #9
  br label %1237

1237:                                             ; preds = %1236, %1214
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %320) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %320) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %319) #9
  br label %1250

1238:                                             ; preds = %1202
  call void @llvm.lifetime.end.p0(i64 4, ptr %286) #9
  call void @llvm.lifetime.end.p0(i64 72, ptr %165) #9
  call void @llvm.lifetime.start.p0(i64 80, ptr %327) #9
  call void @_ZN3cgp30camera_controller_first_personC2Ev(ptr noundef nonnull align 8 dereferenceable(73) %327)
  call void @llvm.lifetime.start.p0(i64 12, ptr %328) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %329) #9
  store i32 1, ptr %329, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %330) #9
  store i32 0, ptr %330, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %331) #9
  store i32 0, ptr %331, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %328, ptr noundef nonnull align 4 dereferenceable(4) %329, ptr noundef nonnull align 4 dereferenceable(4) %330, ptr noundef nonnull align 4 dereferenceable(4) %331)
  call void @llvm.lifetime.start.p0(i64 12, ptr %332) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %333) #9
  store i32 0, ptr %333, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %334) #9
  store i32 0, ptr %334, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %335) #9
  store i32 0, ptr %335, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %332, ptr noundef nonnull align 4 dereferenceable(4) %333, ptr noundef nonnull align 4 dereferenceable(4) %334, ptr noundef nonnull align 4 dereferenceable(4) %335)
  call void @llvm.lifetime.start.p0(i64 12, ptr %336) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %337) #9
  store i32 0, ptr %337, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %338) #9
  store i32 0, ptr %338, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %339) #9
  store i32 1, ptr %339, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %336, ptr noundef nonnull align 4 dereferenceable(4) %337, ptr noundef nonnull align 4 dereferenceable(4) %338, ptr noundef nonnull align 4 dereferenceable(4) %339)
  call void @_ZN3cgp30camera_controller_first_person7look_atERKNS_14numarray_stackIfLi3EEES4_S4_(ptr noundef nonnull align 8 dereferenceable(73) %327, ptr noundef nonnull align 4 dereferenceable(12) %328, ptr noundef nonnull align 4 dereferenceable(12) %332, ptr noundef nonnull align 4 dereferenceable(12) %336)
  call void @llvm.lifetime.end.p0(i64 4, ptr %339) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %338) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %337) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %336) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %335) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %334) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %333) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %332) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %331) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %330) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %329) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %328) #9
  call void @llvm.lifetime.start.p0(i64 12, ptr %340) #9
  %1239 = getelementptr inbounds %"struct.cgp::camera_controller_first_person", ptr %327, i32 0, i32 1
  %1240 = call { <2 x float>, float } @_ZNK3cgp19camera_generic_base5frontEv(ptr noundef nonnull align 8 dereferenceable(8) %1239)
  store { <2 x float>, float } %1240, ptr %341, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %340, ptr align 8 %341, i64 12, i1 false)
  call void @llvm.lifetime.start.p0(i64 12, ptr %342) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %343) #9
  store i32 -1, ptr %343, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %344) #9
  store i32 0, ptr %344, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %345) #9
  store i32 0, ptr %345, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %342, ptr noundef nonnull align 4 dereferenceable(4) %343, ptr noundef nonnull align 4 dereferenceable(4) %344, ptr noundef nonnull align 4 dereferenceable(4) %345)
  %1241 = call noundef zeroext i1 @_ZN3cgp8is_equalIfLi3EEEbRKNS_14numarray_stackIT_XT0_EEES5_(ptr noundef nonnull align 4 dereferenceable(12) %340, ptr noundef nonnull align 4 dereferenceable(12) %342)
  %1242 = zext i1 %1241 to i32
  %1243 = icmp eq i32 %1242, 0
  call void @llvm.lifetime.end.p0(i64 4, ptr %345) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %344) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %343) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %342) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %340) #9
  br i1 %1243, label %1244, label %1276

1244:                                             ; preds = %1238
  call void @llvm.lifetime.start.p0(i64 32, ptr %346) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %347) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %347) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %346, ptr noundef @.str.10, ptr noundef nonnull align 1 dereferenceable(1) %347)
          to label %1245 unwind label %1252

1245:                                             ; preds = %1244
  call void @llvm.lifetime.start.p0(i64 32, ptr %348) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %349) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %349) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %348, ptr noundef @.str.1, ptr noundef nonnull align 1 dereferenceable(1) %349)
          to label %1246 unwind label %1256

1246:                                             ; preds = %1245
  call void @llvm.lifetime.start.p0(i64 32, ptr %350) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %351) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %351) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %350, ptr noundef @.str.2, ptr noundef nonnull align 1 dereferenceable(1) %351)
          to label %1247 unwind label %1260

1247:                                             ; preds = %1246
  call void @llvm.lifetime.start.p0(i64 32, ptr %352) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %353) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %353) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %352, ptr noundef @__func__._ZN8cgp_test22test_camera_controllerEv, ptr noundef nonnull align 1 dereferenceable(1) %353)
          to label %1248 unwind label %1264

1248:                                             ; preds = %1247
  invoke void @_ZN3cgp10call_errorERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_S7_S7_i(ptr noundef nonnull align 8 dereferenceable(32) %346, ptr noundef nonnull align 8 dereferenceable(32) %348, ptr noundef nonnull align 8 dereferenceable(32) %350, ptr noundef nonnull align 8 dereferenceable(32) %352, i32 noundef 59) #10
          to label %1249 unwind label %1268

1249:                                             ; preds = %1248
  unreachable

1250:                                             ; preds = %1237, %1201
  call void @llvm.lifetime.end.p0(i64 4, ptr %286) #9
  br label %1251

1251:                                             ; preds = %1250, %1160, %1124, %1088, %1052, %1016, %980
  call void @llvm.lifetime.end.p0(i64 72, ptr %165) #9
  br label %1831

1252:                                             ; preds = %1244
  %1253 = landingpad { ptr, i32 }
          cleanup
  %1254 = extractvalue { ptr, i32 } %1253, 0
  store ptr %1254, ptr %22, align 8
  %1255 = extractvalue { ptr, i32 } %1253, 1
  store i32 %1255, ptr %23, align 4
  br label %1275

1256:                                             ; preds = %1245
  %1257 = landingpad { ptr, i32 }
          cleanup
  %1258 = extractvalue { ptr, i32 } %1257, 0
  store ptr %1258, ptr %22, align 8
  %1259 = extractvalue { ptr, i32 } %1257, 1
  store i32 %1259, ptr %23, align 4
  br label %1274

1260:                                             ; preds = %1246
  %1261 = landingpad { ptr, i32 }
          cleanup
  %1262 = extractvalue { ptr, i32 } %1261, 0
  store ptr %1262, ptr %22, align 8
  %1263 = extractvalue { ptr, i32 } %1261, 1
  store i32 %1263, ptr %23, align 4
  br label %1273

1264:                                             ; preds = %1247
  %1265 = landingpad { ptr, i32 }
          cleanup
  %1266 = extractvalue { ptr, i32 } %1265, 0
  store ptr %1266, ptr %22, align 8
  %1267 = extractvalue { ptr, i32 } %1265, 1
  store i32 %1267, ptr %23, align 4
  br label %1272

1268:                                             ; preds = %1248
  %1269 = landingpad { ptr, i32 }
          cleanup
  %1270 = extractvalue { ptr, i32 } %1269, 0
  store ptr %1270, ptr %22, align 8
  %1271 = extractvalue { ptr, i32 } %1269, 1
  store i32 %1271, ptr %23, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %352) #9
  br label %1272

1272:                                             ; preds = %1268, %1264
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %353) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %353) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %352) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %350) #9
  br label %1273

1273:                                             ; preds = %1272, %1260
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %351) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %351) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %350) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %348) #9
  br label %1274

1274:                                             ; preds = %1273, %1256
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %349) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %349) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %348) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %346) #9
  br label %1275

1275:                                             ; preds = %1274, %1252
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %347) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %347) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %346) #9
  br label %1546

1276:                                             ; preds = %1238
  call void @llvm.lifetime.start.p0(i64 12, ptr %354) #9
  %1277 = getelementptr inbounds %"struct.cgp::camera_controller_first_person", ptr %327, i32 0, i32 1
  %1278 = call { <2 x float>, float } @_ZNK3cgp19camera_first_person8positionEv(ptr noundef nonnull align 8 dereferenceable(36) %1277)
  store { <2 x float>, float } %1278, ptr %355, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %354, ptr align 8 %355, i64 12, i1 false)
  call void @llvm.lifetime.start.p0(i64 12, ptr %356) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %357) #9
  store i32 1, ptr %357, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %358) #9
  store i32 0, ptr %358, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %359) #9
  store i32 0, ptr %359, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %356, ptr noundef nonnull align 4 dereferenceable(4) %357, ptr noundef nonnull align 4 dereferenceable(4) %358, ptr noundef nonnull align 4 dereferenceable(4) %359)
  %1279 = call noundef zeroext i1 @_ZN3cgp8is_equalIfLi3EEEbRKNS_14numarray_stackIT_XT0_EEES5_(ptr noundef nonnull align 4 dereferenceable(12) %354, ptr noundef nonnull align 4 dereferenceable(12) %356)
  %1280 = zext i1 %1279 to i32
  %1281 = icmp eq i32 %1280, 0
  call void @llvm.lifetime.end.p0(i64 4, ptr %359) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %358) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %357) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %356) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %354) #9
  br i1 %1281, label %1282, label %1312

1282:                                             ; preds = %1276
  call void @llvm.lifetime.start.p0(i64 32, ptr %360) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %361) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %361) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %360, ptr noundef @.str.3, ptr noundef nonnull align 1 dereferenceable(1) %361)
          to label %1283 unwind label %1288

1283:                                             ; preds = %1282
  call void @llvm.lifetime.start.p0(i64 32, ptr %362) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %363) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %363) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %362, ptr noundef @.str.1, ptr noundef nonnull align 1 dereferenceable(1) %363)
          to label %1284 unwind label %1292

1284:                                             ; preds = %1283
  call void @llvm.lifetime.start.p0(i64 32, ptr %364) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %365) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %365) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %364, ptr noundef @.str.2, ptr noundef nonnull align 1 dereferenceable(1) %365)
          to label %1285 unwind label %1296

1285:                                             ; preds = %1284
  call void @llvm.lifetime.start.p0(i64 32, ptr %366) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %367) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %367) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %366, ptr noundef @__func__._ZN8cgp_test22test_camera_controllerEv, ptr noundef nonnull align 1 dereferenceable(1) %367)
          to label %1286 unwind label %1300

1286:                                             ; preds = %1285
  invoke void @_ZN3cgp10call_errorERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_S7_S7_i(ptr noundef nonnull align 8 dereferenceable(32) %360, ptr noundef nonnull align 8 dereferenceable(32) %362, ptr noundef nonnull align 8 dereferenceable(32) %364, ptr noundef nonnull align 8 dereferenceable(32) %366, i32 noundef 60) #10
          to label %1287 unwind label %1304

1287:                                             ; preds = %1286
  unreachable

1288:                                             ; preds = %1282
  %1289 = landingpad { ptr, i32 }
          cleanup
  %1290 = extractvalue { ptr, i32 } %1289, 0
  store ptr %1290, ptr %22, align 8
  %1291 = extractvalue { ptr, i32 } %1289, 1
  store i32 %1291, ptr %23, align 4
  br label %1311

1292:                                             ; preds = %1283
  %1293 = landingpad { ptr, i32 }
          cleanup
  %1294 = extractvalue { ptr, i32 } %1293, 0
  store ptr %1294, ptr %22, align 8
  %1295 = extractvalue { ptr, i32 } %1293, 1
  store i32 %1295, ptr %23, align 4
  br label %1310

1296:                                             ; preds = %1284
  %1297 = landingpad { ptr, i32 }
          cleanup
  %1298 = extractvalue { ptr, i32 } %1297, 0
  store ptr %1298, ptr %22, align 8
  %1299 = extractvalue { ptr, i32 } %1297, 1
  store i32 %1299, ptr %23, align 4
  br label %1309

1300:                                             ; preds = %1285
  %1301 = landingpad { ptr, i32 }
          cleanup
  %1302 = extractvalue { ptr, i32 } %1301, 0
  store ptr %1302, ptr %22, align 8
  %1303 = extractvalue { ptr, i32 } %1301, 1
  store i32 %1303, ptr %23, align 4
  br label %1308

1304:                                             ; preds = %1286
  %1305 = landingpad { ptr, i32 }
          cleanup
  %1306 = extractvalue { ptr, i32 } %1305, 0
  store ptr %1306, ptr %22, align 8
  %1307 = extractvalue { ptr, i32 } %1305, 1
  store i32 %1307, ptr %23, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %366) #9
  br label %1308

1308:                                             ; preds = %1304, %1300
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %367) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %367) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %366) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %364) #9
  br label %1309

1309:                                             ; preds = %1308, %1296
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %365) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %365) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %364) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %362) #9
  br label %1310

1310:                                             ; preds = %1309, %1292
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %363) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %363) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %362) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %360) #9
  br label %1311

1311:                                             ; preds = %1310, %1288
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %361) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %361) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %360) #9
  br label %1546

1312:                                             ; preds = %1276
  call void @llvm.lifetime.start.p0(i64 12, ptr %368) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %369) #9
  store i32 -1, ptr %369, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %370) #9
  store i32 0, ptr %370, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %371) #9
  store i32 0, ptr %371, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %368, ptr noundef nonnull align 4 dereferenceable(4) %369, ptr noundef nonnull align 4 dereferenceable(4) %370, ptr noundef nonnull align 4 dereferenceable(4) %371)
  call void @llvm.lifetime.start.p0(i64 12, ptr %372) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %373) #9
  store i32 0, ptr %373, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %374) #9
  store i32 0, ptr %374, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %375) #9
  store i32 0, ptr %375, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %372, ptr noundef nonnull align 4 dereferenceable(4) %373, ptr noundef nonnull align 4 dereferenceable(4) %374, ptr noundef nonnull align 4 dereferenceable(4) %375)
  call void @llvm.lifetime.start.p0(i64 12, ptr %376) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %377) #9
  store i32 0, ptr %377, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %378) #9
  store i32 0, ptr %378, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %379) #9
  store i32 1, ptr %379, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %376, ptr noundef nonnull align 4 dereferenceable(4) %377, ptr noundef nonnull align 4 dereferenceable(4) %378, ptr noundef nonnull align 4 dereferenceable(4) %379)
  call void @_ZN3cgp30camera_controller_first_person7look_atERKNS_14numarray_stackIfLi3EEES4_S4_(ptr noundef nonnull align 8 dereferenceable(73) %327, ptr noundef nonnull align 4 dereferenceable(12) %368, ptr noundef nonnull align 4 dereferenceable(12) %372, ptr noundef nonnull align 4 dereferenceable(12) %376)
  call void @llvm.lifetime.end.p0(i64 4, ptr %379) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %378) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %377) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %376) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %375) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %374) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %373) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %372) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %371) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %370) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %369) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %368) #9
  call void @llvm.lifetime.start.p0(i64 12, ptr %380) #9
  %1313 = getelementptr inbounds %"struct.cgp::camera_controller_first_person", ptr %327, i32 0, i32 1
  %1314 = call { <2 x float>, float } @_ZNK3cgp19camera_generic_base5frontEv(ptr noundef nonnull align 8 dereferenceable(8) %1313)
  store { <2 x float>, float } %1314, ptr %381, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %380, ptr align 8 %381, i64 12, i1 false)
  call void @llvm.lifetime.start.p0(i64 12, ptr %382) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %383) #9
  store i32 1, ptr %383, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %384) #9
  store i32 0, ptr %384, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %385) #9
  store i32 0, ptr %385, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %382, ptr noundef nonnull align 4 dereferenceable(4) %383, ptr noundef nonnull align 4 dereferenceable(4) %384, ptr noundef nonnull align 4 dereferenceable(4) %385)
  %1315 = call noundef zeroext i1 @_ZN3cgp8is_equalIfLi3EEEbRKNS_14numarray_stackIT_XT0_EEES5_(ptr noundef nonnull align 4 dereferenceable(12) %380, ptr noundef nonnull align 4 dereferenceable(12) %382)
  %1316 = zext i1 %1315 to i32
  %1317 = icmp eq i32 %1316, 0
  call void @llvm.lifetime.end.p0(i64 4, ptr %385) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %384) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %383) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %382) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %380) #9
  br i1 %1317, label %1318, label %1348

1318:                                             ; preds = %1312
  call void @llvm.lifetime.start.p0(i64 32, ptr %386) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %387) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %387) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %386, ptr noundef @.str.4, ptr noundef nonnull align 1 dereferenceable(1) %387)
          to label %1319 unwind label %1324

1319:                                             ; preds = %1318
  call void @llvm.lifetime.start.p0(i64 32, ptr %388) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %389) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %389) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %388, ptr noundef @.str.1, ptr noundef nonnull align 1 dereferenceable(1) %389)
          to label %1320 unwind label %1328

1320:                                             ; preds = %1319
  call void @llvm.lifetime.start.p0(i64 32, ptr %390) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %391) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %391) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %390, ptr noundef @.str.2, ptr noundef nonnull align 1 dereferenceable(1) %391)
          to label %1321 unwind label %1332

1321:                                             ; preds = %1320
  call void @llvm.lifetime.start.p0(i64 32, ptr %392) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %393) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %393) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %392, ptr noundef @__func__._ZN8cgp_test22test_camera_controllerEv, ptr noundef nonnull align 1 dereferenceable(1) %393)
          to label %1322 unwind label %1336

1322:                                             ; preds = %1321
  invoke void @_ZN3cgp10call_errorERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_S7_S7_i(ptr noundef nonnull align 8 dereferenceable(32) %386, ptr noundef nonnull align 8 dereferenceable(32) %388, ptr noundef nonnull align 8 dereferenceable(32) %390, ptr noundef nonnull align 8 dereferenceable(32) %392, i32 noundef 63) #10
          to label %1323 unwind label %1340

1323:                                             ; preds = %1322
  unreachable

1324:                                             ; preds = %1318
  %1325 = landingpad { ptr, i32 }
          cleanup
  %1326 = extractvalue { ptr, i32 } %1325, 0
  store ptr %1326, ptr %22, align 8
  %1327 = extractvalue { ptr, i32 } %1325, 1
  store i32 %1327, ptr %23, align 4
  br label %1347

1328:                                             ; preds = %1319
  %1329 = landingpad { ptr, i32 }
          cleanup
  %1330 = extractvalue { ptr, i32 } %1329, 0
  store ptr %1330, ptr %22, align 8
  %1331 = extractvalue { ptr, i32 } %1329, 1
  store i32 %1331, ptr %23, align 4
  br label %1346

1332:                                             ; preds = %1320
  %1333 = landingpad { ptr, i32 }
          cleanup
  %1334 = extractvalue { ptr, i32 } %1333, 0
  store ptr %1334, ptr %22, align 8
  %1335 = extractvalue { ptr, i32 } %1333, 1
  store i32 %1335, ptr %23, align 4
  br label %1345

1336:                                             ; preds = %1321
  %1337 = landingpad { ptr, i32 }
          cleanup
  %1338 = extractvalue { ptr, i32 } %1337, 0
  store ptr %1338, ptr %22, align 8
  %1339 = extractvalue { ptr, i32 } %1337, 1
  store i32 %1339, ptr %23, align 4
  br label %1344

1340:                                             ; preds = %1322
  %1341 = landingpad { ptr, i32 }
          cleanup
  %1342 = extractvalue { ptr, i32 } %1341, 0
  store ptr %1342, ptr %22, align 8
  %1343 = extractvalue { ptr, i32 } %1341, 1
  store i32 %1343, ptr %23, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %392) #9
  br label %1344

1344:                                             ; preds = %1340, %1336
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %393) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %393) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %392) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %390) #9
  br label %1345

1345:                                             ; preds = %1344, %1332
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %391) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %391) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %390) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %388) #9
  br label %1346

1346:                                             ; preds = %1345, %1328
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %389) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %389) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %388) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %386) #9
  br label %1347

1347:                                             ; preds = %1346, %1324
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %387) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %387) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %386) #9
  br label %1546

1348:                                             ; preds = %1312
  call void @llvm.lifetime.start.p0(i64 12, ptr %394) #9
  %1349 = getelementptr inbounds %"struct.cgp::camera_controller_first_person", ptr %327, i32 0, i32 1
  %1350 = call { <2 x float>, float } @_ZNK3cgp19camera_first_person8positionEv(ptr noundef nonnull align 8 dereferenceable(36) %1349)
  store { <2 x float>, float } %1350, ptr %395, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %394, ptr align 8 %395, i64 12, i1 false)
  call void @llvm.lifetime.start.p0(i64 12, ptr %396) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %397) #9
  store i32 -1, ptr %397, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %398) #9
  store i32 0, ptr %398, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %399) #9
  store i32 0, ptr %399, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %396, ptr noundef nonnull align 4 dereferenceable(4) %397, ptr noundef nonnull align 4 dereferenceable(4) %398, ptr noundef nonnull align 4 dereferenceable(4) %399)
  %1351 = call noundef zeroext i1 @_ZN3cgp8is_equalIfLi3EEEbRKNS_14numarray_stackIT_XT0_EEES5_(ptr noundef nonnull align 4 dereferenceable(12) %394, ptr noundef nonnull align 4 dereferenceable(12) %396)
  %1352 = zext i1 %1351 to i32
  %1353 = icmp eq i32 %1352, 0
  call void @llvm.lifetime.end.p0(i64 4, ptr %399) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %398) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %397) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %396) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %394) #9
  br i1 %1353, label %1354, label %1384

1354:                                             ; preds = %1348
  call void @llvm.lifetime.start.p0(i64 32, ptr %400) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %401) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %401) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %400, ptr noundef @.str.5, ptr noundef nonnull align 1 dereferenceable(1) %401)
          to label %1355 unwind label %1360

1355:                                             ; preds = %1354
  call void @llvm.lifetime.start.p0(i64 32, ptr %402) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %403) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %403) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %402, ptr noundef @.str.1, ptr noundef nonnull align 1 dereferenceable(1) %403)
          to label %1356 unwind label %1364

1356:                                             ; preds = %1355
  call void @llvm.lifetime.start.p0(i64 32, ptr %404) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %405) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %405) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %404, ptr noundef @.str.2, ptr noundef nonnull align 1 dereferenceable(1) %405)
          to label %1357 unwind label %1368

1357:                                             ; preds = %1356
  call void @llvm.lifetime.start.p0(i64 32, ptr %406) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %407) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %407) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %406, ptr noundef @__func__._ZN8cgp_test22test_camera_controllerEv, ptr noundef nonnull align 1 dereferenceable(1) %407)
          to label %1358 unwind label %1372

1358:                                             ; preds = %1357
  invoke void @_ZN3cgp10call_errorERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_S7_S7_i(ptr noundef nonnull align 8 dereferenceable(32) %400, ptr noundef nonnull align 8 dereferenceable(32) %402, ptr noundef nonnull align 8 dereferenceable(32) %404, ptr noundef nonnull align 8 dereferenceable(32) %406, i32 noundef 64) #10
          to label %1359 unwind label %1376

1359:                                             ; preds = %1358
  unreachable

1360:                                             ; preds = %1354
  %1361 = landingpad { ptr, i32 }
          cleanup
  %1362 = extractvalue { ptr, i32 } %1361, 0
  store ptr %1362, ptr %22, align 8
  %1363 = extractvalue { ptr, i32 } %1361, 1
  store i32 %1363, ptr %23, align 4
  br label %1383

1364:                                             ; preds = %1355
  %1365 = landingpad { ptr, i32 }
          cleanup
  %1366 = extractvalue { ptr, i32 } %1365, 0
  store ptr %1366, ptr %22, align 8
  %1367 = extractvalue { ptr, i32 } %1365, 1
  store i32 %1367, ptr %23, align 4
  br label %1382

1368:                                             ; preds = %1356
  %1369 = landingpad { ptr, i32 }
          cleanup
  %1370 = extractvalue { ptr, i32 } %1369, 0
  store ptr %1370, ptr %22, align 8
  %1371 = extractvalue { ptr, i32 } %1369, 1
  store i32 %1371, ptr %23, align 4
  br label %1381

1372:                                             ; preds = %1357
  %1373 = landingpad { ptr, i32 }
          cleanup
  %1374 = extractvalue { ptr, i32 } %1373, 0
  store ptr %1374, ptr %22, align 8
  %1375 = extractvalue { ptr, i32 } %1373, 1
  store i32 %1375, ptr %23, align 4
  br label %1380

1376:                                             ; preds = %1358
  %1377 = landingpad { ptr, i32 }
          cleanup
  %1378 = extractvalue { ptr, i32 } %1377, 0
  store ptr %1378, ptr %22, align 8
  %1379 = extractvalue { ptr, i32 } %1377, 1
  store i32 %1379, ptr %23, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %406) #9
  br label %1380

1380:                                             ; preds = %1376, %1372
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %407) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %407) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %406) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %404) #9
  br label %1381

1381:                                             ; preds = %1380, %1368
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %405) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %405) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %404) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %402) #9
  br label %1382

1382:                                             ; preds = %1381, %1364
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %403) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %403) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %402) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %400) #9
  br label %1383

1383:                                             ; preds = %1382, %1360
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %401) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %401) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %400) #9
  br label %1546

1384:                                             ; preds = %1348
  call void @llvm.lifetime.start.p0(i64 12, ptr %408) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %409) #9
  store i32 0, ptr %409, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %410) #9
  store i32 1, ptr %410, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %411) #9
  store i32 0, ptr %411, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %408, ptr noundef nonnull align 4 dereferenceable(4) %409, ptr noundef nonnull align 4 dereferenceable(4) %410, ptr noundef nonnull align 4 dereferenceable(4) %411)
  call void @llvm.lifetime.start.p0(i64 12, ptr %412) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %413) #9
  store i32 0, ptr %413, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %414) #9
  store i32 0, ptr %414, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %415) #9
  store i32 0, ptr %415, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %412, ptr noundef nonnull align 4 dereferenceable(4) %413, ptr noundef nonnull align 4 dereferenceable(4) %414, ptr noundef nonnull align 4 dereferenceable(4) %415)
  call void @llvm.lifetime.start.p0(i64 12, ptr %416) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %417) #9
  store i32 0, ptr %417, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %418) #9
  store i32 0, ptr %418, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %419) #9
  store i32 1, ptr %419, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %416, ptr noundef nonnull align 4 dereferenceable(4) %417, ptr noundef nonnull align 4 dereferenceable(4) %418, ptr noundef nonnull align 4 dereferenceable(4) %419)
  call void @_ZN3cgp30camera_controller_first_person7look_atERKNS_14numarray_stackIfLi3EEES4_S4_(ptr noundef nonnull align 8 dereferenceable(73) %327, ptr noundef nonnull align 4 dereferenceable(12) %408, ptr noundef nonnull align 4 dereferenceable(12) %412, ptr noundef nonnull align 4 dereferenceable(12) %416)
  call void @llvm.lifetime.end.p0(i64 4, ptr %419) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %418) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %417) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %416) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %415) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %414) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %413) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %412) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %411) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %410) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %409) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %408) #9
  call void @llvm.lifetime.start.p0(i64 12, ptr %420) #9
  %1385 = getelementptr inbounds %"struct.cgp::camera_controller_first_person", ptr %327, i32 0, i32 1
  %1386 = call { <2 x float>, float } @_ZNK3cgp19camera_generic_base5frontEv(ptr noundef nonnull align 8 dereferenceable(8) %1385)
  store { <2 x float>, float } %1386, ptr %421, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %420, ptr align 8 %421, i64 12, i1 false)
  call void @llvm.lifetime.start.p0(i64 12, ptr %422) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %423) #9
  store i32 0, ptr %423, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %424) #9
  store i32 -1, ptr %424, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %425) #9
  store i32 0, ptr %425, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %422, ptr noundef nonnull align 4 dereferenceable(4) %423, ptr noundef nonnull align 4 dereferenceable(4) %424, ptr noundef nonnull align 4 dereferenceable(4) %425)
  %1387 = call noundef zeroext i1 @_ZN3cgp8is_equalIfLi3EEEbRKNS_14numarray_stackIT_XT0_EEES5_(ptr noundef nonnull align 4 dereferenceable(12) %420, ptr noundef nonnull align 4 dereferenceable(12) %422)
  %1388 = zext i1 %1387 to i32
  %1389 = icmp eq i32 %1388, 0
  call void @llvm.lifetime.end.p0(i64 4, ptr %425) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %424) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %423) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %422) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %420) #9
  br i1 %1389, label %1390, label %1420

1390:                                             ; preds = %1384
  call void @llvm.lifetime.start.p0(i64 32, ptr %426) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %427) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %427) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %426, ptr noundef @.str.6, ptr noundef nonnull align 1 dereferenceable(1) %427)
          to label %1391 unwind label %1396

1391:                                             ; preds = %1390
  call void @llvm.lifetime.start.p0(i64 32, ptr %428) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %429) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %429) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %428, ptr noundef @.str.1, ptr noundef nonnull align 1 dereferenceable(1) %429)
          to label %1392 unwind label %1400

1392:                                             ; preds = %1391
  call void @llvm.lifetime.start.p0(i64 32, ptr %430) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %431) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %431) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %430, ptr noundef @.str.2, ptr noundef nonnull align 1 dereferenceable(1) %431)
          to label %1393 unwind label %1404

1393:                                             ; preds = %1392
  call void @llvm.lifetime.start.p0(i64 32, ptr %432) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %433) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %433) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %432, ptr noundef @__func__._ZN8cgp_test22test_camera_controllerEv, ptr noundef nonnull align 1 dereferenceable(1) %433)
          to label %1394 unwind label %1408

1394:                                             ; preds = %1393
  invoke void @_ZN3cgp10call_errorERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_S7_S7_i(ptr noundef nonnull align 8 dereferenceable(32) %426, ptr noundef nonnull align 8 dereferenceable(32) %428, ptr noundef nonnull align 8 dereferenceable(32) %430, ptr noundef nonnull align 8 dereferenceable(32) %432, i32 noundef 67) #10
          to label %1395 unwind label %1412

1395:                                             ; preds = %1394
  unreachable

1396:                                             ; preds = %1390
  %1397 = landingpad { ptr, i32 }
          cleanup
  %1398 = extractvalue { ptr, i32 } %1397, 0
  store ptr %1398, ptr %22, align 8
  %1399 = extractvalue { ptr, i32 } %1397, 1
  store i32 %1399, ptr %23, align 4
  br label %1419

1400:                                             ; preds = %1391
  %1401 = landingpad { ptr, i32 }
          cleanup
  %1402 = extractvalue { ptr, i32 } %1401, 0
  store ptr %1402, ptr %22, align 8
  %1403 = extractvalue { ptr, i32 } %1401, 1
  store i32 %1403, ptr %23, align 4
  br label %1418

1404:                                             ; preds = %1392
  %1405 = landingpad { ptr, i32 }
          cleanup
  %1406 = extractvalue { ptr, i32 } %1405, 0
  store ptr %1406, ptr %22, align 8
  %1407 = extractvalue { ptr, i32 } %1405, 1
  store i32 %1407, ptr %23, align 4
  br label %1417

1408:                                             ; preds = %1393
  %1409 = landingpad { ptr, i32 }
          cleanup
  %1410 = extractvalue { ptr, i32 } %1409, 0
  store ptr %1410, ptr %22, align 8
  %1411 = extractvalue { ptr, i32 } %1409, 1
  store i32 %1411, ptr %23, align 4
  br label %1416

1412:                                             ; preds = %1394
  %1413 = landingpad { ptr, i32 }
          cleanup
  %1414 = extractvalue { ptr, i32 } %1413, 0
  store ptr %1414, ptr %22, align 8
  %1415 = extractvalue { ptr, i32 } %1413, 1
  store i32 %1415, ptr %23, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %432) #9
  br label %1416

1416:                                             ; preds = %1412, %1408
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %433) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %433) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %432) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %430) #9
  br label %1417

1417:                                             ; preds = %1416, %1404
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %431) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %431) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %430) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %428) #9
  br label %1418

1418:                                             ; preds = %1417, %1400
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %429) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %429) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %428) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %426) #9
  br label %1419

1419:                                             ; preds = %1418, %1396
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %427) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %427) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %426) #9
  br label %1546

1420:                                             ; preds = %1384
  call void @llvm.lifetime.start.p0(i64 12, ptr %434) #9
  %1421 = getelementptr inbounds %"struct.cgp::camera_controller_first_person", ptr %327, i32 0, i32 1
  %1422 = call { <2 x float>, float } @_ZNK3cgp19camera_first_person8positionEv(ptr noundef nonnull align 8 dereferenceable(36) %1421)
  store { <2 x float>, float } %1422, ptr %435, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %434, ptr align 8 %435, i64 12, i1 false)
  call void @llvm.lifetime.start.p0(i64 12, ptr %436) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %437) #9
  store i32 0, ptr %437, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %438) #9
  store i32 1, ptr %438, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %439) #9
  store i32 0, ptr %439, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %436, ptr noundef nonnull align 4 dereferenceable(4) %437, ptr noundef nonnull align 4 dereferenceable(4) %438, ptr noundef nonnull align 4 dereferenceable(4) %439)
  %1423 = call noundef zeroext i1 @_ZN3cgp8is_equalIfLi3EEEbRKNS_14numarray_stackIT_XT0_EEES5_(ptr noundef nonnull align 4 dereferenceable(12) %434, ptr noundef nonnull align 4 dereferenceable(12) %436)
  %1424 = zext i1 %1423 to i32
  %1425 = icmp eq i32 %1424, 0
  call void @llvm.lifetime.end.p0(i64 4, ptr %439) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %438) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %437) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %436) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %434) #9
  br i1 %1425, label %1426, label %1456

1426:                                             ; preds = %1420
  call void @llvm.lifetime.start.p0(i64 32, ptr %440) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %441) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %441) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %440, ptr noundef @.str.7, ptr noundef nonnull align 1 dereferenceable(1) %441)
          to label %1427 unwind label %1432

1427:                                             ; preds = %1426
  call void @llvm.lifetime.start.p0(i64 32, ptr %442) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %443) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %443) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %442, ptr noundef @.str.1, ptr noundef nonnull align 1 dereferenceable(1) %443)
          to label %1428 unwind label %1436

1428:                                             ; preds = %1427
  call void @llvm.lifetime.start.p0(i64 32, ptr %444) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %445) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %445) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %444, ptr noundef @.str.2, ptr noundef nonnull align 1 dereferenceable(1) %445)
          to label %1429 unwind label %1440

1429:                                             ; preds = %1428
  call void @llvm.lifetime.start.p0(i64 32, ptr %446) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %447) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %447) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %446, ptr noundef @__func__._ZN8cgp_test22test_camera_controllerEv, ptr noundef nonnull align 1 dereferenceable(1) %447)
          to label %1430 unwind label %1444

1430:                                             ; preds = %1429
  invoke void @_ZN3cgp10call_errorERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_S7_S7_i(ptr noundef nonnull align 8 dereferenceable(32) %440, ptr noundef nonnull align 8 dereferenceable(32) %442, ptr noundef nonnull align 8 dereferenceable(32) %444, ptr noundef nonnull align 8 dereferenceable(32) %446, i32 noundef 68) #10
          to label %1431 unwind label %1448

1431:                                             ; preds = %1430
  unreachable

1432:                                             ; preds = %1426
  %1433 = landingpad { ptr, i32 }
          cleanup
  %1434 = extractvalue { ptr, i32 } %1433, 0
  store ptr %1434, ptr %22, align 8
  %1435 = extractvalue { ptr, i32 } %1433, 1
  store i32 %1435, ptr %23, align 4
  br label %1455

1436:                                             ; preds = %1427
  %1437 = landingpad { ptr, i32 }
          cleanup
  %1438 = extractvalue { ptr, i32 } %1437, 0
  store ptr %1438, ptr %22, align 8
  %1439 = extractvalue { ptr, i32 } %1437, 1
  store i32 %1439, ptr %23, align 4
  br label %1454

1440:                                             ; preds = %1428
  %1441 = landingpad { ptr, i32 }
          cleanup
  %1442 = extractvalue { ptr, i32 } %1441, 0
  store ptr %1442, ptr %22, align 8
  %1443 = extractvalue { ptr, i32 } %1441, 1
  store i32 %1443, ptr %23, align 4
  br label %1453

1444:                                             ; preds = %1429
  %1445 = landingpad { ptr, i32 }
          cleanup
  %1446 = extractvalue { ptr, i32 } %1445, 0
  store ptr %1446, ptr %22, align 8
  %1447 = extractvalue { ptr, i32 } %1445, 1
  store i32 %1447, ptr %23, align 4
  br label %1452

1448:                                             ; preds = %1430
  %1449 = landingpad { ptr, i32 }
          cleanup
  %1450 = extractvalue { ptr, i32 } %1449, 0
  store ptr %1450, ptr %22, align 8
  %1451 = extractvalue { ptr, i32 } %1449, 1
  store i32 %1451, ptr %23, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %446) #9
  br label %1452

1452:                                             ; preds = %1448, %1444
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %447) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %447) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %446) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %444) #9
  br label %1453

1453:                                             ; preds = %1452, %1440
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %445) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %445) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %444) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %442) #9
  br label %1454

1454:                                             ; preds = %1453, %1436
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %443) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %443) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %442) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %440) #9
  br label %1455

1455:                                             ; preds = %1454, %1432
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %441) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %441) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %440) #9
  br label %1546

1456:                                             ; preds = %1420
  call void @llvm.lifetime.start.p0(i64 4, ptr %448) #9
  %1457 = call noundef float @_ZSt4sqrtf(float noundef 2.000000e+00)
  store float %1457, ptr %448, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 12, ptr %449) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %450) #9
  store i32 1, ptr %450, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %451) #9
  store i32 1, ptr %451, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %452) #9
  store i32 0, ptr %452, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %449, ptr noundef nonnull align 4 dereferenceable(4) %450, ptr noundef nonnull align 4 dereferenceable(4) %451, ptr noundef nonnull align 4 dereferenceable(4) %452)
  call void @llvm.lifetime.start.p0(i64 12, ptr %453) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %454) #9
  store i32 0, ptr %454, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %455) #9
  store i32 0, ptr %455, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %456) #9
  store i32 0, ptr %456, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %453, ptr noundef nonnull align 4 dereferenceable(4) %454, ptr noundef nonnull align 4 dereferenceable(4) %455, ptr noundef nonnull align 4 dereferenceable(4) %456)
  call void @llvm.lifetime.start.p0(i64 12, ptr %457) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %458) #9
  store i32 0, ptr %458, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %459) #9
  store i32 0, ptr %459, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %460) #9
  store i32 1, ptr %460, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %457, ptr noundef nonnull align 4 dereferenceable(4) %458, ptr noundef nonnull align 4 dereferenceable(4) %459, ptr noundef nonnull align 4 dereferenceable(4) %460)
  call void @_ZN3cgp30camera_controller_first_person7look_atERKNS_14numarray_stackIfLi3EEES4_S4_(ptr noundef nonnull align 8 dereferenceable(73) %327, ptr noundef nonnull align 4 dereferenceable(12) %449, ptr noundef nonnull align 4 dereferenceable(12) %453, ptr noundef nonnull align 4 dereferenceable(12) %457)
  call void @llvm.lifetime.end.p0(i64 4, ptr %460) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %459) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %458) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %457) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %456) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %455) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %454) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %453) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %452) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %451) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %450) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %449) #9
  call void @llvm.lifetime.start.p0(i64 12, ptr %461) #9
  %1458 = getelementptr inbounds %"struct.cgp::camera_controller_first_person", ptr %327, i32 0, i32 1
  %1459 = call { <2 x float>, float } @_ZNK3cgp19camera_generic_base5frontEv(ptr noundef nonnull align 8 dereferenceable(8) %1458)
  store { <2 x float>, float } %1459, ptr %462, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %461, ptr align 8 %462, i64 12, i1 false)
  call void @llvm.lifetime.start.p0(i64 12, ptr %463) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %464) #9
  %1460 = load float, ptr %448, align 4, !tbaa !9
  %1461 = fdiv float -1.000000e+00, %1460
  store float %1461, ptr %464, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %465) #9
  %1462 = load float, ptr %448, align 4, !tbaa !9
  %1463 = fdiv float -1.000000e+00, %1462
  store float %1463, ptr %465, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %466) #9
  store i32 0, ptr %466, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IffiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %463, ptr noundef nonnull align 4 dereferenceable(4) %464, ptr noundef nonnull align 4 dereferenceable(4) %465, ptr noundef nonnull align 4 dereferenceable(4) %466)
  %1464 = call noundef zeroext i1 @_ZN3cgp8is_equalIfLi3EEEbRKNS_14numarray_stackIT_XT0_EEES5_(ptr noundef nonnull align 4 dereferenceable(12) %461, ptr noundef nonnull align 4 dereferenceable(12) %463)
  %1465 = zext i1 %1464 to i32
  %1466 = icmp eq i32 %1465, 0
  call void @llvm.lifetime.end.p0(i64 4, ptr %466) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %465) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %464) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %463) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %461) #9
  br i1 %1466, label %1467, label %1497

1467:                                             ; preds = %1456
  call void @llvm.lifetime.start.p0(i64 32, ptr %467) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %468) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %468) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %467, ptr noundef @.str.11, ptr noundef nonnull align 1 dereferenceable(1) %468)
          to label %1468 unwind label %1473

1468:                                             ; preds = %1467
  call void @llvm.lifetime.start.p0(i64 32, ptr %469) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %470) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %470) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %469, ptr noundef @.str.1, ptr noundef nonnull align 1 dereferenceable(1) %470)
          to label %1469 unwind label %1477

1469:                                             ; preds = %1468
  call void @llvm.lifetime.start.p0(i64 32, ptr %471) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %472) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %472) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %471, ptr noundef @.str.2, ptr noundef nonnull align 1 dereferenceable(1) %472)
          to label %1470 unwind label %1481

1470:                                             ; preds = %1469
  call void @llvm.lifetime.start.p0(i64 32, ptr %473) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %474) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %474) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %473, ptr noundef @__func__._ZN8cgp_test22test_camera_controllerEv, ptr noundef nonnull align 1 dereferenceable(1) %474)
          to label %1471 unwind label %1485

1471:                                             ; preds = %1470
  invoke void @_ZN3cgp10call_errorERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_S7_S7_i(ptr noundef nonnull align 8 dereferenceable(32) %467, ptr noundef nonnull align 8 dereferenceable(32) %469, ptr noundef nonnull align 8 dereferenceable(32) %471, ptr noundef nonnull align 8 dereferenceable(32) %473, i32 noundef 72) #10
          to label %1472 unwind label %1489

1472:                                             ; preds = %1471
  unreachable

1473:                                             ; preds = %1467
  %1474 = landingpad { ptr, i32 }
          cleanup
  %1475 = extractvalue { ptr, i32 } %1474, 0
  store ptr %1475, ptr %22, align 8
  %1476 = extractvalue { ptr, i32 } %1474, 1
  store i32 %1476, ptr %23, align 4
  br label %1496

1477:                                             ; preds = %1468
  %1478 = landingpad { ptr, i32 }
          cleanup
  %1479 = extractvalue { ptr, i32 } %1478, 0
  store ptr %1479, ptr %22, align 8
  %1480 = extractvalue { ptr, i32 } %1478, 1
  store i32 %1480, ptr %23, align 4
  br label %1495

1481:                                             ; preds = %1469
  %1482 = landingpad { ptr, i32 }
          cleanup
  %1483 = extractvalue { ptr, i32 } %1482, 0
  store ptr %1483, ptr %22, align 8
  %1484 = extractvalue { ptr, i32 } %1482, 1
  store i32 %1484, ptr %23, align 4
  br label %1494

1485:                                             ; preds = %1470
  %1486 = landingpad { ptr, i32 }
          cleanup
  %1487 = extractvalue { ptr, i32 } %1486, 0
  store ptr %1487, ptr %22, align 8
  %1488 = extractvalue { ptr, i32 } %1486, 1
  store i32 %1488, ptr %23, align 4
  br label %1493

1489:                                             ; preds = %1471
  %1490 = landingpad { ptr, i32 }
          cleanup
  %1491 = extractvalue { ptr, i32 } %1490, 0
  store ptr %1491, ptr %22, align 8
  %1492 = extractvalue { ptr, i32 } %1490, 1
  store i32 %1492, ptr %23, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %473) #9
  br label %1493

1493:                                             ; preds = %1489, %1485
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %474) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %474) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %473) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %471) #9
  br label %1494

1494:                                             ; preds = %1493, %1481
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %472) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %472) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %471) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %469) #9
  br label %1495

1495:                                             ; preds = %1494, %1477
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %470) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %470) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %469) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %467) #9
  br label %1496

1496:                                             ; preds = %1495, %1473
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %468) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %468) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %467) #9
  br label %1545

1497:                                             ; preds = %1456
  call void @llvm.lifetime.start.p0(i64 12, ptr %475) #9
  %1498 = getelementptr inbounds %"struct.cgp::camera_controller_first_person", ptr %327, i32 0, i32 1
  %1499 = call { <2 x float>, float } @_ZNK3cgp19camera_first_person8positionEv(ptr noundef nonnull align 8 dereferenceable(36) %1498)
  store { <2 x float>, float } %1499, ptr %476, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %475, ptr align 8 %476, i64 12, i1 false)
  call void @llvm.lifetime.start.p0(i64 12, ptr %477) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %478) #9
  store i32 1, ptr %478, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %479) #9
  store i32 1, ptr %479, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %480) #9
  store i32 0, ptr %480, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %477, ptr noundef nonnull align 4 dereferenceable(4) %478, ptr noundef nonnull align 4 dereferenceable(4) %479, ptr noundef nonnull align 4 dereferenceable(4) %480)
  %1500 = call noundef zeroext i1 @_ZN3cgp8is_equalIfLi3EEEbRKNS_14numarray_stackIT_XT0_EEES5_(ptr noundef nonnull align 4 dereferenceable(12) %475, ptr noundef nonnull align 4 dereferenceable(12) %477)
  %1501 = zext i1 %1500 to i32
  %1502 = icmp eq i32 %1501, 0
  call void @llvm.lifetime.end.p0(i64 4, ptr %480) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %479) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %478) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %477) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %475) #9
  br i1 %1502, label %1503, label %1533

1503:                                             ; preds = %1497
  call void @llvm.lifetime.start.p0(i64 32, ptr %481) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %482) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %482) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %481, ptr noundef @.str.9, ptr noundef nonnull align 1 dereferenceable(1) %482)
          to label %1504 unwind label %1509

1504:                                             ; preds = %1503
  call void @llvm.lifetime.start.p0(i64 32, ptr %483) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %484) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %484) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %483, ptr noundef @.str.1, ptr noundef nonnull align 1 dereferenceable(1) %484)
          to label %1505 unwind label %1513

1505:                                             ; preds = %1504
  call void @llvm.lifetime.start.p0(i64 32, ptr %485) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %486) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %486) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %485, ptr noundef @.str.2, ptr noundef nonnull align 1 dereferenceable(1) %486)
          to label %1506 unwind label %1517

1506:                                             ; preds = %1505
  call void @llvm.lifetime.start.p0(i64 32, ptr %487) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %488) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %488) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %487, ptr noundef @__func__._ZN8cgp_test22test_camera_controllerEv, ptr noundef nonnull align 1 dereferenceable(1) %488)
          to label %1507 unwind label %1521

1507:                                             ; preds = %1506
  invoke void @_ZN3cgp10call_errorERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_S7_S7_i(ptr noundef nonnull align 8 dereferenceable(32) %481, ptr noundef nonnull align 8 dereferenceable(32) %483, ptr noundef nonnull align 8 dereferenceable(32) %485, ptr noundef nonnull align 8 dereferenceable(32) %487, i32 noundef 73) #10
          to label %1508 unwind label %1525

1508:                                             ; preds = %1507
  unreachable

1509:                                             ; preds = %1503
  %1510 = landingpad { ptr, i32 }
          cleanup
  %1511 = extractvalue { ptr, i32 } %1510, 0
  store ptr %1511, ptr %22, align 8
  %1512 = extractvalue { ptr, i32 } %1510, 1
  store i32 %1512, ptr %23, align 4
  br label %1532

1513:                                             ; preds = %1504
  %1514 = landingpad { ptr, i32 }
          cleanup
  %1515 = extractvalue { ptr, i32 } %1514, 0
  store ptr %1515, ptr %22, align 8
  %1516 = extractvalue { ptr, i32 } %1514, 1
  store i32 %1516, ptr %23, align 4
  br label %1531

1517:                                             ; preds = %1505
  %1518 = landingpad { ptr, i32 }
          cleanup
  %1519 = extractvalue { ptr, i32 } %1518, 0
  store ptr %1519, ptr %22, align 8
  %1520 = extractvalue { ptr, i32 } %1518, 1
  store i32 %1520, ptr %23, align 4
  br label %1530

1521:                                             ; preds = %1506
  %1522 = landingpad { ptr, i32 }
          cleanup
  %1523 = extractvalue { ptr, i32 } %1522, 0
  store ptr %1523, ptr %22, align 8
  %1524 = extractvalue { ptr, i32 } %1522, 1
  store i32 %1524, ptr %23, align 4
  br label %1529

1525:                                             ; preds = %1507
  %1526 = landingpad { ptr, i32 }
          cleanup
  %1527 = extractvalue { ptr, i32 } %1526, 0
  store ptr %1527, ptr %22, align 8
  %1528 = extractvalue { ptr, i32 } %1526, 1
  store i32 %1528, ptr %23, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %487) #9
  br label %1529

1529:                                             ; preds = %1525, %1521
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %488) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %488) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %487) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %485) #9
  br label %1530

1530:                                             ; preds = %1529, %1517
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %486) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %486) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %485) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %483) #9
  br label %1531

1531:                                             ; preds = %1530, %1513
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %484) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %484) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %483) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %481) #9
  br label %1532

1532:                                             ; preds = %1531, %1509
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %482) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %482) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %481) #9
  br label %1545

1533:                                             ; preds = %1497
  call void @llvm.lifetime.end.p0(i64 4, ptr %448) #9
  call void @llvm.lifetime.end.p0(i64 80, ptr %327) #9
  call void @llvm.lifetime.start.p0(i64 80, ptr %489) #9
  call void @_ZN3cgp36camera_controller_first_person_eulerC2Ev(ptr noundef nonnull align 8 dereferenceable(73) %489)
  call void @llvm.lifetime.start.p0(i64 12, ptr %490) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %491) #9
  store i32 1, ptr %491, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %492) #9
  store i32 0, ptr %492, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %493) #9
  store i32 0, ptr %493, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %490, ptr noundef nonnull align 4 dereferenceable(4) %491, ptr noundef nonnull align 4 dereferenceable(4) %492, ptr noundef nonnull align 4 dereferenceable(4) %493)
  call void @llvm.lifetime.start.p0(i64 12, ptr %494) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %495) #9
  store i32 0, ptr %495, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %496) #9
  store i32 0, ptr %496, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %497) #9
  store i32 0, ptr %497, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %494, ptr noundef nonnull align 4 dereferenceable(4) %495, ptr noundef nonnull align 4 dereferenceable(4) %496, ptr noundef nonnull align 4 dereferenceable(4) %497)
  call void @llvm.lifetime.start.p0(i64 12, ptr %498) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %499) #9
  store i32 0, ptr %499, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %500) #9
  store i32 0, ptr %500, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %501) #9
  store i32 1, ptr %501, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %498, ptr noundef nonnull align 4 dereferenceable(4) %499, ptr noundef nonnull align 4 dereferenceable(4) %500, ptr noundef nonnull align 4 dereferenceable(4) %501)
  call void @_ZN3cgp36camera_controller_first_person_euler7look_atERKNS_14numarray_stackIfLi3EEES4_S4_(ptr noundef nonnull align 8 dereferenceable(73) %489, ptr noundef nonnull align 4 dereferenceable(12) %490, ptr noundef nonnull align 4 dereferenceable(12) %494, ptr noundef nonnull align 4 dereferenceable(12) %498)
  call void @llvm.lifetime.end.p0(i64 4, ptr %501) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %500) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %499) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %498) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %497) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %496) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %495) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %494) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %493) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %492) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %491) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %490) #9
  call void @llvm.lifetime.start.p0(i64 12, ptr %502) #9
  %1534 = getelementptr inbounds %"struct.cgp::camera_controller_first_person_euler", ptr %489, i32 0, i32 1
  %1535 = call { <2 x float>, float } @_ZNK3cgp19camera_generic_base5frontEv(ptr noundef nonnull align 8 dereferenceable(8) %1534)
  store { <2 x float>, float } %1535, ptr %503, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %502, ptr align 8 %503, i64 12, i1 false)
  call void @llvm.lifetime.start.p0(i64 12, ptr %504) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %505) #9
  store i32 -1, ptr %505, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %506) #9
  store i32 0, ptr %506, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %507) #9
  store i32 0, ptr %507, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %504, ptr noundef nonnull align 4 dereferenceable(4) %505, ptr noundef nonnull align 4 dereferenceable(4) %506, ptr noundef nonnull align 4 dereferenceable(4) %507)
  %1536 = call noundef zeroext i1 @_ZN3cgp8is_equalIfLi3EEEbRKNS_14numarray_stackIT_XT0_EEES5_(ptr noundef nonnull align 4 dereferenceable(12) %502, ptr noundef nonnull align 4 dereferenceable(12) %504)
  %1537 = zext i1 %1536 to i32
  %1538 = icmp eq i32 %1537, 0
  call void @llvm.lifetime.end.p0(i64 4, ptr %507) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %506) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %505) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %504) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %502) #9
  br i1 %1538, label %1539, label %1571

1539:                                             ; preds = %1533
  call void @llvm.lifetime.start.p0(i64 32, ptr %508) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %509) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %509) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %508, ptr noundef @.str.10, ptr noundef nonnull align 1 dereferenceable(1) %509)
          to label %1540 unwind label %1547

1540:                                             ; preds = %1539
  call void @llvm.lifetime.start.p0(i64 32, ptr %510) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %511) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %511) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %510, ptr noundef @.str.1, ptr noundef nonnull align 1 dereferenceable(1) %511)
          to label %1541 unwind label %1551

1541:                                             ; preds = %1540
  call void @llvm.lifetime.start.p0(i64 32, ptr %512) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %513) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %513) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %512, ptr noundef @.str.2, ptr noundef nonnull align 1 dereferenceable(1) %513)
          to label %1542 unwind label %1555

1542:                                             ; preds = %1541
  call void @llvm.lifetime.start.p0(i64 32, ptr %514) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %515) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %515) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %514, ptr noundef @__func__._ZN8cgp_test22test_camera_controllerEv, ptr noundef nonnull align 1 dereferenceable(1) %515)
          to label %1543 unwind label %1559

1543:                                             ; preds = %1542
  invoke void @_ZN3cgp10call_errorERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_S7_S7_i(ptr noundef nonnull align 8 dereferenceable(32) %508, ptr noundef nonnull align 8 dereferenceable(32) %510, ptr noundef nonnull align 8 dereferenceable(32) %512, ptr noundef nonnull align 8 dereferenceable(32) %514, i32 noundef 79) #10
          to label %1544 unwind label %1563

1544:                                             ; preds = %1543
  unreachable

1545:                                             ; preds = %1532, %1496
  call void @llvm.lifetime.end.p0(i64 4, ptr %448) #9
  br label %1546

1546:                                             ; preds = %1545, %1455, %1419, %1383, %1347, %1311, %1275
  call void @llvm.lifetime.end.p0(i64 80, ptr %327) #9
  br label %1831

1547:                                             ; preds = %1539
  %1548 = landingpad { ptr, i32 }
          cleanup
  %1549 = extractvalue { ptr, i32 } %1548, 0
  store ptr %1549, ptr %22, align 8
  %1550 = extractvalue { ptr, i32 } %1548, 1
  store i32 %1550, ptr %23, align 4
  br label %1570

1551:                                             ; preds = %1540
  %1552 = landingpad { ptr, i32 }
          cleanup
  %1553 = extractvalue { ptr, i32 } %1552, 0
  store ptr %1553, ptr %22, align 8
  %1554 = extractvalue { ptr, i32 } %1552, 1
  store i32 %1554, ptr %23, align 4
  br label %1569

1555:                                             ; preds = %1541
  %1556 = landingpad { ptr, i32 }
          cleanup
  %1557 = extractvalue { ptr, i32 } %1556, 0
  store ptr %1557, ptr %22, align 8
  %1558 = extractvalue { ptr, i32 } %1556, 1
  store i32 %1558, ptr %23, align 4
  br label %1568

1559:                                             ; preds = %1542
  %1560 = landingpad { ptr, i32 }
          cleanup
  %1561 = extractvalue { ptr, i32 } %1560, 0
  store ptr %1561, ptr %22, align 8
  %1562 = extractvalue { ptr, i32 } %1560, 1
  store i32 %1562, ptr %23, align 4
  br label %1567

1563:                                             ; preds = %1543
  %1564 = landingpad { ptr, i32 }
          cleanup
  %1565 = extractvalue { ptr, i32 } %1564, 0
  store ptr %1565, ptr %22, align 8
  %1566 = extractvalue { ptr, i32 } %1564, 1
  store i32 %1566, ptr %23, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %514) #9
  br label %1567

1567:                                             ; preds = %1563, %1559
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %515) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %515) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %514) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %512) #9
  br label %1568

1568:                                             ; preds = %1567, %1555
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %513) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %513) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %512) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %510) #9
  br label %1569

1569:                                             ; preds = %1568, %1551
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %511) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %511) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %510) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %508) #9
  br label %1570

1570:                                             ; preds = %1569, %1547
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %509) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %509) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %508) #9
  br label %1830

1571:                                             ; preds = %1533
  call void @llvm.lifetime.start.p0(i64 12, ptr %516) #9
  %1572 = getelementptr inbounds %"struct.cgp::camera_controller_first_person_euler", ptr %489, i32 0, i32 1
  %1573 = call { <2 x float>, float } @_ZNK3cgp25camera_first_person_euler8positionEv(ptr noundef nonnull align 8 dereferenceable(44) %1572)
  store { <2 x float>, float } %1573, ptr %517, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %516, ptr align 8 %517, i64 12, i1 false)
  call void @llvm.lifetime.start.p0(i64 12, ptr %518) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %519) #9
  store i32 1, ptr %519, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %520) #9
  store i32 0, ptr %520, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %521) #9
  store i32 0, ptr %521, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %518, ptr noundef nonnull align 4 dereferenceable(4) %519, ptr noundef nonnull align 4 dereferenceable(4) %520, ptr noundef nonnull align 4 dereferenceable(4) %521)
  %1574 = call noundef zeroext i1 @_ZN3cgp8is_equalIfLi3EEEbRKNS_14numarray_stackIT_XT0_EEES5_(ptr noundef nonnull align 4 dereferenceable(12) %516, ptr noundef nonnull align 4 dereferenceable(12) %518)
  %1575 = zext i1 %1574 to i32
  %1576 = icmp eq i32 %1575, 0
  call void @llvm.lifetime.end.p0(i64 4, ptr %521) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %520) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %519) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %518) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %516) #9
  br i1 %1576, label %1577, label %1607

1577:                                             ; preds = %1571
  call void @llvm.lifetime.start.p0(i64 32, ptr %522) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %523) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %523) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %522, ptr noundef @.str.3, ptr noundef nonnull align 1 dereferenceable(1) %523)
          to label %1578 unwind label %1583

1578:                                             ; preds = %1577
  call void @llvm.lifetime.start.p0(i64 32, ptr %524) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %525) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %525) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %524, ptr noundef @.str.1, ptr noundef nonnull align 1 dereferenceable(1) %525)
          to label %1579 unwind label %1587

1579:                                             ; preds = %1578
  call void @llvm.lifetime.start.p0(i64 32, ptr %526) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %527) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %527) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %526, ptr noundef @.str.2, ptr noundef nonnull align 1 dereferenceable(1) %527)
          to label %1580 unwind label %1591

1580:                                             ; preds = %1579
  call void @llvm.lifetime.start.p0(i64 32, ptr %528) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %529) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %529) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %528, ptr noundef @__func__._ZN8cgp_test22test_camera_controllerEv, ptr noundef nonnull align 1 dereferenceable(1) %529)
          to label %1581 unwind label %1595

1581:                                             ; preds = %1580
  invoke void @_ZN3cgp10call_errorERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_S7_S7_i(ptr noundef nonnull align 8 dereferenceable(32) %522, ptr noundef nonnull align 8 dereferenceable(32) %524, ptr noundef nonnull align 8 dereferenceable(32) %526, ptr noundef nonnull align 8 dereferenceable(32) %528, i32 noundef 80) #10
          to label %1582 unwind label %1599

1582:                                             ; preds = %1581
  unreachable

1583:                                             ; preds = %1577
  %1584 = landingpad { ptr, i32 }
          cleanup
  %1585 = extractvalue { ptr, i32 } %1584, 0
  store ptr %1585, ptr %22, align 8
  %1586 = extractvalue { ptr, i32 } %1584, 1
  store i32 %1586, ptr %23, align 4
  br label %1606

1587:                                             ; preds = %1578
  %1588 = landingpad { ptr, i32 }
          cleanup
  %1589 = extractvalue { ptr, i32 } %1588, 0
  store ptr %1589, ptr %22, align 8
  %1590 = extractvalue { ptr, i32 } %1588, 1
  store i32 %1590, ptr %23, align 4
  br label %1605

1591:                                             ; preds = %1579
  %1592 = landingpad { ptr, i32 }
          cleanup
  %1593 = extractvalue { ptr, i32 } %1592, 0
  store ptr %1593, ptr %22, align 8
  %1594 = extractvalue { ptr, i32 } %1592, 1
  store i32 %1594, ptr %23, align 4
  br label %1604

1595:                                             ; preds = %1580
  %1596 = landingpad { ptr, i32 }
          cleanup
  %1597 = extractvalue { ptr, i32 } %1596, 0
  store ptr %1597, ptr %22, align 8
  %1598 = extractvalue { ptr, i32 } %1596, 1
  store i32 %1598, ptr %23, align 4
  br label %1603

1599:                                             ; preds = %1581
  %1600 = landingpad { ptr, i32 }
          cleanup
  %1601 = extractvalue { ptr, i32 } %1600, 0
  store ptr %1601, ptr %22, align 8
  %1602 = extractvalue { ptr, i32 } %1600, 1
  store i32 %1602, ptr %23, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %528) #9
  br label %1603

1603:                                             ; preds = %1599, %1595
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %529) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %529) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %528) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %526) #9
  br label %1604

1604:                                             ; preds = %1603, %1591
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %527) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %527) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %526) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %524) #9
  br label %1605

1605:                                             ; preds = %1604, %1587
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %525) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %525) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %524) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %522) #9
  br label %1606

1606:                                             ; preds = %1605, %1583
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %523) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %523) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %522) #9
  br label %1830

1607:                                             ; preds = %1571
  call void @llvm.lifetime.start.p0(i64 12, ptr %530) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %531) #9
  store i32 -1, ptr %531, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %532) #9
  store i32 0, ptr %532, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %533) #9
  store i32 0, ptr %533, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %530, ptr noundef nonnull align 4 dereferenceable(4) %531, ptr noundef nonnull align 4 dereferenceable(4) %532, ptr noundef nonnull align 4 dereferenceable(4) %533)
  call void @llvm.lifetime.start.p0(i64 12, ptr %534) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %535) #9
  store i32 0, ptr %535, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %536) #9
  store i32 0, ptr %536, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %537) #9
  store i32 0, ptr %537, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %534, ptr noundef nonnull align 4 dereferenceable(4) %535, ptr noundef nonnull align 4 dereferenceable(4) %536, ptr noundef nonnull align 4 dereferenceable(4) %537)
  call void @llvm.lifetime.start.p0(i64 12, ptr %538) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %539) #9
  store i32 0, ptr %539, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %540) #9
  store i32 0, ptr %540, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %541) #9
  store i32 1, ptr %541, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %538, ptr noundef nonnull align 4 dereferenceable(4) %539, ptr noundef nonnull align 4 dereferenceable(4) %540, ptr noundef nonnull align 4 dereferenceable(4) %541)
  call void @_ZN3cgp36camera_controller_first_person_euler7look_atERKNS_14numarray_stackIfLi3EEES4_S4_(ptr noundef nonnull align 8 dereferenceable(73) %489, ptr noundef nonnull align 4 dereferenceable(12) %530, ptr noundef nonnull align 4 dereferenceable(12) %534, ptr noundef nonnull align 4 dereferenceable(12) %538)
  call void @llvm.lifetime.end.p0(i64 4, ptr %541) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %540) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %539) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %538) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %537) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %536) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %535) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %534) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %533) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %532) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %531) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %530) #9
  call void @llvm.lifetime.start.p0(i64 12, ptr %542) #9
  %1608 = getelementptr inbounds %"struct.cgp::camera_controller_first_person_euler", ptr %489, i32 0, i32 1
  %1609 = call { <2 x float>, float } @_ZNK3cgp19camera_generic_base5frontEv(ptr noundef nonnull align 8 dereferenceable(8) %1608)
  store { <2 x float>, float } %1609, ptr %543, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %542, ptr align 8 %543, i64 12, i1 false)
  call void @llvm.lifetime.start.p0(i64 12, ptr %544) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %545) #9
  store i32 1, ptr %545, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %546) #9
  store i32 0, ptr %546, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %547) #9
  store i32 0, ptr %547, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %544, ptr noundef nonnull align 4 dereferenceable(4) %545, ptr noundef nonnull align 4 dereferenceable(4) %546, ptr noundef nonnull align 4 dereferenceable(4) %547)
  %1610 = call noundef zeroext i1 @_ZN3cgp8is_equalIfLi3EEEbRKNS_14numarray_stackIT_XT0_EEES5_(ptr noundef nonnull align 4 dereferenceable(12) %542, ptr noundef nonnull align 4 dereferenceable(12) %544)
  %1611 = zext i1 %1610 to i32
  %1612 = icmp eq i32 %1611, 0
  call void @llvm.lifetime.end.p0(i64 4, ptr %547) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %546) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %545) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %544) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %542) #9
  br i1 %1612, label %1613, label %1643

1613:                                             ; preds = %1607
  call void @llvm.lifetime.start.p0(i64 32, ptr %548) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %549) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %549) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %548, ptr noundef @.str.4, ptr noundef nonnull align 1 dereferenceable(1) %549)
          to label %1614 unwind label %1619

1614:                                             ; preds = %1613
  call void @llvm.lifetime.start.p0(i64 32, ptr %550) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %551) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %551) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %550, ptr noundef @.str.1, ptr noundef nonnull align 1 dereferenceable(1) %551)
          to label %1615 unwind label %1623

1615:                                             ; preds = %1614
  call void @llvm.lifetime.start.p0(i64 32, ptr %552) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %553) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %553) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %552, ptr noundef @.str.2, ptr noundef nonnull align 1 dereferenceable(1) %553)
          to label %1616 unwind label %1627

1616:                                             ; preds = %1615
  call void @llvm.lifetime.start.p0(i64 32, ptr %554) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %555) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %555) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %554, ptr noundef @__func__._ZN8cgp_test22test_camera_controllerEv, ptr noundef nonnull align 1 dereferenceable(1) %555)
          to label %1617 unwind label %1631

1617:                                             ; preds = %1616
  invoke void @_ZN3cgp10call_errorERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_S7_S7_i(ptr noundef nonnull align 8 dereferenceable(32) %548, ptr noundef nonnull align 8 dereferenceable(32) %550, ptr noundef nonnull align 8 dereferenceable(32) %552, ptr noundef nonnull align 8 dereferenceable(32) %554, i32 noundef 83) #10
          to label %1618 unwind label %1635

1618:                                             ; preds = %1617
  unreachable

1619:                                             ; preds = %1613
  %1620 = landingpad { ptr, i32 }
          cleanup
  %1621 = extractvalue { ptr, i32 } %1620, 0
  store ptr %1621, ptr %22, align 8
  %1622 = extractvalue { ptr, i32 } %1620, 1
  store i32 %1622, ptr %23, align 4
  br label %1642

1623:                                             ; preds = %1614
  %1624 = landingpad { ptr, i32 }
          cleanup
  %1625 = extractvalue { ptr, i32 } %1624, 0
  store ptr %1625, ptr %22, align 8
  %1626 = extractvalue { ptr, i32 } %1624, 1
  store i32 %1626, ptr %23, align 4
  br label %1641

1627:                                             ; preds = %1615
  %1628 = landingpad { ptr, i32 }
          cleanup
  %1629 = extractvalue { ptr, i32 } %1628, 0
  store ptr %1629, ptr %22, align 8
  %1630 = extractvalue { ptr, i32 } %1628, 1
  store i32 %1630, ptr %23, align 4
  br label %1640

1631:                                             ; preds = %1616
  %1632 = landingpad { ptr, i32 }
          cleanup
  %1633 = extractvalue { ptr, i32 } %1632, 0
  store ptr %1633, ptr %22, align 8
  %1634 = extractvalue { ptr, i32 } %1632, 1
  store i32 %1634, ptr %23, align 4
  br label %1639

1635:                                             ; preds = %1617
  %1636 = landingpad { ptr, i32 }
          cleanup
  %1637 = extractvalue { ptr, i32 } %1636, 0
  store ptr %1637, ptr %22, align 8
  %1638 = extractvalue { ptr, i32 } %1636, 1
  store i32 %1638, ptr %23, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %554) #9
  br label %1639

1639:                                             ; preds = %1635, %1631
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %555) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %555) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %554) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %552) #9
  br label %1640

1640:                                             ; preds = %1639, %1627
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %553) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %553) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %552) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %550) #9
  br label %1641

1641:                                             ; preds = %1640, %1623
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %551) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %551) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %550) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %548) #9
  br label %1642

1642:                                             ; preds = %1641, %1619
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %549) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %549) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %548) #9
  br label %1830

1643:                                             ; preds = %1607
  call void @llvm.lifetime.start.p0(i64 12, ptr %556) #9
  %1644 = getelementptr inbounds %"struct.cgp::camera_controller_first_person_euler", ptr %489, i32 0, i32 1
  %1645 = call { <2 x float>, float } @_ZNK3cgp25camera_first_person_euler8positionEv(ptr noundef nonnull align 8 dereferenceable(44) %1644)
  store { <2 x float>, float } %1645, ptr %557, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %556, ptr align 8 %557, i64 12, i1 false)
  call void @llvm.lifetime.start.p0(i64 12, ptr %558) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %559) #9
  store i32 -1, ptr %559, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %560) #9
  store i32 0, ptr %560, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %561) #9
  store i32 0, ptr %561, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %558, ptr noundef nonnull align 4 dereferenceable(4) %559, ptr noundef nonnull align 4 dereferenceable(4) %560, ptr noundef nonnull align 4 dereferenceable(4) %561)
  %1646 = call noundef zeroext i1 @_ZN3cgp8is_equalIfLi3EEEbRKNS_14numarray_stackIT_XT0_EEES5_(ptr noundef nonnull align 4 dereferenceable(12) %556, ptr noundef nonnull align 4 dereferenceable(12) %558)
  %1647 = zext i1 %1646 to i32
  %1648 = icmp eq i32 %1647, 0
  call void @llvm.lifetime.end.p0(i64 4, ptr %561) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %560) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %559) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %558) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %556) #9
  br i1 %1648, label %1649, label %1679

1649:                                             ; preds = %1643
  call void @llvm.lifetime.start.p0(i64 32, ptr %562) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %563) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %563) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %562, ptr noundef @.str.5, ptr noundef nonnull align 1 dereferenceable(1) %563)
          to label %1650 unwind label %1655

1650:                                             ; preds = %1649
  call void @llvm.lifetime.start.p0(i64 32, ptr %564) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %565) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %565) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %564, ptr noundef @.str.1, ptr noundef nonnull align 1 dereferenceable(1) %565)
          to label %1651 unwind label %1659

1651:                                             ; preds = %1650
  call void @llvm.lifetime.start.p0(i64 32, ptr %566) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %567) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %567) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %566, ptr noundef @.str.2, ptr noundef nonnull align 1 dereferenceable(1) %567)
          to label %1652 unwind label %1663

1652:                                             ; preds = %1651
  call void @llvm.lifetime.start.p0(i64 32, ptr %568) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %569) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %569) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %568, ptr noundef @__func__._ZN8cgp_test22test_camera_controllerEv, ptr noundef nonnull align 1 dereferenceable(1) %569)
          to label %1653 unwind label %1667

1653:                                             ; preds = %1652
  invoke void @_ZN3cgp10call_errorERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_S7_S7_i(ptr noundef nonnull align 8 dereferenceable(32) %562, ptr noundef nonnull align 8 dereferenceable(32) %564, ptr noundef nonnull align 8 dereferenceable(32) %566, ptr noundef nonnull align 8 dereferenceable(32) %568, i32 noundef 84) #10
          to label %1654 unwind label %1671

1654:                                             ; preds = %1653
  unreachable

1655:                                             ; preds = %1649
  %1656 = landingpad { ptr, i32 }
          cleanup
  %1657 = extractvalue { ptr, i32 } %1656, 0
  store ptr %1657, ptr %22, align 8
  %1658 = extractvalue { ptr, i32 } %1656, 1
  store i32 %1658, ptr %23, align 4
  br label %1678

1659:                                             ; preds = %1650
  %1660 = landingpad { ptr, i32 }
          cleanup
  %1661 = extractvalue { ptr, i32 } %1660, 0
  store ptr %1661, ptr %22, align 8
  %1662 = extractvalue { ptr, i32 } %1660, 1
  store i32 %1662, ptr %23, align 4
  br label %1677

1663:                                             ; preds = %1651
  %1664 = landingpad { ptr, i32 }
          cleanup
  %1665 = extractvalue { ptr, i32 } %1664, 0
  store ptr %1665, ptr %22, align 8
  %1666 = extractvalue { ptr, i32 } %1664, 1
  store i32 %1666, ptr %23, align 4
  br label %1676

1667:                                             ; preds = %1652
  %1668 = landingpad { ptr, i32 }
          cleanup
  %1669 = extractvalue { ptr, i32 } %1668, 0
  store ptr %1669, ptr %22, align 8
  %1670 = extractvalue { ptr, i32 } %1668, 1
  store i32 %1670, ptr %23, align 4
  br label %1675

1671:                                             ; preds = %1653
  %1672 = landingpad { ptr, i32 }
          cleanup
  %1673 = extractvalue { ptr, i32 } %1672, 0
  store ptr %1673, ptr %22, align 8
  %1674 = extractvalue { ptr, i32 } %1672, 1
  store i32 %1674, ptr %23, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %568) #9
  br label %1675

1675:                                             ; preds = %1671, %1667
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %569) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %569) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %568) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %566) #9
  br label %1676

1676:                                             ; preds = %1675, %1663
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %567) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %567) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %566) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %564) #9
  br label %1677

1677:                                             ; preds = %1676, %1659
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %565) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %565) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %564) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %562) #9
  br label %1678

1678:                                             ; preds = %1677, %1655
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %563) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %563) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %562) #9
  br label %1830

1679:                                             ; preds = %1643
  call void @llvm.lifetime.start.p0(i64 12, ptr %570) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %571) #9
  store i32 0, ptr %571, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %572) #9
  store i32 1, ptr %572, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %573) #9
  store i32 0, ptr %573, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %570, ptr noundef nonnull align 4 dereferenceable(4) %571, ptr noundef nonnull align 4 dereferenceable(4) %572, ptr noundef nonnull align 4 dereferenceable(4) %573)
  call void @llvm.lifetime.start.p0(i64 12, ptr %574) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %575) #9
  store i32 0, ptr %575, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %576) #9
  store i32 0, ptr %576, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %577) #9
  store i32 0, ptr %577, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %574, ptr noundef nonnull align 4 dereferenceable(4) %575, ptr noundef nonnull align 4 dereferenceable(4) %576, ptr noundef nonnull align 4 dereferenceable(4) %577)
  call void @llvm.lifetime.start.p0(i64 12, ptr %578) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %579) #9
  store i32 0, ptr %579, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %580) #9
  store i32 0, ptr %580, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %581) #9
  store i32 1, ptr %581, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %578, ptr noundef nonnull align 4 dereferenceable(4) %579, ptr noundef nonnull align 4 dereferenceable(4) %580, ptr noundef nonnull align 4 dereferenceable(4) %581)
  call void @_ZN3cgp36camera_controller_first_person_euler7look_atERKNS_14numarray_stackIfLi3EEES4_S4_(ptr noundef nonnull align 8 dereferenceable(73) %489, ptr noundef nonnull align 4 dereferenceable(12) %570, ptr noundef nonnull align 4 dereferenceable(12) %574, ptr noundef nonnull align 4 dereferenceable(12) %578)
  call void @llvm.lifetime.end.p0(i64 4, ptr %581) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %580) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %579) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %578) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %577) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %576) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %575) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %574) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %573) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %572) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %571) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %570) #9
  call void @llvm.lifetime.start.p0(i64 12, ptr %582) #9
  %1680 = getelementptr inbounds %"struct.cgp::camera_controller_first_person_euler", ptr %489, i32 0, i32 1
  %1681 = call { <2 x float>, float } @_ZNK3cgp19camera_generic_base5frontEv(ptr noundef nonnull align 8 dereferenceable(8) %1680)
  store { <2 x float>, float } %1681, ptr %583, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %582, ptr align 8 %583, i64 12, i1 false)
  call void @llvm.lifetime.start.p0(i64 12, ptr %584) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %585) #9
  store i32 0, ptr %585, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %586) #9
  store i32 -1, ptr %586, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %587) #9
  store i32 0, ptr %587, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %584, ptr noundef nonnull align 4 dereferenceable(4) %585, ptr noundef nonnull align 4 dereferenceable(4) %586, ptr noundef nonnull align 4 dereferenceable(4) %587)
  %1682 = call noundef zeroext i1 @_ZN3cgp8is_equalIfLi3EEEbRKNS_14numarray_stackIT_XT0_EEES5_(ptr noundef nonnull align 4 dereferenceable(12) %582, ptr noundef nonnull align 4 dereferenceable(12) %584)
  %1683 = zext i1 %1682 to i32
  %1684 = icmp eq i32 %1683, 0
  call void @llvm.lifetime.end.p0(i64 4, ptr %587) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %586) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %585) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %584) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %582) #9
  br i1 %1684, label %1685, label %1715

1685:                                             ; preds = %1679
  call void @llvm.lifetime.start.p0(i64 32, ptr %588) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %589) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %589) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %588, ptr noundef @.str.6, ptr noundef nonnull align 1 dereferenceable(1) %589)
          to label %1686 unwind label %1691

1686:                                             ; preds = %1685
  call void @llvm.lifetime.start.p0(i64 32, ptr %590) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %591) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %591) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %590, ptr noundef @.str.1, ptr noundef nonnull align 1 dereferenceable(1) %591)
          to label %1687 unwind label %1695

1687:                                             ; preds = %1686
  call void @llvm.lifetime.start.p0(i64 32, ptr %592) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %593) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %593) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %592, ptr noundef @.str.2, ptr noundef nonnull align 1 dereferenceable(1) %593)
          to label %1688 unwind label %1699

1688:                                             ; preds = %1687
  call void @llvm.lifetime.start.p0(i64 32, ptr %594) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %595) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %595) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %594, ptr noundef @__func__._ZN8cgp_test22test_camera_controllerEv, ptr noundef nonnull align 1 dereferenceable(1) %595)
          to label %1689 unwind label %1703

1689:                                             ; preds = %1688
  invoke void @_ZN3cgp10call_errorERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_S7_S7_i(ptr noundef nonnull align 8 dereferenceable(32) %588, ptr noundef nonnull align 8 dereferenceable(32) %590, ptr noundef nonnull align 8 dereferenceable(32) %592, ptr noundef nonnull align 8 dereferenceable(32) %594, i32 noundef 87) #10
          to label %1690 unwind label %1707

1690:                                             ; preds = %1689
  unreachable

1691:                                             ; preds = %1685
  %1692 = landingpad { ptr, i32 }
          cleanup
  %1693 = extractvalue { ptr, i32 } %1692, 0
  store ptr %1693, ptr %22, align 8
  %1694 = extractvalue { ptr, i32 } %1692, 1
  store i32 %1694, ptr %23, align 4
  br label %1714

1695:                                             ; preds = %1686
  %1696 = landingpad { ptr, i32 }
          cleanup
  %1697 = extractvalue { ptr, i32 } %1696, 0
  store ptr %1697, ptr %22, align 8
  %1698 = extractvalue { ptr, i32 } %1696, 1
  store i32 %1698, ptr %23, align 4
  br label %1713

1699:                                             ; preds = %1687
  %1700 = landingpad { ptr, i32 }
          cleanup
  %1701 = extractvalue { ptr, i32 } %1700, 0
  store ptr %1701, ptr %22, align 8
  %1702 = extractvalue { ptr, i32 } %1700, 1
  store i32 %1702, ptr %23, align 4
  br label %1712

1703:                                             ; preds = %1688
  %1704 = landingpad { ptr, i32 }
          cleanup
  %1705 = extractvalue { ptr, i32 } %1704, 0
  store ptr %1705, ptr %22, align 8
  %1706 = extractvalue { ptr, i32 } %1704, 1
  store i32 %1706, ptr %23, align 4
  br label %1711

1707:                                             ; preds = %1689
  %1708 = landingpad { ptr, i32 }
          cleanup
  %1709 = extractvalue { ptr, i32 } %1708, 0
  store ptr %1709, ptr %22, align 8
  %1710 = extractvalue { ptr, i32 } %1708, 1
  store i32 %1710, ptr %23, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %594) #9
  br label %1711

1711:                                             ; preds = %1707, %1703
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %595) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %595) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %594) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %592) #9
  br label %1712

1712:                                             ; preds = %1711, %1699
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %593) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %593) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %592) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %590) #9
  br label %1713

1713:                                             ; preds = %1712, %1695
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %591) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %591) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %590) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %588) #9
  br label %1714

1714:                                             ; preds = %1713, %1691
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %589) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %589) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %588) #9
  br label %1830

1715:                                             ; preds = %1679
  call void @llvm.lifetime.start.p0(i64 12, ptr %596) #9
  %1716 = getelementptr inbounds %"struct.cgp::camera_controller_first_person_euler", ptr %489, i32 0, i32 1
  %1717 = call { <2 x float>, float } @_ZNK3cgp25camera_first_person_euler8positionEv(ptr noundef nonnull align 8 dereferenceable(44) %1716)
  store { <2 x float>, float } %1717, ptr %597, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %596, ptr align 8 %597, i64 12, i1 false)
  call void @llvm.lifetime.start.p0(i64 12, ptr %598) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %599) #9
  store i32 0, ptr %599, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %600) #9
  store i32 1, ptr %600, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %601) #9
  store i32 0, ptr %601, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %598, ptr noundef nonnull align 4 dereferenceable(4) %599, ptr noundef nonnull align 4 dereferenceable(4) %600, ptr noundef nonnull align 4 dereferenceable(4) %601)
  %1718 = call noundef zeroext i1 @_ZN3cgp8is_equalIfLi3EEEbRKNS_14numarray_stackIT_XT0_EEES5_(ptr noundef nonnull align 4 dereferenceable(12) %596, ptr noundef nonnull align 4 dereferenceable(12) %598)
  %1719 = zext i1 %1718 to i32
  %1720 = icmp eq i32 %1719, 0
  call void @llvm.lifetime.end.p0(i64 4, ptr %601) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %600) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %599) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %598) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %596) #9
  br i1 %1720, label %1721, label %1751

1721:                                             ; preds = %1715
  call void @llvm.lifetime.start.p0(i64 32, ptr %602) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %603) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %603) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %602, ptr noundef @.str.7, ptr noundef nonnull align 1 dereferenceable(1) %603)
          to label %1722 unwind label %1727

1722:                                             ; preds = %1721
  call void @llvm.lifetime.start.p0(i64 32, ptr %604) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %605) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %605) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %604, ptr noundef @.str.1, ptr noundef nonnull align 1 dereferenceable(1) %605)
          to label %1723 unwind label %1731

1723:                                             ; preds = %1722
  call void @llvm.lifetime.start.p0(i64 32, ptr %606) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %607) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %607) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %606, ptr noundef @.str.2, ptr noundef nonnull align 1 dereferenceable(1) %607)
          to label %1724 unwind label %1735

1724:                                             ; preds = %1723
  call void @llvm.lifetime.start.p0(i64 32, ptr %608) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %609) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %609) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %608, ptr noundef @__func__._ZN8cgp_test22test_camera_controllerEv, ptr noundef nonnull align 1 dereferenceable(1) %609)
          to label %1725 unwind label %1739

1725:                                             ; preds = %1724
  invoke void @_ZN3cgp10call_errorERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_S7_S7_i(ptr noundef nonnull align 8 dereferenceable(32) %602, ptr noundef nonnull align 8 dereferenceable(32) %604, ptr noundef nonnull align 8 dereferenceable(32) %606, ptr noundef nonnull align 8 dereferenceable(32) %608, i32 noundef 88) #10
          to label %1726 unwind label %1743

1726:                                             ; preds = %1725
  unreachable

1727:                                             ; preds = %1721
  %1728 = landingpad { ptr, i32 }
          cleanup
  %1729 = extractvalue { ptr, i32 } %1728, 0
  store ptr %1729, ptr %22, align 8
  %1730 = extractvalue { ptr, i32 } %1728, 1
  store i32 %1730, ptr %23, align 4
  br label %1750

1731:                                             ; preds = %1722
  %1732 = landingpad { ptr, i32 }
          cleanup
  %1733 = extractvalue { ptr, i32 } %1732, 0
  store ptr %1733, ptr %22, align 8
  %1734 = extractvalue { ptr, i32 } %1732, 1
  store i32 %1734, ptr %23, align 4
  br label %1749

1735:                                             ; preds = %1723
  %1736 = landingpad { ptr, i32 }
          cleanup
  %1737 = extractvalue { ptr, i32 } %1736, 0
  store ptr %1737, ptr %22, align 8
  %1738 = extractvalue { ptr, i32 } %1736, 1
  store i32 %1738, ptr %23, align 4
  br label %1748

1739:                                             ; preds = %1724
  %1740 = landingpad { ptr, i32 }
          cleanup
  %1741 = extractvalue { ptr, i32 } %1740, 0
  store ptr %1741, ptr %22, align 8
  %1742 = extractvalue { ptr, i32 } %1740, 1
  store i32 %1742, ptr %23, align 4
  br label %1747

1743:                                             ; preds = %1725
  %1744 = landingpad { ptr, i32 }
          cleanup
  %1745 = extractvalue { ptr, i32 } %1744, 0
  store ptr %1745, ptr %22, align 8
  %1746 = extractvalue { ptr, i32 } %1744, 1
  store i32 %1746, ptr %23, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %608) #9
  br label %1747

1747:                                             ; preds = %1743, %1739
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %609) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %609) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %608) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %606) #9
  br label %1748

1748:                                             ; preds = %1747, %1735
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %607) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %607) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %606) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %604) #9
  br label %1749

1749:                                             ; preds = %1748, %1731
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %605) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %605) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %604) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %602) #9
  br label %1750

1750:                                             ; preds = %1749, %1727
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %603) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %603) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %602) #9
  br label %1830

1751:                                             ; preds = %1715
  call void @llvm.lifetime.start.p0(i64 4, ptr %610) #9
  %1752 = call noundef float @_ZSt4sqrtf(float noundef 2.000000e+00)
  store float %1752, ptr %610, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 12, ptr %611) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %612) #9
  store i32 1, ptr %612, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %613) #9
  store i32 1, ptr %613, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %614) #9
  store i32 0, ptr %614, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %611, ptr noundef nonnull align 4 dereferenceable(4) %612, ptr noundef nonnull align 4 dereferenceable(4) %613, ptr noundef nonnull align 4 dereferenceable(4) %614)
  call void @llvm.lifetime.start.p0(i64 12, ptr %615) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %616) #9
  store i32 0, ptr %616, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %617) #9
  store i32 0, ptr %617, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %618) #9
  store i32 0, ptr %618, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %615, ptr noundef nonnull align 4 dereferenceable(4) %616, ptr noundef nonnull align 4 dereferenceable(4) %617, ptr noundef nonnull align 4 dereferenceable(4) %618)
  call void @llvm.lifetime.start.p0(i64 12, ptr %619) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %620) #9
  store i32 0, ptr %620, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %621) #9
  store i32 0, ptr %621, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %622) #9
  store i32 1, ptr %622, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %619, ptr noundef nonnull align 4 dereferenceable(4) %620, ptr noundef nonnull align 4 dereferenceable(4) %621, ptr noundef nonnull align 4 dereferenceable(4) %622)
  call void @_ZN3cgp36camera_controller_first_person_euler7look_atERKNS_14numarray_stackIfLi3EEES4_S4_(ptr noundef nonnull align 8 dereferenceable(73) %489, ptr noundef nonnull align 4 dereferenceable(12) %611, ptr noundef nonnull align 4 dereferenceable(12) %615, ptr noundef nonnull align 4 dereferenceable(12) %619)
  call void @llvm.lifetime.end.p0(i64 4, ptr %622) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %621) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %620) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %619) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %618) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %617) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %616) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %615) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %614) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %613) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %612) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %611) #9
  call void @llvm.lifetime.start.p0(i64 12, ptr %623) #9
  %1753 = getelementptr inbounds %"struct.cgp::camera_controller_first_person_euler", ptr %489, i32 0, i32 1
  %1754 = call { <2 x float>, float } @_ZNK3cgp19camera_generic_base5frontEv(ptr noundef nonnull align 8 dereferenceable(8) %1753)
  store { <2 x float>, float } %1754, ptr %624, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %623, ptr align 8 %624, i64 12, i1 false)
  call void @llvm.lifetime.start.p0(i64 12, ptr %625) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %626) #9
  %1755 = load float, ptr %610, align 4, !tbaa !9
  %1756 = fdiv float -1.000000e+00, %1755
  store float %1756, ptr %626, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %627) #9
  %1757 = load float, ptr %610, align 4, !tbaa !9
  %1758 = fdiv float -1.000000e+00, %1757
  store float %1758, ptr %627, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %628) #9
  store i32 0, ptr %628, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IffiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %625, ptr noundef nonnull align 4 dereferenceable(4) %626, ptr noundef nonnull align 4 dereferenceable(4) %627, ptr noundef nonnull align 4 dereferenceable(4) %628)
  %1759 = call noundef zeroext i1 @_ZN3cgp8is_equalIfLi3EEEbRKNS_14numarray_stackIT_XT0_EEES5_(ptr noundef nonnull align 4 dereferenceable(12) %623, ptr noundef nonnull align 4 dereferenceable(12) %625)
  %1760 = zext i1 %1759 to i32
  %1761 = icmp eq i32 %1760, 0
  call void @llvm.lifetime.end.p0(i64 4, ptr %628) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %627) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %626) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %625) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %623) #9
  br i1 %1761, label %1762, label %1792

1762:                                             ; preds = %1751
  call void @llvm.lifetime.start.p0(i64 32, ptr %629) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %630) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %630) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %629, ptr noundef @.str.12, ptr noundef nonnull align 1 dereferenceable(1) %630)
          to label %1763 unwind label %1768

1763:                                             ; preds = %1762
  call void @llvm.lifetime.start.p0(i64 32, ptr %631) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %632) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %632) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %631, ptr noundef @.str.1, ptr noundef nonnull align 1 dereferenceable(1) %632)
          to label %1764 unwind label %1772

1764:                                             ; preds = %1763
  call void @llvm.lifetime.start.p0(i64 32, ptr %633) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %634) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %634) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %633, ptr noundef @.str.2, ptr noundef nonnull align 1 dereferenceable(1) %634)
          to label %1765 unwind label %1776

1765:                                             ; preds = %1764
  call void @llvm.lifetime.start.p0(i64 32, ptr %635) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %636) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %636) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %635, ptr noundef @__func__._ZN8cgp_test22test_camera_controllerEv, ptr noundef nonnull align 1 dereferenceable(1) %636)
          to label %1766 unwind label %1780

1766:                                             ; preds = %1765
  invoke void @_ZN3cgp10call_errorERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_S7_S7_i(ptr noundef nonnull align 8 dereferenceable(32) %629, ptr noundef nonnull align 8 dereferenceable(32) %631, ptr noundef nonnull align 8 dereferenceable(32) %633, ptr noundef nonnull align 8 dereferenceable(32) %635, i32 noundef 92) #10
          to label %1767 unwind label %1784

1767:                                             ; preds = %1766
  unreachable

1768:                                             ; preds = %1762
  %1769 = landingpad { ptr, i32 }
          cleanup
  %1770 = extractvalue { ptr, i32 } %1769, 0
  store ptr %1770, ptr %22, align 8
  %1771 = extractvalue { ptr, i32 } %1769, 1
  store i32 %1771, ptr %23, align 4
  br label %1791

1772:                                             ; preds = %1763
  %1773 = landingpad { ptr, i32 }
          cleanup
  %1774 = extractvalue { ptr, i32 } %1773, 0
  store ptr %1774, ptr %22, align 8
  %1775 = extractvalue { ptr, i32 } %1773, 1
  store i32 %1775, ptr %23, align 4
  br label %1790

1776:                                             ; preds = %1764
  %1777 = landingpad { ptr, i32 }
          cleanup
  %1778 = extractvalue { ptr, i32 } %1777, 0
  store ptr %1778, ptr %22, align 8
  %1779 = extractvalue { ptr, i32 } %1777, 1
  store i32 %1779, ptr %23, align 4
  br label %1789

1780:                                             ; preds = %1765
  %1781 = landingpad { ptr, i32 }
          cleanup
  %1782 = extractvalue { ptr, i32 } %1781, 0
  store ptr %1782, ptr %22, align 8
  %1783 = extractvalue { ptr, i32 } %1781, 1
  store i32 %1783, ptr %23, align 4
  br label %1788

1784:                                             ; preds = %1766
  %1785 = landingpad { ptr, i32 }
          cleanup
  %1786 = extractvalue { ptr, i32 } %1785, 0
  store ptr %1786, ptr %22, align 8
  %1787 = extractvalue { ptr, i32 } %1785, 1
  store i32 %1787, ptr %23, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %635) #9
  br label %1788

1788:                                             ; preds = %1784, %1780
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %636) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %636) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %635) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %633) #9
  br label %1789

1789:                                             ; preds = %1788, %1776
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %634) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %634) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %633) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %631) #9
  br label %1790

1790:                                             ; preds = %1789, %1772
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %632) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %632) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %631) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %629) #9
  br label %1791

1791:                                             ; preds = %1790, %1768
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %630) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %630) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %629) #9
  br label %1829

1792:                                             ; preds = %1751
  call void @llvm.lifetime.start.p0(i64 12, ptr %637) #9
  %1793 = getelementptr inbounds %"struct.cgp::camera_controller_first_person_euler", ptr %489, i32 0, i32 1
  %1794 = call { <2 x float>, float } @_ZNK3cgp25camera_first_person_euler8positionEv(ptr noundef nonnull align 8 dereferenceable(44) %1793)
  store { <2 x float>, float } %1794, ptr %638, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %637, ptr align 8 %638, i64 12, i1 false)
  call void @llvm.lifetime.start.p0(i64 12, ptr %639) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %640) #9
  store i32 1, ptr %640, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %641) #9
  store i32 1, ptr %641, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %642) #9
  store i32 0, ptr %642, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %639, ptr noundef nonnull align 4 dereferenceable(4) %640, ptr noundef nonnull align 4 dereferenceable(4) %641, ptr noundef nonnull align 4 dereferenceable(4) %642)
  %1795 = call noundef zeroext i1 @_ZN3cgp8is_equalIfLi3EEEbRKNS_14numarray_stackIT_XT0_EEES5_(ptr noundef nonnull align 4 dereferenceable(12) %637, ptr noundef nonnull align 4 dereferenceable(12) %639)
  %1796 = zext i1 %1795 to i32
  %1797 = icmp eq i32 %1796, 0
  call void @llvm.lifetime.end.p0(i64 4, ptr %642) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %641) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %640) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %639) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %637) #9
  br i1 %1797, label %1798, label %1828

1798:                                             ; preds = %1792
  call void @llvm.lifetime.start.p0(i64 32, ptr %643) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %644) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %644) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %643, ptr noundef @.str.9, ptr noundef nonnull align 1 dereferenceable(1) %644)
          to label %1799 unwind label %1804

1799:                                             ; preds = %1798
  call void @llvm.lifetime.start.p0(i64 32, ptr %645) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %646) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %646) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %645, ptr noundef @.str.1, ptr noundef nonnull align 1 dereferenceable(1) %646)
          to label %1800 unwind label %1808

1800:                                             ; preds = %1799
  call void @llvm.lifetime.start.p0(i64 32, ptr %647) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %648) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %648) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %647, ptr noundef @.str.2, ptr noundef nonnull align 1 dereferenceable(1) %648)
          to label %1801 unwind label %1812

1801:                                             ; preds = %1800
  call void @llvm.lifetime.start.p0(i64 32, ptr %649) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %650) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %650) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %649, ptr noundef @__func__._ZN8cgp_test22test_camera_controllerEv, ptr noundef nonnull align 1 dereferenceable(1) %650)
          to label %1802 unwind label %1816

1802:                                             ; preds = %1801
  invoke void @_ZN3cgp10call_errorERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_S7_S7_i(ptr noundef nonnull align 8 dereferenceable(32) %643, ptr noundef nonnull align 8 dereferenceable(32) %645, ptr noundef nonnull align 8 dereferenceable(32) %647, ptr noundef nonnull align 8 dereferenceable(32) %649, i32 noundef 93) #10
          to label %1803 unwind label %1820

1803:                                             ; preds = %1802
  unreachable

1804:                                             ; preds = %1798
  %1805 = landingpad { ptr, i32 }
          cleanup
  %1806 = extractvalue { ptr, i32 } %1805, 0
  store ptr %1806, ptr %22, align 8
  %1807 = extractvalue { ptr, i32 } %1805, 1
  store i32 %1807, ptr %23, align 4
  br label %1827

1808:                                             ; preds = %1799
  %1809 = landingpad { ptr, i32 }
          cleanup
  %1810 = extractvalue { ptr, i32 } %1809, 0
  store ptr %1810, ptr %22, align 8
  %1811 = extractvalue { ptr, i32 } %1809, 1
  store i32 %1811, ptr %23, align 4
  br label %1826

1812:                                             ; preds = %1800
  %1813 = landingpad { ptr, i32 }
          cleanup
  %1814 = extractvalue { ptr, i32 } %1813, 0
  store ptr %1814, ptr %22, align 8
  %1815 = extractvalue { ptr, i32 } %1813, 1
  store i32 %1815, ptr %23, align 4
  br label %1825

1816:                                             ; preds = %1801
  %1817 = landingpad { ptr, i32 }
          cleanup
  %1818 = extractvalue { ptr, i32 } %1817, 0
  store ptr %1818, ptr %22, align 8
  %1819 = extractvalue { ptr, i32 } %1817, 1
  store i32 %1819, ptr %23, align 4
  br label %1824

1820:                                             ; preds = %1802
  %1821 = landingpad { ptr, i32 }
          cleanup
  %1822 = extractvalue { ptr, i32 } %1821, 0
  store ptr %1822, ptr %22, align 8
  %1823 = extractvalue { ptr, i32 } %1821, 1
  store i32 %1823, ptr %23, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %649) #9
  br label %1824

1824:                                             ; preds = %1820, %1816
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %650) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %650) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %649) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %647) #9
  br label %1825

1825:                                             ; preds = %1824, %1812
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %648) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %648) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %647) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %645) #9
  br label %1826

1826:                                             ; preds = %1825, %1808
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %646) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %646) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %645) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %643) #9
  br label %1827

1827:                                             ; preds = %1826, %1804
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %644) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %644) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %643) #9
  br label %1829

1828:                                             ; preds = %1792
  call void @llvm.lifetime.end.p0(i64 4, ptr %610) #9
  call void @llvm.lifetime.end.p0(i64 80, ptr %489) #9
  ret void

1829:                                             ; preds = %1827, %1791
  call void @llvm.lifetime.end.p0(i64 4, ptr %610) #9
  br label %1830

1830:                                             ; preds = %1829, %1750, %1714, %1678, %1642, %1606, %1570
  call void @llvm.lifetime.end.p0(i64 80, ptr %489) #9
  br label %1831

1831:                                             ; preds = %1830, %1546, %1251, %956
  %1832 = load ptr, ptr %22, align 8
  %1833 = load i32, ptr %23, align 4
  %1834 = insertvalue { ptr, i32 } poison, ptr %1832, 0
  %1835 = insertvalue { ptr, i32 } %1834, i32 %1833, 1
  resume { ptr, i32 } %1835
}

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

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

declare void @_ZN3cgp23camera_controller_orbit7look_atERKNS_14numarray_stackIfLi3EEES4_S4_(ptr noundef nonnull align 8 dereferenceable(64), ptr noundef nonnull align 4 dereferenceable(12), ptr noundef nonnull align 4 dereferenceable(12), ptr noundef nonnull align 4 dereferenceable(12)) #3

; 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 #4 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZN3cgp8is_equalIfLi3EEEbRKNS_14numarray_stackIT_XT0_EEES5_(ptr noundef nonnull align 4 dereferenceable(12), ptr noundef nonnull align 4 dereferenceable(12)) #5

declare { <2 x float>, float } @_ZNK3cgp19camera_generic_base5frontEv(ptr noundef nonnull align 8 dereferenceable(8)) #3

; 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) #6

; Function Attrs: noreturn
declare void @_ZN3cgp10call_errorERKNSt7__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) #7

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

declare { <2 x float>, float } @_ZNK3cgp12camera_orbit8positionEv(ptr noundef nonnull align 8 dereferenceable(40)) unnamed_addr #3

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3cgp14numarray_stackIfLi3EEC2IffiEERKT_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 #4 align 2

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

declare void @_ZN3cgp29camera_controller_orbit_euler7look_atERKNS_14numarray_stackIfLi3EEES4_S4_(ptr noundef nonnull align 8 dereferenceable(72), ptr noundef nonnull align 4 dereferenceable(12), ptr noundef nonnull align 4 dereferenceable(12), ptr noundef nonnull align 4 dereferenceable(12)) #3

declare { <2 x float>, float } @_ZNK3cgp18camera_orbit_euler8positionEv(ptr noundef nonnull align 8 dereferenceable(48)) unnamed_addr #3

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

declare void @_ZN3cgp30camera_controller_first_person7look_atERKNS_14numarray_stackIfLi3EEES4_S4_(ptr noundef nonnull align 8 dereferenceable(73), ptr noundef nonnull align 4 dereferenceable(12), ptr noundef nonnull align 4 dereferenceable(12), ptr noundef nonnull align 4 dereferenceable(12)) #3

declare { <2 x float>, float } @_ZNK3cgp19camera_first_person8positionEv(ptr noundef nonnull align 8 dereferenceable(36)) unnamed_addr #3

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

declare void @_ZN3cgp36camera_controller_first_person_euler7look_atERKNS_14numarray_stackIfLi3EEES4_S4_(ptr noundef nonnull align 8 dereferenceable(73), ptr noundef nonnull align 4 dereferenceable(12), ptr noundef nonnull align 4 dereferenceable(12), ptr noundef nonnull align 4 dereferenceable(12)) #3

declare { <2 x float>, float } @_ZNK3cgp25camera_first_person_euler8positionEv(ptr noundef nonnull align 8 dereferenceable(44)) unnamed_addr #3

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

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

!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 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"float", !7, i64 0}


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

%"struct.cgp::camera_controller_orbit" = type { %"struct.cgp::camera_controller_generic_base", %"struct.cgp::camera_orbit" }
%"struct.cgp::camera_controller_generic_base" = type { i8, ptr, ptr }
%"struct.cgp::camera_orbit" = type { %"struct.cgp::camera_generic_base", %"struct.cgp::rotation_transform", %"struct.cgp::numarray_stack.0", float }
%"struct.cgp::camera_generic_base" = type { ptr }
%"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 }
%"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::camera_controller_orbit_euler" = type { %"struct.cgp::camera_controller_generic_base", %"struct.cgp::camera_orbit_euler" }
%"struct.cgp::camera_orbit_euler" = type { %"struct.cgp::camera_generic_base", float, float, float, %"struct.cgp::numarray_stack.0", %"struct.cgp::numarray_stack.0", float }
%"struct.cgp::camera_controller_first_person" = type <{ %"struct.cgp::camera_controller_generic_base", %"struct.cgp::camera_first_person", float, float, i8, [7 x i8] }>
%"struct.cgp::camera_first_person" = type <{ %"struct.cgp::camera_generic_base", %"struct.cgp::rotation_transform", %"struct.cgp::numarray_stack.0", [4 x i8] }>
%"struct.cgp::camera_controller_first_person_euler" = type <{ %"struct.cgp::camera_controller_generic_base", %"struct.cgp::camera_first_person_euler", i8, [7 x i8] }>
%"struct.cgp::camera_first_person_euler" = type <{ %"struct.cgp::camera_generic_base", float, float, float, %"struct.cgp::numarray_stack.0", %"struct.cgp::numarray_stack.0", [4 x i8] }>

@.str = external hidden unnamed_addr constant [54 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [1 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [110 x i8], align 1
@__func__._ZN8cgp_test22test_camera_controllerEv = external hidden unnamed_addr constant [23 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [58 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [55 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [59 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [56 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [58 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [69 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [58 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [56 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [73 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [79 x i8], align 1

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN8cgp_test22test_camera_controllerEv() local_unnamed_addr #0 personality ptr @__gxx_personality_v0 {
  %1 = alloca %"struct.cgp::camera_controller_orbit", align 8
  %2 = alloca %"struct.cgp::numarray_stack.0", align 4
  %3 = alloca i32, align 4
  %4 = alloca i32, align 4
  %5 = alloca i32, align 4
  %6 = alloca %"struct.cgp::numarray_stack.0", align 4
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca %"struct.cgp::numarray_stack.0", align 4
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca %"struct.cgp::numarray_stack.0", align 8
  %15 = alloca %"struct.cgp::numarray_stack.0", align 4
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %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 %"struct.cgp::numarray_stack.0", align 8
  %28 = alloca %"struct.cgp::numarray_stack.0", align 4
  %29 = alloca i32, align 4
  %30 = alloca i32, align 4
  %31 = alloca i32, align 4
  %32 = alloca %"class.std::__cxx11::basic_string", align 8
  %33 = alloca %"class.std::allocator", align 1
  %34 = alloca %"class.std::__cxx11::basic_string", align 8
  %35 = alloca %"class.std::allocator", align 1
  %36 = alloca %"class.std::__cxx11::basic_string", align 8
  %37 = alloca %"class.std::allocator", align 1
  %38 = alloca %"class.std::__cxx11::basic_string", align 8
  %39 = alloca %"class.std::allocator", align 1
  %40 = alloca %"struct.cgp::numarray_stack.0", align 4
  %41 = alloca i32, align 4
  %42 = alloca i32, align 4
  %43 = alloca i32, 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_stack.0", align 4
  %49 = alloca i32, align 4
  %50 = alloca i32, align 4
  %51 = alloca i32, align 4
  %52 = alloca %"struct.cgp::numarray_stack.0", align 8
  %53 = alloca %"struct.cgp::numarray_stack.0", align 4
  %54 = alloca i32, 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 %"struct.cgp::numarray_stack.0", align 8
  %66 = alloca %"struct.cgp::numarray_stack.0", align 4
  %67 = alloca i32, align 4
  %68 = alloca i32, align 4
  %69 = alloca i32, align 4
  %70 = alloca %"class.std::__cxx11::basic_string", align 8
  %71 = alloca %"class.std::allocator", align 1
  %72 = alloca %"class.std::__cxx11::basic_string", align 8
  %73 = alloca %"class.std::allocator", align 1
  %74 = alloca %"class.std::__cxx11::basic_string", align 8
  %75 = alloca %"class.std::allocator", align 1
  %76 = alloca %"class.std::__cxx11::basic_string", align 8
  %77 = alloca %"class.std::allocator", align 1
  %78 = alloca %"struct.cgp::numarray_stack.0", align 4
  %79 = alloca i32, align 4
  %80 = alloca i32, align 4
  %81 = alloca i32, align 4
  %82 = alloca %"struct.cgp::numarray_stack.0", align 4
  %83 = alloca i32, align 4
  %84 = alloca i32, align 4
  %85 = alloca i32, align 4
  %86 = alloca %"struct.cgp::numarray_stack.0", align 4
  %87 = alloca i32, align 4
  %88 = alloca i32, align 4
  %89 = alloca i32, align 4
  %90 = alloca %"struct.cgp::numarray_stack.0", align 8
  %91 = alloca %"struct.cgp::numarray_stack.0", align 4
  %92 = alloca i32, align 4
  %93 = alloca i32, align 4
  %94 = alloca i32, align 4
  %95 = alloca %"class.std::__cxx11::basic_string", align 8
  %96 = alloca %"class.std::allocator", align 1
  %97 = alloca %"class.std::__cxx11::basic_string", align 8
  %98 = alloca %"class.std::allocator", align 1
  %99 = alloca %"class.std::__cxx11::basic_string", align 8
  %100 = alloca %"class.std::allocator", align 1
  %101 = alloca %"class.std::__cxx11::basic_string", align 8
  %102 = alloca %"class.std::allocator", align 1
  %103 = alloca %"struct.cgp::numarray_stack.0", align 8
  %104 = alloca %"struct.cgp::numarray_stack.0", align 4
  %105 = alloca i32, align 4
  %106 = alloca i32, align 4
  %107 = alloca i32, align 4
  %108 = alloca %"class.std::__cxx11::basic_string", align 8
  %109 = alloca %"class.std::allocator", align 1
  %110 = alloca %"class.std::__cxx11::basic_string", align 8
  %111 = alloca %"class.std::allocator", align 1
  %112 = alloca %"class.std::__cxx11::basic_string", align 8
  %113 = alloca %"class.std::allocator", align 1
  %114 = alloca %"class.std::__cxx11::basic_string", align 8
  %115 = alloca %"class.std::allocator", align 1
  %116 = alloca %"struct.cgp::numarray_stack.0", align 4
  %117 = alloca i32, align 4
  %118 = alloca i32, align 4
  %119 = alloca i32, align 4
  %120 = alloca %"struct.cgp::numarray_stack.0", align 4
  %121 = alloca i32, align 4
  %122 = alloca i32, align 4
  %123 = alloca i32, align 4
  %124 = alloca %"struct.cgp::numarray_stack.0", align 4
  %125 = alloca i32, align 4
  %126 = alloca i32, align 4
  %127 = alloca i32, align 4
  %128 = alloca %"struct.cgp::numarray_stack.0", align 8
  %129 = alloca %"struct.cgp::numarray_stack.0", align 4
  %130 = alloca float, align 4
  %131 = alloca float, align 4
  %132 = alloca i32, align 4
  %133 = alloca %"class.std::__cxx11::basic_string", align 8
  %134 = alloca %"class.std::allocator", align 1
  %135 = alloca %"class.std::__cxx11::basic_string", align 8
  %136 = alloca %"class.std::allocator", align 1
  %137 = alloca %"class.std::__cxx11::basic_string", align 8
  %138 = alloca %"class.std::allocator", align 1
  %139 = alloca %"class.std::__cxx11::basic_string", align 8
  %140 = alloca %"class.std::allocator", align 1
  %141 = alloca %"struct.cgp::numarray_stack.0", align 8
  %142 = alloca %"struct.cgp::numarray_stack.0", align 4
  %143 = alloca i32, align 4
  %144 = alloca i32, align 4
  %145 = alloca i32, align 4
  %146 = alloca %"class.std::__cxx11::basic_string", align 8
  %147 = alloca %"class.std::allocator", align 1
  %148 = alloca %"class.std::__cxx11::basic_string", align 8
  %149 = alloca %"class.std::allocator", align 1
  %150 = alloca %"class.std::__cxx11::basic_string", align 8
  %151 = alloca %"class.std::allocator", align 1
  %152 = alloca %"class.std::__cxx11::basic_string", align 8
  %153 = alloca %"class.std::allocator", align 1
  %154 = alloca %"struct.cgp::camera_controller_orbit_euler", align 8
  %155 = alloca %"struct.cgp::numarray_stack.0", align 4
  %156 = alloca i32, align 4
  %157 = alloca i32, align 4
  %158 = alloca i32, align 4
  %159 = alloca %"struct.cgp::numarray_stack.0", align 4
  %160 = alloca i32, align 4
  %161 = alloca i32, align 4
  %162 = alloca i32, align 4
  %163 = alloca %"struct.cgp::numarray_stack.0", align 4
  %164 = alloca i32, align 4
  %165 = alloca i32, align 4
  %166 = alloca i32, align 4
  %167 = alloca %"struct.cgp::numarray_stack.0", align 8
  %168 = alloca %"struct.cgp::numarray_stack.0", align 4
  %169 = alloca i32, align 4
  %170 = alloca i32, align 4
  %171 = alloca i32, align 4
  %172 = alloca %"class.std::__cxx11::basic_string", align 8
  %173 = alloca %"class.std::allocator", align 1
  %174 = alloca %"class.std::__cxx11::basic_string", align 8
  %175 = alloca %"class.std::allocator", align 1
  %176 = alloca %"class.std::__cxx11::basic_string", align 8
  %177 = alloca %"class.std::allocator", align 1
  %178 = alloca %"class.std::__cxx11::basic_string", align 8
  %179 = alloca %"class.std::allocator", align 1
  %180 = alloca %"struct.cgp::numarray_stack.0", align 8
  %181 = alloca %"struct.cgp::numarray_stack.0", align 4
  %182 = alloca i32, align 4
  %183 = alloca i32, align 4
  %184 = alloca i32, align 4
  %185 = alloca %"class.std::__cxx11::basic_string", align 8
  %186 = alloca %"class.std::allocator", align 1
  %187 = alloca %"class.std::__cxx11::basic_string", align 8
  %188 = alloca %"class.std::allocator", align 1
  %189 = alloca %"class.std::__cxx11::basic_string", align 8
  %190 = alloca %"class.std::allocator", align 1
  %191 = alloca %"class.std::__cxx11::basic_string", align 8
  %192 = alloca %"class.std::allocator", align 1
  %193 = alloca %"struct.cgp::numarray_stack.0", align 4
  %194 = alloca i32, align 4
  %195 = alloca i32, align 4
  %196 = alloca i32, align 4
  %197 = alloca %"struct.cgp::numarray_stack.0", align 4
  %198 = alloca i32, align 4
  %199 = alloca i32, align 4
  %200 = alloca i32, align 4
  %201 = alloca %"struct.cgp::numarray_stack.0", align 4
  %202 = alloca i32, align 4
  %203 = alloca i32, align 4
  %204 = alloca i32, align 4
  %205 = alloca %"struct.cgp::numarray_stack.0", align 8
  %206 = alloca %"struct.cgp::numarray_stack.0", align 4
  %207 = alloca i32, align 4
  %208 = alloca i32, align 4
  %209 = alloca i32, align 4
  %210 = alloca %"class.std::__cxx11::basic_string", align 8
  %211 = alloca %"class.std::allocator", align 1
  %212 = alloca %"class.std::__cxx11::basic_string", align 8
  %213 = alloca %"class.std::allocator", align 1
  %214 = alloca %"class.std::__cxx11::basic_string", align 8
  %215 = alloca %"class.std::allocator", align 1
  %216 = alloca %"class.std::__cxx11::basic_string", align 8
  %217 = alloca %"class.std::allocator", align 1
  %218 = alloca %"struct.cgp::numarray_stack.0", align 8
  %219 = alloca %"struct.cgp::numarray_stack.0", align 4
  %220 = alloca i32, align 4
  %221 = alloca i32, align 4
  %222 = alloca i32, align 4
  %223 = alloca %"class.std::__cxx11::basic_string", align 8
  %224 = alloca %"class.std::allocator", align 1
  %225 = alloca %"class.std::__cxx11::basic_string", align 8
  %226 = alloca %"class.std::allocator", align 1
  %227 = alloca %"class.std::__cxx11::basic_string", align 8
  %228 = alloca %"class.std::allocator", align 1
  %229 = alloca %"class.std::__cxx11::basic_string", align 8
  %230 = alloca %"class.std::allocator", align 1
  %231 = alloca %"struct.cgp::numarray_stack.0", align 4
  %232 = alloca i32, align 4
  %233 = alloca i32, align 4
  %234 = alloca i32, align 4
  %235 = alloca %"struct.cgp::numarray_stack.0", align 4
  %236 = alloca i32, align 4
  %237 = alloca i32, align 4
  %238 = alloca i32, align 4
  %239 = alloca %"struct.cgp::numarray_stack.0", align 4
  %240 = alloca i32, align 4
  %241 = alloca i32, align 4
  %242 = alloca i32, align 4
  %243 = alloca %"struct.cgp::numarray_stack.0", align 8
  %244 = alloca %"struct.cgp::numarray_stack.0", align 4
  %245 = alloca i32, align 4
  %246 = alloca i32, align 4
  %247 = alloca i32, align 4
  %248 = alloca %"class.std::__cxx11::basic_string", align 8
  %249 = alloca %"class.std::allocator", align 1
  %250 = alloca %"class.std::__cxx11::basic_string", align 8
  %251 = alloca %"class.std::allocator", align 1
  %252 = alloca %"class.std::__cxx11::basic_string", align 8
  %253 = alloca %"class.std::allocator", align 1
  %254 = alloca %"class.std::__cxx11::basic_string", align 8
  %255 = alloca %"class.std::allocator", align 1
  %256 = alloca %"struct.cgp::numarray_stack.0", align 8
  %257 = alloca %"struct.cgp::numarray_stack.0", align 4
  %258 = alloca i32, align 4
  %259 = alloca i32, align 4
  %260 = alloca i32, align 4
  %261 = alloca %"class.std::__cxx11::basic_string", align 8
  %262 = alloca %"class.std::allocator", align 1
  %263 = alloca %"class.std::__cxx11::basic_string", align 8
  %264 = alloca %"class.std::allocator", align 1
  %265 = alloca %"class.std::__cxx11::basic_string", align 8
  %266 = alloca %"class.std::allocator", align 1
  %267 = alloca %"class.std::__cxx11::basic_string", align 8
  %268 = alloca %"class.std::allocator", align 1
  %269 = alloca %"struct.cgp::numarray_stack.0", align 4
  %270 = alloca i32, align 4
  %271 = alloca i32, align 4
  %272 = alloca i32, align 4
  %273 = alloca %"struct.cgp::numarray_stack.0", align 4
  %274 = alloca i32, align 4
  %275 = alloca i32, align 4
  %276 = alloca i32, align 4
  %277 = alloca %"struct.cgp::numarray_stack.0", align 4
  %278 = alloca i32, align 4
  %279 = alloca i32, align 4
  %280 = alloca i32, align 4
  %281 = alloca %"struct.cgp::numarray_stack.0", align 8
  %282 = alloca %"struct.cgp::numarray_stack.0", align 4
  %283 = alloca float, align 4
  %284 = alloca float, align 4
  %285 = alloca i32, align 4
  %286 = alloca %"class.std::__cxx11::basic_string", align 8
  %287 = alloca %"class.std::allocator", align 1
  %288 = alloca %"class.std::__cxx11::basic_string", align 8
  %289 = alloca %"class.std::allocator", align 1
  %290 = alloca %"class.std::__cxx11::basic_string", align 8
  %291 = alloca %"class.std::allocator", align 1
  %292 = alloca %"class.std::__cxx11::basic_string", align 8
  %293 = alloca %"class.std::allocator", align 1
  %294 = alloca %"struct.cgp::numarray_stack.0", align 8
  %295 = alloca %"struct.cgp::numarray_stack.0", align 4
  %296 = alloca i32, align 4
  %297 = alloca i32, align 4
  %298 = alloca i32, align 4
  %299 = alloca %"class.std::__cxx11::basic_string", align 8
  %300 = alloca %"class.std::allocator", align 1
  %301 = alloca %"class.std::__cxx11::basic_string", align 8
  %302 = alloca %"class.std::allocator", align 1
  %303 = alloca %"class.std::__cxx11::basic_string", align 8
  %304 = alloca %"class.std::allocator", align 1
  %305 = alloca %"class.std::__cxx11::basic_string", align 8
  %306 = alloca %"class.std::allocator", align 1
  %307 = alloca %"struct.cgp::camera_controller_first_person", align 8
  %308 = alloca %"struct.cgp::numarray_stack.0", align 4
  %309 = alloca i32, align 4
  %310 = alloca i32, align 4
  %311 = alloca i32, align 4
  %312 = alloca %"struct.cgp::numarray_stack.0", align 4
  %313 = alloca i32, align 4
  %314 = alloca i32, align 4
  %315 = alloca i32, align 4
  %316 = alloca %"struct.cgp::numarray_stack.0", align 4
  %317 = alloca i32, align 4
  %318 = alloca i32, align 4
  %319 = alloca i32, align 4
  %320 = alloca %"struct.cgp::numarray_stack.0", align 8
  %321 = alloca %"struct.cgp::numarray_stack.0", align 4
  %322 = alloca i32, align 4
  %323 = alloca i32, align 4
  %324 = alloca i32, align 4
  %325 = alloca %"class.std::__cxx11::basic_string", align 8
  %326 = alloca %"class.std::allocator", align 1
  %327 = alloca %"class.std::__cxx11::basic_string", align 8
  %328 = alloca %"class.std::allocator", align 1
  %329 = alloca %"class.std::__cxx11::basic_string", align 8
  %330 = alloca %"class.std::allocator", align 1
  %331 = alloca %"class.std::__cxx11::basic_string", align 8
  %332 = alloca %"class.std::allocator", align 1
  %333 = alloca %"struct.cgp::numarray_stack.0", align 8
  %334 = alloca %"struct.cgp::numarray_stack.0", align 4
  %335 = alloca i32, align 4
  %336 = alloca i32, align 4
  %337 = alloca i32, align 4
  %338 = alloca %"class.std::__cxx11::basic_string", align 8
  %339 = alloca %"class.std::allocator", align 1
  %340 = alloca %"class.std::__cxx11::basic_string", align 8
  %341 = alloca %"class.std::allocator", align 1
  %342 = alloca %"class.std::__cxx11::basic_string", align 8
  %343 = alloca %"class.std::allocator", align 1
  %344 = alloca %"class.std::__cxx11::basic_string", align 8
  %345 = alloca %"class.std::allocator", align 1
  %346 = alloca %"struct.cgp::numarray_stack.0", align 4
  %347 = alloca i32, align 4
  %348 = alloca i32, align 4
  %349 = alloca i32, align 4
  %350 = alloca %"struct.cgp::numarray_stack.0", align 4
  %351 = alloca i32, align 4
  %352 = alloca i32, align 4
  %353 = alloca i32, align 4
  %354 = alloca %"struct.cgp::numarray_stack.0", align 4
  %355 = alloca i32, align 4
  %356 = alloca i32, align 4
  %357 = alloca i32, align 4
  %358 = alloca %"struct.cgp::numarray_stack.0", align 8
  %359 = alloca %"struct.cgp::numarray_stack.0", align 4
  %360 = alloca i32, align 4
  %361 = alloca i32, align 4
  %362 = alloca i32, align 4
  %363 = alloca %"class.std::__cxx11::basic_string", align 8
  %364 = alloca %"class.std::allocator", align 1
  %365 = alloca %"class.std::__cxx11::basic_string", align 8
  %366 = alloca %"class.std::allocator", align 1
  %367 = alloca %"class.std::__cxx11::basic_string", align 8
  %368 = alloca %"class.std::allocator", align 1
  %369 = alloca %"class.std::__cxx11::basic_string", align 8
  %370 = alloca %"class.std::allocator", align 1
  %371 = alloca %"struct.cgp::numarray_stack.0", align 8
  %372 = alloca %"struct.cgp::numarray_stack.0", align 4
  %373 = alloca i32, align 4
  %374 = alloca i32, align 4
  %375 = alloca i32, align 4
  %376 = alloca %"class.std::__cxx11::basic_string", align 8
  %377 = alloca %"class.std::allocator", align 1
  %378 = alloca %"class.std::__cxx11::basic_string", align 8
  %379 = alloca %"class.std::allocator", align 1
  %380 = alloca %"class.std::__cxx11::basic_string", align 8
  %381 = alloca %"class.std::allocator", align 1
  %382 = alloca %"class.std::__cxx11::basic_string", align 8
  %383 = alloca %"class.std::allocator", align 1
  %384 = alloca %"struct.cgp::numarray_stack.0", align 4
  %385 = alloca i32, align 4
  %386 = alloca i32, align 4
  %387 = alloca i32, align 4
  %388 = alloca %"struct.cgp::numarray_stack.0", align 4
  %389 = alloca i32, align 4
  %390 = alloca i32, align 4
  %391 = alloca i32, align 4
  %392 = alloca %"struct.cgp::numarray_stack.0", align 4
  %393 = alloca i32, align 4
  %394 = alloca i32, align 4
  %395 = alloca i32, align 4
  %396 = alloca %"struct.cgp::numarray_stack.0", align 8
  %397 = alloca %"struct.cgp::numarray_stack.0", align 4
  %398 = alloca i32, align 4
  %399 = alloca i32, align 4
  %400 = alloca i32, align 4
  %401 = alloca %"class.std::__cxx11::basic_string", align 8
  %402 = alloca %"class.std::allocator", align 1
  %403 = alloca %"class.std::__cxx11::basic_string", align 8
  %404 = alloca %"class.std::allocator", align 1
  %405 = alloca %"class.std::__cxx11::basic_string", align 8
  %406 = alloca %"class.std::allocator", align 1
  %407 = alloca %"class.std::__cxx11::basic_string", align 8
  %408 = alloca %"class.std::allocator", align 1
  %409 = alloca %"struct.cgp::numarray_stack.0", align 8
  %410 = alloca %"struct.cgp::numarray_stack.0", align 4
  %411 = alloca i32, align 4
  %412 = alloca i32, align 4
  %413 = alloca i32, align 4
  %414 = alloca %"class.std::__cxx11::basic_string", align 8
  %415 = alloca %"class.std::allocator", align 1
  %416 = alloca %"class.std::__cxx11::basic_string", align 8
  %417 = alloca %"class.std::allocator", align 1
  %418 = alloca %"class.std::__cxx11::basic_string", align 8
  %419 = alloca %"class.std::allocator", align 1
  %420 = alloca %"class.std::__cxx11::basic_string", align 8
  %421 = alloca %"class.std::allocator", align 1
  %422 = alloca %"struct.cgp::numarray_stack.0", align 4
  %423 = alloca i32, align 4
  %424 = alloca i32, align 4
  %425 = alloca i32, align 4
  %426 = alloca %"struct.cgp::numarray_stack.0", align 4
  %427 = alloca i32, align 4
  %428 = alloca i32, align 4
  %429 = alloca i32, align 4
  %430 = alloca %"struct.cgp::numarray_stack.0", align 4
  %431 = alloca i32, align 4
  %432 = alloca i32, align 4
  %433 = alloca i32, align 4
  %434 = alloca %"struct.cgp::numarray_stack.0", align 8
  %435 = alloca %"struct.cgp::numarray_stack.0", align 4
  %436 = alloca float, align 4
  %437 = alloca float, align 4
  %438 = alloca i32, align 4
  %439 = alloca %"class.std::__cxx11::basic_string", align 8
  %440 = alloca %"class.std::allocator", align 1
  %441 = alloca %"class.std::__cxx11::basic_string", align 8
  %442 = alloca %"class.std::allocator", align 1
  %443 = alloca %"class.std::__cxx11::basic_string", align 8
  %444 = alloca %"class.std::allocator", align 1
  %445 = alloca %"class.std::__cxx11::basic_string", align 8
  %446 = alloca %"class.std::allocator", align 1
  %447 = alloca %"struct.cgp::numarray_stack.0", align 8
  %448 = alloca %"struct.cgp::numarray_stack.0", align 4
  %449 = alloca i32, align 4
  %450 = alloca i32, align 4
  %451 = alloca i32, align 4
  %452 = alloca %"class.std::__cxx11::basic_string", align 8
  %453 = alloca %"class.std::allocator", align 1
  %454 = alloca %"class.std::__cxx11::basic_string", align 8
  %455 = alloca %"class.std::allocator", align 1
  %456 = alloca %"class.std::__cxx11::basic_string", align 8
  %457 = alloca %"class.std::allocator", align 1
  %458 = alloca %"class.std::__cxx11::basic_string", align 8
  %459 = alloca %"class.std::allocator", align 1
  %460 = alloca %"struct.cgp::camera_controller_first_person_euler", align 8
  %461 = alloca %"struct.cgp::numarray_stack.0", align 4
  %462 = alloca i32, align 4
  %463 = alloca i32, align 4
  %464 = alloca i32, align 4
  %465 = alloca %"struct.cgp::numarray_stack.0", align 4
  %466 = alloca i32, align 4
  %467 = alloca i32, align 4
  %468 = alloca i32, align 4
  %469 = alloca %"struct.cgp::numarray_stack.0", align 4
  %470 = alloca i32, align 4
  %471 = alloca i32, align 4
  %472 = alloca i32, align 4
  %473 = alloca %"struct.cgp::numarray_stack.0", align 8
  %474 = alloca %"struct.cgp::numarray_stack.0", align 4
  %475 = alloca i32, align 4
  %476 = alloca i32, align 4
  %477 = alloca i32, align 4
  %478 = alloca %"class.std::__cxx11::basic_string", align 8
  %479 = alloca %"class.std::allocator", align 1
  %480 = alloca %"class.std::__cxx11::basic_string", align 8
  %481 = alloca %"class.std::allocator", align 1
  %482 = alloca %"class.std::__cxx11::basic_string", align 8
  %483 = alloca %"class.std::allocator", align 1
  %484 = alloca %"class.std::__cxx11::basic_string", align 8
  %485 = alloca %"class.std::allocator", align 1
  %486 = alloca %"struct.cgp::numarray_stack.0", align 8
  %487 = alloca %"struct.cgp::numarray_stack.0", align 4
  %488 = alloca i32, align 4
  %489 = alloca i32, align 4
  %490 = alloca i32, align 4
  %491 = alloca %"class.std::__cxx11::basic_string", align 8
  %492 = alloca %"class.std::allocator", align 1
  %493 = alloca %"class.std::__cxx11::basic_string", align 8
  %494 = alloca %"class.std::allocator", align 1
  %495 = alloca %"class.std::__cxx11::basic_string", align 8
  %496 = alloca %"class.std::allocator", align 1
  %497 = alloca %"class.std::__cxx11::basic_string", align 8
  %498 = alloca %"class.std::allocator", align 1
  %499 = alloca %"struct.cgp::numarray_stack.0", align 4
  %500 = alloca i32, align 4
  %501 = alloca i32, align 4
  %502 = alloca i32, align 4
  %503 = alloca %"struct.cgp::numarray_stack.0", align 4
  %504 = alloca i32, align 4
  %505 = alloca i32, align 4
  %506 = alloca i32, align 4
  %507 = alloca %"struct.cgp::numarray_stack.0", align 4
  %508 = alloca i32, align 4
  %509 = alloca i32, align 4
  %510 = alloca i32, align 4
  %511 = alloca %"struct.cgp::numarray_stack.0", align 8
  %512 = alloca %"struct.cgp::numarray_stack.0", align 4
  %513 = alloca i32, align 4
  %514 = alloca i32, align 4
  %515 = alloca i32, align 4
  %516 = alloca %"class.std::__cxx11::basic_string", align 8
  %517 = alloca %"class.std::allocator", align 1
  %518 = alloca %"class.std::__cxx11::basic_string", align 8
  %519 = alloca %"class.std::allocator", align 1
  %520 = alloca %"class.std::__cxx11::basic_string", align 8
  %521 = alloca %"class.std::allocator", align 1
  %522 = alloca %"class.std::__cxx11::basic_string", align 8
  %523 = alloca %"class.std::allocator", align 1
  %524 = alloca %"struct.cgp::numarray_stack.0", align 8
  %525 = alloca %"struct.cgp::numarray_stack.0", align 4
  %526 = alloca i32, align 4
  %527 = alloca i32, align 4
  %528 = alloca i32, align 4
  %529 = alloca %"class.std::__cxx11::basic_string", align 8
  %530 = alloca %"class.std::allocator", align 1
  %531 = alloca %"class.std::__cxx11::basic_string", align 8
  %532 = alloca %"class.std::allocator", align 1
  %533 = alloca %"class.std::__cxx11::basic_string", align 8
  %534 = alloca %"class.std::allocator", align 1
  %535 = alloca %"class.std::__cxx11::basic_string", align 8
  %536 = alloca %"class.std::allocator", align 1
  %537 = alloca %"struct.cgp::numarray_stack.0", align 4
  %538 = alloca i32, align 4
  %539 = alloca i32, align 4
  %540 = alloca i32, align 4
  %541 = alloca %"struct.cgp::numarray_stack.0", align 4
  %542 = alloca i32, align 4
  %543 = alloca i32, align 4
  %544 = alloca i32, align 4
  %545 = alloca %"struct.cgp::numarray_stack.0", align 4
  %546 = alloca i32, align 4
  %547 = alloca i32, align 4
  %548 = alloca i32, align 4
  %549 = alloca %"struct.cgp::numarray_stack.0", align 8
  %550 = alloca %"struct.cgp::numarray_stack.0", align 4
  %551 = alloca i32, align 4
  %552 = alloca i32, align 4
  %553 = alloca i32, align 4
  %554 = alloca %"class.std::__cxx11::basic_string", align 8
  %555 = alloca %"class.std::allocator", align 1
  %556 = alloca %"class.std::__cxx11::basic_string", align 8
  %557 = alloca %"class.std::allocator", align 1
  %558 = alloca %"class.std::__cxx11::basic_string", align 8
  %559 = alloca %"class.std::allocator", align 1
  %560 = alloca %"class.std::__cxx11::basic_string", align 8
  %561 = alloca %"class.std::allocator", align 1
  %562 = alloca %"struct.cgp::numarray_stack.0", align 8
  %563 = alloca %"struct.cgp::numarray_stack.0", align 4
  %564 = alloca i32, align 4
  %565 = alloca i32, align 4
  %566 = alloca i32, align 4
  %567 = alloca %"class.std::__cxx11::basic_string", align 8
  %568 = alloca %"class.std::allocator", align 1
  %569 = alloca %"class.std::__cxx11::basic_string", align 8
  %570 = alloca %"class.std::allocator", align 1
  %571 = alloca %"class.std::__cxx11::basic_string", align 8
  %572 = alloca %"class.std::allocator", align 1
  %573 = alloca %"class.std::__cxx11::basic_string", align 8
  %574 = alloca %"class.std::allocator", align 1
  %575 = alloca %"struct.cgp::numarray_stack.0", align 4
  %576 = alloca i32, align 4
  %577 = alloca i32, align 4
  %578 = alloca i32, align 4
  %579 = alloca %"struct.cgp::numarray_stack.0", align 4
  %580 = alloca i32, align 4
  %581 = alloca i32, align 4
  %582 = alloca i32, align 4
  %583 = alloca %"struct.cgp::numarray_stack.0", align 4
  %584 = alloca i32, align 4
  %585 = alloca i32, align 4
  %586 = alloca i32, align 4
  %587 = alloca %"struct.cgp::numarray_stack.0", align 8
  %588 = alloca %"struct.cgp::numarray_stack.0", align 4
  %589 = alloca float, align 4
  %590 = alloca float, align 4
  %591 = alloca i32, align 4
  %592 = alloca %"class.std::__cxx11::basic_string", align 8
  %593 = alloca %"class.std::allocator", align 1
  %594 = alloca %"class.std::__cxx11::basic_string", align 8
  %595 = alloca %"class.std::allocator", align 1
  %596 = alloca %"class.std::__cxx11::basic_string", align 8
  %597 = alloca %"class.std::allocator", align 1
  %598 = alloca %"class.std::__cxx11::basic_string", align 8
  %599 = alloca %"class.std::allocator", align 1
  %600 = alloca %"struct.cgp::numarray_stack.0", align 8
  %601 = alloca %"struct.cgp::numarray_stack.0", align 4
  %602 = alloca i32, align 4
  %603 = alloca i32, align 4
  %604 = alloca i32, align 4
  %605 = alloca %"class.std::__cxx11::basic_string", align 8
  %606 = alloca %"class.std::allocator", align 1
  %607 = alloca %"class.std::__cxx11::basic_string", align 8
  %608 = alloca %"class.std::allocator", align 1
  %609 = alloca %"class.std::__cxx11::basic_string", align 8
  %610 = alloca %"class.std::allocator", align 1
  %611 = alloca %"class.std::__cxx11::basic_string", align 8
  %612 = alloca %"class.std::allocator", align 1
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %1) #8
  call void @_ZN3cgp23camera_controller_orbitC2Ev(ptr noundef nonnull align 8 dereferenceable(64) %1)
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %2) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %3) #8
  store i32 1, ptr %3, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %4) #8
  store i32 0, ptr %4, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %5) #8
  store i32 0, ptr %5, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %2, ptr noundef nonnull align 4 dereferenceable(4) %3, ptr noundef nonnull align 4 dereferenceable(4) %4, ptr noundef nonnull align 4 dereferenceable(4) %5)
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %6) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %7) #8
  store i32 0, ptr %7, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %8) #8
  store i32 0, ptr %8, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %9) #8
  store i32 0, ptr %9, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %6, ptr noundef nonnull align 4 dereferenceable(4) %7, ptr noundef nonnull align 4 dereferenceable(4) %8, ptr noundef nonnull align 4 dereferenceable(4) %9)
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %10) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %11) #8
  store i32 0, ptr %11, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %12) #8
  store i32 0, ptr %12, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %13) #8
  store i32 1, ptr %13, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %10, ptr noundef nonnull align 4 dereferenceable(4) %11, ptr noundef nonnull align 4 dereferenceable(4) %12, ptr noundef nonnull align 4 dereferenceable(4) %13)
  call void @_ZN3cgp23camera_controller_orbit7look_atERKNS_14numarray_stackIfLi3EEES4_S4_(ptr noundef nonnull align 8 dereferenceable(64) %1, ptr noundef nonnull align 4 dereferenceable(12) %2, ptr noundef nonnull align 4 dereferenceable(12) %6, ptr noundef nonnull align 4 dereferenceable(12) %10)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %13) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %12) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %11) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %10) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %9) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %8) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %7) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %6) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %5) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %4) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %3) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %2) #8
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %14) #8
  %613 = getelementptr inbounds i8, ptr %1, i64 24
  %614 = call { <2 x float>, float } @_ZNK3cgp19camera_generic_base5frontEv(ptr noundef nonnull align 8 dereferenceable(8) %613)
  %.fca.0.extract129 = extractvalue { <2 x float>, float } %614, 0
  %.fca.1.extract130 = extractvalue { <2 x float>, float } %614, 1
  store <2 x float> %.fca.0.extract129, ptr %14, align 8
  %.sroa.2132.0..sroa_idx = getelementptr inbounds i8, ptr %14, i64 8
  store float %.fca.1.extract130, ptr %.sroa.2132.0..sroa_idx, align 8
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %15) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %16) #8
  store i32 -1, ptr %16, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %17) #8
  store i32 0, ptr %17, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %18) #8
  store i32 0, ptr %18, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %15, ptr noundef nonnull align 4 dereferenceable(4) %16, ptr noundef nonnull align 4 dereferenceable(4) %17, ptr noundef nonnull align 4 dereferenceable(4) %18)
  %615 = call noundef zeroext i1 @_ZN3cgp8is_equalIfLi3EEEbRKNS_14numarray_stackIT_XT0_EEES5_(ptr noundef nonnull align 4 dereferenceable(12) %14, ptr noundef nonnull align 4 dereferenceable(12) %15)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %18) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %17) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %16) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %15) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %14) #8
  br i1 %615, label %636, label %616

616:                                              ; preds = %0
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %19) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %20) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %20) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %19, ptr noundef nonnull @.str, ptr noundef nonnull align 1 dereferenceable(1) %20)
          to label %617 unwind label %622

617:                                              ; preds = %616
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %21) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %22) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %22) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %21, ptr noundef nonnull @.str.1, ptr noundef nonnull align 1 dereferenceable(1) %22)
          to label %618 unwind label %624

618:                                              ; preds = %617
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %23) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %24) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %24) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %23, ptr noundef nonnull @.str.2, ptr noundef nonnull align 1 dereferenceable(1) %24)
          to label %619 unwind label %626

619:                                              ; preds = %618
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %25) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %26) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %26) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %25, ptr noundef nonnull @__func__._ZN8cgp_test22test_camera_controllerEv, ptr noundef nonnull align 1 dereferenceable(1) %26)
          to label %620 unwind label %628

620:                                              ; preds = %619
  invoke void @_ZN3cgp10call_errorERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_S7_S7_i(ptr noundef nonnull align 8 dereferenceable(32) %19, ptr noundef nonnull align 8 dereferenceable(32) %21, ptr noundef nonnull align 8 dereferenceable(32) %23, ptr noundef nonnull align 8 dereferenceable(32) %25, i32 noundef 19) #9
          to label %621 unwind label %630

621:                                              ; preds = %620
  unreachable

622:                                              ; preds = %616
  %623 = landingpad { ptr, i32 }
          cleanup
  br label %635

624:                                              ; preds = %617
  %625 = landingpad { ptr, i32 }
          cleanup
  br label %634

626:                                              ; preds = %618
  %627 = landingpad { ptr, i32 }
          cleanup
  br label %633

628:                                              ; preds = %619
  %629 = landingpad { ptr, i32 }
          cleanup
  br label %632

630:                                              ; preds = %620
  %631 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %25) #8
  br label %632

632:                                              ; preds = %630, %628
  %.pn431 = phi { ptr, i32 } [ %631, %630 ], [ %629, %628 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %26) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %26) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %25) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %23) #8
  br label %633

633:                                              ; preds = %632, %626
  %.pn431.pn = phi { ptr, i32 } [ %.pn431, %632 ], [ %627, %626 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %24) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %24) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %23) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %21) #8
  br label %634

634:                                              ; preds = %633, %624
  %.pn431.pn.pn = phi { ptr, i32 } [ %.pn431.pn, %633 ], [ %625, %624 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %22) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %22) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %21) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %19) #8
  br label %635

635:                                              ; preds = %634, %622
  %.pn431.pn.pn.pn = phi { ptr, i32 } [ %.pn431.pn.pn, %634 ], [ %623, %622 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %20) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %20) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %19) #8
  br label %809

636:                                              ; preds = %0
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %27) #8
  %637 = call { <2 x float>, float } @_ZNK3cgp12camera_orbit8positionEv(ptr noundef nonnull align 8 dereferenceable(40) %613)
  %.fca.0.extract124 = extractvalue { <2 x float>, float } %637, 0
  %.fca.1.extract125 = extractvalue { <2 x float>, float } %637, 1
  store <2 x float> %.fca.0.extract124, ptr %27, align 8
  %.sroa.2127.0..sroa_idx = getelementptr inbounds i8, ptr %27, i64 8
  store float %.fca.1.extract125, ptr %.sroa.2127.0..sroa_idx, align 8
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %28) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %29) #8
  store i32 1, ptr %29, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %30) #8
  store i32 0, ptr %30, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %31) #8
  store i32 0, ptr %31, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %28, ptr noundef nonnull align 4 dereferenceable(4) %29, ptr noundef nonnull align 4 dereferenceable(4) %30, ptr noundef nonnull align 4 dereferenceable(4) %31)
  %638 = call noundef zeroext i1 @_ZN3cgp8is_equalIfLi3EEEbRKNS_14numarray_stackIT_XT0_EEES5_(ptr noundef nonnull align 4 dereferenceable(12) %27, ptr noundef nonnull align 4 dereferenceable(12) %28)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %31) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %30) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %29) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %28) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %27) #8
  br i1 %638, label %659, label %639

639:                                              ; preds = %636
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %32) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %33) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %33) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %32, ptr noundef nonnull @.str.3, ptr noundef nonnull align 1 dereferenceable(1) %33)
          to label %640 unwind label %645

640:                                              ; preds = %639
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %34) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %35) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %35) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %34, ptr noundef nonnull @.str.1, ptr noundef nonnull align 1 dereferenceable(1) %35)
          to label %641 unwind label %647

641:                                              ; preds = %640
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %36) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %37) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %37) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %36, ptr noundef nonnull @.str.2, ptr noundef nonnull align 1 dereferenceable(1) %37)
          to label %642 unwind label %649

642:                                              ; preds = %641
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %38) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %39) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %39) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %38, ptr noundef nonnull @__func__._ZN8cgp_test22test_camera_controllerEv, ptr noundef nonnull align 1 dereferenceable(1) %39)
          to label %643 unwind label %651

643:                                              ; preds = %642
  invoke void @_ZN3cgp10call_errorERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_S7_S7_i(ptr noundef nonnull align 8 dereferenceable(32) %32, ptr noundef nonnull align 8 dereferenceable(32) %34, ptr noundef nonnull align 8 dereferenceable(32) %36, ptr noundef nonnull align 8 dereferenceable(32) %38, i32 noundef 20) #9
          to label %644 unwind label %653

644:                                              ; preds = %643
  unreachable

645:                                              ; preds = %639
  %646 = landingpad { ptr, i32 }
          cleanup
  br label %658

647:                                              ; preds = %640
  %648 = landingpad { ptr, i32 }
          cleanup
  br label %657

649:                                              ; preds = %641
  %650 = landingpad { ptr, i32 }
          cleanup
  br label %656

651:                                              ; preds = %642
  %652 = landingpad { ptr, i32 }
          cleanup
  br label %655

653:                                              ; preds = %643
  %654 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %38) #8
  br label %655

655:                                              ; preds = %653, %651
  %.pn426 = phi { ptr, i32 } [ %654, %653 ], [ %652, %651 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %39) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %39) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %38) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %36) #8
  br label %656

656:                                              ; preds = %655, %649
  %.pn426.pn = phi { ptr, i32 } [ %.pn426, %655 ], [ %650, %649 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %37) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %37) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %36) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %34) #8
  br label %657

657:                                              ; preds = %656, %647
  %.pn426.pn.pn = phi { ptr, i32 } [ %.pn426.pn, %656 ], [ %648, %647 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %35) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %35) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %34) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %32) #8
  br label %658

658:                                              ; preds = %657, %645
  %.pn426.pn.pn.pn = phi { ptr, i32 } [ %.pn426.pn.pn, %657 ], [ %646, %645 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %33) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %33) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %32) #8
  br label %809

659:                                              ; preds = %636
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %40) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %41) #8
  store i32 -1, ptr %41, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %42) #8
  store i32 0, ptr %42, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %43) #8
  store i32 0, ptr %43, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %40, ptr noundef nonnull align 4 dereferenceable(4) %41, ptr noundef nonnull align 4 dereferenceable(4) %42, ptr noundef nonnull align 4 dereferenceable(4) %43)
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %44) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %45) #8
  store i32 0, ptr %45, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %46) #8
  store i32 0, ptr %46, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %47) #8
  store i32 0, ptr %47, align 4, !tbaa !5
  call 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)
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %48) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %49) #8
  store i32 0, ptr %49, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %50) #8
  store i32 0, ptr %50, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %51) #8
  store i32 1, ptr %51, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %48, ptr noundef nonnull align 4 dereferenceable(4) %49, ptr noundef nonnull align 4 dereferenceable(4) %50, ptr noundef nonnull align 4 dereferenceable(4) %51)
  call void @_ZN3cgp23camera_controller_orbit7look_atERKNS_14numarray_stackIfLi3EEES4_S4_(ptr noundef nonnull align 8 dereferenceable(64) %1, ptr noundef nonnull align 4 dereferenceable(12) %40, ptr noundef nonnull align 4 dereferenceable(12) %44, ptr noundef nonnull align 4 dereferenceable(12) %48)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %51) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %50) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %49) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %48) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %47) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %46) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %45) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %44) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %43) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %42) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %41) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %40) #8
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %52) #8
  %660 = call { <2 x float>, float } @_ZNK3cgp19camera_generic_base5frontEv(ptr noundef nonnull align 8 dereferenceable(8) %613)
  %.fca.0.extract120 = extractvalue { <2 x float>, float } %660, 0
  %.fca.1.extract121 = extractvalue { <2 x float>, float } %660, 1
  store <2 x float> %.fca.0.extract120, ptr %52, align 8
  %.sroa.2123.0..sroa_idx = getelementptr inbounds i8, ptr %52, i64 8
  store float %.fca.1.extract121, ptr %.sroa.2123.0..sroa_idx, align 8
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %53) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %54) #8
  store i32 1, ptr %54, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %55) #8
  store i32 0, ptr %55, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %56) #8
  store i32 0, ptr %56, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %53, ptr noundef nonnull align 4 dereferenceable(4) %54, ptr noundef nonnull align 4 dereferenceable(4) %55, ptr noundef nonnull align 4 dereferenceable(4) %56)
  %661 = call noundef zeroext i1 @_ZN3cgp8is_equalIfLi3EEEbRKNS_14numarray_stackIT_XT0_EEES5_(ptr noundef nonnull align 4 dereferenceable(12) %52, ptr noundef nonnull align 4 dereferenceable(12) %53)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %56) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %55) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %54) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %53) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %52) #8
  br i1 %661, label %682, label %662

662:                                              ; preds = %659
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %57) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %58) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %58) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %57, ptr noundef nonnull @.str.4, ptr noundef nonnull align 1 dereferenceable(1) %58)
          to label %663 unwind label %668

663:                                              ; preds = %662
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %59) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %60) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %60) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %59, ptr noundef nonnull @.str.1, ptr noundef nonnull align 1 dereferenceable(1) %60)
          to label %664 unwind label %670

664:                                              ; preds = %663
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %61) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %62) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %62) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %61, ptr noundef nonnull @.str.2, ptr noundef nonnull align 1 dereferenceable(1) %62)
          to label %665 unwind label %672

665:                                              ; preds = %664
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %63) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %64) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %64) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %63, ptr noundef nonnull @__func__._ZN8cgp_test22test_camera_controllerEv, ptr noundef nonnull align 1 dereferenceable(1) %64)
          to label %666 unwind label %674

666:                                              ; preds = %665
  invoke void @_ZN3cgp10call_errorERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_S7_S7_i(ptr noundef nonnull align 8 dereferenceable(32) %57, ptr noundef nonnull align 8 dereferenceable(32) %59, ptr noundef nonnull align 8 dereferenceable(32) %61, ptr noundef nonnull align 8 dereferenceable(32) %63, i32 noundef 23) #9
          to label %667 unwind label %676

667:                                              ; preds = %666
  unreachable

668:                                              ; preds = %662
  %669 = landingpad { ptr, i32 }
          cleanup
  br label %681

670:                                              ; preds = %663
  %671 = landingpad { ptr, i32 }
          cleanup
  br label %680

672:                                              ; preds = %664
  %673 = landingpad { ptr, i32 }
          cleanup
  br label %679

674:                                              ; preds = %665
  %675 = landingpad { ptr, i32 }
          cleanup
  br label %678

676:                                              ; preds = %666
  %677 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %63) #8
  br label %678

678:                                              ; preds = %676, %674
  %.pn421 = phi { ptr, i32 } [ %677, %676 ], [ %675, %674 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %64) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %64) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %63) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %61) #8
  br label %679

679:                                              ; preds = %678, %672
  %.pn421.pn = phi { ptr, i32 } [ %.pn421, %678 ], [ %673, %672 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %62) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %62) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %61) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %59) #8
  br label %680

680:                                              ; preds = %679, %670
  %.pn421.pn.pn = phi { ptr, i32 } [ %.pn421.pn, %679 ], [ %671, %670 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %60) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %60) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %59) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %57) #8
  br label %681

681:                                              ; preds = %680, %668
  %.pn421.pn.pn.pn = phi { ptr, i32 } [ %.pn421.pn.pn, %680 ], [ %669, %668 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %58) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %58) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %57) #8
  br label %809

682:                                              ; preds = %659
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %65) #8
  %683 = call { <2 x float>, float } @_ZNK3cgp12camera_orbit8positionEv(ptr noundef nonnull align 8 dereferenceable(40) %613)
  %.fca.0.extract116 = extractvalue { <2 x float>, float } %683, 0
  %.fca.1.extract117 = extractvalue { <2 x float>, float } %683, 1
  store <2 x float> %.fca.0.extract116, ptr %65, align 8
  %.sroa.2119.0..sroa_idx = getelementptr inbounds i8, ptr %65, i64 8
  store float %.fca.1.extract117, ptr %.sroa.2119.0..sroa_idx, align 8
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %66) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %67) #8
  store i32 -1, ptr %67, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %68) #8
  store i32 0, ptr %68, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %69) #8
  store i32 0, ptr %69, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %66, ptr noundef nonnull align 4 dereferenceable(4) %67, ptr noundef nonnull align 4 dereferenceable(4) %68, ptr noundef nonnull align 4 dereferenceable(4) %69)
  %684 = call noundef zeroext i1 @_ZN3cgp8is_equalIfLi3EEEbRKNS_14numarray_stackIT_XT0_EEES5_(ptr noundef nonnull align 4 dereferenceable(12) %65, ptr noundef nonnull align 4 dereferenceable(12) %66)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %69) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %68) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %67) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %66) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %65) #8
  br i1 %684, label %705, label %685

685:                                              ; preds = %682
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %70) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %71) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %71) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %70, ptr noundef nonnull @.str.5, ptr noundef nonnull align 1 dereferenceable(1) %71)
          to label %686 unwind label %691

686:                                              ; preds = %685
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %72) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %73) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %73) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %72, ptr noundef nonnull @.str.1, ptr noundef nonnull align 1 dereferenceable(1) %73)
          to label %687 unwind label %693

687:                                              ; preds = %686
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %74) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %75) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %75) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %74, ptr noundef nonnull @.str.2, ptr noundef nonnull align 1 dereferenceable(1) %75)
          to label %688 unwind label %695

688:                                              ; preds = %687
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %76) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %77) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %77) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %76, ptr noundef nonnull @__func__._ZN8cgp_test22test_camera_controllerEv, ptr noundef nonnull align 1 dereferenceable(1) %77)
          to label %689 unwind label %697

689:                                              ; preds = %688
  invoke void @_ZN3cgp10call_errorERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_S7_S7_i(ptr noundef nonnull align 8 dereferenceable(32) %70, ptr noundef nonnull align 8 dereferenceable(32) %72, ptr noundef nonnull align 8 dereferenceable(32) %74, ptr noundef nonnull align 8 dereferenceable(32) %76, i32 noundef 24) #9
          to label %690 unwind label %699

690:                                              ; preds = %689
  unreachable

691:                                              ; preds = %685
  %692 = landingpad { ptr, i32 }
          cleanup
  br label %704

693:                                              ; preds = %686
  %694 = landingpad { ptr, i32 }
          cleanup
  br label %703

695:                                              ; preds = %687
  %696 = landingpad { ptr, i32 }
          cleanup
  br label %702

697:                                              ; preds = %688
  %698 = landingpad { ptr, i32 }
          cleanup
  br label %701

699:                                              ; preds = %689
  %700 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %76) #8
  br label %701

701:                                              ; preds = %699, %697
  %.pn416 = phi { ptr, i32 } [ %700, %699 ], [ %698, %697 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %77) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %77) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %76) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %74) #8
  br label %702

702:                                              ; preds = %701, %695
  %.pn416.pn = phi { ptr, i32 } [ %.pn416, %701 ], [ %696, %695 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %75) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %75) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %74) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %72) #8
  br label %703

703:                                              ; preds = %702, %693
  %.pn416.pn.pn = phi { ptr, i32 } [ %.pn416.pn, %702 ], [ %694, %693 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %73) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %73) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %72) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %70) #8
  br label %704

704:                                              ; preds = %703, %691
  %.pn416.pn.pn.pn = phi { ptr, i32 } [ %.pn416.pn.pn, %703 ], [ %692, %691 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %71) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %71) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %70) #8
  br label %809

705:                                              ; preds = %682
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %78) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %79) #8
  store i32 0, ptr %79, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %80) #8
  store i32 1, ptr %80, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %81) #8
  store i32 0, ptr %81, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %78, ptr noundef nonnull align 4 dereferenceable(4) %79, ptr noundef nonnull align 4 dereferenceable(4) %80, ptr noundef nonnull align 4 dereferenceable(4) %81)
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %82) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %83) #8
  store i32 0, ptr %83, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %84) #8
  store i32 0, ptr %84, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %85) #8
  store i32 0, ptr %85, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %82, ptr noundef nonnull align 4 dereferenceable(4) %83, ptr noundef nonnull align 4 dereferenceable(4) %84, ptr noundef nonnull align 4 dereferenceable(4) %85)
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %86) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %87) #8
  store i32 0, ptr %87, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %88) #8
  store i32 0, ptr %88, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %89) #8
  store i32 1, ptr %89, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %86, ptr noundef nonnull align 4 dereferenceable(4) %87, ptr noundef nonnull align 4 dereferenceable(4) %88, ptr noundef nonnull align 4 dereferenceable(4) %89)
  call void @_ZN3cgp23camera_controller_orbit7look_atERKNS_14numarray_stackIfLi3EEES4_S4_(ptr noundef nonnull align 8 dereferenceable(64) %1, ptr noundef nonnull align 4 dereferenceable(12) %78, ptr noundef nonnull align 4 dereferenceable(12) %82, ptr noundef nonnull align 4 dereferenceable(12) %86)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %89) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %88) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %87) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %86) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %85) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %84) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %83) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %82) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %81) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %80) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %79) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %78) #8
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %90) #8
  %706 = call { <2 x float>, float } @_ZNK3cgp19camera_generic_base5frontEv(ptr noundef nonnull align 8 dereferenceable(8) %613)
  %.fca.0.extract112 = extractvalue { <2 x float>, float } %706, 0
  %.fca.1.extract113 = extractvalue { <2 x float>, float } %706, 1
  store <2 x float> %.fca.0.extract112, ptr %90, align 8
  %.sroa.2115.0..sroa_idx = getelementptr inbounds i8, ptr %90, i64 8
  store float %.fca.1.extract113, ptr %.sroa.2115.0..sroa_idx, align 8
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %91) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %92) #8
  store i32 0, ptr %92, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %93) #8
  store i32 -1, ptr %93, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %94) #8
  store i32 0, ptr %94, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %91, ptr noundef nonnull align 4 dereferenceable(4) %92, ptr noundef nonnull align 4 dereferenceable(4) %93, ptr noundef nonnull align 4 dereferenceable(4) %94)
  %707 = call noundef zeroext i1 @_ZN3cgp8is_equalIfLi3EEEbRKNS_14numarray_stackIT_XT0_EEES5_(ptr noundef nonnull align 4 dereferenceable(12) %90, ptr noundef nonnull align 4 dereferenceable(12) %91)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %94) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %93) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %92) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %91) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %90) #8
  br i1 %707, label %728, label %708

708:                                              ; preds = %705
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %95) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %96) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %96) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %95, ptr noundef nonnull @.str.6, ptr noundef nonnull align 1 dereferenceable(1) %96)
          to label %709 unwind label %714

709:                                              ; preds = %708
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %97) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %98) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %98) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %97, ptr noundef nonnull @.str.1, ptr noundef nonnull align 1 dereferenceable(1) %98)
          to label %710 unwind label %716

710:                                              ; preds = %709
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %99) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %100) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %100) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %99, ptr noundef nonnull @.str.2, ptr noundef nonnull align 1 dereferenceable(1) %100)
          to label %711 unwind label %718

711:                                              ; preds = %710
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %101) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %102) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %102) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %101, ptr noundef nonnull @__func__._ZN8cgp_test22test_camera_controllerEv, ptr noundef nonnull align 1 dereferenceable(1) %102)
          to label %712 unwind label %720

712:                                              ; preds = %711
  invoke void @_ZN3cgp10call_errorERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_S7_S7_i(ptr noundef nonnull align 8 dereferenceable(32) %95, ptr noundef nonnull align 8 dereferenceable(32) %97, ptr noundef nonnull align 8 dereferenceable(32) %99, ptr noundef nonnull align 8 dereferenceable(32) %101, i32 noundef 27) #9
          to label %713 unwind label %722

713:                                              ; preds = %712
  unreachable

714:                                              ; preds = %708
  %715 = landingpad { ptr, i32 }
          cleanup
  br label %727

716:                                              ; preds = %709
  %717 = landingpad { ptr, i32 }
          cleanup
  br label %726

718:                                              ; preds = %710
  %719 = landingpad { ptr, i32 }
          cleanup
  br label %725

720:                                              ; preds = %711
  %721 = landingpad { ptr, i32 }
          cleanup
  br label %724

722:                                              ; preds = %712
  %723 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %101) #8
  br label %724

724:                                              ; preds = %722, %720
  %.pn411 = phi { ptr, i32 } [ %723, %722 ], [ %721, %720 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %102) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %102) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %101) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %99) #8
  br label %725

725:                                              ; preds = %724, %718
  %.pn411.pn = phi { ptr, i32 } [ %.pn411, %724 ], [ %719, %718 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %100) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %100) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %99) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %97) #8
  br label %726

726:                                              ; preds = %725, %716
  %.pn411.pn.pn = phi { ptr, i32 } [ %.pn411.pn, %725 ], [ %717, %716 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %98) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %98) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %97) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %95) #8
  br label %727

727:                                              ; preds = %726, %714
  %.pn411.pn.pn.pn = phi { ptr, i32 } [ %.pn411.pn.pn, %726 ], [ %715, %714 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %96) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %96) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %95) #8
  br label %809

728:                                              ; preds = %705
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %103) #8
  %729 = call { <2 x float>, float } @_ZNK3cgp12camera_orbit8positionEv(ptr noundef nonnull align 8 dereferenceable(40) %613)
  %.fca.0.extract108 = extractvalue { <2 x float>, float } %729, 0
  %.fca.1.extract109 = extractvalue { <2 x float>, float } %729, 1
  store <2 x float> %.fca.0.extract108, ptr %103, align 8
  %.sroa.2111.0..sroa_idx = getelementptr inbounds i8, ptr %103, i64 8
  store float %.fca.1.extract109, ptr %.sroa.2111.0..sroa_idx, align 8
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %104) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %105) #8
  store i32 0, ptr %105, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %106) #8
  store i32 1, ptr %106, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %107) #8
  store i32 0, ptr %107, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %104, ptr noundef nonnull align 4 dereferenceable(4) %105, ptr noundef nonnull align 4 dereferenceable(4) %106, ptr noundef nonnull align 4 dereferenceable(4) %107)
  %730 = call noundef zeroext i1 @_ZN3cgp8is_equalIfLi3EEEbRKNS_14numarray_stackIT_XT0_EEES5_(ptr noundef nonnull align 4 dereferenceable(12) %103, ptr noundef nonnull align 4 dereferenceable(12) %104)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %107) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %106) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %105) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %104) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %103) #8
  br i1 %730, label %751, label %731

731:                                              ; preds = %728
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %108) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %109) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %109) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %108, ptr noundef nonnull @.str.7, ptr noundef nonnull align 1 dereferenceable(1) %109)
          to label %732 unwind label %737

732:                                              ; preds = %731
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %110) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %111) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %111) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %110, ptr noundef nonnull @.str.1, ptr noundef nonnull align 1 dereferenceable(1) %111)
          to label %733 unwind label %739

733:                                              ; preds = %732
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %112) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %113) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %113) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %112, ptr noundef nonnull @.str.2, ptr noundef nonnull align 1 dereferenceable(1) %113)
          to label %734 unwind label %741

734:                                              ; preds = %733
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %114) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %115) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %115) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %114, ptr noundef nonnull @__func__._ZN8cgp_test22test_camera_controllerEv, ptr noundef nonnull align 1 dereferenceable(1) %115)
          to label %735 unwind label %743

735:                                              ; preds = %734
  invoke void @_ZN3cgp10call_errorERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_S7_S7_i(ptr noundef nonnull align 8 dereferenceable(32) %108, ptr noundef nonnull align 8 dereferenceable(32) %110, ptr noundef nonnull align 8 dereferenceable(32) %112, ptr noundef nonnull align 8 dereferenceable(32) %114, i32 noundef 28) #9
          to label %736 unwind label %745

736:                                              ; preds = %735
  unreachable

737:                                              ; preds = %731
  %738 = landingpad { ptr, i32 }
          cleanup
  br label %750

739:                                              ; preds = %732
  %740 = landingpad { ptr, i32 }
          cleanup
  br label %749

741:                                              ; preds = %733
  %742 = landingpad { ptr, i32 }
          cleanup
  br label %748

743:                                              ; preds = %734
  %744 = landingpad { ptr, i32 }
          cleanup
  br label %747

745:                                              ; preds = %735
  %746 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %114) #8
  br label %747

747:                                              ; preds = %745, %743
  %.pn406 = phi { ptr, i32 } [ %746, %745 ], [ %744, %743 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %115) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %115) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %114) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %112) #8
  br label %748

748:                                              ; preds = %747, %741
  %.pn406.pn = phi { ptr, i32 } [ %.pn406, %747 ], [ %742, %741 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %113) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %113) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %112) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %110) #8
  br label %749

749:                                              ; preds = %748, %739
  %.pn406.pn.pn = phi { ptr, i32 } [ %.pn406.pn, %748 ], [ %740, %739 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %111) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %111) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %110) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %108) #8
  br label %750

750:                                              ; preds = %749, %737
  %.pn406.pn.pn.pn = phi { ptr, i32 } [ %.pn406.pn.pn, %749 ], [ %738, %737 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %109) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %109) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %108) #8
  br label %809

751:                                              ; preds = %728
  %752 = call noundef float @_ZSt4sqrtf(float noundef 2.000000e+00)
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %116) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %117) #8
  store i32 1, ptr %117, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %118) #8
  store i32 1, ptr %118, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %119) #8
  store i32 0, ptr %119, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %116, ptr noundef nonnull align 4 dereferenceable(4) %117, ptr noundef nonnull align 4 dereferenceable(4) %118, ptr noundef nonnull align 4 dereferenceable(4) %119)
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %120) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %121) #8
  store i32 0, ptr %121, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %122) #8
  store i32 0, ptr %122, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %123) #8
  store i32 0, ptr %123, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %120, ptr noundef nonnull align 4 dereferenceable(4) %121, ptr noundef nonnull align 4 dereferenceable(4) %122, ptr noundef nonnull align 4 dereferenceable(4) %123)
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %124) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %125) #8
  store i32 0, ptr %125, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %126) #8
  store i32 0, ptr %126, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %127) #8
  store i32 1, ptr %127, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %124, ptr noundef nonnull align 4 dereferenceable(4) %125, ptr noundef nonnull align 4 dereferenceable(4) %126, ptr noundef nonnull align 4 dereferenceable(4) %127)
  call void @_ZN3cgp23camera_controller_orbit7look_atERKNS_14numarray_stackIfLi3EEES4_S4_(ptr noundef nonnull align 8 dereferenceable(64) %1, ptr noundef nonnull align 4 dereferenceable(12) %116, ptr noundef nonnull align 4 dereferenceable(12) %120, ptr noundef nonnull align 4 dereferenceable(12) %124)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %127) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %126) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %125) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %124) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %123) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %122) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %121) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %120) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %119) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %118) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %117) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %116) #8
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %128) #8
  %753 = call { <2 x float>, float } @_ZNK3cgp19camera_generic_base5frontEv(ptr noundef nonnull align 8 dereferenceable(8) %613)
  %.fca.0.extract102 = extractvalue { <2 x float>, float } %753, 0
  %.fca.1.extract103 = extractvalue { <2 x float>, float } %753, 1
  store <2 x float> %.fca.0.extract102, ptr %128, align 8
  %.sroa.2105.0..sroa_idx = getelementptr inbounds i8, ptr %128, i64 8
  store float %.fca.1.extract103, ptr %.sroa.2105.0..sroa_idx, align 8
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %129) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %130) #8
  %754 = fdiv float -1.000000e+00, %752
  store float %754, ptr %130, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %131) #8
  store float %754, ptr %131, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %132) #8
  store i32 0, ptr %132, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IffiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %129, ptr noundef nonnull align 4 dereferenceable(4) %130, ptr noundef nonnull align 4 dereferenceable(4) %131, ptr noundef nonnull align 4 dereferenceable(4) %132)
  %755 = call noundef zeroext i1 @_ZN3cgp8is_equalIfLi3EEEbRKNS_14numarray_stackIT_XT0_EEES5_(ptr noundef nonnull align 4 dereferenceable(12) %128, ptr noundef nonnull align 4 dereferenceable(12) %129)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %132) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %131) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %130) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %129) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %128) #8
  br i1 %755, label %776, label %756

756:                                              ; preds = %751
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %133) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %134) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %134) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %133, ptr noundef nonnull @.str.8, ptr noundef nonnull align 1 dereferenceable(1) %134)
          to label %757 unwind label %762

757:                                              ; preds = %756
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %135) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %136) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %136) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %135, ptr noundef nonnull @.str.1, ptr noundef nonnull align 1 dereferenceable(1) %136)
          to label %758 unwind label %764

758:                                              ; preds = %757
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %137) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %138) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %138) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %137, ptr noundef nonnull @.str.2, ptr noundef nonnull align 1 dereferenceable(1) %138)
          to label %759 unwind label %766

759:                                              ; preds = %758
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %139) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %140) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %140) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %139, ptr noundef nonnull @__func__._ZN8cgp_test22test_camera_controllerEv, ptr noundef nonnull align 1 dereferenceable(1) %140)
          to label %760 unwind label %768

760:                                              ; preds = %759
  invoke void @_ZN3cgp10call_errorERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_S7_S7_i(ptr noundef nonnull align 8 dereferenceable(32) %133, ptr noundef nonnull align 8 dereferenceable(32) %135, ptr noundef nonnull align 8 dereferenceable(32) %137, ptr noundef nonnull align 8 dereferenceable(32) %139, i32 noundef 32) #9
          to label %761 unwind label %770

761:                                              ; preds = %760
  unreachable

762:                                              ; preds = %756
  %763 = landingpad { ptr, i32 }
          cleanup
  br label %775

764:                                              ; preds = %757
  %765 = landingpad { ptr, i32 }
          cleanup
  br label %774

766:                                              ; preds = %758
  %767 = landingpad { ptr, i32 }
          cleanup
  br label %773

768:                                              ; preds = %759
  %769 = landingpad { ptr, i32 }
          cleanup
  br label %772

770:                                              ; preds = %760
  %771 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %139) #8
  br label %772

772:                                              ; preds = %770, %768
  %.pn400 = phi { ptr, i32 } [ %771, %770 ], [ %769, %768 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %140) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %140) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %139) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %137) #8
  br label %773

773:                                              ; preds = %772, %766
  %.pn400.pn = phi { ptr, i32 } [ %.pn400, %772 ], [ %767, %766 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %138) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %138) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %137) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %135) #8
  br label %774

774:                                              ; preds = %773, %764
  %.pn400.pn.pn = phi { ptr, i32 } [ %.pn400.pn, %773 ], [ %765, %764 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %136) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %136) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %135) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %133) #8
  br label %775

775:                                              ; preds = %774, %762
  %.pn400.pn.pn.pn = phi { ptr, i32 } [ %.pn400.pn.pn, %774 ], [ %763, %762 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %134) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %134) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %133) #8
  br label %809

776:                                              ; preds = %751
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %141) #8
  %777 = call { <2 x float>, float } @_ZNK3cgp12camera_orbit8positionEv(ptr noundef nonnull align 8 dereferenceable(40) %613)
  %.fca.0.extract98 = extractvalue { <2 x float>, float } %777, 0
  %.fca.1.extract99 = extractvalue { <2 x float>, float } %777, 1
  store <2 x float> %.fca.0.extract98, ptr %141, align 8
  %.sroa.2101.0..sroa_idx = getelementptr inbounds i8, ptr %141, i64 8
  store float %.fca.1.extract99, ptr %.sroa.2101.0..sroa_idx, align 8
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %142) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %143) #8
  store i32 1, ptr %143, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %144) #8
  store i32 1, ptr %144, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %145) #8
  store i32 0, ptr %145, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %142, ptr noundef nonnull align 4 dereferenceable(4) %143, ptr noundef nonnull align 4 dereferenceable(4) %144, ptr noundef nonnull align 4 dereferenceable(4) %145)
  %778 = call noundef zeroext i1 @_ZN3cgp8is_equalIfLi3EEEbRKNS_14numarray_stackIT_XT0_EEES5_(ptr noundef nonnull align 4 dereferenceable(12) %141, ptr noundef nonnull align 4 dereferenceable(12) %142)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %145) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %144) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %143) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %142) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %141) #8
  br i1 %778, label %799, label %779

779:                                              ; preds = %776
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %146) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %147) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %147) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %146, ptr noundef nonnull @.str.9, ptr noundef nonnull align 1 dereferenceable(1) %147)
          to label %780 unwind label %785

780:                                              ; preds = %779
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %148) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %149) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %149) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %148, ptr noundef nonnull @.str.1, ptr noundef nonnull align 1 dereferenceable(1) %149)
          to label %781 unwind label %787

781:                                              ; preds = %780
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %150) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %151) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %151) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %150, ptr noundef nonnull @.str.2, ptr noundef nonnull align 1 dereferenceable(1) %151)
          to label %782 unwind label %789

782:                                              ; preds = %781
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %152) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %153) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %153) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %152, ptr noundef nonnull @__func__._ZN8cgp_test22test_camera_controllerEv, ptr noundef nonnull align 1 dereferenceable(1) %153)
          to label %783 unwind label %791

783:                                              ; preds = %782
  invoke void @_ZN3cgp10call_errorERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_S7_S7_i(ptr noundef nonnull align 8 dereferenceable(32) %146, ptr noundef nonnull align 8 dereferenceable(32) %148, ptr noundef nonnull align 8 dereferenceable(32) %150, ptr noundef nonnull align 8 dereferenceable(32) %152, i32 noundef 33) #9
          to label %784 unwind label %793

784:                                              ; preds = %783
  unreachable

785:                                              ; preds = %779
  %786 = landingpad { ptr, i32 }
          cleanup
  br label %798

787:                                              ; preds = %780
  %788 = landingpad { ptr, i32 }
          cleanup
  br label %797

789:                                              ; preds = %781
  %790 = landingpad { ptr, i32 }
          cleanup
  br label %796

791:                                              ; preds = %782
  %792 = landingpad { ptr, i32 }
          cleanup
  br label %795

793:                                              ; preds = %783
  %794 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %152) #8
  br label %795

795:                                              ; preds = %793, %791
  %.pn395 = phi { ptr, i32 } [ %794, %793 ], [ %792, %791 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %153) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %153) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %152) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %150) #8
  br label %796

796:                                              ; preds = %795, %789
  %.pn395.pn = phi { ptr, i32 } [ %.pn395, %795 ], [ %790, %789 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %151) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %151) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %150) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %148) #8
  br label %797

797:                                              ; preds = %796, %787
  %.pn395.pn.pn = phi { ptr, i32 } [ %.pn395.pn, %796 ], [ %788, %787 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %149) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %149) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %148) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %146) #8
  br label %798

798:                                              ; preds = %797, %785
  %.pn395.pn.pn.pn = phi { ptr, i32 } [ %.pn395.pn.pn, %797 ], [ %786, %785 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %147) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %147) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %146) #8
  br label %809

799:                                              ; preds = %776
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %1) #8
  call void @llvm.lifetime.start.p0(i64 72, ptr nonnull %154) #8
  call void @_ZN3cgp29camera_controller_orbit_eulerC2Ev(ptr noundef nonnull align 8 dereferenceable(72) %154)
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %155) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %156) #8
  store i32 1, ptr %156, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %157) #8
  store i32 0, ptr %157, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %158) #8
  store i32 0, ptr %158, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %155, ptr noundef nonnull align 4 dereferenceable(4) %156, ptr noundef nonnull align 4 dereferenceable(4) %157, ptr noundef nonnull align 4 dereferenceable(4) %158)
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %159) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %160) #8
  store i32 0, ptr %160, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %161) #8
  store i32 0, ptr %161, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %162) #8
  store i32 0, ptr %162, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %159, ptr noundef nonnull align 4 dereferenceable(4) %160, ptr noundef nonnull align 4 dereferenceable(4) %161, ptr noundef nonnull align 4 dereferenceable(4) %162)
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %163) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %164) #8
  store i32 0, ptr %164, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %165) #8
  store i32 0, ptr %165, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %166) #8
  store i32 1, ptr %166, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %163, ptr noundef nonnull align 4 dereferenceable(4) %164, ptr noundef nonnull align 4 dereferenceable(4) %165, ptr noundef nonnull align 4 dereferenceable(4) %166)
  call void @_ZN3cgp29camera_controller_orbit_euler7look_atERKNS_14numarray_stackIfLi3EEES4_S4_(ptr noundef nonnull align 8 dereferenceable(72) %154, ptr noundef nonnull align 4 dereferenceable(12) %155, ptr noundef nonnull align 4 dereferenceable(12) %159, ptr noundef nonnull align 4 dereferenceable(12) %163)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %166) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %165) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %164) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %163) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %162) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %161) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %160) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %159) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %158) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %157) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %156) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %155) #8
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %167) #8
  %800 = getelementptr inbounds i8, ptr %154, i64 24
  %801 = call { <2 x float>, float } @_ZNK3cgp19camera_generic_base5frontEv(ptr noundef nonnull align 8 dereferenceable(8) %800)
  %.fca.0.extract94 = extractvalue { <2 x float>, float } %801, 0
  %.fca.1.extract95 = extractvalue { <2 x float>, float } %801, 1
  store <2 x float> %.fca.0.extract94, ptr %167, align 8
  %.sroa.297.0..sroa_idx = getelementptr inbounds i8, ptr %167, i64 8
  store float %.fca.1.extract95, ptr %.sroa.297.0..sroa_idx, align 8
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %168) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %169) #8
  store i32 -1, ptr %169, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %170) #8
  store i32 0, ptr %170, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %171) #8
  store i32 0, ptr %171, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %168, ptr noundef nonnull align 4 dereferenceable(4) %169, ptr noundef nonnull align 4 dereferenceable(4) %170, ptr noundef nonnull align 4 dereferenceable(4) %171)
  %802 = call noundef zeroext i1 @_ZN3cgp8is_equalIfLi3EEEbRKNS_14numarray_stackIT_XT0_EEES5_(ptr noundef nonnull align 4 dereferenceable(12) %167, ptr noundef nonnull align 4 dereferenceable(12) %168)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %171) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %170) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %169) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %168) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %167) #8
  br i1 %802, label %824, label %803

803:                                              ; preds = %799
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %172) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %173) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %173) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %172, ptr noundef nonnull @.str.10, ptr noundef nonnull align 1 dereferenceable(1) %173)
          to label %804 unwind label %810

804:                                              ; preds = %803
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %174) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %175) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %175) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %174, ptr noundef nonnull @.str.1, ptr noundef nonnull align 1 dereferenceable(1) %175)
          to label %805 unwind label %812

805:                                              ; preds = %804
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %176) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %177) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %177) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %176, ptr noundef nonnull @.str.2, ptr noundef nonnull align 1 dereferenceable(1) %177)
          to label %806 unwind label %814

806:                                              ; preds = %805
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %178) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %179) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %179) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %178, ptr noundef nonnull @__func__._ZN8cgp_test22test_camera_controllerEv, ptr noundef nonnull align 1 dereferenceable(1) %179)
          to label %807 unwind label %816

807:                                              ; preds = %806
  invoke void @_ZN3cgp10call_errorERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_S7_S7_i(ptr noundef nonnull align 8 dereferenceable(32) %172, ptr noundef nonnull align 8 dereferenceable(32) %174, ptr noundef nonnull align 8 dereferenceable(32) %176, ptr noundef nonnull align 8 dereferenceable(32) %178, i32 noundef 39) #9
          to label %808 unwind label %818

808:                                              ; preds = %807
  unreachable

809:                                              ; preds = %775, %798, %750, %727, %704, %681, %658, %635
  %.pn431.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn431.pn.pn.pn, %635 ], [ %.pn426.pn.pn.pn, %658 ], [ %.pn421.pn.pn.pn, %681 ], [ %.pn416.pn.pn.pn, %704 ], [ %.pn411.pn.pn.pn, %727 ], [ %.pn406.pn.pn.pn, %750 ], [ %.pn400.pn.pn.pn, %775 ], [ %.pn395.pn.pn.pn, %798 ]
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %1) #8
  br label %1365

810:                                              ; preds = %803
  %811 = landingpad { ptr, i32 }
          cleanup
  br label %823

812:                                              ; preds = %804
  %813 = landingpad { ptr, i32 }
          cleanup
  br label %822

814:                                              ; preds = %805
  %815 = landingpad { ptr, i32 }
          cleanup
  br label %821

816:                                              ; preds = %806
  %817 = landingpad { ptr, i32 }
          cleanup
  br label %820

818:                                              ; preds = %807
  %819 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %178) #8
  br label %820

820:                                              ; preds = %818, %816
  %.pn389 = phi { ptr, i32 } [ %819, %818 ], [ %817, %816 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %179) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %179) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %178) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %176) #8
  br label %821

821:                                              ; preds = %820, %814
  %.pn389.pn = phi { ptr, i32 } [ %.pn389, %820 ], [ %815, %814 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %177) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %177) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %176) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %174) #8
  br label %822

822:                                              ; preds = %821, %812
  %.pn389.pn.pn = phi { ptr, i32 } [ %.pn389.pn, %821 ], [ %813, %812 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %175) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %175) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %174) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %172) #8
  br label %823

823:                                              ; preds = %822, %810
  %.pn389.pn.pn.pn = phi { ptr, i32 } [ %.pn389.pn.pn, %822 ], [ %811, %810 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %173) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %173) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %172) #8
  br label %997

824:                                              ; preds = %799
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %180) #8
  %825 = call { <2 x float>, float } @_ZNK3cgp18camera_orbit_euler8positionEv(ptr noundef nonnull align 8 dereferenceable(48) %800)
  %.fca.0.extract90 = extractvalue { <2 x float>, float } %825, 0
  %.fca.1.extract91 = extractvalue { <2 x float>, float } %825, 1
  store <2 x float> %.fca.0.extract90, ptr %180, align 8
  %.sroa.293.0..sroa_idx = getelementptr inbounds i8, ptr %180, i64 8
  store float %.fca.1.extract91, ptr %.sroa.293.0..sroa_idx, align 8
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %181) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %182) #8
  store i32 1, ptr %182, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %183) #8
  store i32 0, ptr %183, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %184) #8
  store i32 0, ptr %184, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %181, ptr noundef nonnull align 4 dereferenceable(4) %182, ptr noundef nonnull align 4 dereferenceable(4) %183, ptr noundef nonnull align 4 dereferenceable(4) %184)
  %826 = call noundef zeroext i1 @_ZN3cgp8is_equalIfLi3EEEbRKNS_14numarray_stackIT_XT0_EEES5_(ptr noundef nonnull align 4 dereferenceable(12) %180, ptr noundef nonnull align 4 dereferenceable(12) %181)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %184) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %183) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %182) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %181) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %180) #8
  br i1 %826, label %847, label %827

827:                                              ; preds = %824
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %185) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %186) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %186) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %185, ptr noundef nonnull @.str.3, ptr noundef nonnull align 1 dereferenceable(1) %186)
          to label %828 unwind label %833

828:                                              ; preds = %827
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %187) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %188) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %188) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %187, ptr noundef nonnull @.str.1, ptr noundef nonnull align 1 dereferenceable(1) %188)
          to label %829 unwind label %835

829:                                              ; preds = %828
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %189) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %190) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %190) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %189, ptr noundef nonnull @.str.2, ptr noundef nonnull align 1 dereferenceable(1) %190)
          to label %830 unwind label %837

830:                                              ; preds = %829
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %191) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %192) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %192) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %191, ptr noundef nonnull @__func__._ZN8cgp_test22test_camera_controllerEv, ptr noundef nonnull align 1 dereferenceable(1) %192)
          to label %831 unwind label %839

831:                                              ; preds = %830
  invoke void @_ZN3cgp10call_errorERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_S7_S7_i(ptr noundef nonnull align 8 dereferenceable(32) %185, ptr noundef nonnull align 8 dereferenceable(32) %187, ptr noundef nonnull align 8 dereferenceable(32) %189, ptr noundef nonnull align 8 dereferenceable(32) %191, i32 noundef 40) #9
          to label %832 unwind label %841

832:                                              ; preds = %831
  unreachable

833:                                              ; preds = %827
  %834 = landingpad { ptr, i32 }
          cleanup
  br label %846

835:                                              ; preds = %828
  %836 = landingpad { ptr, i32 }
          cleanup
  br label %845

837:                                              ; preds = %829
  %838 = landingpad { ptr, i32 }
          cleanup
  br label %844

839:                                              ; preds = %830
  %840 = landingpad { ptr, i32 }
          cleanup
  br label %843

841:                                              ; preds = %831
  %842 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %191) #8
  br label %843

843:                                              ; preds = %841, %839
  %.pn384 = phi { ptr, i32 } [ %842, %841 ], [ %840, %839 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %192) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %192) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %191) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %189) #8
  br label %844

844:                                              ; preds = %843, %837
  %.pn384.pn = phi { ptr, i32 } [ %.pn384, %843 ], [ %838, %837 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %190) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %190) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %189) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %187) #8
  br label %845

845:                                              ; preds = %844, %835
  %.pn384.pn.pn = phi { ptr, i32 } [ %.pn384.pn, %844 ], [ %836, %835 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %188) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %188) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %187) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %185) #8
  br label %846

846:                                              ; preds = %845, %833
  %.pn384.pn.pn.pn = phi { ptr, i32 } [ %.pn384.pn.pn, %845 ], [ %834, %833 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %186) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %186) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %185) #8
  br label %997

847:                                              ; preds = %824
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %193) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %194) #8
  store i32 -1, ptr %194, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %195) #8
  store i32 0, ptr %195, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %196) #8
  store i32 0, ptr %196, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %193, ptr noundef nonnull align 4 dereferenceable(4) %194, ptr noundef nonnull align 4 dereferenceable(4) %195, ptr noundef nonnull align 4 dereferenceable(4) %196)
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %197) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %198) #8
  store i32 0, ptr %198, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %199) #8
  store i32 0, ptr %199, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %200) #8
  store i32 0, ptr %200, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %197, ptr noundef nonnull align 4 dereferenceable(4) %198, ptr noundef nonnull align 4 dereferenceable(4) %199, ptr noundef nonnull align 4 dereferenceable(4) %200)
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %201) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %202) #8
  store i32 0, ptr %202, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %203) #8
  store i32 0, ptr %203, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %204) #8
  store i32 1, ptr %204, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %201, ptr noundef nonnull align 4 dereferenceable(4) %202, ptr noundef nonnull align 4 dereferenceable(4) %203, ptr noundef nonnull align 4 dereferenceable(4) %204)
  call void @_ZN3cgp29camera_controller_orbit_euler7look_atERKNS_14numarray_stackIfLi3EEES4_S4_(ptr noundef nonnull align 8 dereferenceable(72) %154, ptr noundef nonnull align 4 dereferenceable(12) %193, ptr noundef nonnull align 4 dereferenceable(12) %197, ptr noundef nonnull align 4 dereferenceable(12) %201)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %204) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %203) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %202) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %201) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %200) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %199) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %198) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %197) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %196) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %195) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %194) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %193) #8
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %205) #8
  %848 = call { <2 x float>, float } @_ZNK3cgp19camera_generic_base5frontEv(ptr noundef nonnull align 8 dereferenceable(8) %800)
  %.fca.0.extract86 = extractvalue { <2 x float>, float } %848, 0
  %.fca.1.extract87 = extractvalue { <2 x float>, float } %848, 1
  store <2 x float> %.fca.0.extract86, ptr %205, align 8
  %.sroa.289.0..sroa_idx = getelementptr inbounds i8, ptr %205, i64 8
  store float %.fca.1.extract87, ptr %.sroa.289.0..sroa_idx, align 8
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %206) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %207) #8
  store i32 1, ptr %207, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %208) #8
  store i32 0, ptr %208, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %209) #8
  store i32 0, ptr %209, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %206, ptr noundef nonnull align 4 dereferenceable(4) %207, ptr noundef nonnull align 4 dereferenceable(4) %208, ptr noundef nonnull align 4 dereferenceable(4) %209)
  %849 = call noundef zeroext i1 @_ZN3cgp8is_equalIfLi3EEEbRKNS_14numarray_stackIT_XT0_EEES5_(ptr noundef nonnull align 4 dereferenceable(12) %205, ptr noundef nonnull align 4 dereferenceable(12) %206)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %209) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %208) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %207) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %206) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %205) #8
  br i1 %849, label %870, label %850

850:                                              ; preds = %847
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %210) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %211) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %211) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %210, ptr noundef nonnull @.str.4, ptr noundef nonnull align 1 dereferenceable(1) %211)
          to label %851 unwind label %856

851:                                              ; preds = %850
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %212) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %213) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %213) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %212, ptr noundef nonnull @.str.1, ptr noundef nonnull align 1 dereferenceable(1) %213)
          to label %852 unwind label %858

852:                                              ; preds = %851
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %214) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %215) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %215) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %214, ptr noundef nonnull @.str.2, ptr noundef nonnull align 1 dereferenceable(1) %215)
          to label %853 unwind label %860

853:                                              ; preds = %852
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %216) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %217) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %217) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %216, ptr noundef nonnull @__func__._ZN8cgp_test22test_camera_controllerEv, ptr noundef nonnull align 1 dereferenceable(1) %217)
          to label %854 unwind label %862

854:                                              ; preds = %853
  invoke void @_ZN3cgp10call_errorERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_S7_S7_i(ptr noundef nonnull align 8 dereferenceable(32) %210, ptr noundef nonnull align 8 dereferenceable(32) %212, ptr noundef nonnull align 8 dereferenceable(32) %214, ptr noundef nonnull align 8 dereferenceable(32) %216, i32 noundef 43) #9
          to label %855 unwind label %864

855:                                              ; preds = %854
  unreachable

856:                                              ; preds = %850
  %857 = landingpad { ptr, i32 }
          cleanup
  br label %869

858:                                              ; preds = %851
  %859 = landingpad { ptr, i32 }
          cleanup
  br label %868

860:                                              ; preds = %852
  %861 = landingpad { ptr, i32 }
          cleanup
  br label %867

862:                                              ; preds = %853
  %863 = landingpad { ptr, i32 }
          cleanup
  br label %866

864:                                              ; preds = %854
  %865 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %216) #8
  br label %866

866:                                              ; preds = %864, %862
  %.pn379 = phi { ptr, i32 } [ %865, %864 ], [ %863, %862 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %217) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %217) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %216) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %214) #8
  br label %867

867:                                              ; preds = %866, %860
  %.pn379.pn = phi { ptr, i32 } [ %.pn379, %866 ], [ %861, %860 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %215) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %215) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %214) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %212) #8
  br label %868

868:                                              ; preds = %867, %858
  %.pn379.pn.pn = phi { ptr, i32 } [ %.pn379.pn, %867 ], [ %859, %858 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %213) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %213) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %212) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %210) #8
  br label %869

869:                                              ; preds = %868, %856
  %.pn379.pn.pn.pn = phi { ptr, i32 } [ %.pn379.pn.pn, %868 ], [ %857, %856 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %211) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %211) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %210) #8
  br label %997

870:                                              ; preds = %847
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %218) #8
  %871 = call { <2 x float>, float } @_ZNK3cgp18camera_orbit_euler8positionEv(ptr noundef nonnull align 8 dereferenceable(48) %800)
  %.fca.0.extract82 = extractvalue { <2 x float>, float } %871, 0
  %.fca.1.extract83 = extractvalue { <2 x float>, float } %871, 1
  store <2 x float> %.fca.0.extract82, ptr %218, align 8
  %.sroa.285.0..sroa_idx = getelementptr inbounds i8, ptr %218, i64 8
  store float %.fca.1.extract83, ptr %.sroa.285.0..sroa_idx, align 8
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %219) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %220) #8
  store i32 -1, ptr %220, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %221) #8
  store i32 0, ptr %221, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %222) #8
  store i32 0, ptr %222, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %219, ptr noundef nonnull align 4 dereferenceable(4) %220, ptr noundef nonnull align 4 dereferenceable(4) %221, ptr noundef nonnull align 4 dereferenceable(4) %222)
  %872 = call noundef zeroext i1 @_ZN3cgp8is_equalIfLi3EEEbRKNS_14numarray_stackIT_XT0_EEES5_(ptr noundef nonnull align 4 dereferenceable(12) %218, ptr noundef nonnull align 4 dereferenceable(12) %219)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %222) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %221) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %220) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %219) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %218) #8
  br i1 %872, label %893, label %873

873:                                              ; preds = %870
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %223) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %224) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %224) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %223, ptr noundef nonnull @.str.5, ptr noundef nonnull align 1 dereferenceable(1) %224)
          to label %874 unwind label %879

874:                                              ; preds = %873
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %225) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %226) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %226) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %225, ptr noundef nonnull @.str.1, ptr noundef nonnull align 1 dereferenceable(1) %226)
          to label %875 unwind label %881

875:                                              ; preds = %874
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %227) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %228) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %228) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %227, ptr noundef nonnull @.str.2, ptr noundef nonnull align 1 dereferenceable(1) %228)
          to label %876 unwind label %883

876:                                              ; preds = %875
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %229) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %230) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %230) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %229, ptr noundef nonnull @__func__._ZN8cgp_test22test_camera_controllerEv, ptr noundef nonnull align 1 dereferenceable(1) %230)
          to label %877 unwind label %885

877:                                              ; preds = %876
  invoke void @_ZN3cgp10call_errorERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_S7_S7_i(ptr noundef nonnull align 8 dereferenceable(32) %223, ptr noundef nonnull align 8 dereferenceable(32) %225, ptr noundef nonnull align 8 dereferenceable(32) %227, ptr noundef nonnull align 8 dereferenceable(32) %229, i32 noundef 44) #9
          to label %878 unwind label %887

878:                                              ; preds = %877
  unreachable

879:                                              ; preds = %873
  %880 = landingpad { ptr, i32 }
          cleanup
  br label %892

881:                                              ; preds = %874
  %882 = landingpad { ptr, i32 }
          cleanup
  br label %891

883:                                              ; preds = %875
  %884 = landingpad { ptr, i32 }
          cleanup
  br label %890

885:                                              ; preds = %876
  %886 = landingpad { ptr, i32 }
          cleanup
  br label %889

887:                                              ; preds = %877
  %888 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %229) #8
  br label %889

889:                                              ; preds = %887, %885
  %.pn374 = phi { ptr, i32 } [ %888, %887 ], [ %886, %885 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %230) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %230) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %229) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %227) #8
  br label %890

890:                                              ; preds = %889, %883
  %.pn374.pn = phi { ptr, i32 } [ %.pn374, %889 ], [ %884, %883 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %228) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %228) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %227) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %225) #8
  br label %891

891:                                              ; preds = %890, %881
  %.pn374.pn.pn = phi { ptr, i32 } [ %.pn374.pn, %890 ], [ %882, %881 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %226) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %226) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %225) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %223) #8
  br label %892

892:                                              ; preds = %891, %879
  %.pn374.pn.pn.pn = phi { ptr, i32 } [ %.pn374.pn.pn, %891 ], [ %880, %879 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %224) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %224) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %223) #8
  br label %997

893:                                              ; preds = %870
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %231) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %232) #8
  store i32 0, ptr %232, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %233) #8
  store i32 1, ptr %233, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %234) #8
  store i32 0, ptr %234, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %231, ptr noundef nonnull align 4 dereferenceable(4) %232, ptr noundef nonnull align 4 dereferenceable(4) %233, ptr noundef nonnull align 4 dereferenceable(4) %234)
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %235) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %236) #8
  store i32 0, ptr %236, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %237) #8
  store i32 0, ptr %237, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %238) #8
  store i32 0, ptr %238, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %235, ptr noundef nonnull align 4 dereferenceable(4) %236, ptr noundef nonnull align 4 dereferenceable(4) %237, ptr noundef nonnull align 4 dereferenceable(4) %238)
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %239) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %240) #8
  store i32 0, ptr %240, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %241) #8
  store i32 0, ptr %241, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %242) #8
  store i32 1, ptr %242, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %239, ptr noundef nonnull align 4 dereferenceable(4) %240, ptr noundef nonnull align 4 dereferenceable(4) %241, ptr noundef nonnull align 4 dereferenceable(4) %242)
  call void @_ZN3cgp29camera_controller_orbit_euler7look_atERKNS_14numarray_stackIfLi3EEES4_S4_(ptr noundef nonnull align 8 dereferenceable(72) %154, ptr noundef nonnull align 4 dereferenceable(12) %231, ptr noundef nonnull align 4 dereferenceable(12) %235, ptr noundef nonnull align 4 dereferenceable(12) %239)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %242) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %241) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %240) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %239) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %238) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %237) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %236) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %235) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %234) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %233) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %232) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %231) #8
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %243) #8
  %894 = call { <2 x float>, float } @_ZNK3cgp19camera_generic_base5frontEv(ptr noundef nonnull align 8 dereferenceable(8) %800)
  %.fca.0.extract78 = extractvalue { <2 x float>, float } %894, 0
  %.fca.1.extract79 = extractvalue { <2 x float>, float } %894, 1
  store <2 x float> %.fca.0.extract78, ptr %243, align 8
  %.sroa.281.0..sroa_idx = getelementptr inbounds i8, ptr %243, i64 8
  store float %.fca.1.extract79, ptr %.sroa.281.0..sroa_idx, align 8
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %244) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %245) #8
  store i32 0, ptr %245, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %246) #8
  store i32 -1, ptr %246, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %247) #8
  store i32 0, ptr %247, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %244, ptr noundef nonnull align 4 dereferenceable(4) %245, ptr noundef nonnull align 4 dereferenceable(4) %246, ptr noundef nonnull align 4 dereferenceable(4) %247)
  %895 = call noundef zeroext i1 @_ZN3cgp8is_equalIfLi3EEEbRKNS_14numarray_stackIT_XT0_EEES5_(ptr noundef nonnull align 4 dereferenceable(12) %243, ptr noundef nonnull align 4 dereferenceable(12) %244)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %247) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %246) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %245) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %244) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %243) #8
  br i1 %895, label %916, label %896

896:                                              ; preds = %893
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %248) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %249) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %249) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %248, ptr noundef nonnull @.str.6, ptr noundef nonnull align 1 dereferenceable(1) %249)
          to label %897 unwind label %902

897:                                              ; preds = %896
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %250) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %251) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %251) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %250, ptr noundef nonnull @.str.1, ptr noundef nonnull align 1 dereferenceable(1) %251)
          to label %898 unwind label %904

898:                                              ; preds = %897
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %252) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %253) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %253) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %252, ptr noundef nonnull @.str.2, ptr noundef nonnull align 1 dereferenceable(1) %253)
          to label %899 unwind label %906

899:                                              ; preds = %898
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %254) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %255) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %255) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %254, ptr noundef nonnull @__func__._ZN8cgp_test22test_camera_controllerEv, ptr noundef nonnull align 1 dereferenceable(1) %255)
          to label %900 unwind label %908

900:                                              ; preds = %899
  invoke void @_ZN3cgp10call_errorERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_S7_S7_i(ptr noundef nonnull align 8 dereferenceable(32) %248, ptr noundef nonnull align 8 dereferenceable(32) %250, ptr noundef nonnull align 8 dereferenceable(32) %252, ptr noundef nonnull align 8 dereferenceable(32) %254, i32 noundef 47) #9
          to label %901 unwind label %910

901:                                              ; preds = %900
  unreachable

902:                                              ; preds = %896
  %903 = landingpad { ptr, i32 }
          cleanup
  br label %915

904:                                              ; preds = %897
  %905 = landingpad { ptr, i32 }
          cleanup
  br label %914

906:                                              ; preds = %898
  %907 = landingpad { ptr, i32 }
          cleanup
  br label %913

908:                                              ; preds = %899
  %909 = landingpad { ptr, i32 }
          cleanup
  br label %912

910:                                              ; preds = %900
  %911 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %254) #8
  br label %912

912:                                              ; preds = %910, %908
  %.pn369 = phi { ptr, i32 } [ %911, %910 ], [ %909, %908 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %255) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %255) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %254) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %252) #8
  br label %913

913:                                              ; preds = %912, %906
  %.pn369.pn = phi { ptr, i32 } [ %.pn369, %912 ], [ %907, %906 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %253) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %253) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %252) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %250) #8
  br label %914

914:                                              ; preds = %913, %904
  %.pn369.pn.pn = phi { ptr, i32 } [ %.pn369.pn, %913 ], [ %905, %904 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %251) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %251) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %250) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %248) #8
  br label %915

915:                                              ; preds = %914, %902
  %.pn369.pn.pn.pn = phi { ptr, i32 } [ %.pn369.pn.pn, %914 ], [ %903, %902 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %249) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %249) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %248) #8
  br label %997

916:                                              ; preds = %893
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %256) #8
  %917 = call { <2 x float>, float } @_ZNK3cgp18camera_orbit_euler8positionEv(ptr noundef nonnull align 8 dereferenceable(48) %800)
  %.fca.0.extract74 = extractvalue { <2 x float>, float } %917, 0
  %.fca.1.extract75 = extractvalue { <2 x float>, float } %917, 1
  store <2 x float> %.fca.0.extract74, ptr %256, align 8
  %.sroa.277.0..sroa_idx = getelementptr inbounds i8, ptr %256, i64 8
  store float %.fca.1.extract75, ptr %.sroa.277.0..sroa_idx, align 8
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %257) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %258) #8
  store i32 0, ptr %258, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %259) #8
  store i32 1, ptr %259, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %260) #8
  store i32 0, ptr %260, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %257, ptr noundef nonnull align 4 dereferenceable(4) %258, ptr noundef nonnull align 4 dereferenceable(4) %259, ptr noundef nonnull align 4 dereferenceable(4) %260)
  %918 = call noundef zeroext i1 @_ZN3cgp8is_equalIfLi3EEEbRKNS_14numarray_stackIT_XT0_EEES5_(ptr noundef nonnull align 4 dereferenceable(12) %256, ptr noundef nonnull align 4 dereferenceable(12) %257)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %260) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %259) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %258) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %257) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %256) #8
  br i1 %918, label %939, label %919

919:                                              ; preds = %916
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %261) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %262) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %262) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %261, ptr noundef nonnull @.str.7, ptr noundef nonnull align 1 dereferenceable(1) %262)
          to label %920 unwind label %925

920:                                              ; preds = %919
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %263) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %264) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %264) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %263, ptr noundef nonnull @.str.1, ptr noundef nonnull align 1 dereferenceable(1) %264)
          to label %921 unwind label %927

921:                                              ; preds = %920
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %265) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %266) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %266) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %265, ptr noundef nonnull @.str.2, ptr noundef nonnull align 1 dereferenceable(1) %266)
          to label %922 unwind label %929

922:                                              ; preds = %921
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %267) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %268) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %268) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %267, ptr noundef nonnull @__func__._ZN8cgp_test22test_camera_controllerEv, ptr noundef nonnull align 1 dereferenceable(1) %268)
          to label %923 unwind label %931

923:                                              ; preds = %922
  invoke void @_ZN3cgp10call_errorERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_S7_S7_i(ptr noundef nonnull align 8 dereferenceable(32) %261, ptr noundef nonnull align 8 dereferenceable(32) %263, ptr noundef nonnull align 8 dereferenceable(32) %265, ptr noundef nonnull align 8 dereferenceable(32) %267, i32 noundef 48) #9
          to label %924 unwind label %933

924:                                              ; preds = %923
  unreachable

925:                                              ; preds = %919
  %926 = landingpad { ptr, i32 }
          cleanup
  br label %938

927:                                              ; preds = %920
  %928 = landingpad { ptr, i32 }
          cleanup
  br label %937

929:                                              ; preds = %921
  %930 = landingpad { ptr, i32 }
          cleanup
  br label %936

931:                                              ; preds = %922
  %932 = landingpad { ptr, i32 }
          cleanup
  br label %935

933:                                              ; preds = %923
  %934 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %267) #8
  br label %935

935:                                              ; preds = %933, %931
  %.pn364 = phi { ptr, i32 } [ %934, %933 ], [ %932, %931 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %268) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %268) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %267) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %265) #8
  br label %936

936:                                              ; preds = %935, %929
  %.pn364.pn = phi { ptr, i32 } [ %.pn364, %935 ], [ %930, %929 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %266) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %266) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %265) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %263) #8
  br label %937

937:                                              ; preds = %936, %927
  %.pn364.pn.pn = phi { ptr, i32 } [ %.pn364.pn, %936 ], [ %928, %927 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %264) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %264) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %263) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %261) #8
  br label %938

938:                                              ; preds = %937, %925
  %.pn364.pn.pn.pn = phi { ptr, i32 } [ %.pn364.pn.pn, %937 ], [ %926, %925 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %262) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %262) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %261) #8
  br label %997

939:                                              ; preds = %916
  %940 = call noundef float @_ZSt4sqrtf(float noundef 2.000000e+00)
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %269) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %270) #8
  store i32 1, ptr %270, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %271) #8
  store i32 1, ptr %271, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %272) #8
  store i32 0, ptr %272, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %269, ptr noundef nonnull align 4 dereferenceable(4) %270, ptr noundef nonnull align 4 dereferenceable(4) %271, ptr noundef nonnull align 4 dereferenceable(4) %272)
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %273) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %274) #8
  store i32 0, ptr %274, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %275) #8
  store i32 0, ptr %275, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %276) #8
  store i32 0, ptr %276, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %273, ptr noundef nonnull align 4 dereferenceable(4) %274, ptr noundef nonnull align 4 dereferenceable(4) %275, ptr noundef nonnull align 4 dereferenceable(4) %276)
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %277) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %278) #8
  store i32 0, ptr %278, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %279) #8
  store i32 0, ptr %279, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %280) #8
  store i32 1, ptr %280, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %277, ptr noundef nonnull align 4 dereferenceable(4) %278, ptr noundef nonnull align 4 dereferenceable(4) %279, ptr noundef nonnull align 4 dereferenceable(4) %280)
  call void @_ZN3cgp29camera_controller_orbit_euler7look_atERKNS_14numarray_stackIfLi3EEES4_S4_(ptr noundef nonnull align 8 dereferenceable(72) %154, ptr noundef nonnull align 4 dereferenceable(12) %269, ptr noundef nonnull align 4 dereferenceable(12) %273, ptr noundef nonnull align 4 dereferenceable(12) %277)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %280) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %279) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %278) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %277) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %276) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %275) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %274) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %273) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %272) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %271) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %270) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %269) #8
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %281) #8
  %941 = call { <2 x float>, float } @_ZNK3cgp19camera_generic_base5frontEv(ptr noundef nonnull align 8 dereferenceable(8) %800)
  %.fca.0.extract68 = extractvalue { <2 x float>, float } %941, 0
  %.fca.1.extract69 = extractvalue { <2 x float>, float } %941, 1
  store <2 x float> %.fca.0.extract68, ptr %281, align 8
  %.sroa.271.0..sroa_idx = getelementptr inbounds i8, ptr %281, i64 8
  store float %.fca.1.extract69, ptr %.sroa.271.0..sroa_idx, align 8
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %282) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %283) #8
  %942 = fdiv float -1.000000e+00, %940
  store float %942, ptr %283, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %284) #8
  store float %942, ptr %284, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %285) #8
  store i32 0, ptr %285, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IffiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %282, ptr noundef nonnull align 4 dereferenceable(4) %283, ptr noundef nonnull align 4 dereferenceable(4) %284, ptr noundef nonnull align 4 dereferenceable(4) %285)
  %943 = call noundef zeroext i1 @_ZN3cgp8is_equalIfLi3EEEbRKNS_14numarray_stackIT_XT0_EEES5_(ptr noundef nonnull align 4 dereferenceable(12) %281, ptr noundef nonnull align 4 dereferenceable(12) %282)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %285) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %284) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %283) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %282) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %281) #8
  br i1 %943, label %964, label %944

944:                                              ; preds = %939
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %286) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %287) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %287) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %286, ptr noundef nonnull @.str.11, ptr noundef nonnull align 1 dereferenceable(1) %287)
          to label %945 unwind label %950

945:                                              ; preds = %944
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %288) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %289) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %289) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %288, ptr noundef nonnull @.str.1, ptr noundef nonnull align 1 dereferenceable(1) %289)
          to label %946 unwind label %952

946:                                              ; preds = %945
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %290) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %291) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %291) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %290, ptr noundef nonnull @.str.2, ptr noundef nonnull align 1 dereferenceable(1) %291)
          to label %947 unwind label %954

947:                                              ; preds = %946
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %292) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %293) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %293) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %292, ptr noundef nonnull @__func__._ZN8cgp_test22test_camera_controllerEv, ptr noundef nonnull align 1 dereferenceable(1) %293)
          to label %948 unwind label %956

948:                                              ; preds = %947
  invoke void @_ZN3cgp10call_errorERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_S7_S7_i(ptr noundef nonnull align 8 dereferenceable(32) %286, ptr noundef nonnull align 8 dereferenceable(32) %288, ptr noundef nonnull align 8 dereferenceable(32) %290, ptr noundef nonnull align 8 dereferenceable(32) %292, i32 noundef 52) #9
          to label %949 unwind label %958

949:                                              ; preds = %948
  unreachable

950:                                              ; preds = %944
  %951 = landingpad { ptr, i32 }
          cleanup
  br label %963

952:                                              ; preds = %945
  %953 = landingpad { ptr, i32 }
          cleanup
  br label %962

954:                                              ; preds = %946
  %955 = landingpad { ptr, i32 }
          cleanup
  br label %961

956:                                              ; preds = %947
  %957 = landingpad { ptr, i32 }
          cleanup
  br label %960

958:                                              ; preds = %948
  %959 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %292) #8
  br label %960

960:                                              ; preds = %958, %956
  %.pn358 = phi { ptr, i32 } [ %959, %958 ], [ %957, %956 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %293) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %293) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %292) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %290) #8
  br label %961

961:                                              ; preds = %960, %954
  %.pn358.pn = phi { ptr, i32 } [ %.pn358, %960 ], [ %955, %954 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %291) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %291) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %290) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %288) #8
  br label %962

962:                                              ; preds = %961, %952
  %.pn358.pn.pn = phi { ptr, i32 } [ %.pn358.pn, %961 ], [ %953, %952 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %289) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %289) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %288) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %286) #8
  br label %963

963:                                              ; preds = %962, %950
  %.pn358.pn.pn.pn = phi { ptr, i32 } [ %.pn358.pn.pn, %962 ], [ %951, %950 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %287) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %287) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %286) #8
  br label %997

964:                                              ; preds = %939
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %294) #8
  %965 = call { <2 x float>, float } @_ZNK3cgp18camera_orbit_euler8positionEv(ptr noundef nonnull align 8 dereferenceable(48) %800)
  %.fca.0.extract64 = extractvalue { <2 x float>, float } %965, 0
  %.fca.1.extract65 = extractvalue { <2 x float>, float } %965, 1
  store <2 x float> %.fca.0.extract64, ptr %294, align 8
  %.sroa.267.0..sroa_idx = getelementptr inbounds i8, ptr %294, i64 8
  store float %.fca.1.extract65, ptr %.sroa.267.0..sroa_idx, align 8
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %295) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %296) #8
  store i32 1, ptr %296, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %297) #8
  store i32 1, ptr %297, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %298) #8
  store i32 0, ptr %298, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %295, ptr noundef nonnull align 4 dereferenceable(4) %296, ptr noundef nonnull align 4 dereferenceable(4) %297, ptr noundef nonnull align 4 dereferenceable(4) %298)
  %966 = call noundef zeroext i1 @_ZN3cgp8is_equalIfLi3EEEbRKNS_14numarray_stackIT_XT0_EEES5_(ptr noundef nonnull align 4 dereferenceable(12) %294, ptr noundef nonnull align 4 dereferenceable(12) %295)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %298) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %297) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %296) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %295) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %294) #8
  br i1 %966, label %987, label %967

967:                                              ; preds = %964
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %299) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %300) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %300) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %299, ptr noundef nonnull @.str.9, ptr noundef nonnull align 1 dereferenceable(1) %300)
          to label %968 unwind label %973

968:                                              ; preds = %967
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %301) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %302) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %302) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %301, ptr noundef nonnull @.str.1, ptr noundef nonnull align 1 dereferenceable(1) %302)
          to label %969 unwind label %975

969:                                              ; preds = %968
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %303) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %304) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %304) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %303, ptr noundef nonnull @.str.2, ptr noundef nonnull align 1 dereferenceable(1) %304)
          to label %970 unwind label %977

970:                                              ; preds = %969
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %305) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %306) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %306) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %305, ptr noundef nonnull @__func__._ZN8cgp_test22test_camera_controllerEv, ptr noundef nonnull align 1 dereferenceable(1) %306)
          to label %971 unwind label %979

971:                                              ; preds = %970
  invoke void @_ZN3cgp10call_errorERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_S7_S7_i(ptr noundef nonnull align 8 dereferenceable(32) %299, ptr noundef nonnull align 8 dereferenceable(32) %301, ptr noundef nonnull align 8 dereferenceable(32) %303, ptr noundef nonnull align 8 dereferenceable(32) %305, i32 noundef 53) #9
          to label %972 unwind label %981

972:                                              ; preds = %971
  unreachable

973:                                              ; preds = %967
  %974 = landingpad { ptr, i32 }
          cleanup
  br label %986

975:                                              ; preds = %968
  %976 = landingpad { ptr, i32 }
          cleanup
  br label %985

977:                                              ; preds = %969
  %978 = landingpad { ptr, i32 }
          cleanup
  br label %984

979:                                              ; preds = %970
  %980 = landingpad { ptr, i32 }
          cleanup
  br label %983

981:                                              ; preds = %971
  %982 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %305) #8
  br label %983

983:                                              ; preds = %981, %979
  %.pn353 = phi { ptr, i32 } [ %982, %981 ], [ %980, %979 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %306) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %306) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %305) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %303) #8
  br label %984

984:                                              ; preds = %983, %977
  %.pn353.pn = phi { ptr, i32 } [ %.pn353, %983 ], [ %978, %977 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %304) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %304) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %303) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %301) #8
  br label %985

985:                                              ; preds = %984, %975
  %.pn353.pn.pn = phi { ptr, i32 } [ %.pn353.pn, %984 ], [ %976, %975 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %302) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %302) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %301) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %299) #8
  br label %986

986:                                              ; preds = %985, %973
  %.pn353.pn.pn.pn = phi { ptr, i32 } [ %.pn353.pn.pn, %985 ], [ %974, %973 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %300) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %300) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %299) #8
  br label %997

987:                                              ; preds = %964
  call void @llvm.lifetime.end.p0(i64 72, ptr nonnull %154) #8
  call void @llvm.lifetime.start.p0(i64 80, ptr nonnull %307) #8
  call void @_ZN3cgp30camera_controller_first_personC2Ev(ptr noundef nonnull align 8 dereferenceable(73) %307)
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %308) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %309) #8
  store i32 1, ptr %309, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %310) #8
  store i32 0, ptr %310, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %311) #8
  store i32 0, ptr %311, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %308, ptr noundef nonnull align 4 dereferenceable(4) %309, ptr noundef nonnull align 4 dereferenceable(4) %310, ptr noundef nonnull align 4 dereferenceable(4) %311)
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %312) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %313) #8
  store i32 0, ptr %313, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %314) #8
  store i32 0, ptr %314, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %315) #8
  store i32 0, ptr %315, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %312, ptr noundef nonnull align 4 dereferenceable(4) %313, ptr noundef nonnull align 4 dereferenceable(4) %314, ptr noundef nonnull align 4 dereferenceable(4) %315)
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %316) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %317) #8
  store i32 0, ptr %317, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %318) #8
  store i32 0, ptr %318, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %319) #8
  store i32 1, ptr %319, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %316, ptr noundef nonnull align 4 dereferenceable(4) %317, ptr noundef nonnull align 4 dereferenceable(4) %318, ptr noundef nonnull align 4 dereferenceable(4) %319)
  call void @_ZN3cgp30camera_controller_first_person7look_atERKNS_14numarray_stackIfLi3EEES4_S4_(ptr noundef nonnull align 8 dereferenceable(73) %307, ptr noundef nonnull align 4 dereferenceable(12) %308, ptr noundef nonnull align 4 dereferenceable(12) %312, ptr noundef nonnull align 4 dereferenceable(12) %316)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %319) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %318) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %317) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %316) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %315) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %314) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %313) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %312) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %311) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %310) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %309) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %308) #8
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %320) #8
  %988 = getelementptr inbounds i8, ptr %307, i64 24
  %989 = call { <2 x float>, float } @_ZNK3cgp19camera_generic_base5frontEv(ptr noundef nonnull align 8 dereferenceable(8) %988)
  %.fca.0.extract60 = extractvalue { <2 x float>, float } %989, 0
  %.fca.1.extract61 = extractvalue { <2 x float>, float } %989, 1
  store <2 x float> %.fca.0.extract60, ptr %320, align 8
  %.sroa.263.0..sroa_idx = getelementptr inbounds i8, ptr %320, i64 8
  store float %.fca.1.extract61, ptr %.sroa.263.0..sroa_idx, align 8
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %321) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %322) #8
  store i32 -1, ptr %322, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %323) #8
  store i32 0, ptr %323, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %324) #8
  store i32 0, ptr %324, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %321, ptr noundef nonnull align 4 dereferenceable(4) %322, ptr noundef nonnull align 4 dereferenceable(4) %323, ptr noundef nonnull align 4 dereferenceable(4) %324)
  %990 = call noundef zeroext i1 @_ZN3cgp8is_equalIfLi3EEEbRKNS_14numarray_stackIT_XT0_EEES5_(ptr noundef nonnull align 4 dereferenceable(12) %320, ptr noundef nonnull align 4 dereferenceable(12) %321)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %324) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %323) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %322) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %321) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %320) #8
  br i1 %990, label %1012, label %991

991:                                              ; preds = %987
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %325) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %326) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %326) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %325, ptr noundef nonnull @.str.10, ptr noundef nonnull align 1 dereferenceable(1) %326)
          to label %992 unwind label %998

992:                                              ; preds = %991
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %327) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %328) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %328) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %327, ptr noundef nonnull @.str.1, ptr noundef nonnull align 1 dereferenceable(1) %328)
          to label %993 unwind label %1000

993:                                              ; preds = %992
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %329) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %330) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %330) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %329, ptr noundef nonnull @.str.2, ptr noundef nonnull align 1 dereferenceable(1) %330)
          to label %994 unwind label %1002

994:                                              ; preds = %993
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %331) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %332) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %332) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %331, ptr noundef nonnull @__func__._ZN8cgp_test22test_camera_controllerEv, ptr noundef nonnull align 1 dereferenceable(1) %332)
          to label %995 unwind label %1004

995:                                              ; preds = %994
  invoke void @_ZN3cgp10call_errorERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_S7_S7_i(ptr noundef nonnull align 8 dereferenceable(32) %325, ptr noundef nonnull align 8 dereferenceable(32) %327, ptr noundef nonnull align 8 dereferenceable(32) %329, ptr noundef nonnull align 8 dereferenceable(32) %331, i32 noundef 59) #9
          to label %996 unwind label %1006

996:                                              ; preds = %995
  unreachable

997:                                              ; preds = %963, %986, %938, %915, %892, %869, %846, %823
  %.pn389.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn389.pn.pn.pn, %823 ], [ %.pn384.pn.pn.pn, %846 ], [ %.pn379.pn.pn.pn, %869 ], [ %.pn374.pn.pn.pn, %892 ], [ %.pn369.pn.pn.pn, %915 ], [ %.pn364.pn.pn.pn, %938 ], [ %.pn358.pn.pn.pn, %963 ], [ %.pn353.pn.pn.pn, %986 ]
  call void @llvm.lifetime.end.p0(i64 72, ptr nonnull %154) #8
  br label %1365

998:                                              ; preds = %991
  %999 = landingpad { ptr, i32 }
          cleanup
  br label %1011

1000:                                             ; preds = %992
  %1001 = landingpad { ptr, i32 }
          cleanup
  br label %1010

1002:                                             ; preds = %993
  %1003 = landingpad { ptr, i32 }
          cleanup
  br label %1009

1004:                                             ; preds = %994
  %1005 = landingpad { ptr, i32 }
          cleanup
  br label %1008

1006:                                             ; preds = %995
  %1007 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %331) #8
  br label %1008

1008:                                             ; preds = %1006, %1004
  %.pn347 = phi { ptr, i32 } [ %1007, %1006 ], [ %1005, %1004 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %332) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %332) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %331) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %329) #8
  br label %1009

1009:                                             ; preds = %1008, %1002
  %.pn347.pn = phi { ptr, i32 } [ %.pn347, %1008 ], [ %1003, %1002 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %330) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %330) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %329) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %327) #8
  br label %1010

1010:                                             ; preds = %1009, %1000
  %.pn347.pn.pn = phi { ptr, i32 } [ %.pn347.pn, %1009 ], [ %1001, %1000 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %328) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %328) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %327) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %325) #8
  br label %1011

1011:                                             ; preds = %1010, %998
  %.pn347.pn.pn.pn = phi { ptr, i32 } [ %.pn347.pn.pn, %1010 ], [ %999, %998 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %326) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %326) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %325) #8
  br label %1185

1012:                                             ; preds = %987
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %333) #8
  %1013 = call { <2 x float>, float } @_ZNK3cgp19camera_first_person8positionEv(ptr noundef nonnull align 8 dereferenceable(36) %988)
  %.fca.0.extract56 = extractvalue { <2 x float>, float } %1013, 0
  %.fca.1.extract57 = extractvalue { <2 x float>, float } %1013, 1
  store <2 x float> %.fca.0.extract56, ptr %333, align 8
  %.sroa.259.0..sroa_idx = getelementptr inbounds i8, ptr %333, i64 8
  store float %.fca.1.extract57, ptr %.sroa.259.0..sroa_idx, align 8
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %334) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %335) #8
  store i32 1, ptr %335, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %336) #8
  store i32 0, ptr %336, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %337) #8
  store i32 0, ptr %337, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %334, ptr noundef nonnull align 4 dereferenceable(4) %335, ptr noundef nonnull align 4 dereferenceable(4) %336, ptr noundef nonnull align 4 dereferenceable(4) %337)
  %1014 = call noundef zeroext i1 @_ZN3cgp8is_equalIfLi3EEEbRKNS_14numarray_stackIT_XT0_EEES5_(ptr noundef nonnull align 4 dereferenceable(12) %333, ptr noundef nonnull align 4 dereferenceable(12) %334)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %337) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %336) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %335) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %334) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %333) #8
  br i1 %1014, label %1035, label %1015

1015:                                             ; preds = %1012
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %338) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %339) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %339) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %338, ptr noundef nonnull @.str.3, ptr noundef nonnull align 1 dereferenceable(1) %339)
          to label %1016 unwind label %1021

1016:                                             ; preds = %1015
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %340) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %341) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %341) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %340, ptr noundef nonnull @.str.1, ptr noundef nonnull align 1 dereferenceable(1) %341)
          to label %1017 unwind label %1023

1017:                                             ; preds = %1016
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %342) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %343) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %343) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %342, ptr noundef nonnull @.str.2, ptr noundef nonnull align 1 dereferenceable(1) %343)
          to label %1018 unwind label %1025

1018:                                             ; preds = %1017
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %344) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %345) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %345) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %344, ptr noundef nonnull @__func__._ZN8cgp_test22test_camera_controllerEv, ptr noundef nonnull align 1 dereferenceable(1) %345)
          to label %1019 unwind label %1027

1019:                                             ; preds = %1018
  invoke void @_ZN3cgp10call_errorERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_S7_S7_i(ptr noundef nonnull align 8 dereferenceable(32) %338, ptr noundef nonnull align 8 dereferenceable(32) %340, ptr noundef nonnull align 8 dereferenceable(32) %342, ptr noundef nonnull align 8 dereferenceable(32) %344, i32 noundef 60) #9
          to label %1020 unwind label %1029

1020:                                             ; preds = %1019
  unreachable

1021:                                             ; preds = %1015
  %1022 = landingpad { ptr, i32 }
          cleanup
  br label %1034

1023:                                             ; preds = %1016
  %1024 = landingpad { ptr, i32 }
          cleanup
  br label %1033

1025:                                             ; preds = %1017
  %1026 = landingpad { ptr, i32 }
          cleanup
  br label %1032

1027:                                             ; preds = %1018
  %1028 = landingpad { ptr, i32 }
          cleanup
  br label %1031

1029:                                             ; preds = %1019
  %1030 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %344) #8
  br label %1031

1031:                                             ; preds = %1029, %1027
  %.pn342 = phi { ptr, i32 } [ %1030, %1029 ], [ %1028, %1027 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %345) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %345) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %344) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %342) #8
  br label %1032

1032:                                             ; preds = %1031, %1025
  %.pn342.pn = phi { ptr, i32 } [ %.pn342, %1031 ], [ %1026, %1025 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %343) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %343) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %342) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %340) #8
  br label %1033

1033:                                             ; preds = %1032, %1023
  %.pn342.pn.pn = phi { ptr, i32 } [ %.pn342.pn, %1032 ], [ %1024, %1023 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %341) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %341) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %340) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %338) #8
  br label %1034

1034:                                             ; preds = %1033, %1021
  %.pn342.pn.pn.pn = phi { ptr, i32 } [ %.pn342.pn.pn, %1033 ], [ %1022, %1021 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %339) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %339) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %338) #8
  br label %1185

1035:                                             ; preds = %1012
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %346) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %347) #8
  store i32 -1, ptr %347, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %348) #8
  store i32 0, ptr %348, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %349) #8
  store i32 0, ptr %349, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %346, ptr noundef nonnull align 4 dereferenceable(4) %347, ptr noundef nonnull align 4 dereferenceable(4) %348, ptr noundef nonnull align 4 dereferenceable(4) %349)
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %350) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %351) #8
  store i32 0, ptr %351, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %352) #8
  store i32 0, ptr %352, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %353) #8
  store i32 0, ptr %353, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %350, ptr noundef nonnull align 4 dereferenceable(4) %351, ptr noundef nonnull align 4 dereferenceable(4) %352, ptr noundef nonnull align 4 dereferenceable(4) %353)
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %354) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %355) #8
  store i32 0, ptr %355, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %356) #8
  store i32 0, ptr %356, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %357) #8
  store i32 1, ptr %357, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %354, ptr noundef nonnull align 4 dereferenceable(4) %355, ptr noundef nonnull align 4 dereferenceable(4) %356, ptr noundef nonnull align 4 dereferenceable(4) %357)
  call void @_ZN3cgp30camera_controller_first_person7look_atERKNS_14numarray_stackIfLi3EEES4_S4_(ptr noundef nonnull align 8 dereferenceable(73) %307, ptr noundef nonnull align 4 dereferenceable(12) %346, ptr noundef nonnull align 4 dereferenceable(12) %350, ptr noundef nonnull align 4 dereferenceable(12) %354)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %357) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %356) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %355) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %354) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %353) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %352) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %351) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %350) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %349) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %348) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %347) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %346) #8
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %358) #8
  %1036 = call { <2 x float>, float } @_ZNK3cgp19camera_generic_base5frontEv(ptr noundef nonnull align 8 dereferenceable(8) %988)
  %.fca.0.extract52 = extractvalue { <2 x float>, float } %1036, 0
  %.fca.1.extract53 = extractvalue { <2 x float>, float } %1036, 1
  store <2 x float> %.fca.0.extract52, ptr %358, align 8
  %.sroa.255.0..sroa_idx = getelementptr inbounds i8, ptr %358, i64 8
  store float %.fca.1.extract53, ptr %.sroa.255.0..sroa_idx, align 8
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %359) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %360) #8
  store i32 1, ptr %360, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %361) #8
  store i32 0, ptr %361, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %362) #8
  store i32 0, ptr %362, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %359, ptr noundef nonnull align 4 dereferenceable(4) %360, ptr noundef nonnull align 4 dereferenceable(4) %361, ptr noundef nonnull align 4 dereferenceable(4) %362)
  %1037 = call noundef zeroext i1 @_ZN3cgp8is_equalIfLi3EEEbRKNS_14numarray_stackIT_XT0_EEES5_(ptr noundef nonnull align 4 dereferenceable(12) %358, ptr noundef nonnull align 4 dereferenceable(12) %359)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %362) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %361) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %360) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %359) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %358) #8
  br i1 %1037, label %1058, label %1038

1038:                                             ; preds = %1035
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %363) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %364) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %364) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %363, ptr noundef nonnull @.str.4, ptr noundef nonnull align 1 dereferenceable(1) %364)
          to label %1039 unwind label %1044

1039:                                             ; preds = %1038
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %365) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %366) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %366) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %365, ptr noundef nonnull @.str.1, ptr noundef nonnull align 1 dereferenceable(1) %366)
          to label %1040 unwind label %1046

1040:                                             ; preds = %1039
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %367) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %368) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %368) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %367, ptr noundef nonnull @.str.2, ptr noundef nonnull align 1 dereferenceable(1) %368)
          to label %1041 unwind label %1048

1041:                                             ; preds = %1040
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %369) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %370) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %370) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %369, ptr noundef nonnull @__func__._ZN8cgp_test22test_camera_controllerEv, ptr noundef nonnull align 1 dereferenceable(1) %370)
          to label %1042 unwind label %1050

1042:                                             ; preds = %1041
  invoke void @_ZN3cgp10call_errorERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_S7_S7_i(ptr noundef nonnull align 8 dereferenceable(32) %363, ptr noundef nonnull align 8 dereferenceable(32) %365, ptr noundef nonnull align 8 dereferenceable(32) %367, ptr noundef nonnull align 8 dereferenceable(32) %369, i32 noundef 63) #9
          to label %1043 unwind label %1052

1043:                                             ; preds = %1042
  unreachable

1044:                                             ; preds = %1038
  %1045 = landingpad { ptr, i32 }
          cleanup
  br label %1057

1046:                                             ; preds = %1039
  %1047 = landingpad { ptr, i32 }
          cleanup
  br label %1056

1048:                                             ; preds = %1040
  %1049 = landingpad { ptr, i32 }
          cleanup
  br label %1055

1050:                                             ; preds = %1041
  %1051 = landingpad { ptr, i32 }
          cleanup
  br label %1054

1052:                                             ; preds = %1042
  %1053 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %369) #8
  br label %1054

1054:                                             ; preds = %1052, %1050
  %.pn337 = phi { ptr, i32 } [ %1053, %1052 ], [ %1051, %1050 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %370) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %370) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %369) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %367) #8
  br label %1055

1055:                                             ; preds = %1054, %1048
  %.pn337.pn = phi { ptr, i32 } [ %.pn337, %1054 ], [ %1049, %1048 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %368) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %368) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %367) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %365) #8
  br label %1056

1056:                                             ; preds = %1055, %1046
  %.pn337.pn.pn = phi { ptr, i32 } [ %.pn337.pn, %1055 ], [ %1047, %1046 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %366) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %366) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %365) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %363) #8
  br label %1057

1057:                                             ; preds = %1056, %1044
  %.pn337.pn.pn.pn = phi { ptr, i32 } [ %.pn337.pn.pn, %1056 ], [ %1045, %1044 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %364) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %364) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %363) #8
  br label %1185

1058:                                             ; preds = %1035
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %371) #8
  %1059 = call { <2 x float>, float } @_ZNK3cgp19camera_first_person8positionEv(ptr noundef nonnull align 8 dereferenceable(36) %988)
  %.fca.0.extract48 = extractvalue { <2 x float>, float } %1059, 0
  %.fca.1.extract49 = extractvalue { <2 x float>, float } %1059, 1
  store <2 x float> %.fca.0.extract48, ptr %371, align 8
  %.sroa.251.0..sroa_idx = getelementptr inbounds i8, ptr %371, i64 8
  store float %.fca.1.extract49, ptr %.sroa.251.0..sroa_idx, align 8
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %372) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %373) #8
  store i32 -1, ptr %373, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %374) #8
  store i32 0, ptr %374, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %375) #8
  store i32 0, ptr %375, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %372, ptr noundef nonnull align 4 dereferenceable(4) %373, ptr noundef nonnull align 4 dereferenceable(4) %374, ptr noundef nonnull align 4 dereferenceable(4) %375)
  %1060 = call noundef zeroext i1 @_ZN3cgp8is_equalIfLi3EEEbRKNS_14numarray_stackIT_XT0_EEES5_(ptr noundef nonnull align 4 dereferenceable(12) %371, ptr noundef nonnull align 4 dereferenceable(12) %372)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %375) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %374) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %373) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %372) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %371) #8
  br i1 %1060, label %1081, label %1061

1061:                                             ; preds = %1058
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %376) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %377) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %377) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %376, ptr noundef nonnull @.str.5, ptr noundef nonnull align 1 dereferenceable(1) %377)
          to label %1062 unwind label %1067

1062:                                             ; preds = %1061
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %378) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %379) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %379) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %378, ptr noundef nonnull @.str.1, ptr noundef nonnull align 1 dereferenceable(1) %379)
          to label %1063 unwind label %1069

1063:                                             ; preds = %1062
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %380) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %381) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %381) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %380, ptr noundef nonnull @.str.2, ptr noundef nonnull align 1 dereferenceable(1) %381)
          to label %1064 unwind label %1071

1064:                                             ; preds = %1063
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %382) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %383) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %383) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %382, ptr noundef nonnull @__func__._ZN8cgp_test22test_camera_controllerEv, ptr noundef nonnull align 1 dereferenceable(1) %383)
          to label %1065 unwind label %1073

1065:                                             ; preds = %1064
  invoke void @_ZN3cgp10call_errorERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_S7_S7_i(ptr noundef nonnull align 8 dereferenceable(32) %376, ptr noundef nonnull align 8 dereferenceable(32) %378, ptr noundef nonnull align 8 dereferenceable(32) %380, ptr noundef nonnull align 8 dereferenceable(32) %382, i32 noundef 64) #9
          to label %1066 unwind label %1075

1066:                                             ; preds = %1065
  unreachable

1067:                                             ; preds = %1061
  %1068 = landingpad { ptr, i32 }
          cleanup
  br label %1080

1069:                                             ; preds = %1062
  %1070 = landingpad { ptr, i32 }
          cleanup
  br label %1079

1071:                                             ; preds = %1063
  %1072 = landingpad { ptr, i32 }
          cleanup
  br label %1078

1073:                                             ; preds = %1064
  %1074 = landingpad { ptr, i32 }
          cleanup
  br label %1077

1075:                                             ; preds = %1065
  %1076 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %382) #8
  br label %1077

1077:                                             ; preds = %1075, %1073
  %.pn332 = phi { ptr, i32 } [ %1076, %1075 ], [ %1074, %1073 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %383) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %383) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %382) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %380) #8
  br label %1078

1078:                                             ; preds = %1077, %1071
  %.pn332.pn = phi { ptr, i32 } [ %.pn332, %1077 ], [ %1072, %1071 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %381) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %381) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %380) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %378) #8
  br label %1079

1079:                                             ; preds = %1078, %1069
  %.pn332.pn.pn = phi { ptr, i32 } [ %.pn332.pn, %1078 ], [ %1070, %1069 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %379) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %379) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %378) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %376) #8
  br label %1080

1080:                                             ; preds = %1079, %1067
  %.pn332.pn.pn.pn = phi { ptr, i32 } [ %.pn332.pn.pn, %1079 ], [ %1068, %1067 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %377) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %377) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %376) #8
  br label %1185

1081:                                             ; preds = %1058
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %384) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %385) #8
  store i32 0, ptr %385, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %386) #8
  store i32 1, ptr %386, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %387) #8
  store i32 0, ptr %387, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %384, ptr noundef nonnull align 4 dereferenceable(4) %385, ptr noundef nonnull align 4 dereferenceable(4) %386, ptr noundef nonnull align 4 dereferenceable(4) %387)
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %388) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %389) #8
  store i32 0, ptr %389, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %390) #8
  store i32 0, ptr %390, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %391) #8
  store i32 0, ptr %391, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %388, ptr noundef nonnull align 4 dereferenceable(4) %389, ptr noundef nonnull align 4 dereferenceable(4) %390, ptr noundef nonnull align 4 dereferenceable(4) %391)
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %392) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %393) #8
  store i32 0, ptr %393, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %394) #8
  store i32 0, ptr %394, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %395) #8
  store i32 1, ptr %395, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %392, ptr noundef nonnull align 4 dereferenceable(4) %393, ptr noundef nonnull align 4 dereferenceable(4) %394, ptr noundef nonnull align 4 dereferenceable(4) %395)
  call void @_ZN3cgp30camera_controller_first_person7look_atERKNS_14numarray_stackIfLi3EEES4_S4_(ptr noundef nonnull align 8 dereferenceable(73) %307, ptr noundef nonnull align 4 dereferenceable(12) %384, ptr noundef nonnull align 4 dereferenceable(12) %388, ptr noundef nonnull align 4 dereferenceable(12) %392)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %395) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %394) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %393) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %392) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %391) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %390) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %389) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %388) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %387) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %386) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %385) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %384) #8
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %396) #8
  %1082 = call { <2 x float>, float } @_ZNK3cgp19camera_generic_base5frontEv(ptr noundef nonnull align 8 dereferenceable(8) %988)
  %.fca.0.extract44 = extractvalue { <2 x float>, float } %1082, 0
  %.fca.1.extract45 = extractvalue { <2 x float>, float } %1082, 1
  store <2 x float> %.fca.0.extract44, ptr %396, align 8
  %.sroa.247.0..sroa_idx = getelementptr inbounds i8, ptr %396, i64 8
  store float %.fca.1.extract45, ptr %.sroa.247.0..sroa_idx, align 8
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %397) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %398) #8
  store i32 0, ptr %398, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %399) #8
  store i32 -1, ptr %399, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %400) #8
  store i32 0, ptr %400, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %397, ptr noundef nonnull align 4 dereferenceable(4) %398, ptr noundef nonnull align 4 dereferenceable(4) %399, ptr noundef nonnull align 4 dereferenceable(4) %400)
  %1083 = call noundef zeroext i1 @_ZN3cgp8is_equalIfLi3EEEbRKNS_14numarray_stackIT_XT0_EEES5_(ptr noundef nonnull align 4 dereferenceable(12) %396, ptr noundef nonnull align 4 dereferenceable(12) %397)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %400) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %399) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %398) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %397) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %396) #8
  br i1 %1083, label %1104, label %1084

1084:                                             ; preds = %1081
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %401) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %402) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %402) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %401, ptr noundef nonnull @.str.6, ptr noundef nonnull align 1 dereferenceable(1) %402)
          to label %1085 unwind label %1090

1085:                                             ; preds = %1084
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %403) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %404) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %404) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %403, ptr noundef nonnull @.str.1, ptr noundef nonnull align 1 dereferenceable(1) %404)
          to label %1086 unwind label %1092

1086:                                             ; preds = %1085
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %405) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %406) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %406) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %405, ptr noundef nonnull @.str.2, ptr noundef nonnull align 1 dereferenceable(1) %406)
          to label %1087 unwind label %1094

1087:                                             ; preds = %1086
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %407) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %408) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %408) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %407, ptr noundef nonnull @__func__._ZN8cgp_test22test_camera_controllerEv, ptr noundef nonnull align 1 dereferenceable(1) %408)
          to label %1088 unwind label %1096

1088:                                             ; preds = %1087
  invoke void @_ZN3cgp10call_errorERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_S7_S7_i(ptr noundef nonnull align 8 dereferenceable(32) %401, ptr noundef nonnull align 8 dereferenceable(32) %403, ptr noundef nonnull align 8 dereferenceable(32) %405, ptr noundef nonnull align 8 dereferenceable(32) %407, i32 noundef 67) #9
          to label %1089 unwind label %1098

1089:                                             ; preds = %1088
  unreachable

1090:                                             ; preds = %1084
  %1091 = landingpad { ptr, i32 }
          cleanup
  br label %1103

1092:                                             ; preds = %1085
  %1093 = landingpad { ptr, i32 }
          cleanup
  br label %1102

1094:                                             ; preds = %1086
  %1095 = landingpad { ptr, i32 }
          cleanup
  br label %1101

1096:                                             ; preds = %1087
  %1097 = landingpad { ptr, i32 }
          cleanup
  br label %1100

1098:                                             ; preds = %1088
  %1099 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %407) #8
  br label %1100

1100:                                             ; preds = %1098, %1096
  %.pn327 = phi { ptr, i32 } [ %1099, %1098 ], [ %1097, %1096 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %408) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %408) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %407) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %405) #8
  br label %1101

1101:                                             ; preds = %1100, %1094
  %.pn327.pn = phi { ptr, i32 } [ %.pn327, %1100 ], [ %1095, %1094 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %406) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %406) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %405) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %403) #8
  br label %1102

1102:                                             ; preds = %1101, %1092
  %.pn327.pn.pn = phi { ptr, i32 } [ %.pn327.pn, %1101 ], [ %1093, %1092 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %404) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %404) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %403) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %401) #8
  br label %1103

1103:                                             ; preds = %1102, %1090
  %.pn327.pn.pn.pn = phi { ptr, i32 } [ %.pn327.pn.pn, %1102 ], [ %1091, %1090 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %402) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %402) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %401) #8
  br label %1185

1104:                                             ; preds = %1081
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %409) #8
  %1105 = call { <2 x float>, float } @_ZNK3cgp19camera_first_person8positionEv(ptr noundef nonnull align 8 dereferenceable(36) %988)
  %.fca.0.extract40 = extractvalue { <2 x float>, float } %1105, 0
  %.fca.1.extract41 = extractvalue { <2 x float>, float } %1105, 1
  store <2 x float> %.fca.0.extract40, ptr %409, align 8
  %.sroa.243.0..sroa_idx = getelementptr inbounds i8, ptr %409, i64 8
  store float %.fca.1.extract41, ptr %.sroa.243.0..sroa_idx, align 8
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %410) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %411) #8
  store i32 0, ptr %411, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %412) #8
  store i32 1, ptr %412, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %413) #8
  store i32 0, ptr %413, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %410, ptr noundef nonnull align 4 dereferenceable(4) %411, ptr noundef nonnull align 4 dereferenceable(4) %412, ptr noundef nonnull align 4 dereferenceable(4) %413)
  %1106 = call noundef zeroext i1 @_ZN3cgp8is_equalIfLi3EEEbRKNS_14numarray_stackIT_XT0_EEES5_(ptr noundef nonnull align 4 dereferenceable(12) %409, ptr noundef nonnull align 4 dereferenceable(12) %410)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %413) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %412) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %411) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %410) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %409) #8
  br i1 %1106, label %1127, label %1107

1107:                                             ; preds = %1104
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %414) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %415) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %415) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %414, ptr noundef nonnull @.str.7, ptr noundef nonnull align 1 dereferenceable(1) %415)
          to label %1108 unwind label %1113

1108:                                             ; preds = %1107
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %416) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %417) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %417) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %416, ptr noundef nonnull @.str.1, ptr noundef nonnull align 1 dereferenceable(1) %417)
          to label %1109 unwind label %1115

1109:                                             ; preds = %1108
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %418) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %419) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %419) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %418, ptr noundef nonnull @.str.2, ptr noundef nonnull align 1 dereferenceable(1) %419)
          to label %1110 unwind label %1117

1110:                                             ; preds = %1109
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %420) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %421) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %421) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %420, ptr noundef nonnull @__func__._ZN8cgp_test22test_camera_controllerEv, ptr noundef nonnull align 1 dereferenceable(1) %421)
          to label %1111 unwind label %1119

1111:                                             ; preds = %1110
  invoke void @_ZN3cgp10call_errorERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_S7_S7_i(ptr noundef nonnull align 8 dereferenceable(32) %414, ptr noundef nonnull align 8 dereferenceable(32) %416, ptr noundef nonnull align 8 dereferenceable(32) %418, ptr noundef nonnull align 8 dereferenceable(32) %420, i32 noundef 68) #9
          to label %1112 unwind label %1121

1112:                                             ; preds = %1111
  unreachable

1113:                                             ; preds = %1107
  %1114 = landingpad { ptr, i32 }
          cleanup
  br label %1126

1115:                                             ; preds = %1108
  %1116 = landingpad { ptr, i32 }
          cleanup
  br label %1125

1117:                                             ; preds = %1109
  %1118 = landingpad { ptr, i32 }
          cleanup
  br label %1124

1119:                                             ; preds = %1110
  %1120 = landingpad { ptr, i32 }
          cleanup
  br label %1123

1121:                                             ; preds = %1111
  %1122 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %420) #8
  br label %1123

1123:                                             ; preds = %1121, %1119
  %.pn322 = phi { ptr, i32 } [ %1122, %1121 ], [ %1120, %1119 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %421) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %421) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %420) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %418) #8
  br label %1124

1124:                                             ; preds = %1123, %1117
  %.pn322.pn = phi { ptr, i32 } [ %.pn322, %1123 ], [ %1118, %1117 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %419) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %419) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %418) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %416) #8
  br label %1125

1125:                                             ; preds = %1124, %1115
  %.pn322.pn.pn = phi { ptr, i32 } [ %.pn322.pn, %1124 ], [ %1116, %1115 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %417) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %417) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %416) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %414) #8
  br label %1126

1126:                                             ; preds = %1125, %1113
  %.pn322.pn.pn.pn = phi { ptr, i32 } [ %.pn322.pn.pn, %1125 ], [ %1114, %1113 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %415) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %415) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %414) #8
  br label %1185

1127:                                             ; preds = %1104
  %1128 = call noundef float @_ZSt4sqrtf(float noundef 2.000000e+00)
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %422) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %423) #8
  store i32 1, ptr %423, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %424) #8
  store i32 1, ptr %424, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %425) #8
  store i32 0, ptr %425, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %422, ptr noundef nonnull align 4 dereferenceable(4) %423, ptr noundef nonnull align 4 dereferenceable(4) %424, ptr noundef nonnull align 4 dereferenceable(4) %425)
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %426) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %427) #8
  store i32 0, ptr %427, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %428) #8
  store i32 0, ptr %428, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %429) #8
  store i32 0, ptr %429, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %426, ptr noundef nonnull align 4 dereferenceable(4) %427, ptr noundef nonnull align 4 dereferenceable(4) %428, ptr noundef nonnull align 4 dereferenceable(4) %429)
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %430) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %431) #8
  store i32 0, ptr %431, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %432) #8
  store i32 0, ptr %432, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %433) #8
  store i32 1, ptr %433, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %430, ptr noundef nonnull align 4 dereferenceable(4) %431, ptr noundef nonnull align 4 dereferenceable(4) %432, ptr noundef nonnull align 4 dereferenceable(4) %433)
  call void @_ZN3cgp30camera_controller_first_person7look_atERKNS_14numarray_stackIfLi3EEES4_S4_(ptr noundef nonnull align 8 dereferenceable(73) %307, ptr noundef nonnull align 4 dereferenceable(12) %422, ptr noundef nonnull align 4 dereferenceable(12) %426, ptr noundef nonnull align 4 dereferenceable(12) %430)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %433) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %432) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %431) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %430) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %429) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %428) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %427) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %426) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %425) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %424) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %423) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %422) #8
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %434) #8
  %1129 = call { <2 x float>, float } @_ZNK3cgp19camera_generic_base5frontEv(ptr noundef nonnull align 8 dereferenceable(8) %988)
  %.fca.0.extract34 = extractvalue { <2 x float>, float } %1129, 0
  %.fca.1.extract35 = extractvalue { <2 x float>, float } %1129, 1
  store <2 x float> %.fca.0.extract34, ptr %434, align 8
  %.sroa.237.0..sroa_idx = getelementptr inbounds i8, ptr %434, i64 8
  store float %.fca.1.extract35, ptr %.sroa.237.0..sroa_idx, align 8
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %435) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %436) #8
  %1130 = fdiv float -1.000000e+00, %1128
  store float %1130, ptr %436, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %437) #8
  store float %1130, ptr %437, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %438) #8
  store i32 0, ptr %438, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IffiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %435, ptr noundef nonnull align 4 dereferenceable(4) %436, ptr noundef nonnull align 4 dereferenceable(4) %437, ptr noundef nonnull align 4 dereferenceable(4) %438)
  %1131 = call noundef zeroext i1 @_ZN3cgp8is_equalIfLi3EEEbRKNS_14numarray_stackIT_XT0_EEES5_(ptr noundef nonnull align 4 dereferenceable(12) %434, ptr noundef nonnull align 4 dereferenceable(12) %435)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %438) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %437) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %436) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %435) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %434) #8
  br i1 %1131, label %1152, label %1132

1132:                                             ; preds = %1127
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %439) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %440) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %440) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %439, ptr noundef nonnull @.str.11, ptr noundef nonnull align 1 dereferenceable(1) %440)
          to label %1133 unwind label %1138

1133:                                             ; preds = %1132
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %441) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %442) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %442) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %441, ptr noundef nonnull @.str.1, ptr noundef nonnull align 1 dereferenceable(1) %442)
          to label %1134 unwind label %1140

1134:                                             ; preds = %1133
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %443) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %444) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %444) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %443, ptr noundef nonnull @.str.2, ptr noundef nonnull align 1 dereferenceable(1) %444)
          to label %1135 unwind label %1142

1135:                                             ; preds = %1134
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %445) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %446) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %446) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %445, ptr noundef nonnull @__func__._ZN8cgp_test22test_camera_controllerEv, ptr noundef nonnull align 1 dereferenceable(1) %446)
          to label %1136 unwind label %1144

1136:                                             ; preds = %1135
  invoke void @_ZN3cgp10call_errorERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_S7_S7_i(ptr noundef nonnull align 8 dereferenceable(32) %439, ptr noundef nonnull align 8 dereferenceable(32) %441, ptr noundef nonnull align 8 dereferenceable(32) %443, ptr noundef nonnull align 8 dereferenceable(32) %445, i32 noundef 72) #9
          to label %1137 unwind label %1146

1137:                                             ; preds = %1136
  unreachable

1138:                                             ; preds = %1132
  %1139 = landingpad { ptr, i32 }
          cleanup
  br label %1151

1140:                                             ; preds = %1133
  %1141 = landingpad { ptr, i32 }
          cleanup
  br label %1150

1142:                                             ; preds = %1134
  %1143 = landingpad { ptr, i32 }
          cleanup
  br label %1149

1144:                                             ; preds = %1135
  %1145 = landingpad { ptr, i32 }
          cleanup
  br label %1148

1146:                                             ; preds = %1136
  %1147 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %445) #8
  br label %1148

1148:                                             ; preds = %1146, %1144
  %.pn316 = phi { ptr, i32 } [ %1147, %1146 ], [ %1145, %1144 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %446) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %446) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %445) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %443) #8
  br label %1149

1149:                                             ; preds = %1148, %1142
  %.pn316.pn = phi { ptr, i32 } [ %.pn316, %1148 ], [ %1143, %1142 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %444) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %444) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %443) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %441) #8
  br label %1150

1150:                                             ; preds = %1149, %1140
  %.pn316.pn.pn = phi { ptr, i32 } [ %.pn316.pn, %1149 ], [ %1141, %1140 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %442) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %442) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %441) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %439) #8
  br label %1151

1151:                                             ; preds = %1150, %1138
  %.pn316.pn.pn.pn = phi { ptr, i32 } [ %.pn316.pn.pn, %1150 ], [ %1139, %1138 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %440) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %440) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %439) #8
  br label %1185

1152:                                             ; preds = %1127
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %447) #8
  %1153 = call { <2 x float>, float } @_ZNK3cgp19camera_first_person8positionEv(ptr noundef nonnull align 8 dereferenceable(36) %988)
  %.fca.0.extract30 = extractvalue { <2 x float>, float } %1153, 0
  %.fca.1.extract31 = extractvalue { <2 x float>, float } %1153, 1
  store <2 x float> %.fca.0.extract30, ptr %447, align 8
  %.sroa.233.0..sroa_idx = getelementptr inbounds i8, ptr %447, i64 8
  store float %.fca.1.extract31, ptr %.sroa.233.0..sroa_idx, align 8
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %448) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %449) #8
  store i32 1, ptr %449, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %450) #8
  store i32 1, ptr %450, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %451) #8
  store i32 0, ptr %451, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %448, ptr noundef nonnull align 4 dereferenceable(4) %449, ptr noundef nonnull align 4 dereferenceable(4) %450, ptr noundef nonnull align 4 dereferenceable(4) %451)
  %1154 = call noundef zeroext i1 @_ZN3cgp8is_equalIfLi3EEEbRKNS_14numarray_stackIT_XT0_EEES5_(ptr noundef nonnull align 4 dereferenceable(12) %447, ptr noundef nonnull align 4 dereferenceable(12) %448)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %451) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %450) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %449) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %448) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %447) #8
  br i1 %1154, label %1175, label %1155

1155:                                             ; preds = %1152
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %452) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %453) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %453) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %452, ptr noundef nonnull @.str.9, ptr noundef nonnull align 1 dereferenceable(1) %453)
          to label %1156 unwind label %1161

1156:                                             ; preds = %1155
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %454) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %455) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %455) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %454, ptr noundef nonnull @.str.1, ptr noundef nonnull align 1 dereferenceable(1) %455)
          to label %1157 unwind label %1163

1157:                                             ; preds = %1156
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %456) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %457) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %457) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %456, ptr noundef nonnull @.str.2, ptr noundef nonnull align 1 dereferenceable(1) %457)
          to label %1158 unwind label %1165

1158:                                             ; preds = %1157
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %458) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %459) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %459) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %458, ptr noundef nonnull @__func__._ZN8cgp_test22test_camera_controllerEv, ptr noundef nonnull align 1 dereferenceable(1) %459)
          to label %1159 unwind label %1167

1159:                                             ; preds = %1158
  invoke void @_ZN3cgp10call_errorERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_S7_S7_i(ptr noundef nonnull align 8 dereferenceable(32) %452, ptr noundef nonnull align 8 dereferenceable(32) %454, ptr noundef nonnull align 8 dereferenceable(32) %456, ptr noundef nonnull align 8 dereferenceable(32) %458, i32 noundef 73) #9
          to label %1160 unwind label %1169

1160:                                             ; preds = %1159
  unreachable

1161:                                             ; preds = %1155
  %1162 = landingpad { ptr, i32 }
          cleanup
  br label %1174

1163:                                             ; preds = %1156
  %1164 = landingpad { ptr, i32 }
          cleanup
  br label %1173

1165:                                             ; preds = %1157
  %1166 = landingpad { ptr, i32 }
          cleanup
  br label %1172

1167:                                             ; preds = %1158
  %1168 = landingpad { ptr, i32 }
          cleanup
  br label %1171

1169:                                             ; preds = %1159
  %1170 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %458) #8
  br label %1171

1171:                                             ; preds = %1169, %1167
  %.pn311 = phi { ptr, i32 } [ %1170, %1169 ], [ %1168, %1167 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %459) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %459) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %458) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %456) #8
  br label %1172

1172:                                             ; preds = %1171, %1165
  %.pn311.pn = phi { ptr, i32 } [ %.pn311, %1171 ], [ %1166, %1165 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %457) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %457) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %456) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %454) #8
  br label %1173

1173:                                             ; preds = %1172, %1163
  %.pn311.pn.pn = phi { ptr, i32 } [ %.pn311.pn, %1172 ], [ %1164, %1163 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %455) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %455) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %454) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %452) #8
  br label %1174

1174:                                             ; preds = %1173, %1161
  %.pn311.pn.pn.pn = phi { ptr, i32 } [ %.pn311.pn.pn, %1173 ], [ %1162, %1161 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %453) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %453) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %452) #8
  br label %1185

1175:                                             ; preds = %1152
  call void @llvm.lifetime.end.p0(i64 80, ptr nonnull %307) #8
  call void @llvm.lifetime.start.p0(i64 80, ptr nonnull %460) #8
  call void @_ZN3cgp36camera_controller_first_person_eulerC2Ev(ptr noundef nonnull align 8 dereferenceable(73) %460)
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %461) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %462) #8
  store i32 1, ptr %462, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %463) #8
  store i32 0, ptr %463, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %464) #8
  store i32 0, ptr %464, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %461, ptr noundef nonnull align 4 dereferenceable(4) %462, ptr noundef nonnull align 4 dereferenceable(4) %463, ptr noundef nonnull align 4 dereferenceable(4) %464)
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %465) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %466) #8
  store i32 0, ptr %466, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %467) #8
  store i32 0, ptr %467, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %468) #8
  store i32 0, ptr %468, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %465, ptr noundef nonnull align 4 dereferenceable(4) %466, ptr noundef nonnull align 4 dereferenceable(4) %467, ptr noundef nonnull align 4 dereferenceable(4) %468)
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %469) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %470) #8
  store i32 0, ptr %470, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %471) #8
  store i32 0, ptr %471, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %472) #8
  store i32 1, ptr %472, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %469, ptr noundef nonnull align 4 dereferenceable(4) %470, ptr noundef nonnull align 4 dereferenceable(4) %471, ptr noundef nonnull align 4 dereferenceable(4) %472)
  call void @_ZN3cgp36camera_controller_first_person_euler7look_atERKNS_14numarray_stackIfLi3EEES4_S4_(ptr noundef nonnull align 8 dereferenceable(73) %460, ptr noundef nonnull align 4 dereferenceable(12) %461, ptr noundef nonnull align 4 dereferenceable(12) %465, ptr noundef nonnull align 4 dereferenceable(12) %469)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %472) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %471) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %470) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %469) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %468) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %467) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %466) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %465) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %464) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %463) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %462) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %461) #8
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %473) #8
  %1176 = getelementptr inbounds i8, ptr %460, i64 24
  %1177 = call { <2 x float>, float } @_ZNK3cgp19camera_generic_base5frontEv(ptr noundef nonnull align 8 dereferenceable(8) %1176)
  %.fca.0.extract26 = extractvalue { <2 x float>, float } %1177, 0
  %.fca.1.extract27 = extractvalue { <2 x float>, float } %1177, 1
  store <2 x float> %.fca.0.extract26, ptr %473, align 8
  %.sroa.229.0..sroa_idx = getelementptr inbounds i8, ptr %473, i64 8
  store float %.fca.1.extract27, ptr %.sroa.229.0..sroa_idx, align 8
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %474) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %475) #8
  store i32 -1, ptr %475, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %476) #8
  store i32 0, ptr %476, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %477) #8
  store i32 0, ptr %477, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %474, ptr noundef nonnull align 4 dereferenceable(4) %475, ptr noundef nonnull align 4 dereferenceable(4) %476, ptr noundef nonnull align 4 dereferenceable(4) %477)
  %1178 = call noundef zeroext i1 @_ZN3cgp8is_equalIfLi3EEEbRKNS_14numarray_stackIT_XT0_EEES5_(ptr noundef nonnull align 4 dereferenceable(12) %473, ptr noundef nonnull align 4 dereferenceable(12) %474)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %477) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %476) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %475) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %474) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %473) #8
  br i1 %1178, label %1200, label %1179

1179:                                             ; preds = %1175
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %478) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %479) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %479) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %478, ptr noundef nonnull @.str.10, ptr noundef nonnull align 1 dereferenceable(1) %479)
          to label %1180 unwind label %1186

1180:                                             ; preds = %1179
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %480) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %481) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %481) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %480, ptr noundef nonnull @.str.1, ptr noundef nonnull align 1 dereferenceable(1) %481)
          to label %1181 unwind label %1188

1181:                                             ; preds = %1180
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %482) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %483) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %483) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %482, ptr noundef nonnull @.str.2, ptr noundef nonnull align 1 dereferenceable(1) %483)
          to label %1182 unwind label %1190

1182:                                             ; preds = %1181
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %484) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %485) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %485) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %484, ptr noundef nonnull @__func__._ZN8cgp_test22test_camera_controllerEv, ptr noundef nonnull align 1 dereferenceable(1) %485)
          to label %1183 unwind label %1192

1183:                                             ; preds = %1182
  invoke void @_ZN3cgp10call_errorERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_S7_S7_i(ptr noundef nonnull align 8 dereferenceable(32) %478, ptr noundef nonnull align 8 dereferenceable(32) %480, ptr noundef nonnull align 8 dereferenceable(32) %482, ptr noundef nonnull align 8 dereferenceable(32) %484, i32 noundef 79) #9
          to label %1184 unwind label %1194

1184:                                             ; preds = %1183
  unreachable

1185:                                             ; preds = %1151, %1174, %1126, %1103, %1080, %1057, %1034, %1011
  %.pn347.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn347.pn.pn.pn, %1011 ], [ %.pn342.pn.pn.pn, %1034 ], [ %.pn337.pn.pn.pn, %1057 ], [ %.pn332.pn.pn.pn, %1080 ], [ %.pn327.pn.pn.pn, %1103 ], [ %.pn322.pn.pn.pn, %1126 ], [ %.pn316.pn.pn.pn, %1151 ], [ %.pn311.pn.pn.pn, %1174 ]
  call void @llvm.lifetime.end.p0(i64 80, ptr nonnull %307) #8
  br label %1365

1186:                                             ; preds = %1179
  %1187 = landingpad { ptr, i32 }
          cleanup
  br label %1199

1188:                                             ; preds = %1180
  %1189 = landingpad { ptr, i32 }
          cleanup
  br label %1198

1190:                                             ; preds = %1181
  %1191 = landingpad { ptr, i32 }
          cleanup
  br label %1197

1192:                                             ; preds = %1182
  %1193 = landingpad { ptr, i32 }
          cleanup
  br label %1196

1194:                                             ; preds = %1183
  %1195 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %484) #8
  br label %1196

1196:                                             ; preds = %1194, %1192
  %.pn305 = phi { ptr, i32 } [ %1195, %1194 ], [ %1193, %1192 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %485) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %485) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %484) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %482) #8
  br label %1197

1197:                                             ; preds = %1196, %1190
  %.pn305.pn = phi { ptr, i32 } [ %.pn305, %1196 ], [ %1191, %1190 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %483) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %483) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %482) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %480) #8
  br label %1198

1198:                                             ; preds = %1197, %1188
  %.pn305.pn.pn = phi { ptr, i32 } [ %.pn305.pn, %1197 ], [ %1189, %1188 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %481) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %481) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %480) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %478) #8
  br label %1199

1199:                                             ; preds = %1198, %1186
  %.pn305.pn.pn.pn = phi { ptr, i32 } [ %.pn305.pn.pn, %1198 ], [ %1187, %1186 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %479) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %479) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %478) #8
  br label %1364

1200:                                             ; preds = %1175
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %486) #8
  %1201 = call { <2 x float>, float } @_ZNK3cgp25camera_first_person_euler8positionEv(ptr noundef nonnull align 8 dereferenceable(44) %1176)
  %.fca.0.extract22 = extractvalue { <2 x float>, float } %1201, 0
  %.fca.1.extract23 = extractvalue { <2 x float>, float } %1201, 1
  store <2 x float> %.fca.0.extract22, ptr %486, align 8
  %.sroa.225.0..sroa_idx = getelementptr inbounds i8, ptr %486, i64 8
  store float %.fca.1.extract23, ptr %.sroa.225.0..sroa_idx, align 8
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %487) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %488) #8
  store i32 1, ptr %488, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %489) #8
  store i32 0, ptr %489, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %490) #8
  store i32 0, ptr %490, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %487, ptr noundef nonnull align 4 dereferenceable(4) %488, ptr noundef nonnull align 4 dereferenceable(4) %489, ptr noundef nonnull align 4 dereferenceable(4) %490)
  %1202 = call noundef zeroext i1 @_ZN3cgp8is_equalIfLi3EEEbRKNS_14numarray_stackIT_XT0_EEES5_(ptr noundef nonnull align 4 dereferenceable(12) %486, ptr noundef nonnull align 4 dereferenceable(12) %487)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %490) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %489) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %488) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %487) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %486) #8
  br i1 %1202, label %1223, label %1203

1203:                                             ; preds = %1200
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %491) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %492) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %492) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %491, ptr noundef nonnull @.str.3, ptr noundef nonnull align 1 dereferenceable(1) %492)
          to label %1204 unwind label %1209

1204:                                             ; preds = %1203
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %493) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %494) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %494) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %493, ptr noundef nonnull @.str.1, ptr noundef nonnull align 1 dereferenceable(1) %494)
          to label %1205 unwind label %1211

1205:                                             ; preds = %1204
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %495) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %496) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %496) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %495, ptr noundef nonnull @.str.2, ptr noundef nonnull align 1 dereferenceable(1) %496)
          to label %1206 unwind label %1213

1206:                                             ; preds = %1205
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %497) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %498) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %498) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %497, ptr noundef nonnull @__func__._ZN8cgp_test22test_camera_controllerEv, ptr noundef nonnull align 1 dereferenceable(1) %498)
          to label %1207 unwind label %1215

1207:                                             ; preds = %1206
  invoke void @_ZN3cgp10call_errorERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_S7_S7_i(ptr noundef nonnull align 8 dereferenceable(32) %491, ptr noundef nonnull align 8 dereferenceable(32) %493, ptr noundef nonnull align 8 dereferenceable(32) %495, ptr noundef nonnull align 8 dereferenceable(32) %497, i32 noundef 80) #9
          to label %1208 unwind label %1217

1208:                                             ; preds = %1207
  unreachable

1209:                                             ; preds = %1203
  %1210 = landingpad { ptr, i32 }
          cleanup
  br label %1222

1211:                                             ; preds = %1204
  %1212 = landingpad { ptr, i32 }
          cleanup
  br label %1221

1213:                                             ; preds = %1205
  %1214 = landingpad { ptr, i32 }
          cleanup
  br label %1220

1215:                                             ; preds = %1206
  %1216 = landingpad { ptr, i32 }
          cleanup
  br label %1219

1217:                                             ; preds = %1207
  %1218 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %497) #8
  br label %1219

1219:                                             ; preds = %1217, %1215
  %.pn300 = phi { ptr, i32 } [ %1218, %1217 ], [ %1216, %1215 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %498) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %498) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %497) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %495) #8
  br label %1220

1220:                                             ; preds = %1219, %1213
  %.pn300.pn = phi { ptr, i32 } [ %.pn300, %1219 ], [ %1214, %1213 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %496) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %496) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %495) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %493) #8
  br label %1221

1221:                                             ; preds = %1220, %1211
  %.pn300.pn.pn = phi { ptr, i32 } [ %.pn300.pn, %1220 ], [ %1212, %1211 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %494) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %494) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %493) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %491) #8
  br label %1222

1222:                                             ; preds = %1221, %1209
  %.pn300.pn.pn.pn = phi { ptr, i32 } [ %.pn300.pn.pn, %1221 ], [ %1210, %1209 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %492) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %492) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %491) #8
  br label %1364

1223:                                             ; preds = %1200
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %499) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %500) #8
  store i32 -1, ptr %500, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %501) #8
  store i32 0, ptr %501, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %502) #8
  store i32 0, ptr %502, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %499, ptr noundef nonnull align 4 dereferenceable(4) %500, ptr noundef nonnull align 4 dereferenceable(4) %501, ptr noundef nonnull align 4 dereferenceable(4) %502)
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %503) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %504) #8
  store i32 0, ptr %504, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %505) #8
  store i32 0, ptr %505, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %506) #8
  store i32 0, ptr %506, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %503, ptr noundef nonnull align 4 dereferenceable(4) %504, ptr noundef nonnull align 4 dereferenceable(4) %505, ptr noundef nonnull align 4 dereferenceable(4) %506)
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %507) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %508) #8
  store i32 0, ptr %508, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %509) #8
  store i32 0, ptr %509, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %510) #8
  store i32 1, ptr %510, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %507, ptr noundef nonnull align 4 dereferenceable(4) %508, ptr noundef nonnull align 4 dereferenceable(4) %509, ptr noundef nonnull align 4 dereferenceable(4) %510)
  call void @_ZN3cgp36camera_controller_first_person_euler7look_atERKNS_14numarray_stackIfLi3EEES4_S4_(ptr noundef nonnull align 8 dereferenceable(73) %460, ptr noundef nonnull align 4 dereferenceable(12) %499, ptr noundef nonnull align 4 dereferenceable(12) %503, ptr noundef nonnull align 4 dereferenceable(12) %507)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %510) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %509) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %508) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %507) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %506) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %505) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %504) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %503) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %502) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %501) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %500) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %499) #8
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %511) #8
  %1224 = call { <2 x float>, float } @_ZNK3cgp19camera_generic_base5frontEv(ptr noundef nonnull align 8 dereferenceable(8) %1176)
  %.fca.0.extract18 = extractvalue { <2 x float>, float } %1224, 0
  %.fca.1.extract19 = extractvalue { <2 x float>, float } %1224, 1
  store <2 x float> %.fca.0.extract18, ptr %511, align 8
  %.sroa.221.0..sroa_idx = getelementptr inbounds i8, ptr %511, i64 8
  store float %.fca.1.extract19, ptr %.sroa.221.0..sroa_idx, align 8
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %512) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %513) #8
  store i32 1, ptr %513, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %514) #8
  store i32 0, ptr %514, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %515) #8
  store i32 0, ptr %515, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %512, ptr noundef nonnull align 4 dereferenceable(4) %513, ptr noundef nonnull align 4 dereferenceable(4) %514, ptr noundef nonnull align 4 dereferenceable(4) %515)
  %1225 = call noundef zeroext i1 @_ZN3cgp8is_equalIfLi3EEEbRKNS_14numarray_stackIT_XT0_EEES5_(ptr noundef nonnull align 4 dereferenceable(12) %511, ptr noundef nonnull align 4 dereferenceable(12) %512)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %515) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %514) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %513) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %512) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %511) #8
  br i1 %1225, label %1246, label %1226

1226:                                             ; preds = %1223
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %516) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %517) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %517) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %516, ptr noundef nonnull @.str.4, ptr noundef nonnull align 1 dereferenceable(1) %517)
          to label %1227 unwind label %1232

1227:                                             ; preds = %1226
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %518) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %519) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %519) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %518, ptr noundef nonnull @.str.1, ptr noundef nonnull align 1 dereferenceable(1) %519)
          to label %1228 unwind label %1234

1228:                                             ; preds = %1227
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %520) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %521) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %521) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %520, ptr noundef nonnull @.str.2, ptr noundef nonnull align 1 dereferenceable(1) %521)
          to label %1229 unwind label %1236

1229:                                             ; preds = %1228
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %522) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %523) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %523) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %522, ptr noundef nonnull @__func__._ZN8cgp_test22test_camera_controllerEv, ptr noundef nonnull align 1 dereferenceable(1) %523)
          to label %1230 unwind label %1238

1230:                                             ; preds = %1229
  invoke void @_ZN3cgp10call_errorERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_S7_S7_i(ptr noundef nonnull align 8 dereferenceable(32) %516, ptr noundef nonnull align 8 dereferenceable(32) %518, ptr noundef nonnull align 8 dereferenceable(32) %520, ptr noundef nonnull align 8 dereferenceable(32) %522, i32 noundef 83) #9
          to label %1231 unwind label %1240

1231:                                             ; preds = %1230
  unreachable

1232:                                             ; preds = %1226
  %1233 = landingpad { ptr, i32 }
          cleanup
  br label %1245

1234:                                             ; preds = %1227
  %1235 = landingpad { ptr, i32 }
          cleanup
  br label %1244

1236:                                             ; preds = %1228
  %1237 = landingpad { ptr, i32 }
          cleanup
  br label %1243

1238:                                             ; preds = %1229
  %1239 = landingpad { ptr, i32 }
          cleanup
  br label %1242

1240:                                             ; preds = %1230
  %1241 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %522) #8
  br label %1242

1242:                                             ; preds = %1240, %1238
  %.pn295 = phi { ptr, i32 } [ %1241, %1240 ], [ %1239, %1238 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %523) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %523) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %522) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %520) #8
  br label %1243

1243:                                             ; preds = %1242, %1236
  %.pn295.pn = phi { ptr, i32 } [ %.pn295, %1242 ], [ %1237, %1236 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %521) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %521) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %520) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %518) #8
  br label %1244

1244:                                             ; preds = %1243, %1234
  %.pn295.pn.pn = phi { ptr, i32 } [ %.pn295.pn, %1243 ], [ %1235, %1234 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %519) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %519) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %518) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %516) #8
  br label %1245

1245:                                             ; preds = %1244, %1232
  %.pn295.pn.pn.pn = phi { ptr, i32 } [ %.pn295.pn.pn, %1244 ], [ %1233, %1232 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %517) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %517) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %516) #8
  br label %1364

1246:                                             ; preds = %1223
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %524) #8
  %1247 = call { <2 x float>, float } @_ZNK3cgp25camera_first_person_euler8positionEv(ptr noundef nonnull align 8 dereferenceable(44) %1176)
  %.fca.0.extract14 = extractvalue { <2 x float>, float } %1247, 0
  %.fca.1.extract15 = extractvalue { <2 x float>, float } %1247, 1
  store <2 x float> %.fca.0.extract14, ptr %524, align 8
  %.sroa.217.0..sroa_idx = getelementptr inbounds i8, ptr %524, i64 8
  store float %.fca.1.extract15, ptr %.sroa.217.0..sroa_idx, align 8
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %525) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %526) #8
  store i32 -1, ptr %526, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %527) #8
  store i32 0, ptr %527, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %528) #8
  store i32 0, ptr %528, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %525, ptr noundef nonnull align 4 dereferenceable(4) %526, ptr noundef nonnull align 4 dereferenceable(4) %527, ptr noundef nonnull align 4 dereferenceable(4) %528)
  %1248 = call noundef zeroext i1 @_ZN3cgp8is_equalIfLi3EEEbRKNS_14numarray_stackIT_XT0_EEES5_(ptr noundef nonnull align 4 dereferenceable(12) %524, ptr noundef nonnull align 4 dereferenceable(12) %525)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %528) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %527) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %526) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %525) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %524) #8
  br i1 %1248, label %1269, label %1249

1249:                                             ; preds = %1246
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %529) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %530) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %530) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %529, ptr noundef nonnull @.str.5, ptr noundef nonnull align 1 dereferenceable(1) %530)
          to label %1250 unwind label %1255

1250:                                             ; preds = %1249
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %531) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %532) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %532) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %531, ptr noundef nonnull @.str.1, ptr noundef nonnull align 1 dereferenceable(1) %532)
          to label %1251 unwind label %1257

1251:                                             ; preds = %1250
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %533) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %534) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %534) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %533, ptr noundef nonnull @.str.2, ptr noundef nonnull align 1 dereferenceable(1) %534)
          to label %1252 unwind label %1259

1252:                                             ; preds = %1251
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %535) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %536) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %536) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %535, ptr noundef nonnull @__func__._ZN8cgp_test22test_camera_controllerEv, ptr noundef nonnull align 1 dereferenceable(1) %536)
          to label %1253 unwind label %1261

1253:                                             ; preds = %1252
  invoke void @_ZN3cgp10call_errorERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_S7_S7_i(ptr noundef nonnull align 8 dereferenceable(32) %529, ptr noundef nonnull align 8 dereferenceable(32) %531, ptr noundef nonnull align 8 dereferenceable(32) %533, ptr noundef nonnull align 8 dereferenceable(32) %535, i32 noundef 84) #9
          to label %1254 unwind label %1263

1254:                                             ; preds = %1253
  unreachable

1255:                                             ; preds = %1249
  %1256 = landingpad { ptr, i32 }
          cleanup
  br label %1268

1257:                                             ; preds = %1250
  %1258 = landingpad { ptr, i32 }
          cleanup
  br label %1267

1259:                                             ; preds = %1251
  %1260 = landingpad { ptr, i32 }
          cleanup
  br label %1266

1261:                                             ; preds = %1252
  %1262 = landingpad { ptr, i32 }
          cleanup
  br label %1265

1263:                                             ; preds = %1253
  %1264 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %535) #8
  br label %1265

1265:                                             ; preds = %1263, %1261
  %.pn290 = phi { ptr, i32 } [ %1264, %1263 ], [ %1262, %1261 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %536) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %536) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %535) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %533) #8
  br label %1266

1266:                                             ; preds = %1265, %1259
  %.pn290.pn = phi { ptr, i32 } [ %.pn290, %1265 ], [ %1260, %1259 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %534) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %534) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %533) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %531) #8
  br label %1267

1267:                                             ; preds = %1266, %1257
  %.pn290.pn.pn = phi { ptr, i32 } [ %.pn290.pn, %1266 ], [ %1258, %1257 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %532) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %532) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %531) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %529) #8
  br label %1268

1268:                                             ; preds = %1267, %1255
  %.pn290.pn.pn.pn = phi { ptr, i32 } [ %.pn290.pn.pn, %1267 ], [ %1256, %1255 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %530) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %530) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %529) #8
  br label %1364

1269:                                             ; preds = %1246
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %537) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %538) #8
  store i32 0, ptr %538, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %539) #8
  store i32 1, ptr %539, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %540) #8
  store i32 0, ptr %540, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %537, ptr noundef nonnull align 4 dereferenceable(4) %538, ptr noundef nonnull align 4 dereferenceable(4) %539, ptr noundef nonnull align 4 dereferenceable(4) %540)
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %541) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %542) #8
  store i32 0, ptr %542, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %543) #8
  store i32 0, ptr %543, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %544) #8
  store i32 0, ptr %544, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %541, ptr noundef nonnull align 4 dereferenceable(4) %542, ptr noundef nonnull align 4 dereferenceable(4) %543, ptr noundef nonnull align 4 dereferenceable(4) %544)
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %545) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %546) #8
  store i32 0, ptr %546, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %547) #8
  store i32 0, ptr %547, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %548) #8
  store i32 1, ptr %548, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %545, ptr noundef nonnull align 4 dereferenceable(4) %546, ptr noundef nonnull align 4 dereferenceable(4) %547, ptr noundef nonnull align 4 dereferenceable(4) %548)
  call void @_ZN3cgp36camera_controller_first_person_euler7look_atERKNS_14numarray_stackIfLi3EEES4_S4_(ptr noundef nonnull align 8 dereferenceable(73) %460, ptr noundef nonnull align 4 dereferenceable(12) %537, ptr noundef nonnull align 4 dereferenceable(12) %541, ptr noundef nonnull align 4 dereferenceable(12) %545)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %548) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %547) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %546) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %545) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %544) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %543) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %542) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %541) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %540) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %539) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %538) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %537) #8
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %549) #8
  %1270 = call { <2 x float>, float } @_ZNK3cgp19camera_generic_base5frontEv(ptr noundef nonnull align 8 dereferenceable(8) %1176)
  %.fca.0.extract10 = extractvalue { <2 x float>, float } %1270, 0
  %.fca.1.extract11 = extractvalue { <2 x float>, float } %1270, 1
  store <2 x float> %.fca.0.extract10, ptr %549, align 8
  %.sroa.213.0..sroa_idx = getelementptr inbounds i8, ptr %549, i64 8
  store float %.fca.1.extract11, ptr %.sroa.213.0..sroa_idx, align 8
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %550) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %551) #8
  store i32 0, ptr %551, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %552) #8
  store i32 -1, ptr %552, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %553) #8
  store i32 0, ptr %553, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %550, ptr noundef nonnull align 4 dereferenceable(4) %551, ptr noundef nonnull align 4 dereferenceable(4) %552, ptr noundef nonnull align 4 dereferenceable(4) %553)
  %1271 = call noundef zeroext i1 @_ZN3cgp8is_equalIfLi3EEEbRKNS_14numarray_stackIT_XT0_EEES5_(ptr noundef nonnull align 4 dereferenceable(12) %549, ptr noundef nonnull align 4 dereferenceable(12) %550)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %553) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %552) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %551) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %550) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %549) #8
  br i1 %1271, label %1292, label %1272

1272:                                             ; preds = %1269
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %554) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %555) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %555) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %554, ptr noundef nonnull @.str.6, ptr noundef nonnull align 1 dereferenceable(1) %555)
          to label %1273 unwind label %1278

1273:                                             ; preds = %1272
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %556) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %557) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %557) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %556, ptr noundef nonnull @.str.1, ptr noundef nonnull align 1 dereferenceable(1) %557)
          to label %1274 unwind label %1280

1274:                                             ; preds = %1273
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %558) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %559) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %559) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %558, ptr noundef nonnull @.str.2, ptr noundef nonnull align 1 dereferenceable(1) %559)
          to label %1275 unwind label %1282

1275:                                             ; preds = %1274
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %560) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %561) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %561) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %560, ptr noundef nonnull @__func__._ZN8cgp_test22test_camera_controllerEv, ptr noundef nonnull align 1 dereferenceable(1) %561)
          to label %1276 unwind label %1284

1276:                                             ; preds = %1275
  invoke void @_ZN3cgp10call_errorERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_S7_S7_i(ptr noundef nonnull align 8 dereferenceable(32) %554, ptr noundef nonnull align 8 dereferenceable(32) %556, ptr noundef nonnull align 8 dereferenceable(32) %558, ptr noundef nonnull align 8 dereferenceable(32) %560, i32 noundef 87) #9
          to label %1277 unwind label %1286

1277:                                             ; preds = %1276
  unreachable

1278:                                             ; preds = %1272
  %1279 = landingpad { ptr, i32 }
          cleanup
  br label %1291

1280:                                             ; preds = %1273
  %1281 = landingpad { ptr, i32 }
          cleanup
  br label %1290

1282:                                             ; preds = %1274
  %1283 = landingpad { ptr, i32 }
          cleanup
  br label %1289

1284:                                             ; preds = %1275
  %1285 = landingpad { ptr, i32 }
          cleanup
  br label %1288

1286:                                             ; preds = %1276
  %1287 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %560) #8
  br label %1288

1288:                                             ; preds = %1286, %1284
  %.pn285 = phi { ptr, i32 } [ %1287, %1286 ], [ %1285, %1284 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %561) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %561) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %560) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %558) #8
  br label %1289

1289:                                             ; preds = %1288, %1282
  %.pn285.pn = phi { ptr, i32 } [ %.pn285, %1288 ], [ %1283, %1282 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %559) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %559) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %558) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %556) #8
  br label %1290

1290:                                             ; preds = %1289, %1280
  %.pn285.pn.pn = phi { ptr, i32 } [ %.pn285.pn, %1289 ], [ %1281, %1280 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %557) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %557) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %556) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %554) #8
  br label %1291

1291:                                             ; preds = %1290, %1278
  %.pn285.pn.pn.pn = phi { ptr, i32 } [ %.pn285.pn.pn, %1290 ], [ %1279, %1278 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %555) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %555) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %554) #8
  br label %1364

1292:                                             ; preds = %1269
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %562) #8
  %1293 = call { <2 x float>, float } @_ZNK3cgp25camera_first_person_euler8positionEv(ptr noundef nonnull align 8 dereferenceable(44) %1176)
  %.fca.0.extract6 = extractvalue { <2 x float>, float } %1293, 0
  %.fca.1.extract7 = extractvalue { <2 x float>, float } %1293, 1
  store <2 x float> %.fca.0.extract6, ptr %562, align 8
  %.sroa.29.0..sroa_idx = getelementptr inbounds i8, ptr %562, i64 8
  store float %.fca.1.extract7, ptr %.sroa.29.0..sroa_idx, align 8
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %563) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %564) #8
  store i32 0, ptr %564, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %565) #8
  store i32 1, ptr %565, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %566) #8
  store i32 0, ptr %566, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %563, ptr noundef nonnull align 4 dereferenceable(4) %564, ptr noundef nonnull align 4 dereferenceable(4) %565, ptr noundef nonnull align 4 dereferenceable(4) %566)
  %1294 = call noundef zeroext i1 @_ZN3cgp8is_equalIfLi3EEEbRKNS_14numarray_stackIT_XT0_EEES5_(ptr noundef nonnull align 4 dereferenceable(12) %562, ptr noundef nonnull align 4 dereferenceable(12) %563)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %566) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %565) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %564) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %563) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %562) #8
  br i1 %1294, label %1315, label %1295

1295:                                             ; preds = %1292
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %567) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %568) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %568) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %567, ptr noundef nonnull @.str.7, ptr noundef nonnull align 1 dereferenceable(1) %568)
          to label %1296 unwind label %1301

1296:                                             ; preds = %1295
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %569) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %570) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %570) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %569, ptr noundef nonnull @.str.1, ptr noundef nonnull align 1 dereferenceable(1) %570)
          to label %1297 unwind label %1303

1297:                                             ; preds = %1296
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %571) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %572) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %572) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %571, ptr noundef nonnull @.str.2, ptr noundef nonnull align 1 dereferenceable(1) %572)
          to label %1298 unwind label %1305

1298:                                             ; preds = %1297
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %573) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %574) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %574) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %573, ptr noundef nonnull @__func__._ZN8cgp_test22test_camera_controllerEv, ptr noundef nonnull align 1 dereferenceable(1) %574)
          to label %1299 unwind label %1307

1299:                                             ; preds = %1298
  invoke void @_ZN3cgp10call_errorERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_S7_S7_i(ptr noundef nonnull align 8 dereferenceable(32) %567, ptr noundef nonnull align 8 dereferenceable(32) %569, ptr noundef nonnull align 8 dereferenceable(32) %571, ptr noundef nonnull align 8 dereferenceable(32) %573, i32 noundef 88) #9
          to label %1300 unwind label %1309

1300:                                             ; preds = %1299
  unreachable

1301:                                             ; preds = %1295
  %1302 = landingpad { ptr, i32 }
          cleanup
  br label %1314

1303:                                             ; preds = %1296
  %1304 = landingpad { ptr, i32 }
          cleanup
  br label %1313

1305:                                             ; preds = %1297
  %1306 = landingpad { ptr, i32 }
          cleanup
  br label %1312

1307:                                             ; preds = %1298
  %1308 = landingpad { ptr, i32 }
          cleanup
  br label %1311

1309:                                             ; preds = %1299
  %1310 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %573) #8
  br label %1311

1311:                                             ; preds = %1309, %1307
  %.pn280 = phi { ptr, i32 } [ %1310, %1309 ], [ %1308, %1307 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %574) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %574) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %573) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %571) #8
  br label %1312

1312:                                             ; preds = %1311, %1305
  %.pn280.pn = phi { ptr, i32 } [ %.pn280, %1311 ], [ %1306, %1305 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %572) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %572) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %571) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %569) #8
  br label %1313

1313:                                             ; preds = %1312, %1303
  %.pn280.pn.pn = phi { ptr, i32 } [ %.pn280.pn, %1312 ], [ %1304, %1303 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %570) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %570) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %569) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %567) #8
  br label %1314

1314:                                             ; preds = %1313, %1301
  %.pn280.pn.pn.pn = phi { ptr, i32 } [ %.pn280.pn.pn, %1313 ], [ %1302, %1301 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %568) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %568) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %567) #8
  br label %1364

1315:                                             ; preds = %1292
  %1316 = call noundef float @_ZSt4sqrtf(float noundef 2.000000e+00)
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %575) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %576) #8
  store i32 1, ptr %576, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %577) #8
  store i32 1, ptr %577, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %578) #8
  store i32 0, ptr %578, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %575, ptr noundef nonnull align 4 dereferenceable(4) %576, ptr noundef nonnull align 4 dereferenceable(4) %577, ptr noundef nonnull align 4 dereferenceable(4) %578)
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %579) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %580) #8
  store i32 0, ptr %580, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %581) #8
  store i32 0, ptr %581, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %582) #8
  store i32 0, ptr %582, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %579, ptr noundef nonnull align 4 dereferenceable(4) %580, ptr noundef nonnull align 4 dereferenceable(4) %581, ptr noundef nonnull align 4 dereferenceable(4) %582)
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %583) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %584) #8
  store i32 0, ptr %584, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %585) #8
  store i32 0, ptr %585, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %586) #8
  store i32 1, ptr %586, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %583, ptr noundef nonnull align 4 dereferenceable(4) %584, ptr noundef nonnull align 4 dereferenceable(4) %585, ptr noundef nonnull align 4 dereferenceable(4) %586)
  call void @_ZN3cgp36camera_controller_first_person_euler7look_atERKNS_14numarray_stackIfLi3EEES4_S4_(ptr noundef nonnull align 8 dereferenceable(73) %460, ptr noundef nonnull align 4 dereferenceable(12) %575, ptr noundef nonnull align 4 dereferenceable(12) %579, ptr noundef nonnull align 4 dereferenceable(12) %583)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %586) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %585) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %584) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %583) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %582) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %581) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %580) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %579) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %578) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %577) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %576) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %575) #8
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %587) #8
  %1317 = call { <2 x float>, float } @_ZNK3cgp19camera_generic_base5frontEv(ptr noundef nonnull align 8 dereferenceable(8) %1176)
  %.fca.0.extract1 = extractvalue { <2 x float>, float } %1317, 0
  %.fca.1.extract2 = extractvalue { <2 x float>, float } %1317, 1
  store <2 x float> %.fca.0.extract1, ptr %587, align 8
  %.sroa.24.0..sroa_idx = getelementptr inbounds i8, ptr %587, i64 8
  store float %.fca.1.extract2, ptr %.sroa.24.0..sroa_idx, align 8
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %588) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %589) #8
  %1318 = fdiv float -1.000000e+00, %1316
  store float %1318, ptr %589, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %590) #8
  store float %1318, ptr %590, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %591) #8
  store i32 0, ptr %591, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IffiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %588, ptr noundef nonnull align 4 dereferenceable(4) %589, ptr noundef nonnull align 4 dereferenceable(4) %590, ptr noundef nonnull align 4 dereferenceable(4) %591)
  %1319 = call noundef zeroext i1 @_ZN3cgp8is_equalIfLi3EEEbRKNS_14numarray_stackIT_XT0_EEES5_(ptr noundef nonnull align 4 dereferenceable(12) %587, ptr noundef nonnull align 4 dereferenceable(12) %588)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %591) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %590) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %589) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %588) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %587) #8
  br i1 %1319, label %1340, label %1320

1320:                                             ; preds = %1315
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %592) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %593) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %593) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %592, ptr noundef nonnull @.str.12, ptr noundef nonnull align 1 dereferenceable(1) %593)
          to label %1321 unwind label %1326

1321:                                             ; preds = %1320
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %594) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %595) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %595) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %594, ptr noundef nonnull @.str.1, ptr noundef nonnull align 1 dereferenceable(1) %595)
          to label %1322 unwind label %1328

1322:                                             ; preds = %1321
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %596) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %597) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %597) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %596, ptr noundef nonnull @.str.2, ptr noundef nonnull align 1 dereferenceable(1) %597)
          to label %1323 unwind label %1330

1323:                                             ; preds = %1322
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %598) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %599) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %599) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %598, ptr noundef nonnull @__func__._ZN8cgp_test22test_camera_controllerEv, ptr noundef nonnull align 1 dereferenceable(1) %599)
          to label %1324 unwind label %1332

1324:                                             ; preds = %1323
  invoke void @_ZN3cgp10call_errorERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_S7_S7_i(ptr noundef nonnull align 8 dereferenceable(32) %592, ptr noundef nonnull align 8 dereferenceable(32) %594, ptr noundef nonnull align 8 dereferenceable(32) %596, ptr noundef nonnull align 8 dereferenceable(32) %598, i32 noundef 92) #9
          to label %1325 unwind label %1334

1325:                                             ; preds = %1324
  unreachable

1326:                                             ; preds = %1320
  %1327 = landingpad { ptr, i32 }
          cleanup
  br label %1339

1328:                                             ; preds = %1321
  %1329 = landingpad { ptr, i32 }
          cleanup
  br label %1338

1330:                                             ; preds = %1322
  %1331 = landingpad { ptr, i32 }
          cleanup
  br label %1337

1332:                                             ; preds = %1323
  %1333 = landingpad { ptr, i32 }
          cleanup
  br label %1336

1334:                                             ; preds = %1324
  %1335 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %598) #8
  br label %1336

1336:                                             ; preds = %1334, %1332
  %.pn274 = phi { ptr, i32 } [ %1335, %1334 ], [ %1333, %1332 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %599) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %599) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %598) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %596) #8
  br label %1337

1337:                                             ; preds = %1336, %1330
  %.pn274.pn = phi { ptr, i32 } [ %.pn274, %1336 ], [ %1331, %1330 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %597) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %597) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %596) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %594) #8
  br label %1338

1338:                                             ; preds = %1337, %1328
  %.pn274.pn.pn = phi { ptr, i32 } [ %.pn274.pn, %1337 ], [ %1329, %1328 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %595) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %595) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %594) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %592) #8
  br label %1339

1339:                                             ; preds = %1338, %1326
  %.pn274.pn.pn.pn = phi { ptr, i32 } [ %.pn274.pn.pn, %1338 ], [ %1327, %1326 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %593) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %593) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %592) #8
  br label %1364

1340:                                             ; preds = %1315
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %600) #8
  %1341 = call { <2 x float>, float } @_ZNK3cgp25camera_first_person_euler8positionEv(ptr noundef nonnull align 8 dereferenceable(44) %1176)
  %.fca.0.extract = extractvalue { <2 x float>, float } %1341, 0
  %.fca.1.extract = extractvalue { <2 x float>, float } %1341, 1
  store <2 x float> %.fca.0.extract, ptr %600, align 8
  %.sroa.2.0..sroa_idx = getelementptr inbounds i8, ptr %600, i64 8
  store float %.fca.1.extract, ptr %.sroa.2.0..sroa_idx, align 8
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %601) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %602) #8
  store i32 1, ptr %602, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %603) #8
  store i32 1, ptr %603, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %604) #8
  store i32 0, ptr %604, align 4, !tbaa !5
  call void @_ZN3cgp14numarray_stackIfLi3EEC2IiiiEERKT_RKT0_RKT1_(ptr noundef nonnull align 4 dereferenceable(12) %601, ptr noundef nonnull align 4 dereferenceable(4) %602, ptr noundef nonnull align 4 dereferenceable(4) %603, ptr noundef nonnull align 4 dereferenceable(4) %604)
  %1342 = call noundef zeroext i1 @_ZN3cgp8is_equalIfLi3EEEbRKNS_14numarray_stackIT_XT0_EEES5_(ptr noundef nonnull align 4 dereferenceable(12) %600, ptr noundef nonnull align 4 dereferenceable(12) %601)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %604) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %603) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %602) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %601) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %600) #8
  br i1 %1342, label %1363, label %1343

1343:                                             ; preds = %1340
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %605) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %606) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %606) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %605, ptr noundef nonnull @.str.9, ptr noundef nonnull align 1 dereferenceable(1) %606)
          to label %1344 unwind label %1349

1344:                                             ; preds = %1343
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %607) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %608) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %608) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %607, ptr noundef nonnull @.str.1, ptr noundef nonnull align 1 dereferenceable(1) %608)
          to label %1345 unwind label %1351

1345:                                             ; preds = %1344
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %609) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %610) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %610) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %609, ptr noundef nonnull @.str.2, ptr noundef nonnull align 1 dereferenceable(1) %610)
          to label %1346 unwind label %1353

1346:                                             ; preds = %1345
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %611) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %612) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %612) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %611, ptr noundef nonnull @__func__._ZN8cgp_test22test_camera_controllerEv, ptr noundef nonnull align 1 dereferenceable(1) %612)
          to label %1347 unwind label %1355

1347:                                             ; preds = %1346
  invoke void @_ZN3cgp10call_errorERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_S7_S7_i(ptr noundef nonnull align 8 dereferenceable(32) %605, ptr noundef nonnull align 8 dereferenceable(32) %607, ptr noundef nonnull align 8 dereferenceable(32) %609, ptr noundef nonnull align 8 dereferenceable(32) %611, i32 noundef 93) #9
          to label %1348 unwind label %1357

1348:                                             ; preds = %1347
  unreachable

1349:                                             ; preds = %1343
  %1350 = landingpad { ptr, i32 }
          cleanup
  br label %1362

1351:                                             ; preds = %1344
  %1352 = landingpad { ptr, i32 }
          cleanup
  br label %1361

1353:                                             ; preds = %1345
  %1354 = landingpad { ptr, i32 }
          cleanup
  br label %1360

1355:                                             ; preds = %1346
  %1356 = landingpad { ptr, i32 }
          cleanup
  br label %1359

1357:                                             ; preds = %1347
  %1358 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %611) #8
  br label %1359

1359:                                             ; preds = %1357, %1355
  %.pn = phi { ptr, i32 } [ %1358, %1357 ], [ %1356, %1355 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %612) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %612) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %611) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %609) #8
  br label %1360

1360:                                             ; preds = %1359, %1353
  %.pn.pn = phi { ptr, i32 } [ %.pn, %1359 ], [ %1354, %1353 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %610) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %610) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %609) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %607) #8
  br label %1361

1361:                                             ; preds = %1360, %1351
  %.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn, %1360 ], [ %1352, %1351 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %608) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %608) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %607) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %605) #8
  br label %1362

1362:                                             ; preds = %1361, %1349
  %.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn.pn, %1361 ], [ %1350, %1349 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %606) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %606) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %605) #8
  br label %1364

1363:                                             ; preds = %1340
  call void @llvm.lifetime.end.p0(i64 80, ptr nonnull %460) #8
  ret void

1364:                                             ; preds = %1339, %1362, %1314, %1291, %1268, %1245, %1222, %1199
  %.pn305.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn305.pn.pn.pn, %1199 ], [ %.pn300.pn.pn.pn, %1222 ], [ %.pn295.pn.pn.pn, %1245 ], [ %.pn290.pn.pn.pn, %1268 ], [ %.pn285.pn.pn.pn, %1291 ], [ %.pn280.pn.pn.pn, %1314 ], [ %.pn274.pn.pn.pn, %1339 ], [ %.pn.pn.pn.pn, %1362 ]
  call void @llvm.lifetime.end.p0(i64 80, ptr nonnull %460) #8
  br label %1365

1365:                                             ; preds = %1364, %1185, %997, %809
  %.pn431.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn431.pn.pn.pn.pn, %809 ], [ %.pn389.pn.pn.pn.pn, %997 ], [ %.pn347.pn.pn.pn.pn, %1185 ], [ %.pn305.pn.pn.pn.pn, %1364 ]
  resume { ptr, i32 } %.pn431.pn.pn.pn.pn.pn
}

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

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

declare void @_ZN3cgp23camera_controller_orbit7look_atERKNS_14numarray_stackIfLi3EEES4_S4_(ptr noundef nonnull align 8 dereferenceable(64), ptr noundef nonnull align 4 dereferenceable(12), ptr noundef nonnull align 4 dereferenceable(12), ptr noundef nonnull align 4 dereferenceable(12)) local_unnamed_addr #3

; 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 #4 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZN3cgp8is_equalIfLi3EEEbRKNS_14numarray_stackIT_XT0_EEES5_(ptr noundef nonnull align 4 dereferenceable(12), ptr noundef nonnull align 4 dereferenceable(12)) local_unnamed_addr #5

declare { <2 x float>, float } @_ZNK3cgp19camera_generic_base5frontEv(ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #3

; Function Attrs: noreturn
declare void @_ZN3cgp10call_errorERKNSt7__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 #6

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

declare { <2 x float>, float } @_ZNK3cgp12camera_orbit8positionEv(ptr noundef nonnull align 8 dereferenceable(40)) unnamed_addr #3

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3cgp14numarray_stackIfLi3EEC2IffiEERKT_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 #4 align 2

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

declare void @_ZN3cgp29camera_controller_orbit_euler7look_atERKNS_14numarray_stackIfLi3EEES4_S4_(ptr noundef nonnull align 8 dereferenceable(72), ptr noundef nonnull align 4 dereferenceable(12), ptr noundef nonnull align 4 dereferenceable(12), ptr noundef nonnull align 4 dereferenceable(12)) local_unnamed_addr #3

declare { <2 x float>, float } @_ZNK3cgp18camera_orbit_euler8positionEv(ptr noundef nonnull align 8 dereferenceable(48)) unnamed_addr #3

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

declare void @_ZN3cgp30camera_controller_first_person7look_atERKNS_14numarray_stackIfLi3EEES4_S4_(ptr noundef nonnull align 8 dereferenceable(73), ptr noundef nonnull align 4 dereferenceable(12), ptr noundef nonnull align 4 dereferenceable(12), ptr noundef nonnull align 4 dereferenceable(12)) local_unnamed_addr #3

declare { <2 x float>, float } @_ZNK3cgp19camera_first_person8positionEv(ptr noundef nonnull align 8 dereferenceable(36)) unnamed_addr #3

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

declare void @_ZN3cgp36camera_controller_first_person_euler7look_atERKNS_14numarray_stackIfLi3EEES4_S4_(ptr noundef nonnull align 8 dereferenceable(73), ptr noundef nonnull align 4 dereferenceable(12), ptr noundef nonnull align 4 dereferenceable(12), ptr noundef nonnull align 4 dereferenceable(12)) local_unnamed_addr #3

declare { <2 x float>, float } @_ZNK3cgp25camera_first_person_euler8positionEv(ptr noundef nonnull align 8 dereferenceable(44)) unnamed_addr #3

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

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

!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 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"float", !7, i64 0}


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