; LLVM IR from mickypaganini/SSI2016-jet-clustering :: spartyjet-4.0.2_mac/ExternalTools (AngularCorrelation)

; 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.GaussTable = type { [1000 x double], [1000 x double] }
%struct.particlepair = type { double, double }
%"class.__gnu_cxx::__normal_iterator" = type { ptr }
%class.ASF = type { %struct.functiondata, %struct.functiondata, %struct.functiondata, %"class.std::vector", %"class.std::vector.14", %"class.std::vector.19", i32, i32, i32, double, double }
%struct.functiondata = type { [500 x double], [500 x double] }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<fastjet::PseudoJet, std::allocator<fastjet::PseudoJet>>::_Vector_impl" }
%"struct.std::_Vector_base<fastjet::PseudoJet, std::allocator<fastjet::PseudoJet>>::_Vector_impl" = type { %"struct.std::_Vector_base<fastjet::PseudoJet, std::allocator<fastjet::PseudoJet>>::_Vector_impl_data" }
%"struct.std::_Vector_base<fastjet::PseudoJet, std::allocator<fastjet::PseudoJet>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.14" = type { %"struct.std::_Vector_base.15" }
%"struct.std::_Vector_base.15" = type { %"struct.std::_Vector_base<particlepair, std::allocator<particlepair>>::_Vector_impl" }
%"struct.std::_Vector_base<particlepair, std::allocator<particlepair>>::_Vector_impl" = type { %"struct.std::_Vector_base<particlepair, std::allocator<particlepair>>::_Vector_impl_data" }
%"struct.std::_Vector_base<particlepair, std::allocator<particlepair>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.19" = type { %"struct.std::_Vector_base.20" }
%"struct.std::_Vector_base.20" = type { %"struct.std::_Vector_base<peak, std::allocator<peak>>::_Vector_impl" }
%"struct.std::_Vector_base<peak, std::allocator<peak>>::_Vector_impl" = type { %"struct.std::_Vector_base<peak, std::allocator<peak>>::_Vector_impl_data" }
%"struct.std::_Vector_base<peak, std::allocator<peak>>::_Vector_impl_data" = type { ptr, ptr, ptr }

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

; 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
define dso_local void @_ZN3ASF12ConstructASFE10GaussTablebd(ptr noundef nonnull align 8 dereferenceable(24104) %0, ptr noundef byval(%class.GaussTable) align 8 %1, i1 noundef zeroext %2, double noundef %3) #1 align 2 {
  %5 = alloca ptr, align 8
  %6 = alloca i8, align 1
  %7 = alloca double, align 8
  %8 = alloca %struct.particlepair, align 8
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %13 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %14 = alloca double, align 8
  %15 = alloca double, align 8
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  store ptr %0, ptr %5, align 8, !tbaa !5
  %23 = zext i1 %2 to i8
  store i8 %23, ptr %6, align 1, !tbaa !9
  store double %3, ptr %7, align 8, !tbaa !11
  %24 = load ptr, ptr %5, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr %8) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #8
  store i32 0, ptr %9, align 4, !tbaa !13
  br label %25

25:                                               ; preds = %72, %4
  %26 = load i32, ptr %9, align 4, !tbaa !13
  %27 = getelementptr inbounds %class.ASF, ptr %24, i32 0, i32 7
  %28 = load i32, ptr %27, align 4, !tbaa !15
  %29 = icmp slt i32 %26, %28
  br i1 %29, label %31, label %30

30:                                               ; preds = %25
  store i32 2, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #8
  br label %75

31:                                               ; preds = %25
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #8
  store i32 0, ptr %11, align 4, !tbaa !13
  br label %32

32:                                               ; preds = %68, %31
  %33 = load i32, ptr %11, align 4, !tbaa !13
  %34 = load i32, ptr %9, align 4, !tbaa !13
  %35 = icmp slt i32 %33, %34
  br i1 %35, label %37, label %36

36:                                               ; preds = %32
  store i32 5, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #8
  br label %71

37:                                               ; preds = %32
  %38 = getelementptr inbounds %class.ASF, ptr %24, i32 0, i32 3
  %39 = load i32, ptr %9, align 4, !tbaa !13
  %40 = sext i32 %39 to i64
  %41 = call noundef nonnull align 8 dereferenceable(88) ptr @_ZNSt6vectorIN7fastjet9PseudoJetESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %38, i64 noundef %40) #8
  %42 = getelementptr inbounds %class.ASF, ptr %24, i32 0, i32 3
  %43 = load i32, ptr %11, align 4, !tbaa !13
  %44 = sext i32 %43 to i64
  %45 = call noundef nonnull align 8 dereferenceable(88) ptr @_ZNSt6vectorIN7fastjet9PseudoJetESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %42, i64 noundef %44) #8
  %46 = call noundef double @_ZNK7fastjet9PseudoJet14plain_distanceERKS0_(ptr noundef nonnull align 8 dereferenceable(88) %41, ptr noundef nonnull align 8 dereferenceable(88) %45)
  %47 = call double @sqrt(double noundef %46) #8
  %48 = getelementptr inbounds %struct.particlepair, ptr %8, i32 0, i32 0
  store double %47, ptr %48, align 8, !tbaa !30
  %49 = getelementptr inbounds %class.ASF, ptr %24, i32 0, i32 3
  %50 = load i32, ptr %9, align 4, !tbaa !13
  %51 = sext i32 %50 to i64
  %52 = call noundef nonnull align 8 dereferenceable(88) ptr @_ZNSt6vectorIN7fastjet9PseudoJetESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %49, i64 noundef %51) #8
  %53 = call noundef double @_ZNK7fastjet9PseudoJet4perpEv(ptr noundef nonnull align 8 dereferenceable(88) %52)
  %54 = getelementptr inbounds %class.ASF, ptr %24, i32 0, i32 3
  %55 = load i32, ptr %11, align 4, !tbaa !13
  %56 = sext i32 %55 to i64
  %57 = call noundef nonnull align 8 dereferenceable(88) ptr @_ZNSt6vectorIN7fastjet9PseudoJetESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %54, i64 noundef %56) #8
  %58 = call noundef double @_ZNK7fastjet9PseudoJet4perpEv(ptr noundef nonnull align 8 dereferenceable(88) %57)
  %59 = fmul double %53, %58
  %60 = getelementptr inbounds %struct.particlepair, ptr %8, i32 0, i32 0
  %61 = load double, ptr %60, align 8, !tbaa !30
  %62 = fmul double %59, %61
  %63 = getelementptr inbounds %struct.particlepair, ptr %8, i32 0, i32 0
  %64 = load double, ptr %63, align 8, !tbaa !30
  %65 = fmul double %62, %64
  %66 = getelementptr inbounds %struct.particlepair, ptr %8, i32 0, i32 1
  store double %65, ptr %66, align 8, !tbaa !32
  %67 = getelementptr inbounds %class.ASF, ptr %24, i32 0, i32 4
  call void @_ZNSt6vectorI12particlepairSaIS0_EE9push_backERKS0_(ptr noundef nonnull align 8 dereferenceable(24) %67, ptr noundef nonnull align 8 dereferenceable(16) %8)
  br label %68

68:                                               ; preds = %37
  %69 = load i32, ptr %11, align 4, !tbaa !13
  %70 = add nsw i32 %69, 1
  store i32 %70, ptr %11, align 4, !tbaa !13
  br label %32, !llvm.loop !33

