; 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 = 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 }
%"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.0 = type { [3 x double] }

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare hidden void @_ZN10rootparity12_GLOBAL__N_111make_vectorILj3E8IntervalEEvRK3VecIXT_EdERS3_IXT_ET0_E(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(72)) #2

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) #3 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare hidden void @_ZN10rootparity12_GLOBAL__N_128edge_edge_collision_functionI9expansionEEvRK3VecILj3EdES6_S6_S6_S6_S6_S6_S6_bbbRS3_ILj3ET_E(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, i1 noundef zeroext, i1 noundef zeroext, ptr noundef nonnull align 8 dereferenceable(96)) #2

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

; Function Attrs: mustprogress uwtable
declare hidden void @_ZN10rootparity12_GLOBAL__N_133point_triangle_collision_functionI9expansionEEvRK3VecILj3EdES6_S6_S6_S6_S6_S6_S6_bbbRS3_ILj3ET_E(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, i1 noundef zeroext, i1 noundef zeroext, ptr noundef nonnull align 8 dereferenceable(96)) #1

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare hidden void @_ZN10rootparity12_GLOBAL__N_111make_vectorILj3E9expansionEEvRK3VecIXT_EdERS3_IXT_ET0_E(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(96)) #2

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

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

; Function Attrs: mustprogress uwtable
define dso_local noundef i32 @_ZN10rootparity23RootParityCollisionTest30implicit_surface_function_signERK3VecILj4EjERKS1_ILj4EbES7_S7_RKS1_ILj3EdE(ptr noundef nonnull align 8 dereferenceable(1560) %0, ptr noundef nonnull align 4 dereferenceable(16) %1, ptr noundef nonnull align 1 dereferenceable(4) %2, ptr noundef nonnull align 1 dereferenceable(4) %3, ptr noundef nonnull align 1 dereferenceable(4) %4, ptr noundef nonnull align 8 dereferenceable(24) %5) #1 align 2 personality ptr @__gxx_personality_v0 {
  %7 = alloca i32, align 4
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca ptr, align 8
  %14 = alloca ptr, align 8
  %15 = alloca ptr, align 8
  %16 = alloca ptr, align 8
  %17 = alloca ptr, align 8
  %18 = alloca %struct.Vec, align 8
  %19 = alloca ptr, align 8
  %20 = alloca i32, align 4
  %21 = alloca %class.Interval, align 8
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca %struct.Vec.1, align 8
  %25 = alloca %class.expansion, align 8
  store ptr %0, ptr %8, align 8, !tbaa !5
  store ptr %1, ptr %9, align 8, !tbaa !5
  store ptr %2, ptr %10, align 8, !tbaa !5
  store ptr %3, ptr %11, align 8, !tbaa !5
  store ptr %4, ptr %12, align 8, !tbaa !5
  store ptr %5, ptr %13, align 8, !tbaa !5
  %26 = load ptr, ptr %8, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #6
  %27 = getelementptr inbounds %"class.rootparity::RootParityCollisionTest", ptr %26, i32 0, i32 10
  %28 = load ptr, ptr %9, align 8, !tbaa !5
  %29 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3VecILj4EjEixEi(ptr noundef nonnull align 4 dereferenceable(16) %28, i32 noundef 0)
  %30 = load i32, ptr %29, align 4, !tbaa !9
  %31 = zext i32 %30 to i64
  %32 = getelementptr inbounds [8 x %struct.Vec], ptr %27, i64 0, i64 %31
  store ptr %32, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #6
  %33 = getelementptr inbounds %"class.rootparity::RootParityCollisionTest", ptr %26, i32 0, i32 10
  %34 = load ptr, ptr %9, align 8, !tbaa !5
  %35 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3VecILj4EjEixEi(ptr noundef nonnull align 4 dereferenceable(16) %34, i32 noundef 1)
  %36 = load i32, ptr %35, align 4, !tbaa !9
  %37 = zext i32 %36 to i64
  %38 = getelementptr inbounds [8 x %struct.Vec], ptr %33, i64 0, i64 %37
  store ptr %38, ptr %15, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #6
  %39 = getelementptr inbounds %"class.rootparity::RootParityCollisionTest", ptr %26, i32 0, i32 10
  %40 = load ptr, ptr %9, align 8, !tbaa !5
  %41 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3VecILj4EjEixEi(ptr noundef nonnull align 4 dereferenceable(16) %40, i32 noundef 2)
  %42 = load i32, ptr %41, align 4, !tbaa !9
  %43 = zext i32 %42 to i64
  %44 = getelementptr inbounds [8 x %struct.Vec], ptr %39, i64 0, i64 %43
  store ptr %44, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #6
  %45 = getelementptr inbounds %"class.rootparity::RootParityCollisionTest", ptr %26, i32 0, i32 10
  %46 = load ptr, ptr %9, align 8, !tbaa !5
  %47 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3VecILj4EjEixEi(ptr noundef nonnull align 4 dereferenceable(16) %46, i32 noundef 3)
  %48 = load i32, ptr %47, align 4, !tbaa !9
  %49 = zext i32 %48 to i64
  %50 = getelementptr inbounds [8 x %struct.Vec], ptr %45, i64 0, i64 %49
  store ptr %50, ptr %17, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 72, ptr %18) #6
  call void @_ZN3VecILj3E8IntervalEC2Ev(ptr noundef nonnull align 8 dereferenceable(72) %18)
  %51 = load ptr, ptr %13, align 8, !tbaa !5
  invoke void @_ZN10rootparity12_GLOBAL__N_111make_vectorILj3E8IntervalEEvRK3VecIXT_EdERS3_IXT_ET0_E(ptr noundef nonnull align 8 dereferenceable(24) %51, ptr noundef nonnull align 8 dereferenceable(72) %18)
          to label %52 unwind label %62

52:                                               ; preds = %6
  call void @llvm.lifetime.start.p0(i64 24, ptr %21) #6
  invoke void @_ZN8IntervalC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %21)
          to label %53 unwind label %66

53:                                               ; preds = %52
  %54 = load ptr, ptr %14, align 8, !tbaa !5
  %55 = load ptr, ptr %15, align 8, !tbaa !5
  %56 = load ptr, ptr %16, align 8, !tbaa !5
  %57 = load ptr, ptr %17, align 8, !tbaa !5
  invoke void @_ZN10rootparity12_GLOBAL__N_125implicit_surface_functionI8IntervalEEvRK3VecILj3ET_ES7_S7_S7_S7_RS4_(ptr noundef nonnull align 8 dereferenceable(72) %18, ptr noundef nonnull align 8 dereferenceable(72) %54, ptr noundef nonnull align 8 dereferenceable(72) %55, ptr noundef nonnull align 8 dereferenceable(72) %56, ptr noundef nonnull align 8 dereferenceable(72) %57, ptr noundef nonnull align 8 dereferenceable(24) %21)
          to label %58 unwind label %70

58:                                               ; preds = %53
  %59 = invoke noundef zeroext i1 @_ZNK12IntervalBase21is_certainly_negativeEv(ptr noundef nonnull align 8 dereferenceable(8) %21)
          to label %60 unwind label %70

60:                                               ; preds = %58
  br i1 %59, label %61, label %74

61:                                               ; preds = %60
  store i32 -1, ptr %7, align 4
  store i32 1, ptr %22, align 4
  br label %83

