; LLVM IR from mickypaganini/SSI2016-jet-clustering :: spartyjet-4.0.2_mac/External/fastjet-3.0.0/plugins/SISCone/siscone/siscone/sph_fba2e126 (e0c3b4e5)

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

%"class.siscone_spherical::CSphmomentum" = type { %"class.siscone_spherical::CSph3vector.base", double, i32, i32 }
%"class.siscone_spherical::CSph3vector.base" = type <{ double, double, double, double, double, double, %"class.siscone::Creference" }>
%"class.siscone::Creference" = type { [3 x i32] }
%"class.siscone_spherical::CSph3vector" = type <{ double, double, double, double, double, double, %"class.siscone::Creference", [4 x i8] }>
%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%"class.std::allocator.0" = type { i8 }
%"class.siscone_spherical::CSphjet" = type <{ %"class.siscone_spherical::CSphmomentum", double, i32, [4 x i8], %"class.std::vector", double, %"class.siscone_spherical::CSphtheta_phi_range", i32, [4 x i8] }>
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl" }
%"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl" = type { %"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl_data" }
%"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.siscone_spherical::CSphtheta_phi_range" = type { i32, i32 }
%"class.siscone_spherical::CSphsplit_merge_ptcomparison" = type <{ ptr, ptr, i32, [4 x i8] }>

@_ZTIN7siscone14Csiscone_errorE = external dso_local constant { ptr, ptr }, align 8
@.str.4 = external hidden unnamed_addr constant [58 x i8], align 1

declare void @_ZN17siscone_spherical12CSphmomentumC1Ev(ptr noundef nonnull align 8 dereferenceable(80)) unnamed_addr #0

declare i32 @__gxx_personality_v0(...)

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

declare noundef nonnull align 8 dereferenceable(80) ptr @_ZN17siscone_spherical12CSphmomentumaSERKS0_(ptr noundef nonnull align 8 dereferenceable(80), ptr noundef nonnull align 8 dereferenceable(80)) #0

; Function Attrs: nounwind
declare void @_ZN17siscone_spherical12CSphmomentumD1Ev(ptr noundef nonnull align 8 dereferenceable(80)) unnamed_addr #2

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZNK17siscone_spherical28CSphsplit_merge_ptcomparison14get_differenceERKNS_7CSphjetES3_PNS_12CSphmomentumEPd(ptr noundef nonnull align 8 dereferenceable(20) %0, ptr noundef nonnull align 8 dereferenceable(140) %1, ptr noundef nonnull align 8 dereferenceable(140) %2, ptr noundef %3, ptr noundef %4) #3 align 2 personality ptr @__gxx_personality_v0 {
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca %"class.siscone_spherical::CSphmomentum", align 8
  %14 = alloca ptr, align 8
  %15 = alloca i32, align 4
  %16 = alloca %"class.siscone_spherical::CSph3vector", align 8
  %17 = alloca %"class.siscone_spherical::CSph3vector", align 8
  %18 = alloca ptr, align 8
  %19 = alloca ptr, align 8
  %20 = alloca ptr, align 8
  %21 = alloca %"class.std::__cxx11::basic_string", align 8
  %22 = alloca %"class.std::allocator.0", align 1
  %23 = alloca i1, align 1
  %24 = alloca ptr, align 8
  %25 = alloca ptr, align 8
  store ptr %0, ptr %6, align 8, !tbaa !5
  store ptr %1, ptr %7, align 8, !tbaa !5
  store ptr %2, ptr %8, align 8, !tbaa !5
  store ptr %3, ptr %9, align 8, !tbaa !5
  store ptr %4, ptr %10, align 8, !tbaa !5
  %26 = load ptr, ptr %6, align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #9
  store i32 0, ptr %12, align 4, !tbaa !9
  store i32 0, ptr %11, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 80, ptr %13) #9
  call void @_ZN17siscone_spherical12CSphmomentumC1Ev(ptr noundef nonnull align 8 dereferenceable(80) %13)
  %27 = load ptr, ptr %9, align 8, !tbaa !5
  %28 = invoke noundef nonnull align 8 dereferenceable(80) ptr @_ZN17siscone_spherical12CSphmomentumaSERKS0_(ptr noundef nonnull align 8 dereferenceable(80) %27, ptr noundef nonnull align 8 dereferenceable(80) %13)
          to label %29 unwind label %99

29:                                               ; preds = %5
  call void @_ZN17siscone_spherical12CSphmomentumD1Ev(ptr noundef nonnull align 8 dereferenceable(80) %13) #9
  call void @llvm.lifetime.end.p0(i64 80, ptr %13) #9
  %30 = load ptr, ptr %10, align 8, !tbaa !5
  store double 0.000000e+00, ptr %30, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 64, ptr %16) #9
  %31 = load ptr, ptr %7, align 8, !tbaa !5
  %32 = getelementptr inbounds %"class.siscone_spherical::CSphjet", ptr %31, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %16, ptr align 8 %32, i64 64, i1 false), !tbaa.struct !13
  %33 = load ptr, ptr %7, align 8, !tbaa !5
  %34 = getelementptr inbounds %"class.siscone_spherical::CSphjet", ptr %33, i32 0, i32 0
  %35 = getelementptr inbounds %"class.siscone_spherical::CSphmomentum", ptr %34, i32 0, i32 1
  %36 = invoke noundef nonnull align 8 dereferenceable(60) ptr @_ZN17siscone_spherical11CSph3vectordVERKd(ptr noundef nonnull align 8 dereferenceable(60) %16, ptr noundef nonnull align 8 dereferenceable(8) %35)
          to label %37 unwind label %103

37:                                               ; preds = %29
  call void @llvm.lifetime.start.p0(i64 64, ptr %17) #9
  %38 = load ptr, ptr %8, align 8, !tbaa !5
  %39 = getelementptr inbounds %"class.siscone_spherical::CSphjet", ptr %38, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %17, ptr align 8 %39, i64 64, i1 false), !tbaa.struct !13
  %40 = load ptr, ptr %8, align 8, !tbaa !5
  %41 = getelementptr inbounds %"class.siscone_spherical::CSphjet", ptr %40, i32 0, i32 0
  %42 = getelementptr inbounds %"class.siscone_spherical::CSphmomentum", ptr %41, i32 0, i32 1
  %43 = invoke noundef nonnull align 8 dereferenceable(60) ptr @_ZN17siscone_spherical11CSph3vectordVERKd(ptr noundef nonnull align 8 dereferenceable(60) %17, ptr noundef nonnull align 8 dereferenceable(8) %42)
          to label %44 unwind label %107

44:                                               ; preds = %37
  br label %45

45:                                               ; preds = %260, %44
  %46 = load ptr, ptr %7, align 8, !tbaa !5
  %47 = getelementptr inbounds %"class.siscone_spherical::CSphjet", ptr %46, i32 0, i32 4
  %48 = load i32, ptr %11, align 4, !tbaa !9
  %49 = sext i32 %48 to i64
  %50 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNKSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %47, i64 noundef %49) #9
  %51 = load i32, ptr %50, align 4, !tbaa !9
  %52 = load ptr, ptr %8, align 8, !tbaa !5
  %53 = getelementptr inbounds %"class.siscone_spherical::CSphjet", ptr %52, i32 0, i32 4
  %54 = load i32, ptr %12, align 4, !tbaa !9
  %55 = sext i32 %54 to i64
  %56 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNKSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %53, i64 noundef %55) #9
  %57 = load i32, ptr %56, align 4, !tbaa !9
  %58 = icmp eq i32 %51, %57
  br i1 %58, label %59, label %115

