; LLVM IR from bohanwang/libpgo :: third-party/CCD/ExactCCD (rootparitycollisiontest)

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

%struct.Vec.0 = type { [3 x double] }
%"class.std::vector.6" = type { %"struct.std::_Vector_base.7" }
%"struct.std::_Vector_base.7" = type { %"struct.std::_Vector_base<Vec<3, unsigned int>, std::allocator<Vec<3, unsigned int>>>::_Vector_impl" }
%"struct.std::_Vector_base<Vec<3, unsigned int>, std::allocator<Vec<3, unsigned int>>>::_Vector_impl" = type { %"struct.std::_Vector_base<Vec<3, unsigned int>, std::allocator<Vec<3, unsigned int>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<Vec<3, unsigned int>, std::allocator<Vec<3, unsigned int>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::allocator.8" = type { i8 }
%struct.Vec.4 = type { [3 x i32] }
%"class.std::vector.11" = type { %"struct.std::_Vector_base.12" }
%"struct.std::_Vector_base.12" = type { %"struct.std::_Vector_base<Vec<4, unsigned int>, std::allocator<Vec<4, unsigned int>>>::_Vector_impl" }
%"struct.std::_Vector_base<Vec<4, unsigned int>, std::allocator<Vec<4, unsigned int>>>::_Vector_impl" = type { %"struct.std::_Vector_base<Vec<4, unsigned int>, std::allocator<Vec<4, unsigned int>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<Vec<4, unsigned int>, std::allocator<Vec<4, unsigned int>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::allocator.13" = type { i8 }
%struct.Vec.2 = type { [4 x i32] }
%"class.std::vector.16" = type { %"struct.std::_Bvector_base" }
%"struct.std::_Bvector_base" = type { %"struct.std::_Bvector_base<std::allocator<bool>>::_Bvector_impl" }
%"struct.std::_Bvector_base<std::allocator<bool>>::_Bvector_impl" = type { %"struct.std::_Bvector_base<std::allocator<bool>>::_Bvector_impl_data" }
%"struct.std::_Bvector_base<std::allocator<bool>>::_Bvector_impl_data" = type { %"struct.std::_Bit_iterator", %"struct.std::_Bit_iterator", ptr }
%"struct.std::_Bit_iterator" = type { %"struct.std::_Bit_iterator_base.base", [4 x i8] }
%"struct.std::_Bit_iterator_base.base" = type <{ ptr, i32 }>
%"class.std::allocator.20" = type { i8 }
%struct.Vec.5 = type { [3 x i8] }
%"struct.std::_Bit_reference" = type { ptr, i64 }
%struct.Vec.3 = type { [4 x i8] }
%"class.rootparity::RootParityCollisionTest" = type { ptr, %struct.Vec.0, %struct.Vec.0, %struct.Vec.0, %struct.Vec.0, %struct.Vec.0, %struct.Vec.0, %struct.Vec.0, i8, %struct.Vec.0, [8 x %struct.Vec], [8 x %struct.Vec.1], [8 x i8] }
%struct.Vec = type { [3 x %class.Interval] }
%class.Interval = type { %class.IntervalBase, [2 x double] }
%class.IntervalBase = type { ptr }
%struct.Vec.1 = type { [3 x %class.expansion] }
%class.expansion = type { ptr, %"class.std::vector" }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl" }
%"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl" = type { %"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl_data" }
%"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl_data" = type { ptr, ptr, ptr }

@__const._ZN10rootparity23RootParityCollisionTest21ray_prism_parity_testEv.vertex_ts = external hidden unnamed_addr constant [6 x i8], align 1
@__const._ZN10rootparity23RootParityCollisionTest21ray_prism_parity_testEv.vertex_us = external hidden unnamed_addr constant [6 x i8], align 1
@__const._ZN10rootparity23RootParityCollisionTest21ray_prism_parity_testEv.vertex_vs = external hidden unnamed_addr constant [6 x i8], align 1

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

declare i32 @__gxx_personality_v0(...)

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3VecILj3EjEixEi(ptr noundef nonnull align 4 dereferenceable(12), i32 noundef) #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZN10rootparity23RootParityCollisionTest28ray_quad_intersection_parityERK3VecILj4EjERKS1_ILj4EbES7_S7_RKS1_ILj3EdESA_RbSB_(ptr noundef nonnull align 8 dereferenceable(1560), ptr noundef nonnull align 4 dereferenceable(16), ptr noundef nonnull align 1 dereferenceable(4), ptr noundef nonnull align 1 dereferenceable(4), ptr noundef nonnull align 1 dereferenceable(4), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 1 dereferenceable(1), ptr noundef nonnull align 1 dereferenceable(1)) #2 align 2

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3VecILj3EbEC2Ebbb(ptr noundef nonnull align 1 dereferenceable(3), i1 noundef zeroext, i1 noundef zeroext, i1 noundef zeroext) unnamed_addr #1 align 2

; Function Attrs: mustprogress uwtable
define dso_local noundef zeroext i1 @_ZN10rootparity23RootParityCollisionTest21ray_prism_parity_testEv(ptr noundef nonnull align 8 dereferenceable(1560) %0) #2 align 2 personality ptr @__gxx_personality_v0 {
  %2 = alloca i1, align 1
  %3 = alloca ptr, align 8
  %4 = alloca %struct.Vec.0, align 8
  %5 = alloca double, align 8
  %6 = alloca %"class.std::vector.6", align 8
  %7 = alloca %"class.std::allocator.8", align 1
  %8 = alloca ptr, align 8
  %9 = alloca i32, align 4
  %10 = alloca %struct.Vec.4, align 4
  %11 = alloca %struct.Vec.4, align 4
  %12 = alloca %"class.std::vector.11", align 8
  %13 = alloca %"class.std::allocator.13", align 1
  %14 = alloca %struct.Vec.2, align 4
  %15 = alloca %struct.Vec.2, align 4
  %16 = alloca %struct.Vec.2, align 4
  %17 = alloca [6 x i8], align 1
  %18 = alloca [6 x i8], align 1
  %19 = alloca [6 x i8], align 1
  %20 = alloca %"class.std::vector.16", align 8
  %21 = alloca i8, align 1
  %22 = alloca %"class.std::allocator.20", align 1
  %23 = alloca %"class.std::vector.16", align 8
  %24 = alloca i8, align 1
  %25 = alloca %"class.std::allocator.20", align 1
  %26 = alloca i8, align 1
  %27 = alloca i32, align 4
  %28 = alloca i32, align 4
  %29 = alloca i32, align 4
  %30 = alloca ptr, align 8
  %31 = alloca [5 x double], align 16
  %32 = alloca %struct.Vec.5, align 1
  %33 = alloca %struct.Vec.5, align 1
  %34 = alloca %struct.Vec.5, align 1
  %35 = alloca %struct.Vec.0, align 8
  %36 = alloca %"struct.std::_Bit_reference", align 8
  %37 = alloca %"struct.std::_Bit_reference", align 8
  %38 = alloca i32, align 4
  %39 = alloca ptr, align 8
  %40 = alloca i8, align 1
  %41 = alloca i8, align 1
  %42 = alloca %struct.Vec.3, align 1
  %43 = alloca %struct.Vec.3, align 1
  %44 = alloca %struct.Vec.3, align 1
  %45 = alloca %struct.Vec.0, align 8
  %46 = alloca %"struct.std::_Bit_reference", align 8
  %47 = alloca double, align 8
  %48 = alloca i32, align 4
  %49 = alloca i32, align 4
  %50 = alloca %"struct.std::_Bit_reference", align 8
  %51 = alloca i32, align 4
  %52 = alloca %"struct.std::_Bit_reference", align 8
  store ptr %0, ptr %3, align 8, !tbaa !5
  %53 = load ptr, ptr %3, align 8
  call void @llvm.lifetime.start.p0(i64 24, ptr %4) #6
  %54 = getelementptr inbounds %"class.rootparity::RootParityCollisionTest", ptr %53, i32 0, i32 9
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %4, ptr align 8 %54, i64 24, i1 false), !tbaa.struct !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %5) #6
  %55 = call noundef double @_Z3magILj3EdET0_RK3VecIXT_ES0_E(ptr noundef nonnull align 8 dereferenceable(24) %4)
  store double %55, ptr %5, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 24, ptr %6) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr %7) #6
  call void @_ZNSaI3VecILj3EjEEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %7) #6
  invoke void @_ZNSt6vectorI3VecILj3EjESaIS1_EEC2EmRKS2_(ptr noundef nonnull align 8 dereferenceable(24) %6, i64 noundef 2, ptr noundef nonnull align 1 dereferenceable(1) %7)
          to label %56 unwind label %86

56:                                               ; preds = %1
  call void @_ZNSt15__new_allocatorI3VecILj3EjEED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %7) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %7) #6
  call void @llvm.lifetime.start.p0(i64 12, ptr %10) #6
  invoke void @_ZN3VecILj3EjEC2Ejjj(ptr noundef nonnull align 4 dereferenceable(12) %10, i32 noundef 0, i32 noundef 1, i32 noundef 2)
          to label %57 unwind label %90

57:                                               ; preds = %56
  %58 = call noundef nonnull align 4 dereferenceable(12) ptr @_ZNSt6vectorI3VecILj3EjESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %6, i64 noundef 0) #6
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %58, ptr align 4 %10, i64 12, i1 false), !tbaa.struct !13
  call void @llvm.lifetime.end.p0(i64 12, ptr %10) #6
  call void @llvm.lifetime.start.p0(i64 12, ptr %11) #6
  invoke void @_ZN3VecILj3EjEC2Ejjj(ptr noundef nonnull align 4 dereferenceable(12) %11, i32 noundef 3, i32 noundef 4, i32 noundef 5)
          to label %59 unwind label %94

59:                                               ; preds = %57
  %60 = call noundef nonnull align 4 dereferenceable(12) ptr @_ZNSt6vectorI3VecILj3EjESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %6, i64 noundef 1) #6
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %60, ptr align 4 %11, i64 12, i1 false), !tbaa.struct !13
  call void @llvm.lifetime.end.p0(i64 12, ptr %11) #6
  call void @llvm.lifetime.start.p0(i64 24, ptr %12) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr %13) #6
  call void @_ZNSaI3VecILj4EjEEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %13) #6
  invoke void @_ZNSt6vectorI3VecILj4EjESaIS1_EEC2EmRKS2_(ptr noundef nonnull align 8 dereferenceable(24) %12, i64 noundef 3, ptr noundef nonnull align 1 dereferenceable(1) %13)
          to label %61 unwind label %98

61:                                               ; preds = %59
  call void @_ZNSt15__new_allocatorI3VecILj4EjEED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %13) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %13) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr %14) #6
  invoke void @_ZN3VecILj4EjEC2Ejjjj(ptr noundef nonnull align 4 dereferenceable(16) %14, i32 noundef 0, i32 noundef 1, i32 noundef 3, i32 noundef 4)
          to label %62 unwind label %102

62:                                               ; preds = %61
  %63 = call noundef nonnull align 4 dereferenceable(16) ptr @_ZNSt6vectorI3VecILj4EjESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %12, i64 noundef 0) #6
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %63, ptr align 4 %14, i64 16, i1 false), !tbaa.struct !14
  call void @llvm.lifetime.end.p0(i64 16, ptr %14) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr %15) #6
  invoke void @_ZN3VecILj4EjEC2Ejjjj(ptr noundef nonnull align 4 dereferenceable(16) %15, i32 noundef 1, i32 noundef 2, i32 noundef 4, i32 noundef 5)
          to label %64 unwind label %106

64:                                               ; preds = %62
  %65 = call noundef nonnull align 4 dereferenceable(16) ptr @_ZNSt6vectorI3VecILj4EjESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %12, i64 noundef 1) #6
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %65, ptr align 4 %15, i64 16, i1 false), !tbaa.struct !14
  call void @llvm.lifetime.end.p0(i64 16, ptr %15) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr %16) #6
  invoke void @_ZN3VecILj4EjEC2Ejjjj(ptr noundef nonnull align 4 dereferenceable(16) %16, i32 noundef 0, i32 noundef 2, i32 noundef 3, i32 noundef 5)
          to label %66 unwind label %110

66:                                               ; preds = %64
  %67 = call noundef nonnull align 4 dereferenceable(16) ptr @_ZNSt6vectorI3VecILj4EjESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %12, i64 noundef 2) #6
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %67, ptr align 4 %16, i64 16, i1 false), !tbaa.struct !14
  call void @llvm.lifetime.end.p0(i64 16, ptr %16) #6
  call void @llvm.lifetime.start.p0(i64 6, ptr %17) #6
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %17, ptr align 1 @__const._ZN10rootparity23RootParityCollisionTest21ray_prism_parity_testEv.vertex_ts, i64 6, i1 false)
  call void @llvm.lifetime.start.p0(i64 6, ptr %18) #6
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %18, ptr align 1 @__const._ZN10rootparity23RootParityCollisionTest21ray_prism_parity_testEv.vertex_us, i64 6, i1 false)
  call void @llvm.lifetime.start.p0(i64 6, ptr %19) #6
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %19, ptr align 1 @__const._ZN10rootparity23RootParityCollisionTest21ray_prism_parity_testEv.vertex_vs, i64 6, i1 false)
  call void @llvm.lifetime.start.p0(i64 40, ptr %20) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr %21) #6
  store i8 0, ptr %21, align 1, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 1, ptr %22) #6
  call void @_ZNSaIbEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %22) #6
  invoke void @_ZNSt6vectorIbSaIbEEC2EmRKbRKS0_(ptr noundef nonnull align 8 dereferenceable(40) %20, i64 noundef 2, ptr noundef nonnull align 1 dereferenceable(1) %21, ptr noundef nonnull align 1 dereferenceable(1) %22)
          to label %68 unwind label %114

68:                                               ; preds = %66
  call void @_ZNSt15__new_allocatorIbED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %22) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %22) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %21) #6
  call void @llvm.lifetime.start.p0(i64 40, ptr %23) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr %24) #6
  store i8 0, ptr %24, align 1, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 1, ptr %25) #6
  call void @_ZNSaIbEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %25) #6
  invoke void @_ZNSt6vectorIbSaIbEEC2EmRKbRKS0_(ptr noundef nonnull align 8 dereferenceable(40) %23, i64 noundef 3, ptr noundef nonnull align 1 dereferenceable(1) %24, ptr noundef nonnull align 1 dereferenceable(1) %25)
          to label %69 unwind label %118