62:                                               ; preds = %6
  %63 = landingpad { ptr, i32 }
          cleanup
  %64 = extractvalue { ptr, i32 } %63, 0
  store ptr %64, ptr %19, align 8
  %65 = extractvalue { ptr, i32 } %63, 1
  store i32 %65, ptr %20, align 4
  br label %91

66:                                               ; preds = %52
  %67 = landingpad { ptr, i32 }
          cleanup
  %68 = extractvalue { ptr, i32 } %67, 0
  store ptr %68, ptr %19, align 8
  %69 = extractvalue { ptr, i32 } %67, 1
  store i32 %69, ptr %20, align 4
  br label %90

70:                                               ; preds = %78, %74, %58, %53
  %71 = landingpad { ptr, i32 }
          cleanup
  %72 = extractvalue { ptr, i32 } %71, 0
  store ptr %72, ptr %19, align 8
  %73 = extractvalue { ptr, i32 } %71, 1
  store i32 %73, ptr %20, align 4
  call void @_ZN12IntervalBaseD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %21) #6
  br label %90

74:                                               ; preds = %60
  %75 = invoke noundef zeroext i1 @_ZNK12IntervalBase17is_certainly_zeroEv(ptr noundef nonnull align 8 dereferenceable(8) %21)
          to label %76 unwind label %70

76:                                               ; preds = %74
  br i1 %75, label %77, label %78

77:                                               ; preds = %76
  store i32 0, ptr %7, align 4
  store i32 1, ptr %22, align 4
  br label %83

78:                                               ; preds = %76
  %79 = invoke noundef zeroext i1 @_ZNK12IntervalBase21is_certainly_positiveEv(ptr noundef nonnull align 8 dereferenceable(8) %21)
          to label %80 unwind label %70

80:                                               ; preds = %78
  br i1 %79, label %81, label %82

81:                                               ; preds = %80
  store i32 1, ptr %7, align 4
  store i32 1, ptr %22, align 4
  br label %83

82:                                               ; preds = %80
  store i32 0, ptr %22, align 4
  br label %83

83:                                               ; preds = %82, %81, %77, %61
  call void @_ZN12IntervalBaseD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %21) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr %21) #6
  call void @_ZN3VecILj3E8IntervalED2Ev(ptr noundef nonnull align 8 dereferenceable(72) %18) #6
  call void @llvm.lifetime.end.p0(i64 72, ptr %18) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #6
  %84 = load i32, ptr %22, align 4
  switch i32 %84, label %238 [
    i32 0, label %85
    i32 1, label %231
  ]

85:                                               ; preds = %83
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #6
  store i32 0, ptr %23, align 4, !tbaa !9
  br label %86

86:                                               ; preds = %179, %85
  %87 = load i32, ptr %23, align 4, !tbaa !9
  %88 = icmp ult i32 %87, 4
  br i1 %88, label %92, label %89

89:                                               ; preds = %86
  store i32 2, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #6
  br label %182

90:                                               ; preds = %70, %66
  call void @llvm.lifetime.end.p0(i64 24, ptr %21) #6
  br label %91

91:                                               ; preds = %90, %62
  call void @_ZN3VecILj3E8IntervalED2Ev(ptr noundef nonnull align 8 dereferenceable(72) %18) #6
  call void @llvm.lifetime.end.p0(i64 72, ptr %18) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #6
  br label %233

92:                                               ; preds = %86
  %93 = getelementptr inbounds %"class.rootparity::RootParityCollisionTest", ptr %26, i32 0, i32 12
  %94 = load ptr, ptr %9, align 8, !tbaa !5
  %95 = load i32, ptr %23, align 4, !tbaa !9
  %96 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3VecILj4EjEixEi(ptr noundef nonnull align 4 dereferenceable(16) %94, i32 noundef %95)
  %97 = load i32, ptr %96, align 4, !tbaa !9
  %98 = zext i32 %97 to i64
  %99 = getelementptr inbounds [8 x i8], ptr %93, i64 0, i64 %98
  %100 = load i8, ptr %99, align 1, !tbaa !11, !range !13, !noundef !14
  %101 = trunc i8 %100 to i1
  br i1 %101, label %178, label %102

102:                                              ; preds = %92
  %103 = getelementptr inbounds %"class.rootparity::RootParityCollisionTest", ptr %26, i32 0, i32 8
  %104 = load i8, ptr %103, align 8, !tbaa !15, !range !13, !noundef !14
  %105 = trunc i8 %104 to i1
  br i1 %105, label %106, label %138

106:                                              ; preds = %102
  %107 = getelementptr inbounds %"class.rootparity::RootParityCollisionTest", ptr %26, i32 0, i32 0
  %108 = load ptr, ptr %107, align 8, !tbaa !18
  %109 = getelementptr inbounds %"class.rootparity::RootParityCollisionTest", ptr %26, i32 0, i32 1
  %110 = getelementptr inbounds %"class.rootparity::RootParityCollisionTest", ptr %26, i32 0, i32 2
  %111 = getelementptr inbounds %"class.rootparity::RootParityCollisionTest", ptr %26, i32 0, i32 3
  %112 = getelementptr inbounds %"class.rootparity::RootParityCollisionTest", ptr %26, i32 0, i32 4
  %113 = getelementptr inbounds %"class.rootparity::RootParityCollisionTest", ptr %26, i32 0, i32 5
  %114 = getelementptr inbounds %"class.rootparity::RootParityCollisionTest", ptr %26, i32 0, i32 6
  %115 = getelementptr inbounds %"class.rootparity::RootParityCollisionTest", ptr %26, i32 0, i32 7
  %116 = load ptr, ptr %10, align 8, !tbaa !5
  %117 = load i32, ptr %23, align 4, !tbaa !9
  %118 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNK3VecILj4EbEixEi(ptr noundef nonnull align 1 dereferenceable(4) %116, i32 noundef %117)
  %119 = load i8, ptr %118, align 1, !tbaa !11, !range !13, !noundef !14
  %120 = trunc i8 %119 to i1
  %121 = load ptr, ptr %11, align 8, !tbaa !5
  %122 = load i32, ptr %23, align 4, !tbaa !9
  %123 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNK3VecILj4EbEixEi(ptr noundef nonnull align 1 dereferenceable(4) %121, i32 noundef %122)
  %124 = load i8, ptr %123, align 1, !tbaa !11, !range !13, !noundef !14
  %125 = trunc i8 %124 to i1
  %126 = load ptr, ptr %12, align 8, !tbaa !5
  %127 = load i32, ptr %23, align 4, !tbaa !9
  %128 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNK3VecILj4EbEixEi(ptr noundef nonnull align 1 dereferenceable(4) %126, i32 noundef %127)
  %129 = load i8, ptr %128, align 1, !tbaa !11, !range !13, !noundef !14
  %130 = trunc i8 %129 to i1
  %131 = getelementptr inbounds %"class.rootparity::RootParityCollisionTest", ptr %26, i32 0, i32 11
  %132 = load ptr, ptr %9, align 8, !tbaa !5
  %133 = load i32, ptr %23, align 4, !tbaa !9
  %134 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3VecILj4EjEixEi(ptr noundef nonnull align 4 dereferenceable(16) %132, i32 noundef %133)
  %135 = load i32, ptr %134, align 4, !tbaa !9
  %136 = zext i32 %135 to i64
  %137 = getelementptr inbounds [8 x %struct.Vec.1], ptr %131, i64 0, i64 %136
  call void @_ZN10rootparity12_GLOBAL__N_128edge_edge_collision_functionI9expansionEEvRK3VecILj3EdES6_S6_S6_S6_S6_S6_S6_bbbRS3_ILj3ET_E(ptr noundef nonnull align 8 dereferenceable(24) %108, ptr noundef nonnull align 8 dereferenceable(24) %109, ptr noundef nonnull align 8 dereferenceable(24) %110, ptr noundef nonnull align 8 dereferenceable(24) %111, ptr noundef nonnull align 8 dereferenceable(24) %112, ptr noundef nonnull align 8 dereferenceable(24) %113, ptr noundef nonnull align 8 dereferenceable(24) %114, ptr noundef nonnull align 8 dereferenceable(24) %115, i1 noundef zeroext %120, i1 noundef zeroext %125, i1 noundef zeroext %130, ptr noundef nonnull align 8 dereferenceable(96) %137)
  br label %170