71:                                               ; preds = %36
  br label %72

72:                                               ; preds = %71
  %73 = load i32, ptr %9, align 4, !tbaa !13
  %74 = add nsw i32 %73, 1
  store i32 %74, ptr %9, align 4, !tbaa !13
  br label %25, !llvm.loop !35

75:                                               ; preds = %30
  %76 = getelementptr inbounds %class.ASF, ptr %24, i32 0, i32 4
  %77 = call noundef i64 @_ZNKSt6vectorI12particlepairSaIS0_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %76) #8
  %78 = trunc i64 %77 to i32
  %79 = getelementptr inbounds %class.ASF, ptr %24, i32 0, i32 8
  store i32 %78, ptr %79, align 8, !tbaa !36
  %80 = getelementptr inbounds %class.ASF, ptr %24, i32 0, i32 8
  %81 = load i32, ptr %80, align 8, !tbaa !36
  %82 = icmp slt i32 %81, 2
  br i1 %82, label %83, label %84

83:                                               ; preds = %75
  store i32 1, ptr %10, align 4
  br label %355

84:                                               ; preds = %75
  %85 = getelementptr inbounds %class.ASF, ptr %24, i32 0, i32 4
  %86 = call ptr @_ZNSt6vectorI12particlepairSaIS0_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %85) #8
  %87 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %12, i32 0, i32 0
  store ptr %86, ptr %87, align 8
  %88 = getelementptr inbounds %class.ASF, ptr %24, i32 0, i32 4
  %89 = call ptr @_ZNSt6vectorI12particlepairSaIS0_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %88) #8
  %90 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %13, i32 0, i32 0
  store ptr %89, ptr %90, align 8
  %91 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %12, i32 0, i32 0
  %92 = load ptr, ptr %91, align 8
  %93 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %13, i32 0, i32 0
  %94 = load ptr, ptr %93, align 8
  call void @_ZSt4sortIN9__gnu_cxx17__normal_iteratorIP12particlepairSt6vectorIS2_SaIS2_EEEEPFbS2_S2_EEvT_SA_T0_(ptr %92, ptr %94, ptr noundef @_Z14ppsortfunction12particlepairS_)
  %95 = load double, ptr %7, align 8, !tbaa !11
  %96 = fcmp oeq double %95, 0.000000e+00
  br i1 %96, label %97, label %107

97:                                               ; preds = %84
  %98 = getelementptr inbounds %class.ASF, ptr %24, i32 0, i32 4
  %99 = getelementptr inbounds %class.ASF, ptr %24, i32 0, i32 8
  %100 = load i32, ptr %99, align 8, !tbaa !36
  %101 = sub nsw i32 %100, 1
  %102 = sext i32 %101 to i64
  %103 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorI12particlepairSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %98, i64 noundef %102) #8
  %104 = getelementptr inbounds %struct.particlepair, ptr %103, i32 0, i32 0
  %105 = load double, ptr %104, align 8, !tbaa !30
  %106 = getelementptr inbounds %class.ASF, ptr %24, i32 0, i32 9
  store double %105, ptr %106, align 8, !tbaa !37
  br label %110

107:                                              ; preds = %84
  %108 = load double, ptr %7, align 8, !tbaa !11
  %109 = getelementptr inbounds %class.ASF, ptr %24, i32 0, i32 9
  store double %108, ptr %109, align 8, !tbaa !37
  br label %110

110:                                              ; preds = %107, %97
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #8
  %111 = load i8, ptr %6, align 1, !tbaa !9, !range !38, !noundef !39
  %112 = trunc i8 %111 to i1
  br i1 %112, label %188, label %113

113:                                              ; preds = %110
  %114 = getelementptr inbounds %class.ASF, ptr %24, i32 0, i32 1
  %115 = getelementptr inbounds %struct.functiondata, ptr %114, i32 0, i32 0
  %116 = getelementptr inbounds [500 x double], ptr %115, i64 0, i64 0
  store double 0.000000e+00, ptr %116, align 8, !tbaa !11
  %117 = getelementptr inbounds %class.ASF, ptr %24, i32 0, i32 1
  %118 = getelementptr inbounds %struct.functiondata, ptr %117, i32 0, i32 1
  %119 = getelementptr inbounds [500 x double], ptr %118, i64 0, i64 0
  store double 0.000000e+00, ptr %119, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #8
  store i32 0, ptr %16, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #8
  store i32 1, ptr %17, align 4, !tbaa !13
  br label %120

120:                                              ; preds = %184, %113
  %121 = load i32, ptr %17, align 4, !tbaa !13
  %122 = icmp slt i32 %121, 500
  br i1 %122, label %124, label %123

123:                                              ; preds = %120
  store i32 8, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #8
  br label %187

124:                                              ; preds = %120
  %125 = load i32, ptr %17, align 4, !tbaa !13
  %126 = sitofp i32 %125 to double
  %127 = getelementptr inbounds %class.ASF, ptr %24, i32 0, i32 9
  %128 = load double, ptr %127, align 8, !tbaa !37
  %129 = fmul double %126, %128
  %130 = fdiv double %129, 4.990000e+02
  store double %130, ptr %14, align 8, !tbaa !11
  %131 = load double, ptr %14, align 8, !tbaa !11
  %132 = getelementptr inbounds %class.ASF, ptr %24, i32 0, i32 1
  %133 = getelementptr inbounds %struct.functiondata, ptr %132, i32 0, i32 0
  %134 = load i32, ptr %17, align 4, !tbaa !13
  %135 = sext i32 %134 to i64
  %136 = getelementptr inbounds [500 x double], ptr %133, i64 0, i64 %135
  store double %131, ptr %136, align 8, !tbaa !11
  %137 = getelementptr inbounds %class.ASF, ptr %24, i32 0, i32 1
  %138 = getelementptr inbounds %struct.functiondata, ptr %137, i32 0, i32 1
  %139 = load i32, ptr %17, align 4, !tbaa !13
  %140 = sub nsw i32 %139, 1
  %141 = sext i32 %140 to i64
  %142 = getelementptr inbounds [500 x double], ptr %138, i64 0, i64 %141
  %143 = load double, ptr %142, align 8, !tbaa !11
  store double %143, ptr %15, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #8
  %144 = load i32, ptr %16, align 4, !tbaa !13
  store i32 %144, ptr %18, align 4, !tbaa !13
  br label %145

145:                                              ; preds = %173, %124
  %146 = load i32, ptr %18, align 4, !tbaa !13
  %147 = getelementptr inbounds %class.ASF, ptr %24, i32 0, i32 8
  %148 = load i32, ptr %147, align 8, !tbaa !36
  %149 = icmp slt i32 %146, %148
  br i1 %149, label %151, label %150

150:                                              ; preds = %145
  store i32 11, ptr %10, align 4
  br label %176

151:                                              ; preds = %145
  %152 = getelementptr inbounds %class.ASF, ptr %24, i32 0, i32 4
  %153 = load i32, ptr %18, align 4, !tbaa !13
  %154 = sext i32 %153 to i64
  %155 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorI12particlepairSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %152, i64 noundef %154) #8
  %156 = getelementptr inbounds %struct.particlepair, ptr %155, i32 0, i32 0
  %157 = load double, ptr %156, align 8, !tbaa !30
  %158 = load double, ptr %14, align 8, !tbaa !11
  %159 = fcmp ole double %157, %158
  br i1 %159, label %160, label %171

