; LLVM IR from Lut1n/ImpGears :: src/ImpGears/Geometry/Geometry.ll (ZN3imp8Geometry11intoLineBufERKS0_)

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

%"class.imp::Geometry" = type <{ %"class.imp::Object", i32, [4 x i8], %"class.std::vector", %"class.std::vector.0", %"class.std::vector.0", %"class.std::vector.0", %"class.std::vector.5", i8, i8, i8, i8, [4 x i8] }>
%"class.imp::Object" = type { ptr, %"class.std::shared_ptr" }
%"class.std::shared_ptr" = type { %"class.std::__shared_ptr" }
%"class.std::__shared_ptr" = type { ptr, %"class.std::__shared_count" }
%"class.std::__shared_count" = type { ptr }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl" }
%"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl" = type { %"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl_data" }
%"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.0" = type { %"struct.std::_Vector_base.1" }
%"struct.std::_Vector_base.1" = type { %"struct.std::_Vector_base<imp::Vec3, std::allocator<imp::Vec3>>::_Vector_impl" }
%"struct.std::_Vector_base<imp::Vec3, std::allocator<imp::Vec3>>::_Vector_impl" = type { %"struct.std::_Vector_base<imp::Vec3, std::allocator<imp::Vec3>>::_Vector_impl_data" }
%"struct.std::_Vector_base<imp::Vec3, std::allocator<imp::Vec3>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.5" = type { %"struct.std::_Vector_base.6" }
%"struct.std::_Vector_base.6" = type { %"struct.std::_Vector_base<imp::Vec<2, float>, std::allocator<imp::Vec<2, float>>>::_Vector_impl" }
%"struct.std::_Vector_base<imp::Vec<2, float>, std::allocator<imp::Vec<2, float>>>::_Vector_impl" = type { %"struct.std::_Vector_base<imp::Vec<2, float>, std::allocator<imp::Vec<2, float>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<imp::Vec<2, float>, std::allocator<imp::Vec<2, float>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.imp::Vec3" = type { %"class.imp::Vec.base", [4 x i8] }
%"class.imp::Vec.base" = type <{ %"class.imp::Object", [3 x float] }>
%"class.std::initializer_list" = type { ptr, i64 }
%"class.std::allocator.2" = type { i8 }
%"class.imp::Vec.16" = type { %"class.imp::Object", [2 x float] }

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

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

declare i32 @__gxx_personality_v0(...)

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

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3imp8Geometry12setPrimitiveENS0_9PrimitiveE(ptr noundef nonnull align 8 dereferenceable(156), i32 noundef) #0 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK3imp8Geometry4sizeEv(ptr noundef nonnull align 8 dereferenceable(156)) #0 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(36) ptr @_ZNK3imp8GeometryixEi(ptr noundef nonnull align 8 dereferenceable(156), i32 noundef) #0 align 2

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN3imp8Geometry11intoLineBufERKS0_(ptr dead_on_unwind noalias writable sret(%"class.imp::Geometry") align 8 %0, ptr noundef nonnull align 8 dereferenceable(156) %1) #1 align 2 personality ptr @__gxx_personality_v0 {
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca i1, align 1
  %6 = alloca ptr, align 8
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca %"class.std::vector.0", align 8
  %11 = alloca %"class.std::vector.0", align 8
  %12 = alloca %"class.std::vector.5", align 8
  %13 = alloca i1, align 1
  %14 = alloca i32, align 4
  %15 = alloca %"class.imp::Vec3", align 8
  %16 = alloca %"class.imp::Vec3", align 8
  %17 = alloca %"class.imp::Vec3", align 8
  %18 = alloca %"class.std::vector.0", align 8
  %19 = alloca %"class.std::initializer_list", align 8
  %20 = alloca [2 x %"class.imp::Vec3"], align 8
  %21 = alloca %"class.std::allocator.2", align 1
  %22 = alloca %"class.std::vector.0", align 8
  %23 = alloca %"class.std::initializer_list", align 8
  %24 = alloca [2 x %"class.imp::Vec3"], align 8
  %25 = alloca %"class.std::allocator.2", align 1
  %26 = alloca %"class.std::vector.0", align 8
  %27 = alloca %"class.std::initializer_list", align 8
  %28 = alloca [2 x %"class.imp::Vec3"], align 8
  %29 = alloca %"class.std::allocator.2", align 1
  %30 = alloca %"class.imp::Vec3", align 8
  %31 = alloca %"class.imp::Vec3", align 8
  %32 = alloca %"class.imp::Vec3", align 8
  %33 = alloca %"class.imp::Vec3", align 8
  %34 = alloca %"class.imp::Vec3", align 8
  %35 = alloca %"class.imp::Vec3", align 8
  %36 = alloca %"class.imp::Vec.16", align 8
  %37 = alloca %"class.imp::Vec.16", align 8
  %38 = alloca %"class.imp::Vec.16", align 8
  store ptr %0, ptr %3, align 8
  store ptr %1, ptr %4, align 8, !tbaa !5
  %39 = load ptr, ptr %4, align 8, !tbaa !5
  %40 = getelementptr inbounds %"class.imp::Geometry", ptr %39, i32 0, i32 8
  %41 = load i8, ptr %40, align 8, !tbaa !9, !range !29, !noundef !30
  %42 = trunc i8 %41 to i1
  br i1 %42, label %43, label %145

43:                                               ; preds = %2
  store i1 false, ptr %5, align 1
  %44 = load ptr, ptr %4, align 8, !tbaa !5
  call void @_ZN3imp8GeometryC1ERKS0_(ptr noundef nonnull align 8 dereferenceable(156) %0, ptr noundef nonnull align 8 dereferenceable(156) %44)
  call void @_ZN3imp8Geometry12setPrimitiveENS0_9PrimitiveE(ptr noundef nonnull align 8 dereferenceable(156) %0, i32 noundef 1)
  %45 = getelementptr inbounds %"class.imp::Geometry", ptr %0, i32 0, i32 3
  %46 = load ptr, ptr %4, align 8, !tbaa !5
  %47 = getelementptr inbounds %"class.imp::Geometry", ptr %46, i32 0, i32 3
  %48 = call noundef i64 @_ZNKSt6vectorIjSaIjEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %47) #4
  %49 = mul i64 %48, 2
  invoke void @_ZNSt6vectorIjSaIjEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24) %45, i64 noundef %49)
          to label %50 unwind label %59

50:                                               ; preds = %43
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #4
  store i32 0, ptr %8, align 4, !tbaa !31
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #4
  store i32 0, ptr %9, align 4, !tbaa !31
  br label %51

51:                                               ; preds = %138, %50
  %52 = load i32, ptr %9, align 4, !tbaa !31
  %53 = load ptr, ptr %4, align 8, !tbaa !5
  %54 = getelementptr inbounds %"class.imp::Geometry", ptr %53, i32 0, i32 3
  %55 = call noundef i64 @_ZNKSt6vectorIjSaIjEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %54) #4
  %56 = trunc i64 %55 to i32
  %57 = icmp slt i32 %52, %56
  br i1 %57, label %63, label %58

58:                                               ; preds = %51
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #4
  br label %141

59:                                               ; preds = %43
  %60 = landingpad { ptr, i32 }
          cleanup
  %61 = extractvalue { ptr, i32 } %60, 0
  store ptr %61, ptr %6, align 8
  %62 = extractvalue { ptr, i32 } %60, 1
  store i32 %62, ptr %7, align 4
  call void @_ZN3imp8GeometryD2Ev(ptr noundef nonnull align 8 dereferenceable(156) %0) #4
  br label %404

63:                                               ; preds = %51
  %64 = load ptr, ptr %4, align 8, !tbaa !5
  %65 = getelementptr inbounds %"class.imp::Geometry", ptr %64, i32 0, i32 3
  %66 = load i32, ptr %9, align 4, !tbaa !31
  %67 = add nsw i32 %66, 0
  %68 = sext i32 %67 to i64
  %69 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNKSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %65, i64 noundef %68) #4
  %70 = load i32, ptr %69, align 4, !tbaa !31
  %71 = getelementptr inbounds %"class.imp::Geometry", ptr %0, i32 0, i32 3
  %72 = load i32, ptr %8, align 4, !tbaa !31
  %73 = add nsw i32 %72, 0
  %74 = sext i32 %73 to i64
  %75 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %71, i64 noundef %74) #4
  store i32 %70, ptr %75, align 4, !tbaa !31
  %76 = load ptr, ptr %4, align 8, !tbaa !5
  %77 = getelementptr inbounds %"class.imp::Geometry", ptr %76, i32 0, i32 3
  %78 = load i32, ptr %9, align 4, !tbaa !31
  %79 = add nsw i32 %78, 1
  %80 = sext i32 %79 to i64
  %81 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNKSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %77, i64 noundef %80) #4
  %82 = load i32, ptr %81, align 4, !tbaa !31
  %83 = getelementptr inbounds %"class.imp::Geometry", ptr %0, i32 0, i32 3
  %84 = load i32, ptr %8, align 4, !tbaa !31
  %85 = add nsw i32 %84, 1
  %86 = sext i32 %85 to i64
  %87 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %83, i64 noundef %86) #4
  store i32 %82, ptr %87, align 4, !tbaa !31
  %88 = load ptr, ptr %4, align 8, !tbaa !5
  %89 = getelementptr inbounds %"class.imp::Geometry", ptr %88, i32 0, i32 3
  %90 = load i32, ptr %9, align 4, !tbaa !31
  %91 = add nsw i32 %90, 1
  %92 = sext i32 %91 to i64
  %93 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNKSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %89, i64 noundef %92) #4
  %94 = load i32, ptr %93, align 4, !tbaa !31
  %95 = getelementptr inbounds %"class.imp::Geometry", ptr %0, i32 0, i32 3
  %96 = load i32, ptr %8, align 4, !tbaa !31
  %97 = add nsw i32 %96, 2
  %98 = sext i32 %97 to i64
  %99 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %95, i64 noundef %98) #4
  store i32 %94, ptr %99, align 4, !tbaa !31
  %100 = load ptr, ptr %4, align 8, !tbaa !5
  %101 = getelementptr inbounds %"class.imp::Geometry", ptr %100, i32 0, i32 3
  %102 = load i32, ptr %9, align 4, !tbaa !31
  %103 = add nsw i32 %102, 2
  %104 = sext i32 %103 to i64
  %105 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNKSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %101, i64 noundef %104) #4
  %106 = load i32, ptr %105, align 4, !tbaa !31
  %107 = getelementptr inbounds %"class.imp::Geometry", ptr %0, i32 0, i32 3
  %108 = load i32, ptr %8, align 4, !tbaa !31
  %109 = add nsw i32 %108, 3
  %110 = sext i32 %109 to i64
  %111 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %107, i64 noundef %110) #4
  store i32 %106, ptr %111, align 4, !tbaa !31
  %112 = load ptr, ptr %4, align 8, !tbaa !5
  %113 = getelementptr inbounds %"class.imp::Geometry", ptr %112, i32 0, i32 3
  %114 = load i32, ptr %9, align 4, !tbaa !31
  %115 = add nsw i32 %114, 2
  %116 = sext i32 %115 to i64
  %117 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNKSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %113, i64 noundef %116) #4
  %118 = load i32, ptr %117, align 4, !tbaa !31
  %119 = getelementptr inbounds %"class.imp::Geometry", ptr %0, i32 0, i32 3
  %120 = load i32, ptr %8, align 4, !tbaa !31
  %121 = add nsw i32 %120, 4
  %122 = sext i32 %121 to i64
  %123 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %119, i64 noundef %122) #4
  store i32 %118, ptr %123, align 4, !tbaa !31
  %124 = load ptr, ptr %4, align 8, !tbaa !5
  %125 = getelementptr inbounds %"class.imp::Geometry", ptr %124, i32 0, i32 3
  %126 = load i32, ptr %9, align 4, !tbaa !31
  %127 = add nsw i32 %126, 0
  %128 = sext i32 %127 to i64
  %129 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNKSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %125, i64 noundef %128) #4
  %130 = load i32, ptr %129, align 4, !tbaa !31
  %131 = getelementptr inbounds %"class.imp::Geometry", ptr %0, i32 0, i32 3
  %132 = load i32, ptr %8, align 4, !tbaa !31
  %133 = add nsw i32 %132, 5
  %134 = sext i32 %133 to i64
  %135 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %131, i64 noundef %134) #4
  store i32 %130, ptr %135, align 4, !tbaa !31
  %136 = load i32, ptr %8, align 4, !tbaa !31
  %137 = add nsw i32 %136, 6
  store i32 %137, ptr %8, align 4, !tbaa !31
  br label %138