69:                                               ; preds = %68
  call void @_ZNSt15__new_allocatorIbED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %25) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %25) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %24) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr %26) #6
  store i8 0, ptr %26, align 1, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #6
  store i32 0, ptr %27, align 4, !tbaa !17
  br label %70

70:                                               ; preds = %498, %69
  %71 = load i8, ptr %26, align 1, !tbaa !15, !range !19, !noundef !20
  %72 = trunc i8 %71 to i1
  br i1 %72, label %77, label %73

73:                                               ; preds = %70
  %74 = load i32, ptr %27, align 4, !tbaa !17
  %75 = add i32 %74, 1
  store i32 %75, ptr %27, align 4, !tbaa !17
  %76 = icmp ult i32 %74, 10
  br label %77

77:                                               ; preds = %73, %70
  %78 = phi i1 [ false, %70 ], [ %76, %73 ]
  br i1 %78, label %79, label %499

79:                                               ; preds = %77
  store i8 1, ptr %26, align 1, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #6
  store i32 0, ptr %28, align 4, !tbaa !17
  br label %80

80:                                               ; preds = %301, %79
  %81 = load i32, ptr %28, align 4, !tbaa !17
  %82 = zext i32 %81 to i64
  %83 = call noundef i64 @_ZNKSt6vectorI3VecILj3EjESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %6) #6
  %84 = icmp ult i64 %82, %83
  br i1 %84, label %122, label %85

85:                                               ; preds = %80
  store i32 4, ptr %29, align 4
  br label %307

86:                                               ; preds = %1
  %87 = landingpad { ptr, i32 }
          cleanup
  %88 = extractvalue { ptr, i32 } %87, 0
  store ptr %88, ptr %8, align 8
  %89 = extractvalue { ptr, i32 } %87, 1
  store i32 %89, ptr %9, align 4
  call void @_ZNSt15__new_allocatorI3VecILj3EjEED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %7) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %7) #6
  br label %572

90:                                               ; preds = %56
  %91 = landingpad { ptr, i32 }
          cleanup
  %92 = extractvalue { ptr, i32 } %91, 0
  store ptr %92, ptr %8, align 8
  %93 = extractvalue { ptr, i32 } %91, 1
  store i32 %93, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 12, ptr %10) #6
  br label %571

94:                                               ; preds = %57
  %95 = landingpad { ptr, i32 }
          cleanup
  %96 = extractvalue { ptr, i32 } %95, 0
  store ptr %96, ptr %8, align 8
  %97 = extractvalue { ptr, i32 } %95, 1
  store i32 %97, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 12, ptr %11) #6
  br label %571

98:                                               ; preds = %59
  %99 = landingpad { ptr, i32 }
          cleanup
  %100 = extractvalue { ptr, i32 } %99, 0
  store ptr %100, ptr %8, align 8
  %101 = extractvalue { ptr, i32 } %99, 1
  store i32 %101, ptr %9, align 4
  call void @_ZNSt15__new_allocatorI3VecILj4EjEED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %13) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %13) #6
  br label %570

102:                                              ; preds = %61
  %103 = landingpad { ptr, i32 }
          cleanup
  %104 = extractvalue { ptr, i32 } %103, 0
  store ptr %104, ptr %8, align 8
  %105 = extractvalue { ptr, i32 } %103, 1
  store i32 %105, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %14) #6
  br label %569

106:                                              ; preds = %62
  %107 = landingpad { ptr, i32 }
          cleanup
  %108 = extractvalue { ptr, i32 } %107, 0
  store ptr %108, ptr %8, align 8
  %109 = extractvalue { ptr, i32 } %107, 1
  store i32 %109, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %15) #6
  br label %569

110:                                              ; preds = %64
  %111 = landingpad { ptr, i32 }
          cleanup
  %112 = extractvalue { ptr, i32 } %111, 0
  store ptr %112, ptr %8, align 8
  %113 = extractvalue { ptr, i32 } %111, 1
  store i32 %113, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %16) #6
  br label %569

114:                                              ; preds = %66
  %115 = landingpad { ptr, i32 }
          cleanup
  %116 = extractvalue { ptr, i32 } %115, 0
  store ptr %116, ptr %8, align 8
  %117 = extractvalue { ptr, i32 } %115, 1
  store i32 %117, ptr %9, align 4
  call void @_ZNSt15__new_allocatorIbED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %22) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %22) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %21) #6
  br label %568

118:                                              ; preds = %68
  %119 = landingpad { ptr, i32 }
          cleanup
  %120 = extractvalue { ptr, i32 } %119, 0
  store ptr %120, ptr %8, align 8
  %121 = extractvalue { ptr, i32 } %119, 1
  store i32 %121, ptr %9, align 4
  call void @_ZNSt15__new_allocatorIbED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %25) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %25) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %24) #6
  br label %567

122:                                              ; preds = %80
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #6
  %123 = load i32, ptr %28, align 4, !tbaa !17
  %124 = zext i32 %123 to i64
  %125 = call noundef nonnull align 4 dereferenceable(12) ptr @_ZNSt6vectorI3VecILj3EjESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %6, i64 noundef %124) #6
  store ptr %125, ptr %30, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 40, ptr %31) #6
  call void @llvm.memset.p0.i64(ptr align 16 %31, i8 0, i64 40, i1 false)
  %126 = getelementptr inbounds [5 x double], ptr %31, i32 0, i32 0
  store double 5.000000e-01, ptr %126, align 16
  %127 = getelementptr inbounds [5 x double], ptr %31, i32 0, i32 1
  store double 5.000000e-01, ptr %127, align 8
  %128 = getelementptr inbounds [5 x double], ptr %31, i32 0, i32 2
  store double 5.000000e-01, ptr %128, align 16
  %129 = getelementptr inbounds [5 x double], ptr %31, i32 0, i32 3
  store double 5.000000e-01, ptr %129, align 8
  %130 = getelementptr inbounds [5 x double], ptr %31, i32 0, i32 4
  store double 5.000000e-01, ptr %130, align 16
  call void @llvm.lifetime.start.p0(i64 3, ptr %32) #6
  %131 = load ptr, ptr %30, align 8, !tbaa !5
  %132 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3VecILj3EjEixEi(ptr noundef nonnull align 4 dereferenceable(12) %131, i32 noundef 0)
          to label %133 unwind label %253

133:                                              ; preds = %122
  %134 = load i32, ptr %132, align 4, !tbaa !17
  %135 = zext i32 %134 to i64
  %136 = getelementptr inbounds [6 x i8], ptr %17, i64 0, i64 %135
  %137 = load i8, ptr %136, align 1, !tbaa !15, !range !19, !noundef !20
  %138 = trunc i8 %137 to i1
  %139 = load ptr, ptr %30, align 8, !tbaa !5
  %140 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3VecILj3EjEixEi(ptr noundef nonnull align 4 dereferenceable(12) %139, i32 noundef 1)
          to label %141 unwind label %253

141:                                              ; preds = %133
  %142 = load i32, ptr %140, align 4, !tbaa !17
  %143 = zext i32 %142 to i64
  %144 = getelementptr inbounds [6 x i8], ptr %17, i64 0, i64 %143
  %145 = load i8, ptr %144, align 1, !tbaa !15, !range !19, !noundef !20
  %146 = trunc i8 %145 to i1
  %147 = load ptr, ptr %30, align 8, !tbaa !5
  %148 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3VecILj3EjEixEi(ptr noundef nonnull align 4 dereferenceable(12) %147, i32 noundef 2)
          to label %149 unwind label %253

149:                                              ; preds = %141
  %150 = load i32, ptr %148, align 4, !tbaa !17
  %151 = zext i32 %150 to i64
  %152 = getelementptr inbounds [6 x i8], ptr %17, i64 0, i64 %151
  %153 = load i8, ptr %152, align 1, !tbaa !15, !range !19, !noundef !20
  %154 = trunc i8 %153 to i1
  invoke void @_ZN3VecILj3EbEC2Ebbb(ptr noundef nonnull align 1 dereferenceable(3) %32, i1 noundef zeroext %138, i1 noundef zeroext %146, i1 noundef zeroext %154)
          to label %155 unwind label %253

155:                                              ; preds = %149
  call void @llvm.lifetime.start.p0(i64 3, ptr %33) #6
  %156 = load ptr, ptr %30, align 8, !tbaa !5
  %157 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3VecILj3EjEixEi(ptr noundef nonnull align 4 dereferenceable(12) %156, i32 noundef 0)
          to label %158 unwind label %257

158:                                              ; preds = %155
  %159 = load i32, ptr %157, align 4, !tbaa !17
  %160 = zext i32 %159 to i64
  %161 = getelementptr inbounds [6 x i8], ptr %18, i64 0, i64 %160
  %162 = load i8, ptr %161, align 1, !tbaa !15, !range !19, !noundef !20
  %163 = trunc i8 %162 to i1
  %164 = load ptr, ptr %30, align 8, !tbaa !5
  %165 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3VecILj3EjEixEi(ptr noundef nonnull align 4 dereferenceable(12) %164, i32 noundef 1)
          to label %166 unwind label %257

166:                                              ; preds = %158
  %167 = load i32, ptr %165, align 4, !tbaa !17
  %168 = zext i32 %167 to i64
  %169 = getelementptr inbounds [6 x i8], ptr %18, i64 0, i64 %168
  %170 = load i8, ptr %169, align 1, !tbaa !15, !range !19, !noundef !20
  %171 = trunc i8 %170 to i1
  %172 = load ptr, ptr %30, align 8, !tbaa !5
  %173 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3VecILj3EjEixEi(ptr noundef nonnull align 4 dereferenceable(12) %172, i32 noundef 2)
          to label %174 unwind label %257

174:                                              ; preds = %166
  %175 = load i32, ptr %173, align 4, !tbaa !17
  %176 = zext i32 %175 to i64
  %177 = getelementptr inbounds [6 x i8], ptr %18, i64 0, i64 %176
  %178 = load i8, ptr %177, align 1, !tbaa !15, !range !19, !noundef !20
  %179 = trunc i8 %178 to i1
  invoke void @_ZN3VecILj3EbEC2Ebbb(ptr noundef nonnull align 1 dereferenceable(3) %33, i1 noundef zeroext %163, i1 noundef zeroext %171, i1 noundef zeroext %179)
          to label %180 unwind label %257

180:                                              ; preds = %174
  call void @llvm.lifetime.start.p0(i64 3, ptr %34) #6
  %181 = load ptr, ptr %30, align 8, !tbaa !5
  %182 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3VecILj3EjEixEi(ptr noundef nonnull align 4 dereferenceable(12) %181, i32 noundef 0)
          to label %183 unwind label %261

183:                                              ; preds = %180
  %184 = load i32, ptr %182, align 4, !tbaa !17
  %185 = zext i32 %184 to i64
  %186 = getelementptr inbounds [6 x i8], ptr %19, i64 0, i64 %185
  %187 = load i8, ptr %186, align 1, !tbaa !15, !range !19, !noundef !20
  %188 = trunc i8 %187 to i1
  %189 = load ptr, ptr %30, align 8, !tbaa !5
  %190 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3VecILj3EjEixEi(ptr noundef nonnull align 4 dereferenceable(12) %189, i32 noundef 1)
          to label %191 unwind label %261

191:                                              ; preds = %183
  %192 = load i32, ptr %190, align 4, !tbaa !17
  %193 = zext i32 %192 to i64
  %194 = getelementptr inbounds [6 x i8], ptr %19, i64 0, i64 %193
  %195 = load i8, ptr %194, align 1, !tbaa !15, !range !19, !noundef !20
  %196 = trunc i8 %195 to i1
  %197 = load ptr, ptr %30, align 8, !tbaa !5
  %198 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3VecILj3EjEixEi(ptr noundef nonnull align 4 dereferenceable(12) %197, i32 noundef 2)
          to label %199 unwind label %261

199:                                              ; preds = %191
  %200 = load i32, ptr %198, align 4, !tbaa !17
  %201 = zext i32 %200 to i64
  %202 = getelementptr inbounds [6 x i8], ptr %19, i64 0, i64 %201
  %203 = load i8, ptr %202, align 1, !tbaa !15, !range !19, !noundef !20
  %204 = trunc i8 %203 to i1
  invoke void @_ZN3VecILj3EbEC2Ebbb(ptr noundef nonnull align 1 dereferenceable(3) %34, i1 noundef zeroext %188, i1 noundef zeroext %196, i1 noundef zeroext %204)
          to label %205 unwind label %261

205:                                              ; preds = %199
  %206 = getelementptr inbounds %"class.rootparity::RootParityCollisionTest", ptr %53, i32 0, i32 0
  %207 = load ptr, ptr %206, align 8, !tbaa !21
  %208 = getelementptr inbounds %"class.rootparity::RootParityCollisionTest", ptr %53, i32 0, i32 1
  %209 = getelementptr inbounds %"class.rootparity::RootParityCollisionTest", ptr %53, i32 0, i32 2
  %210 = getelementptr inbounds %"class.rootparity::RootParityCollisionTest", ptr %53, i32 0, i32 3
  %211 = getelementptr inbounds %"class.rootparity::RootParityCollisionTest", ptr %53, i32 0, i32 4
  %212 = getelementptr inbounds %"class.rootparity::RootParityCollisionTest", ptr %53, i32 0, i32 5
  %213 = getelementptr inbounds %"class.rootparity::RootParityCollisionTest", ptr %53, i32 0, i32 6
  %214 = getelementptr inbounds %"class.rootparity::RootParityCollisionTest", ptr %53, i32 0, i32 7
  %215 = getelementptr inbounds %"class.rootparity::RootParityCollisionTest", ptr %53, i32 0, i32 8
  %216 = load i8, ptr %215, align 8, !tbaa !24, !range !19, !noundef !20
  %217 = trunc i8 %216 to i1
  call void @llvm.lifetime.start.p0(i64 24, ptr %35) #6
  invoke void @_ZN3VecILj3EdEC2Eddd(ptr noundef nonnull align 8 dereferenceable(24) %35, double noundef 0.000000e+00, double noundef 0.000000e+00, double noundef 0.000000e+00)
          to label %218 unwind label %265