160:                                              ; preds = %151
  %161 = getelementptr inbounds %class.ASF, ptr %24, i32 0, i32 4
  %162 = load i32, ptr %18, align 4, !tbaa !13
  %163 = sext i32 %162 to i64
  %164 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorI12particlepairSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %161, i64 noundef %163) #8
  %165 = getelementptr inbounds %struct.particlepair, ptr %164, i32 0, i32 1
  %166 = load double, ptr %165, align 8, !tbaa !32
  %167 = load double, ptr %15, align 8, !tbaa !11
  %168 = fadd double %167, %166
  store double %168, ptr %15, align 8, !tbaa !11
  %169 = load i32, ptr %16, align 4, !tbaa !13
  %170 = add nsw i32 %169, 1
  store i32 %170, ptr %16, align 4, !tbaa !13
  br label %172

171:                                              ; preds = %151
  store i32 11, ptr %10, align 4
  br label %176

172:                                              ; preds = %160
  br label %173

173:                                              ; preds = %172
  %174 = load i32, ptr %18, align 4, !tbaa !13
  %175 = add nsw i32 %174, 1
  store i32 %175, ptr %18, align 4, !tbaa !13
  br label %145, !llvm.loop !40

176:                                              ; preds = %171, %150
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #8
  br label %177

177:                                              ; preds = %176
  %178 = load double, ptr %15, align 8, !tbaa !11
  %179 = getelementptr inbounds %class.ASF, ptr %24, i32 0, i32 1
  %180 = getelementptr inbounds %struct.functiondata, ptr %179, i32 0, i32 1
  %181 = load i32, ptr %17, align 4, !tbaa !13
  %182 = sext i32 %181 to i64
  %183 = getelementptr inbounds [500 x double], ptr %180, i64 0, i64 %182
  store double %178, ptr %183, align 8, !tbaa !11
  br label %184

184:                                              ; preds = %177
  %185 = load i32, ptr %17, align 4, !tbaa !13
  %186 = add nsw i32 %185, 1
  store i32 %186, ptr %17, align 4, !tbaa !13
  br label %120, !llvm.loop !41

187:                                              ; preds = %123
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #8
  br label %258

188:                                              ; preds = %110
  %189 = getelementptr inbounds %class.ASF, ptr %24, i32 0, i32 1
  %190 = getelementptr inbounds %struct.functiondata, ptr %189, i32 0, i32 0
  %191 = getelementptr inbounds [500 x double], ptr %190, i64 0, i64 0
  store double 0.000000e+00, ptr %191, align 8, !tbaa !11
  %192 = getelementptr inbounds %class.ASF, ptr %24, i32 0, i32 1
  %193 = getelementptr inbounds %struct.functiondata, ptr %192, i32 0, i32 1
  %194 = getelementptr inbounds [500 x double], ptr %193, i64 0, i64 0
  store double 0.000000e+00, ptr %194, align 8, !tbaa !11
  %195 = getelementptr inbounds %class.ASF, ptr %24, i32 0, i32 2
  %196 = getelementptr inbounds %struct.functiondata, ptr %195, i32 0, i32 1
  %197 = getelementptr inbounds [500 x double], ptr %196, i64 0, i64 0
  store double 0.000000e+00, ptr %197, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #8
  store i32 1, ptr %19, align 4, !tbaa !13
  br label %198

198:                                              ; preds = %254, %188
  %199 = load i32, ptr %19, align 4, !tbaa !13
  %200 = icmp slt i32 %199, 500
  br i1 %200, label %202, label %201

201:                                              ; preds = %198
  store i32 14, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #8
  br label %257

202:                                              ; preds = %198
  store double 0.000000e+00, ptr %15, align 8, !tbaa !11
  %203 = load i32, ptr %19, align 4, !tbaa !13
  %204 = sitofp i32 %203 to double
  %205 = getelementptr inbounds %class.ASF, ptr %24, i32 0, i32 9
  %206 = load double, ptr %205, align 8, !tbaa !37
  %207 = fmul double %204, %206
  %208 = fdiv double %207, 4.990000e+02
  store double %208, ptr %14, align 8, !tbaa !11
  %209 = load double, ptr %14, align 8, !tbaa !11
  %210 = getelementptr inbounds %class.ASF, ptr %24, i32 0, i32 1
  %211 = getelementptr inbounds %struct.functiondata, ptr %210, i32 0, i32 0
  %212 = load i32, ptr %19, align 4, !tbaa !13
  %213 = sext i32 %212 to i64
  %214 = getelementptr inbounds [500 x double], ptr %211, i64 0, i64 %213
  store double %209, ptr %214, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #8
  store i32 0, ptr %20, align 4, !tbaa !13
  br label %215

215:                                              ; preds = %244, %202
  %216 = load i32, ptr %20, align 4, !tbaa !13
  %217 = getelementptr inbounds %class.ASF, ptr %24, i32 0, i32 8
  %218 = load i32, ptr %217, align 8, !tbaa !36
  %219 = icmp slt i32 %216, %218
  br i1 %219, label %221, label %220

220:                                              ; preds = %215
  store i32 17, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #8
  br label %247

221:                                              ; preds = %215
  %222 = getelementptr inbounds %class.ASF, ptr %24, i32 0, i32 4
  %223 = load i32, ptr %20, align 4, !tbaa !13
  %224 = sext i32 %223 to i64
  %225 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorI12particlepairSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %222, i64 noundef %224) #8
  %226 = getelementptr inbounds %struct.particlepair, ptr %225, i32 0, i32 1
  %227 = load double, ptr %226, align 8, !tbaa !32
  %228 = fmul double %227, 5.000000e-01
  %229 = load double, ptr %14, align 8, !tbaa !11
  %230 = getelementptr inbounds %class.ASF, ptr %24, i32 0, i32 4
  %231 = load i32, ptr %20, align 4, !tbaa !13
  %232 = sext i32 %231 to i64
  %233 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorI12particlepairSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %230, i64 noundef %232) #8
  %234 = getelementptr inbounds %struct.particlepair, ptr %233, i32 0, i32 0
  %235 = load double, ptr %234, align 8, !tbaa !30
  %236 = fsub double %229, %235
  %237 = getelementptr inbounds %class.ASF, ptr %24, i32 0, i32 10
  %238 = load double, ptr %237, align 8, !tbaa !42
  %239 = fdiv double %236, %238
  %240 = call noundef double @_ZN10GaussTable3erfEd(ptr noundef nonnull align 8 dereferenceable(16000) %1, double noundef %239)
  %241 = fadd double 1.000000e+00, %240
  %242 = load double, ptr %15, align 8, !tbaa !11
  %243 = call double @llvm.fmuladd.f64(double %228, double %241, double %242)
  store double %243, ptr %15, align 8, !tbaa !11
  br label %244

244:                                              ; preds = %221
  %245 = load i32, ptr %20, align 4, !tbaa !13
  %246 = add nsw i32 %245, 1
  store i32 %246, ptr %20, align 4, !tbaa !13
  br label %215, !llvm.loop !43

247:                                              ; preds = %220
  %248 = load double, ptr %15, align 8, !tbaa !11
  %249 = getelementptr inbounds %class.ASF, ptr %24, i32 0, i32 1
  %250 = getelementptr inbounds %struct.functiondata, ptr %249, i32 0, i32 1
  %251 = load i32, ptr %19, align 4, !tbaa !13
  %252 = sext i32 %251 to i64
  %253 = getelementptr inbounds [500 x double], ptr %250, i64 0, i64 %252
  store double %248, ptr %253, align 8, !tbaa !11
  br label %254