138:                                              ; preds = %63
  %139 = load i32, ptr %9, align 4, !tbaa !31
  %140 = add nsw i32 %139, 3
  store i32 %140, ptr %9, align 4, !tbaa !31
  br label %51, !llvm.loop !33

141:                                              ; preds = %58
  store i1 true, ptr %5, align 1
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #4
  %142 = load i1, ptr %5, align 1
  br i1 %142, label %144, label %143

143:                                              ; preds = %141
  call void @_ZN3imp8GeometryD2Ev(ptr noundef nonnull align 8 dereferenceable(156) %0) #4
  br label %144

144:                                              ; preds = %143, %141
  br label %403

145:                                              ; preds = %2
  call void @llvm.lifetime.start.p0(i64 24, ptr %10) #4
  call void @_ZNSt6vectorIN3imp4Vec3ESaIS1_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %10) #4
  call void @llvm.lifetime.start.p0(i64 24, ptr %11) #4
  call void @_ZNSt6vectorIN3imp4Vec3ESaIS1_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %11) #4
  call void @llvm.lifetime.start.p0(i64 24, ptr %12) #4
  call void @_ZNSt6vectorIN3imp3VecILi2EfEESaIS2_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %12) #4
  store i1 false, ptr %13, align 1
  invoke void @_ZN3imp8GeometryC1Ev(ptr noundef nonnull align 8 dereferenceable(156) %0)
          to label %146 unwind label %153

146:                                              ; preds = %145
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #4
  store i32 0, ptr %14, align 4, !tbaa !31
  br label %147

147:                                              ; preds = %368, %146
  %148 = load i32, ptr %14, align 4, !tbaa !31
  %149 = load ptr, ptr %4, align 8, !tbaa !5
  %150 = call noundef i32 @_ZNK3imp8Geometry4sizeEv(ptr noundef nonnull align 8 dereferenceable(156) %149)
  %151 = icmp slt i32 %148, %150
  br i1 %151, label %157, label %152

152:                                              ; preds = %147
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #4
  br label %372

153:                                              ; preds = %145
  %154 = landingpad { ptr, i32 }
          cleanup
  %155 = extractvalue { ptr, i32 } %154, 0
  store ptr %155, ptr %6, align 8
  %156 = extractvalue { ptr, i32 } %154, 1
  store i32 %156, ptr %7, align 4
  br label %402

157:                                              ; preds = %147
  call void @llvm.lifetime.start.p0(i64 40, ptr %15) #4
  %158 = load ptr, ptr %4, align 8, !tbaa !5
  %159 = load i32, ptr %14, align 4, !tbaa !31
  %160 = add nsw i32 %159, 0
  %161 = call noundef nonnull align 8 dereferenceable(36) ptr @_ZNK3imp8GeometryixEi(ptr noundef nonnull align 8 dereferenceable(156) %158, i32 noundef %160)
  call void @_ZN3imp4Vec3C2ERKS0_(ptr noundef nonnull align 8 dereferenceable(36) %15, ptr noundef nonnull align 8 dereferenceable(36) %161) #4
  call void @llvm.lifetime.start.p0(i64 40, ptr %16) #4
  %162 = load ptr, ptr %4, align 8, !tbaa !5
  %163 = load i32, ptr %14, align 4, !tbaa !31
  %164 = add nsw i32 %163, 1
  %165 = call noundef nonnull align 8 dereferenceable(36) ptr @_ZNK3imp8GeometryixEi(ptr noundef nonnull align 8 dereferenceable(156) %162, i32 noundef %164)
  call void @_ZN3imp4Vec3C2ERKS0_(ptr noundef nonnull align 8 dereferenceable(36) %16, ptr noundef nonnull align 8 dereferenceable(36) %165) #4
  call void @llvm.lifetime.start.p0(i64 40, ptr %17) #4
  %166 = load ptr, ptr %4, align 8, !tbaa !5
  %167 = load i32, ptr %14, align 4, !tbaa !31
  %168 = add nsw i32 %167, 2
  %169 = call noundef nonnull align 8 dereferenceable(36) ptr @_ZNK3imp8GeometryixEi(ptr noundef nonnull align 8 dereferenceable(156) %166, i32 noundef %168)
  call void @_ZN3imp4Vec3C2ERKS0_(ptr noundef nonnull align 8 dereferenceable(36) %17, ptr noundef nonnull align 8 dereferenceable(36) %169) #4
  call void @llvm.lifetime.start.p0(i64 24, ptr %18) #4
  call void @llvm.lifetime.start.p0(i64 80, ptr %20) #4
  call void @_ZN3imp4Vec3C2ERKS0_(ptr noundef nonnull align 8 dereferenceable(36) %20, ptr noundef nonnull align 8 dereferenceable(36) %15) #4
  %170 = getelementptr inbounds %"class.imp::Vec3", ptr %20, i64 1
  call void @_ZN3imp4Vec3C2ERKS0_(ptr noundef nonnull align 8 dereferenceable(36) %170, ptr noundef nonnull align 8 dereferenceable(36) %16) #4
  %171 = getelementptr inbounds %"class.std::initializer_list", ptr %19, i32 0, i32 0
  store ptr %20, ptr %171, align 8, !tbaa !35
  %172 = getelementptr inbounds %"class.std::initializer_list", ptr %19, i32 0, i32 1
  store i64 2, ptr %172, align 8, !tbaa !38
  call void @llvm.lifetime.start.p0(i64 1, ptr %21) #4
  call void @_ZNSaIN3imp4Vec3EEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %21) #4
  %173 = getelementptr inbounds { ptr, i64 }, ptr %19, i32 0, i32 0
  %174 = load ptr, ptr %173, align 8
  %175 = getelementptr inbounds { ptr, i64 }, ptr %19, i32 0, i32 1
  %176 = load i64, ptr %175, align 8
  invoke void @_ZNSt6vectorIN3imp4Vec3ESaIS1_EEC2ESt16initializer_listIS1_ERKS2_(ptr noundef nonnull align 8 dereferenceable(24) %18, ptr %174, i64 %176, ptr noundef nonnull align 1 dereferenceable(1) %21)
          to label %177 unwind label %247

177:                                              ; preds = %157
  invoke void @_ZN3imp8Geometry3addERKSt6vectorINS_4Vec3ESaIS2_EE(ptr noundef nonnull align 8 dereferenceable(156) %0, ptr noundef nonnull align 8 dereferenceable(24) %18)
          to label %178 unwind label %251

178:                                              ; preds = %177
  call void @_ZNSt6vectorIN3imp4Vec3ESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %18) #4
  call void @_ZNSt15__new_allocatorIN3imp4Vec3EED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %21) #4
  call void @llvm.lifetime.end.p0(i64 1, ptr %21) #4
  %179 = getelementptr inbounds [2 x %"class.imp::Vec3"], ptr %20, i32 0, i32 0
  %180 = getelementptr inbounds %"class.imp::Vec3", ptr %179, i64 2
  br label %181

181:                                              ; preds = %181, %178
  %182 = phi ptr [ %180, %178 ], [ %183, %181 ]
  %183 = getelementptr inbounds %"class.imp::Vec3", ptr %182, i64 -1
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(36) %183) #4
  %184 = icmp eq ptr %183, %179
  br i1 %184, label %185, label %181

185:                                              ; preds = %181
  call void @llvm.lifetime.end.p0(i64 80, ptr %20) #4
  call void @llvm.lifetime.end.p0(i64 24, ptr %18) #4
  call void @llvm.lifetime.start.p0(i64 24, ptr %22) #4
  call void @llvm.lifetime.start.p0(i64 80, ptr %24) #4
  call void @_ZN3imp4Vec3C2ERKS0_(ptr noundef nonnull align 8 dereferenceable(36) %24, ptr noundef nonnull align 8 dereferenceable(36) %15) #4
  %186 = getelementptr inbounds %"class.imp::Vec3", ptr %24, i64 1
  call void @_ZN3imp4Vec3C2ERKS0_(ptr noundef nonnull align 8 dereferenceable(36) %186, ptr noundef nonnull align 8 dereferenceable(36) %17) #4
  %187 = getelementptr inbounds %"class.std::initializer_list", ptr %23, i32 0, i32 0
  store ptr %24, ptr %187, align 8, !tbaa !35
  %188 = getelementptr inbounds %"class.std::initializer_list", ptr %23, i32 0, i32 1
  store i64 2, ptr %188, align 8, !tbaa !38
  call void @llvm.lifetime.start.p0(i64 1, ptr %25) #4
  call void @_ZNSaIN3imp4Vec3EEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %25) #4
  %189 = getelementptr inbounds { ptr, i64 }, ptr %23, i32 0, i32 0
  %190 = load ptr, ptr %189, align 8
  %191 = getelementptr inbounds { ptr, i64 }, ptr %23, i32 0, i32 1
  %192 = load i64, ptr %191, align 8
  invoke void @_ZNSt6vectorIN3imp4Vec3ESaIS1_EEC2ESt16initializer_listIS1_ERKS2_(ptr noundef nonnull align 8 dereferenceable(24) %22, ptr %190, i64 %192, ptr noundef nonnull align 1 dereferenceable(1) %25)
          to label %193 unwind label %263

193:                                              ; preds = %185
  invoke void @_ZN3imp8Geometry3addERKSt6vectorINS_4Vec3ESaIS2_EE(ptr noundef nonnull align 8 dereferenceable(156) %0, ptr noundef nonnull align 8 dereferenceable(24) %22)
          to label %194 unwind label %267

194:                                              ; preds = %193
  call void @_ZNSt6vectorIN3imp4Vec3ESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %22) #4
  call void @_ZNSt15__new_allocatorIN3imp4Vec3EED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %25) #4
  call void @llvm.lifetime.end.p0(i64 1, ptr %25) #4
  %195 = getelementptr inbounds [2 x %"class.imp::Vec3"], ptr %24, i32 0, i32 0
  %196 = getelementptr inbounds %"class.imp::Vec3", ptr %195, i64 2
  br label %197

197:                                              ; preds = %197, %194
  %198 = phi ptr [ %196, %194 ], [ %199, %197 ]
  %199 = getelementptr inbounds %"class.imp::Vec3", ptr %198, i64 -1
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(36) %199) #4
  %200 = icmp eq ptr %199, %195
  br i1 %200, label %201, label %197