218:                                              ; preds = %205
  %219 = getelementptr inbounds [5 x double], ptr %31, i64 0, i64 0
  %220 = invoke noundef zeroext i1 @_ZN10rootparity12_GLOBAL__N_126edge_triangle_intersectionERK3VecILj3EdES4_S4_S4_S4_S4_S4_S4_bRKS1_ILj3EbES7_S7_S4_S4_Pd(ptr noundef nonnull align 8 dereferenceable(24) %207, ptr noundef nonnull align 8 dereferenceable(24) %208, ptr noundef nonnull align 8 dereferenceable(24) %209, ptr noundef nonnull align 8 dereferenceable(24) %210, ptr noundef nonnull align 8 dereferenceable(24) %211, ptr noundef nonnull align 8 dereferenceable(24) %212, ptr noundef nonnull align 8 dereferenceable(24) %213, ptr noundef nonnull align 8 dereferenceable(24) %214, i1 noundef zeroext %217, ptr noundef nonnull align 1 dereferenceable(3) %32, ptr noundef nonnull align 1 dereferenceable(3) %33, ptr noundef nonnull align 1 dereferenceable(3) %34, ptr noundef nonnull align 8 dereferenceable(24) %35, ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef %219)
          to label %221 unwind label %265

221:                                              ; preds = %218
  call void @llvm.lifetime.start.p0(i64 16, ptr %36) #6
  %222 = load i32, ptr %28, align 4, !tbaa !17
  %223 = zext i32 %222 to i64
  %224 = invoke { ptr, i64 } @_ZNSt6vectorIbSaIbEEixEm(ptr noundef nonnull align 8 dereferenceable(40) %20, i64 noundef %223)
          to label %225 unwind label %269

225:                                              ; preds = %221
  %226 = getelementptr inbounds { ptr, i64 }, ptr %36, i32 0, i32 0
  %227 = extractvalue { ptr, i64 } %224, 0
  store ptr %227, ptr %226, align 8
  %228 = getelementptr inbounds { ptr, i64 }, ptr %36, i32 0, i32 1
  %229 = extractvalue { ptr, i64 } %224, 1
  store i64 %229, ptr %228, align 8
  %230 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt14_Bit_referenceaSEb(ptr noundef nonnull align 8 dereferenceable(16) %36, i1 noundef zeroext %220) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %36) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr %35) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr %37) #6
  %231 = load i32, ptr %28, align 4, !tbaa !17
  %232 = zext i32 %231 to i64
  %233 = invoke { ptr, i64 } @_ZNSt6vectorIbSaIbEEixEm(ptr noundef nonnull align 8 dereferenceable(40) %20, i64 noundef %232)
          to label %234 unwind label %274

234:                                              ; preds = %225
  %235 = getelementptr inbounds { ptr, i64 }, ptr %37, i32 0, i32 0
  %236 = extractvalue { ptr, i64 } %233, 0
  store ptr %236, ptr %235, align 8
  %237 = getelementptr inbounds { ptr, i64 }, ptr %37, i32 0, i32 1
  %238 = extractvalue { ptr, i64 } %233, 1
  store i64 %238, ptr %237, align 8
  %239 = call noundef zeroext i1 @_ZNKSt14_Bit_referencecvbEv(ptr noundef nonnull align 8 dereferenceable(16) %37) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %37) #6
  br i1 %239, label %240, label %297

240:                                              ; preds = %234
  %241 = getelementptr inbounds [5 x double], ptr %31, i64 0, i64 2
  %242 = load double, ptr %241, align 16, !tbaa !11
  %243 = fcmp oeq double %242, 0.000000e+00
  br i1 %243, label %252, label %244

244:                                              ; preds = %240
  %245 = getelementptr inbounds [5 x double], ptr %31, i64 0, i64 3
  %246 = load double, ptr %245, align 8, !tbaa !11
  %247 = fcmp oeq double %246, 0.000000e+00
  br i1 %247, label %252, label %248

248:                                              ; preds = %244
  %249 = getelementptr inbounds [5 x double], ptr %31, i64 0, i64 4
  %250 = load double, ptr %249, align 16, !tbaa !11
  %251 = fcmp oeq double %250, 0.000000e+00
  br i1 %251, label %252, label %278

252:                                              ; preds = %248, %244, %240
  store i8 0, ptr %26, align 1, !tbaa !15
  br label %278

253:                                              ; preds = %149, %141, %133, %122
  %254 = landingpad { ptr, i32 }
          cleanup
  %255 = extractvalue { ptr, i32 } %254, 0
  store ptr %255, ptr %8, align 8
  %256 = extractvalue { ptr, i32 } %254, 1
  store i32 %256, ptr %9, align 4
  br label %306

257:                                              ; preds = %174, %166, %158, %155
  %258 = landingpad { ptr, i32 }
          cleanup
  %259 = extractvalue { ptr, i32 } %258, 0
  store ptr %259, ptr %8, align 8
  %260 = extractvalue { ptr, i32 } %258, 1
  store i32 %260, ptr %9, align 4
  br label %305

261:                                              ; preds = %199, %191, %183, %180
  %262 = landingpad { ptr, i32 }
          cleanup
  %263 = extractvalue { ptr, i32 } %262, 0
  store ptr %263, ptr %8, align 8
  %264 = extractvalue { ptr, i32 } %262, 1
  store i32 %264, ptr %9, align 4
  br label %304

265:                                              ; preds = %218, %205
  %266 = landingpad { ptr, i32 }
          cleanup
  %267 = extractvalue { ptr, i32 } %266, 0
  store ptr %267, ptr %8, align 8
  %268 = extractvalue { ptr, i32 } %266, 1
  store i32 %268, ptr %9, align 4
  br label %273

269:                                              ; preds = %221
  %270 = landingpad { ptr, i32 }
          cleanup
  %271 = extractvalue { ptr, i32 } %270, 0
  store ptr %271, ptr %8, align 8
  %272 = extractvalue { ptr, i32 } %270, 1
  store i32 %272, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %36) #6
  br label %273

273:                                              ; preds = %269, %265
  call void @llvm.lifetime.end.p0(i64 24, ptr %35) #6
  br label %304

274:                                              ; preds = %225
  %275 = landingpad { ptr, i32 }
          cleanup
  %276 = extractvalue { ptr, i32 } %275, 0
  store ptr %276, ptr %8, align 8
  %277 = extractvalue { ptr, i32 } %275, 1
  store i32 %277, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %37) #6
  br label %304

278:                                              ; preds = %252, %248
  %279 = getelementptr inbounds [5 x double], ptr %31, i64 0, i64 2
  %280 = load double, ptr %279, align 16, !tbaa !11
  %281 = fcmp oeq double %280, 1.000000e+00
  br i1 %281, label %290, label %282

282:                                              ; preds = %278
  %283 = getelementptr inbounds [5 x double], ptr %31, i64 0, i64 3
  %284 = load double, ptr %283, align 8, !tbaa !11
  %285 = fcmp oeq double %284, 1.000000e+00
  br i1 %285, label %290, label %286

286:                                              ; preds = %282
  %287 = getelementptr inbounds [5 x double], ptr %31, i64 0, i64 4
  %288 = load double, ptr %287, align 16, !tbaa !11
  %289 = fcmp oeq double %288, 1.000000e+00
  br i1 %289, label %290, label %291

290:                                              ; preds = %286, %282, %278
  store i8 0, ptr %26, align 1, !tbaa !15
  br label %291

291:                                              ; preds = %290, %286
  %292 = getelementptr inbounds [5 x double], ptr %31, i64 0, i64 0
  %293 = load double, ptr %292, align 16, !tbaa !11
  %294 = fcmp oeq double %293, 1.000000e+00
  br i1 %294, label %295, label %296

295:                                              ; preds = %291
  store i1 true, ptr %2, align 1
  store i32 1, ptr %29, align 4
  br label %298

296:                                              ; preds = %291
  br label %297

297:                                              ; preds = %296, %234
  store i32 0, ptr %29, align 4
  br label %298

298:                                              ; preds = %297, %295
  call void @llvm.lifetime.end.p0(i64 3, ptr %34) #6
  call void @llvm.lifetime.end.p0(i64 3, ptr %33) #6
  call void @llvm.lifetime.end.p0(i64 3, ptr %32) #6
  call void @llvm.lifetime.end.p0(i64 40, ptr %31) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #6
  %299 = load i32, ptr %29, align 4
  switch i32 %299, label %307 [
    i32 0, label %300
  ]

300:                                              ; preds = %298
  br label %301

301:                                              ; preds = %300
  %302 = load i32, ptr %28, align 4, !tbaa !17
  %303 = add i32 %302, 1
  store i32 %303, ptr %28, align 4, !tbaa !17
  br label %80, !llvm.loop !25

304:                                              ; preds = %274, %273, %261
  call void @llvm.lifetime.end.p0(i64 3, ptr %34) #6
  br label %305

305:                                              ; preds = %304, %257
  call void @llvm.lifetime.end.p0(i64 3, ptr %33) #6
  br label %306

306:                                              ; preds = %305, %253
  call void @llvm.lifetime.end.p0(i64 3, ptr %32) #6
  call void @llvm.lifetime.end.p0(i64 40, ptr %31) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #6
  br label %566

307:                                              ; preds = %298, %85
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #6
  %308 = load i32, ptr %29, align 4
  switch i32 %308, label %564 [
    i32 4, label %309
  ]

309:                                              ; preds = %307
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #6
  store i32 0, ptr %38, align 4, !tbaa !17
  br label %310

310:                                              ; preds = %464, %309
  %311 = load i32, ptr %38, align 4, !tbaa !17
  %312 = zext i32 %311 to i64
  %313 = call noundef i64 @_ZNKSt6vectorI3VecILj4EjESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %12) #6
  %314 = icmp ult i64 %312, %313
  br i1 %314, label %316, label %315

315:                                              ; preds = %310
  store i32 7, ptr %29, align 4
  br label %470

316:                                              ; preds = %310
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #6
  %317 = load i32, ptr %38, align 4, !tbaa !17
  %318 = zext i32 %317 to i64
  %319 = call noundef nonnull align 4 dereferenceable(16) ptr @_ZNSt6vectorI3VecILj4EjESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %12, i64 noundef %318) #6
  store ptr %319, ptr %39, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %40) #6
  store i8 0, ptr %40, align 1, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 1, ptr %41) #6
  store i8 0, ptr %41, align 1, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #6
  %320 = load ptr, ptr %39, align 8, !tbaa !5
  %321 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3VecILj4EjEixEi(ptr noundef nonnull align 4 dereferenceable(16) %320, i32 noundef 0)
          to label %322 unwind label %435

322:                                              ; preds = %316
  %323 = load i32, ptr %321, align 4, !tbaa !17
  %324 = zext i32 %323 to i64
  %325 = getelementptr inbounds [6 x i8], ptr %17, i64 0, i64 %324
  %326 = load i8, ptr %325, align 1, !tbaa !15, !range !19, !noundef !20
  %327 = trunc i8 %326 to i1
  %328 = load ptr, ptr %39, align 8, !tbaa !5
  %329 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3VecILj4EjEixEi(ptr noundef nonnull align 4 dereferenceable(16) %328, i32 noundef 1)
          to label %330 unwind label %435

330:                                              ; preds = %322
  %331 = load i32, ptr %329, align 4, !tbaa !17
  %332 = zext i32 %331 to i64
  %333 = getelementptr inbounds [6 x i8], ptr %17, i64 0, i64 %332
  %334 = load i8, ptr %333, align 1, !tbaa !15, !range !19, !noundef !20
  %335 = trunc i8 %334 to i1
  %336 = load ptr, ptr %39, align 8, !tbaa !5
  %337 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3VecILj4EjEixEi(ptr noundef nonnull align 4 dereferenceable(16) %336, i32 noundef 2)
          to label %338 unwind label %435

338:                                              ; preds = %330
  %339 = load i32, ptr %337, align 4, !tbaa !17
  %340 = zext i32 %339 to i64
  %341 = getelementptr inbounds [6 x i8], ptr %17, i64 0, i64 %340
  %342 = load i8, ptr %341, align 1, !tbaa !15, !range !19, !noundef !20
  %343 = trunc i8 %342 to i1
  %344 = load ptr, ptr %39, align 8, !tbaa !5
  %345 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3VecILj4EjEixEi(ptr noundef nonnull align 4 dereferenceable(16) %344, i32 noundef 3)
          to label %346 unwind label %435

346:                                              ; preds = %338
  %347 = load i32, ptr %345, align 4, !tbaa !17
  %348 = zext i32 %347 to i64
  %349 = getelementptr inbounds [6 x i8], ptr %17, i64 0, i64 %348
  %350 = load i8, ptr %349, align 1, !tbaa !15, !range !19, !noundef !20
  %351 = trunc i8 %350 to i1
  invoke void @_ZN3VecILj4EbEC2Ebbbb(ptr noundef nonnull align 1 dereferenceable(4) %42, i1 noundef zeroext %327, i1 noundef zeroext %335, i1 noundef zeroext %343, i1 noundef zeroext %351)
          to label %352 unwind label %435

352:                                              ; preds = %346
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #6
  %353 = load ptr, ptr %39, align 8, !tbaa !5
  %354 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3VecILj4EjEixEi(ptr noundef nonnull align 4 dereferenceable(16) %353, i32 noundef 0)
          to label %355 unwind label %439

355:                                              ; preds = %352
  %356 = load i32, ptr %354, align 4, !tbaa !17
  %357 = zext i32 %356 to i64
  %358 = getelementptr inbounds [6 x i8], ptr %18, i64 0, i64 %357
  %359 = load i8, ptr %358, align 1, !tbaa !15, !range !19, !noundef !20
  %360 = trunc i8 %359 to i1
  %361 = load ptr, ptr %39, align 8, !tbaa !5
  %362 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3VecILj4EjEixEi(ptr noundef nonnull align 4 dereferenceable(16) %361, i32 noundef 1)
          to label %363 unwind label %439