138:                                              ; preds = %102
  %139 = getelementptr inbounds %"class.rootparity::RootParityCollisionTest", ptr %26, i32 0, i32 0
  %140 = load ptr, ptr %139, align 8, !tbaa !18
  %141 = getelementptr inbounds %"class.rootparity::RootParityCollisionTest", ptr %26, i32 0, i32 1
  %142 = getelementptr inbounds %"class.rootparity::RootParityCollisionTest", ptr %26, i32 0, i32 2
  %143 = getelementptr inbounds %"class.rootparity::RootParityCollisionTest", ptr %26, i32 0, i32 3
  %144 = getelementptr inbounds %"class.rootparity::RootParityCollisionTest", ptr %26, i32 0, i32 4
  %145 = getelementptr inbounds %"class.rootparity::RootParityCollisionTest", ptr %26, i32 0, i32 5
  %146 = getelementptr inbounds %"class.rootparity::RootParityCollisionTest", ptr %26, i32 0, i32 6
  %147 = getelementptr inbounds %"class.rootparity::RootParityCollisionTest", ptr %26, i32 0, i32 7
  %148 = load ptr, ptr %10, align 8, !tbaa !5
  %149 = load i32, ptr %23, align 4, !tbaa !9
  %150 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNK3VecILj4EbEixEi(ptr noundef nonnull align 1 dereferenceable(4) %148, i32 noundef %149)
  %151 = load i8, ptr %150, align 1, !tbaa !11, !range !13, !noundef !14
  %152 = trunc i8 %151 to i1
  %153 = load ptr, ptr %11, align 8, !tbaa !5
  %154 = load i32, ptr %23, align 4, !tbaa !9
  %155 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNK3VecILj4EbEixEi(ptr noundef nonnull align 1 dereferenceable(4) %153, i32 noundef %154)
  %156 = load i8, ptr %155, align 1, !tbaa !11, !range !13, !noundef !14
  %157 = trunc i8 %156 to i1
  %158 = load ptr, ptr %12, align 8, !tbaa !5
  %159 = load i32, ptr %23, align 4, !tbaa !9
  %160 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNK3VecILj4EbEixEi(ptr noundef nonnull align 1 dereferenceable(4) %158, i32 noundef %159)
  %161 = load i8, ptr %160, align 1, !tbaa !11, !range !13, !noundef !14
  %162 = trunc i8 %161 to i1
  %163 = getelementptr inbounds %"class.rootparity::RootParityCollisionTest", ptr %26, i32 0, i32 11
  %164 = load ptr, ptr %9, align 8, !tbaa !5
  %165 = load i32, ptr %23, align 4, !tbaa !9
  %166 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3VecILj4EjEixEi(ptr noundef nonnull align 4 dereferenceable(16) %164, i32 noundef %165)
  %167 = load i32, ptr %166, align 4, !tbaa !9
  %168 = zext i32 %167 to i64
  %169 = getelementptr inbounds [8 x %struct.Vec.1], ptr %163, i64 0, i64 %168
  call void @_ZN10rootparity12_GLOBAL__N_133point_triangle_collision_functionI9expansionEEvRK3VecILj3EdES6_S6_S6_S6_S6_S6_S6_bbbRS3_ILj3ET_E(ptr noundef nonnull align 8 dereferenceable(24) %140, ptr noundef nonnull align 8 dereferenceable(24) %141, ptr noundef nonnull align 8 dereferenceable(24) %142, ptr noundef nonnull align 8 dereferenceable(24) %143, ptr noundef nonnull align 8 dereferenceable(24) %144, ptr noundef nonnull align 8 dereferenceable(24) %145, ptr noundef nonnull align 8 dereferenceable(24) %146, ptr noundef nonnull align 8 dereferenceable(24) %147, i1 noundef zeroext %152, i1 noundef zeroext %157, i1 noundef zeroext %162, ptr noundef nonnull align 8 dereferenceable(96) %169)
  br label %170

170:                                              ; preds = %138, %106
  %171 = getelementptr inbounds %"class.rootparity::RootParityCollisionTest", ptr %26, i32 0, i32 12
  %172 = load ptr, ptr %9, align 8, !tbaa !5
  %173 = load i32, ptr %23, align 4, !tbaa !9
  %174 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3VecILj4EjEixEi(ptr noundef nonnull align 4 dereferenceable(16) %172, i32 noundef %173)
  %175 = load i32, ptr %174, align 4, !tbaa !9
  %176 = zext i32 %175 to i64
  %177 = getelementptr inbounds [8 x i8], ptr %171, i64 0, i64 %176
  store i8 1, ptr %177, align 1, !tbaa !11
  br label %178

178:                                              ; preds = %170, %92
  br label %179

179:                                              ; preds = %178
  %180 = load i32, ptr %23, align 4, !tbaa !9
  %181 = add i32 %180, 1
  store i32 %181, ptr %23, align 4, !tbaa !9
  br label %86, !llvm.loop !19

182:                                              ; preds = %89
  call void @llvm.lifetime.start.p0(i64 96, ptr %24) #6
  call void @_ZN3VecILj3E9expansionEC2Ev(ptr noundef nonnull align 8 dereferenceable(96) %24)
  %183 = load ptr, ptr %13, align 8, !tbaa !5
  invoke void @_ZN10rootparity12_GLOBAL__N_111make_vectorILj3E9expansionEEvRK3VecIXT_EdERS3_IXT_ET0_E(ptr noundef nonnull align 8 dereferenceable(24) %183, ptr noundef nonnull align 8 dereferenceable(96) %24)
          to label %184 unwind label %217

184:                                              ; preds = %182
  call void @llvm.lifetime.start.p0(i64 32, ptr %25) #6
  invoke void @_ZN9expansionC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %25)
          to label %185 unwind label %221

185:                                              ; preds = %184
  %186 = getelementptr inbounds %"class.rootparity::RootParityCollisionTest", ptr %26, i32 0, i32 11
  %187 = load ptr, ptr %9, align 8, !tbaa !5
  %188 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3VecILj4EjEixEi(ptr noundef nonnull align 4 dereferenceable(16) %187, i32 noundef 0)
          to label %189 unwind label %225

189:                                              ; preds = %185
  %190 = load i32, ptr %188, align 4, !tbaa !9
  %191 = zext i32 %190 to i64
  %192 = getelementptr inbounds [8 x %struct.Vec.1], ptr %186, i64 0, i64 %191
  %193 = getelementptr inbounds %"class.rootparity::RootParityCollisionTest", ptr %26, i32 0, i32 11
  %194 = load ptr, ptr %9, align 8, !tbaa !5
  %195 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3VecILj4EjEixEi(ptr noundef nonnull align 4 dereferenceable(16) %194, i32 noundef 1)
          to label %196 unwind label %225