201:                                              ; preds = %197
  call void @llvm.lifetime.end.p0(i64 80, ptr %24) #4
  call void @llvm.lifetime.end.p0(i64 24, ptr %22) #4
  call void @llvm.lifetime.start.p0(i64 24, ptr %26) #4
  call void @llvm.lifetime.start.p0(i64 80, ptr %28) #4
  call void @_ZN3imp4Vec3C2ERKS0_(ptr noundef nonnull align 8 dereferenceable(36) %28, ptr noundef nonnull align 8 dereferenceable(36) %16) #4
  %202 = getelementptr inbounds %"class.imp::Vec3", ptr %28, i64 1
  call void @_ZN3imp4Vec3C2ERKS0_(ptr noundef nonnull align 8 dereferenceable(36) %202, ptr noundef nonnull align 8 dereferenceable(36) %17) #4
  %203 = getelementptr inbounds %"class.std::initializer_list", ptr %27, i32 0, i32 0
  store ptr %28, ptr %203, align 8, !tbaa !35
  %204 = getelementptr inbounds %"class.std::initializer_list", ptr %27, i32 0, i32 1
  store i64 2, ptr %204, align 8, !tbaa !38
  call void @llvm.lifetime.start.p0(i64 1, ptr %29) #4
  call void @_ZNSaIN3imp4Vec3EEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %29) #4
  %205 = getelementptr inbounds { ptr, i64 }, ptr %27, i32 0, i32 0
  %206 = load ptr, ptr %205, align 8
  %207 = getelementptr inbounds { ptr, i64 }, ptr %27, i32 0, i32 1
  %208 = load i64, ptr %207, align 8
  invoke void @_ZNSt6vectorIN3imp4Vec3ESaIS1_EEC2ESt16initializer_listIS1_ERKS2_(ptr noundef nonnull align 8 dereferenceable(24) %26, ptr %206, i64 %208, ptr noundef nonnull align 1 dereferenceable(1) %29)
          to label %209 unwind label %279

209:                                              ; preds = %201
  invoke void @_ZN3imp8Geometry3addERKSt6vectorINS_4Vec3ESaIS2_EE(ptr noundef nonnull align 8 dereferenceable(156) %0, ptr noundef nonnull align 8 dereferenceable(24) %26)
          to label %210 unwind label %283

210:                                              ; preds = %209
  call void @_ZNSt6vectorIN3imp4Vec3ESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %26) #4
  call void @_ZNSt15__new_allocatorIN3imp4Vec3EED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %29) #4
  call void @llvm.lifetime.end.p0(i64 1, ptr %29) #4
  %211 = getelementptr inbounds [2 x %"class.imp::Vec3"], ptr %28, i32 0, i32 0
  %212 = getelementptr inbounds %"class.imp::Vec3", ptr %211, i64 2
  br label %213

213:                                              ; preds = %213, %210
  %214 = phi ptr [ %212, %210 ], [ %215, %213 ]
  %215 = getelementptr inbounds %"class.imp::Vec3", ptr %214, i64 -1
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(36) %215) #4
  %216 = icmp eq ptr %215, %211
  br i1 %216, label %217, label %213

217:                                              ; preds = %213
  call void @llvm.lifetime.end.p0(i64 80, ptr %28) #4
  call void @llvm.lifetime.end.p0(i64 24, ptr %26) #4
  %218 = load ptr, ptr %4, align 8, !tbaa !5
  %219 = getelementptr inbounds %"class.imp::Geometry", ptr %218, i32 0, i32 10
  %220 = load i8, ptr %219, align 2, !tbaa !39, !range !29, !noundef !30
  %221 = trunc i8 %220 to i1
  br i1 %221, label %222, label %299

222:                                              ; preds = %217
  call void @llvm.lifetime.start.p0(i64 40, ptr %30) #4
  %223 = load ptr, ptr %4, align 8, !tbaa !5
  %224 = getelementptr inbounds %"class.imp::Geometry", ptr %223, i32 0, i32 5
  %225 = load i32, ptr %14, align 4, !tbaa !31
  %226 = add nsw i32 %225, 0
  %227 = sext i32 %226 to i64
  %228 = call noundef nonnull align 8 dereferenceable(36) ptr @_ZNKSt6vectorIN3imp4Vec3ESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %224, i64 noundef %227) #4
  call void @_ZN3imp4Vec3C2ERKS0_(ptr noundef nonnull align 8 dereferenceable(36) %30, ptr noundef nonnull align 8 dereferenceable(36) %228) #4
  call void @llvm.lifetime.start.p0(i64 40, ptr %31) #4
  %229 = load ptr, ptr %4, align 8, !tbaa !5
  %230 = getelementptr inbounds %"class.imp::Geometry", ptr %229, i32 0, i32 5
  %231 = load i32, ptr %14, align 4, !tbaa !31
  %232 = add nsw i32 %231, 1
  %233 = sext i32 %232 to i64
  %234 = call noundef nonnull align 8 dereferenceable(36) ptr @_ZNKSt6vectorIN3imp4Vec3ESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %230, i64 noundef %233) #4
  call void @_ZN3imp4Vec3C2ERKS0_(ptr noundef nonnull align 8 dereferenceable(36) %31, ptr noundef nonnull align 8 dereferenceable(36) %234) #4
  call void @llvm.lifetime.start.p0(i64 40, ptr %32) #4
  %235 = load ptr, ptr %4, align 8, !tbaa !5
  %236 = getelementptr inbounds %"class.imp::Geometry", ptr %235, i32 0, i32 5
  %237 = load i32, ptr %14, align 4, !tbaa !31
  %238 = add nsw i32 %237, 2
  %239 = sext i32 %238 to i64
  %240 = call noundef nonnull align 8 dereferenceable(36) ptr @_ZNKSt6vectorIN3imp4Vec3ESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %236, i64 noundef %239) #4
  call void @_ZN3imp4Vec3C2ERKS0_(ptr noundef nonnull align 8 dereferenceable(36) %32, ptr noundef nonnull align 8 dereferenceable(36) %240) #4
  invoke void @_ZNSt6vectorIN3imp4Vec3ESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %10, ptr noundef nonnull align 8 dereferenceable(36) %30)
          to label %241 unwind label %295

241:                                              ; preds = %222
  invoke void @_ZNSt6vectorIN3imp4Vec3ESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %10, ptr noundef nonnull align 8 dereferenceable(36) %31)
          to label %242 unwind label %295

242:                                              ; preds = %241
  invoke void @_ZNSt6vectorIN3imp4Vec3ESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %10, ptr noundef nonnull align 8 dereferenceable(36) %30)
          to label %243 unwind label %295

243:                                              ; preds = %242
  invoke void @_ZNSt6vectorIN3imp4Vec3ESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %10, ptr noundef nonnull align 8 dereferenceable(36) %32)
          to label %244 unwind label %295

244:                                              ; preds = %243
  invoke void @_ZNSt6vectorIN3imp4Vec3ESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %10, ptr noundef nonnull align 8 dereferenceable(36) %31)
          to label %245 unwind label %295

245:                                              ; preds = %244
  invoke void @_ZNSt6vectorIN3imp4Vec3ESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %10, ptr noundef nonnull align 8 dereferenceable(36) %32)
          to label %246 unwind label %295

246:                                              ; preds = %245
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(36) %32) #4
  call void @llvm.lifetime.end.p0(i64 40, ptr %32) #4
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(36) %31) #4
  call void @llvm.lifetime.end.p0(i64 40, ptr %31) #4
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(36) %30) #4
  call void @llvm.lifetime.end.p0(i64 40, ptr %30) #4
  br label %299

247:                                              ; preds = %157
  %248 = landingpad { ptr, i32 }
          cleanup
  %249 = extractvalue { ptr, i32 } %248, 0
  store ptr %249, ptr %6, align 8
  %250 = extractvalue { ptr, i32 } %248, 1
  store i32 %250, ptr %7, align 4
  br label %255

251:                                              ; preds = %177
  %252 = landingpad { ptr, i32 }
          cleanup
  %253 = extractvalue { ptr, i32 } %252, 0
  store ptr %253, ptr %6, align 8
  %254 = extractvalue { ptr, i32 } %252, 1
  store i32 %254, ptr %7, align 4
  call void @_ZNSt6vectorIN3imp4Vec3ESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %18) #4
  br label %255

255:                                              ; preds = %251, %247
  call void @_ZNSt15__new_allocatorIN3imp4Vec3EED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %21) #4
  call void @llvm.lifetime.end.p0(i64 1, ptr %21) #4
  %256 = getelementptr inbounds [2 x %"class.imp::Vec3"], ptr %20, i32 0, i32 0
  %257 = getelementptr inbounds %"class.imp::Vec3", ptr %256, i64 2
  br label %258

258:                                              ; preds = %258, %255
  %259 = phi ptr [ %257, %255 ], [ %260, %258 ]
  %260 = getelementptr inbounds %"class.imp::Vec3", ptr %259, i64 -1
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(36) %260) #4
  %261 = icmp eq ptr %260, %256
  br i1 %261, label %262, label %258

262:                                              ; preds = %258
  call void @llvm.lifetime.end.p0(i64 80, ptr %20) #4
  call void @llvm.lifetime.end.p0(i64 24, ptr %18) #4
  br label %371

263:                                              ; preds = %185
  %264 = landingpad { ptr, i32 }
          cleanup
  %265 = extractvalue { ptr, i32 } %264, 0
  store ptr %265, ptr %6, align 8
  %266 = extractvalue { ptr, i32 } %264, 1
  store i32 %266, ptr %7, align 4
  br label %271

267:                                              ; preds = %193
  %268 = landingpad { ptr, i32 }
          cleanup
  %269 = extractvalue { ptr, i32 } %268, 0
  store ptr %269, ptr %6, align 8
  %270 = extractvalue { ptr, i32 } %268, 1
  store i32 %270, ptr %7, align 4
  call void @_ZNSt6vectorIN3imp4Vec3ESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %22) #4
  br label %271

271:                                              ; preds = %267, %263
  call void @_ZNSt15__new_allocatorIN3imp4Vec3EED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %25) #4
  call void @llvm.lifetime.end.p0(i64 1, ptr %25) #4
  %272 = getelementptr inbounds [2 x %"class.imp::Vec3"], ptr %24, i32 0, i32 0
  %273 = getelementptr inbounds %"class.imp::Vec3", ptr %272, i64 2
  br label %274

274:                                              ; preds = %274, %271
  %275 = phi ptr [ %273, %271 ], [ %276, %274 ]
  %276 = getelementptr inbounds %"class.imp::Vec3", ptr %275, i64 -1
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(36) %276) #4
  %277 = icmp eq ptr %276, %272
  br i1 %277, label %278, label %274

278:                                              ; preds = %274
  call void @llvm.lifetime.end.p0(i64 80, ptr %24) #4
  call void @llvm.lifetime.end.p0(i64 24, ptr %22) #4
  br label %371

279:                                              ; preds = %201
  %280 = landingpad { ptr, i32 }
          cleanup
  %281 = extractvalue { ptr, i32 } %280, 0
  store ptr %281, ptr %6, align 8
  %282 = extractvalue { ptr, i32 } %280, 1
  store i32 %282, ptr %7, align 4
  br label %287

283:                                              ; preds = %209
  %284 = landingpad { ptr, i32 }
          cleanup
  %285 = extractvalue { ptr, i32 } %284, 0
  store ptr %285, ptr %6, align 8
  %286 = extractvalue { ptr, i32 } %284, 1
  store i32 %286, ptr %7, align 4
  call void @_ZNSt6vectorIN3imp4Vec3ESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %26) #4
  br label %287