363:                                              ; preds = %355
  %364 = load i32, ptr %362, align 4, !tbaa !17
  %365 = zext i32 %364 to i64
  %366 = getelementptr inbounds [6 x i8], ptr %18, i64 0, i64 %365
  %367 = load i8, ptr %366, align 1, !tbaa !15, !range !19, !noundef !20
  %368 = trunc i8 %367 to i1
  %369 = load ptr, ptr %39, align 8, !tbaa !5
  %370 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3VecILj4EjEixEi(ptr noundef nonnull align 4 dereferenceable(16) %369, i32 noundef 2)
          to label %371 unwind label %439

371:                                              ; preds = %363
  %372 = load i32, ptr %370, align 4, !tbaa !17
  %373 = zext i32 %372 to i64
  %374 = getelementptr inbounds [6 x i8], ptr %18, i64 0, i64 %373
  %375 = load i8, ptr %374, align 1, !tbaa !15, !range !19, !noundef !20
  %376 = trunc i8 %375 to i1
  %377 = load ptr, ptr %39, align 8, !tbaa !5
  %378 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3VecILj4EjEixEi(ptr noundef nonnull align 4 dereferenceable(16) %377, i32 noundef 3)
          to label %379 unwind label %439

379:                                              ; preds = %371
  %380 = load i32, ptr %378, align 4, !tbaa !17
  %381 = zext i32 %380 to i64
  %382 = getelementptr inbounds [6 x i8], ptr %18, i64 0, i64 %381
  %383 = load i8, ptr %382, align 1, !tbaa !15, !range !19, !noundef !20
  %384 = trunc i8 %383 to i1
  invoke void @_ZN3VecILj4EbEC2Ebbbb(ptr noundef nonnull align 1 dereferenceable(4) %43, i1 noundef zeroext %360, i1 noundef zeroext %368, i1 noundef zeroext %376, i1 noundef zeroext %384)
          to label %385 unwind label %439

385:                                              ; preds = %379
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #6
  %386 = load ptr, ptr %39, align 8, !tbaa !5
  %387 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3VecILj4EjEixEi(ptr noundef nonnull align 4 dereferenceable(16) %386, i32 noundef 0)
          to label %388 unwind label %443

388:                                              ; preds = %385
  %389 = load i32, ptr %387, align 4, !tbaa !17
  %390 = zext i32 %389 to i64
  %391 = getelementptr inbounds [6 x i8], ptr %19, i64 0, i64 %390
  %392 = load i8, ptr %391, align 1, !tbaa !15, !range !19, !noundef !20
  %393 = trunc i8 %392 to i1
  %394 = load ptr, ptr %39, align 8, !tbaa !5
  %395 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3VecILj4EjEixEi(ptr noundef nonnull align 4 dereferenceable(16) %394, i32 noundef 1)
          to label %396 unwind label %443

396:                                              ; preds = %388
  %397 = load i32, ptr %395, align 4, !tbaa !17
  %398 = zext i32 %397 to i64
  %399 = getelementptr inbounds [6 x i8], ptr %19, i64 0, i64 %398
  %400 = load i8, ptr %399, align 1, !tbaa !15, !range !19, !noundef !20
  %401 = trunc i8 %400 to i1
  %402 = load ptr, ptr %39, align 8, !tbaa !5
  %403 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3VecILj4EjEixEi(ptr noundef nonnull align 4 dereferenceable(16) %402, i32 noundef 2)
          to label %404 unwind label %443

404:                                              ; preds = %396
  %405 = load i32, ptr %403, align 4, !tbaa !17
  %406 = zext i32 %405 to i64
  %407 = getelementptr inbounds [6 x i8], ptr %19, i64 0, i64 %406
  %408 = load i8, ptr %407, align 1, !tbaa !15, !range !19, !noundef !20
  %409 = trunc i8 %408 to i1
  %410 = load ptr, ptr %39, align 8, !tbaa !5
  %411 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3VecILj4EjEixEi(ptr noundef nonnull align 4 dereferenceable(16) %410, i32 noundef 3)
          to label %412 unwind label %443

412:                                              ; preds = %404
  %413 = load i32, ptr %411, align 4, !tbaa !17
  %414 = zext i32 %413 to i64
  %415 = getelementptr inbounds [6 x i8], ptr %19, i64 0, i64 %414
  %416 = load i8, ptr %415, align 1, !tbaa !15, !range !19, !noundef !20
  %417 = trunc i8 %416 to i1
  invoke void @_ZN3VecILj4EbEC2Ebbbb(ptr noundef nonnull align 1 dereferenceable(4) %44, i1 noundef zeroext %393, i1 noundef zeroext %401, i1 noundef zeroext %409, i1 noundef zeroext %417)
          to label %418 unwind label %443

418:                                              ; preds = %412
  %419 = load ptr, ptr %39, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 24, ptr %45) #6
  invoke void @_ZN3VecILj3EdEC2Eddd(ptr noundef nonnull align 8 dereferenceable(24) %45, double noundef 0.000000e+00, double noundef 0.000000e+00, double noundef 0.000000e+00)
          to label %420 unwind label %447

420:                                              ; preds = %418
  %421 = invoke noundef zeroext i1 @_ZN10rootparity23RootParityCollisionTest28ray_quad_intersection_parityERK3VecILj4EjERKS1_ILj4EbES7_S7_RKS1_ILj3EdESA_RbSB_(ptr noundef nonnull align 8 dereferenceable(1560) %53, ptr noundef nonnull align 4 dereferenceable(16) %419, ptr noundef nonnull align 1 dereferenceable(4) %42, ptr noundef nonnull align 1 dereferenceable(4) %43, ptr noundef nonnull align 1 dereferenceable(4) %44, ptr noundef nonnull align 8 dereferenceable(24) %45, ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 1 dereferenceable(1) %40, ptr noundef nonnull align 1 dereferenceable(1) %41)
          to label %422 unwind label %447

422:                                              ; preds = %420
  call void @llvm.lifetime.start.p0(i64 16, ptr %46) #6
  %423 = load i32, ptr %38, align 4, !tbaa !17
  %424 = zext i32 %423 to i64
  %425 = invoke { ptr, i64 } @_ZNSt6vectorIbSaIbEEixEm(ptr noundef nonnull align 8 dereferenceable(40) %23, i64 noundef %424)
          to label %426 unwind label %451

426:                                              ; preds = %422
  %427 = getelementptr inbounds { ptr, i64 }, ptr %46, i32 0, i32 0
  %428 = extractvalue { ptr, i64 } %425, 0
  store ptr %428, ptr %427, align 8
  %429 = getelementptr inbounds { ptr, i64 }, ptr %46, i32 0, i32 1
  %430 = extractvalue { ptr, i64 } %425, 1
  store i64 %430, ptr %429, align 8
  %431 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt14_Bit_referenceaSEb(ptr noundef nonnull align 8 dereferenceable(16) %46, i1 noundef zeroext %421) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %46) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr %45) #6
  %432 = load i8, ptr %40, align 1, !tbaa !15, !range !19, !noundef !20
  %433 = trunc i8 %432 to i1
  br i1 %433, label %434, label %456

434:                                              ; preds = %426
  store i8 0, ptr %26, align 1, !tbaa !15
  store i32 7, ptr %29, align 4
  br label %461

435:                                              ; preds = %346, %338, %330, %322, %316
  %436 = landingpad { ptr, i32 }
          cleanup
  %437 = extractvalue { ptr, i32 } %436, 0
  store ptr %437, ptr %8, align 8
  %438 = extractvalue { ptr, i32 } %436, 1
  store i32 %438, ptr %9, align 4
  br label %469

439:                                              ; preds = %379, %371, %363, %355, %352
  %440 = landingpad { ptr, i32 }
          cleanup
  %441 = extractvalue { ptr, i32 } %440, 0
  store ptr %441, ptr %8, align 8
  %442 = extractvalue { ptr, i32 } %440, 1
  store i32 %442, ptr %9, align 4
  br label %468

443:                                              ; preds = %412, %404, %396, %388, %385
  %444 = landingpad { ptr, i32 }
          cleanup
  %445 = extractvalue { ptr, i32 } %444, 0
  store ptr %445, ptr %8, align 8
  %446 = extractvalue { ptr, i32 } %444, 1
  store i32 %446, ptr %9, align 4
  br label %467

447:                                              ; preds = %420, %418
  %448 = landingpad { ptr, i32 }
          cleanup
  %449 = extractvalue { ptr, i32 } %448, 0
  store ptr %449, ptr %8, align 8
  %450 = extractvalue { ptr, i32 } %448, 1
  store i32 %450, ptr %9, align 4
  br label %455

451:                                              ; preds = %422
  %452 = landingpad { ptr, i32 }
          cleanup
  %453 = extractvalue { ptr, i32 } %452, 0
  store ptr %453, ptr %8, align 8
  %454 = extractvalue { ptr, i32 } %452, 1
  store i32 %454, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %46) #6
  br label %455

455:                                              ; preds = %451, %447
  call void @llvm.lifetime.end.p0(i64 24, ptr %45) #6
  br label %467

456:                                              ; preds = %426
  %457 = load i8, ptr %41, align 1, !tbaa !15, !range !19, !noundef !20
  %458 = trunc i8 %457 to i1
  br i1 %458, label %459, label %460

459:                                              ; preds = %456
  store i1 true, ptr %2, align 1
  store i32 1, ptr %29, align 4
  br label %461

460:                                              ; preds = %456
  store i32 0, ptr %29, align 4
  br label %461

461:                                              ; preds = %460, %459, %434
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %41) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %40) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #6
  %462 = load i32, ptr %29, align 4
  switch i32 %462, label %470 [
    i32 0, label %463
  ]

463:                                              ; preds = %461
  br label %464

464:                                              ; preds = %463
  %465 = load i32, ptr %38, align 4, !tbaa !17
  %466 = add i32 %465, 1
  store i32 %466, ptr %38, align 4, !tbaa !17
  br label %310, !llvm.loop !27

467:                                              ; preds = %455, %443
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #6
  br label %468

468:                                              ; preds = %467, %439
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #6
  br label %469

469:                                              ; preds = %468, %435
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %41) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %40) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #6
  br label %566

470:                                              ; preds = %461, %315
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #6
  %471 = load i32, ptr %29, align 4
  switch i32 %471, label %564 [
    i32 7, label %472
  ]

472:                                              ; preds = %470
  %473 = load i8, ptr %26, align 1, !tbaa !15, !range !19, !noundef !20
  %474 = trunc i8 %473 to i1
  br i1 %474, label %498, label %475

475:                                              ; preds = %472
  call void @llvm.lifetime.start.p0(i64 8, ptr %47) #6
  %476 = call i32 @rand() #6
  %477 = sitofp i32 %476 to double
  %478 = fdiv double %477, 0x41DFFFFFFFC00000
  %479 = fmul double %478, 2.000000e+00
  %480 = fmul double %479, 0x400921FB54442D18
  store double %480, ptr %47, align 8, !tbaa !11
  %481 = load double, ptr %47, align 8, !tbaa !11
  %482 = call double @cos(double noundef %481) #6
  %483 = load double, ptr %5, align 8, !tbaa !11
  %484 = fmul double %482, %483
  %485 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3VecILj3EdEixEi(ptr noundef nonnull align 8 dereferenceable(24) %4, i32 noundef 0)
          to label %486 unwind label %494

486:                                              ; preds = %475
  store double %484, ptr %485, align 8, !tbaa !11
  %487 = load double, ptr %47, align 8, !tbaa !11
  %488 = call double @sin(double noundef %487) #6
  %489 = fneg double %488
  %490 = load double, ptr %5, align 8, !tbaa !11
  %491 = fmul double %489, %490
  %492 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3VecILj3EdEixEi(ptr noundef nonnull align 8 dereferenceable(24) %4, i32 noundef 1)
          to label %493 unwind label %494

493:                                              ; preds = %486
  store double %491, ptr %492, align 8, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #6
  br label %498

494:                                              ; preds = %486, %475
  %495 = landingpad { ptr, i32 }
          cleanup
  %496 = extractvalue { ptr, i32 } %495, 0
  store ptr %496, ptr %8, align 8
  %497 = extractvalue { ptr, i32 } %495, 1
  store i32 %497, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #6
  br label %566

498:                                              ; preds = %493, %472
  br label %70, !llvm.loop !28

499:                                              ; preds = %77
  %500 = load i8, ptr %26, align 1, !tbaa !15, !range !19, !noundef !20
  %501 = trunc i8 %500 to i1
  br i1 %501, label %503, label %502

502:                                              ; preds = %499
  store i1 true, ptr %2, align 1
  store i32 1, ptr %29, align 4
  br label %564

503:                                              ; preds = %499
  call void @llvm.lifetime.start.p0(i64 4, ptr %48) #6
  store i32 0, ptr %48, align 4, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 4, ptr %49) #6
  store i32 0, ptr %49, align 4, !tbaa !17
  br label %504

504:                                              ; preds = %528, %503
  %505 = load i32, ptr %49, align 4, !tbaa !17
  %506 = zext i32 %505 to i64
  %507 = call noundef i64 @_ZNKSt6vectorIbSaIbEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(40) %20) #6
  %508 = icmp ult i64 %506, %507
  br i1 %508, label %510, label %509

509:                                              ; preds = %504
  store i32 10, ptr %29, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #6
  br label %531

510:                                              ; preds = %504
  call void @llvm.lifetime.start.p0(i64 16, ptr %50) #6
  %511 = load i32, ptr %49, align 4, !tbaa !17
  %512 = zext i32 %511 to i64
  %513 = invoke { ptr, i64 } @_ZNSt6vectorIbSaIbEEixEm(ptr noundef nonnull align 8 dereferenceable(40) %20, i64 noundef %512)
          to label %514 unwind label %523

514:                                              ; preds = %510
  %515 = getelementptr inbounds { ptr, i64 }, ptr %50, i32 0, i32 0
  %516 = extractvalue { ptr, i64 } %513, 0
  store ptr %516, ptr %515, align 8
  %517 = getelementptr inbounds { ptr, i64 }, ptr %50, i32 0, i32 1
  %518 = extractvalue { ptr, i64 } %513, 1
  store i64 %518, ptr %517, align 8
  %519 = call noundef zeroext i1 @_ZNKSt14_Bit_referencecvbEv(ptr noundef nonnull align 8 dereferenceable(16) %50) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %50) #6
  br i1 %519, label %520, label %527