59:                                               ; preds = %45
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #9
  %60 = getelementptr inbounds %"class.siscone_spherical::CSphsplit_merge_ptcomparison", ptr %26, i32 0, i32 0
  %61 = load ptr, ptr %60, align 8, !tbaa !15
  %62 = load ptr, ptr %7, align 8, !tbaa !5
  %63 = getelementptr inbounds %"class.siscone_spherical::CSphjet", ptr %62, i32 0, i32 4
  %64 = load i32, ptr %11, align 4, !tbaa !9
  %65 = sext i32 %64 to i64
  %66 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNKSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %63, i64 noundef %65) #9
  %67 = load i32, ptr %66, align 4, !tbaa !9
  %68 = sext i32 %67 to i64
  %69 = call noundef nonnull align 8 dereferenceable(80) ptr @_ZNSt6vectorIN17siscone_spherical12CSphmomentumESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %61, i64 noundef %68) #9
  store ptr %69, ptr %18, align 8, !tbaa !5
  %70 = load ptr, ptr %18, align 8, !tbaa !5
  %71 = getelementptr inbounds %"class.siscone_spherical::CSphmomentum", ptr %70, i32 0, i32 1
  %72 = load double, ptr %71, align 8, !tbaa !18
  %73 = load ptr, ptr %18, align 8, !tbaa !5
  %74 = invoke noundef double @_ZN17siscone_spherical20norm2_cross_product3ERKNS_11CSph3vectorES2_(ptr noundef nonnull align 8 dereferenceable(60) %73, ptr noundef nonnull align 8 dereferenceable(60) %16)
          to label %75 unwind label %111

75:                                               ; preds = %59
  %76 = load ptr, ptr %18, align 8, !tbaa !5
  %77 = invoke noundef double @_ZN17siscone_spherical20norm2_cross_product3ERKNS_11CSph3vectorES2_(ptr noundef nonnull align 8 dereferenceable(60) %76, ptr noundef nonnull align 8 dereferenceable(60) %17)
          to label %78 unwind label %111

78:                                               ; preds = %75
  %79 = fsub double %74, %77
  %80 = getelementptr inbounds %"class.siscone_spherical::CSphsplit_merge_ptcomparison", ptr %26, i32 0, i32 1
  %81 = load ptr, ptr %80, align 8, !tbaa !22
  %82 = load ptr, ptr %7, align 8, !tbaa !5
  %83 = getelementptr inbounds %"class.siscone_spherical::CSphjet", ptr %82, i32 0, i32 4
  %84 = load i32, ptr %11, align 4, !tbaa !9
  %85 = sext i32 %84 to i64
  %86 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNKSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %83, i64 noundef %85) #9
  %87 = load i32, ptr %86, align 4, !tbaa !9
  %88 = sext i32 %87 to i64
  %89 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIdSaIdEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %81, i64 noundef %88) #9
  %90 = load double, ptr %89, align 8, !tbaa !11
  %91 = fdiv double %79, %90
  %92 = load ptr, ptr %10, align 8, !tbaa !5
  %93 = load double, ptr %92, align 8, !tbaa !11
  %94 = call double @llvm.fmuladd.f64(double %72, double %91, double %93)
  store double %94, ptr %92, align 8, !tbaa !11
  %95 = load i32, ptr %11, align 4, !tbaa !9
  %96 = add nsw i32 %95, 1
  store i32 %96, ptr %11, align 4, !tbaa !9
  %97 = load i32, ptr %12, align 4, !tbaa !9
  %98 = add nsw i32 %97, 1
  store i32 %98, ptr %12, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #9
  br label %247

99:                                               ; preds = %5
  %100 = landingpad { ptr, i32 }
          cleanup
  %101 = extractvalue { ptr, i32 } %100, 0
  store ptr %101, ptr %14, align 8
  %102 = extractvalue { ptr, i32 } %100, 1
  store i32 %102, ptr %15, align 4
  call void @_ZN17siscone_spherical12CSphmomentumD1Ev(ptr noundef nonnull align 8 dereferenceable(80) %13) #9
  call void @llvm.lifetime.end.p0(i64 80, ptr %13) #9
  br label %371

103:                                              ; preds = %29
  %104 = landingpad { ptr, i32 }
          cleanup
  %105 = extractvalue { ptr, i32 } %104, 0
  store ptr %105, ptr %14, align 8
  %106 = extractvalue { ptr, i32 } %104, 1
  store i32 %106, ptr %15, align 4
  br label %370

107:                                              ; preds = %37
  %108 = landingpad { ptr, i32 }
          cleanup
  %109 = extractvalue { ptr, i32 } %108, 0
  store ptr %109, ptr %14, align 8
  %110 = extractvalue { ptr, i32 } %108, 1
  store i32 %110, ptr %15, align 4
  br label %369

111:                                              ; preds = %75, %59
  %112 = landingpad { ptr, i32 }
          cleanup
  %113 = extractvalue { ptr, i32 } %112, 0
  store ptr %113, ptr %14, align 8
  %114 = extractvalue { ptr, i32 } %112, 1
  store i32 %114, ptr %15, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #9
  br label %369

115:                                              ; preds = %45
  %116 = load ptr, ptr %7, align 8, !tbaa !5
  %117 = getelementptr inbounds %"class.siscone_spherical::CSphjet", ptr %116, i32 0, i32 4
  %118 = load i32, ptr %11, align 4, !tbaa !9
  %119 = sext i32 %118 to i64
  %120 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNKSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %117, i64 noundef %119) #9
  %121 = load i32, ptr %120, align 4, !tbaa !9
  %122 = load ptr, ptr %8, align 8, !tbaa !5
  %123 = getelementptr inbounds %"class.siscone_spherical::CSphjet", ptr %122, i32 0, i32 4
  %124 = load i32, ptr %12, align 4, !tbaa !9
  %125 = sext i32 %124 to i64
  %126 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNKSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %123, i64 noundef %125) #9
  %127 = load i32, ptr %126, align 4, !tbaa !9
  %128 = icmp slt i32 %121, %127
  br i1 %128, label %129, label %172

129:                                              ; preds = %115
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #9
  %130 = getelementptr inbounds %"class.siscone_spherical::CSphsplit_merge_ptcomparison", ptr %26, i32 0, i32 0
  %131 = load ptr, ptr %130, align 8, !tbaa !15
  %132 = load ptr, ptr %7, align 8, !tbaa !5
  %133 = getelementptr inbounds %"class.siscone_spherical::CSphjet", ptr %132, i32 0, i32 4
  %134 = load i32, ptr %11, align 4, !tbaa !9
  %135 = sext i32 %134 to i64
  %136 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNKSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %133, i64 noundef %135) #9
  %137 = load i32, ptr %136, align 4, !tbaa !9
  %138 = sext i32 %137 to i64
  %139 = call noundef nonnull align 8 dereferenceable(80) ptr @_ZNSt6vectorIN17siscone_spherical12CSphmomentumESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %131, i64 noundef %138) #9
  store ptr %139, ptr %19, align 8, !tbaa !5
  %140 = load ptr, ptr %19, align 8, !tbaa !5
  %141 = load ptr, ptr %9, align 8, !tbaa !5
  %142 = invoke noundef nonnull align 8 dereferenceable(80) ptr @_ZN17siscone_spherical12CSphmomentumpLERKS0_(ptr noundef nonnull align 8 dereferenceable(80) %141, ptr noundef nonnull align 8 dereferenceable(80) %140)
          to label %143 unwind label %168

143:                                              ; preds = %129
  %144 = load ptr, ptr %19, align 8, !tbaa !5
  %145 = getelementptr inbounds %"class.siscone_spherical::CSphmomentum", ptr %144, i32 0, i32 1
  %146 = load double, ptr %145, align 8, !tbaa !18
  %147 = load ptr, ptr %19, align 8, !tbaa !5
  %148 = invoke noundef double @_ZN17siscone_spherical20norm2_cross_product3ERKNS_11CSph3vectorES2_(ptr noundef nonnull align 8 dereferenceable(60) %147, ptr noundef nonnull align 8 dereferenceable(60) %16)
          to label %149 unwind label %168

149:                                              ; preds = %143
  %150 = fmul double %146, %148
  %151 = getelementptr inbounds %"class.siscone_spherical::CSphsplit_merge_ptcomparison", ptr %26, i32 0, i32 1
  %152 = load ptr, ptr %151, align 8, !tbaa !22
  %153 = load ptr, ptr %7, align 8, !tbaa !5
  %154 = getelementptr inbounds %"class.siscone_spherical::CSphjet", ptr %153, i32 0, i32 4
  %155 = load i32, ptr %11, align 4, !tbaa !9
  %156 = sext i32 %155 to i64
  %157 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNKSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %154, i64 noundef %156) #9
  %158 = load i32, ptr %157, align 4, !tbaa !9
  %159 = sext i32 %158 to i64
  %160 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIdSaIdEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %152, i64 noundef %159) #9
  %161 = load double, ptr %160, align 8, !tbaa !11
  %162 = fdiv double %150, %161
  %163 = load ptr, ptr %10, align 8, !tbaa !5
  %164 = load double, ptr %163, align 8, !tbaa !11
  %165 = fadd double %164, %162
  store double %165, ptr %163, align 8, !tbaa !11
  %166 = load i32, ptr %11, align 4, !tbaa !9
  %167 = add nsw i32 %166, 1
  store i32 %167, ptr %11, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #9
  br label %246