287:                                              ; preds = %283, %279
  call void @_ZNSt15__new_allocatorIN3imp4Vec3EED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %29) #4
  call void @llvm.lifetime.end.p0(i64 1, ptr %29) #4
  %288 = getelementptr inbounds [2 x %"class.imp::Vec3"], ptr %28, i32 0, i32 0
  %289 = getelementptr inbounds %"class.imp::Vec3", ptr %288, i64 2
  br label %290

290:                                              ; preds = %290, %287
  %291 = phi ptr [ %289, %287 ], [ %292, %290 ]
  %292 = getelementptr inbounds %"class.imp::Vec3", ptr %291, i64 -1
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(36) %292) #4
  %293 = icmp eq ptr %292, %288
  br i1 %293, label %294, label %290

294:                                              ; preds = %290
  call void @llvm.lifetime.end.p0(i64 80, ptr %28) #4
  call void @llvm.lifetime.end.p0(i64 24, ptr %26) #4
  br label %371

295:                                              ; preds = %245, %244, %243, %242, %241, %222
  %296 = landingpad { ptr, i32 }
          cleanup
  %297 = extractvalue { ptr, i32 } %296, 0
  store ptr %297, ptr %6, align 8
  %298 = extractvalue { ptr, i32 } %296, 1
  store i32 %298, ptr %7, align 4
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(36) %32) #4
  call void @llvm.lifetime.end.p0(i64 40, ptr %32) #4
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(36) %31) #4
  call void @llvm.lifetime.end.p0(i64 40, ptr %31) #4
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(36) %30) #4
  call void @llvm.lifetime.end.p0(i64 40, ptr %30) #4
  br label %371

299:                                              ; preds = %246, %217
  %300 = load ptr, ptr %4, align 8, !tbaa !5
  %301 = getelementptr inbounds %"class.imp::Geometry", ptr %300, i32 0, i32 11
  %302 = load i8, ptr %301, align 1, !tbaa !40, !range !29, !noundef !30
  %303 = trunc i8 %302 to i1
  br i1 %303, label %304, label %333

304:                                              ; preds = %299
  call void @llvm.lifetime.start.p0(i64 40, ptr %33) #4
  %305 = load ptr, ptr %4, align 8, !tbaa !5
  %306 = getelementptr inbounds %"class.imp::Geometry", ptr %305, i32 0, i32 6
  %307 = load i32, ptr %14, align 4, !tbaa !31
  %308 = add nsw i32 %307, 0
  %309 = sext i32 %308 to i64
  %310 = call noundef nonnull align 8 dereferenceable(36) ptr @_ZNKSt6vectorIN3imp4Vec3ESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %306, i64 noundef %309) #4
  call void @_ZN3imp4Vec3C2ERKS0_(ptr noundef nonnull align 8 dereferenceable(36) %33, ptr noundef nonnull align 8 dereferenceable(36) %310) #4
  call void @llvm.lifetime.start.p0(i64 40, ptr %34) #4
  %311 = load ptr, ptr %4, align 8, !tbaa !5
  %312 = getelementptr inbounds %"class.imp::Geometry", ptr %311, i32 0, i32 6
  %313 = load i32, ptr %14, align 4, !tbaa !31
  %314 = add nsw i32 %313, 1
  %315 = sext i32 %314 to i64
  %316 = call noundef nonnull align 8 dereferenceable(36) ptr @_ZNKSt6vectorIN3imp4Vec3ESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %312, i64 noundef %315) #4
  call void @_ZN3imp4Vec3C2ERKS0_(ptr noundef nonnull align 8 dereferenceable(36) %34, ptr noundef nonnull align 8 dereferenceable(36) %316) #4
  call void @llvm.lifetime.start.p0(i64 40, ptr %35) #4
  %317 = load ptr, ptr %4, align 8, !tbaa !5
  %318 = getelementptr inbounds %"class.imp::Geometry", ptr %317, i32 0, i32 6
  %319 = load i32, ptr %14, align 4, !tbaa !31
  %320 = add nsw i32 %319, 2
  %321 = sext i32 %320 to i64
  %322 = call noundef nonnull align 8 dereferenceable(36) ptr @_ZNKSt6vectorIN3imp4Vec3ESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %318, i64 noundef %321) #4
  call void @_ZN3imp4Vec3C2ERKS0_(ptr noundef nonnull align 8 dereferenceable(36) %35, ptr noundef nonnull align 8 dereferenceable(36) %322) #4
  invoke void @_ZNSt6vectorIN3imp4Vec3ESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %11, ptr noundef nonnull align 8 dereferenceable(36) %33)
          to label %323 unwind label %329

323:                                              ; preds = %304
  invoke void @_ZNSt6vectorIN3imp4Vec3ESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %11, ptr noundef nonnull align 8 dereferenceable(36) %34)
          to label %324 unwind label %329

324:                                              ; preds = %323
  invoke void @_ZNSt6vectorIN3imp4Vec3ESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %11, ptr noundef nonnull align 8 dereferenceable(36) %33)
          to label %325 unwind label %329

325:                                              ; preds = %324
  invoke void @_ZNSt6vectorIN3imp4Vec3ESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %11, ptr noundef nonnull align 8 dereferenceable(36) %35)
          to label %326 unwind label %329

326:                                              ; preds = %325
  invoke void @_ZNSt6vectorIN3imp4Vec3ESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %11, ptr noundef nonnull align 8 dereferenceable(36) %34)
          to label %327 unwind label %329

327:                                              ; preds = %326
  invoke void @_ZNSt6vectorIN3imp4Vec3ESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %11, ptr noundef nonnull align 8 dereferenceable(36) %35)
          to label %328 unwind label %329

328:                                              ; preds = %327
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(36) %35) #4
  call void @llvm.lifetime.end.p0(i64 40, ptr %35) #4
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(36) %34) #4
  call void @llvm.lifetime.end.p0(i64 40, ptr %34) #4
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(36) %33) #4
  call void @llvm.lifetime.end.p0(i64 40, ptr %33) #4
  br label %333

329:                                              ; preds = %327, %326, %325, %324, %323, %304
  %330 = landingpad { ptr, i32 }
          cleanup
  %331 = extractvalue { ptr, i32 } %330, 0
  store ptr %331, ptr %6, align 8
  %332 = extractvalue { ptr, i32 } %330, 1
  store i32 %332, ptr %7, align 4
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(36) %35) #4
  call void @llvm.lifetime.end.p0(i64 40, ptr %35) #4
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(36) %34) #4
  call void @llvm.lifetime.end.p0(i64 40, ptr %34) #4
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(36) %33) #4
  call void @llvm.lifetime.end.p0(i64 40, ptr %33) #4
  br label %371

333:                                              ; preds = %328, %299
  %334 = load ptr, ptr %4, align 8, !tbaa !5
  %335 = getelementptr inbounds %"class.imp::Geometry", ptr %334, i32 0, i32 9
  %336 = load i8, ptr %335, align 1, !tbaa !41, !range !29, !noundef !30
  %337 = trunc i8 %336 to i1
  br i1 %337, label %338, label %367

338:                                              ; preds = %333
  call void @llvm.lifetime.start.p0(i64 32, ptr %36) #4
  %339 = load ptr, ptr %4, align 8, !tbaa !5
  %340 = getelementptr inbounds %"class.imp::Geometry", ptr %339, i32 0, i32 7
  %341 = load i32, ptr %14, align 4, !tbaa !31
  %342 = add nsw i32 %341, 0
  %343 = sext i32 %342 to i64
  %344 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNKSt6vectorIN3imp3VecILi2EfEESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %340, i64 noundef %343) #4
  call void @_ZN3imp3VecILi2EfEC2ERKS1_(ptr noundef nonnull align 8 dereferenceable(32) %36, ptr noundef nonnull align 8 dereferenceable(32) %344) #4
  call void @llvm.lifetime.start.p0(i64 32, ptr %37) #4
  %345 = load ptr, ptr %4, align 8, !tbaa !5
  %346 = getelementptr inbounds %"class.imp::Geometry", ptr %345, i32 0, i32 7
  %347 = load i32, ptr %14, align 4, !tbaa !31
  %348 = add nsw i32 %347, 1
  %349 = sext i32 %348 to i64
  %350 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNKSt6vectorIN3imp3VecILi2EfEESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %346, i64 noundef %349) #4
  call void @_ZN3imp3VecILi2EfEC2ERKS1_(ptr noundef nonnull align 8 dereferenceable(32) %37, ptr noundef nonnull align 8 dereferenceable(32) %350) #4
  call void @llvm.lifetime.start.p0(i64 32, ptr %38) #4
  %351 = load ptr, ptr %4, align 8, !tbaa !5
  %352 = getelementptr inbounds %"class.imp::Geometry", ptr %351, i32 0, i32 7
  %353 = load i32, ptr %14, align 4, !tbaa !31
  %354 = add nsw i32 %353, 2
  %355 = sext i32 %354 to i64
  %356 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNKSt6vectorIN3imp3VecILi2EfEESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %352, i64 noundef %355) #4
  call void @_ZN3imp3VecILi2EfEC2ERKS1_(ptr noundef nonnull align 8 dereferenceable(32) %38, ptr noundef nonnull align 8 dereferenceable(32) %356) #4
  invoke void @_ZNSt6vectorIN3imp3VecILi2EfEESaIS2_EE9push_backERKS2_(ptr noundef nonnull align 8 dereferenceable(24) %12, ptr noundef nonnull align 8 dereferenceable(32) %36)
          to label %357 unwind label %363

357:                                              ; preds = %338
  invoke void @_ZNSt6vectorIN3imp3VecILi2EfEESaIS2_EE9push_backERKS2_(ptr noundef nonnull align 8 dereferenceable(24) %12, ptr noundef nonnull align 8 dereferenceable(32) %37)
          to label %358 unwind label %363

358:                                              ; preds = %357
  invoke void @_ZNSt6vectorIN3imp3VecILi2EfEESaIS2_EE9push_backERKS2_(ptr noundef nonnull align 8 dereferenceable(24) %12, ptr noundef nonnull align 8 dereferenceable(32) %36)
          to label %359 unwind label %363

359:                                              ; preds = %358
  invoke void @_ZNSt6vectorIN3imp3VecILi2EfEESaIS2_EE9push_backERKS2_(ptr noundef nonnull align 8 dereferenceable(24) %12, ptr noundef nonnull align 8 dereferenceable(32) %38)
          to label %360 unwind label %363

360:                                              ; preds = %359
  invoke void @_ZNSt6vectorIN3imp3VecILi2EfEESaIS2_EE9push_backERKS2_(ptr noundef nonnull align 8 dereferenceable(24) %12, ptr noundef nonnull align 8 dereferenceable(32) %37)
          to label %361 unwind label %363

361:                                              ; preds = %360
  invoke void @_ZNSt6vectorIN3imp3VecILi2EfEESaIS2_EE9push_backERKS2_(ptr noundef nonnull align 8 dereferenceable(24) %12, ptr noundef nonnull align 8 dereferenceable(32) %38)
          to label %362 unwind label %363

362:                                              ; preds = %361
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %38) #4
  call void @llvm.lifetime.end.p0(i64 32, ptr %38) #4
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %37) #4
  call void @llvm.lifetime.end.p0(i64 32, ptr %37) #4
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %36) #4
  call void @llvm.lifetime.end.p0(i64 32, ptr %36) #4
  br label %367