254:                                              ; preds = %247
  %255 = load i32, ptr %19, align 4, !tbaa !13
  %256 = add nsw i32 %255, 1
  store i32 %256, ptr %19, align 4, !tbaa !13
  br label %198, !llvm.loop !44

257:                                              ; preds = %201
  br label %258

258:                                              ; preds = %257, %187
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #8
  store i32 0, ptr %21, align 4, !tbaa !13
  br label %259

259:                                              ; preds = %351, %258
  %260 = load i32, ptr %21, align 4, !tbaa !13
  %261 = icmp slt i32 %260, 500
  br i1 %261, label %263, label %262

262:                                              ; preds = %259
  store i32 20, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #8
  br label %354

263:                                              ; preds = %259
  %264 = getelementptr inbounds %class.ASF, ptr %24, i32 0, i32 1
  %265 = getelementptr inbounds %struct.functiondata, ptr %264, i32 0, i32 0
  %266 = load i32, ptr %21, align 4, !tbaa !13
  %267 = sext i32 %266 to i64
  %268 = getelementptr inbounds [500 x double], ptr %265, i64 0, i64 %267
  %269 = load double, ptr %268, align 8, !tbaa !11
  store double %269, ptr %14, align 8, !tbaa !11
  %270 = load double, ptr %14, align 8, !tbaa !11
  %271 = getelementptr inbounds %class.ASF, ptr %24, i32 0, i32 0
  %272 = getelementptr inbounds %struct.functiondata, ptr %271, i32 0, i32 0
  %273 = load i32, ptr %21, align 4, !tbaa !13
  %274 = sext i32 %273 to i64
  %275 = getelementptr inbounds [500 x double], ptr %272, i64 0, i64 %274
  store double %270, ptr %275, align 8, !tbaa !11
  %276 = getelementptr inbounds %class.ASF, ptr %24, i32 0, i32 1
  %277 = getelementptr inbounds %struct.functiondata, ptr %276, i32 0, i32 1
  %278 = load i32, ptr %21, align 4, !tbaa !13
  %279 = sext i32 %278 to i64
  %280 = getelementptr inbounds [500 x double], ptr %277, i64 0, i64 %279
  %281 = load double, ptr %280, align 8, !tbaa !11
  %282 = fcmp oeq double %281, 0.000000e+00
  br i1 %282, label %283, label %289

283:                                              ; preds = %263
  %284 = getelementptr inbounds %class.ASF, ptr %24, i32 0, i32 0
  %285 = getelementptr inbounds %struct.functiondata, ptr %284, i32 0, i32 1
  %286 = load i32, ptr %21, align 4, !tbaa !13
  %287 = sext i32 %286 to i64
  %288 = getelementptr inbounds [500 x double], ptr %285, i64 0, i64 %287
  store double 0.000000e+00, ptr %288, align 8, !tbaa !11
  br label %351

289:                                              ; preds = %263
  store double 0.000000e+00, ptr %15, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #8
  store i32 0, ptr %22, align 4, !tbaa !13
  br label %290

290:                                              ; preds = %317, %289
  %291 = load i32, ptr %22, align 4, !tbaa !13
  %292 = getelementptr inbounds %class.ASF, ptr %24, i32 0, i32 8
  %293 = load i32, ptr %292, align 8, !tbaa !36
  %294 = icmp slt i32 %291, %293
  br i1 %294, label %296, label %295

295:                                              ; preds = %290
  store i32 23, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #8
  br label %320

296:                                              ; preds = %290
  %297 = getelementptr inbounds %class.ASF, ptr %24, i32 0, i32 4
  %298 = load i32, ptr %22, align 4, !tbaa !13
  %299 = sext i32 %298 to i64
  %300 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorI12particlepairSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %297, i64 noundef %299) #8
  %301 = getelementptr inbounds %struct.particlepair, ptr %300, i32 0, i32 1
  %302 = load double, ptr %301, align 8, !tbaa !32
  %303 = load double, ptr %14, align 8, !tbaa !11
  %304 = getelementptr inbounds %class.ASF, ptr %24, i32 0, i32 4
  %305 = load i32, ptr %22, align 4, !tbaa !13
  %306 = sext i32 %305 to i64
  %307 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorI12particlepairSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %304, i64 noundef %306) #8
  %308 = getelementptr inbounds %struct.particlepair, ptr %307, i32 0, i32 0
  %309 = load double, ptr %308, align 8, !tbaa !30
  %310 = fsub double %303, %309
  %311 = getelementptr inbounds %class.ASF, ptr %24, i32 0, i32 10
  %312 = load double, ptr %311, align 8, !tbaa !42
  %313 = fdiv double %310, %312
  %314 = call noundef double @_ZN10GaussTable8gaussianEd(ptr noundef nonnull align 8 dereferenceable(16000) %1, double noundef %313)
  %315 = load double, ptr %15, align 8, !tbaa !11
  %316 = call double @llvm.fmuladd.f64(double %302, double %314, double %315)
  store double %316, ptr %15, align 8, !tbaa !11
  br label %317

317:                                              ; preds = %296
  %318 = load i32, ptr %22, align 4, !tbaa !13
  %319 = add nsw i32 %318, 1
  store i32 %319, ptr %22, align 4, !tbaa !13
  br label %290, !llvm.loop !45

320:                                              ; preds = %295
  %321 = load double, ptr %15, align 8, !tbaa !11
  %322 = load double, ptr %14, align 8, !tbaa !11
  %323 = fmul double 0x3FE20DD75080C356, %322
  %324 = getelementptr inbounds %class.ASF, ptr %24, i32 0, i32 10
  %325 = load double, ptr %324, align 8, !tbaa !42
  %326 = fdiv double %323, %325
  %327 = fmul double %321, %326
  %328 = getelementptr inbounds %class.ASF, ptr %24, i32 0, i32 2
  %329 = getelementptr inbounds %struct.functiondata, ptr %328, i32 0, i32 1
  %330 = load i32, ptr %21, align 4, !tbaa !13
  %331 = sext i32 %330 to i64
  %332 = getelementptr inbounds [500 x double], ptr %329, i64 0, i64 %331
  store double %327, ptr %332, align 8, !tbaa !11
  %333 = getelementptr inbounds %class.ASF, ptr %24, i32 0, i32 2
  %334 = getelementptr inbounds %struct.functiondata, ptr %333, i32 0, i32 1
  %335 = load i32, ptr %21, align 4, !tbaa !13
  %336 = sext i32 %335 to i64
  %337 = getelementptr inbounds [500 x double], ptr %334, i64 0, i64 %336
  %338 = load double, ptr %337, align 8, !tbaa !11
  %339 = getelementptr inbounds %class.ASF, ptr %24, i32 0, i32 1
  %340 = getelementptr inbounds %struct.functiondata, ptr %339, i32 0, i32 1
  %341 = load i32, ptr %21, align 4, !tbaa !13
  %342 = sext i32 %341 to i64
  %343 = getelementptr inbounds [500 x double], ptr %340, i64 0, i64 %342
  %344 = load double, ptr %343, align 8, !tbaa !11
  %345 = fdiv double %338, %344
  %346 = getelementptr inbounds %class.ASF, ptr %24, i32 0, i32 0
  %347 = getelementptr inbounds %struct.functiondata, ptr %346, i32 0, i32 1
  %348 = load i32, ptr %21, align 4, !tbaa !13
  %349 = sext i32 %348 to i64
  %350 = getelementptr inbounds [500 x double], ptr %347, i64 0, i64 %349
  store double %345, ptr %350, align 8, !tbaa !11
  br label %351