196:                                              ; preds = %189
  %197 = load i32, ptr %195, align 4, !tbaa !9
  %198 = zext i32 %197 to i64
  %199 = getelementptr inbounds [8 x %struct.Vec.1], ptr %193, i64 0, i64 %198
  %200 = getelementptr inbounds %"class.rootparity::RootParityCollisionTest", ptr %26, i32 0, i32 11
  %201 = load ptr, ptr %9, align 8, !tbaa !5
  %202 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3VecILj4EjEixEi(ptr noundef nonnull align 4 dereferenceable(16) %201, i32 noundef 2)
          to label %203 unwind label %225

203:                                              ; preds = %196
  %204 = load i32, ptr %202, align 4, !tbaa !9
  %205 = zext i32 %204 to i64
  %206 = getelementptr inbounds [8 x %struct.Vec.1], ptr %200, i64 0, i64 %205
  %207 = getelementptr inbounds %"class.rootparity::RootParityCollisionTest", ptr %26, i32 0, i32 11
  %208 = load ptr, ptr %9, align 8, !tbaa !5
  %209 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3VecILj4EjEixEi(ptr noundef nonnull align 4 dereferenceable(16) %208, i32 noundef 3)
          to label %210 unwind label %225

210:                                              ; preds = %203
  %211 = load i32, ptr %209, align 4, !tbaa !9
  %212 = zext i32 %211 to i64
  %213 = getelementptr inbounds [8 x %struct.Vec.1], ptr %207, i64 0, i64 %212
  invoke void @_ZN10rootparity12_GLOBAL__N_125implicit_surface_functionI9expansionEEvRK3VecILj3ET_ES7_S7_S7_S7_RS4_(ptr noundef nonnull align 8 dereferenceable(96) %24, ptr noundef nonnull align 8 dereferenceable(96) %192, ptr noundef nonnull align 8 dereferenceable(96) %199, ptr noundef nonnull align 8 dereferenceable(96) %206, ptr noundef nonnull align 8 dereferenceable(96) %213, ptr noundef nonnull align 8 dereferenceable(32) %25)
          to label %214 unwind label %225

214:                                              ; preds = %210
  %215 = invoke noundef i32 @_Z4signRK9expansion(ptr noundef nonnull align 8 dereferenceable(32) %25)
          to label %216 unwind label %225

216:                                              ; preds = %214
  store i32 %215, ptr %7, align 4
  store i32 1, ptr %22, align 4
  call void @_ZN9expansionD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %25) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %25) #6
  call void @_ZN3VecILj3E9expansionED2Ev(ptr noundef nonnull align 8 dereferenceable(96) %24) #6
  call void @llvm.lifetime.end.p0(i64 96, ptr %24) #6
  br label %231

217:                                              ; preds = %182
  %218 = landingpad { ptr, i32 }
          cleanup
  %219 = extractvalue { ptr, i32 } %218, 0
  store ptr %219, ptr %19, align 8
  %220 = extractvalue { ptr, i32 } %218, 1
  store i32 %220, ptr %20, align 4
  br label %230

221:                                              ; preds = %184
  %222 = landingpad { ptr, i32 }
          cleanup
  %223 = extractvalue { ptr, i32 } %222, 0
  store ptr %223, ptr %19, align 8
  %224 = extractvalue { ptr, i32 } %222, 1
  store i32 %224, ptr %20, align 4
  br label %229

225:                                              ; preds = %214, %210, %203, %196, %189, %185
  %226 = landingpad { ptr, i32 }
          cleanup
  %227 = extractvalue { ptr, i32 } %226, 0
  store ptr %227, ptr %19, align 8
  %228 = extractvalue { ptr, i32 } %226, 1
  store i32 %228, ptr %20, align 4
  call void @_ZN9expansionD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %25) #6
  br label %229

229:                                              ; preds = %225, %221
  call void @llvm.lifetime.end.p0(i64 32, ptr %25) #6
  br label %230

230:                                              ; preds = %229, %217
  call void @_ZN3VecILj3E9expansionED2Ev(ptr noundef nonnull align 8 dereferenceable(96) %24) #6
  call void @llvm.lifetime.end.p0(i64 96, ptr %24) #6
  br label %233

231:                                              ; preds = %216, %83
  %232 = load i32, ptr %7, align 4
  ret i32 %232

233:                                              ; preds = %230, %91
  %234 = load ptr, ptr %19, align 8
  %235 = load i32, ptr %20, align 4
  %236 = insertvalue { ptr, i32 } poison, ptr %234, 0
  %237 = insertvalue { ptr, i32 } %236, i32 %235, 1
  resume { ptr, i32 } %237

238:                                              ; preds = %83
  unreachable
}

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