363:                                              ; preds = %361, %360, %359, %358, %357, %338
  %364 = landingpad { ptr, i32 }
          cleanup
  %365 = extractvalue { ptr, i32 } %364, 0
  store ptr %365, ptr %6, align 8
  %366 = extractvalue { ptr, i32 } %364, 1
  store i32 %366, ptr %7, align 4
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %38) #4
  call void @llvm.lifetime.end.p0(i64 32, ptr %38) #4
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %37) #4
  call void @llvm.lifetime.end.p0(i64 32, ptr %37) #4
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %36) #4
  call void @llvm.lifetime.end.p0(i64 32, ptr %36) #4
  br label %371

367:                                              ; preds = %362, %333
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(36) %17) #4
  call void @llvm.lifetime.end.p0(i64 40, ptr %17) #4
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(36) %16) #4
  call void @llvm.lifetime.end.p0(i64 40, ptr %16) #4
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(36) %15) #4
  call void @llvm.lifetime.end.p0(i64 40, ptr %15) #4
  br label %368

368:                                              ; preds = %367
  %369 = load i32, ptr %14, align 4, !tbaa !31
  %370 = add nsw i32 %369, 3
  store i32 %370, ptr %14, align 4, !tbaa !31
  br label %147, !llvm.loop !42

371:                                              ; preds = %363, %329, %295, %294, %278, %262
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(36) %17) #4
  call void @llvm.lifetime.end.p0(i64 40, ptr %17) #4
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(36) %16) #4
  call void @llvm.lifetime.end.p0(i64 40, ptr %16) #4
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(36) %15) #4
  call void @llvm.lifetime.end.p0(i64 40, ptr %15) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #4
  br label %401

372:                                              ; preds = %152
  %373 = load ptr, ptr %4, align 8, !tbaa !5
  %374 = getelementptr inbounds %"class.imp::Geometry", ptr %373, i32 0, i32 10
  %375 = load i8, ptr %374, align 2, !tbaa !39, !range !29, !noundef !30
  %376 = trunc i8 %375 to i1
  br i1 %376, label %377, label %383

377:                                              ; preds = %372
  invoke void @_ZN3imp8Geometry9setColorsERKSt6vectorINS_4Vec3ESaIS2_EE(ptr noundef nonnull align 8 dereferenceable(156) %0, ptr noundef nonnull align 8 dereferenceable(24) %10)
          to label %378 unwind label %379

378:                                              ; preds = %377
  br label %383

379:                                              ; preds = %395, %388, %377
  %380 = landingpad { ptr, i32 }
          cleanup
  %381 = extractvalue { ptr, i32 } %380, 0
  store ptr %381, ptr %6, align 8
  %382 = extractvalue { ptr, i32 } %380, 1
  store i32 %382, ptr %7, align 4
  br label %401

383:                                              ; preds = %378, %372
  %384 = load ptr, ptr %4, align 8, !tbaa !5
  %385 = getelementptr inbounds %"class.imp::Geometry", ptr %384, i32 0, i32 11
  %386 = load i8, ptr %385, align 1, !tbaa !40, !range !29, !noundef !30
  %387 = trunc i8 %386 to i1
  br i1 %387, label %388, label %390

388:                                              ; preds = %383
  invoke void @_ZN3imp8Geometry10setNormalsERKSt6vectorINS_4Vec3ESaIS2_EE(ptr noundef nonnull align 8 dereferenceable(156) %0, ptr noundef nonnull align 8 dereferenceable(24) %11)
          to label %389 unwind label %379

389:                                              ; preds = %388
  br label %390

390:                                              ; preds = %389, %383
  %391 = load ptr, ptr %4, align 8, !tbaa !5
  %392 = getelementptr inbounds %"class.imp::Geometry", ptr %391, i32 0, i32 9
  %393 = load i8, ptr %392, align 1, !tbaa !41, !range !29, !noundef !30
  %394 = trunc i8 %393 to i1
  br i1 %394, label %395, label %397

395:                                              ; preds = %390
  invoke void @_ZN3imp8Geometry12setTexCoordsERKSt6vectorINS_3VecILi2EfEESaIS3_EE(ptr noundef nonnull align 8 dereferenceable(156) %0, ptr noundef nonnull align 8 dereferenceable(24) %12)
          to label %396 unwind label %379

396:                                              ; preds = %395
  br label %397

397:                                              ; preds = %396, %390
  store i1 true, ptr %13, align 1
  %398 = load i1, ptr %13, align 1
  br i1 %398, label %400, label %399

399:                                              ; preds = %397
  call void @_ZN3imp8GeometryD2Ev(ptr noundef nonnull align 8 dereferenceable(156) %0) #4
  br label %400

400:                                              ; preds = %399, %397
  call void @_ZNSt6vectorIN3imp3VecILi2EfEESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %12) #4
  call void @llvm.lifetime.end.p0(i64 24, ptr %12) #4
  call void @_ZNSt6vectorIN3imp4Vec3ESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %11) #4
  call void @llvm.lifetime.end.p0(i64 24, ptr %11) #4
  call void @_ZNSt6vectorIN3imp4Vec3ESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %10) #4
  call void @llvm.lifetime.end.p0(i64 24, ptr %10) #4
  br label %403

401:                                              ; preds = %379, %371
  call void @_ZN3imp8GeometryD2Ev(ptr noundef nonnull align 8 dereferenceable(156) %0) #4
  br label %402

402:                                              ; preds = %401, %153
  call void @_ZNSt6vectorIN3imp3VecILi2EfEESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %12) #4
  call void @llvm.lifetime.end.p0(i64 24, ptr %12) #4
  call void @_ZNSt6vectorIN3imp4Vec3ESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %11) #4
  call void @llvm.lifetime.end.p0(i64 24, ptr %11) #4
  call void @_ZNSt6vectorIN3imp4Vec3ESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %10) #4
  call void @llvm.lifetime.end.p0(i64 24, ptr %10) #4
  br label %404

403:                                              ; preds = %400, %144
  ret void

404:                                              ; preds = %402, %59
  %405 = load ptr, ptr %6, align 8
  %406 = load i32, ptr %7, align 4
  %407 = insertvalue { ptr, i32 } poison, ptr %405, 0
  %408 = insertvalue { ptr, i32 } %407, i32 %406, 1
  resume { ptr, i32 } %408
}

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

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

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

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

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

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

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

declare void @_ZN3imp8GeometryC1Ev(ptr)

declare void @_ZN3imp8GeometryC1ERKS0_(ptr, ptr)

attributes #0 = { 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 #1 = { 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 #2 = { 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 #3 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #4 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !28, i64 152}
!10 = !{!"_ZTSN3imp8GeometryE", !11, i64 0, !15, i64 24, !16, i64 32, !20, i64 56, !20, i64 80, !20, i64 104, !24, i64 128, !28, i64 152, !28, i64 153, !28, i64 154, !28, i64 155}
!11 = !{!"_ZTSN3imp6ObjectE", !12, i64 8}
!12 = !{!"_ZTSSt10shared_ptrIN3imp6ObjectEE", !13, i64 0}
!13 = !{!"_ZTSSt12__shared_ptrIN3imp6ObjectELN9__gnu_cxx12_Lock_policyE2EE", !6, i64 0, !14, i64 8}
!14 = !{!"_ZTSSt14__shared_countILN9__gnu_cxx12_Lock_policyE2EE", !6, i64 0}
!15 = !{!"_ZTSN3imp8Geometry9PrimitiveE", !7, i64 0}
!16 = !{!"_ZTSSt6vectorIjSaIjEE", !17, i64 0}
!17 = !{!"_ZTSSt12_Vector_baseIjSaIjEE", !18, i64 0}
!18 = !{!"_ZTSNSt12_Vector_baseIjSaIjEE12_Vector_implE", !19, i64 0}
!19 = !{!"_ZTSNSt12_Vector_baseIjSaIjEE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!20 = !{!"_ZTSSt6vectorIN3imp4Vec3ESaIS1_EE", !21, i64 0}
!21 = !{!"_ZTSSt12_Vector_baseIN3imp4Vec3ESaIS1_EE", !22, i64 0}
!22 = !{!"_ZTSNSt12_Vector_baseIN3imp4Vec3ESaIS1_EE12_Vector_implE", !23, i64 0}
!23 = !{!"_ZTSNSt12_Vector_baseIN3imp4Vec3ESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!24 = !{!"_ZTSSt6vectorIN3imp3VecILi2EfEESaIS2_EE", !25, i64 0}
!25 = !{!"_ZTSSt12_Vector_baseIN3imp3VecILi2EfEESaIS2_EE", !26, i64 0}
!26 = !{!"_ZTSNSt12_Vector_baseIN3imp3VecILi2EfEESaIS2_EE12_Vector_implE", !27, i64 0}
!27 = !{!"_ZTSNSt12_Vector_baseIN3imp3VecILi2EfEESaIS2_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!28 = !{!"bool", !7, i64 0}
!29 = !{i8 0, i8 2}
!30 = !{}
!31 = !{!32, !32, i64 0}
!32 = !{!"int", !7, i64 0}
!33 = distinct !{!33, !34}
!34 = !{!"llvm.loop.mustprogress"}
!35 = !{!36, !6, i64 0}
!36 = !{!"_ZTSSt16initializer_listIN3imp4Vec3EE", !6, i64 0, !37, i64 8}
!37 = !{!"long", !7, i64 0}
!38 = !{!36, !37, i64 8}
!39 = !{!10, !28, i64 154}
!40 = !{!10, !28, i64 155}
!41 = !{!10, !28, i64 153}
!42 = distinct !{!42, !34}


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

%"class.imp::Geometry" = type <{ %"class.imp::Object", i32, [4 x i8], %"class.std::vector", %"class.std::vector.0", %"class.std::vector.0", %"class.std::vector.0", %"class.std::vector.5", i8, i8, i8, i8, [4 x i8] }>
%"class.imp::Object" = type { ptr, %"class.std::shared_ptr" }
%"class.std::shared_ptr" = type { %"class.std::__shared_ptr" }
%"class.std::__shared_ptr" = type { ptr, %"class.std::__shared_count" }
%"class.std::__shared_count" = type { ptr }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl" }
%"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl" = type { %"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl_data" }
%"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.0" = type { %"struct.std::_Vector_base.1" }
%"struct.std::_Vector_base.1" = type { %"struct.std::_Vector_base<imp::Vec3, std::allocator<imp::Vec3>>::_Vector_impl" }
%"struct.std::_Vector_base<imp::Vec3, std::allocator<imp::Vec3>>::_Vector_impl" = type { %"struct.std::_Vector_base<imp::Vec3, std::allocator<imp::Vec3>>::_Vector_impl_data" }
%"struct.std::_Vector_base<imp::Vec3, std::allocator<imp::Vec3>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.5" = type { %"struct.std::_Vector_base.6" }
%"struct.std::_Vector_base.6" = type { %"struct.std::_Vector_base<imp::Vec<2, float>, std::allocator<imp::Vec<2, float>>>::_Vector_impl" }
%"struct.std::_Vector_base<imp::Vec<2, float>, std::allocator<imp::Vec<2, float>>>::_Vector_impl" = type { %"struct.std::_Vector_base<imp::Vec<2, float>, std::allocator<imp::Vec<2, float>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<imp::Vec<2, float>, std::allocator<imp::Vec<2, float>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.imp::Vec3" = type { %"class.imp::Vec.base", [4 x i8] }
%"class.imp::Vec.base" = type <{ %"class.imp::Object", [3 x float] }>
%"class.std::allocator.2" = type { i8 }
%"class.imp::Vec.16" = type { %"class.imp::Object", [2 x float] }

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

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

declare i32 @__gxx_personality_v0(...)

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

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3imp8Geometry12setPrimitiveENS0_9PrimitiveE(ptr noundef nonnull align 8 dereferenceable(156), i32 noundef) local_unnamed_addr #0 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK3imp8Geometry4sizeEv(ptr noundef nonnull align 8 dereferenceable(156)) local_unnamed_addr #0 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(36) ptr @_ZNK3imp8GeometryixEi(ptr noundef nonnull align 8 dereferenceable(156), i32 noundef) local_unnamed_addr #0 align 2

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN3imp8Geometry11intoLineBufERKS0_(ptr dead_on_unwind noalias writable sret(%"class.imp::Geometry") align 8 %0, ptr noundef nonnull align 8 dereferenceable(156) %1) local_unnamed_addr #1 align 2 personality ptr @__gxx_personality_v0 {
  %3 = alloca %"class.std::vector.0", align 8
  %4 = alloca %"class.std::vector.0", align 8
  %5 = alloca %"class.std::vector.5", align 8
  %6 = alloca %"class.imp::Vec3", align 8
  %7 = alloca %"class.imp::Vec3", align 8
  %8 = alloca %"class.imp::Vec3", align 8
  %9 = alloca %"class.std::vector.0", align 8
  %10 = alloca [2 x %"class.imp::Vec3"], align 8
  %11 = alloca %"class.std::allocator.2", align 1
  %12 = alloca %"class.std::vector.0", align 8
  %13 = alloca [2 x %"class.imp::Vec3"], align 8
  %14 = alloca %"class.std::allocator.2", align 1
  %15 = alloca %"class.std::vector.0", align 8
  %16 = alloca [2 x %"class.imp::Vec3"], align 8
  %17 = alloca %"class.std::allocator.2", align 1
  %18 = alloca %"class.imp::Vec3", align 8
  %19 = alloca %"class.imp::Vec3", align 8
  %20 = alloca %"class.imp::Vec3", align 8
  %21 = alloca %"class.imp::Vec3", align 8
  %22 = alloca %"class.imp::Vec3", align 8
  %23 = alloca %"class.imp::Vec3", align 8
  %24 = alloca %"class.imp::Vec.16", align 8
  %25 = alloca %"class.imp::Vec.16", align 8
  %26 = alloca %"class.imp::Vec.16", align 8
  %27 = getelementptr inbounds i8, ptr %1, i64 152
  %28 = load i8, ptr %27, align 8, !tbaa !5, !range !28, !noundef !29
  %29 = trunc nuw i8 %28 to i1
  br i1 %29, label %30, label %69

30:                                               ; preds = %2
  tail call void @_ZN3imp8GeometryC1ERKS0_(ptr noundef nonnull align 8 dereferenceable(156) %0, ptr noundef nonnull align 8 dereferenceable(156) %1)
  tail call void @_ZN3imp8Geometry12setPrimitiveENS0_9PrimitiveE(ptr noundef nonnull align 8 dereferenceable(156) %0, i32 noundef 1)
  %31 = getelementptr inbounds i8, ptr %0, i64 32
  %32 = getelementptr inbounds i8, ptr %1, i64 32
  %33 = tail call noundef i64 @_ZNKSt6vectorIjSaIjEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %32) #4
  %34 = shl i64 %33, 1
  invoke void @_ZNSt6vectorIjSaIjEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24) %31, i64 noundef %34)
          to label %.preheader unwind label %38

.preheader:                                       ; preds = %30
  %35 = tail call noundef i64 @_ZNKSt6vectorIjSaIjEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %32) #4
  %36 = trunc i64 %35 to i32
  %37 = icmp sgt i32 %36, 0
  br i1 %37, label %.lr.ph96, label %.loopexit