351:                                              ; preds = %320, %283
  %352 = load i32, ptr %21, align 4, !tbaa !13
  %353 = add nsw i32 %352, 1
  store i32 %353, ptr %21, align 4, !tbaa !13
  br label %259, !llvm.loop !46

354:                                              ; preds = %262
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #8
  store i32 0, ptr %10, align 4
  br label %355

355:                                              ; preds = %354, %83
  call void @llvm.lifetime.end.p0(i64 16, ptr %8) #8
  %356 = load i32, ptr %10, align 4
  switch i32 %356, label %358 [
    i32 0, label %357
    i32 1, label %357
  ]

357:                                              ; preds = %355, %355
  ret void

358:                                              ; preds = %355
  unreachable
}

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

; Function Attrs: nounwind
declare double @sqrt(double noundef) #3

declare noundef double @_ZNK7fastjet9PseudoJet14plain_distanceERKS0_(ptr noundef nonnull align 8 dereferenceable(88), ptr noundef nonnull align 8 dereferenceable(88)) #4

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef double @_ZNK7fastjet9PseudoJet4perpEv(ptr noundef nonnull align 8 dereferenceable(88)) #5 align 2

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZSt4sortIN9__gnu_cxx17__normal_iteratorIP12particlepairSt6vectorIS2_SaIS2_EEEEPFbS2_S2_EEvT_SA_T0_(ptr, ptr, ptr noundef) #6

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_Z14ppsortfunction12particlepairS_(double, double, double, double) #5

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef double @_ZN10GaussTable3erfEd(ptr noundef nonnull align 8 dereferenceable(16000), double noundef) #6 align 2

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef double @_ZN10GaussTable8gaussianEd(ptr noundef nonnull align 8 dereferenceable(16000), double noundef) #5 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 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { 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 #4 = { "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 = { 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 = { 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 #7 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #8 = { 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 = !{!"bool", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"double", !7, i64 0}
!13 = !{!14, !14, i64 0}
!14 = !{!"int", !7, i64 0}
!15 = !{!16, !14, i64 24076}
!16 = !{!"_ZTS3ASF", !17, i64 0, !17, i64 8000, !17, i64 16000, !18, i64 24000, !22, i64 24024, !26, i64 24048, !14, i64 24072, !14, i64 24076, !14, i64 24080, !12, i64 24088, !12, i64 24096}
!17 = !{!"_ZTS12functiondata", !7, i64 0, !7, i64 4000}
!18 = !{!"_ZTSSt6vectorIN7fastjet9PseudoJetESaIS1_EE", !19, i64 0}
!19 = !{!"_ZTSSt12_Vector_baseIN7fastjet9PseudoJetESaIS1_EE", !20, i64 0}
!20 = !{!"_ZTSNSt12_Vector_baseIN7fastjet9PseudoJetESaIS1_EE12_Vector_implE", !21, i64 0}
!21 = !{!"_ZTSNSt12_Vector_baseIN7fastjet9PseudoJetESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!22 = !{!"_ZTSSt6vectorI12particlepairSaIS0_EE", !23, i64 0}
!23 = !{!"_ZTSSt12_Vector_baseI12particlepairSaIS0_EE", !24, i64 0}
!24 = !{!"_ZTSNSt12_Vector_baseI12particlepairSaIS0_EE12_Vector_implE", !25, i64 0}
!25 = !{!"_ZTSNSt12_Vector_baseI12particlepairSaIS0_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!26 = !{!"_ZTSSt6vectorI4peakSaIS0_EE", !27, i64 0}
!27 = !{!"_ZTSSt12_Vector_baseI4peakSaIS0_EE", !28, i64 0}
!28 = !{!"_ZTSNSt12_Vector_baseI4peakSaIS0_EE12_Vector_implE", !29, i64 0}
!29 = !{!"_ZTSNSt12_Vector_baseI4peakSaIS0_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!30 = !{!31, !12, i64 0}
!31 = !{!"_ZTS12particlepair", !12, i64 0, !12, i64 8}
!32 = !{!31, !12, i64 8}
!33 = distinct !{!33, !34}
!34 = !{!"llvm.loop.mustprogress"}
!35 = distinct !{!35, !34}
!36 = !{!16, !14, i64 24080}
!37 = !{!16, !12, i64 24088}
!38 = !{i8 0, i8 2}
!39 = !{}
!40 = distinct !{!40, !34}
!41 = distinct !{!41, !34}
!42 = !{!16, !12, i64 24096}
!43 = distinct !{!43, !34}
!44 = distinct !{!44, !34}
!45 = distinct !{!45, !34}
!46 = distinct !{!46, !34}


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

%class.GaussTable = type { [1000 x double], [1000 x double] }
%struct.particlepair = type { double, double }

; 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 nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #0

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN3ASF12ConstructASFE10GaussTablebd(ptr noundef nonnull align 8 dereferenceable(24104) %0, ptr noundef byval(%class.GaussTable) align 8 %1, i1 noundef zeroext %2, double noundef %3) local_unnamed_addr #1 align 2 {
  %5 = alloca %struct.particlepair, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %5) #8
  %6 = getelementptr inbounds i8, ptr %0, i64 24076
  %7 = load i32, ptr %6, align 4, !tbaa !5
  %8 = icmp sgt i32 %7, 0
  br i1 %8, label %.preheader74.lr.ph, label %._crit_edge77

.preheader74.lr.ph:                               ; preds = %4
  %9 = getelementptr inbounds i8, ptr %0, i64 24000
  %10 = getelementptr inbounds i8, ptr %5, i64 8
  %11 = getelementptr inbounds i8, ptr %0, i64 24024
  br label %.preheader74

.preheader74:                                     ; preds = %.preheader74.lr.ph, %._crit_edge
  %12 = phi i32 [ %7, %.preheader74.lr.ph ], [ %18, %._crit_edge ]
  %indvars.iv107 = phi i64 [ 0, %.preheader74.lr.ph ], [ %indvars.iv.next108, %._crit_edge ]
  %.not = icmp eq i64 %indvars.iv107, 0
  br i1 %.not, label %._crit_edge, label %.lr.ph

._crit_edge77:                                    ; preds = %._crit_edge, %4
  %13 = getelementptr inbounds i8, ptr %0, i64 24024
  %14 = call noundef i64 @_ZNKSt6vectorI12particlepairSaIS0_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %13) #8
  %15 = trunc i64 %14 to i32
  %16 = getelementptr inbounds i8, ptr %0, i64 24080
  store i32 %15, ptr %16, align 8, !tbaa !25
  %17 = icmp slt i32 %15, 2
  br i1 %17, label %.loopexit, label %33

._crit_edge.loopexit:                             ; preds = %.lr.ph
  %.pre = load i32, ptr %6, align 4, !tbaa !5
  br label %._crit_edge

._crit_edge:                                      ; preds = %._crit_edge.loopexit, %.preheader74
  %18 = phi i32 [ %.pre, %._crit_edge.loopexit ], [ %12, %.preheader74 ]
  %indvars.iv.next108 = add nuw nsw i64 %indvars.iv107, 1
  %19 = sext i32 %18 to i64
  %20 = icmp slt i64 %indvars.iv.next108, %19
  br i1 %20, label %.preheader74, label %._crit_edge77, !llvm.loop !26

.lr.ph:                                           ; preds = %.preheader74, %.lr.ph
  %indvars.iv = phi i64 [ %indvars.iv.next, %.lr.ph ], [ 0, %.preheader74 ]
  %21 = call noundef nonnull align 8 dereferenceable(88) ptr @_ZNSt6vectorIN7fastjet9PseudoJetESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %9, i64 noundef %indvars.iv107) #8
  %22 = call noundef nonnull align 8 dereferenceable(88) ptr @_ZNSt6vectorIN7fastjet9PseudoJetESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %9, i64 noundef %indvars.iv) #8
  %23 = call noundef double @_ZNK7fastjet9PseudoJet14plain_distanceERKS0_(ptr noundef nonnull align 8 dereferenceable(88) %21, ptr noundef nonnull align 8 dereferenceable(88) %22)
  %24 = call double @sqrt(double noundef %23) #8
  store double %24, ptr %5, align 8, !tbaa !28
  %25 = call noundef nonnull align 8 dereferenceable(88) ptr @_ZNSt6vectorIN7fastjet9PseudoJetESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %9, i64 noundef %indvars.iv107) #8
  %26 = call noundef double @_ZNK7fastjet9PseudoJet4perpEv(ptr noundef nonnull align 8 dereferenceable(88) %25)
  %27 = call noundef nonnull align 8 dereferenceable(88) ptr @_ZNSt6vectorIN7fastjet9PseudoJetESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %9, i64 noundef %indvars.iv) #8
  %28 = call noundef double @_ZNK7fastjet9PseudoJet4perpEv(ptr noundef nonnull align 8 dereferenceable(88) %27)
  %29 = fmul double %26, %28
  %30 = load double, ptr %5, align 8, !tbaa !28
  %31 = fmul double %29, %30
  %32 = fmul double %30, %31
  store double %32, ptr %10, align 8, !tbaa !30
  call void @_ZNSt6vectorI12particlepairSaIS0_EE9push_backERKS0_(ptr noundef nonnull align 8 dereferenceable(24) %11, ptr noundef nonnull align 8 dereferenceable(16) %5)
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %indvars.iv107
  br i1 %exitcond.not, label %._crit_edge.loopexit, label %.lr.ph, !llvm.loop !31