520:                                              ; preds = %514
  %521 = load i32, ptr %48, align 4, !tbaa !17
  %522 = add i32 %521, 1
  store i32 %522, ptr %48, align 4, !tbaa !17
  br label %527

523:                                              ; preds = %510
  %524 = landingpad { ptr, i32 }
          cleanup
  %525 = extractvalue { ptr, i32 } %524, 0
  store ptr %525, ptr %8, align 8
  %526 = extractvalue { ptr, i32 } %524, 1
  store i32 %526, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %50) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #6
  br label %563

527:                                              ; preds = %520, %514
  br label %528

528:                                              ; preds = %527
  %529 = load i32, ptr %49, align 4, !tbaa !17
  %530 = add i32 %529, 1
  store i32 %530, ptr %49, align 4, !tbaa !17
  br label %504, !llvm.loop !29

531:                                              ; preds = %509
  call void @llvm.lifetime.start.p0(i64 4, ptr %51) #6
  store i32 0, ptr %51, align 4, !tbaa !17
  br label %532

532:                                              ; preds = %556, %531
  %533 = load i32, ptr %51, align 4, !tbaa !17
  %534 = zext i32 %533 to i64
  %535 = call noundef i64 @_ZNKSt6vectorIbSaIbEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(40) %23) #6
  %536 = icmp ult i64 %534, %535
  br i1 %536, label %538, label %537

537:                                              ; preds = %532
  store i32 13, ptr %29, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #6
  br label %559

538:                                              ; preds = %532
  call void @llvm.lifetime.start.p0(i64 16, ptr %52) #6
  %539 = load i32, ptr %51, align 4, !tbaa !17
  %540 = zext i32 %539 to i64
  %541 = invoke { ptr, i64 } @_ZNSt6vectorIbSaIbEEixEm(ptr noundef nonnull align 8 dereferenceable(40) %23, i64 noundef %540)
          to label %542 unwind label %551

542:                                              ; preds = %538
  %543 = getelementptr inbounds { ptr, i64 }, ptr %52, i32 0, i32 0
  %544 = extractvalue { ptr, i64 } %541, 0
  store ptr %544, ptr %543, align 8
  %545 = getelementptr inbounds { ptr, i64 }, ptr %52, i32 0, i32 1
  %546 = extractvalue { ptr, i64 } %541, 1
  store i64 %546, ptr %545, align 8
  %547 = call noundef zeroext i1 @_ZNKSt14_Bit_referencecvbEv(ptr noundef nonnull align 8 dereferenceable(16) %52) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %52) #6
  br i1 %547, label %548, label %555

548:                                              ; preds = %542
  %549 = load i32, ptr %48, align 4, !tbaa !17
  %550 = add i32 %549, 1
  store i32 %550, ptr %48, align 4, !tbaa !17
  br label %555

551:                                              ; preds = %538
  %552 = landingpad { ptr, i32 }
          cleanup
  %553 = extractvalue { ptr, i32 } %552, 0
  store ptr %553, ptr %8, align 8
  %554 = extractvalue { ptr, i32 } %552, 1
  store i32 %554, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %52) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #6
  br label %563

555:                                              ; preds = %548, %542
  br label %556

556:                                              ; preds = %555
  %557 = load i32, ptr %51, align 4, !tbaa !17
  %558 = add i32 %557, 1
  store i32 %558, ptr %51, align 4, !tbaa !17
  br label %532, !llvm.loop !30

559:                                              ; preds = %537
  %560 = load i32, ptr %48, align 4, !tbaa !17
  %561 = urem i32 %560, 2
  %562 = icmp eq i32 %561, 1
  store i1 %562, ptr %2, align 1
  store i32 1, ptr %29, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #6
  br label %564

563:                                              ; preds = %551, %523
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #6
  br label %566

564:                                              ; preds = %559, %502, %470, %307
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %26) #6
  call void @_ZNSt13_Bvector_baseISaIbEED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %23) #6
  call void @llvm.lifetime.end.p0(i64 40, ptr %23) #6
  call void @_ZNSt13_Bvector_baseISaIbEED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %20) #6
  call void @llvm.lifetime.end.p0(i64 40, ptr %20) #6
  call void @llvm.lifetime.end.p0(i64 6, ptr %19) #6
  call void @llvm.lifetime.end.p0(i64 6, ptr %18) #6
  call void @llvm.lifetime.end.p0(i64 6, ptr %17) #6
  call void @_ZNSt6vectorI3VecILj4EjESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %12) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr %12) #6
  call void @_ZNSt6vectorI3VecILj3EjESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %6) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr %6) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr %4) #6
  %565 = load i1, ptr %2, align 1
  ret i1 %565

566:                                              ; preds = %563, %494, %469, %306
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %26) #6
  call void @_ZNSt13_Bvector_baseISaIbEED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %23) #6
  br label %567

567:                                              ; preds = %566, %118
  call void @llvm.lifetime.end.p0(i64 40, ptr %23) #6
  call void @_ZNSt13_Bvector_baseISaIbEED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %20) #6
  br label %568

568:                                              ; preds = %567, %114
  call void @llvm.lifetime.end.p0(i64 40, ptr %20) #6
  call void @llvm.lifetime.end.p0(i64 6, ptr %19) #6
  call void @llvm.lifetime.end.p0(i64 6, ptr %18) #6
  call void @llvm.lifetime.end.p0(i64 6, ptr %17) #6
  br label %569

569:                                              ; preds = %568, %110, %106, %102
  call void @_ZNSt6vectorI3VecILj4EjESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %12) #6
  br label %570

570:                                              ; preds = %569, %98
  call void @llvm.lifetime.end.p0(i64 24, ptr %12) #6
  br label %571

571:                                              ; preds = %570, %94, %90
  call void @_ZNSt6vectorI3VecILj3EjESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %6) #6
  br label %572

572:                                              ; preds = %571, %86
  call void @llvm.lifetime.end.p0(i64 24, ptr %6) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr %4) #6
  br label %573

573:                                              ; preds = %572
  %574 = load ptr, ptr %8, align 8
  %575 = load i32, ptr %9, align 4
  %576 = insertvalue { ptr, i32 } poison, ptr %574, 0
  %577 = insertvalue { ptr, i32 } %576, i32 %575, 1
  resume { ptr, i32 } %577
}

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

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

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

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

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare hidden noundef zeroext i1 @_ZN10rootparity12_GLOBAL__N_126edge_triangle_intersectionERK3VecILj3EdES4_S4_S4_S4_S4_S4_S4_bRKS1_ILj3EbES7_S7_S4_S4_Pd(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24), i1 noundef zeroext, ptr noundef nonnull align 1 dereferenceable(3), ptr noundef nonnull align 1 dereferenceable(3), ptr noundef nonnull align 1 dereferenceable(3), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef) #2

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

; Function Attrs: mustprogress uwtable
declare dso_local { ptr, i64 } @_ZNSt6vectorIbSaIbEEixEm(ptr noundef nonnull align 8 dereferenceable(40), i64 noundef) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt14_Bit_referenceaSEb(ptr noundef nonnull align 8 dereferenceable(16), i1 noundef zeroext) #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNKSt14_Bit_referencecvbEv(ptr noundef nonnull align 8 dereferenceable(16)) #1 align 2

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

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

; Function Attrs: nounwind
declare i32 @rand() #5

; Function Attrs: nounwind
declare double @cos(double noundef) #5

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

; Function Attrs: nounwind
declare double @sin(double noundef) #5

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

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

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

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

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{i64 0, i64 24, !10}
!10 = !{!7, !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"double", !7, i64 0}
!13 = !{i64 0, i64 12, !10}
!14 = !{i64 0, i64 16, !10}
!15 = !{!16, !16, i64 0}
!16 = !{!"bool", !7, i64 0}
!17 = !{!18, !18, i64 0}
!18 = !{!"int", !7, i64 0}
!19 = !{i8 0, i8 2}
!20 = !{}
!21 = !{!22, !6, i64 0}
!22 = !{!"_ZTSN10rootparity23RootParityCollisionTestE", !6, i64 0, !23, i64 8, !23, i64 32, !23, i64 56, !23, i64 80, !23, i64 104, !23, i64 128, !23, i64 152, !16, i64 176, !23, i64 184, !7, i64 208, !7, i64 784, !7, i64 1552}
!23 = !{!"_ZTS3VecILj3EdE", !7, i64 0}
!24 = !{!22, !16, i64 176}
!25 = distinct !{!25, !26}
!26 = !{!"llvm.loop.mustprogress"}
!27 = distinct !{!27, !26}
!28 = distinct !{!28, !26}
!29 = distinct !{!29, !26}
!30 = distinct !{!30, !26}


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

%struct.Vec.0 = type { [3 x double] }
%"class.std::vector.6" = type { %"struct.std::_Vector_base.7" }
%"struct.std::_Vector_base.7" = type { %"struct.std::_Vector_base<Vec<3, unsigned int>, std::allocator<Vec<3, unsigned int>>>::_Vector_impl" }
%"struct.std::_Vector_base<Vec<3, unsigned int>, std::allocator<Vec<3, unsigned int>>>::_Vector_impl" = type { %"struct.std::_Vector_base<Vec<3, unsigned int>, std::allocator<Vec<3, unsigned int>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<Vec<3, unsigned int>, std::allocator<Vec<3, unsigned int>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::allocator.8" = type { i8 }
%struct.Vec.4 = type { [3 x i32] }
%"class.std::vector.11" = type { %"struct.std::_Vector_base.12" }
%"struct.std::_Vector_base.12" = type { %"struct.std::_Vector_base<Vec<4, unsigned int>, std::allocator<Vec<4, unsigned int>>>::_Vector_impl" }
%"struct.std::_Vector_base<Vec<4, unsigned int>, std::allocator<Vec<4, unsigned int>>>::_Vector_impl" = type { %"struct.std::_Vector_base<Vec<4, unsigned int>, std::allocator<Vec<4, unsigned int>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<Vec<4, unsigned int>, std::allocator<Vec<4, unsigned int>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::allocator.13" = type { i8 }
%struct.Vec.2 = type { [4 x i32] }
%"class.std::vector.16" = type { %"struct.std::_Bvector_base" }
%"struct.std::_Bvector_base" = type { %"struct.std::_Bvector_base<std::allocator<bool>>::_Bvector_impl" }
%"struct.std::_Bvector_base<std::allocator<bool>>::_Bvector_impl" = type { %"struct.std::_Bvector_base<std::allocator<bool>>::_Bvector_impl_data" }
%"struct.std::_Bvector_base<std::allocator<bool>>::_Bvector_impl_data" = type { %"struct.std::_Bit_iterator", %"struct.std::_Bit_iterator", ptr }
%"struct.std::_Bit_iterator" = type { %"struct.std::_Bit_iterator_base.base", [4 x i8] }
%"struct.std::_Bit_iterator_base.base" = type <{ ptr, i32 }>
%"class.std::allocator.20" = type { i8 }
%struct.Vec.5 = type { [3 x i8] }
%"struct.std::_Bit_reference" = type { ptr, i64 }
%struct.Vec.3 = type { [4 x i8] }

@__const._ZN10rootparity23RootParityCollisionTest21ray_prism_parity_testEv.vertex_ts = external hidden unnamed_addr constant [6 x i8], align 1
@__const._ZN10rootparity23RootParityCollisionTest21ray_prism_parity_testEv.vertex_us = external hidden unnamed_addr constant [6 x i8], align 1
@__const._ZN10rootparity23RootParityCollisionTest21ray_prism_parity_testEv.vertex_vs = external hidden unnamed_addr constant [6 x i8], align 1

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

declare i32 @__gxx_personality_v0(...)

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3VecILj3EjEixEi(ptr noundef nonnull align 4 dereferenceable(12), i32 noundef) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZN10rootparity23RootParityCollisionTest28ray_quad_intersection_parityERK3VecILj4EjERKS1_ILj4EbES7_S7_RKS1_ILj3EdESA_RbSB_(ptr noundef nonnull align 8 dereferenceable(1560), ptr noundef nonnull align 4 dereferenceable(16), ptr noundef nonnull align 1 dereferenceable(4), ptr noundef nonnull align 1 dereferenceable(4), ptr noundef nonnull align 1 dereferenceable(4), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 1 dereferenceable(1), ptr noundef nonnull align 1 dereferenceable(1)) local_unnamed_addr #2 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3VecILj3EbEC2Ebbb(ptr noundef nonnull align 1 dereferenceable(3), i1 noundef zeroext, i1 noundef zeroext, i1 noundef zeroext) unnamed_addr #1 align 2

; Function Attrs: mustprogress uwtable
define dso_local noundef zeroext i1 @_ZN10rootparity23RootParityCollisionTest21ray_prism_parity_testEv(ptr noundef nonnull align 8 dereferenceable(1560) %0) local_unnamed_addr #2 align 2 personality ptr @__gxx_personality_v0 {
  %2 = alloca %struct.Vec.0, align 8
  %3 = alloca %"class.std::vector.6", align 8
  %4 = alloca %"class.std::allocator.8", align 1
  %5 = alloca %struct.Vec.4, align 4
  %6 = alloca %struct.Vec.4, align 4
  %7 = alloca %"class.std::vector.11", align 8
  %8 = alloca %"class.std::allocator.13", align 1
  %9 = alloca %struct.Vec.2, align 4
  %10 = alloca %struct.Vec.2, align 4
  %11 = alloca %struct.Vec.2, align 4
  %12 = alloca %"class.std::vector.16", align 8
  %13 = alloca i8, align 1
  %14 = alloca %"class.std::allocator.20", align 1
  %15 = alloca %"class.std::vector.16", align 8
  %16 = alloca i8, align 1
  %17 = alloca %"class.std::allocator.20", align 1
  %18 = alloca [5 x double], align 16
  %19 = alloca %struct.Vec.5, align 1
  %20 = alloca %struct.Vec.5, align 1
  %21 = alloca %struct.Vec.5, align 1
  %22 = alloca %struct.Vec.0, align 8
  %23 = alloca %"struct.std::_Bit_reference", align 8
  %24 = alloca %"struct.std::_Bit_reference", align 8
  %25 = alloca i8, align 1
  %26 = alloca i8, align 1
  %27 = alloca %struct.Vec.3, align 1
  %28 = alloca %struct.Vec.3, align 1
  %29 = alloca %struct.Vec.3, align 1
  %30 = alloca %struct.Vec.0, align 8
  %31 = alloca %"struct.std::_Bit_reference", align 8
  %32 = alloca %"struct.std::_Bit_reference", align 8
  %33 = alloca %"struct.std::_Bit_reference", align 8
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %2) #6
  %34 = getelementptr inbounds i8, ptr %0, i64 184
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %2, ptr noundef nonnull align 8 dereferenceable(24) %34, i64 24, i1 false), !tbaa.struct !5
  %35 = call noundef double @_Z3magILj3EdET0_RK3VecIXT_ES0_E(ptr noundef nonnull align 8 dereferenceable(24) %2)
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %3) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %4) #6
  call void @_ZNSaI3VecILj3EjEEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %4) #6
  invoke void @_ZNSt6vectorI3VecILj3EjESaIS1_EEC2EmRKS2_(ptr noundef nonnull align 8 dereferenceable(24) %3, i64 noundef 2, ptr noundef nonnull align 1 dereferenceable(1) %4)
          to label %36 unwind label %63