38:                                               ; preds = %30
  %39 = landingpad { ptr, i32 }
          cleanup
  tail call void @_ZN3imp8GeometryD2Ev(ptr noundef nonnull align 8 dereferenceable(156) %0) #4
  br label %187

.lr.ph96:                                         ; preds = %.preheader, %.lr.ph96
  %indvars.iv100 = phi i64 [ %indvars.iv.next101, %.lr.ph96 ], [ 0, %.preheader ]
  %indvars.iv98 = phi i64 [ %indvars.iv.next99, %.lr.ph96 ], [ 0, %.preheader ]
  %40 = tail call noundef nonnull align 4 dereferenceable(4) ptr @_ZNKSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %32, i64 noundef %indvars.iv100) #4
  %41 = load i32, ptr %40, align 4, !tbaa !30
  %42 = tail call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %31, i64 noundef %indvars.iv98) #4
  store i32 %41, ptr %42, align 4, !tbaa !30
  %43 = add nuw nsw i64 %indvars.iv100, 1
  %44 = tail call noundef nonnull align 4 dereferenceable(4) ptr @_ZNKSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %32, i64 noundef %43) #4
  %45 = load i32, ptr %44, align 4, !tbaa !30
  %46 = or disjoint i64 %indvars.iv98, 1
  %47 = tail call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %31, i64 noundef %46) #4
  store i32 %45, ptr %47, align 4, !tbaa !30
  %48 = tail call noundef nonnull align 4 dereferenceable(4) ptr @_ZNKSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %32, i64 noundef %43) #4
  %49 = load i32, ptr %48, align 4, !tbaa !30
  %50 = add nuw nsw i64 %indvars.iv98, 2
  %51 = tail call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %31, i64 noundef %50) #4
  store i32 %49, ptr %51, align 4, !tbaa !30
  %52 = add nuw nsw i64 %indvars.iv100, 2
  %53 = tail call noundef nonnull align 4 dereferenceable(4) ptr @_ZNKSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %32, i64 noundef %52) #4
  %54 = load i32, ptr %53, align 4, !tbaa !30
  %55 = add nuw nsw i64 %indvars.iv98, 3
  %56 = tail call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %31, i64 noundef %55) #4
  store i32 %54, ptr %56, align 4, !tbaa !30
  %57 = tail call noundef nonnull align 4 dereferenceable(4) ptr @_ZNKSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %32, i64 noundef %52) #4
  %58 = load i32, ptr %57, align 4, !tbaa !30
  %59 = add nuw nsw i64 %indvars.iv98, 4
  %60 = tail call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %31, i64 noundef %59) #4
  store i32 %58, ptr %60, align 4, !tbaa !30
  %61 = tail call noundef nonnull align 4 dereferenceable(4) ptr @_ZNKSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %32, i64 noundef %indvars.iv100) #4
  %62 = load i32, ptr %61, align 4, !tbaa !30
  %63 = add nuw nsw i64 %indvars.iv98, 5
  %64 = tail call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %31, i64 noundef %63) #4
  store i32 %62, ptr %64, align 4, !tbaa !30
  %indvars.iv.next99 = add nuw nsw i64 %indvars.iv98, 6
  %indvars.iv.next101 = add nuw nsw i64 %indvars.iv100, 3
  %65 = tail call noundef i64 @_ZNKSt6vectorIjSaIjEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %32) #4
  %66 = trunc i64 %65 to i32
  %67 = trunc nuw i64 %indvars.iv.next101 to i32
  %68 = icmp slt i32 %67, %66
  br i1 %68, label %.lr.ph96, label %.loopexit, !llvm.loop !32

69:                                               ; preds = %2
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %3) #4
  call void @_ZNSt6vectorIN3imp4Vec3ESaIS1_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %3) #4
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %4) #4
  call void @_ZNSt6vectorIN3imp4Vec3ESaIS1_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %4) #4
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %5) #4
  call void @_ZNSt6vectorIN3imp3VecILi2EfEESaIS2_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %5) #4
  invoke void @_ZN3imp8GeometryC1Ev(ptr noundef nonnull align 8 dereferenceable(156) %0)
          to label %.preheader92 unwind label %87

.preheader92:                                     ; preds = %69
  %70 = call noundef i32 @_ZNK3imp8Geometry4sizeEv(ptr noundef nonnull align 8 dereferenceable(156) %1)
  %71 = icmp sgt i32 %70, 0
  br i1 %71, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %.preheader92
  %72 = getelementptr inbounds i8, ptr %10, i64 40
  %73 = getelementptr inbounds i8, ptr %13, i64 40
  %74 = getelementptr inbounds i8, ptr %16, i64 40
  %75 = getelementptr inbounds i8, ptr %1, i64 154
  %76 = getelementptr inbounds i8, ptr %1, i64 80
  %77 = getelementptr inbounds i8, ptr %1, i64 155
  %78 = getelementptr inbounds i8, ptr %1, i64 104
  %79 = getelementptr inbounds i8, ptr %1, i64 153
  %80 = getelementptr inbounds i8, ptr %1, i64 128
  %81 = getelementptr inbounds i8, ptr %10, i64 40
  %82 = getelementptr inbounds i8, ptr %13, i64 40
  %83 = getelementptr inbounds i8, ptr %16, i64 40
  br label %89

._crit_edge:                                      ; preds = %166, %.preheader92
  %84 = getelementptr inbounds i8, ptr %1, i64 154
  %85 = load i8, ptr %84, align 2, !tbaa !34, !range !28, !noundef !29
  %86 = trunc nuw i8 %85 to i1
  br i1 %86, label %171, label %174

87:                                               ; preds = %69
  %88 = landingpad { ptr, i32 }
          cleanup
  br label %186

89:                                               ; preds = %.lr.ph, %166
  %indvars.iv = phi i64 [ 0, %.lr.ph ], [ %indvars.iv.next, %166 ]
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %6) #4
  %90 = trunc nuw nsw i64 %indvars.iv to i32
  %91 = call noundef nonnull align 8 dereferenceable(36) ptr @_ZNK3imp8GeometryixEi(ptr noundef nonnull align 8 dereferenceable(156) %1, i32 noundef %90)
  call void @_ZN3imp4Vec3C2ERKS0_(ptr noundef nonnull align 8 dereferenceable(36) %6, ptr noundef nonnull align 8 dereferenceable(36) %91) #4
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %7) #4
  %92 = add nuw nsw i64 %indvars.iv, 1
  %93 = trunc nuw i64 %92 to i32
  %94 = call noundef nonnull align 8 dereferenceable(36) ptr @_ZNK3imp8GeometryixEi(ptr noundef nonnull align 8 dereferenceable(156) %1, i32 noundef %93)
  call void @_ZN3imp4Vec3C2ERKS0_(ptr noundef nonnull align 8 dereferenceable(36) %7, ptr noundef nonnull align 8 dereferenceable(36) %94) #4
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %8) #4
  %95 = add nuw nsw i64 %indvars.iv, 2
  %96 = trunc nuw i64 %95 to i32
  %97 = call noundef nonnull align 8 dereferenceable(36) ptr @_ZNK3imp8GeometryixEi(ptr noundef nonnull align 8 dereferenceable(156) %1, i32 noundef %96)
  call void @_ZN3imp4Vec3C2ERKS0_(ptr noundef nonnull align 8 dereferenceable(36) %8, ptr noundef nonnull align 8 dereferenceable(36) %97) #4
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %9) #4
  call void @llvm.lifetime.start.p0(i64 80, ptr nonnull %10) #4
  call void @_ZN3imp4Vec3C2ERKS0_(ptr noundef nonnull align 8 dereferenceable(36) %10, ptr noundef nonnull align 8 dereferenceable(36) %6) #4
  call void @_ZN3imp4Vec3C2ERKS0_(ptr noundef nonnull align 8 dereferenceable(36) %72, ptr noundef nonnull align 8 dereferenceable(36) %7) #4
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %11) #4
  call void @_ZNSaIN3imp4Vec3EEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %11) #4
  invoke void @_ZNSt6vectorIN3imp4Vec3ESaIS1_EEC2ESt16initializer_listIS1_ERKS2_(ptr noundef nonnull align 8 dereferenceable(24) %9, ptr nonnull %10, i64 2, ptr noundef nonnull align 1 dereferenceable(1) %11)
          to label %98 unwind label %116