33:                                               ; preds = %._crit_edge77
  %34 = call ptr @_ZNSt6vectorI12particlepairSaIS0_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %13) #8
  %35 = call ptr @_ZNSt6vectorI12particlepairSaIS0_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %13) #8
  call void @_ZSt4sortIN9__gnu_cxx17__normal_iteratorIP12particlepairSt6vectorIS2_SaIS2_EEEEPFbS2_S2_EEvT_SA_T0_(ptr %34, ptr %35, ptr noundef nonnull @_Z14ppsortfunction12particlepairS_)
  %36 = fcmp oeq double %3, 0.000000e+00
  br i1 %36, label %37, label %43

37:                                               ; preds = %33
  %38 = load i32, ptr %16, align 8, !tbaa !25
  %39 = add nsw i32 %38, -1
  %40 = sext i32 %39 to i64
  %41 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorI12particlepairSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %13, i64 noundef %40) #8
  %42 = load double, ptr %41, align 8, !tbaa !28
  br label %43

43:                                               ; preds = %33, %37
  %.sink = phi double [ %42, %37 ], [ %3, %33 ]
  %44 = getelementptr inbounds i8, ptr %0, i64 24088
  store double %.sink, ptr %44, align 8
  %45 = getelementptr inbounds i8, ptr %0, i64 8000
  store double 0.000000e+00, ptr %45, align 8, !tbaa !32
  %46 = getelementptr inbounds i8, ptr %0, i64 12000
  store double 0.000000e+00, ptr %46, align 8, !tbaa !32
  br i1 %2, label %69, label %.preheader145

.preheader145:                                    ; preds = %43, %._crit_edge83
  %47 = phi double [ %.067.lcssa, %._crit_edge83 ], [ 0.000000e+00, %43 ]
  %indvars.iv115 = phi i64 [ %indvars.iv.next116, %._crit_edge83 ], [ 1, %43 ]
  %.06688 = phi i32 [ %.1.lcssa, %._crit_edge83 ], [ 0, %43 ]
  %48 = trunc nuw nsw i64 %indvars.iv115 to i32
  %49 = uitofp nneg i32 %48 to double
  %50 = load double, ptr %44, align 8, !tbaa !33
  %51 = fmul double %50, %49
  %52 = fdiv double %51, 4.990000e+02
  %53 = getelementptr inbounds [500 x double], ptr %45, i64 0, i64 %indvars.iv115
  store double %52, ptr %53, align 8, !tbaa !32
  %54 = load i32, ptr %16, align 8, !tbaa !25
  %55 = icmp slt i32 %.06688, %54
  br i1 %55, label %.lr.ph82.preheader, label %._crit_edge83

.lr.ph82.preheader:                               ; preds = %.preheader145
  %56 = sext i32 %.06688 to i64
  br label %.lr.ph82

.lr.ph82:                                         ; preds = %.lr.ph82.preheader, %60
  %indvars.iv110 = phi i64 [ %56, %.lr.ph82.preheader ], [ %indvars.iv.next111, %60 ]
  %.06778 = phi double [ %47, %.lr.ph82.preheader ], [ %64, %60 ]
  %57 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorI12particlepairSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %13, i64 noundef %indvars.iv110) #8
  %58 = load double, ptr %57, align 8, !tbaa !28
  %59 = fcmp ugt double %58, %52
  br i1 %59, label %._crit_edge83.loopexit, label %60

60:                                               ; preds = %.lr.ph82
  %61 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorI12particlepairSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %13, i64 noundef %indvars.iv110) #8
  %62 = getelementptr inbounds i8, ptr %61, i64 8
  %63 = load double, ptr %62, align 8, !tbaa !30
  %64 = fadd double %.06778, %63
  %indvars.iv.next111 = add nsw i64 %indvars.iv110, 1
  %65 = load i32, ptr %16, align 8, !tbaa !25
  %66 = sext i32 %65 to i64
  %67 = icmp slt i64 %indvars.iv.next111, %66
  br i1 %67, label %.lr.ph82, label %._crit_edge83.loopexit, !llvm.loop !34

._crit_edge83.loopexit:                           ; preds = %.lr.ph82, %60
  %.067.lcssa.ph = phi double [ %64, %60 ], [ %.06778, %.lr.ph82 ]
  %.1.lcssa.ph.in = phi i64 [ %indvars.iv.next111, %60 ], [ %indvars.iv110, %.lr.ph82 ]
  %.1.lcssa.ph = trunc i64 %.1.lcssa.ph.in to i32
  br label %._crit_edge83

._crit_edge83:                                    ; preds = %._crit_edge83.loopexit, %.preheader145
  %.067.lcssa = phi double [ %47, %.preheader145 ], [ %.067.lcssa.ph, %._crit_edge83.loopexit ]
  %.1.lcssa = phi i32 [ %.06688, %.preheader145 ], [ %.1.lcssa.ph, %._crit_edge83.loopexit ]
  %68 = getelementptr inbounds [500 x double], ptr %46, i64 0, i64 %indvars.iv115
  store double %.067.lcssa, ptr %68, align 8, !tbaa !32
  %indvars.iv.next116 = add nuw nsw i64 %indvars.iv115, 1
  %exitcond118.not = icmp eq i64 %indvars.iv.next116, 500
  br i1 %exitcond118.not, label %.loopexit72, label %.preheader145, !llvm.loop !35