168:                                              ; preds = %143, %129
  %169 = landingpad { ptr, i32 }
          cleanup
  %170 = extractvalue { ptr, i32 } %169, 0
  store ptr %170, ptr %14, align 8
  %171 = extractvalue { ptr, i32 } %169, 1
  store i32 %171, ptr %15, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #9
  br label %369

172:                                              ; preds = %115
  %173 = load ptr, ptr %7, align 8, !tbaa !5
  %174 = getelementptr inbounds %"class.siscone_spherical::CSphjet", ptr %173, i32 0, i32 4
  %175 = load i32, ptr %11, align 4, !tbaa !9
  %176 = sext i32 %175 to i64
  %177 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNKSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %174, i64 noundef %176) #9
  %178 = load i32, ptr %177, align 4, !tbaa !9
  %179 = load ptr, ptr %8, align 8, !tbaa !5
  %180 = getelementptr inbounds %"class.siscone_spherical::CSphjet", ptr %179, i32 0, i32 4
  %181 = load i32, ptr %12, align 4, !tbaa !9
  %182 = sext i32 %181 to i64
  %183 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNKSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %180, i64 noundef %182) #9
  %184 = load i32, ptr %183, align 4, !tbaa !9
  %185 = icmp sgt i32 %178, %184
  br i1 %185, label %186, label %229

186:                                              ; preds = %172
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #9
  %187 = getelementptr inbounds %"class.siscone_spherical::CSphsplit_merge_ptcomparison", ptr %26, i32 0, i32 0
  %188 = load ptr, ptr %187, align 8, !tbaa !15
  %189 = load ptr, ptr %8, align 8, !tbaa !5
  %190 = getelementptr inbounds %"class.siscone_spherical::CSphjet", ptr %189, i32 0, i32 4
  %191 = load i32, ptr %12, align 4, !tbaa !9
  %192 = sext i32 %191 to i64
  %193 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNKSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %190, i64 noundef %192) #9
  %194 = load i32, ptr %193, align 4, !tbaa !9
  %195 = sext i32 %194 to i64
  %196 = call noundef nonnull align 8 dereferenceable(80) ptr @_ZNSt6vectorIN17siscone_spherical12CSphmomentumESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %188, i64 noundef %195) #9
  store ptr %196, ptr %20, align 8, !tbaa !5
  %197 = load ptr, ptr %20, align 8, !tbaa !5
  %198 = load ptr, ptr %9, align 8, !tbaa !5
  %199 = invoke noundef nonnull align 8 dereferenceable(80) ptr @_ZN17siscone_spherical12CSphmomentummIERKS0_(ptr noundef nonnull align 8 dereferenceable(80) %198, ptr noundef nonnull align 8 dereferenceable(80) %197)
          to label %200 unwind label %225

200:                                              ; preds = %186
  %201 = load ptr, ptr %20, align 8, !tbaa !5
  %202 = getelementptr inbounds %"class.siscone_spherical::CSphmomentum", ptr %201, i32 0, i32 1
  %203 = load double, ptr %202, align 8, !tbaa !18
  %204 = load ptr, ptr %20, align 8, !tbaa !5
  %205 = invoke noundef double @_ZN17siscone_spherical20norm2_cross_product3ERKNS_11CSph3vectorES2_(ptr noundef nonnull align 8 dereferenceable(60) %204, ptr noundef nonnull align 8 dereferenceable(60) %17)
          to label %206 unwind label %225

206:                                              ; preds = %200
  %207 = fmul double %203, %205
  %208 = getelementptr inbounds %"class.siscone_spherical::CSphsplit_merge_ptcomparison", ptr %26, i32 0, i32 1
  %209 = load ptr, ptr %208, align 8, !tbaa !22
  %210 = load ptr, ptr %8, align 8, !tbaa !5
  %211 = getelementptr inbounds %"class.siscone_spherical::CSphjet", ptr %210, i32 0, i32 4
  %212 = load i32, ptr %12, align 4, !tbaa !9
  %213 = sext i32 %212 to i64
  %214 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNKSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %211, i64 noundef %213) #9
  %215 = load i32, ptr %214, align 4, !tbaa !9
  %216 = sext i32 %215 to i64
  %217 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIdSaIdEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %209, i64 noundef %216) #9
  %218 = load double, ptr %217, align 8, !tbaa !11
  %219 = fdiv double %207, %218
  %220 = load ptr, ptr %10, align 8, !tbaa !5
  %221 = load double, ptr %220, align 8, !tbaa !11
  %222 = fsub double %221, %219
  store double %222, ptr %220, align 8, !tbaa !11
  %223 = load i32, ptr %12, align 4, !tbaa !9
  %224 = add nsw i32 %223, 1
  store i32 %224, ptr %12, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #9
  br label %245

225:                                              ; preds = %200, %186
  %226 = landingpad { ptr, i32 }
          cleanup
  %227 = extractvalue { ptr, i32 } %226, 0
  store ptr %227, ptr %14, align 8
  %228 = extractvalue { ptr, i32 } %226, 1
  store i32 %228, ptr %15, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #9
  br label %369

229:                                              ; preds = %172
  store i1 true, ptr %23, align 1
  %230 = call ptr @__cxa_allocate_exception(i64 32) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %21) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %22) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %22) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %21, ptr noundef @.str.4, ptr noundef nonnull align 1 dereferenceable(1) %22)
          to label %231 unwind label %233

231:                                              ; preds = %229
  invoke void @_ZN7siscone14Csiscone_errorC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(32) %230, ptr noundef nonnull align 8 dereferenceable(32) %21)
          to label %232 unwind label %237

232:                                              ; preds = %231
  store i1 false, ptr %23, align 1
  invoke void @__cxa_throw(ptr %230, ptr @_ZTIN7siscone14Csiscone_errorE, ptr @_ZN7siscone14Csiscone_errorD2Ev) #10
          to label %377 unwind label %237

233:                                              ; preds = %229
  %234 = landingpad { ptr, i32 }
          cleanup
  %235 = extractvalue { ptr, i32 } %234, 0
  store ptr %235, ptr %14, align 8
  %236 = extractvalue { ptr, i32 } %234, 1
  store i32 %236, ptr %15, align 4
  br label %241

237:                                              ; preds = %232, %231
  %238 = landingpad { ptr, i32 }
          cleanup
  %239 = extractvalue { ptr, i32 } %238, 0
  store ptr %239, ptr %14, align 8
  %240 = extractvalue { ptr, i32 } %238, 1
  store i32 %240, ptr %15, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %21) #9
  br label %241

241:                                              ; preds = %237, %233
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %22) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %22) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %21) #9
  %242 = load i1, ptr %23, align 1
  br i1 %242, label %243, label %244

243:                                              ; preds = %241
  call void @__cxa_free_exception(ptr %230) #9
  br label %244

244:                                              ; preds = %243, %241
  br label %369

245:                                              ; preds = %206
  br label %246

246:                                              ; preds = %245, %149
  br label %247

247:                                              ; preds = %246, %78
  br label %248

248:                                              ; preds = %247
  %249 = load i32, ptr %11, align 4, !tbaa !9
  %250 = load ptr, ptr %7, align 8, !tbaa !5
  %251 = getelementptr inbounds %"class.siscone_spherical::CSphjet", ptr %250, i32 0, i32 2
  %252 = load i32, ptr %251, align 8, !tbaa !23
  %253 = icmp slt i32 %249, %252
  br i1 %253, label %254, label %260