98:                                               ; preds = %89
  invoke void @_ZN3imp8Geometry3addERKSt6vectorINS_4Vec3ESaIS2_EE(ptr noundef nonnull align 8 dereferenceable(156) %0, ptr noundef nonnull align 8 dereferenceable(24) %9)
          to label %99 unwind label %118

99:                                               ; preds = %98
  call void @_ZNSt6vectorIN3imp4Vec3ESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %9) #4
  call void @_ZNSt15__new_allocatorIN3imp4Vec3EED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %11) #4
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %11) #4
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(36) %81) #4
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(36) %10) #4
  call void @llvm.lifetime.end.p0(i64 80, ptr nonnull %10) #4
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %9) #4
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %12) #4
  call void @llvm.lifetime.start.p0(i64 80, ptr nonnull %13) #4
  call void @_ZN3imp4Vec3C2ERKS0_(ptr noundef nonnull align 8 dereferenceable(36) %13, ptr noundef nonnull align 8 dereferenceable(36) %6) #4
  call void @_ZN3imp4Vec3C2ERKS0_(ptr noundef nonnull align 8 dereferenceable(36) %73, ptr noundef nonnull align 8 dereferenceable(36) %8) #4
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %14) #4
  call void @_ZNSaIN3imp4Vec3EEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %14) #4
  invoke void @_ZNSt6vectorIN3imp4Vec3ESaIS1_EEC2ESt16initializer_listIS1_ERKS2_(ptr noundef nonnull align 8 dereferenceable(24) %12, ptr nonnull %13, i64 2, ptr noundef nonnull align 1 dereferenceable(1) %14)
          to label %100 unwind label %122

100:                                              ; preds = %99
  invoke void @_ZN3imp8Geometry3addERKSt6vectorINS_4Vec3ESaIS2_EE(ptr noundef nonnull align 8 dereferenceable(156) %0, ptr noundef nonnull align 8 dereferenceable(24) %12)
          to label %101 unwind label %124

101:                                              ; preds = %100
  call void @_ZNSt6vectorIN3imp4Vec3ESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %12) #4
  call void @_ZNSt15__new_allocatorIN3imp4Vec3EED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %14) #4
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %14) #4
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(36) %82) #4
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(36) %13) #4
  call void @llvm.lifetime.end.p0(i64 80, ptr nonnull %13) #4
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %12) #4
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %15) #4
  call void @llvm.lifetime.start.p0(i64 80, ptr nonnull %16) #4
  call void @_ZN3imp4Vec3C2ERKS0_(ptr noundef nonnull align 8 dereferenceable(36) %16, ptr noundef nonnull align 8 dereferenceable(36) %7) #4
  call void @_ZN3imp4Vec3C2ERKS0_(ptr noundef nonnull align 8 dereferenceable(36) %74, ptr noundef nonnull align 8 dereferenceable(36) %8) #4
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %17) #4
  call void @_ZNSaIN3imp4Vec3EEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %17) #4
  invoke void @_ZNSt6vectorIN3imp4Vec3ESaIS1_EEC2ESt16initializer_listIS1_ERKS2_(ptr noundef nonnull align 8 dereferenceable(24) %15, ptr nonnull %16, i64 2, ptr noundef nonnull align 1 dereferenceable(1) %17)
          to label %102 unwind label %128

102:                                              ; preds = %101
  invoke void @_ZN3imp8Geometry3addERKSt6vectorINS_4Vec3ESaIS2_EE(ptr noundef nonnull align 8 dereferenceable(156) %0, ptr noundef nonnull align 8 dereferenceable(24) %15)
          to label %103 unwind label %130

103:                                              ; preds = %102
  call void @_ZNSt6vectorIN3imp4Vec3ESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %15) #4
  call void @_ZNSt15__new_allocatorIN3imp4Vec3EED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %17) #4
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %17) #4
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(36) %83) #4
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(36) %16) #4
  call void @llvm.lifetime.end.p0(i64 80, ptr nonnull %16) #4
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %15) #4
  %104 = load i8, ptr %75, align 2, !tbaa !34, !range !28, !noundef !29
  %105 = trunc nuw i8 %104 to i1
  br i1 %105, label %106, label %136

106:                                              ; preds = %103
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %18) #4
  %107 = call noundef nonnull align 8 dereferenceable(36) ptr @_ZNKSt6vectorIN3imp4Vec3ESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %76, i64 noundef %indvars.iv) #4
  call void @_ZN3imp4Vec3C2ERKS0_(ptr noundef nonnull align 8 dereferenceable(36) %18, ptr noundef nonnull align 8 dereferenceable(36) %107) #4
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %19) #4
  %108 = call noundef nonnull align 8 dereferenceable(36) ptr @_ZNKSt6vectorIN3imp4Vec3ESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %76, i64 noundef %92) #4
  call void @_ZN3imp4Vec3C2ERKS0_(ptr noundef nonnull align 8 dereferenceable(36) %19, ptr noundef nonnull align 8 dereferenceable(36) %108) #4
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %20) #4
  %109 = call noundef nonnull align 8 dereferenceable(36) ptr @_ZNKSt6vectorIN3imp4Vec3ESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %76, i64 noundef %95) #4
  call void @_ZN3imp4Vec3C2ERKS0_(ptr noundef nonnull align 8 dereferenceable(36) %20, ptr noundef nonnull align 8 dereferenceable(36) %109) #4
  invoke void @_ZNSt6vectorIN3imp4Vec3ESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %3, ptr noundef nonnull align 8 dereferenceable(36) %18)
          to label %110 unwind label %134

110:                                              ; preds = %106
  invoke void @_ZNSt6vectorIN3imp4Vec3ESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %3, ptr noundef nonnull align 8 dereferenceable(36) %19)
          to label %111 unwind label %134

111:                                              ; preds = %110
  invoke void @_ZNSt6vectorIN3imp4Vec3ESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %3, ptr noundef nonnull align 8 dereferenceable(36) %18)
          to label %112 unwind label %134

112:                                              ; preds = %111
  invoke void @_ZNSt6vectorIN3imp4Vec3ESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %3, ptr noundef nonnull align 8 dereferenceable(36) %20)
          to label %113 unwind label %134

113:                                              ; preds = %112
  invoke void @_ZNSt6vectorIN3imp4Vec3ESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %3, ptr noundef nonnull align 8 dereferenceable(36) %19)
          to label %114 unwind label %134

114:                                              ; preds = %113
  invoke void @_ZNSt6vectorIN3imp4Vec3ESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %3, ptr noundef nonnull align 8 dereferenceable(36) %20)
          to label %115 unwind label %134

115:                                              ; preds = %114
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(36) %20) #4
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %20) #4
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(36) %19) #4
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %19) #4
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(36) %18) #4
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %18) #4
  br label %136

116:                                              ; preds = %89
  %117 = landingpad { ptr, i32 }
          cleanup
  br label %120

118:                                              ; preds = %98
  %119 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt6vectorIN3imp4Vec3ESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %9) #4
  br label %120

120:                                              ; preds = %118, %116
  %.pn = phi { ptr, i32 } [ %119, %118 ], [ %117, %116 ]
  call void @_ZNSt15__new_allocatorIN3imp4Vec3EED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %11) #4
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %11) #4
  %121 = getelementptr inbounds i8, ptr %10, i64 40
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(36) %121) #4
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(36) %10) #4
  call void @llvm.lifetime.end.p0(i64 80, ptr nonnull %10) #4
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %9) #4
  br label %170

122:                                              ; preds = %99
  %123 = landingpad { ptr, i32 }
          cleanup
  br label %126

124:                                              ; preds = %100
  %125 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt6vectorIN3imp4Vec3ESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %12) #4
  br label %126

126:                                              ; preds = %124, %122
  %.pn82 = phi { ptr, i32 } [ %125, %124 ], [ %123, %122 ]
  call void @_ZNSt15__new_allocatorIN3imp4Vec3EED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %14) #4
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %14) #4
  %127 = getelementptr inbounds i8, ptr %13, i64 40
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(36) %127) #4
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(36) %13) #4
  call void @llvm.lifetime.end.p0(i64 80, ptr nonnull %13) #4
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %12) #4
  br label %170

128:                                              ; preds = %101
  %129 = landingpad { ptr, i32 }
          cleanup
  br label %132

130:                                              ; preds = %102
  %131 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt6vectorIN3imp4Vec3ESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %15) #4
  br label %132

132:                                              ; preds = %130, %128
  %.pn84 = phi { ptr, i32 } [ %131, %130 ], [ %129, %128 ]
  call void @_ZNSt15__new_allocatorIN3imp4Vec3EED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %17) #4
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %17) #4
  %133 = getelementptr inbounds i8, ptr %16, i64 40
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(36) %133) #4
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(36) %16) #4
  call void @llvm.lifetime.end.p0(i64 80, ptr nonnull %16) #4
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %15) #4
  br label %170

134:                                              ; preds = %114, %113, %112, %111, %110, %106
  %135 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(36) %20) #4
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %20) #4
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(36) %19) #4
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %19) #4
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(36) %18) #4
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %18) #4
  br label %170

136:                                              ; preds = %115, %103
  %137 = load i8, ptr %77, align 1, !tbaa !35, !range !28, !noundef !29
  %138 = trunc nuw i8 %137 to i1
  br i1 %138, label %139, label %151

139:                                              ; preds = %136
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %21) #4
  %140 = call noundef nonnull align 8 dereferenceable(36) ptr @_ZNKSt6vectorIN3imp4Vec3ESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %78, i64 noundef %indvars.iv) #4
  call void @_ZN3imp4Vec3C2ERKS0_(ptr noundef nonnull align 8 dereferenceable(36) %21, ptr noundef nonnull align 8 dereferenceable(36) %140) #4
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %22) #4
  %141 = call noundef nonnull align 8 dereferenceable(36) ptr @_ZNKSt6vectorIN3imp4Vec3ESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %78, i64 noundef %92) #4
  call void @_ZN3imp4Vec3C2ERKS0_(ptr noundef nonnull align 8 dereferenceable(36) %22, ptr noundef nonnull align 8 dereferenceable(36) %141) #4
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %23) #4
  %142 = call noundef nonnull align 8 dereferenceable(36) ptr @_ZNKSt6vectorIN3imp4Vec3ESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %78, i64 noundef %95) #4
  call void @_ZN3imp4Vec3C2ERKS0_(ptr noundef nonnull align 8 dereferenceable(36) %23, ptr noundef nonnull align 8 dereferenceable(36) %142) #4
  invoke void @_ZNSt6vectorIN3imp4Vec3ESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(36) %21)
          to label %143 unwind label %149

143:                                              ; preds = %139
  invoke void @_ZNSt6vectorIN3imp4Vec3ESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(36) %22)
          to label %144 unwind label %149