69:                                               ; preds = %43
  %70 = getelementptr inbounds i8, ptr %0, i64 20000
  store double 0.000000e+00, ptr %70, align 8, !tbaa !32
  %71 = getelementptr inbounds i8, ptr %0, i64 24096
  %72 = load i32, ptr %16, align 8, !tbaa !25
  %73 = icmp sgt i32 %72, 0
  br i1 %73, label %.split, label %.split.us

.split.us:                                        ; preds = %69, %.split.us.1
  %indvars.iv119 = phi i64 [ %indvars.iv.next120.1, %.split.us.1 ], [ 1, %69 ]
  %74 = trunc nuw nsw i64 %indvars.iv119 to i32
  %75 = uitofp nneg i32 %74 to double
  %76 = load double, ptr %44, align 8, !tbaa !33
  %77 = fmul double %76, %75
  %78 = fdiv double %77, 4.990000e+02
  %79 = getelementptr inbounds [500 x double], ptr %45, i64 0, i64 %indvars.iv119
  store double %78, ptr %79, align 8, !tbaa !32
  %80 = getelementptr inbounds [500 x double], ptr %46, i64 0, i64 %indvars.iv119
  store double 0.000000e+00, ptr %80, align 8, !tbaa !32
  %indvars.iv.next120 = add nuw nsw i64 %indvars.iv119, 1
  %exitcond122.not = icmp eq i64 %indvars.iv.next120, 500
  br i1 %exitcond122.not, label %.loopexit72, label %.split.us.1, !llvm.loop !36

.split.us.1:                                      ; preds = %.split.us
  %81 = trunc nuw nsw i64 %indvars.iv.next120 to i32
  %82 = uitofp nneg i32 %81 to double
  %83 = load double, ptr %44, align 8, !tbaa !33
  %84 = fmul double %83, %82
  %85 = fdiv double %84, 4.990000e+02
  %86 = getelementptr inbounds [500 x double], ptr %45, i64 0, i64 %indvars.iv.next120
  store double %85, ptr %86, align 8, !tbaa !32
  %87 = getelementptr inbounds [500 x double], ptr %46, i64 0, i64 %indvars.iv.next120
  store double 0.000000e+00, ptr %87, align 8, !tbaa !32
  %indvars.iv.next120.1 = add nuw nsw i64 %indvars.iv119, 2
  br label %.split.us

.split:                                           ; preds = %69, %._crit_edge94
  %88 = phi i32 [ %96, %._crit_edge94 ], [ %72, %69 ]
  %indvars.iv126 = phi i64 [ %indvars.iv.next127, %._crit_edge94 ], [ 1, %69 ]
  %89 = trunc nuw nsw i64 %indvars.iv126 to i32
  %90 = uitofp nneg i32 %89 to double
  %91 = load double, ptr %44, align 8, !tbaa !33
  %92 = fmul double %91, %90
  %93 = fdiv double %92, 4.990000e+02
  %94 = getelementptr inbounds [500 x double], ptr %45, i64 0, i64 %indvars.iv126
  store double %93, ptr %94, align 8, !tbaa !32
  %95 = icmp sgt i32 %88, 0
  br i1 %95, label %.lr.ph93, label %._crit_edge94

._crit_edge94:                                    ; preds = %.lr.ph93, %.split
  %96 = phi i32 [ %88, %.split ], [ %110, %.lr.ph93 ]
  %.168.lcssa = phi double [ 0.000000e+00, %.split ], [ %109, %.lr.ph93 ]
  %97 = getelementptr inbounds [500 x double], ptr %46, i64 0, i64 %indvars.iv126
  store double %.168.lcssa, ptr %97, align 8, !tbaa !32
  %indvars.iv.next127 = add nuw nsw i64 %indvars.iv126, 1
  %exitcond129.not = icmp eq i64 %indvars.iv.next127, 500
  br i1 %exitcond129.not, label %.loopexit72, label %.split, !llvm.loop !37

.lr.ph93:                                         ; preds = %.split, %.lr.ph93
  %indvars.iv123 = phi i64 [ %indvars.iv.next124, %.lr.ph93 ], [ 0, %.split ]
  %.16890 = phi double [ %109, %.lr.ph93 ], [ 0.000000e+00, %.split ]
  %98 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorI12particlepairSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %13, i64 noundef %indvars.iv123) #8
  %99 = getelementptr inbounds i8, ptr %98, i64 8
  %100 = load double, ptr %99, align 8, !tbaa !30
  %101 = fmul double %100, 5.000000e-01
  %102 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorI12particlepairSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %13, i64 noundef %indvars.iv123) #8
  %103 = load double, ptr %102, align 8, !tbaa !28
  %104 = fsub double %93, %103
  %105 = load double, ptr %71, align 8, !tbaa !39
  %106 = fdiv double %104, %105
  %107 = call noundef double @_ZN10GaussTable3erfEd(ptr noundef nonnull align 8 dereferenceable(16000) %1, double noundef %106)
  %108 = fadd double %107, 1.000000e+00
  %109 = call double @llvm.fmuladd.f64(double %101, double %108, double %.16890)
  %indvars.iv.next124 = add nuw nsw i64 %indvars.iv123, 1
  %110 = load i32, ptr %16, align 8, !tbaa !25
  %111 = sext i32 %110 to i64
  %112 = icmp slt i64 %indvars.iv.next124, %111
  br i1 %112, label %.lr.ph93, label %._crit_edge94, !llvm.loop !40

.loopexit72:                                      ; preds = %._crit_edge83, %.split.us, %._crit_edge94
  %113 = getelementptr inbounds i8, ptr %0, i64 8000
  %114 = getelementptr inbounds i8, ptr %0, i64 12000
  %115 = getelementptr inbounds i8, ptr %0, i64 24096
  %116 = getelementptr inbounds i8, ptr %0, i64 20000
  %117 = getelementptr inbounds i8, ptr %0, i64 4000
  br label %118

118:                                              ; preds = %.loopexit72, %147
  %indvars.iv133 = phi i64 [ 0, %.loopexit72 ], [ %indvars.iv.next134, %147 ]
  %119 = getelementptr inbounds [500 x double], ptr %113, i64 0, i64 %indvars.iv133
  %120 = load double, ptr %119, align 8, !tbaa !32
  %121 = getelementptr inbounds [500 x double], ptr %0, i64 0, i64 %indvars.iv133
  store double %120, ptr %121, align 8, !tbaa !32
  %122 = getelementptr inbounds [500 x double], ptr %114, i64 0, i64 %indvars.iv133
  %123 = load double, ptr %122, align 8, !tbaa !32
  %124 = fcmp oeq double %123, 0.000000e+00
  br i1 %124, label %147, label %.preheader

.preheader:                                       ; preds = %118
  %125 = load i32, ptr %16, align 8, !tbaa !25
  %126 = icmp sgt i32 %125, 0
  br i1 %126, label %.lr.ph99, label %._crit_edge100

._crit_edge100.loopexit:                          ; preds = %.lr.ph99
  %.pre137 = load double, ptr %122, align 8, !tbaa !32
  br label %._crit_edge100