; Function Attrs: mustprogress uwtable
declare hidden void @_ZN10rootparity12_GLOBAL__N_125implicit_surface_functionI8IntervalEEvRK3VecILj3ET_ES7_S7_S7_S7_RS4_(ptr noundef nonnull align 8 dereferenceable(72), ptr noundef nonnull align 8 dereferenceable(72), ptr noundef nonnull align 8 dereferenceable(72), ptr noundef nonnull align 8 dereferenceable(72), ptr noundef nonnull align 8 dereferenceable(72), ptr noundef nonnull align 8 dereferenceable(24)) #1

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK12IntervalBase21is_certainly_negativeEv(ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #2 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK12IntervalBase17is_certainly_zeroEv(ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #2 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK12IntervalBase21is_certainly_positiveEv(ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #2 align 2

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

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

; Function Attrs: mustprogress uwtable
declare hidden void @_ZN10rootparity12_GLOBAL__N_125implicit_surface_functionI9expansionEEvRK3VecILj3ET_ES7_S7_S7_S7_RS4_(ptr noundef nonnull align 8 dereferenceable(96), ptr noundef nonnull align 8 dereferenceable(96), ptr noundef nonnull align 8 dereferenceable(96), ptr noundef nonnull align 8 dereferenceable(96), ptr noundef nonnull align 8 dereferenceable(96), ptr noundef nonnull align 8 dereferenceable(32)) #1

declare noundef i32 @_Z4signRK9expansion(ptr noundef nonnull align 8 dereferenceable(32)) #5

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

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { inlinehint mustprogress 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 nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { "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 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"bool", !7, i64 0}
!13 = !{i8 0, i8 2}
!14 = !{}
!15 = !{!16, !12, i64 176}
!16 = !{!"_ZTSN10rootparity23RootParityCollisionTestE", !6, i64 0, !17, i64 8, !17, i64 32, !17, i64 56, !17, i64 80, !17, i64 104, !17, i64 128, !17, i64 152, !12, i64 176, !17, i64 184, !7, i64 208, !7, i64 784, !7, i64 1552}
!17 = !{!"_ZTS3VecILj3EdE", !7, i64 0}
!18 = !{!16, !6, i64 0}
!19 = distinct !{!19, !20}
!20 = !{!"llvm.loop.mustprogress"}


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

%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 }

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare hidden void @_ZN10rootparity12_GLOBAL__N_111make_vectorILj3E8IntervalEEvRK3VecIXT_EdERS3_IXT_ET0_E(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(72)) local_unnamed_addr #2

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 #3 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare hidden void @_ZN10rootparity12_GLOBAL__N_128edge_edge_collision_functionI9expansionEEvRK3VecILj3EdES6_S6_S6_S6_S6_S6_S6_bbbRS3_ILj3ET_E(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, i1 noundef zeroext, i1 noundef zeroext, ptr noundef nonnull align 8 dereferenceable(96)) local_unnamed_addr #2

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

; Function Attrs: mustprogress uwtable
declare hidden void @_ZN10rootparity12_GLOBAL__N_133point_triangle_collision_functionI9expansionEEvRK3VecILj3EdES6_S6_S6_S6_S6_S6_S6_bbbRS3_ILj3ET_E(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, i1 noundef zeroext, i1 noundef zeroext, ptr noundef nonnull align 8 dereferenceable(96)) local_unnamed_addr #1

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare hidden void @_ZN10rootparity12_GLOBAL__N_111make_vectorILj3E9expansionEEvRK3VecIXT_EdERS3_IXT_ET0_E(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(96)) local_unnamed_addr #2

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

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

; Function Attrs: mustprogress uwtable
define dso_local noundef i32 @_ZN10rootparity23RootParityCollisionTest30implicit_surface_function_signERK3VecILj4EjERKS1_ILj4EbES7_S7_RKS1_ILj3EdE(ptr noundef nonnull align 8 dereferenceable(1560) %0, ptr noundef nonnull align 4 dereferenceable(16) %1, ptr noundef nonnull align 1 dereferenceable(4) %2, ptr noundef nonnull align 1 dereferenceable(4) %3, ptr noundef nonnull align 1 dereferenceable(4) %4, ptr noundef nonnull align 8 dereferenceable(24) %5) local_unnamed_addr #1 align 2 personality ptr @__gxx_personality_v0 {
  %7 = alloca %struct.Vec, align 8
  %8 = alloca %class.Interval, align 8
  %9 = alloca %struct.Vec.1, align 8
  %10 = alloca %class.expansion, align 8
  %11 = tail call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3VecILj4EjEixEi(ptr noundef nonnull align 4 dereferenceable(16) %1, i32 noundef 0)
  %12 = load i32, ptr %11, align 4, !tbaa !5
  %13 = tail call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3VecILj4EjEixEi(ptr noundef nonnull align 4 dereferenceable(16) %1, i32 noundef 1)
  %14 = load i32, ptr %13, align 4, !tbaa !5
  %15 = tail call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3VecILj4EjEixEi(ptr noundef nonnull align 4 dereferenceable(16) %1, i32 noundef 2)
  %16 = load i32, ptr %15, align 4, !tbaa !5
  %17 = tail call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3VecILj4EjEixEi(ptr noundef nonnull align 4 dereferenceable(16) %1, i32 noundef 3)
  %18 = load i32, ptr %17, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 72, ptr nonnull %7) #6
  call void @_ZN3VecILj3E8IntervalEC2Ev(ptr noundef nonnull align 8 dereferenceable(72) %7)
  invoke void @_ZN10rootparity12_GLOBAL__N_111make_vectorILj3E8IntervalEEvRK3VecIXT_EdERS3_IXT_ET0_E(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(72) %7)
          to label %19 unwind label %32

19:                                               ; preds = %6
  %20 = getelementptr inbounds i8, ptr %0, i64 208
  %21 = zext i32 %18 to i64
  %22 = getelementptr inbounds [8 x %struct.Vec], ptr %20, i64 0, i64 %21
  %23 = zext i32 %16 to i64
  %24 = getelementptr inbounds [8 x %struct.Vec], ptr %20, i64 0, i64 %23
  %25 = zext i32 %14 to i64
  %26 = getelementptr inbounds [8 x %struct.Vec], ptr %20, i64 0, i64 %25
  %27 = zext i32 %12 to i64
  %28 = getelementptr inbounds [8 x %struct.Vec], ptr %20, i64 0, i64 %27
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %8) #6
  call void @_ZN8IntervalC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %8)
  invoke void @_ZN10rootparity12_GLOBAL__N_125implicit_surface_functionI8IntervalEEvRK3VecILj3ET_ES7_S7_S7_S7_RS4_(ptr noundef nonnull align 8 dereferenceable(72) %7, ptr noundef nonnull align 8 dereferenceable(72) %28, ptr noundef nonnull align 8 dereferenceable(72) %26, ptr noundef nonnull align 8 dereferenceable(72) %24, ptr noundef nonnull align 8 dereferenceable(72) %22, ptr noundef nonnull align 8 dereferenceable(24) %8)
          to label %29 unwind label %34

29:                                               ; preds = %19
  %30 = invoke noundef zeroext i1 @_ZNK12IntervalBase21is_certainly_negativeEv(ptr noundef nonnull align 8 dereferenceable(8) %8)
          to label %31 unwind label %34

31:                                               ; preds = %29
  br i1 %30, label %41, label %36

32:                                               ; preds = %6
  %33 = landingpad { ptr, i32 }
          cleanup
  br label %58

34:                                               ; preds = %39, %36, %29, %19
  %35 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN12IntervalBaseD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %8) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %8) #6
  br label %58

36:                                               ; preds = %31
  %37 = invoke noundef zeroext i1 @_ZNK12IntervalBase17is_certainly_zeroEv(ptr noundef nonnull align 8 dereferenceable(8) %8)
          to label %38 unwind label %34

38:                                               ; preds = %36
  br i1 %37, label %41, label %39

39:                                               ; preds = %38
  %40 = invoke noundef zeroext i1 @_ZNK12IntervalBase21is_certainly_positiveEv(ptr noundef nonnull align 8 dereferenceable(8) %8)
          to label %41 unwind label %34

41:                                               ; preds = %39, %38, %31
  %.046 = phi i32 [ -1, %31 ], [ 0, %38 ], [ 1, %39 ]
  %.040 = phi i1 [ true, %31 ], [ true, %38 ], [ %40, %39 ]
  call void @_ZN12IntervalBaseD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %8) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %8) #6
  call void @_ZN3VecILj3E8IntervalED2Ev(ptr noundef nonnull align 8 dereferenceable(72) %7) #6
  call void @llvm.lifetime.end.p0(i64 72, ptr nonnull %7) #6
  br i1 %.040, label %206, label %.preheader

.preheader:                                       ; preds = %41
  %42 = getelementptr inbounds i8, ptr %0, i64 1552
  %43 = getelementptr inbounds i8, ptr %0, i64 176
  %44 = getelementptr inbounds i8, ptr %0, i64 8
  %45 = getelementptr inbounds i8, ptr %0, i64 32
  %46 = getelementptr inbounds i8, ptr %0, i64 56
  %47 = getelementptr inbounds i8, ptr %0, i64 80
  %48 = getelementptr inbounds i8, ptr %0, i64 104
  %49 = getelementptr inbounds i8, ptr %0, i64 128
  %50 = getelementptr inbounds i8, ptr %0, i64 152
  %51 = getelementptr inbounds i8, ptr %0, i64 784
  %52 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3VecILj4EjEixEi(ptr noundef nonnull align 4 dereferenceable(16) %1, i32 noundef 0)
  %53 = load i32, ptr %52, align 4, !tbaa !5
  %54 = zext i32 %53 to i64
  %55 = getelementptr inbounds [8 x i8], ptr %42, i64 0, i64 %54
  %56 = load i8, ptr %55, align 1, !tbaa !9, !range !11, !noundef !12
  %57 = trunc nuw i8 %56 to i1
  br i1 %57, label %83, label %59