254:                                              ; preds = %248
  %255 = load i32, ptr %12, align 4, !tbaa !9
  %256 = load ptr, ptr %8, align 8, !tbaa !5
  %257 = getelementptr inbounds %"class.siscone_spherical::CSphjet", ptr %256, i32 0, i32 2
  %258 = load i32, ptr %257, align 8, !tbaa !23
  %259 = icmp slt i32 %255, %258
  br label %260

260:                                              ; preds = %254, %248
  %261 = phi i1 [ false, %248 ], [ %259, %254 ]
  br i1 %261, label %45, label %262, !llvm.loop !30

262:                                              ; preds = %260
  br label %263

263:                                              ; preds = %289, %262
  %264 = load i32, ptr %11, align 4, !tbaa !9
  %265 = load ptr, ptr %7, align 8, !tbaa !5
  %266 = getelementptr inbounds %"class.siscone_spherical::CSphjet", ptr %265, i32 0, i32 2
  %267 = load i32, ptr %266, align 8, !tbaa !23
  %268 = icmp slt i32 %264, %267
  br i1 %268, label %269, label %312

269:                                              ; preds = %263
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #9
  %270 = getelementptr inbounds %"class.siscone_spherical::CSphsplit_merge_ptcomparison", ptr %26, i32 0, i32 0
  %271 = load ptr, ptr %270, align 8, !tbaa !15
  %272 = load ptr, ptr %7, align 8, !tbaa !5
  %273 = getelementptr inbounds %"class.siscone_spherical::CSphjet", ptr %272, i32 0, i32 4
  %274 = load i32, ptr %11, align 4, !tbaa !9
  %275 = sext i32 %274 to i64
  %276 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNKSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %273, i64 noundef %275) #9
  %277 = load i32, ptr %276, align 4, !tbaa !9
  %278 = sext i32 %277 to i64
  %279 = call noundef nonnull align 8 dereferenceable(80) ptr @_ZNSt6vectorIN17siscone_spherical12CSphmomentumESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %271, i64 noundef %278) #9
  store ptr %279, ptr %24, align 8, !tbaa !5
  %280 = load ptr, ptr %24, align 8, !tbaa !5
  %281 = load ptr, ptr %9, align 8, !tbaa !5
  %282 = invoke noundef nonnull align 8 dereferenceable(80) ptr @_ZN17siscone_spherical12CSphmomentumpLERKS0_(ptr noundef nonnull align 8 dereferenceable(80) %281, ptr noundef nonnull align 8 dereferenceable(80) %280)
          to label %283 unwind label %308

283:                                              ; preds = %269
  %284 = load ptr, ptr %24, align 8, !tbaa !5
  %285 = getelementptr inbounds %"class.siscone_spherical::CSphmomentum", ptr %284, i32 0, i32 1
  %286 = load double, ptr %285, align 8, !tbaa !18
  %287 = load ptr, ptr %24, align 8, !tbaa !5
  %288 = invoke noundef double @_ZN17siscone_spherical20norm2_cross_product3ERKNS_11CSph3vectorES2_(ptr noundef nonnull align 8 dereferenceable(60) %287, ptr noundef nonnull align 8 dereferenceable(60) %16)
          to label %289 unwind label %308

289:                                              ; preds = %283
  %290 = fmul double %286, %288
  %291 = getelementptr inbounds %"class.siscone_spherical::CSphsplit_merge_ptcomparison", ptr %26, i32 0, i32 1
  %292 = load ptr, ptr %291, align 8, !tbaa !22
  %293 = load ptr, ptr %7, align 8, !tbaa !5
  %294 = getelementptr inbounds %"class.siscone_spherical::CSphjet", ptr %293, i32 0, i32 4
  %295 = load i32, ptr %11, align 4, !tbaa !9
  %296 = sext i32 %295 to i64
  %297 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNKSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %294, i64 noundef %296) #9
  %298 = load i32, ptr %297, align 4, !tbaa !9
  %299 = sext i32 %298 to i64
  %300 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIdSaIdEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %292, i64 noundef %299) #9
  %301 = load double, ptr %300, align 8, !tbaa !11
  %302 = fdiv double %290, %301
  %303 = load ptr, ptr %10, align 8, !tbaa !5
  %304 = load double, ptr %303, align 8, !tbaa !11
  %305 = fadd double %304, %302
  store double %305, ptr %303, align 8, !tbaa !11
  %306 = load i32, ptr %11, align 4, !tbaa !9
  %307 = add nsw i32 %306, 1
  store i32 %307, ptr %11, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #9
  br label %263, !llvm.loop !32

308:                                              ; preds = %283, %269
  %309 = landingpad { ptr, i32 }
          cleanup
  %310 = extractvalue { ptr, i32 } %309, 0
  store ptr %310, ptr %14, align 8
  %311 = extractvalue { ptr, i32 } %309, 1
  store i32 %311, ptr %15, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #9
  br label %369

312:                                              ; preds = %263
  br label %313

313:                                              ; preds = %339, %312
  %314 = load i32, ptr %12, align 4, !tbaa !9
  %315 = load ptr, ptr %8, align 8, !tbaa !5
  %316 = getelementptr inbounds %"class.siscone_spherical::CSphjet", ptr %315, i32 0, i32 2
  %317 = load i32, ptr %316, align 8, !tbaa !23
  %318 = icmp slt i32 %314, %317
  br i1 %318, label %319, label %362

319:                                              ; preds = %313
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #9
  %320 = getelementptr inbounds %"class.siscone_spherical::CSphsplit_merge_ptcomparison", ptr %26, i32 0, i32 0
  %321 = load ptr, ptr %320, align 8, !tbaa !15
  %322 = load ptr, ptr %8, align 8, !tbaa !5
  %323 = getelementptr inbounds %"class.siscone_spherical::CSphjet", ptr %322, i32 0, i32 4
  %324 = load i32, ptr %12, align 4, !tbaa !9
  %325 = sext i32 %324 to i64
  %326 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNKSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %323, i64 noundef %325) #9
  %327 = load i32, ptr %326, align 4, !tbaa !9
  %328 = sext i32 %327 to i64
  %329 = call noundef nonnull align 8 dereferenceable(80) ptr @_ZNSt6vectorIN17siscone_spherical12CSphmomentumESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %321, i64 noundef %328) #9
  store ptr %329, ptr %25, align 8, !tbaa !5
  %330 = load ptr, ptr %25, align 8, !tbaa !5
  %331 = load ptr, ptr %9, align 8, !tbaa !5
  %332 = invoke noundef nonnull align 8 dereferenceable(80) ptr @_ZN17siscone_spherical12CSphmomentummIERKS0_(ptr noundef nonnull align 8 dereferenceable(80) %331, ptr noundef nonnull align 8 dereferenceable(80) %330)
          to label %333 unwind label %358

333:                                              ; preds = %319
  %334 = load ptr, ptr %25, align 8, !tbaa !5
  %335 = getelementptr inbounds %"class.siscone_spherical::CSphmomentum", ptr %334, i32 0, i32 1
  %336 = load double, ptr %335, align 8, !tbaa !18
  %337 = load ptr, ptr %25, align 8, !tbaa !5
  %338 = invoke noundef double @_ZN17siscone_spherical20norm2_cross_product3ERKNS_11CSph3vectorES2_(ptr noundef nonnull align 8 dereferenceable(60) %337, ptr noundef nonnull align 8 dereferenceable(60) %17)
          to label %339 unwind label %358

339:                                              ; preds = %333
  %340 = fmul double %336, %338
  %341 = getelementptr inbounds %"class.siscone_spherical::CSphsplit_merge_ptcomparison", ptr %26, i32 0, i32 1
  %342 = load ptr, ptr %341, align 8, !tbaa !22
  %343 = load ptr, ptr %8, align 8, !tbaa !5
  %344 = getelementptr inbounds %"class.siscone_spherical::CSphjet", ptr %343, i32 0, i32 4
  %345 = load i32, ptr %12, align 4, !tbaa !9
  %346 = sext i32 %345 to i64
  %347 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNKSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %344, i64 noundef %346) #9
  %348 = load i32, ptr %347, align 4, !tbaa !9
  %349 = sext i32 %348 to i64
  %350 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIdSaIdEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %342, i64 noundef %349) #9
  %351 = load double, ptr %350, align 8, !tbaa !11
  %352 = fdiv double %340, %351
  %353 = load ptr, ptr %10, align 8, !tbaa !5
  %354 = load double, ptr %353, align 8, !tbaa !11
  %355 = fsub double %354, %352
  store double %355, ptr %353, align 8, !tbaa !11
  %356 = load i32, ptr %12, align 4, !tbaa !9
  %357 = add nsw i32 %356, 1
  store i32 %357, ptr %12, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #9
  br label %313, !llvm.loop !33