36:                                               ; preds = %1
  call void @_ZNSt15__new_allocatorI3VecILj3EjEED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %4) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %4) #6
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %5) #6
  call void @_ZN3VecILj3EjEC2Ejjj(ptr noundef nonnull align 4 dereferenceable(12) %5, i32 noundef 0, i32 noundef 1, i32 noundef 2)
  %37 = call noundef nonnull align 4 dereferenceable(12) ptr @_ZNSt6vectorI3VecILj3EjESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %3, i64 noundef 0) #6
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %37, ptr noundef nonnull align 4 dereferenceable(12) %5, i64 12, i1 false), !tbaa.struct !9
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %5) #6
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %6) #6
  call void @_ZN3VecILj3EjEC2Ejjj(ptr noundef nonnull align 4 dereferenceable(12) %6, i32 noundef 3, i32 noundef 4, i32 noundef 5)
  %38 = call noundef nonnull align 4 dereferenceable(12) ptr @_ZNSt6vectorI3VecILj3EjESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %3, i64 noundef 1) #6
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %38, ptr noundef nonnull align 4 dereferenceable(12) %6, i64 12, i1 false), !tbaa.struct !9
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %6) #6
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %7) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %8) #6
  call void @_ZNSaI3VecILj4EjEEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %8) #6
  invoke void @_ZNSt6vectorI3VecILj4EjESaIS1_EEC2EmRKS2_(ptr noundef nonnull align 8 dereferenceable(24) %7, i64 noundef 3, ptr noundef nonnull align 1 dereferenceable(1) %8)
          to label %39 unwind label %65

39:                                               ; preds = %36
  call void @_ZNSt15__new_allocatorI3VecILj4EjEED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %8) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %8) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %9) #6
  call void @_ZN3VecILj4EjEC2Ejjjj(ptr noundef nonnull align 4 dereferenceable(16) %9, i32 noundef 0, i32 noundef 1, i32 noundef 3, i32 noundef 4)
  %40 = call noundef nonnull align 4 dereferenceable(16) ptr @_ZNSt6vectorI3VecILj4EjESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %7, i64 noundef 0) #6
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(16) %40, ptr noundef nonnull align 4 dereferenceable(16) %9, i64 16, i1 false), !tbaa.struct !10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %9) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %10) #6
  call void @_ZN3VecILj4EjEC2Ejjjj(ptr noundef nonnull align 4 dereferenceable(16) %10, i32 noundef 1, i32 noundef 2, i32 noundef 4, i32 noundef 5)
  %41 = call noundef nonnull align 4 dereferenceable(16) ptr @_ZNSt6vectorI3VecILj4EjESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %7, i64 noundef 1) #6
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(16) %41, ptr noundef nonnull align 4 dereferenceable(16) %10, i64 16, i1 false), !tbaa.struct !10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %10) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %11) #6
  call void @_ZN3VecILj4EjEC2Ejjjj(ptr noundef nonnull align 4 dereferenceable(16) %11, i32 noundef 0, i32 noundef 2, i32 noundef 3, i32 noundef 5)
  %42 = call noundef nonnull align 4 dereferenceable(16) ptr @_ZNSt6vectorI3VecILj4EjESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %7, i64 noundef 2) #6
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(16) %42, ptr noundef nonnull align 4 dereferenceable(16) %11, i64 16, i1 false), !tbaa.struct !10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %11) #6
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %12) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %13) #6
  store i8 0, ptr %13, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %14) #6
  call void @_ZNSaIbEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %14) #6
  invoke void @_ZNSt6vectorIbSaIbEEC2EmRKbRKS0_(ptr noundef nonnull align 8 dereferenceable(40) %12, i64 noundef 2, ptr noundef nonnull align 1 dereferenceable(1) %13, ptr noundef nonnull align 1 dereferenceable(1) %14)
          to label %43 unwind label %67

43:                                               ; preds = %39
  call void @_ZNSt15__new_allocatorIbED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %14) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %14) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %13) #6
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %15) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %16) #6
  store i8 0, ptr %16, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %17) #6
  call void @_ZNSaIbEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %17) #6
  invoke void @_ZNSt6vectorIbSaIbEEC2EmRKbRKS0_(ptr noundef nonnull align 8 dereferenceable(40) %15, i64 noundef 3, ptr noundef nonnull align 1 dereferenceable(1) %16, ptr noundef nonnull align 1 dereferenceable(1) %17)
          to label %44 unwind label %69

44:                                               ; preds = %43
  call void @_ZNSt15__new_allocatorIbED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %17) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %17) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %16) #6
  %45 = getelementptr inbounds i8, ptr %18, i64 16
  %46 = getelementptr inbounds i8, ptr %18, i64 32
  %47 = getelementptr inbounds i8, ptr %0, i64 8
  %48 = getelementptr inbounds i8, ptr %0, i64 32
  %49 = getelementptr inbounds i8, ptr %0, i64 56
  %50 = getelementptr inbounds i8, ptr %0, i64 80
  %51 = getelementptr inbounds i8, ptr %0, i64 104
  %52 = getelementptr inbounds i8, ptr %0, i64 128
  %53 = getelementptr inbounds i8, ptr %0, i64 152
  %54 = getelementptr inbounds i8, ptr %0, i64 176
  %55 = getelementptr inbounds i8, ptr %23, i64 8
  %56 = getelementptr inbounds i8, ptr %24, i64 8
  %57 = getelementptr inbounds i8, ptr %31, i64 8
  br label %.preheader140

.critedge125.preheader:                           ; preds = %.thread133
  %58 = call noundef i64 @_ZNKSt6vectorIbSaIbEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(40) %12) #6
  %.not167 = icmp eq i64 %58, 0
  br i1 %.not167, label %.preheader, label %.lr.ph160

.lr.ph160:                                        ; preds = %.critedge125.preheader
  %59 = getelementptr inbounds i8, ptr %32, i64 8
  br label %282

.preheader140:                                    ; preds = %44, %266
  %60 = phi i32 [ 1, %44 ], [ %279, %266 ]
  %61 = call noundef i64 @_ZNKSt6vectorI3VecILj3EjESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %3) #6
  %.not150.not = icmp eq i64 %61, 0
  br i1 %.not150.not, label %.preheader139, label %.lr.ph

.preheader139:                                    ; preds = %163, %.preheader140
  %.1100.lcssa = phi i8 [ 1, %.preheader140 ], [ %.5104.ph, %163 ]
  %62 = call noundef i64 @_ZNKSt6vectorI3VecILj4EjESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %7) #6
  %.not166 = icmp eq i64 %62, 0
  br i1 %.not166, label %.thread133, label %.lr.ph155

63:                                               ; preds = %1
  %64 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorI3VecILj3EjEED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %4) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %4) #6
  br label %315

65:                                               ; preds = %36
  %66 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorI3VecILj4EjEED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %8) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %8) #6
  br label %314

67:                                               ; preds = %39
  %68 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIbED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %14) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %14) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %13) #6
  br label %313

69:                                               ; preds = %43
  %70 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIbED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %17) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %17) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %16) #6
  br label %312

.lr.ph:                                           ; preds = %.preheader140, %163
  %71 = phi i64 [ %165, %163 ], [ 0, %.preheader140 ]
  %.097152 = phi i32 [ %164, %163 ], [ 0, %.preheader140 ]
  %.1100151 = phi i8 [ %.5104.ph, %163 ], [ 1, %.preheader140 ]
  %72 = call noundef nonnull align 4 dereferenceable(12) ptr @_ZNSt6vectorI3VecILj3EjESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %3, i64 noundef %71) #6
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %18) #6
  store <2 x double> <double 5.000000e-01, double 5.000000e-01>, ptr %18, align 16
  store <2 x double> <double 5.000000e-01, double 5.000000e-01>, ptr %45, align 16
  store double 5.000000e-01, ptr %46, align 16
  call void @llvm.lifetime.start.p0(i64 3, ptr nonnull %19) #6
  %73 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3VecILj3EjEixEi(ptr noundef nonnull align 4 dereferenceable(12) %72, i32 noundef 0)
  %74 = load i32, ptr %73, align 4, !tbaa !13
  %75 = zext i32 %74 to i64
  %76 = getelementptr inbounds [6 x i8], ptr @__const._ZN10rootparity23RootParityCollisionTest21ray_prism_parity_testEv.vertex_ts, i64 0, i64 %75
  %77 = load i8, ptr %76, align 1, !tbaa !11, !range !15, !noundef !16
  %78 = trunc nuw i8 %77 to i1
  %79 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3VecILj3EjEixEi(ptr noundef nonnull align 4 dereferenceable(12) %72, i32 noundef 1)
  %80 = load i32, ptr %79, align 4, !tbaa !13
  %81 = zext i32 %80 to i64
  %82 = getelementptr inbounds [6 x i8], ptr @__const._ZN10rootparity23RootParityCollisionTest21ray_prism_parity_testEv.vertex_ts, i64 0, i64 %81
  %83 = load i8, ptr %82, align 1, !tbaa !11, !range !15, !noundef !16
  %84 = trunc nuw i8 %83 to i1
  %85 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3VecILj3EjEixEi(ptr noundef nonnull align 4 dereferenceable(12) %72, i32 noundef 2)
  %86 = load i32, ptr %85, align 4, !tbaa !13
  %87 = zext i32 %86 to i64
  %88 = getelementptr inbounds [6 x i8], ptr @__const._ZN10rootparity23RootParityCollisionTest21ray_prism_parity_testEv.vertex_ts, i64 0, i64 %87
  %89 = load i8, ptr %88, align 1, !tbaa !11, !range !15, !noundef !16
  %90 = trunc nuw i8 %89 to i1
  call void @_ZN3VecILj3EbEC2Ebbb(ptr noundef nonnull align 1 dereferenceable(3) %19, i1 noundef zeroext %78, i1 noundef zeroext %84, i1 noundef zeroext %90)
  call void @llvm.lifetime.start.p0(i64 3, ptr nonnull %20) #6
  %91 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3VecILj3EjEixEi(ptr noundef nonnull align 4 dereferenceable(12) %72, i32 noundef 0)
  %92 = load i32, ptr %91, align 4, !tbaa !13
  %93 = zext i32 %92 to i64
  %94 = getelementptr inbounds [6 x i8], ptr @__const._ZN10rootparity23RootParityCollisionTest21ray_prism_parity_testEv.vertex_us, i64 0, i64 %93
  %95 = load i8, ptr %94, align 1, !tbaa !11, !range !15, !noundef !16
  %96 = trunc nuw i8 %95 to i1
  %97 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3VecILj3EjEixEi(ptr noundef nonnull align 4 dereferenceable(12) %72, i32 noundef 1)
  %98 = load i32, ptr %97, align 4, !tbaa !13
  %99 = zext i32 %98 to i64
  %100 = getelementptr inbounds [6 x i8], ptr @__const._ZN10rootparity23RootParityCollisionTest21ray_prism_parity_testEv.vertex_us, i64 0, i64 %99
  %101 = load i8, ptr %100, align 1, !tbaa !11, !range !15, !noundef !16
  %102 = trunc nuw i8 %101 to i1
  %103 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3VecILj3EjEixEi(ptr noundef nonnull align 4 dereferenceable(12) %72, i32 noundef 2)
  %104 = load i32, ptr %103, align 4, !tbaa !13
  %105 = zext i32 %104 to i64
  %106 = getelementptr inbounds [6 x i8], ptr @__const._ZN10rootparity23RootParityCollisionTest21ray_prism_parity_testEv.vertex_us, i64 0, i64 %105
  %107 = load i8, ptr %106, align 1, !tbaa !11, !range !15, !noundef !16
  %108 = trunc nuw i8 %107 to i1
  call void @_ZN3VecILj3EbEC2Ebbb(ptr noundef nonnull align 1 dereferenceable(3) %20, i1 noundef zeroext %96, i1 noundef zeroext %102, i1 noundef zeroext %108)
  call void @llvm.lifetime.start.p0(i64 3, ptr nonnull %21) #6
  %109 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3VecILj3EjEixEi(ptr noundef nonnull align 4 dereferenceable(12) %72, i32 noundef 0)
  %110 = load i32, ptr %109, align 4, !tbaa !13
  %111 = zext i32 %110 to i64
  %112 = getelementptr inbounds [6 x i8], ptr @__const._ZN10rootparity23RootParityCollisionTest21ray_prism_parity_testEv.vertex_vs, i64 0, i64 %111
  %113 = load i8, ptr %112, align 1, !tbaa !11, !range !15, !noundef !16
  %114 = trunc nuw i8 %113 to i1
  %115 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3VecILj3EjEixEi(ptr noundef nonnull align 4 dereferenceable(12) %72, i32 noundef 1)
  %116 = load i32, ptr %115, align 4, !tbaa !13
  %117 = zext i32 %116 to i64
  %118 = getelementptr inbounds [6 x i8], ptr @__const._ZN10rootparity23RootParityCollisionTest21ray_prism_parity_testEv.vertex_vs, i64 0, i64 %117
  %119 = load i8, ptr %118, align 1, !tbaa !11, !range !15, !noundef !16
  %120 = trunc nuw i8 %119 to i1
  %121 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3VecILj3EjEixEi(ptr noundef nonnull align 4 dereferenceable(12) %72, i32 noundef 2)
  %122 = load i32, ptr %121, align 4, !tbaa !13
  %123 = zext i32 %122 to i64
  %124 = getelementptr inbounds [6 x i8], ptr @__const._ZN10rootparity23RootParityCollisionTest21ray_prism_parity_testEv.vertex_vs, i64 0, i64 %123
  %125 = load i8, ptr %124, align 1, !tbaa !11, !range !15, !noundef !16
  %126 = trunc nuw i8 %125 to i1
  call void @_ZN3VecILj3EbEC2Ebbb(ptr noundef nonnull align 1 dereferenceable(3) %21, i1 noundef zeroext %114, i1 noundef zeroext %120, i1 noundef zeroext %126)
  %127 = load ptr, ptr %0, align 8, !tbaa !17
  %128 = load i8, ptr %54, align 8, !tbaa !21, !range !15, !noundef !16
  %129 = trunc nuw i8 %128 to i1
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %22) #6
  call void @_ZN3VecILj3EdEC2Eddd(ptr noundef nonnull align 8 dereferenceable(24) %22, double noundef 0.000000e+00, double noundef 0.000000e+00, double noundef 0.000000e+00)
  %130 = invoke noundef zeroext i1 @_ZN10rootparity12_GLOBAL__N_126edge_triangle_intersectionERK3VecILj3EdES4_S4_S4_S4_S4_S4_S4_bRKS1_ILj3EbES7_S7_S4_S4_Pd(ptr noundef nonnull align 8 dereferenceable(24) %127, ptr noundef nonnull align 8 dereferenceable(24) %47, ptr noundef nonnull align 8 dereferenceable(24) %48, ptr noundef nonnull align 8 dereferenceable(24) %49, ptr noundef nonnull align 8 dereferenceable(24) %50, ptr noundef nonnull align 8 dereferenceable(24) %51, ptr noundef nonnull align 8 dereferenceable(24) %52, ptr noundef nonnull align 8 dereferenceable(24) %53, i1 noundef zeroext %129, ptr noundef nonnull align 1 dereferenceable(3) %19, ptr noundef nonnull align 1 dereferenceable(3) %20, ptr noundef nonnull align 1 dereferenceable(3) %21, ptr noundef nonnull align 8 dereferenceable(24) %22, ptr noundef nonnull align 8 dereferenceable(24) %2, ptr noundef nonnull %18)
          to label %131 unwind label %156