58:                                               ; preds = %34, %32
  %.pn = phi { ptr, i32 } [ %35, %34 ], [ %33, %32 ]
  call void @_ZN3VecILj3E8IntervalED2Ev(ptr noundef nonnull align 8 dereferenceable(72) %7) #6
  call void @llvm.lifetime.end.p0(i64 72, ptr nonnull %7) #6
  br label %207

59:                                               ; preds = %.preheader
  %60 = load i8, ptr %43, align 8, !tbaa !13, !range !11, !noundef !12
  %61 = trunc nuw i8 %60 to i1
  %62 = load ptr, ptr %0, align 8, !tbaa !17
  %63 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNK3VecILj4EbEixEi(ptr noundef nonnull align 1 dereferenceable(4) %2, i32 noundef 0)
  %64 = load i8, ptr %63, align 1, !tbaa !9, !range !11, !noundef !12
  %65 = trunc nuw i8 %64 to i1
  %66 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNK3VecILj4EbEixEi(ptr noundef nonnull align 1 dereferenceable(4) %3, i32 noundef 0)
  %67 = load i8, ptr %66, align 1, !tbaa !9, !range !11, !noundef !12
  %68 = trunc nuw i8 %67 to i1
  %69 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNK3VecILj4EbEixEi(ptr noundef nonnull align 1 dereferenceable(4) %4, i32 noundef 0)
  %70 = load i8, ptr %69, align 1, !tbaa !9, !range !11, !noundef !12
  %71 = trunc nuw i8 %70 to i1
  %72 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3VecILj4EjEixEi(ptr noundef nonnull align 4 dereferenceable(16) %1, i32 noundef 0)
  %73 = load i32, ptr %72, align 4, !tbaa !5
  %74 = zext i32 %73 to i64
  %75 = getelementptr inbounds [8 x %struct.Vec.1], ptr %51, i64 0, i64 %74
  br i1 %61, label %76, label %77

76:                                               ; preds = %59
  call void @_ZN10rootparity12_GLOBAL__N_128edge_edge_collision_functionI9expansionEEvRK3VecILj3EdES6_S6_S6_S6_S6_S6_S6_bbbRS3_ILj3ET_E(ptr noundef nonnull align 8 dereferenceable(24) %62, ptr noundef nonnull align 8 dereferenceable(24) %44, ptr noundef nonnull align 8 dereferenceable(24) %45, ptr noundef nonnull align 8 dereferenceable(24) %46, 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, i1 noundef zeroext %65, i1 noundef zeroext %68, i1 noundef zeroext %71, ptr noundef nonnull align 8 dereferenceable(96) %75)
  br label %78

77:                                               ; preds = %59
  call void @_ZN10rootparity12_GLOBAL__N_133point_triangle_collision_functionI9expansionEEvRK3VecILj3EdES6_S6_S6_S6_S6_S6_S6_bbbRS3_ILj3ET_E(ptr noundef nonnull align 8 dereferenceable(24) %62, ptr noundef nonnull align 8 dereferenceable(24) %44, ptr noundef nonnull align 8 dereferenceable(24) %45, ptr noundef nonnull align 8 dereferenceable(24) %46, 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, i1 noundef zeroext %65, i1 noundef zeroext %68, i1 noundef zeroext %71, ptr noundef nonnull align 8 dereferenceable(96) %75)
  br label %78

78:                                               ; preds = %77, %76
  %79 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3VecILj4EjEixEi(ptr noundef nonnull align 4 dereferenceable(16) %1, i32 noundef 0)
  %80 = load i32, ptr %79, align 4, !tbaa !5
  %81 = zext i32 %80 to i64
  %82 = getelementptr inbounds [8 x i8], ptr %42, i64 0, i64 %81
  store i8 1, ptr %82, align 1, !tbaa !9
  br label %83

83:                                               ; preds = %.preheader, %78
  %84 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3VecILj4EjEixEi(ptr noundef nonnull align 4 dereferenceable(16) %1, i32 noundef 1)
  %85 = load i32, ptr %84, align 4, !tbaa !5
  %86 = zext i32 %85 to i64
  %87 = getelementptr inbounds [8 x i8], ptr %42, i64 0, i64 %86
  %88 = load i8, ptr %87, align 1, !tbaa !9, !range !11, !noundef !12
  %89 = trunc nuw i8 %88 to i1
  br i1 %89, label %114, label %90

90:                                               ; preds = %83
  %91 = load i8, ptr %43, align 8, !tbaa !13, !range !11, !noundef !12
  %92 = trunc nuw i8 %91 to i1
  %93 = load ptr, ptr %0, align 8, !tbaa !17
  %94 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNK3VecILj4EbEixEi(ptr noundef nonnull align 1 dereferenceable(4) %2, i32 noundef 1)
  %95 = load i8, ptr %94, align 1, !tbaa !9, !range !11, !noundef !12
  %96 = trunc nuw i8 %95 to i1
  %97 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNK3VecILj4EbEixEi(ptr noundef nonnull align 1 dereferenceable(4) %3, i32 noundef 1)
  %98 = load i8, ptr %97, align 1, !tbaa !9, !range !11, !noundef !12
  %99 = trunc nuw i8 %98 to i1
  %100 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNK3VecILj4EbEixEi(ptr noundef nonnull align 1 dereferenceable(4) %4, i32 noundef 1)
  %101 = load i8, ptr %100, align 1, !tbaa !9, !range !11, !noundef !12
  %102 = trunc nuw i8 %101 to i1
  %103 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3VecILj4EjEixEi(ptr noundef nonnull align 4 dereferenceable(16) %1, i32 noundef 1)
  %104 = load i32, ptr %103, align 4, !tbaa !5
  %105 = zext i32 %104 to i64
  %106 = getelementptr inbounds [8 x %struct.Vec.1], ptr %51, i64 0, i64 %105
  br i1 %92, label %108, label %107

107:                                              ; preds = %90
  call void @_ZN10rootparity12_GLOBAL__N_133point_triangle_collision_functionI9expansionEEvRK3VecILj3EdES6_S6_S6_S6_S6_S6_S6_bbbRS3_ILj3ET_E(ptr noundef nonnull align 8 dereferenceable(24) %93, ptr noundef nonnull align 8 dereferenceable(24) %44, ptr noundef nonnull align 8 dereferenceable(24) %45, ptr noundef nonnull align 8 dereferenceable(24) %46, 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, i1 noundef zeroext %96, i1 noundef zeroext %99, i1 noundef zeroext %102, ptr noundef nonnull align 8 dereferenceable(96) %106)
  br label %109

108:                                              ; preds = %90
  call void @_ZN10rootparity12_GLOBAL__N_128edge_edge_collision_functionI9expansionEEvRK3VecILj3EdES6_S6_S6_S6_S6_S6_S6_bbbRS3_ILj3ET_E(ptr noundef nonnull align 8 dereferenceable(24) %93, ptr noundef nonnull align 8 dereferenceable(24) %44, ptr noundef nonnull align 8 dereferenceable(24) %45, ptr noundef nonnull align 8 dereferenceable(24) %46, 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, i1 noundef zeroext %96, i1 noundef zeroext %99, i1 noundef zeroext %102, ptr noundef nonnull align 8 dereferenceable(96) %106)
  br label %109