358:                                              ; preds = %333, %319
  %359 = landingpad { ptr, i32 }
          cleanup
  %360 = extractvalue { ptr, i32 } %359, 0
  store ptr %360, ptr %14, align 8
  %361 = extractvalue { ptr, i32 } %359, 1
  store i32 %361, ptr %15, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #9
  br label %369

362:                                              ; preds = %313
  %363 = load ptr, ptr %9, align 8, !tbaa !5
  %364 = getelementptr inbounds %"class.siscone_spherical::CSphmomentum", ptr %363, i32 0, i32 1
  %365 = load double, ptr %364, align 8, !tbaa !18
  %366 = load ptr, ptr %10, align 8, !tbaa !5
  %367 = load double, ptr %366, align 8, !tbaa !11
  %368 = fadd double %367, %365
  store double %368, ptr %366, align 8, !tbaa !11
  call void @_ZN17siscone_spherical11CSph3vectorD1Ev(ptr noundef nonnull align 8 dereferenceable(60) %17) #9
  call void @llvm.lifetime.end.p0(i64 64, ptr %17) #9
  call void @_ZN17siscone_spherical11CSph3vectorD1Ev(ptr noundef nonnull align 8 dereferenceable(60) %16) #9
  call void @llvm.lifetime.end.p0(i64 64, ptr %16) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #9
  ret void

369:                                              ; preds = %358, %308, %244, %225, %168, %111, %107
  call void @_ZN17siscone_spherical11CSph3vectorD1Ev(ptr noundef nonnull align 8 dereferenceable(60) %17) #9
  call void @llvm.lifetime.end.p0(i64 64, ptr %17) #9
  br label %370

370:                                              ; preds = %369, %103
  call void @_ZN17siscone_spherical11CSph3vectorD1Ev(ptr noundef nonnull align 8 dereferenceable(60) %16) #9
  call void @llvm.lifetime.end.p0(i64 64, ptr %16) #9
  br label %371

371:                                              ; preds = %370, %99
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #9
  br label %372

372:                                              ; preds = %371
  %373 = load ptr, ptr %14, align 8
  %374 = load i32, ptr %15, align 4
  %375 = insertvalue { ptr, i32 } poison, ptr %373, 0
  %376 = insertvalue { ptr, i32 } %375, i32 %374, 1
  resume { ptr, i32 } %376

377:                                              ; preds = %232
  unreachable
}

; 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

declare noundef nonnull align 8 dereferenceable(80) ptr @_ZN17siscone_spherical12CSphmomentumpLERKS0_(ptr noundef nonnull align 8 dereferenceable(80), ptr noundef nonnull align 8 dereferenceable(80)) #0

declare ptr @__cxa_allocate_exception(i64)

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

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

declare void @__cxa_throw(ptr, ptr, ptr)

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

declare void @__cxa_free_exception(ptr)

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

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

declare noundef nonnull align 8 dereferenceable(60) ptr @_ZN17siscone_spherical11CSph3vectordVERKd(ptr noundef nonnull align 8 dereferenceable(60), ptr noundef nonnull align 8 dereferenceable(8)) #0

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(80) ptr @_ZNSt6vectorIN17siscone_spherical12CSphmomentumESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) #6 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef double @_ZN17siscone_spherical20norm2_cross_product3ERKNS_11CSph3vectorES2_(ptr noundef nonnull align 8 dereferenceable(60), ptr noundef nonnull align 8 dereferenceable(60)) #7

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare double @llvm.fmuladd.f64(double, double, double) #8

declare noundef nonnull align 8 dereferenceable(80) ptr @_ZN17siscone_spherical12CSphmomentummIERKS0_(ptr noundef nonnull align 8 dereferenceable(80), ptr noundef nonnull align 8 dereferenceable(80)) #0

; Function Attrs: nounwind
declare void @_ZN17siscone_spherical11CSph3vectorD1Ev(ptr noundef nonnull align 8 dereferenceable(60)) unnamed_addr #2

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"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 = !{!"double", !7, i64 0}
!13 = !{i64 0, i64 8, !11, i64 8, i64 8, !11, i64 16, i64 8, !11, i64 24, i64 8, !11, i64 32, i64 8, !11, i64 40, i64 8, !11, i64 48, i64 12, !14}
!14 = !{!7, !7, i64 0}
!15 = !{!16, !6, i64 0}
!16 = !{!"_ZTSN17siscone_spherical28CSphsplit_merge_ptcomparisonE", !6, i64 0, !6, i64 8, !17, i64 16}
!17 = !{!"_ZTSN17siscone_spherical18Esplit_merge_scaleE", !7, i64 0}
!18 = !{!19, !12, i64 64}
!19 = !{!"_ZTSN17siscone_spherical12CSphmomentumE", !20, i64 0, !12, i64 64, !10, i64 72, !10, i64 76}
!20 = !{!"_ZTSN17siscone_spherical11CSph3vectorE", !12, i64 0, !12, i64 8, !12, i64 16, !12, i64 24, !12, i64 32, !12, i64 40, !21, i64 48}
!21 = !{!"_ZTSN7siscone10CreferenceE", !7, i64 0}
!22 = !{!16, !6, i64 8}
!23 = !{!24, !10, i64 88}
!24 = !{!"_ZTSN17siscone_spherical7CSphjetE", !19, i64 0, !12, i64 80, !10, i64 88, !25, i64 96, !12, i64 120, !29, i64 128, !10, i64 136}
!25 = !{!"_ZTSSt6vectorIiSaIiEE", !26, i64 0}
!26 = !{!"_ZTSSt12_Vector_baseIiSaIiEE", !27, i64 0}
!27 = !{!"_ZTSNSt12_Vector_baseIiSaIiEE12_Vector_implE", !28, i64 0}
!28 = !{!"_ZTSNSt12_Vector_baseIiSaIiEE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!29 = !{!"_ZTSN17siscone_spherical19CSphtheta_phi_rangeE", !10, i64 0, !10, i64 4}
!30 = distinct !{!30, !31}
!31 = !{!"llvm.loop.mustprogress"}
!32 = distinct !{!32, !31}
!33 = distinct !{!33, !31}


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

%"class.siscone_spherical::CSphmomentum" = type { %"class.siscone_spherical::CSph3vector.base", double, i32, i32 }
%"class.siscone_spherical::CSph3vector.base" = type <{ double, double, double, double, double, double, %"class.siscone::Creference" }>
%"class.siscone::Creference" = type { [3 x i32] }
%"class.siscone_spherical::CSph3vector" = type <{ double, double, double, double, double, double, %"class.siscone::Creference", [4 x i8] }>
%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%"class.std::allocator.0" = type { i8 }

@_ZTIN7siscone14Csiscone_errorE = external dso_local constant { ptr, ptr }, align 8
@.str.4 = external hidden unnamed_addr constant [58 x i8], align 1

declare void @_ZN17siscone_spherical12CSphmomentumC1Ev(ptr noundef nonnull align 8 dereferenceable(80)) unnamed_addr #0

declare i32 @__gxx_personality_v0(...)

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

declare noundef nonnull align 8 dereferenceable(80) ptr @_ZN17siscone_spherical12CSphmomentumaSERKS0_(ptr noundef nonnull align 8 dereferenceable(80), ptr noundef nonnull align 8 dereferenceable(80)) local_unnamed_addr #0

; Function Attrs: nounwind
declare void @_ZN17siscone_spherical12CSphmomentumD1Ev(ptr noundef nonnull align 8 dereferenceable(80)) unnamed_addr #2

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZNK17siscone_spherical28CSphsplit_merge_ptcomparison14get_differenceERKNS_7CSphjetES3_PNS_12CSphmomentumEPd(ptr nocapture noundef nonnull readonly align 8 dereferenceable(20) %0, ptr noundef nonnull align 8 dereferenceable(140) %1, ptr noundef nonnull align 8 dereferenceable(140) %2, ptr noundef %3, ptr nocapture noundef %4) local_unnamed_addr #3 align 2 personality ptr @__gxx_personality_v0 {
  %6 = alloca %"class.siscone_spherical::CSphmomentum", align 8
  %7 = alloca %"class.siscone_spherical::CSph3vector", align 8
  %8 = alloca %"class.siscone_spherical::CSph3vector", align 8
  %9 = alloca %"class.std::__cxx11::basic_string", align 8
  %10 = alloca %"class.std::allocator.0", align 1
  call void @llvm.lifetime.start.p0(i64 80, ptr nonnull %6) #9
  call void @_ZN17siscone_spherical12CSphmomentumC1Ev(ptr noundef nonnull align 8 dereferenceable(80) %6)
  %11 = invoke noundef nonnull align 8 dereferenceable(80) ptr @_ZN17siscone_spherical12CSphmomentumaSERKS0_(ptr noundef nonnull align 8 dereferenceable(80) %3, ptr noundef nonnull align 8 dereferenceable(80) %6)
          to label %12 unwind label %55

12:                                               ; preds = %5
  call void @_ZN17siscone_spherical12CSphmomentumD1Ev(ptr noundef nonnull align 8 dereferenceable(80) %6) #9
  call void @llvm.lifetime.end.p0(i64 80, ptr nonnull %6) #9
  store double 0.000000e+00, ptr %4, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %7) #9
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(64) %7, ptr noundef nonnull align 8 dereferenceable(64) %1, i64 64, i1 false), !tbaa.struct !9
  %13 = getelementptr inbounds i8, ptr %1, i64 64
  %14 = invoke noundef nonnull align 8 dereferenceable(60) ptr @_ZN17siscone_spherical11CSph3vectordVERKd(ptr noundef nonnull align 8 dereferenceable(60) %7, ptr noundef nonnull align 8 dereferenceable(8) %13)
          to label %15 unwind label %57