._crit_edge100:                                   ; preds = %._crit_edge100.loopexit, %.preheader
  %127 = phi double [ %123, %.preheader ], [ %.pre137, %._crit_edge100.loopexit ]
  %.2.lcssa = phi double [ 0.000000e+00, %.preheader ], [ %143, %._crit_edge100.loopexit ]
  %128 = fmul double %120, 0x3FE20DD75080C356
  %129 = load double, ptr %115, align 8, !tbaa !39
  %130 = fdiv double %128, %129
  %131 = fmul double %.2.lcssa, %130
  %132 = getelementptr inbounds [500 x double], ptr %116, i64 0, i64 %indvars.iv133
  store double %131, ptr %132, align 8, !tbaa !32
  %133 = fdiv double %131, %127
  br label %147

.lr.ph99:                                         ; preds = %.preheader, %.lr.ph99
  %indvars.iv130 = phi i64 [ %indvars.iv.next131, %.lr.ph99 ], [ 0, %.preheader ]
  %.297 = phi double [ %143, %.lr.ph99 ], [ 0.000000e+00, %.preheader ]
  %134 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorI12particlepairSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %13, i64 noundef %indvars.iv130) #8
  %135 = getelementptr inbounds i8, ptr %134, i64 8
  %136 = load double, ptr %135, align 8, !tbaa !30
  %137 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorI12particlepairSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %13, i64 noundef %indvars.iv130) #8
  %138 = load double, ptr %137, align 8, !tbaa !28
  %139 = fsub double %120, %138
  %140 = load double, ptr %115, align 8, !tbaa !39
  %141 = fdiv double %139, %140
  %142 = call noundef double @_ZN10GaussTable8gaussianEd(ptr noundef nonnull align 8 dereferenceable(16000) %1, double noundef %141)
  %143 = call double @llvm.fmuladd.f64(double %136, double %142, double %.297)
  %indvars.iv.next131 = add nuw nsw i64 %indvars.iv130, 1
  %144 = load i32, ptr %16, align 8, !tbaa !25
  %145 = sext i32 %144 to i64
  %146 = icmp slt i64 %indvars.iv.next131, %145
  br i1 %146, label %.lr.ph99, label %._crit_edge100.loopexit, !llvm.loop !41

147:                                              ; preds = %118, %._crit_edge100
  %.sink142 = phi double [ %133, %._crit_edge100 ], [ 0.000000e+00, %118 ]
  %148 = getelementptr inbounds [500 x double], ptr %117, i64 0, i64 %indvars.iv133
  store double %.sink142, ptr %148, align 8, !tbaa !32
  %indvars.iv.next134 = add nuw nsw i64 %indvars.iv133, 1
  %exitcond136.not = icmp eq i64 %indvars.iv.next134, 500
  br i1 %exitcond136.not, label %.loopexit, label %118, !llvm.loop !42

.loopexit:                                        ; preds = %147, %._crit_edge77
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %5) #8
  ret void
}

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

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

declare noundef double @_ZNK7fastjet9PseudoJet14plain_distanceERKS0_(ptr noundef nonnull align 8 dereferenceable(88), ptr noundef nonnull align 8 dereferenceable(88)) local_unnamed_addr #4

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef double @_ZNK7fastjet9PseudoJet4perpEv(ptr noundef nonnull align 8 dereferenceable(88)) local_unnamed_addr #5 align 2

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZSt4sortIN9__gnu_cxx17__normal_iteratorIP12particlepairSt6vectorIS2_SaIS2_EEEEPFbS2_S2_EEvT_SA_T0_(ptr, ptr, ptr noundef) local_unnamed_addr #6

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_Z14ppsortfunction12particlepairS_(double, double, double, double) #5

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef double @_ZN10GaussTable3erfEd(ptr noundef nonnull align 8 dereferenceable(16000), double 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) #7

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef double @_ZN10GaussTable8gaussianEd(ptr noundef nonnull align 8 dereferenceable(16000), double noundef) local_unnamed_addr #5 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 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { mustprogress nofree nounwind willreturn memory(write) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { "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 = { 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 = { 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 #7 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #8 = { 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, !23, i64 24076}
!6 = !{!"_ZTS3ASF", !7, i64 0, !7, i64 8000, !7, i64 16000, !10, i64 24000, !15, i64 24024, !19, i64 24048, !23, i64 24072, !23, i64 24076, !23, i64 24080, !24, i64 24088, !24, i64 24096}
!7 = !{!"_ZTS12functiondata", !8, i64 0, !8, i64 4000}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!"_ZTSSt6vectorIN7fastjet9PseudoJetESaIS1_EE", !11, i64 0}
!11 = !{!"_ZTSSt12_Vector_baseIN7fastjet9PseudoJetESaIS1_EE", !12, i64 0}
!12 = !{!"_ZTSNSt12_Vector_baseIN7fastjet9PseudoJetESaIS1_EE12_Vector_implE", !13, i64 0}
!13 = !{!"_ZTSNSt12_Vector_baseIN7fastjet9PseudoJetESaIS1_EE17_Vector_impl_dataE", !14, i64 0, !14, i64 8, !14, i64 16}
!14 = !{!"any pointer", !8, i64 0}
!15 = !{!"_ZTSSt6vectorI12particlepairSaIS0_EE", !16, i64 0}
!16 = !{!"_ZTSSt12_Vector_baseI12particlepairSaIS0_EE", !17, i64 0}
!17 = !{!"_ZTSNSt12_Vector_baseI12particlepairSaIS0_EE12_Vector_implE", !18, i64 0}
!18 = !{!"_ZTSNSt12_Vector_baseI12particlepairSaIS0_EE17_Vector_impl_dataE", !14, i64 0, !14, i64 8, !14, i64 16}
!19 = !{!"_ZTSSt6vectorI4peakSaIS0_EE", !20, i64 0}
!20 = !{!"_ZTSSt12_Vector_baseI4peakSaIS0_EE", !21, i64 0}
!21 = !{!"_ZTSNSt12_Vector_baseI4peakSaIS0_EE12_Vector_implE", !22, i64 0}
!22 = !{!"_ZTSNSt12_Vector_baseI4peakSaIS0_EE17_Vector_impl_dataE", !14, i64 0, !14, i64 8, !14, i64 16}
!23 = !{!"int", !8, i64 0}
!24 = !{!"double", !8, i64 0}
!25 = !{!6, !23, i64 24080}
!26 = distinct !{!26, !27}
!27 = !{!"llvm.loop.mustprogress"}
!28 = !{!29, !24, i64 0}
!29 = !{!"_ZTS12particlepair", !24, i64 0, !24, i64 8}
!30 = !{!29, !24, i64 8}
!31 = distinct !{!31, !27}
!32 = !{!24, !24, i64 0}
!33 = !{!6, !24, i64 24088}
!34 = distinct !{!34, !27}
!35 = distinct !{!35, !27}
!36 = distinct !{!36, !27}
!37 = distinct !{!37, !27, !38}
!38 = !{!"llvm.loop.unswitch.partial.disable"}
!39 = !{!6, !24, i64 24096}
!40 = distinct !{!40, !27}
!41 = distinct !{!41, !27}
!42 = distinct !{!42, !27}


; Effective O3 passes: BDCEPass,CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopInstSimplifyPass,LoopRotatePass,LoopSimplifyCFGPass,LoopSimplifyPass,LoopUnrollPass,MergedLoadStoreMotionPass,ReassociatePass,SROAPass,SimpleLoopUnswitchPass,SimplifyCFGPass