109:                                              ; preds = %108, %107
  %110 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3VecILj4EjEixEi(ptr noundef nonnull align 4 dereferenceable(16) %1, i32 noundef 1)
  %111 = load i32, ptr %110, align 4, !tbaa !5
  %112 = zext i32 %111 to i64
  %113 = getelementptr inbounds [8 x i8], ptr %42, i64 0, i64 %112
  store i8 1, ptr %113, align 1, !tbaa !9
  br label %114

114:                                              ; preds = %109, %83
  %115 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3VecILj4EjEixEi(ptr noundef nonnull align 4 dereferenceable(16) %1, i32 noundef 2)
  %116 = load i32, ptr %115, align 4, !tbaa !5
  %117 = zext i32 %116 to i64
  %118 = getelementptr inbounds [8 x i8], ptr %42, i64 0, i64 %117
  %119 = load i8, ptr %118, align 1, !tbaa !9, !range !11, !noundef !12
  %120 = trunc nuw i8 %119 to i1
  br i1 %120, label %145, label %121

121:                                              ; preds = %114
  %122 = load i8, ptr %43, align 8, !tbaa !13, !range !11, !noundef !12
  %123 = trunc nuw i8 %122 to i1
  %124 = load ptr, ptr %0, align 8, !tbaa !17
  %125 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNK3VecILj4EbEixEi(ptr noundef nonnull align 1 dereferenceable(4) %2, i32 noundef 2)
  %126 = load i8, ptr %125, align 1, !tbaa !9, !range !11, !noundef !12
  %127 = trunc nuw i8 %126 to i1
  %128 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNK3VecILj4EbEixEi(ptr noundef nonnull align 1 dereferenceable(4) %3, i32 noundef 2)
  %129 = load i8, ptr %128, align 1, !tbaa !9, !range !11, !noundef !12
  %130 = trunc nuw i8 %129 to i1
  %131 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNK3VecILj4EbEixEi(ptr noundef nonnull align 1 dereferenceable(4) %4, i32 noundef 2)
  %132 = load i8, ptr %131, align 1, !tbaa !9, !range !11, !noundef !12
  %133 = trunc nuw i8 %132 to i1
  %134 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3VecILj4EjEixEi(ptr noundef nonnull align 4 dereferenceable(16) %1, i32 noundef 2)
  %135 = load i32, ptr %134, align 4, !tbaa !5
  %136 = zext i32 %135 to i64
  %137 = getelementptr inbounds [8 x %struct.Vec.1], ptr %51, i64 0, i64 %136
  br i1 %123, label %139, label %138

138:                                              ; preds = %121
  call void @_ZN10rootparity12_GLOBAL__N_133point_triangle_collision_functionI9expansionEEvRK3VecILj3EdES6_S6_S6_S6_S6_S6_S6_bbbRS3_ILj3ET_E(ptr noundef nonnull align 8 dereferenceable(24) %124, ptr noundef nonnull align 8 dereferenceable(24) %44, ptr noundef nonnull align 8 dereferenceable(24) %45, ptr noundef nonnull align 8 dereferenceable(24) %46, 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, i1 noundef zeroext %127, i1 noundef zeroext %130, i1 noundef zeroext %133, ptr noundef nonnull align 8 dereferenceable(96) %137)
  br label %140

139:                                              ; preds = %121
  call void @_ZN10rootparity12_GLOBAL__N_128edge_edge_collision_functionI9expansionEEvRK3VecILj3EdES6_S6_S6_S6_S6_S6_S6_bbbRS3_ILj3ET_E(ptr noundef nonnull align 8 dereferenceable(24) %124, ptr noundef nonnull align 8 dereferenceable(24) %44, ptr noundef nonnull align 8 dereferenceable(24) %45, ptr noundef nonnull align 8 dereferenceable(24) %46, 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, i1 noundef zeroext %127, i1 noundef zeroext %130, i1 noundef zeroext %133, ptr noundef nonnull align 8 dereferenceable(96) %137)
  br label %140

140:                                              ; preds = %139, %138
  %141 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3VecILj4EjEixEi(ptr noundef nonnull align 4 dereferenceable(16) %1, i32 noundef 2)
  %142 = load i32, ptr %141, align 4, !tbaa !5
  %143 = zext i32 %142 to i64
  %144 = getelementptr inbounds [8 x i8], ptr %42, i64 0, i64 %143
  store i8 1, ptr %144, align 1, !tbaa !9
  br label %145

145:                                              ; preds = %140, %114
  %146 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3VecILj4EjEixEi(ptr noundef nonnull align 4 dereferenceable(16) %1, i32 noundef 3)
  %147 = load i32, ptr %146, align 4, !tbaa !5
  %148 = zext i32 %147 to i64
  %149 = getelementptr inbounds [8 x i8], ptr %42, i64 0, i64 %148
  %150 = load i8, ptr %149, align 1, !tbaa !9, !range !11, !noundef !12
  %151 = trunc nuw i8 %150 to i1
  br i1 %151, label %176, label %152

152:                                              ; preds = %145
  %153 = load i8, ptr %43, align 8, !tbaa !13, !range !11, !noundef !12
  %154 = trunc nuw i8 %153 to i1
  %155 = load ptr, ptr %0, align 8, !tbaa !17
  %156 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNK3VecILj4EbEixEi(ptr noundef nonnull align 1 dereferenceable(4) %2, i32 noundef 3)
  %157 = load i8, ptr %156, align 1, !tbaa !9, !range !11, !noundef !12
  %158 = trunc nuw i8 %157 to i1
  %159 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNK3VecILj4EbEixEi(ptr noundef nonnull align 1 dereferenceable(4) %3, i32 noundef 3)
  %160 = load i8, ptr %159, align 1, !tbaa !9, !range !11, !noundef !12
  %161 = trunc nuw i8 %160 to i1
  %162 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNK3VecILj4EbEixEi(ptr noundef nonnull align 1 dereferenceable(4) %4, i32 noundef 3)
  %163 = load i8, ptr %162, align 1, !tbaa !9, !range !11, !noundef !12
  %164 = trunc nuw i8 %163 to i1
  %165 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3VecILj4EjEixEi(ptr noundef nonnull align 4 dereferenceable(16) %1, i32 noundef 3)
  %166 = load i32, ptr %165, align 4, !tbaa !5
  %167 = zext i32 %166 to i64
  %168 = getelementptr inbounds [8 x %struct.Vec.1], ptr %51, i64 0, i64 %167
  br i1 %154, label %170, label %169

169:                                              ; preds = %152
  call void @_ZN10rootparity12_GLOBAL__N_133point_triangle_collision_functionI9expansionEEvRK3VecILj3EdES6_S6_S6_S6_S6_S6_S6_bbbRS3_ILj3ET_E(ptr noundef nonnull align 8 dereferenceable(24) %155, ptr noundef nonnull align 8 dereferenceable(24) %44, ptr noundef nonnull align 8 dereferenceable(24) %45, ptr noundef nonnull align 8 dereferenceable(24) %46, 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, i1 noundef zeroext %158, i1 noundef zeroext %161, i1 noundef zeroext %164, ptr noundef nonnull align 8 dereferenceable(96) %168)
  br label %171