15:                                               ; preds = %12
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %8) #9
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(64) %8, ptr noundef nonnull align 8 dereferenceable(64) %2, i64 64, i1 false), !tbaa.struct !9
  %16 = getelementptr inbounds i8, ptr %2, i64 64
  %17 = invoke noundef nonnull align 8 dereferenceable(60) ptr @_ZN17siscone_spherical11CSph3vectordVERKd(ptr noundef nonnull align 8 dereferenceable(60) %8, ptr noundef nonnull align 8 dereferenceable(8) %16)
          to label %.preheader103 unwind label %59

.preheader103:                                    ; preds = %15
  %18 = getelementptr inbounds i8, ptr %1, i64 96
  %19 = getelementptr inbounds i8, ptr %2, i64 96
  %20 = getelementptr inbounds i8, ptr %0, i64 8
  %21 = getelementptr inbounds i8, ptr %1, i64 88
  %22 = getelementptr inbounds i8, ptr %2, i64 88
  br label %23

23:                                               ; preds = %.preheader103, %133
  %.081 = phi i32 [ %.182, %133 ], [ 0, %.preheader103 ]
  %.0 = phi i32 [ %.1, %133 ], [ 0, %.preheader103 ]
  %24 = sext i32 %.0 to i64
  %25 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNKSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %18, i64 noundef %24) #9
  %26 = load i32, ptr %25, align 4, !tbaa !11
  %27 = sext i32 %.081 to i64
  %28 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNKSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %19, i64 noundef %27) #9
  %29 = load i32, ptr %28, align 4, !tbaa !11
  %30 = icmp eq i32 %26, %29
  br i1 %30, label %31, label %63

31:                                               ; preds = %23
  %32 = load ptr, ptr %0, align 8, !tbaa !13
  %33 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNKSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %18, i64 noundef %24) #9
  %34 = load i32, ptr %33, align 4, !tbaa !11
  %35 = sext i32 %34 to i64
  %36 = call noundef nonnull align 8 dereferenceable(80) ptr @_ZNSt6vectorIN17siscone_spherical12CSphmomentumESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %32, i64 noundef %35) #9
  %37 = getelementptr inbounds i8, ptr %36, i64 64
  %38 = load double, ptr %37, align 8, !tbaa !17
  %39 = invoke noundef double @_ZN17siscone_spherical20norm2_cross_product3ERKNS_11CSph3vectorES2_(ptr noundef nonnull align 8 dereferenceable(60) %36, ptr noundef nonnull align 8 dereferenceable(60) %7)
          to label %40 unwind label %61

40:                                               ; preds = %31
  %41 = invoke noundef double @_ZN17siscone_spherical20norm2_cross_product3ERKNS_11CSph3vectorES2_(ptr noundef nonnull align 8 dereferenceable(60) %36, ptr noundef nonnull align 8 dereferenceable(60) %8)
          to label %42 unwind label %61

42:                                               ; preds = %40
  %43 = fsub double %39, %41
  %44 = load ptr, ptr %20, align 8, !tbaa !21
  %45 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNKSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %18, i64 noundef %24) #9
  %46 = load i32, ptr %45, align 4, !tbaa !11
  %47 = sext i32 %46 to i64
  %48 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIdSaIdEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %44, i64 noundef %47) #9
  %49 = load double, ptr %48, align 8, !tbaa !5
  %50 = fdiv double %43, %49
  %51 = load double, ptr %4, align 8, !tbaa !5
  %52 = call double @llvm.fmuladd.f64(double %38, double %50, double %51)
  store double %52, ptr %4, align 8, !tbaa !5
  %53 = add nsw i32 %.0, 1
  %54 = add nsw i32 %.081, 1
  br label %133

55:                                               ; preds = %5
  %56 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN17siscone_spherical12CSphmomentumD1Ev(ptr noundef nonnull align 8 dereferenceable(80) %6) #9
  call void @llvm.lifetime.end.p0(i64 80, ptr nonnull %6) #9
  br label %203

57:                                               ; preds = %12
  %58 = landingpad { ptr, i32 }
          cleanup
  br label %202

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

61:                                               ; preds = %40, %31
  %62 = landingpad { ptr, i32 }
          cleanup
  br label %201

63:                                               ; preds = %23
  %64 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNKSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %18, i64 noundef %24) #9
  %65 = load i32, ptr %64, align 4, !tbaa !11
  %66 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNKSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %19, i64 noundef %27) #9
  %67 = load i32, ptr %66, align 4, !tbaa !11
  %68 = icmp slt i32 %65, %67
  br i1 %68, label %69, label %94

69:                                               ; preds = %63
  %70 = load ptr, ptr %0, align 8, !tbaa !13
  %71 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNKSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %18, i64 noundef %24) #9
  %72 = load i32, ptr %71, align 4, !tbaa !11
  %73 = sext i32 %72 to i64
  %74 = call noundef nonnull align 8 dereferenceable(80) ptr @_ZNSt6vectorIN17siscone_spherical12CSphmomentumESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %70, i64 noundef %73) #9
  %75 = invoke noundef nonnull align 8 dereferenceable(80) ptr @_ZN17siscone_spherical12CSphmomentumpLERKS0_(ptr noundef nonnull align 8 dereferenceable(80) %3, ptr noundef nonnull align 8 dereferenceable(80) %74)
          to label %76 unwind label %92

76:                                               ; preds = %69
  %77 = getelementptr inbounds i8, ptr %74, i64 64
  %78 = load double, ptr %77, align 8, !tbaa !17
  %79 = invoke noundef double @_ZN17siscone_spherical20norm2_cross_product3ERKNS_11CSph3vectorES2_(ptr noundef nonnull align 8 dereferenceable(60) %74, ptr noundef nonnull align 8 dereferenceable(60) %7)
          to label %80 unwind label %92

80:                                               ; preds = %76
  %81 = fmul double %78, %79
  %82 = load ptr, ptr %20, align 8, !tbaa !21
  %83 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNKSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %18, i64 noundef %24) #9
  %84 = load i32, ptr %83, align 4, !tbaa !11
  %85 = sext i32 %84 to i64
  %86 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIdSaIdEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %82, i64 noundef %85) #9
  %87 = load double, ptr %86, align 8, !tbaa !5
  %88 = fdiv double %81, %87
  %89 = load double, ptr %4, align 8, !tbaa !5
  %90 = fadd double %89, %88
  store double %90, ptr %4, align 8, !tbaa !5
  %91 = add nsw i32 %.0, 1
  br label %133