131:                                              ; preds = %.lr.ph
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %23) #6
  %132 = invoke { ptr, i64 } @_ZNSt6vectorIbSaIbEEixEm(ptr noundef nonnull align 8 dereferenceable(40) %12, i64 noundef %71)
          to label %133 unwind label %158

133:                                              ; preds = %131
  %134 = extractvalue { ptr, i64 } %132, 0
  store ptr %134, ptr %23, align 8
  %135 = extractvalue { ptr, i64 } %132, 1
  store i64 %135, ptr %55, align 8
  %136 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt14_Bit_referenceaSEb(ptr noundef nonnull align 8 dereferenceable(16) %23, i1 noundef zeroext %130) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %23) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %22) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %24) #6
  %137 = invoke { ptr, i64 } @_ZNSt6vectorIbSaIbEEixEm(ptr noundef nonnull align 8 dereferenceable(40) %12, i64 noundef %71)
          to label %138 unwind label %161

138:                                              ; preds = %133
  %139 = extractvalue { ptr, i64 } %137, 0
  store ptr %139, ptr %24, align 8
  %140 = extractvalue { ptr, i64 } %137, 1
  store i64 %140, ptr %56, align 8
  %141 = call noundef zeroext i1 @_ZNKSt14_Bit_referencecvbEv(ptr noundef nonnull align 8 dereferenceable(16) %24) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %24) #6
  br i1 %141, label %142, label %163

142:                                              ; preds = %138
  %143 = load <2 x double>, ptr %45, align 16
  %.fr177 = freeze <2 x double> %143
  %144 = extractelement <2 x double> %.fr177, i64 1
  %145 = fcmp oeq double %144, 0.000000e+00
  %146 = load double, ptr %46, align 16
  %147 = fcmp oeq double %146, 0.000000e+00
  %148 = shufflevector <2 x double> %.fr177, <2 x double> poison, <4 x i32> <i32 0, i32 1, i32 poison, i32 poison>
  %149 = insertelement <4 x double> %148, double %146, i64 2
  %150 = shufflevector <4 x double> %149, <4 x double> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 0>
  %.fr = freeze <4 x double> %150
  %151 = fcmp oeq <4 x double> %.fr, <double 1.000000e+00, double 1.000000e+00, double 1.000000e+00, double 0.000000e+00>
  %152 = bitcast <4 x i1> %151 to i4
  %153 = icmp ne i4 %152, 0
  %op.rdx = or i1 %153, %145
  %op.rdx174 = select i1 %op.rdx, i1 true, i1 %147
  %.3102 = select i1 %op.rdx174, i8 0, i8 %.1100151
  %154 = load double, ptr %18, align 16, !tbaa !22
  %155 = fcmp oeq double %154, 1.000000e+00
  br i1 %155, label %.thread131, label %163

156:                                              ; preds = %.lr.ph
  %157 = landingpad { ptr, i32 }
          cleanup
  br label %160

158:                                              ; preds = %131
  %159 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %23) #6
  br label %160

160:                                              ; preds = %158, %156
  %.pn = phi { ptr, i32 } [ %159, %158 ], [ %157, %156 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %22) #6
  br label %167

161:                                              ; preds = %133
  %162 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %24) #6
  br label %167

.thread131:                                       ; preds = %142
  call void @llvm.lifetime.end.p0(i64 3, ptr nonnull %21) #6
  call void @llvm.lifetime.end.p0(i64 3, ptr nonnull %20) #6
  call void @llvm.lifetime.end.p0(i64 3, ptr nonnull %19) #6
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %18) #6
  br label %.critedge

163:                                              ; preds = %142, %138
  %.5104.ph = phi i8 [ %.1100151, %138 ], [ %.3102, %142 ]
  call void @llvm.lifetime.end.p0(i64 3, ptr nonnull %21) #6
  call void @llvm.lifetime.end.p0(i64 3, ptr nonnull %20) #6
  call void @llvm.lifetime.end.p0(i64 3, ptr nonnull %19) #6
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %18) #6
  %164 = add i32 %.097152, 1
  %165 = zext i32 %164 to i64
  %166 = call noundef i64 @_ZNKSt6vectorI3VecILj3EjESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %3) #6
  %.not = icmp ugt i64 %166, %165
  br i1 %.not, label %.lr.ph, label %.preheader139, !llvm.loop !24

167:                                              ; preds = %161, %160
  %.pn113 = phi { ptr, i32 } [ %162, %161 ], [ %.pn, %160 ]
  call void @llvm.lifetime.end.p0(i64 3, ptr nonnull %21) #6
  call void @llvm.lifetime.end.p0(i64 3, ptr nonnull %20) #6
  call void @llvm.lifetime.end.p0(i64 3, ptr nonnull %19) #6
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %18) #6
  br label %311

168:                                              ; preds = %250
  %.8107 = select i1 %255, i8 0, i8 %.7106153
  %169 = add i32 %.083154, 1
  %170 = zext i32 %169 to i64
  %171 = call noundef i64 @_ZNKSt6vectorI3VecILj4EjESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %7) #6
  %172 = icmp ugt i64 %171, %170
  br i1 %172, label %.lr.ph155, label %.thread133, !llvm.loop !26

.lr.ph155:                                        ; preds = %.preheader139, %168
  %173 = phi i64 [ %170, %168 ], [ 0, %.preheader139 ]
  %.083154 = phi i32 [ %169, %168 ], [ 0, %.preheader139 ]
  %.7106153 = phi i8 [ %.8107, %168 ], [ %.1100.lcssa, %.preheader139 ]
  %174 = call noundef nonnull align 4 dereferenceable(16) ptr @_ZNSt6vectorI3VecILj4EjESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %7, i64 noundef %173) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %25) #6
  store i8 0, ptr %25, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %26) #6
  store i8 0, ptr %26, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %27) #6
  %175 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3VecILj4EjEixEi(ptr noundef nonnull align 4 dereferenceable(16) %174, i32 noundef 0)
  %176 = load i32, ptr %175, align 4, !tbaa !13
  %177 = zext i32 %176 to i64
  %178 = getelementptr inbounds [6 x i8], ptr @__const._ZN10rootparity23RootParityCollisionTest21ray_prism_parity_testEv.vertex_ts, i64 0, i64 %177
  %179 = load i8, ptr %178, align 1, !tbaa !11, !range !15, !noundef !16
  %180 = trunc nuw i8 %179 to i1
  %181 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3VecILj4EjEixEi(ptr noundef nonnull align 4 dereferenceable(16) %174, i32 noundef 1)
  %182 = load i32, ptr %181, align 4, !tbaa !13
  %183 = zext i32 %182 to i64
  %184 = getelementptr inbounds [6 x i8], ptr @__const._ZN10rootparity23RootParityCollisionTest21ray_prism_parity_testEv.vertex_ts, i64 0, i64 %183
  %185 = load i8, ptr %184, align 1, !tbaa !11, !range !15, !noundef !16
  %186 = trunc nuw i8 %185 to i1
  %187 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3VecILj4EjEixEi(ptr noundef nonnull align 4 dereferenceable(16) %174, i32 noundef 2)
  %188 = load i32, ptr %187, align 4, !tbaa !13
  %189 = zext i32 %188 to i64
  %190 = getelementptr inbounds [6 x i8], ptr @__const._ZN10rootparity23RootParityCollisionTest21ray_prism_parity_testEv.vertex_ts, i64 0, i64 %189
  %191 = load i8, ptr %190, align 1, !tbaa !11, !range !15, !noundef !16
  %192 = trunc nuw i8 %191 to i1
  %193 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3VecILj4EjEixEi(ptr noundef nonnull align 4 dereferenceable(16) %174, i32 noundef 3)
  %194 = load i32, ptr %193, align 4, !tbaa !13
  %195 = zext i32 %194 to i64
  %196 = getelementptr inbounds [6 x i8], ptr @__const._ZN10rootparity23RootParityCollisionTest21ray_prism_parity_testEv.vertex_ts, i64 0, i64 %195
  %197 = load i8, ptr %196, align 1, !tbaa !11, !range !15, !noundef !16
  %198 = trunc nuw i8 %197 to i1
  call void @_ZN3VecILj4EbEC2Ebbbb(ptr noundef nonnull align 1 dereferenceable(4) %27, i1 noundef zeroext %180, i1 noundef zeroext %186, i1 noundef zeroext %192, i1 noundef zeroext %198)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %28) #6
  %199 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3VecILj4EjEixEi(ptr noundef nonnull align 4 dereferenceable(16) %174, i32 noundef 0)
  %200 = load i32, ptr %199, align 4, !tbaa !13
  %201 = zext i32 %200 to i64
  %202 = getelementptr inbounds [6 x i8], ptr @__const._ZN10rootparity23RootParityCollisionTest21ray_prism_parity_testEv.vertex_us, i64 0, i64 %201
  %203 = load i8, ptr %202, align 1, !tbaa !11, !range !15, !noundef !16
  %204 = trunc nuw i8 %203 to i1
  %205 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3VecILj4EjEixEi(ptr noundef nonnull align 4 dereferenceable(16) %174, i32 noundef 1)
  %206 = load i32, ptr %205, align 4, !tbaa !13
  %207 = zext i32 %206 to i64
  %208 = getelementptr inbounds [6 x i8], ptr @__const._ZN10rootparity23RootParityCollisionTest21ray_prism_parity_testEv.vertex_us, i64 0, i64 %207
  %209 = load i8, ptr %208, align 1, !tbaa !11, !range !15, !noundef !16
  %210 = trunc nuw i8 %209 to i1
  %211 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3VecILj4EjEixEi(ptr noundef nonnull align 4 dereferenceable(16) %174, i32 noundef 2)
  %212 = load i32, ptr %211, align 4, !tbaa !13
  %213 = zext i32 %212 to i64
  %214 = getelementptr inbounds [6 x i8], ptr @__const._ZN10rootparity23RootParityCollisionTest21ray_prism_parity_testEv.vertex_us, i64 0, i64 %213
  %215 = load i8, ptr %214, align 1, !tbaa !11, !range !15, !noundef !16
  %216 = trunc nuw i8 %215 to i1
  %217 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3VecILj4EjEixEi(ptr noundef nonnull align 4 dereferenceable(16) %174, i32 noundef 3)
  %218 = load i32, ptr %217, align 4, !tbaa !13
  %219 = zext i32 %218 to i64
  %220 = getelementptr inbounds [6 x i8], ptr @__const._ZN10rootparity23RootParityCollisionTest21ray_prism_parity_testEv.vertex_us, i64 0, i64 %219
  %221 = load i8, ptr %220, align 1, !tbaa !11, !range !15, !noundef !16
  %222 = trunc nuw i8 %221 to i1
  call void @_ZN3VecILj4EbEC2Ebbbb(ptr noundef nonnull align 1 dereferenceable(4) %28, i1 noundef zeroext %204, i1 noundef zeroext %210, i1 noundef zeroext %216, i1 noundef zeroext %222)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %29) #6
  %223 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3VecILj4EjEixEi(ptr noundef nonnull align 4 dereferenceable(16) %174, i32 noundef 0)
  %224 = load i32, ptr %223, align 4, !tbaa !13
  %225 = zext i32 %224 to i64
  %226 = getelementptr inbounds [6 x i8], ptr @__const._ZN10rootparity23RootParityCollisionTest21ray_prism_parity_testEv.vertex_vs, i64 0, i64 %225
  %227 = load i8, ptr %226, align 1, !tbaa !11, !range !15, !noundef !16
  %228 = trunc nuw i8 %227 to i1
  %229 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3VecILj4EjEixEi(ptr noundef nonnull align 4 dereferenceable(16) %174, i32 noundef 1)
  %230 = load i32, ptr %229, align 4, !tbaa !13
  %231 = zext i32 %230 to i64
  %232 = getelementptr inbounds [6 x i8], ptr @__const._ZN10rootparity23RootParityCollisionTest21ray_prism_parity_testEv.vertex_vs, i64 0, i64 %231
  %233 = load i8, ptr %232, align 1, !tbaa !11, !range !15, !noundef !16
  %234 = trunc nuw i8 %233 to i1
  %235 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3VecILj4EjEixEi(ptr noundef nonnull align 4 dereferenceable(16) %174, i32 noundef 2)
  %236 = load i32, ptr %235, align 4, !tbaa !13
  %237 = zext i32 %236 to i64
  %238 = getelementptr inbounds [6 x i8], ptr @__const._ZN10rootparity23RootParityCollisionTest21ray_prism_parity_testEv.vertex_vs, i64 0, i64 %237
  %239 = load i8, ptr %238, align 1, !tbaa !11, !range !15, !noundef !16
  %240 = trunc nuw i8 %239 to i1
  %241 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3VecILj4EjEixEi(ptr noundef nonnull align 4 dereferenceable(16) %174, i32 noundef 3)
  %242 = load i32, ptr %241, align 4, !tbaa !13
  %243 = zext i32 %242 to i64
  %244 = getelementptr inbounds [6 x i8], ptr @__const._ZN10rootparity23RootParityCollisionTest21ray_prism_parity_testEv.vertex_vs, i64 0, i64 %243
  %245 = load i8, ptr %244, align 1, !tbaa !11, !range !15, !noundef !16
  %246 = trunc nuw i8 %245 to i1
  call void @_ZN3VecILj4EbEC2Ebbbb(ptr noundef nonnull align 1 dereferenceable(4) %29, i1 noundef zeroext %228, i1 noundef zeroext %234, i1 noundef zeroext %240, i1 noundef zeroext %246)
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %30) #6
  call void @_ZN3VecILj3EdEC2Eddd(ptr noundef nonnull align 8 dereferenceable(24) %30, double noundef 0.000000e+00, double noundef 0.000000e+00, double noundef 0.000000e+00)
  %247 = invoke noundef zeroext i1 @_ZN10rootparity23RootParityCollisionTest28ray_quad_intersection_parityERK3VecILj4EjERKS1_ILj4EbES7_S7_RKS1_ILj3EdESA_RbSB_(ptr noundef nonnull align 8 dereferenceable(1560) %0, ptr noundef nonnull align 4 dereferenceable(16) %174, ptr noundef nonnull align 1 dereferenceable(4) %27, ptr noundef nonnull align 1 dereferenceable(4) %28, ptr noundef nonnull align 1 dereferenceable(4) %29, ptr noundef nonnull align 8 dereferenceable(24) %30, ptr noundef nonnull align 8 dereferenceable(24) %2, ptr noundef nonnull align 1 dereferenceable(1) %25, ptr noundef nonnull align 1 dereferenceable(1) %26)
          to label %248 unwind label %259