170:                                              ; preds = %152
  call void @_ZN10rootparity12_GLOBAL__N_128edge_edge_collision_functionI9expansionEEvRK3VecILj3EdES6_S6_S6_S6_S6_S6_S6_bbbRS3_ILj3ET_E(ptr noundef nonnull align 8 dereferenceable(24) %155, ptr noundef nonnull align 8 dereferenceable(24) %44, ptr noundef nonnull align 8 dereferenceable(24) %45, ptr noundef nonnull align 8 dereferenceable(24) %46, 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, i1 noundef zeroext %158, i1 noundef zeroext %161, i1 noundef zeroext %164, ptr noundef nonnull align 8 dereferenceable(96) %168)
  br label %171

171:                                              ; preds = %170, %169
  %172 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3VecILj4EjEixEi(ptr noundef nonnull align 4 dereferenceable(16) %1, i32 noundef 3)
  %173 = load i32, ptr %172, align 4, !tbaa !5
  %174 = zext i32 %173 to i64
  %175 = getelementptr inbounds [8 x i8], ptr %42, i64 0, i64 %174
  store i8 1, ptr %175, align 1, !tbaa !9
  br label %176

176:                                              ; preds = %171, %145
  call void @llvm.lifetime.start.p0(i64 96, ptr nonnull %9) #6
  call void @_ZN3VecILj3E9expansionEC2Ev(ptr noundef nonnull align 8 dereferenceable(96) %9)
  invoke void @_ZN10rootparity12_GLOBAL__N_111make_vectorILj3E9expansionEEvRK3VecIXT_EdERS3_IXT_ET0_E(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(96) %9)
          to label %177 unwind label %198

177:                                              ; preds = %176
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %10) #6
  invoke void @_ZN9expansionC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %10)
          to label %178 unwind label %200

178:                                              ; preds = %177
  %179 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3VecILj4EjEixEi(ptr noundef nonnull align 4 dereferenceable(16) %1, i32 noundef 0)
  %180 = load i32, ptr %179, align 4, !tbaa !5
  %181 = zext i32 %180 to i64
  %182 = getelementptr inbounds [8 x %struct.Vec.1], ptr %51, i64 0, i64 %181
  %183 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3VecILj4EjEixEi(ptr noundef nonnull align 4 dereferenceable(16) %1, i32 noundef 1)
  %184 = load i32, ptr %183, align 4, !tbaa !5
  %185 = zext i32 %184 to i64
  %186 = getelementptr inbounds [8 x %struct.Vec.1], ptr %51, i64 0, i64 %185
  %187 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3VecILj4EjEixEi(ptr noundef nonnull align 4 dereferenceable(16) %1, i32 noundef 2)
  %188 = load i32, ptr %187, align 4, !tbaa !5
  %189 = zext i32 %188 to i64
  %190 = getelementptr inbounds [8 x %struct.Vec.1], ptr %51, i64 0, i64 %189
  %191 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3VecILj4EjEixEi(ptr noundef nonnull align 4 dereferenceable(16) %1, i32 noundef 3)
  %192 = load i32, ptr %191, align 4, !tbaa !5
  %193 = zext i32 %192 to i64
  %194 = getelementptr inbounds [8 x %struct.Vec.1], ptr %51, i64 0, i64 %193
  invoke void @_ZN10rootparity12_GLOBAL__N_125implicit_surface_functionI9expansionEEvRK3VecILj3ET_ES7_S7_S7_S7_RS4_(ptr noundef nonnull align 8 dereferenceable(96) %9, ptr noundef nonnull align 8 dereferenceable(96) %182, ptr noundef nonnull align 8 dereferenceable(96) %186, ptr noundef nonnull align 8 dereferenceable(96) %190, ptr noundef nonnull align 8 dereferenceable(96) %194, ptr noundef nonnull align 8 dereferenceable(32) %10)
          to label %195 unwind label %202

195:                                              ; preds = %178
  %196 = invoke noundef i32 @_Z4signRK9expansion(ptr noundef nonnull align 8 dereferenceable(32) %10)
          to label %197 unwind label %202

197:                                              ; preds = %195
  call void @_ZN9expansionD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %10) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %10) #6
  call void @_ZN3VecILj3E9expansionED2Ev(ptr noundef nonnull align 8 dereferenceable(96) %9) #6
  call void @llvm.lifetime.end.p0(i64 96, ptr nonnull %9) #6
  br label %206

198:                                              ; preds = %176
  %199 = landingpad { ptr, i32 }
          cleanup
  br label %205

200:                                              ; preds = %177
  %201 = landingpad { ptr, i32 }
          cleanup
  br label %204

202:                                              ; preds = %195, %178
  %203 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN9expansionD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %10) #6
  br label %204

204:                                              ; preds = %202, %200
  %.pn49 = phi { ptr, i32 } [ %203, %202 ], [ %201, %200 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %10) #6
  br label %205

205:                                              ; preds = %204, %198
  %.pn49.pn = phi { ptr, i32 } [ %.pn49, %204 ], [ %199, %198 ]
  call void @_ZN3VecILj3E9expansionED2Ev(ptr noundef nonnull align 8 dereferenceable(96) %9) #6
  call void @llvm.lifetime.end.p0(i64 96, ptr nonnull %9) #6
  br label %207

206:                                              ; preds = %41, %197
  %.147 = phi i32 [ %.046, %41 ], [ %196, %197 ]
  ret i32 %.147

207:                                              ; preds = %205, %58
  %.pn49.pn.pn = phi { ptr, i32 } [ %.pn49.pn, %205 ], [ %.pn, %58 ]
  resume { ptr, i32 } %.pn49.pn.pn
}

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

; Function Attrs: mustprogress uwtable
declare hidden void @_ZN10rootparity12_GLOBAL__N_125implicit_surface_functionI8IntervalEEvRK3VecILj3ET_ES7_S7_S7_S7_RS4_(ptr noundef nonnull align 8 dereferenceable(72), ptr noundef nonnull align 8 dereferenceable(72), ptr noundef nonnull align 8 dereferenceable(72), ptr noundef nonnull align 8 dereferenceable(72), ptr noundef nonnull align 8 dereferenceable(72), ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #1

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK12IntervalBase21is_certainly_negativeEv(ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #2 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK12IntervalBase17is_certainly_zeroEv(ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #2 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK12IntervalBase21is_certainly_positiveEv(ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #2 align 2

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

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

; Function Attrs: mustprogress uwtable
declare hidden void @_ZN10rootparity12_GLOBAL__N_125implicit_surface_functionI9expansionEEvRK3VecILj3ET_ES7_S7_S7_S7_RS4_(ptr noundef nonnull align 8 dereferenceable(96), ptr noundef nonnull align 8 dereferenceable(96), ptr noundef nonnull align 8 dereferenceable(96), ptr noundef nonnull align 8 dereferenceable(96), ptr noundef nonnull align 8 dereferenceable(96), ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #1

declare noundef i32 @_Z4signRK9expansion(ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #5

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

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { inlinehint mustprogress 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 nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { "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 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"bool", !7, i64 0}
!11 = !{i8 0, i8 2}
!12 = !{}
!13 = !{!14, !10, i64 176}
!14 = !{!"_ZTSN10rootparity23RootParityCollisionTestE", !15, i64 0, !16, i64 8, !16, i64 32, !16, i64 56, !16, i64 80, !16, i64 104, !16, i64 128, !16, i64 152, !10, i64 176, !16, i64 184, !7, i64 208, !7, i64 784, !7, i64 1552}
!15 = !{!"any pointer", !7, i64 0}
!16 = !{!"_ZTS3VecILj3EdE", !7, i64 0}
!17 = !{!14, !15, i64 0}


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