92:                                               ; preds = %76, %69
  %93 = landingpad { ptr, i32 }
          cleanup
  br label %201

94:                                               ; preds = %63
  %95 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNKSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %18, i64 noundef %24) #9
  %96 = load i32, ptr %95, align 4, !tbaa !11
  %97 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNKSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %19, i64 noundef %27) #9
  %98 = load i32, ptr %97, align 4, !tbaa !11
  %99 = icmp sgt i32 %96, %98
  br i1 %99, label %100, label %125

100:                                              ; preds = %94
  %101 = load ptr, ptr %0, align 8, !tbaa !13
  %102 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNKSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %19, i64 noundef %27) #9
  %103 = load i32, ptr %102, align 4, !tbaa !11
  %104 = sext i32 %103 to i64
  %105 = call noundef nonnull align 8 dereferenceable(80) ptr @_ZNSt6vectorIN17siscone_spherical12CSphmomentumESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %101, i64 noundef %104) #9
  %106 = invoke noundef nonnull align 8 dereferenceable(80) ptr @_ZN17siscone_spherical12CSphmomentummIERKS0_(ptr noundef nonnull align 8 dereferenceable(80) %3, ptr noundef nonnull align 8 dereferenceable(80) %105)
          to label %107 unwind label %123

107:                                              ; preds = %100
  %108 = getelementptr inbounds i8, ptr %105, i64 64
  %109 = load double, ptr %108, align 8, !tbaa !17
  %110 = invoke noundef double @_ZN17siscone_spherical20norm2_cross_product3ERKNS_11CSph3vectorES2_(ptr noundef nonnull align 8 dereferenceable(60) %105, ptr noundef nonnull align 8 dereferenceable(60) %8)
          to label %111 unwind label %123

111:                                              ; preds = %107
  %112 = fmul double %109, %110
  %113 = load ptr, ptr %20, align 8, !tbaa !21
  %114 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNKSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %19, i64 noundef %27) #9
  %115 = load i32, ptr %114, align 4, !tbaa !11
  %116 = sext i32 %115 to i64
  %117 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIdSaIdEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %113, i64 noundef %116) #9
  %118 = load double, ptr %117, align 8, !tbaa !5
  %119 = fdiv double %112, %118
  %120 = load double, ptr %4, align 8, !tbaa !5
  %121 = fsub double %120, %119
  store double %121, ptr %4, align 8, !tbaa !5
  %122 = add nsw i32 %.081, 1
  br label %133

123:                                              ; preds = %107, %100
  %124 = landingpad { ptr, i32 }
          cleanup
  br label %201

125:                                              ; preds = %94
  %126 = call ptr @__cxa_allocate_exception(i64 32) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %9) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %10) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %10) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %9, ptr noundef nonnull @.str.4, ptr noundef nonnull align 1 dereferenceable(1) %10)
          to label %127 unwind label %.thread

127:                                              ; preds = %125
  invoke void @_ZN7siscone14Csiscone_errorC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(32) %126, ptr noundef nonnull align 8 dereferenceable(32) %9)
          to label %128 unwind label %130

128:                                              ; preds = %127
  invoke void @__cxa_throw(ptr nonnull %126, ptr nonnull @_ZTIN7siscone14Csiscone_errorE, ptr nonnull @_ZN7siscone14Csiscone_errorD2Ev) #10
          to label %204 unwind label %130

.thread:                                          ; preds = %125
  %129 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %10) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %10) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %9) #9
  br label %132

130:                                              ; preds = %127, %128
  %.084 = phi i1 [ false, %128 ], [ true, %127 ]
  %131 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %9) #9
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %10) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %10) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %9) #9
  br i1 %.084, label %132, label %201

132:                                              ; preds = %.thread, %130
  %.pn102 = phi { ptr, i32 } [ %129, %.thread ], [ %131, %130 ]
  call void @__cxa_free_exception(ptr %126) #9
  br label %201

133:                                              ; preds = %42, %111, %80
  %134 = phi double [ %52, %42 ], [ %90, %80 ], [ %121, %111 ]
  %.182 = phi i32 [ %54, %42 ], [ %.081, %80 ], [ %122, %111 ]
  %.1 = phi i32 [ %53, %42 ], [ %91, %80 ], [ %.0, %111 ]
  %135 = load i32, ptr %21, align 8, !tbaa !22
  %136 = icmp slt i32 %.1, %135
  %137 = load i32, ptr %22, align 8
  %138 = icmp slt i32 %.182, %137
  %or.cond = select i1 %136, i1 %138, i1 false
  br i1 %or.cond, label %23, label %.critedge.preheader, !llvm.loop !29

.critedge.preheader:                              ; preds = %133
  br i1 %136, label %.lr.ph, label %.preheader

.lr.ph:                                           ; preds = %.critedge.preheader
  %139 = sext i32 %.1 to i64
  br label %144

.preheader.loopexit:                              ; preds = %.critedge
  %.pre = load i32, ptr %22, align 8, !tbaa !22
  br label %.preheader

.preheader:                                       ; preds = %.preheader.loopexit, %.critedge.preheader
  %140 = phi double [ %164, %.preheader.loopexit ], [ %134, %.critedge.preheader ]
  %141 = phi i32 [ %.pre, %.preheader.loopexit ], [ %137, %.critedge.preheader ]
  %142 = icmp slt i32 %.182, %141
  br i1 %142, label %.lr.ph117, label %._crit_edge

.lr.ph117:                                        ; preds = %.preheader
  %143 = sext i32 %.182 to i64
  br label %170

144:                                              ; preds = %.lr.ph, %.critedge
  %indvars.iv = phi i64 [ %139, %.lr.ph ], [ %indvars.iv.next, %.critedge ]
  %145 = load ptr, ptr %0, align 8, !tbaa !13
  %146 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNKSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %18, i64 noundef %indvars.iv) #9
  %147 = load i32, ptr %146, align 4, !tbaa !11
  %148 = sext i32 %147 to i64
  %149 = call noundef nonnull align 8 dereferenceable(80) ptr @_ZNSt6vectorIN17siscone_spherical12CSphmomentumESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %145, i64 noundef %148) #9
  %150 = invoke noundef nonnull align 8 dereferenceable(80) ptr @_ZN17siscone_spherical12CSphmomentumpLERKS0_(ptr noundef nonnull align 8 dereferenceable(80) %3, ptr noundef nonnull align 8 dereferenceable(80) %149)
          to label %151 unwind label %168

151:                                              ; preds = %144
  %152 = getelementptr inbounds i8, ptr %149, i64 64
  %153 = load double, ptr %152, align 8, !tbaa !17
  %154 = invoke noundef double @_ZN17siscone_spherical20norm2_cross_product3ERKNS_11CSph3vectorES2_(ptr noundef nonnull align 8 dereferenceable(60) %149, ptr noundef nonnull align 8 dereferenceable(60) %7)
          to label %.critedge unwind label %168

.critedge:                                        ; preds = %151
  %155 = fmul double %153, %154
  %156 = load ptr, ptr %20, align 8, !tbaa !21
  %157 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNKSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %18, i64 noundef %indvars.iv) #9
  %158 = load i32, ptr %157, align 4, !tbaa !11
  %159 = sext i32 %158 to i64
  %160 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIdSaIdEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %156, i64 noundef %159) #9
  %161 = load double, ptr %160, align 8, !tbaa !5
  %162 = fdiv double %155, %161
  %163 = load double, ptr %4, align 8, !tbaa !5
  %164 = fadd double %163, %162
  store double %164, ptr %4, align 8, !tbaa !5
  %indvars.iv.next = add nsw i64 %indvars.iv, 1
  %165 = load i32, ptr %21, align 8, !tbaa !22
  %166 = sext i32 %165 to i64
  %167 = icmp slt i64 %indvars.iv.next, %166
  br i1 %167, label %144, label %.preheader.loopexit, !llvm.loop !31

168:                                              ; preds = %151, %144
  %169 = landingpad { ptr, i32 }
          cleanup
  br label %201