248:                                              ; preds = %.lr.ph155
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %31) #6
  %249 = invoke { ptr, i64 } @_ZNSt6vectorIbSaIbEEixEm(ptr noundef nonnull align 8 dereferenceable(40) %15, i64 noundef %173)
          to label %250 unwind label %261

250:                                              ; preds = %248
  %251 = extractvalue { ptr, i64 } %249, 0
  store ptr %251, ptr %31, align 8
  %252 = extractvalue { ptr, i64 } %249, 1
  store i64 %252, ptr %57, align 8
  %253 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt14_Bit_referenceaSEb(ptr noundef nonnull align 8 dereferenceable(16) %31, i1 noundef zeroext %247) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %31) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %30) #6
  %254 = load i8, ptr %25, align 1, !tbaa !11, !range !15, !noundef !16
  %255 = trunc nuw i8 %254 to i1
  %256 = load i8, ptr %26, align 1, !range !15
  %257 = trunc nuw i8 %256 to i1
  %258 = select i1 %255, i1 true, i1 %257
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %29) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %28) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %27) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %26) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %25) #6
  br i1 %258, label %264, label %168

259:                                              ; preds = %.lr.ph155
  %260 = landingpad { ptr, i32 }
          cleanup
  br label %263

261:                                              ; preds = %248
  %262 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %31) #6
  br label %263

263:                                              ; preds = %261, %259
  %.pn115 = phi { ptr, i32 } [ %262, %261 ], [ %260, %259 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %30) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %29) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %28) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %27) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %26) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %25) #6
  br label %311

264:                                              ; preds = %250
  br i1 %255, label %.thread133, label %.critedge

.thread133:                                       ; preds = %168, %.preheader139, %264
  %.9137 = phi i8 [ 0, %264 ], [ %.1100.lcssa, %.preheader139 ], [ %.8107, %168 ]
  %265 = trunc nuw i8 %.9137 to i1
  br i1 %265, label %.critedge125.preheader, label %266

266:                                              ; preds = %.thread133
  %267 = call i32 @rand() #6
  %268 = sitofp i32 %267 to double
  %269 = fdiv double %268, 0x41DFFFFFFFC00000
  %270 = fmul double %269, 2.000000e+00
  %271 = fmul double %270, 0x400921FB54442D18
  %272 = call double @cos(double noundef %271) #6
  %273 = fmul double %35, %272
  %274 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3VecILj3EdEixEi(ptr noundef nonnull align 8 dereferenceable(24) %2, i32 noundef 0)
  store double %273, ptr %274, align 8, !tbaa !22
  %275 = call double @sin(double noundef %271) #6
  %276 = fneg double %275
  %277 = fmul double %35, %276
  %278 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3VecILj3EdEixEi(ptr noundef nonnull align 8 dereferenceable(24) %2, i32 noundef 1)
  store double %277, ptr %278, align 8, !tbaa !22
  %279 = add nuw nsw i32 %60, 1
  %exitcond.not = icmp eq i32 %60, 10
  br i1 %exitcond.not, label %.critedge, label %.preheader140

.preheader:                                       ; preds = %.critedge125, %.critedge125.preheader
  %.070.lcssa = phi i32 [ 0, %.critedge125.preheader ], [ %spec.select126, %.critedge125 ]
  %280 = call noundef i64 @_ZNKSt6vectorIbSaIbEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(40) %15) #6
  %.not168 = icmp eq i64 %280, 0
  br i1 %.not168, label %._crit_edge, label %.lr.ph164

.lr.ph164:                                        ; preds = %.preheader
  %281 = getelementptr inbounds i8, ptr %33, i64 8
  br label %297

282:                                              ; preds = %.lr.ph160, %.critedge125
  %283 = phi i64 [ 0, %.lr.ph160 ], [ %290, %.critedge125 ]
  %.069159 = phi i32 [ 0, %.lr.ph160 ], [ %289, %.critedge125 ]
  %.070158 = phi i32 [ 0, %.lr.ph160 ], [ %spec.select126, %.critedge125 ]
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %32) #6
  %284 = invoke { ptr, i64 } @_ZNSt6vectorIbSaIbEEixEm(ptr noundef nonnull align 8 dereferenceable(40) %12, i64 noundef %283)
          to label %.critedge125 unwind label %293

.critedge125:                                     ; preds = %282
  %285 = extractvalue { ptr, i64 } %284, 0
  store ptr %285, ptr %32, align 8
  %286 = extractvalue { ptr, i64 } %284, 1
  store i64 %286, ptr %59, align 8
  %287 = call noundef zeroext i1 @_ZNKSt14_Bit_referencecvbEv(ptr noundef nonnull align 8 dereferenceable(16) %32) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %32) #6
  %288 = zext i1 %287 to i32
  %spec.select126 = add i32 %.070158, %288
  %289 = add i32 %.069159, 1
  %290 = zext i32 %289 to i64
  %291 = call noundef i64 @_ZNKSt6vectorIbSaIbEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(40) %12) #6
  %292 = icmp ugt i64 %291, %290
  br i1 %292, label %282, label %.preheader, !llvm.loop !27

293:                                              ; preds = %282
  %294 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %32) #6
  br label %311

._crit_edge:                                      ; preds = %300, %.preheader
  %.2.lcssa = phi i32 [ %.070.lcssa, %.preheader ], [ %spec.select127, %300 ]
  %295 = and i32 %.2.lcssa, 1
  %296 = icmp ne i32 %295, 0
  br label %.critedge

297:                                              ; preds = %.lr.ph164, %300
  %298 = phi i64 [ 0, %.lr.ph164 ], [ %306, %300 ]
  %.0163 = phi i32 [ 0, %.lr.ph164 ], [ %305, %300 ]
  %.2162 = phi i32 [ %.070.lcssa, %.lr.ph164 ], [ %spec.select127, %300 ]
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %33) #6
  %299 = invoke { ptr, i64 } @_ZNSt6vectorIbSaIbEEixEm(ptr noundef nonnull align 8 dereferenceable(40) %15, i64 noundef %298)
          to label %300 unwind label %309

300:                                              ; preds = %297
  %301 = extractvalue { ptr, i64 } %299, 0
  store ptr %301, ptr %33, align 8
  %302 = extractvalue { ptr, i64 } %299, 1
  store i64 %302, ptr %281, align 8
  %303 = call noundef zeroext i1 @_ZNKSt14_Bit_referencecvbEv(ptr noundef nonnull align 8 dereferenceable(16) %33) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %33) #6
  %304 = zext i1 %303 to i32
  %spec.select127 = add i32 %.2162, %304
  %305 = add i32 %.0163, 1
  %306 = zext i32 %305 to i64
  %307 = call noundef i64 @_ZNKSt6vectorIbSaIbEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(40) %15) #6
  %308 = icmp ugt i64 %307, %306
  br i1 %308, label %297, label %._crit_edge, !llvm.loop !28

309:                                              ; preds = %297
  %310 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %33) #6
  br label %311

.critedge:                                        ; preds = %266, %264, %.thread131, %._crit_edge
  %.7 = phi i1 [ %296, %._crit_edge ], [ true, %.thread131 ], [ true, %264 ], [ true, %266 ]
  call void @_ZNSt13_Bvector_baseISaIbEED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %15) #6
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %15) #6
  call void @_ZNSt13_Bvector_baseISaIbEED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %12) #6
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %12) #6
  call void @_ZNSt6vectorI3VecILj4EjESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %7) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %7) #6
  call void @_ZNSt6vectorI3VecILj3EjESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %3) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %3) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %2) #6
  ret i1 %.7

311:                                              ; preds = %293, %309, %263, %167
  %.pn117.pn = phi { ptr, i32 } [ %.pn115, %263 ], [ %.pn113, %167 ], [ %294, %293 ], [ %310, %309 ]
  call void @_ZNSt13_Bvector_baseISaIbEED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %15) #6
  br label %312

312:                                              ; preds = %311, %69
  %.pn117.pn.pn = phi { ptr, i32 } [ %.pn117.pn, %311 ], [ %70, %69 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %15) #6
  call void @_ZNSt13_Bvector_baseISaIbEED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %12) #6
  br label %313

313:                                              ; preds = %312, %67
  %.pn117.pn.pn.pn = phi { ptr, i32 } [ %.pn117.pn.pn, %312 ], [ %68, %67 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %12) #6
  call void @_ZNSt6vectorI3VecILj4EjESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %7) #6
  br label %314

314:                                              ; preds = %313, %65
  %.pn117.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn117.pn.pn.pn, %313 ], [ %66, %65 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %7) #6
  call void @_ZNSt6vectorI3VecILj3EjESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %3) #6
  br label %315

315:                                              ; preds = %314, %63
  %.pn117.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn117.pn.pn.pn.pn, %314 ], [ %64, %63 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %3) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %2) #6
  resume { ptr, i32 } %.pn117.pn.pn.pn.pn.pn
}

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

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

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

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

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare hidden noundef zeroext i1 @_ZN10rootparity12_GLOBAL__N_126edge_triangle_intersectionERK3VecILj3EdES4_S4_S4_S4_S4_S4_S4_bRKS1_ILj3EbES7_S7_S4_S4_Pd(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24), i1 noundef zeroext, ptr noundef nonnull align 1 dereferenceable(3), ptr noundef nonnull align 1 dereferenceable(3), ptr noundef nonnull align 1 dereferenceable(3), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef) local_unnamed_addr #2

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

; Function Attrs: mustprogress uwtable
declare dso_local { ptr, i64 } @_ZNSt6vectorIbSaIbEEixEm(ptr noundef nonnull align 8 dereferenceable(40), i64 noundef) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt14_Bit_referenceaSEb(ptr noundef nonnull align 8 dereferenceable(16), i1 noundef zeroext) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNKSt14_Bit_referencecvbEv(ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #1 align 2

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

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

; Function Attrs: nounwind
declare i32 @rand() local_unnamed_addr #4

; Function Attrs: mustprogress nofree nounwind willreturn memory(write)
declare double @cos(double noundef) local_unnamed_addr #5

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

; Function Attrs: mustprogress nofree nounwind willreturn memory(write)
declare double @sin(double noundef) local_unnamed_addr #5

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

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

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

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

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{i64 0, i64 24, !6}
!6 = !{!7, !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{i64 0, i64 12, !6}
!10 = !{i64 0, i64 16, !6}
!11 = !{!12, !12, i64 0}
!12 = !{!"bool", !7, i64 0}
!13 = !{!14, !14, i64 0}
!14 = !{!"int", !7, i64 0}
!15 = !{i8 0, i8 2}
!16 = !{}
!17 = !{!18, !19, i64 0}
!18 = !{!"_ZTSN10rootparity23RootParityCollisionTestE", !19, i64 0, !20, i64 8, !20, i64 32, !20, i64 56, !20, i64 80, !20, i64 104, !20, i64 128, !20, i64 152, !12, i64 176, !20, i64 184, !7, i64 208, !7, i64 784, !7, i64 1552}
!19 = !{!"any pointer", !7, i64 0}
!20 = !{!"_ZTS3VecILj3EdE", !7, i64 0}
!21 = !{!18, !12, i64 176}
!22 = !{!23, !23, i64 0}
!23 = !{!"double", !7, i64 0}
!24 = distinct !{!24, !25}
!25 = !{!"llvm.loop.mustprogress"}
!26 = distinct !{!26, !25}
!27 = distinct !{!27, !25}
!28 = distinct !{!28, !25}


; Effective O3 passes: CorrelatedValuePropagationPass,DSEPass,EarlyCSEPass,GVNPass,GlobalDCEPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopInstSimplifyPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,ReassociatePass,SLPVectorizerPass,SROAPass,SimplifyCFGPass