144:                                              ; preds = %143
  invoke void @_ZNSt6vectorIN3imp4Vec3ESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(36) %21)
          to label %145 unwind label %149

145:                                              ; preds = %144
  invoke void @_ZNSt6vectorIN3imp4Vec3ESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(36) %23)
          to label %146 unwind label %149

146:                                              ; preds = %145
  invoke void @_ZNSt6vectorIN3imp4Vec3ESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(36) %22)
          to label %147 unwind label %149

147:                                              ; preds = %146
  invoke void @_ZNSt6vectorIN3imp4Vec3ESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(36) %23)
          to label %148 unwind label %149

148:                                              ; preds = %147
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(36) %23) #4
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %23) #4
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(36) %22) #4
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %22) #4
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(36) %21) #4
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %21) #4
  br label %151

149:                                              ; preds = %147, %146, %145, %144, %143, %139
  %150 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(36) %23) #4
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %23) #4
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(36) %22) #4
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %22) #4
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(36) %21) #4
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %21) #4
  br label %170

151:                                              ; preds = %148, %136
  %152 = load i8, ptr %79, align 1, !tbaa !36, !range !28, !noundef !29
  %153 = trunc nuw i8 %152 to i1
  br i1 %153, label %154, label %166

154:                                              ; preds = %151
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %24) #4
  %155 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNKSt6vectorIN3imp3VecILi2EfEESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %80, i64 noundef %indvars.iv) #4
  call void @_ZN3imp3VecILi2EfEC2ERKS1_(ptr noundef nonnull align 8 dereferenceable(32) %24, ptr noundef nonnull align 8 dereferenceable(32) %155) #4
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %25) #4
  %156 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNKSt6vectorIN3imp3VecILi2EfEESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %80, i64 noundef %92) #4
  call void @_ZN3imp3VecILi2EfEC2ERKS1_(ptr noundef nonnull align 8 dereferenceable(32) %25, ptr noundef nonnull align 8 dereferenceable(32) %156) #4
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %26) #4
  %157 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNKSt6vectorIN3imp3VecILi2EfEESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %80, i64 noundef %95) #4
  call void @_ZN3imp3VecILi2EfEC2ERKS1_(ptr noundef nonnull align 8 dereferenceable(32) %26, ptr noundef nonnull align 8 dereferenceable(32) %157) #4
  invoke void @_ZNSt6vectorIN3imp3VecILi2EfEESaIS2_EE9push_backERKS2_(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(32) %24)
          to label %158 unwind label %164

158:                                              ; preds = %154
  invoke void @_ZNSt6vectorIN3imp3VecILi2EfEESaIS2_EE9push_backERKS2_(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(32) %25)
          to label %159 unwind label %164

159:                                              ; preds = %158
  invoke void @_ZNSt6vectorIN3imp3VecILi2EfEESaIS2_EE9push_backERKS2_(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(32) %24)
          to label %160 unwind label %164

160:                                              ; preds = %159
  invoke void @_ZNSt6vectorIN3imp3VecILi2EfEESaIS2_EE9push_backERKS2_(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(32) %26)
          to label %161 unwind label %164

161:                                              ; preds = %160
  invoke void @_ZNSt6vectorIN3imp3VecILi2EfEESaIS2_EE9push_backERKS2_(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(32) %25)
          to label %162 unwind label %164

162:                                              ; preds = %161
  invoke void @_ZNSt6vectorIN3imp3VecILi2EfEESaIS2_EE9push_backERKS2_(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(32) %26)
          to label %163 unwind label %164

163:                                              ; preds = %162
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %26) #4
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %26) #4
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %25) #4
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %25) #4
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %24) #4
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %24) #4
  br label %166

164:                                              ; preds = %162, %161, %160, %159, %158, %154
  %165 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %26) #4
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %26) #4
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %25) #4
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %25) #4
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %24) #4
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %24) #4
  br label %170

166:                                              ; preds = %163, %151
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(36) %8) #4
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %8) #4
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(36) %7) #4
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %7) #4
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(36) %6) #4
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %6) #4
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 3
  %167 = call noundef i32 @_ZNK3imp8Geometry4sizeEv(ptr noundef nonnull align 8 dereferenceable(156) %1)
  %168 = trunc nuw i64 %indvars.iv.next to i32
  %169 = icmp sgt i32 %167, %168
  br i1 %169, label %89, label %._crit_edge, !llvm.loop !37

170:                                              ; preds = %164, %149, %134, %132, %126, %120
  %.pn86 = phi { ptr, i32 } [ %165, %164 ], [ %150, %149 ], [ %135, %134 ], [ %.pn84, %132 ], [ %.pn82, %126 ], [ %.pn, %120 ]
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(36) %8) #4
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %8) #4
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(36) %7) #4
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %7) #4
  call void @_ZN3imp6ObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(36) %6) #4
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %6) #4
  br label %185

171:                                              ; preds = %._crit_edge
  invoke void @_ZN3imp8Geometry9setColorsERKSt6vectorINS_4Vec3ESaIS2_EE(ptr noundef nonnull align 8 dereferenceable(156) %0, ptr noundef nonnull align 8 dereferenceable(24) %3)
          to label %174 unwind label %172

172:                                              ; preds = %183, %178, %171
  %173 = landingpad { ptr, i32 }
          cleanup
  br label %185

174:                                              ; preds = %171, %._crit_edge
  %175 = getelementptr inbounds i8, ptr %1, i64 155
  %176 = load i8, ptr %175, align 1, !tbaa !35, !range !28, !noundef !29
  %177 = trunc nuw i8 %176 to i1
  br i1 %177, label %178, label %179

178:                                              ; preds = %174
  invoke void @_ZN3imp8Geometry10setNormalsERKSt6vectorINS_4Vec3ESaIS2_EE(ptr noundef nonnull align 8 dereferenceable(156) %0, ptr noundef nonnull align 8 dereferenceable(24) %4)
          to label %179 unwind label %172

179:                                              ; preds = %178, %174
  %180 = getelementptr inbounds i8, ptr %1, i64 153
  %181 = load i8, ptr %180, align 1, !tbaa !36, !range !28, !noundef !29
  %182 = trunc nuw i8 %181 to i1
  br i1 %182, label %183, label %184

183:                                              ; preds = %179
  invoke void @_ZN3imp8Geometry12setTexCoordsERKSt6vectorINS_3VecILi2EfEESaIS3_EE(ptr noundef nonnull align 8 dereferenceable(156) %0, ptr noundef nonnull align 8 dereferenceable(24) %5)
          to label %184 unwind label %172

184:                                              ; preds = %179, %183
  call void @_ZNSt6vectorIN3imp3VecILi2EfEESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %5) #4
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %5) #4
  call void @_ZNSt6vectorIN3imp4Vec3ESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %4) #4
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %4) #4
  call void @_ZNSt6vectorIN3imp4Vec3ESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %3) #4
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %3) #4
  br label %.loopexit

185:                                              ; preds = %172, %170
  %.pn86.pn = phi { ptr, i32 } [ %.pn86, %170 ], [ %173, %172 ]
  call void @_ZN3imp8GeometryD2Ev(ptr noundef nonnull align 8 dereferenceable(156) %0) #4
  br label %186

186:                                              ; preds = %185, %87
  %.pn86.pn.pn = phi { ptr, i32 } [ %.pn86.pn, %185 ], [ %88, %87 ]
  call void @_ZNSt6vectorIN3imp3VecILi2EfEESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %5) #4
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %5) #4
  call void @_ZNSt6vectorIN3imp4Vec3ESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %4) #4
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %4) #4
  call void @_ZNSt6vectorIN3imp4Vec3ESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %3) #4
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %3) #4
  br label %187

.loopexit:                                        ; preds = %.lr.ph96, %.preheader, %184
  ret void

187:                                              ; preds = %186, %38
  %.pn90 = phi { ptr, i32 } [ %39, %38 ], [ %.pn86.pn.pn, %186 ]
  resume { ptr, i32 } %.pn90
}

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

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

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

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

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

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

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

declare void @_ZN3imp8GeometryC1Ev(ptr) local_unnamed_addr

declare void @_ZN3imp8GeometryC1ERKS0_(ptr, ptr) local_unnamed_addr

attributes #0 = { 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 #1 = { 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 #2 = { 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 #3 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #4 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !27, i64 152}
!6 = !{!"_ZTSN3imp8GeometryE", !7, i64 0, !14, i64 24, !15, i64 32, !19, i64 56, !19, i64 80, !19, i64 104, !23, i64 128, !27, i64 152, !27, i64 153, !27, i64 154, !27, i64 155}
!7 = !{!"_ZTSN3imp6ObjectE", !8, i64 8}
!8 = !{!"_ZTSSt10shared_ptrIN3imp6ObjectEE", !9, i64 0}
!9 = !{!"_ZTSSt12__shared_ptrIN3imp6ObjectELN9__gnu_cxx12_Lock_policyE2EE", !10, i64 0, !13, i64 8}
!10 = !{!"any pointer", !11, i64 0}
!11 = !{!"omnipotent char", !12, i64 0}
!12 = !{!"Simple C++ TBAA"}
!13 = !{!"_ZTSSt14__shared_countILN9__gnu_cxx12_Lock_policyE2EE", !10, i64 0}
!14 = !{!"_ZTSN3imp8Geometry9PrimitiveE", !11, i64 0}
!15 = !{!"_ZTSSt6vectorIjSaIjEE", !16, i64 0}
!16 = !{!"_ZTSSt12_Vector_baseIjSaIjEE", !17, i64 0}
!17 = !{!"_ZTSNSt12_Vector_baseIjSaIjEE12_Vector_implE", !18, i64 0}
!18 = !{!"_ZTSNSt12_Vector_baseIjSaIjEE17_Vector_impl_dataE", !10, i64 0, !10, i64 8, !10, i64 16}
!19 = !{!"_ZTSSt6vectorIN3imp4Vec3ESaIS1_EE", !20, i64 0}
!20 = !{!"_ZTSSt12_Vector_baseIN3imp4Vec3ESaIS1_EE", !21, i64 0}
!21 = !{!"_ZTSNSt12_Vector_baseIN3imp4Vec3ESaIS1_EE12_Vector_implE", !22, i64 0}
!22 = !{!"_ZTSNSt12_Vector_baseIN3imp4Vec3ESaIS1_EE17_Vector_impl_dataE", !10, i64 0, !10, i64 8, !10, i64 16}
!23 = !{!"_ZTSSt6vectorIN3imp3VecILi2EfEESaIS2_EE", !24, i64 0}
!24 = !{!"_ZTSSt12_Vector_baseIN3imp3VecILi2EfEESaIS2_EE", !25, i64 0}
!25 = !{!"_ZTSNSt12_Vector_baseIN3imp3VecILi2EfEESaIS2_EE12_Vector_implE", !26, i64 0}
!26 = !{!"_ZTSNSt12_Vector_baseIN3imp3VecILi2EfEESaIS2_EE17_Vector_impl_dataE", !10, i64 0, !10, i64 8, !10, i64 16}
!27 = !{!"bool", !11, i64 0}
!28 = !{i8 0, i8 2}
!29 = !{}
!30 = !{!31, !31, i64 0}
!31 = !{!"int", !11, i64 0}
!32 = distinct !{!32, !33}
!33 = !{!"llvm.loop.mustprogress"}
!34 = !{!6, !27, i64 154}
!35 = !{!6, !27, i64 155}
!36 = !{!6, !27, i64 153}
!37 = distinct !{!37, !33}


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