170:                                              ; preds = %.lr.ph117, %181
  %indvars.iv119 = phi i64 [ %143, %.lr.ph117 ], [ %indvars.iv.next120, %181 ]
  %171 = load ptr, ptr %0, align 8, !tbaa !13
  %172 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNKSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %19, i64 noundef %indvars.iv119) #9
  %173 = load i32, ptr %172, align 4, !tbaa !11
  %174 = sext i32 %173 to i64
  %175 = call noundef nonnull align 8 dereferenceable(80) ptr @_ZNSt6vectorIN17siscone_spherical12CSphmomentumESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %171, i64 noundef %174) #9
  %176 = invoke noundef nonnull align 8 dereferenceable(80) ptr @_ZN17siscone_spherical12CSphmomentummIERKS0_(ptr noundef nonnull align 8 dereferenceable(80) %3, ptr noundef nonnull align 8 dereferenceable(80) %175)
          to label %177 unwind label %195

177:                                              ; preds = %170
  %178 = getelementptr inbounds i8, ptr %175, i64 64
  %179 = load double, ptr %178, align 8, !tbaa !17
  %180 = invoke noundef double @_ZN17siscone_spherical20norm2_cross_product3ERKNS_11CSph3vectorES2_(ptr noundef nonnull align 8 dereferenceable(60) %175, ptr noundef nonnull align 8 dereferenceable(60) %8)
          to label %181 unwind label %195

181:                                              ; preds = %177
  %182 = fmul double %179, %180
  %183 = load ptr, ptr %20, align 8, !tbaa !21
  %184 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNKSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %19, i64 noundef %indvars.iv119) #9
  %185 = load i32, ptr %184, align 4, !tbaa !11
  %186 = sext i32 %185 to i64
  %187 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIdSaIdEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %183, i64 noundef %186) #9
  %188 = load double, ptr %187, align 8, !tbaa !5
  %189 = fdiv double %182, %188
  %190 = load double, ptr %4, align 8, !tbaa !5
  %191 = fsub double %190, %189
  store double %191, ptr %4, align 8, !tbaa !5
  %indvars.iv.next120 = add nsw i64 %indvars.iv119, 1
  %192 = load i32, ptr %22, align 8, !tbaa !22
  %193 = sext i32 %192 to i64
  %194 = icmp slt i64 %indvars.iv.next120, %193
  br i1 %194, label %170, label %._crit_edge, !llvm.loop !32

195:                                              ; preds = %177, %170
  %196 = landingpad { ptr, i32 }
          cleanup
  br label %201

._crit_edge:                                      ; preds = %181, %.preheader
  %197 = phi double [ %140, %.preheader ], [ %191, %181 ]
  %198 = getelementptr inbounds i8, ptr %3, i64 64
  %199 = load double, ptr %198, align 8, !tbaa !17
  %200 = fadd double %199, %197
  store double %200, ptr %4, align 8, !tbaa !5
  call void @_ZN17siscone_spherical11CSph3vectorD1Ev(ptr noundef nonnull align 8 dereferenceable(60) %8) #9
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %8) #9
  call void @_ZN17siscone_spherical11CSph3vectorD1Ev(ptr noundef nonnull align 8 dereferenceable(60) %7) #9
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %7) #9
  ret void

201:                                              ; preds = %130, %132, %195, %168, %123, %92, %61, %59
  %.pn94 = phi { ptr, i32 } [ %169, %168 ], [ %196, %195 ], [ %62, %61 ], [ %93, %92 ], [ %124, %123 ], [ %.pn102, %132 ], [ %131, %130 ], [ %60, %59 ]
  call void @_ZN17siscone_spherical11CSph3vectorD1Ev(ptr noundef nonnull align 8 dereferenceable(60) %8) #9
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %8) #9
  br label %202

202:                                              ; preds = %201, %57
  %.pn94.pn = phi { ptr, i32 } [ %.pn94, %201 ], [ %58, %57 ]
  call void @_ZN17siscone_spherical11CSph3vectorD1Ev(ptr noundef nonnull align 8 dereferenceable(60) %7) #9
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %7) #9
  br label %203

203:                                              ; preds = %202, %55
  %.pn94.pn.pn = phi { ptr, i32 } [ %.pn94.pn, %202 ], [ %56, %55 ]
  resume { ptr, i32 } %.pn94.pn.pn

204:                                              ; preds = %128
  unreachable
}

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

declare noundef nonnull align 8 dereferenceable(80) ptr @_ZN17siscone_spherical12CSphmomentumpLERKS0_(ptr noundef nonnull align 8 dereferenceable(80), ptr noundef nonnull align 8 dereferenceable(80)) local_unnamed_addr #0

declare ptr @__cxa_allocate_exception(i64) local_unnamed_addr

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

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

declare void @__cxa_throw(ptr, ptr, ptr) local_unnamed_addr

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

declare void @__cxa_free_exception(ptr) local_unnamed_addr

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

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

declare noundef nonnull align 8 dereferenceable(60) ptr @_ZN17siscone_spherical11CSph3vectordVERKd(ptr noundef nonnull align 8 dereferenceable(60), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #0

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef double @_ZN17siscone_spherical20norm2_cross_product3ERKNS_11CSph3vectorES2_(ptr noundef nonnull align 8 dereferenceable(60), ptr noundef nonnull align 8 dereferenceable(60)) local_unnamed_addr #7

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

; Function Attrs: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare double @llvm.fmuladd.f64(double, double, double) #8

declare noundef nonnull align 8 dereferenceable(80) ptr @_ZN17siscone_spherical12CSphmomentummIERKS0_(ptr noundef nonnull align 8 dereferenceable(80), ptr noundef nonnull align 8 dereferenceable(80)) local_unnamed_addr #0

; Function Attrs: nounwind
declare void @_ZN17siscone_spherical11CSph3vectorD1Ev(ptr noundef nonnull align 8 dereferenceable(60)) unnamed_addr #2

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"double", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{i64 0, i64 8, !5, i64 8, i64 8, !5, i64 16, i64 8, !5, i64 24, i64 8, !5, i64 32, i64 8, !5, i64 40, i64 8, !5, i64 48, i64 12, !10}
!10 = !{!7, !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"int", !7, i64 0}
!13 = !{!14, !15, i64 0}
!14 = !{!"_ZTSN17siscone_spherical28CSphsplit_merge_ptcomparisonE", !15, i64 0, !15, i64 8, !16, i64 16}
!15 = !{!"any pointer", !7, i64 0}
!16 = !{!"_ZTSN17siscone_spherical18Esplit_merge_scaleE", !7, i64 0}
!17 = !{!18, !6, i64 64}
!18 = !{!"_ZTSN17siscone_spherical12CSphmomentumE", !19, i64 0, !6, i64 64, !12, i64 72, !12, i64 76}
!19 = !{!"_ZTSN17siscone_spherical11CSph3vectorE", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !20, i64 48}
!20 = !{!"_ZTSN7siscone10CreferenceE", !7, i64 0}
!21 = !{!14, !15, i64 8}
!22 = !{!23, !12, i64 88}
!23 = !{!"_ZTSN17siscone_spherical7CSphjetE", !18, i64 0, !6, i64 80, !12, i64 88, !24, i64 96, !6, i64 120, !28, i64 128, !12, i64 136}
!24 = !{!"_ZTSSt6vectorIiSaIiEE", !25, i64 0}
!25 = !{!"_ZTSSt12_Vector_baseIiSaIiEE", !26, i64 0}
!26 = !{!"_ZTSNSt12_Vector_baseIiSaIiEE12_Vector_implE", !27, i64 0}
!27 = !{!"_ZTSNSt12_Vector_baseIiSaIiEE17_Vector_impl_dataE", !15, i64 0, !15, i64 8, !15, i64 16}
!28 = !{!"_ZTSN17siscone_spherical19CSphtheta_phi_rangeE", !12, i64 0, !12, i64 4}
!29 = distinct !{!29, !30}
!30 = !{!"llvm.loop.mustprogress"}
!31 = distinct !{!31, !30}
!32 = distinct !{!32, !30}


; Effective O3 passes: EarlyCSEPass,GVNPass,GlobalOptPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,PostOrderFunctionAttrsPass,ReassociatePass,SROAPass,SimplifyCFGPass