; LLVM IR from QUILL-PIC/Quill :: src (mc)

; 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.spatial_region = type { i32, i32, i32, double, double, double, double, i32, i32, i32, double, ptr, i32, i32, i32, ptr, i32, i32, i32, i32, i32, i32, i32, %"class.std::unique_ptr", %"class.std::function", double, double, double, i32, i32, i32, ptr, double, double, double, double, ptr, double, double, double, ptr, %"class.std::__cxx11::basic_string", ptr, ptr, ptr, ptr, %class.field3d, %class.field3d.26, %class.field3d.51, %class.field3d.76, %class.field3d.101, %"class.std::vector", %"class.std::vector.129" }
%"class.std::unique_ptr" = type { %"struct.std::__uniq_ptr_data" }
%"struct.std::__uniq_ptr_data" = type { %"class.std::__uniq_ptr_impl" }
%"class.std::__uniq_ptr_impl" = type { %"class.std::tuple" }
%"class.std::tuple" = type { %"struct.std::_Tuple_impl" }
%"struct.std::_Tuple_impl" = type { %"struct.std::_Head_base.1" }
%"struct.std::_Head_base.1" = type { ptr }
%"class.std::function" = type { %"class.std::_Function_base", ptr }
%"class.std::_Function_base" = type { %"union.std::_Any_data", ptr }
%"union.std::_Any_data" = type { %"union.std::_Nocopy_types" }
%"union.std::_Nocopy_types" = type { { i64, i64 } }
%"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.field3d = type { i32, i32, i32, %"class.std::unique_ptr.2", %"class.std::unique_ptr.10", %"class.std::unique_ptr.18" }
%"class.std::unique_ptr.2" = type { %"struct.std::__uniq_ptr_data.3" }
%"struct.std::__uniq_ptr_data.3" = type { %"class.std::__uniq_ptr_impl.4" }
%"class.std::__uniq_ptr_impl.4" = type { %"class.std::tuple.5" }
%"class.std::tuple.5" = type { %"struct.std::_Tuple_impl.6" }
%"struct.std::_Tuple_impl.6" = type { %"struct.std::_Head_base.9" }
%"struct.std::_Head_base.9" = type { ptr }
%"class.std::unique_ptr.10" = type { %"struct.std::__uniq_ptr_data.11" }
%"struct.std::__uniq_ptr_data.11" = type { %"class.std::__uniq_ptr_impl.12" }
%"class.std::__uniq_ptr_impl.12" = type { %"class.std::tuple.13" }
%"class.std::tuple.13" = type { %"struct.std::_Tuple_impl.14" }
%"struct.std::_Tuple_impl.14" = type { %"struct.std::_Head_base.17" }
%"struct.std::_Head_base.17" = type { ptr }
%"class.std::unique_ptr.18" = type { %"struct.std::__uniq_ptr_data.19" }
%"struct.std::__uniq_ptr_data.19" = type { %"class.std::__uniq_ptr_impl.20" }
%"class.std::__uniq_ptr_impl.20" = type { %"class.std::tuple.21" }
%"class.std::tuple.21" = type { %"struct.std::_Tuple_impl.22" }
%"struct.std::_Tuple_impl.22" = type { %"struct.std::_Head_base.25" }
%"struct.std::_Head_base.25" = type { ptr }
%class.field3d.26 = type { i32, i32, i32, %"class.std::unique_ptr.27", %"class.std::unique_ptr.35", %"class.std::unique_ptr.43" }
%"class.std::unique_ptr.27" = type { %"struct.std::__uniq_ptr_data.28" }
%"struct.std::__uniq_ptr_data.28" = type { %"class.std::__uniq_ptr_impl.29" }
%"class.std::__uniq_ptr_impl.29" = type { %"class.std::tuple.30" }
%"class.std::tuple.30" = type { %"struct.std::_Tuple_impl.31" }
%"struct.std::_Tuple_impl.31" = type { %"struct.std::_Head_base.34" }
%"struct.std::_Head_base.34" = type { ptr }
%"class.std::unique_ptr.35" = type { %"struct.std::__uniq_ptr_data.36" }
%"struct.std::__uniq_ptr_data.36" = type { %"class.std::__uniq_ptr_impl.37" }
%"class.std::__uniq_ptr_impl.37" = type { %"class.std::tuple.38" }
%"class.std::tuple.38" = type { %"struct.std::_Tuple_impl.39" }
%"struct.std::_Tuple_impl.39" = type { %"struct.std::_Head_base.42" }
%"struct.std::_Head_base.42" = type { ptr }
%"class.std::unique_ptr.43" = type { %"struct.std::__uniq_ptr_data.44" }
%"struct.std::__uniq_ptr_data.44" = type { %"class.std::__uniq_ptr_impl.45" }
%"class.std::__uniq_ptr_impl.45" = type { %"class.std::tuple.46" }
%"class.std::tuple.46" = type { %"struct.std::_Tuple_impl.47" }
%"struct.std::_Tuple_impl.47" = type { %"struct.std::_Head_base.50" }
%"struct.std::_Head_base.50" = type { ptr }
%class.field3d.51 = type { i32, i32, i32, %"class.std::unique_ptr.52", %"class.std::unique_ptr.60", %"class.std::unique_ptr.68" }
%"class.std::unique_ptr.52" = type { %"struct.std::__uniq_ptr_data.53" }
%"struct.std::__uniq_ptr_data.53" = type { %"class.std::__uniq_ptr_impl.54" }
%"class.std::__uniq_ptr_impl.54" = type { %"class.std::tuple.55" }
%"class.std::tuple.55" = type { %"struct.std::_Tuple_impl.56" }
%"struct.std::_Tuple_impl.56" = type { %"struct.std::_Head_base.59" }
%"struct.std::_Head_base.59" = type { ptr }
%"class.std::unique_ptr.60" = type { %"struct.std::__uniq_ptr_data.61" }
%"struct.std::__uniq_ptr_data.61" = type { %"class.std::__uniq_ptr_impl.62" }
%"class.std::__uniq_ptr_impl.62" = type { %"class.std::tuple.63" }
%"class.std::tuple.63" = type { %"struct.std::_Tuple_impl.64" }
%"struct.std::_Tuple_impl.64" = type { %"struct.std::_Head_base.67" }
%"struct.std::_Head_base.67" = type { ptr }
%"class.std::unique_ptr.68" = type { %"struct.std::__uniq_ptr_data.69" }
%"struct.std::__uniq_ptr_data.69" = type { %"class.std::__uniq_ptr_impl.70" }
%"class.std::__uniq_ptr_impl.70" = type { %"class.std::tuple.71" }
%"class.std::tuple.71" = type { %"struct.std::_Tuple_impl.72" }
%"struct.std::_Tuple_impl.72" = type { %"struct.std::_Head_base.75" }
%"struct.std::_Head_base.75" = type { ptr }
%class.field3d.76 = type { i32, i32, i32, %"class.std::unique_ptr.77", %"class.std::unique_ptr.85", %"class.std::unique_ptr.93" }
%"class.std::unique_ptr.77" = type { %"struct.std::__uniq_ptr_data.78" }
%"struct.std::__uniq_ptr_data.78" = type { %"class.std::__uniq_ptr_impl.79" }
%"class.std::__uniq_ptr_impl.79" = type { %"class.std::tuple.80" }
%"class.std::tuple.80" = type { %"struct.std::_Tuple_impl.81" }
%"struct.std::_Tuple_impl.81" = type { %"struct.std::_Head_base.84" }
%"struct.std::_Head_base.84" = type { ptr }
%"class.std::unique_ptr.85" = type { %"struct.std::__uniq_ptr_data.86" }
%"struct.std::__uniq_ptr_data.86" = type { %"class.std::__uniq_ptr_impl.87" }
%"class.std::__uniq_ptr_impl.87" = type { %"class.std::tuple.88" }
%"class.std::tuple.88" = type { %"struct.std::_Tuple_impl.89" }
%"struct.std::_Tuple_impl.89" = type { %"struct.std::_Head_base.92" }
%"struct.std::_Head_base.92" = type { ptr }
%"class.std::unique_ptr.93" = type { %"struct.std::__uniq_ptr_data.94" }
%"struct.std::__uniq_ptr_data.94" = type { %"class.std::__uniq_ptr_impl.95" }
%"class.std::__uniq_ptr_impl.95" = type { %"class.std::tuple.96" }
%"class.std::tuple.96" = type { %"struct.std::_Tuple_impl.97" }
%"struct.std::_Tuple_impl.97" = type { %"struct.std::_Head_base.100" }
%"struct.std::_Head_base.100" = type { ptr }
%class.field3d.101 = type { i32, i32, i32, %"class.std::unique_ptr.102", %"class.std::unique_ptr.110", %"class.std::unique_ptr.118" }
%"class.std::unique_ptr.102" = type { %"struct.std::__uniq_ptr_data.103" }
%"struct.std::__uniq_ptr_data.103" = type { %"class.std::__uniq_ptr_impl.104" }
%"class.std::__uniq_ptr_impl.104" = type { %"class.std::tuple.105" }
%"class.std::tuple.105" = type { %"struct.std::_Tuple_impl.106" }
%"struct.std::_Tuple_impl.106" = type { %"struct.std::_Head_base.109" }
%"struct.std::_Head_base.109" = type { ptr }
%"class.std::unique_ptr.110" = type { %"struct.std::__uniq_ptr_data.111" }
%"struct.std::__uniq_ptr_data.111" = type { %"class.std::__uniq_ptr_impl.112" }
%"class.std::__uniq_ptr_impl.112" = type { %"class.std::tuple.113" }
%"class.std::tuple.113" = type { %"struct.std::_Tuple_impl.114" }
%"struct.std::_Tuple_impl.114" = type { %"struct.std::_Head_base.117" }
%"struct.std::_Head_base.117" = type { ptr }
%"class.std::unique_ptr.118" = type { %"struct.std::__uniq_ptr_data.119" }
%"struct.std::__uniq_ptr_data.119" = type { %"class.std::__uniq_ptr_impl.120" }
%"class.std::__uniq_ptr_impl.120" = type { %"class.std::tuple.121" }
%"class.std::tuple.121" = type { %"struct.std::_Tuple_impl.122" }
%"struct.std::_Tuple_impl.122" = type { %"struct.std::_Head_base.125" }
%"struct.std::_Head_base.125" = type { ptr }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<field3d<double>, std::allocator<field3d<double>>>::_Vector_impl" }
%"struct.std::_Vector_base<field3d<double>, std::allocator<field3d<double>>>::_Vector_impl" = type { %"struct.std::_Vector_base<field3d<double>, std::allocator<field3d<double>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<field3d<double>, std::allocator<field3d<double>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.129" = type { %"struct.std::_Vector_base.130" }
%"struct.std::_Vector_base.130" = type { %"struct.std::_Vector_base<spatial_region::deleted_particle, std::allocator<spatial_region::deleted_particle>>::_Vector_impl" }
%"struct.std::_Vector_base<spatial_region::deleted_particle, std::allocator<spatial_region::deleted_particle>>::_Vector_impl" = type { %"struct.std::_Vector_base<spatial_region::deleted_particle, std::allocator<spatial_region::deleted_particle>>::_Vector_impl_data" }
%"struct.std::_Vector_base<spatial_region::deleted_particle, std::allocator<spatial_region::deleted_particle>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%struct.cellp = type { %class.plist }
%class.plist = type { ptr, ptr }
%struct.particle = type { double, double, double, double, double, double, double, double, double, double, i32, ptr, ptr }

@.str.7 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [3 x i8], align 1

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef double @_ZN14spatial_region8get_randEv(ptr noundef nonnull align 8 dereferenceable(608)) #1 align 2

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5cellpEixEi(ptr noundef nonnull align 8 dereferenceable(40), i32 noundef) #3 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef double @_ZN14spatial_region4_ppdEdd(ptr noundef nonnull align 8 dereferenceable(608), double noundef, double noundef) #4 align 2

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN14spatial_region8pmergingEPdNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(608) %0, ptr noundef %1, ptr noundef %2) #4 align 2 {
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %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 i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %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
  %23 = alloca i32, align 4
  %24 = alloca i32, align 4
  %25 = alloca i32, align 4
  %26 = alloca ptr, align 8
  %27 = alloca i32, align 4
  %28 = alloca i32, align 4
  %29 = alloca i32, align 4
  %30 = alloca i32, align 4
  %31 = alloca i32, align 4
  %32 = alloca i32, align 4
  %33 = alloca i32, align 4
  %34 = alloca i32, align 4
  %35 = alloca i32, align 4
  %36 = alloca i32, align 4
  %37 = alloca i32, align 4
  %38 = alloca i32, align 4
  %39 = alloca i32, align 4
  %40 = alloca i32, align 4
  %41 = alloca i32, align 4
  %42 = alloca i32, align 4
  %43 = alloca i32, align 4
  %44 = alloca i32, align 4
  %45 = alloca i32, align 4
  store ptr %0, ptr %4, align 8, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !5
  store ptr %2, ptr %6, align 8, !tbaa !5
  %46 = load ptr, ptr %4, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #9
  %47 = getelementptr inbounds %class.spatial_region, ptr %46, i32 0, i32 14
  %48 = load i32, ptr %47, align 8, !tbaa !9
  %49 = add nsw i32 3, %48
  %50 = sext i32 %49 to i64
  %51 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %50, i64 8)
  %52 = extractvalue { i64, i1 } %51, 1
  %53 = extractvalue { i64, i1 } %51, 0
  %54 = select i1 %52, i64 -1, i64 %53
  %55 = call noalias noundef nonnull ptr @_Znam(i64 noundef %54) #10
  store ptr %55, ptr %9, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #9
  %56 = getelementptr inbounds %class.spatial_region, ptr %46, i32 0, i32 14
  %57 = load i32, ptr %56, align 8, !tbaa !9
  %58 = add nsw i32 3, %57
  %59 = sext i32 %58 to i64
  %60 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %59, i64 8)
  %61 = extractvalue { i64, i1 } %60, 1
  %62 = extractvalue { i64, i1 } %60, 0
  %63 = select i1 %61, i64 -1, i64 %62
  %64 = call noalias noundef nonnull ptr @_Znam(i64 noundef %63) #10
  store ptr %64, ptr %10, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #9
  store i32 0, ptr %11, align 4, !tbaa !127
  br label %65

65:                                               ; preds = %81, %3
  %66 = load i32, ptr %11, align 4, !tbaa !127
  %67 = getelementptr inbounds %class.spatial_region, ptr %46, i32 0, i32 14
  %68 = load i32, ptr %67, align 8, !tbaa !9
  %69 = add nsw i32 3, %68
  %70 = icmp slt i32 %66, %69
  br i1 %70, label %72, label %71

71:                                               ; preds = %65
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #9
  br label %84

72:                                               ; preds = %65
  %73 = load ptr, ptr %9, align 8, !tbaa !5
  %74 = load i32, ptr %11, align 4, !tbaa !127
  %75 = sext i32 %74 to i64
  %76 = getelementptr inbounds double, ptr %73, i64 %75
  store double 0.000000e+00, ptr %76, align 8, !tbaa !128
  %77 = load ptr, ptr %10, align 8, !tbaa !5
  %78 = load i32, ptr %11, align 4, !tbaa !127
  %79 = sext i32 %78 to i64
  %80 = getelementptr inbounds double, ptr %77, i64 %79
  store double 0.000000e+00, ptr %80, align 8, !tbaa !128
  br label %81

81:                                               ; preds = %72
  %82 = load i32, ptr %11, align 4, !tbaa !127
  %83 = add nsw i32 %82, 1
  store i32 %83, ptr %11, align 4, !tbaa !127
  br label %65, !llvm.loop !129

84:                                               ; preds = %71
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #9
  store i32 0, ptr %12, align 4, !tbaa !127
  br label %85

85:                                               ; preds = %211, %84
  %86 = load i32, ptr %12, align 4, !tbaa !127
  %87 = getelementptr inbounds %class.spatial_region, ptr %46, i32 0, i32 0
  %88 = load i32, ptr %87, align 8, !tbaa !131
  %89 = icmp slt i32 %86, %88
  br i1 %89, label %91, label %90

90:                                               ; preds = %85
  store i32 5, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #9
  br label %214

91:                                               ; preds = %85
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #9
  store i32 0, ptr %14, align 4, !tbaa !127
  br label %92

92:                                               ; preds = %207, %91
  %93 = load i32, ptr %14, align 4, !tbaa !127
  %94 = getelementptr inbounds %class.spatial_region, ptr %46, i32 0, i32 1
  %95 = load i32, ptr %94, align 4, !tbaa !132
  %96 = icmp slt i32 %93, %95
  br i1 %96, label %98, label %97

97:                                               ; preds = %92
  store i32 8, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #9
  br label %210

98:                                               ; preds = %92
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #9
  store i32 0, ptr %15, align 4, !tbaa !127
  br label %99

99:                                               ; preds = %203, %98
  %100 = load i32, ptr %15, align 4, !tbaa !127
  %101 = getelementptr inbounds %class.spatial_region, ptr %46, i32 0, i32 2
  %102 = load i32, ptr %101, align 8, !tbaa !133
  %103 = icmp slt i32 %100, %102
  br i1 %103, label %105, label %104

104:                                              ; preds = %99
  store i32 11, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #9
  br label %206

105:                                              ; preds = %99
  %106 = getelementptr inbounds %class.spatial_region, ptr %46, i32 0, i32 50
  %107 = load i32, ptr %12, align 4, !tbaa !127
  %108 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5cellpEixEi(ptr noundef nonnull align 8 dereferenceable(40) %106, i32 noundef %107)
  %109 = load ptr, ptr %108, align 8, !tbaa !5
  %110 = load i32, ptr %14, align 4, !tbaa !127
  %111 = sext i32 %110 to i64
  %112 = getelementptr inbounds ptr, ptr %109, i64 %111
  %113 = load ptr, ptr %112, align 8, !tbaa !5
  %114 = load i32, ptr %15, align 4, !tbaa !127
  %115 = sext i32 %114 to i64
  %116 = getelementptr inbounds %struct.cellp, ptr %113, i64 %115
  %117 = getelementptr inbounds %struct.cellp, ptr %116, i32 0, i32 0
  %118 = getelementptr inbounds %class.plist, ptr %117, i32 0, i32 0
  %119 = load ptr, ptr %118, align 8, !tbaa !134
  store ptr %119, ptr %7, align 8, !tbaa !5
  br label %120

120:                                              ; preds = %198, %105
  %121 = load ptr, ptr %7, align 8, !tbaa !5
  %122 = icmp ne ptr %121, null
  br i1 %122, label %123, label %202

123:                                              ; preds = %120
  %124 = load ptr, ptr %7, align 8, !tbaa !5
  %125 = getelementptr inbounds %struct.particle, ptr %124, i32 0, i32 8
  %126 = load double, ptr %125, align 8, !tbaa !137
  %127 = fcmp oeq double %126, -1.000000e+00
  br i1 %127, label %128, label %136

128:                                              ; preds = %123
  %129 = load ptr, ptr %7, align 8, !tbaa !5
  %130 = getelementptr inbounds %struct.particle, ptr %129, i32 0, i32 7
  %131 = load double, ptr %130, align 8, !tbaa !139
  %132 = load ptr, ptr %10, align 8, !tbaa !5
  %133 = getelementptr inbounds double, ptr %132, i64 0
  %134 = load double, ptr %133, align 8, !tbaa !128
  %135 = fsub double %134, %131
  store double %135, ptr %133, align 8, !tbaa !128
  br label %198

136:                                              ; preds = %123
  %137 = load ptr, ptr %7, align 8, !tbaa !5
  %138 = getelementptr inbounds %struct.particle, ptr %137, i32 0, i32 8
  %139 = load double, ptr %138, align 8, !tbaa !137
  %140 = fcmp oeq double %139, 1.000000e+00
  br i1 %140, label %141, label %149

141:                                              ; preds = %136
  %142 = load ptr, ptr %7, align 8, !tbaa !5
  %143 = getelementptr inbounds %struct.particle, ptr %142, i32 0, i32 7
  %144 = load double, ptr %143, align 8, !tbaa !139
  %145 = load ptr, ptr %10, align 8, !tbaa !5
  %146 = getelementptr inbounds double, ptr %145, i64 1
  %147 = load double, ptr %146, align 8, !tbaa !128
  %148 = fadd double %147, %144
  store double %148, ptr %146, align 8, !tbaa !128
  br label %197

149:                                              ; preds = %136
  %150 = load ptr, ptr %7, align 8, !tbaa !5
  %151 = getelementptr inbounds %struct.particle, ptr %150, i32 0, i32 8
  %152 = load double, ptr %151, align 8, !tbaa !137
  %153 = fcmp oeq double %152, 0.000000e+00
  br i1 %153, label %154, label %162

154:                                              ; preds = %149
  %155 = load ptr, ptr %7, align 8, !tbaa !5
  %156 = getelementptr inbounds %struct.particle, ptr %155, i32 0, i32 7
  %157 = load double, ptr %156, align 8, !tbaa !139
  %158 = load ptr, ptr %10, align 8, !tbaa !5
  %159 = getelementptr inbounds double, ptr %158, i64 2
  %160 = load double, ptr %159, align 8, !tbaa !128
  %161 = fadd double %160, %157
  store double %161, ptr %159, align 8, !tbaa !128
  br label %196

162:                                              ; preds = %149
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #9
  store i32 0, ptr %16, align 4, !tbaa !127
  br label %163

163:                                              ; preds = %192, %162
  %164 = load i32, ptr %16, align 4, !tbaa !127
  %165 = getelementptr inbounds %class.spatial_region, ptr %46, i32 0, i32 14
  %166 = load i32, ptr %165, align 8, !tbaa !9
  %167 = icmp slt i32 %164, %166
  br i1 %167, label %169, label %168

168:                                              ; preds = %163
  store i32 16, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #9
  br label %195

169:                                              ; preds = %163
  %170 = load ptr, ptr %7, align 8, !tbaa !5
  %171 = getelementptr inbounds %struct.particle, ptr %170, i32 0, i32 8
  %172 = load double, ptr %171, align 8, !tbaa !137
  %173 = getelementptr inbounds %class.spatial_region, ptr %46, i32 0, i32 15
  %174 = load ptr, ptr %173, align 8, !tbaa !140
  %175 = load i32, ptr %16, align 4, !tbaa !127
  %176 = sext i32 %175 to i64
  %177 = getelementptr inbounds double, ptr %174, i64 %176
  %178 = load double, ptr %177, align 8, !tbaa !128
  %179 = fcmp oeq double %172, %178
  br i1 %179, label %180, label %191

180:                                              ; preds = %169
  %181 = load ptr, ptr %7, align 8, !tbaa !5
  %182 = getelementptr inbounds %struct.particle, ptr %181, i32 0, i32 7
  %183 = load double, ptr %182, align 8, !tbaa !139
  %184 = load ptr, ptr %10, align 8, !tbaa !5
  %185 = load i32, ptr %16, align 4, !tbaa !127
  %186 = add nsw i32 3, %185
  %187 = sext i32 %186 to i64
  %188 = getelementptr inbounds double, ptr %184, i64 %187
  %189 = load double, ptr %188, align 8, !tbaa !128
  %190 = fadd double %189, %183
  store double %190, ptr %188, align 8, !tbaa !128
  br label %191

191:                                              ; preds = %180, %169
  br label %192

192:                                              ; preds = %191
  %193 = load i32, ptr %16, align 4, !tbaa !127
  %194 = add nsw i32 %193, 1
  store i32 %194, ptr %16, align 4, !tbaa !127
  br label %163, !llvm.loop !141

195:                                              ; preds = %168
  br label %196

196:                                              ; preds = %195, %154
  br label %197

197:                                              ; preds = %196, %141
  br label %198

198:                                              ; preds = %197, %128
  %199 = load ptr, ptr %7, align 8, !tbaa !5
  %200 = getelementptr inbounds %struct.particle, ptr %199, i32 0, i32 11
  %201 = load ptr, ptr %200, align 8, !tbaa !142
  store ptr %201, ptr %7, align 8, !tbaa !5
  br label %120, !llvm.loop !143

202:                                              ; preds = %120
  br label %203

203:                                              ; preds = %202
  %204 = load i32, ptr %15, align 4, !tbaa !127
  %205 = add nsw i32 %204, 1
  store i32 %205, ptr %15, align 4, !tbaa !127
  br label %99, !llvm.loop !144

206:                                              ; preds = %104
  br label %207

207:                                              ; preds = %206
  %208 = load i32, ptr %14, align 4, !tbaa !127
  %209 = add nsw i32 %208, 1
  store i32 %209, ptr %14, align 4, !tbaa !127
  br label %92, !llvm.loop !145

210:                                              ; preds = %97
  br label %211

211:                                              ; preds = %210
  %212 = load i32, ptr %12, align 4, !tbaa !127
  %213 = add nsw i32 %212, 1
  store i32 %213, ptr %12, align 4, !tbaa !127
  br label %85, !llvm.loop !146

214:                                              ; preds = %90
  %215 = call noundef zeroext i1 @_ZSteqIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32) %2, ptr noundef @.str.7)
  br i1 %215, label %216, label %689

216:                                              ; preds = %214
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #9
  store i32 0, ptr %17, align 4, !tbaa !127
  br label %217

217:                                              ; preds = %426, %216
  %218 = load i32, ptr %17, align 4, !tbaa !127
  %219 = getelementptr inbounds %class.spatial_region, ptr %46, i32 0, i32 0
  %220 = load i32, ptr %219, align 8, !tbaa !131
  %221 = icmp slt i32 %218, %220
  br i1 %221, label %223, label %222

222:                                              ; preds = %217
  store i32 19, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #9
  br label %429

223:                                              ; preds = %217
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #9
  store i32 0, ptr %18, align 4, !tbaa !127
  br label %224

224:                                              ; preds = %422, %223
  %225 = load i32, ptr %18, align 4, !tbaa !127
  %226 = getelementptr inbounds %class.spatial_region, ptr %46, i32 0, i32 1
  %227 = load i32, ptr %226, align 4, !tbaa !132
  %228 = icmp slt i32 %225, %227
  br i1 %228, label %230, label %229

229:                                              ; preds = %224
  store i32 22, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #9
  br label %425

230:                                              ; preds = %224
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #9
  store i32 0, ptr %19, align 4, !tbaa !127
  br label %231

231:                                              ; preds = %418, %230
  %232 = load i32, ptr %19, align 4, !tbaa !127
  %233 = getelementptr inbounds %class.spatial_region, ptr %46, i32 0, i32 2
  %234 = load i32, ptr %233, align 8, !tbaa !133
  %235 = icmp slt i32 %232, %234
  br i1 %235, label %237, label %236

236:                                              ; preds = %231
  store i32 25, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #9
  br label %421

237:                                              ; preds = %231
  %238 = getelementptr inbounds %class.spatial_region, ptr %46, i32 0, i32 50
  %239 = load i32, ptr %17, align 4, !tbaa !127
  %240 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5cellpEixEi(ptr noundef nonnull align 8 dereferenceable(40) %238, i32 noundef %239)
  %241 = load ptr, ptr %240, align 8, !tbaa !5
  %242 = load i32, ptr %18, align 4, !tbaa !127
  %243 = sext i32 %242 to i64
  %244 = getelementptr inbounds ptr, ptr %241, i64 %243
  %245 = load ptr, ptr %244, align 8, !tbaa !5
  %246 = load i32, ptr %19, align 4, !tbaa !127
  %247 = sext i32 %246 to i64
  %248 = getelementptr inbounds %struct.cellp, ptr %245, i64 %247
  %249 = getelementptr inbounds %struct.cellp, ptr %248, i32 0, i32 0
  %250 = getelementptr inbounds %class.plist, ptr %249, i32 0, i32 0
  %251 = load ptr, ptr %250, align 8, !tbaa !134
  store ptr %251, ptr %7, align 8, !tbaa !5
  br label %252

252:                                              ; preds = %416, %237
  %253 = load ptr, ptr %7, align 8, !tbaa !5
  %254 = icmp ne ptr %253, null
  br i1 %254, label %255, label %417

255:                                              ; preds = %252
  %256 = call noundef double @_ZN14spatial_region8get_randEv(ptr noundef nonnull align 8 dereferenceable(608) %46)
  %257 = load ptr, ptr %5, align 8, !tbaa !5
  %258 = getelementptr inbounds double, ptr %257, i64 0
  %259 = load double, ptr %258, align 8, !tbaa !128
  %260 = fcmp olt double %256, %259
  br i1 %260, label %261, label %412

261:                                              ; preds = %255
  %262 = load ptr, ptr %7, align 8, !tbaa !5
  %263 = getelementptr inbounds %struct.particle, ptr %262, i32 0, i32 11
  %264 = load ptr, ptr %263, align 8, !tbaa !142
  store ptr %264, ptr %8, align 8, !tbaa !5
  %265 = load ptr, ptr %7, align 8, !tbaa !5
  %266 = getelementptr inbounds %struct.particle, ptr %265, i32 0, i32 8
  %267 = load double, ptr %266, align 8, !tbaa !137
  %268 = fcmp oeq double %267, -1.000000e+00
  br i1 %268, label %269, label %277

269:                                              ; preds = %261
  %270 = load ptr, ptr %7, align 8, !tbaa !5
  %271 = getelementptr inbounds %struct.particle, ptr %270, i32 0, i32 7
  %272 = load double, ptr %271, align 8, !tbaa !139
  %273 = load ptr, ptr %9, align 8, !tbaa !5
  %274 = getelementptr inbounds double, ptr %273, i64 0
  %275 = load double, ptr %274, align 8, !tbaa !128
  %276 = fsub double %275, %272
  store double %276, ptr %274, align 8, !tbaa !128
  br label %339

277:                                              ; preds = %261
  %278 = load ptr, ptr %7, align 8, !tbaa !5
  %279 = getelementptr inbounds %struct.particle, ptr %278, i32 0, i32 8
  %280 = load double, ptr %279, align 8, !tbaa !137
  %281 = fcmp oeq double %280, 1.000000e+00
  br i1 %281, label %282, label %290

282:                                              ; preds = %277
  %283 = load ptr, ptr %7, align 8, !tbaa !5
  %284 = getelementptr inbounds %struct.particle, ptr %283, i32 0, i32 7
  %285 = load double, ptr %284, align 8, !tbaa !139
  %286 = load ptr, ptr %9, align 8, !tbaa !5
  %287 = getelementptr inbounds double, ptr %286, i64 1
  %288 = load double, ptr %287, align 8, !tbaa !128
  %289 = fadd double %288, %285
  store double %289, ptr %287, align 8, !tbaa !128
  br label %338

290:                                              ; preds = %277
  %291 = load ptr, ptr %7, align 8, !tbaa !5
  %292 = getelementptr inbounds %struct.particle, ptr %291, i32 0, i32 8
  %293 = load double, ptr %292, align 8, !tbaa !137
  %294 = fcmp oeq double %293, 0.000000e+00
  br i1 %294, label %295, label %303

295:                                              ; preds = %290
  %296 = load ptr, ptr %7, align 8, !tbaa !5
  %297 = getelementptr inbounds %struct.particle, ptr %296, i32 0, i32 7
  %298 = load double, ptr %297, align 8, !tbaa !139
  %299 = load ptr, ptr %9, align 8, !tbaa !5
  %300 = getelementptr inbounds double, ptr %299, i64 2
  %301 = load double, ptr %300, align 8, !tbaa !128
  %302 = fadd double %301, %298
  store double %302, ptr %300, align 8, !tbaa !128
  br label %337

303:                                              ; preds = %290
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #9
  store i32 0, ptr %20, align 4, !tbaa !127
  br label %304

304:                                              ; preds = %333, %303
  %305 = load i32, ptr %20, align 4, !tbaa !127
  %306 = getelementptr inbounds %class.spatial_region, ptr %46, i32 0, i32 14
  %307 = load i32, ptr %306, align 8, !tbaa !9
  %308 = icmp slt i32 %305, %307
  br i1 %308, label %310, label %309

309:                                              ; preds = %304
  store i32 30, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #9
  br label %336

310:                                              ; preds = %304
  %311 = load ptr, ptr %7, align 8, !tbaa !5
  %312 = getelementptr inbounds %struct.particle, ptr %311, i32 0, i32 8
  %313 = load double, ptr %312, align 8, !tbaa !137
  %314 = getelementptr inbounds %class.spatial_region, ptr %46, i32 0, i32 15
  %315 = load ptr, ptr %314, align 8, !tbaa !140
  %316 = load i32, ptr %20, align 4, !tbaa !127
  %317 = sext i32 %316 to i64
  %318 = getelementptr inbounds double, ptr %315, i64 %317
  %319 = load double, ptr %318, align 8, !tbaa !128
  %320 = fcmp oeq double %313, %319
  br i1 %320, label %321, label %332

321:                                              ; preds = %310
  %322 = load ptr, ptr %7, align 8, !tbaa !5
  %323 = getelementptr inbounds %struct.particle, ptr %322, i32 0, i32 7
  %324 = load double, ptr %323, align 8, !tbaa !139
  %325 = load ptr, ptr %9, align 8, !tbaa !5
  %326 = load i32, ptr %20, align 4, !tbaa !127
  %327 = add nsw i32 3, %326
  %328 = sext i32 %327 to i64
  %329 = getelementptr inbounds double, ptr %325, i64 %328
  %330 = load double, ptr %329, align 8, !tbaa !128
  %331 = fadd double %330, %324
  store double %331, ptr %329, align 8, !tbaa !128
  br label %332

332:                                              ; preds = %321, %310
  br label %333

333:                                              ; preds = %332
  %334 = load i32, ptr %20, align 4, !tbaa !127
  %335 = add nsw i32 %334, 1
  store i32 %335, ptr %20, align 4, !tbaa !127
  br label %304, !llvm.loop !147

336:                                              ; preds = %309
  br label %337

337:                                              ; preds = %336, %295
  br label %338

338:                                              ; preds = %337, %282
  br label %339

339:                                              ; preds = %338, %269
  %340 = load ptr, ptr %7, align 8, !tbaa !5
  %341 = getelementptr inbounds %struct.particle, ptr %340, i32 0, i32 11
  %342 = load ptr, ptr %341, align 8, !tbaa !142
  %343 = icmp ne ptr %342, null
  br i1 %343, label %344, label %352

344:                                              ; preds = %339
  %345 = load ptr, ptr %7, align 8, !tbaa !5
  %346 = getelementptr inbounds %struct.particle, ptr %345, i32 0, i32 12
  %347 = load ptr, ptr %346, align 8, !tbaa !148
  %348 = load ptr, ptr %7, align 8, !tbaa !5
  %349 = getelementptr inbounds %struct.particle, ptr %348, i32 0, i32 11
  %350 = load ptr, ptr %349, align 8, !tbaa !142
  %351 = getelementptr inbounds %struct.particle, ptr %350, i32 0, i32 12
  store ptr %347, ptr %351, align 8, !tbaa !148
  br label %352

352:                                              ; preds = %344, %339
  %353 = load ptr, ptr %7, align 8, !tbaa !5
  %354 = getelementptr inbounds %struct.particle, ptr %353, i32 0, i32 12
  %355 = load ptr, ptr %354, align 8, !tbaa !148
  %356 = icmp ne ptr %355, null
  br i1 %356, label %357, label %365

357:                                              ; preds = %352
  %358 = load ptr, ptr %7, align 8, !tbaa !5
  %359 = getelementptr inbounds %struct.particle, ptr %358, i32 0, i32 11
  %360 = load ptr, ptr %359, align 8, !tbaa !142
  %361 = load ptr, ptr %7, align 8, !tbaa !5
  %362 = getelementptr inbounds %struct.particle, ptr %361, i32 0, i32 12
  %363 = load ptr, ptr %362, align 8, !tbaa !148
  %364 = getelementptr inbounds %struct.particle, ptr %363, i32 0, i32 11
  store ptr %360, ptr %364, align 8, !tbaa !142
  br label %409

365:                                              ; preds = %352
  %366 = load ptr, ptr %7, align 8, !tbaa !5
  %367 = getelementptr inbounds %struct.particle, ptr %366, i32 0, i32 11
  %368 = load ptr, ptr %367, align 8, !tbaa !142
  %369 = getelementptr inbounds %class.spatial_region, ptr %46, i32 0, i32 50
  %370 = load i32, ptr %17, align 4, !tbaa !127
  %371 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5cellpEixEi(ptr noundef nonnull align 8 dereferenceable(40) %369, i32 noundef %370)
  %372 = load ptr, ptr %371, align 8, !tbaa !5
  %373 = load i32, ptr %18, align 4, !tbaa !127
  %374 = sext i32 %373 to i64
  %375 = getelementptr inbounds ptr, ptr %372, i64 %374
  %376 = load ptr, ptr %375, align 8, !tbaa !5
  %377 = load i32, ptr %19, align 4, !tbaa !127
  %378 = sext i32 %377 to i64
  %379 = getelementptr inbounds %struct.cellp, ptr %376, i64 %378
  %380 = getelementptr inbounds %struct.cellp, ptr %379, i32 0, i32 0
  %381 = getelementptr inbounds %class.plist, ptr %380, i32 0, i32 0
  store ptr %368, ptr %381, align 8, !tbaa !134
  %382 = getelementptr inbounds %class.spatial_region, ptr %46, i32 0, i32 50
  %383 = load i32, ptr %17, align 4, !tbaa !127
  %384 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5cellpEixEi(ptr noundef nonnull align 8 dereferenceable(40) %382, i32 noundef %383)
  %385 = load ptr, ptr %384, align 8, !tbaa !5
  %386 = load i32, ptr %18, align 4, !tbaa !127
  %387 = sext i32 %386 to i64
  %388 = getelementptr inbounds ptr, ptr %385, i64 %387
  %389 = load ptr, ptr %388, align 8, !tbaa !5
  %390 = load i32, ptr %19, align 4, !tbaa !127
  %391 = sext i32 %390 to i64
  %392 = getelementptr inbounds %struct.cellp, ptr %389, i64 %391
  %393 = getelementptr inbounds %struct.cellp, ptr %392, i32 0, i32 0
  %394 = getelementptr inbounds %class.plist, ptr %393, i32 0, i32 0
  %395 = load ptr, ptr %394, align 8, !tbaa !134
  %396 = getelementptr inbounds %class.spatial_region, ptr %46, i32 0, i32 50
  %397 = load i32, ptr %17, align 4, !tbaa !127
  %398 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5cellpEixEi(ptr noundef nonnull align 8 dereferenceable(40) %396, i32 noundef %397)
  %399 = load ptr, ptr %398, align 8, !tbaa !5
  %400 = load i32, ptr %18, align 4, !tbaa !127
  %401 = sext i32 %400 to i64
  %402 = getelementptr inbounds ptr, ptr %399, i64 %401
  %403 = load ptr, ptr %402, align 8, !tbaa !5
  %404 = load i32, ptr %19, align 4, !tbaa !127
  %405 = sext i32 %404 to i64
  %406 = getelementptr inbounds %struct.cellp, ptr %403, i64 %405
  %407 = getelementptr inbounds %struct.cellp, ptr %406, i32 0, i32 0
  %408 = getelementptr inbounds %class.plist, ptr %407, i32 0, i32 1
  store ptr %395, ptr %408, align 8, !tbaa !149
  br label %409

409:                                              ; preds = %365, %357
  %410 = load ptr, ptr %7, align 8, !tbaa !5
  call void @_ZN14spatial_region15delete_particleEP8particleb(ptr noundef nonnull align 8 dereferenceable(608) %46, ptr noundef %410, i1 noundef zeroext false)
  %411 = load ptr, ptr %8, align 8, !tbaa !5
  store ptr %411, ptr %7, align 8, !tbaa !5
  br label %416

412:                                              ; preds = %255
  %413 = load ptr, ptr %7, align 8, !tbaa !5
  %414 = getelementptr inbounds %struct.particle, ptr %413, i32 0, i32 11
  %415 = load ptr, ptr %414, align 8, !tbaa !142
  store ptr %415, ptr %7, align 8, !tbaa !5
  br label %416

416:                                              ; preds = %412, %409
  br label %252, !llvm.loop !150

417:                                              ; preds = %252
  br label %418

418:                                              ; preds = %417
  %419 = load i32, ptr %19, align 4, !tbaa !127
  %420 = add nsw i32 %419, 1
  store i32 %420, ptr %19, align 4, !tbaa !127
  br label %231, !llvm.loop !151

421:                                              ; preds = %236
  br label %422

422:                                              ; preds = %421
  %423 = load i32, ptr %18, align 4, !tbaa !127
  %424 = add nsw i32 %423, 1
  store i32 %424, ptr %18, align 4, !tbaa !127
  br label %224, !llvm.loop !152

425:                                              ; preds = %229
  br label %426

426:                                              ; preds = %425
  %427 = load i32, ptr %17, align 4, !tbaa !127
  %428 = add nsw i32 %427, 1
  store i32 %428, ptr %17, align 4, !tbaa !127
  br label %217, !llvm.loop !153

429:                                              ; preds = %222
  %430 = load ptr, ptr %10, align 8, !tbaa !5
  %431 = getelementptr inbounds double, ptr %430, i64 0
  %432 = load double, ptr %431, align 8, !tbaa !128
  %433 = load ptr, ptr %9, align 8, !tbaa !5
  %434 = getelementptr inbounds double, ptr %433, i64 0
  %435 = load double, ptr %434, align 8, !tbaa !128
  %436 = fsub double %432, %435
  %437 = fcmp une double %436, 0.000000e+00
  br i1 %437, label %438, label %452

438:                                              ; preds = %429
  %439 = load ptr, ptr %10, align 8, !tbaa !5
  %440 = getelementptr inbounds double, ptr %439, i64 0
  %441 = load double, ptr %440, align 8, !tbaa !128
  %442 = load ptr, ptr %10, align 8, !tbaa !5
  %443 = getelementptr inbounds double, ptr %442, i64 0
  %444 = load double, ptr %443, align 8, !tbaa !128
  %445 = load ptr, ptr %9, align 8, !tbaa !5
  %446 = getelementptr inbounds double, ptr %445, i64 0
  %447 = load double, ptr %446, align 8, !tbaa !128
  %448 = fsub double %444, %447
  %449 = fdiv double %441, %448
  %450 = load ptr, ptr %10, align 8, !tbaa !5
  %451 = getelementptr inbounds double, ptr %450, i64 0
  store double %449, ptr %451, align 8, !tbaa !128
  br label %452

452:                                              ; preds = %438, %429
  %453 = load ptr, ptr %10, align 8, !tbaa !5
  %454 = getelementptr inbounds double, ptr %453, i64 1
  %455 = load double, ptr %454, align 8, !tbaa !128
  %456 = load ptr, ptr %9, align 8, !tbaa !5
  %457 = getelementptr inbounds double, ptr %456, i64 1
  %458 = load double, ptr %457, align 8, !tbaa !128
  %459 = fsub double %455, %458
  %460 = fcmp une double %459, 0.000000e+00
  br i1 %460, label %461, label %475

461:                                              ; preds = %452
  %462 = load ptr, ptr %10, align 8, !tbaa !5
  %463 = getelementptr inbounds double, ptr %462, i64 1
  %464 = load double, ptr %463, align 8, !tbaa !128
  %465 = load ptr, ptr %10, align 8, !tbaa !5
  %466 = getelementptr inbounds double, ptr %465, i64 1
  %467 = load double, ptr %466, align 8, !tbaa !128
  %468 = load ptr, ptr %9, align 8, !tbaa !5
  %469 = getelementptr inbounds double, ptr %468, i64 1
  %470 = load double, ptr %469, align 8, !tbaa !128
  %471 = fsub double %467, %470
  %472 = fdiv double %464, %471
  %473 = load ptr, ptr %10, align 8, !tbaa !5
  %474 = getelementptr inbounds double, ptr %473, i64 1
  store double %472, ptr %474, align 8, !tbaa !128
  br label %475

475:                                              ; preds = %461, %452
  %476 = load ptr, ptr %10, align 8, !tbaa !5
  %477 = getelementptr inbounds double, ptr %476, i64 2
  %478 = load double, ptr %477, align 8, !tbaa !128
  %479 = load ptr, ptr %9, align 8, !tbaa !5
  %480 = getelementptr inbounds double, ptr %479, i64 2
  %481 = load double, ptr %480, align 8, !tbaa !128
  %482 = fsub double %478, %481
  %483 = fcmp une double %482, 0.000000e+00
  br i1 %483, label %484, label %498

484:                                              ; preds = %475
  %485 = load ptr, ptr %10, align 8, !tbaa !5
  %486 = getelementptr inbounds double, ptr %485, i64 2
  %487 = load double, ptr %486, align 8, !tbaa !128
  %488 = load ptr, ptr %10, align 8, !tbaa !5
  %489 = getelementptr inbounds double, ptr %488, i64 2
  %490 = load double, ptr %489, align 8, !tbaa !128
  %491 = load ptr, ptr %9, align 8, !tbaa !5
  %492 = getelementptr inbounds double, ptr %491, i64 2
  %493 = load double, ptr %492, align 8, !tbaa !128
  %494 = fsub double %490, %493
  %495 = fdiv double %487, %494
  %496 = load ptr, ptr %10, align 8, !tbaa !5
  %497 = getelementptr inbounds double, ptr %496, i64 2
  store double %495, ptr %497, align 8, !tbaa !128
  br label %498

498:                                              ; preds = %484, %475
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #9
  store i32 0, ptr %21, align 4, !tbaa !127
  br label %499

499:                                              ; preds = %547, %498
  %500 = load i32, ptr %21, align 4, !tbaa !127
  %501 = getelementptr inbounds %class.spatial_region, ptr %46, i32 0, i32 14
  %502 = load i32, ptr %501, align 8, !tbaa !9
  %503 = icmp slt i32 %500, %502
  br i1 %503, label %505, label %504

504:                                              ; preds = %499
  store i32 33, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #9
  br label %550

505:                                              ; preds = %499
  %506 = load ptr, ptr %10, align 8, !tbaa !5
  %507 = load i32, ptr %21, align 4, !tbaa !127
  %508 = add nsw i32 3, %507
  %509 = sext i32 %508 to i64
  %510 = getelementptr inbounds double, ptr %506, i64 %509
  %511 = load double, ptr %510, align 8, !tbaa !128
  %512 = load ptr, ptr %9, align 8, !tbaa !5
  %513 = load i32, ptr %21, align 4, !tbaa !127
  %514 = add nsw i32 3, %513
  %515 = sext i32 %514 to i64
  %516 = getelementptr inbounds double, ptr %512, i64 %515
  %517 = load double, ptr %516, align 8, !tbaa !128
  %518 = fsub double %511, %517
  %519 = fcmp une double %518, 0.000000e+00
  br i1 %519, label %520, label %546

520:                                              ; preds = %505
  %521 = load ptr, ptr %10, align 8, !tbaa !5
  %522 = load i32, ptr %21, align 4, !tbaa !127
  %523 = add nsw i32 3, %522
  %524 = sext i32 %523 to i64
  %525 = getelementptr inbounds double, ptr %521, i64 %524
  %526 = load double, ptr %525, align 8, !tbaa !128
  %527 = load ptr, ptr %10, align 8, !tbaa !5
  %528 = load i32, ptr %21, align 4, !tbaa !127
  %529 = add nsw i32 3, %528
  %530 = sext i32 %529 to i64
  %531 = getelementptr inbounds double, ptr %527, i64 %530
  %532 = load double, ptr %531, align 8, !tbaa !128
  %533 = load ptr, ptr %9, align 8, !tbaa !5
  %534 = load i32, ptr %21, align 4, !tbaa !127
  %535 = add nsw i32 3, %534
  %536 = sext i32 %535 to i64
  %537 = getelementptr inbounds double, ptr %533, i64 %536
  %538 = load double, ptr %537, align 8, !tbaa !128
  %539 = fsub double %532, %538
  %540 = fdiv double %526, %539
  %541 = load ptr, ptr %10, align 8, !tbaa !5
  %542 = load i32, ptr %21, align 4, !tbaa !127
  %543 = add nsw i32 3, %542
  %544 = sext i32 %543 to i64
  %545 = getelementptr inbounds double, ptr %541, i64 %544
  store double %540, ptr %545, align 8, !tbaa !128
  br label %546

546:                                              ; preds = %520, %505
  br label %547

547:                                              ; preds = %546
  %548 = load i32, ptr %21, align 4, !tbaa !127
  %549 = add nsw i32 %548, 1
  store i32 %549, ptr %21, align 4, !tbaa !127
  br label %499, !llvm.loop !154

550:                                              ; preds = %504
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #9
  store i32 0, ptr %22, align 4, !tbaa !127
  br label %551

551:                                              ; preds = %685, %550
  %552 = load i32, ptr %22, align 4, !tbaa !127
  %553 = getelementptr inbounds %class.spatial_region, ptr %46, i32 0, i32 0
  %554 = load i32, ptr %553, align 8, !tbaa !131
  %555 = icmp slt i32 %552, %554
  br i1 %555, label %557, label %556

556:                                              ; preds = %551
  store i32 36, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #9
  br label %688

557:                                              ; preds = %551
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #9
  store i32 0, ptr %23, align 4, !tbaa !127
  br label %558

558:                                              ; preds = %681, %557
  %559 = load i32, ptr %23, align 4, !tbaa !127
  %560 = getelementptr inbounds %class.spatial_region, ptr %46, i32 0, i32 1
  %561 = load i32, ptr %560, align 4, !tbaa !132
  %562 = icmp slt i32 %559, %561
  br i1 %562, label %564, label %563

563:                                              ; preds = %558
  store i32 39, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #9
  br label %684

564:                                              ; preds = %558
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #9
  store i32 0, ptr %24, align 4, !tbaa !127
  br label %565

565:                                              ; preds = %677, %564
  %566 = load i32, ptr %24, align 4, !tbaa !127
  %567 = getelementptr inbounds %class.spatial_region, ptr %46, i32 0, i32 2
  %568 = load i32, ptr %567, align 8, !tbaa !133
  %569 = icmp slt i32 %566, %568
  br i1 %569, label %571, label %570

570:                                              ; preds = %565
  store i32 42, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #9
  br label %680

571:                                              ; preds = %565
  %572 = getelementptr inbounds %class.spatial_region, ptr %46, i32 0, i32 50
  %573 = load i32, ptr %22, align 4, !tbaa !127
  %574 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5cellpEixEi(ptr noundef nonnull align 8 dereferenceable(40) %572, i32 noundef %573)
  %575 = load ptr, ptr %574, align 8, !tbaa !5
  %576 = load i32, ptr %23, align 4, !tbaa !127
  %577 = sext i32 %576 to i64
  %578 = getelementptr inbounds ptr, ptr %575, i64 %577
  %579 = load ptr, ptr %578, align 8, !tbaa !5
  %580 = load i32, ptr %24, align 4, !tbaa !127
  %581 = sext i32 %580 to i64
  %582 = getelementptr inbounds %struct.cellp, ptr %579, i64 %581
  %583 = getelementptr inbounds %struct.cellp, ptr %582, i32 0, i32 0
  %584 = getelementptr inbounds %class.plist, ptr %583, i32 0, i32 0
  %585 = load ptr, ptr %584, align 8, !tbaa !134
  store ptr %585, ptr %7, align 8, !tbaa !5
  br label %586

586:                                              ; preds = %672, %571
  %587 = load ptr, ptr %7, align 8, !tbaa !5
  %588 = icmp ne ptr %587, null
  br i1 %588, label %589, label %676

589:                                              ; preds = %586
  %590 = load ptr, ptr %7, align 8, !tbaa !5
  %591 = getelementptr inbounds %struct.particle, ptr %590, i32 0, i32 8
  %592 = load double, ptr %591, align 8, !tbaa !137
  %593 = fcmp oeq double %592, -1.000000e+00
  br i1 %593, label %594, label %604

594:                                              ; preds = %589
  %595 = load ptr, ptr %10, align 8, !tbaa !5
  %596 = getelementptr inbounds double, ptr %595, i64 0
  %597 = load double, ptr %596, align 8, !tbaa !128
  %598 = load ptr, ptr %7, align 8, !tbaa !5
  %599 = getelementptr inbounds %struct.particle, ptr %598, i32 0, i32 7
  %600 = load double, ptr %599, align 8, !tbaa !139
  %601 = fmul double %597, %600
  %602 = load ptr, ptr %7, align 8, !tbaa !5
  %603 = getelementptr inbounds %struct.particle, ptr %602, i32 0, i32 7
  store double %601, ptr %603, align 8, !tbaa !139
  br label %672

604:                                              ; preds = %589
  %605 = load ptr, ptr %7, align 8, !tbaa !5
  %606 = getelementptr inbounds %struct.particle, ptr %605, i32 0, i32 8
  %607 = load double, ptr %606, align 8, !tbaa !137
  %608 = fcmp oeq double %607, 1.000000e+00
  br i1 %608, label %609, label %619

609:                                              ; preds = %604
  %610 = load ptr, ptr %10, align 8, !tbaa !5
  %611 = getelementptr inbounds double, ptr %610, i64 1
  %612 = load double, ptr %611, align 8, !tbaa !128
  %613 = load ptr, ptr %7, align 8, !tbaa !5
  %614 = getelementptr inbounds %struct.particle, ptr %613, i32 0, i32 7
  %615 = load double, ptr %614, align 8, !tbaa !139
  %616 = fmul double %612, %615
  %617 = load ptr, ptr %7, align 8, !tbaa !5
  %618 = getelementptr inbounds %struct.particle, ptr %617, i32 0, i32 7
  store double %616, ptr %618, align 8, !tbaa !139
  br label %671

619:                                              ; preds = %604
  %620 = load ptr, ptr %7, align 8, !tbaa !5
  %621 = getelementptr inbounds %struct.particle, ptr %620, i32 0, i32 8
  %622 = load double, ptr %621, align 8, !tbaa !137
  %623 = fcmp oeq double %622, 0.000000e+00
  br i1 %623, label %624, label %634

624:                                              ; preds = %619
  %625 = load ptr, ptr %10, align 8, !tbaa !5
  %626 = getelementptr inbounds double, ptr %625, i64 2
  %627 = load double, ptr %626, align 8, !tbaa !128
  %628 = load ptr, ptr %7, align 8, !tbaa !5
  %629 = getelementptr inbounds %struct.particle, ptr %628, i32 0, i32 7
  %630 = load double, ptr %629, align 8, !tbaa !139
  %631 = fmul double %627, %630
  %632 = load ptr, ptr %7, align 8, !tbaa !5
  %633 = getelementptr inbounds %struct.particle, ptr %632, i32 0, i32 7
  store double %631, ptr %633, align 8, !tbaa !139
  br label %670

634:                                              ; preds = %619
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #9
  store i32 0, ptr %25, align 4, !tbaa !127
  br label %635

635:                                              ; preds = %666, %634
  %636 = load i32, ptr %25, align 4, !tbaa !127
  %637 = getelementptr inbounds %class.spatial_region, ptr %46, i32 0, i32 14
  %638 = load i32, ptr %637, align 8, !tbaa !9
  %639 = icmp slt i32 %636, %638
  br i1 %639, label %641, label %640

640:                                              ; preds = %635
  store i32 47, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #9
  br label %669

641:                                              ; preds = %635
  %642 = load ptr, ptr %7, align 8, !tbaa !5
  %643 = getelementptr inbounds %struct.particle, ptr %642, i32 0, i32 8
  %644 = load double, ptr %643, align 8, !tbaa !137
  %645 = getelementptr inbounds %class.spatial_region, ptr %46, i32 0, i32 15
  %646 = load ptr, ptr %645, align 8, !tbaa !140
  %647 = load i32, ptr %25, align 4, !tbaa !127
  %648 = sext i32 %647 to i64
  %649 = getelementptr inbounds double, ptr %646, i64 %648
  %650 = load double, ptr %649, align 8, !tbaa !128
  %651 = fcmp oeq double %644, %650
  br i1 %651, label %652, label %665

652:                                              ; preds = %641
  %653 = load ptr, ptr %10, align 8, !tbaa !5
  %654 = load i32, ptr %25, align 4, !tbaa !127
  %655 = add nsw i32 3, %654
  %656 = sext i32 %655 to i64
  %657 = getelementptr inbounds double, ptr %653, i64 %656
  %658 = load double, ptr %657, align 8, !tbaa !128
  %659 = load ptr, ptr %7, align 8, !tbaa !5
  %660 = getelementptr inbounds %struct.particle, ptr %659, i32 0, i32 7
  %661 = load double, ptr %660, align 8, !tbaa !139
  %662 = fmul double %658, %661
  %663 = load ptr, ptr %7, align 8, !tbaa !5
  %664 = getelementptr inbounds %struct.particle, ptr %663, i32 0, i32 7
  store double %662, ptr %664, align 8, !tbaa !139
  br label %665

665:                                              ; preds = %652, %641
  br label %666

666:                                              ; preds = %665
  %667 = load i32, ptr %25, align 4, !tbaa !127
  %668 = add nsw i32 %667, 1
  store i32 %668, ptr %25, align 4, !tbaa !127
  br label %635, !llvm.loop !155

669:                                              ; preds = %640
  br label %670

670:                                              ; preds = %669, %624
  br label %671

671:                                              ; preds = %670, %609
  br label %672

672:                                              ; preds = %671, %594
  %673 = load ptr, ptr %7, align 8, !tbaa !5
  %674 = getelementptr inbounds %struct.particle, ptr %673, i32 0, i32 11
  %675 = load ptr, ptr %674, align 8, !tbaa !142
  store ptr %675, ptr %7, align 8, !tbaa !5
  br label %586, !llvm.loop !156

676:                                              ; preds = %586
  br label %677

677:                                              ; preds = %676
  %678 = load i32, ptr %24, align 4, !tbaa !127
  %679 = add nsw i32 %678, 1
  store i32 %679, ptr %24, align 4, !tbaa !127
  br label %565, !llvm.loop !157

680:                                              ; preds = %570
  br label %681

681:                                              ; preds = %680
  %682 = load i32, ptr %23, align 4, !tbaa !127
  %683 = add nsw i32 %682, 1
  store i32 %683, ptr %23, align 4, !tbaa !127
  br label %558, !llvm.loop !158

684:                                              ; preds = %563
  br label %685

685:                                              ; preds = %684
  %686 = load i32, ptr %22, align 4, !tbaa !127
  %687 = add nsw i32 %686, 1
  store i32 %687, ptr %22, align 4, !tbaa !127
  br label %551, !llvm.loop !159

688:                                              ; preds = %556
  br label %1661

689:                                              ; preds = %214
  %690 = call noundef zeroext i1 @_ZSteqIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32) %2, ptr noundef @.str.8)
  br i1 %690, label %691, label %1660

691:                                              ; preds = %689
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #9
  %692 = getelementptr inbounds %class.spatial_region, ptr %46, i32 0, i32 14
  %693 = load i32, ptr %692, align 8, !tbaa !9
  %694 = add nsw i32 3, %693
  %695 = sext i32 %694 to i64
  %696 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %695, i64 8)
  %697 = extractvalue { i64, i1 } %696, 1
  %698 = extractvalue { i64, i1 } %696, 0
  %699 = select i1 %697, i64 -1, i64 %698
  %700 = call noalias noundef nonnull ptr @_Znam(i64 noundef %699) #10
  store ptr %700, ptr %26, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #9
  store i32 0, ptr %27, align 4, !tbaa !127
  br label %701

701:                                              ; preds = %713, %691
  %702 = load i32, ptr %27, align 4, !tbaa !127
  %703 = getelementptr inbounds %class.spatial_region, ptr %46, i32 0, i32 14
  %704 = load i32, ptr %703, align 8, !tbaa !9
  %705 = add nsw i32 3, %704
  %706 = icmp slt i32 %702, %705
  br i1 %706, label %708, label %707

707:                                              ; preds = %701
  store i32 50, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #9
  br label %716

708:                                              ; preds = %701
  %709 = load ptr, ptr %26, align 8, !tbaa !5
  %710 = load i32, ptr %27, align 4, !tbaa !127
  %711 = sext i32 %710 to i64
  %712 = getelementptr inbounds double, ptr %709, i64 %711
  store double 0.000000e+00, ptr %712, align 8, !tbaa !128
  br label %713

713:                                              ; preds = %708
  %714 = load i32, ptr %27, align 4, !tbaa !127
  %715 = add nsw i32 %714, 1
  store i32 %715, ptr %27, align 4, !tbaa !127
  br label %701, !llvm.loop !160

716:                                              ; preds = %707
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #9
  store i32 0, ptr %28, align 4, !tbaa !127
  br label %717

717:                                              ; preds = %831, %716
  %718 = load i32, ptr %28, align 4, !tbaa !127
  %719 = getelementptr inbounds %class.spatial_region, ptr %46, i32 0, i32 0
  %720 = load i32, ptr %719, align 8, !tbaa !131
  %721 = icmp slt i32 %718, %720
  br i1 %721, label %723, label %722

722:                                              ; preds = %717
  store i32 53, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #9
  br label %834

723:                                              ; preds = %717
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #9
  store i32 0, ptr %29, align 4, !tbaa !127
  br label %724

724:                                              ; preds = %827, %723
  %725 = load i32, ptr %29, align 4, !tbaa !127
  %726 = getelementptr inbounds %class.spatial_region, ptr %46, i32 0, i32 1
  %727 = load i32, ptr %726, align 4, !tbaa !132
  %728 = icmp slt i32 %725, %727
  br i1 %728, label %730, label %729

729:                                              ; preds = %724
  store i32 56, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #9
  br label %830

730:                                              ; preds = %724
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #9
  store i32 0, ptr %30, align 4, !tbaa !127
  br label %731

731:                                              ; preds = %823, %730
  %732 = load i32, ptr %30, align 4, !tbaa !127
  %733 = getelementptr inbounds %class.spatial_region, ptr %46, i32 0, i32 2
  %734 = load i32, ptr %733, align 8, !tbaa !133
  %735 = icmp slt i32 %732, %734
  br i1 %735, label %737, label %736

736:                                              ; preds = %731
  store i32 59, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #9
  br label %826

737:                                              ; preds = %731
  %738 = getelementptr inbounds %class.spatial_region, ptr %46, i32 0, i32 50
  %739 = load i32, ptr %28, align 4, !tbaa !127
  %740 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5cellpEixEi(ptr noundef nonnull align 8 dereferenceable(40) %738, i32 noundef %739)
  %741 = load ptr, ptr %740, align 8, !tbaa !5
  %742 = load i32, ptr %29, align 4, !tbaa !127
  %743 = sext i32 %742 to i64
  %744 = getelementptr inbounds ptr, ptr %741, i64 %743
  %745 = load ptr, ptr %744, align 8, !tbaa !5
  %746 = load i32, ptr %30, align 4, !tbaa !127
  %747 = sext i32 %746 to i64
  %748 = getelementptr inbounds %struct.cellp, ptr %745, i64 %747
  %749 = getelementptr inbounds %struct.cellp, ptr %748, i32 0, i32 0
  %750 = getelementptr inbounds %class.plist, ptr %749, i32 0, i32 0
  %751 = load ptr, ptr %750, align 8, !tbaa !134
  store ptr %751, ptr %7, align 8, !tbaa !5
  br label %752

752:                                              ; preds = %818, %737
  %753 = load ptr, ptr %7, align 8, !tbaa !5
  %754 = icmp ne ptr %753, null
  br i1 %754, label %755, label %822

755:                                              ; preds = %752
  %756 = load ptr, ptr %7, align 8, !tbaa !5
  %757 = getelementptr inbounds %struct.particle, ptr %756, i32 0, i32 8
  %758 = load double, ptr %757, align 8, !tbaa !137
  %759 = fcmp oeq double %758, -1.000000e+00
  br i1 %759, label %760, label %765

760:                                              ; preds = %755
  %761 = load ptr, ptr %26, align 8, !tbaa !5
  %762 = getelementptr inbounds double, ptr %761, i64 0
  %763 = load double, ptr %762, align 8, !tbaa !128
  %764 = fadd double %763, 1.000000e+00
  store double %764, ptr %762, align 8, !tbaa !128
  br label %818

765:                                              ; preds = %755
  %766 = load ptr, ptr %7, align 8, !tbaa !5
  %767 = getelementptr inbounds %struct.particle, ptr %766, i32 0, i32 8
  %768 = load double, ptr %767, align 8, !tbaa !137
  %769 = fcmp oeq double %768, 1.000000e+00
  br i1 %769, label %770, label %775

770:                                              ; preds = %765
  %771 = load ptr, ptr %26, align 8, !tbaa !5
  %772 = getelementptr inbounds double, ptr %771, i64 1
  %773 = load double, ptr %772, align 8, !tbaa !128
  %774 = fadd double %773, 1.000000e+00
  store double %774, ptr %772, align 8, !tbaa !128
  br label %817

775:                                              ; preds = %765
  %776 = load ptr, ptr %7, align 8, !tbaa !5
  %777 = getelementptr inbounds %struct.particle, ptr %776, i32 0, i32 8
  %778 = load double, ptr %777, align 8, !tbaa !137
  %779 = fcmp oeq double %778, 0.000000e+00
  br i1 %779, label %780, label %785

780:                                              ; preds = %775
  %781 = load ptr, ptr %26, align 8, !tbaa !5
  %782 = getelementptr inbounds double, ptr %781, i64 2
  %783 = load double, ptr %782, align 8, !tbaa !128
  %784 = fadd double %783, 1.000000e+00
  store double %784, ptr %782, align 8, !tbaa !128
  br label %816

785:                                              ; preds = %775
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #9
  store i32 0, ptr %31, align 4, !tbaa !127
  br label %786

786:                                              ; preds = %812, %785
  %787 = load i32, ptr %31, align 4, !tbaa !127
  %788 = getelementptr inbounds %class.spatial_region, ptr %46, i32 0, i32 14
  %789 = load i32, ptr %788, align 8, !tbaa !9
  %790 = icmp slt i32 %787, %789
  br i1 %790, label %792, label %791

791:                                              ; preds = %786
  store i32 64, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #9
  br label %815

792:                                              ; preds = %786
  %793 = load ptr, ptr %7, align 8, !tbaa !5
  %794 = getelementptr inbounds %struct.particle, ptr %793, i32 0, i32 8
  %795 = load double, ptr %794, align 8, !tbaa !137
  %796 = getelementptr inbounds %class.spatial_region, ptr %46, i32 0, i32 15
  %797 = load ptr, ptr %796, align 8, !tbaa !140
  %798 = load i32, ptr %31, align 4, !tbaa !127
  %799 = sext i32 %798 to i64
  %800 = getelementptr inbounds double, ptr %797, i64 %799
  %801 = load double, ptr %800, align 8, !tbaa !128
  %802 = fcmp oeq double %795, %801
  br i1 %802, label %803, label %811

803:                                              ; preds = %792
  %804 = load ptr, ptr %26, align 8, !tbaa !5
  %805 = load i32, ptr %31, align 4, !tbaa !127
  %806 = add nsw i32 3, %805
  %807 = sext i32 %806 to i64
  %808 = getelementptr inbounds double, ptr %804, i64 %807
  %809 = load double, ptr %808, align 8, !tbaa !128
  %810 = fadd double %809, 1.000000e+00
  store double %810, ptr %808, align 8, !tbaa !128
  br label %811

811:                                              ; preds = %803, %792
  br label %812

812:                                              ; preds = %811
  %813 = load i32, ptr %31, align 4, !tbaa !127
  %814 = add nsw i32 %813, 1
  store i32 %814, ptr %31, align 4, !tbaa !127
  br label %786, !llvm.loop !161

815:                                              ; preds = %791
  br label %816

816:                                              ; preds = %815, %780
  br label %817

817:                                              ; preds = %816, %770
  br label %818

818:                                              ; preds = %817, %760
  %819 = load ptr, ptr %7, align 8, !tbaa !5
  %820 = getelementptr inbounds %struct.particle, ptr %819, i32 0, i32 11
  %821 = load ptr, ptr %820, align 8, !tbaa !142
  store ptr %821, ptr %7, align 8, !tbaa !5
  br label %752, !llvm.loop !162

822:                                              ; preds = %752
  br label %823

823:                                              ; preds = %822
  %824 = load i32, ptr %30, align 4, !tbaa !127
  %825 = add nsw i32 %824, 1
  store i32 %825, ptr %30, align 4, !tbaa !127
  br label %731, !llvm.loop !163

826:                                              ; preds = %736
  br label %827

827:                                              ; preds = %826
  %828 = load i32, ptr %29, align 4, !tbaa !127
  %829 = add nsw i32 %828, 1
  store i32 %829, ptr %29, align 4, !tbaa !127
  br label %724, !llvm.loop !164

830:                                              ; preds = %729
  br label %831

831:                                              ; preds = %830
  %832 = load i32, ptr %28, align 4, !tbaa !127
  %833 = add nsw i32 %832, 1
  store i32 %833, ptr %28, align 4, !tbaa !127
  br label %717, !llvm.loop !165

834:                                              ; preds = %722
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #9
  store i32 0, ptr %32, align 4, !tbaa !127
  br label %835

835:                                              ; preds = %858, %834
  %836 = load i32, ptr %32, align 4, !tbaa !127
  %837 = getelementptr inbounds %class.spatial_region, ptr %46, i32 0, i32 14
  %838 = load i32, ptr %837, align 8, !tbaa !9
  %839 = add nsw i32 3, %838
  %840 = icmp slt i32 %836, %839
  br i1 %840, label %842, label %841

841:                                              ; preds = %835
  store i32 67, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #9
  br label %861

842:                                              ; preds = %835
  %843 = load ptr, ptr %10, align 8, !tbaa !5
  %844 = load i32, ptr %32, align 4, !tbaa !127
  %845 = sext i32 %844 to i64
  %846 = getelementptr inbounds double, ptr %843, i64 %845
  %847 = load double, ptr %846, align 8, !tbaa !128
  %848 = load ptr, ptr %26, align 8, !tbaa !5
  %849 = load i32, ptr %32, align 4, !tbaa !127
  %850 = sext i32 %849 to i64
  %851 = getelementptr inbounds double, ptr %848, i64 %850
  %852 = load double, ptr %851, align 8, !tbaa !128
  %853 = fdiv double %847, %852
  %854 = load ptr, ptr %26, align 8, !tbaa !5
  %855 = load i32, ptr %32, align 4, !tbaa !127
  %856 = sext i32 %855 to i64
  %857 = getelementptr inbounds double, ptr %854, i64 %856
  store double %853, ptr %857, align 8, !tbaa !128
  br label %858

858:                                              ; preds = %842
  %859 = load i32, ptr %32, align 4, !tbaa !127
  %860 = add nsw i32 %859, 1
  store i32 %860, ptr %32, align 4, !tbaa !127
  br label %835, !llvm.loop !166

861:                                              ; preds = %841
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #9
  store i32 0, ptr %33, align 4, !tbaa !127
  br label %862

862:                                              ; preds = %1265, %861
  %863 = load i32, ptr %33, align 4, !tbaa !127
  %864 = getelementptr inbounds %class.spatial_region, ptr %46, i32 0, i32 0
  %865 = load i32, ptr %864, align 8, !tbaa !131
  %866 = icmp slt i32 %863, %865
  br i1 %866, label %868, label %867

867:                                              ; preds = %862
  store i32 70, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #9
  br label %1268

868:                                              ; preds = %862
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #9
  store i32 0, ptr %34, align 4, !tbaa !127
  br label %869

869:                                              ; preds = %1261, %868
  %870 = load i32, ptr %34, align 4, !tbaa !127
  %871 = getelementptr inbounds %class.spatial_region, ptr %46, i32 0, i32 1
  %872 = load i32, ptr %871, align 4, !tbaa !132
  %873 = icmp slt i32 %870, %872
  br i1 %873, label %875, label %874

874:                                              ; preds = %869
  store i32 73, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #9
  br label %1264

875:                                              ; preds = %869
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #9
  store i32 0, ptr %35, align 4, !tbaa !127
  br label %876

876:                                              ; preds = %1257, %875
  %877 = load i32, ptr %35, align 4, !tbaa !127
  %878 = getelementptr inbounds %class.spatial_region, ptr %46, i32 0, i32 2
  %879 = load i32, ptr %878, align 8, !tbaa !133
  %880 = icmp slt i32 %877, %879
  br i1 %880, label %882, label %881

881:                                              ; preds = %876
  store i32 76, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #9
  br label %1260

882:                                              ; preds = %876
  %883 = getelementptr inbounds %class.spatial_region, ptr %46, i32 0, i32 50
  %884 = load i32, ptr %33, align 4, !tbaa !127
  %885 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5cellpEixEi(ptr noundef nonnull align 8 dereferenceable(40) %883, i32 noundef %884)
  %886 = load ptr, ptr %885, align 8, !tbaa !5
  %887 = load i32, ptr %34, align 4, !tbaa !127
  %888 = sext i32 %887 to i64
  %889 = getelementptr inbounds ptr, ptr %886, i64 %888
  %890 = load ptr, ptr %889, align 8, !tbaa !5
  %891 = load i32, ptr %35, align 4, !tbaa !127
  %892 = sext i32 %891 to i64
  %893 = getelementptr inbounds %struct.cellp, ptr %890, i64 %892
  %894 = getelementptr inbounds %struct.cellp, ptr %893, i32 0, i32 0
  %895 = getelementptr inbounds %class.plist, ptr %894, i32 0, i32 0
  %896 = load ptr, ptr %895, align 8, !tbaa !134
  store ptr %896, ptr %7, align 8, !tbaa !5
  br label %897

897:                                              ; preds = %1254, %882
  %898 = load ptr, ptr %7, align 8, !tbaa !5
  %899 = icmp ne ptr %898, null
  br i1 %899, label %900, label %1256

900:                                              ; preds = %897
  %901 = load ptr, ptr %7, align 8, !tbaa !5
  %902 = getelementptr inbounds %struct.particle, ptr %901, i32 0, i32 11
  %903 = load ptr, ptr %902, align 8, !tbaa !142
  store ptr %903, ptr %8, align 8, !tbaa !5
  %904 = load ptr, ptr %7, align 8, !tbaa !5
  %905 = getelementptr inbounds %struct.particle, ptr %904, i32 0, i32 8
  %906 = load double, ptr %905, align 8, !tbaa !137
  %907 = fcmp oeq double %906, -1.000000e+00
  br i1 %907, label %908, label %985

908:                                              ; preds = %900
  %909 = call noundef double @_ZN14spatial_region8get_randEv(ptr noundef nonnull align 8 dereferenceable(608) %46)
  %910 = load ptr, ptr %5, align 8, !tbaa !5
  %911 = getelementptr inbounds double, ptr %910, i64 0
  %912 = load double, ptr %911, align 8, !tbaa !128
  %913 = load ptr, ptr %7, align 8, !tbaa !5
  %914 = getelementptr inbounds %struct.particle, ptr %913, i32 0, i32 7
  %915 = load double, ptr %914, align 8, !tbaa !139
  %916 = fneg double %915
  %917 = load ptr, ptr %26, align 8, !tbaa !5
  %918 = getelementptr inbounds double, ptr %917, i64 0
  %919 = load double, ptr %918, align 8, !tbaa !128
  %920 = call noundef double @_ZN14spatial_region4_ppdEdd(ptr noundef nonnull align 8 dereferenceable(608) %46, double noundef %916, double noundef %919)
  %921 = fmul double %912, %920
  %922 = fcmp olt double %909, %921
  br i1 %922, label %923, label %984

923:                                              ; preds = %908
  %924 = load ptr, ptr %7, align 8, !tbaa !5
  %925 = getelementptr inbounds %struct.particle, ptr %924, i32 0, i32 11
  %926 = load ptr, ptr %925, align 8, !tbaa !142
  %927 = icmp ne ptr %926, null
  br i1 %927, label %928, label %936

928:                                              ; preds = %923
  %929 = load ptr, ptr %7, align 8, !tbaa !5
  %930 = getelementptr inbounds %struct.particle, ptr %929, i32 0, i32 12
  %931 = load ptr, ptr %930, align 8, !tbaa !148
  %932 = load ptr, ptr %7, align 8, !tbaa !5
  %933 = getelementptr inbounds %struct.particle, ptr %932, i32 0, i32 11
  %934 = load ptr, ptr %933, align 8, !tbaa !142
  %935 = getelementptr inbounds %struct.particle, ptr %934, i32 0, i32 12
  store ptr %931, ptr %935, align 8, !tbaa !148
  br label %936

936:                                              ; preds = %928, %923
  %937 = load ptr, ptr %7, align 8, !tbaa !5
  %938 = getelementptr inbounds %struct.particle, ptr %937, i32 0, i32 12
  %939 = load ptr, ptr %938, align 8, !tbaa !148
  %940 = icmp ne ptr %939, null
  br i1 %940, label %941, label %949

941:                                              ; preds = %936
  %942 = load ptr, ptr %7, align 8, !tbaa !5
  %943 = getelementptr inbounds %struct.particle, ptr %942, i32 0, i32 11
  %944 = load ptr, ptr %943, align 8, !tbaa !142
  %945 = load ptr, ptr %7, align 8, !tbaa !5
  %946 = getelementptr inbounds %struct.particle, ptr %945, i32 0, i32 12
  %947 = load ptr, ptr %946, align 8, !tbaa !148
  %948 = getelementptr inbounds %struct.particle, ptr %947, i32 0, i32 11
  store ptr %944, ptr %948, align 8, !tbaa !142
  br label %982

949:                                              ; preds = %936
  %950 = load ptr, ptr %7, align 8, !tbaa !5
  %951 = getelementptr inbounds %struct.particle, ptr %950, i32 0, i32 11
  %952 = load ptr, ptr %951, align 8, !tbaa !142
  %953 = getelementptr inbounds %class.spatial_region, ptr %46, i32 0, i32 50
  %954 = load i32, ptr %33, align 4, !tbaa !127
  %955 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5cellpEixEi(ptr noundef nonnull align 8 dereferenceable(40) %953, i32 noundef %954)
  %956 = load ptr, ptr %955, align 8, !tbaa !5
  %957 = load i32, ptr %34, align 4, !tbaa !127
  %958 = sext i32 %957 to i64
  %959 = getelementptr inbounds ptr, ptr %956, i64 %958
  %960 = load ptr, ptr %959, align 8, !tbaa !5
  %961 = load i32, ptr %35, align 4, !tbaa !127
  %962 = sext i32 %961 to i64
  %963 = getelementptr inbounds %struct.cellp, ptr %960, i64 %962
  %964 = getelementptr inbounds %struct.cellp, ptr %963, i32 0, i32 0
  %965 = getelementptr inbounds %class.plist, ptr %964, i32 0, i32 0
  store ptr %952, ptr %965, align 8, !tbaa !134
  %966 = load ptr, ptr %7, align 8, !tbaa !5
  %967 = getelementptr inbounds %struct.particle, ptr %966, i32 0, i32 11
  %968 = load ptr, ptr %967, align 8, !tbaa !142
  %969 = getelementptr inbounds %class.spatial_region, ptr %46, i32 0, i32 50
  %970 = load i32, ptr %33, align 4, !tbaa !127
  %971 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5cellpEixEi(ptr noundef nonnull align 8 dereferenceable(40) %969, i32 noundef %970)
  %972 = load ptr, ptr %971, align 8, !tbaa !5
  %973 = load i32, ptr %34, align 4, !tbaa !127
  %974 = sext i32 %973 to i64
  %975 = getelementptr inbounds ptr, ptr %972, i64 %974
  %976 = load ptr, ptr %975, align 8, !tbaa !5
  %977 = load i32, ptr %35, align 4, !tbaa !127
  %978 = sext i32 %977 to i64
  %979 = getelementptr inbounds %struct.cellp, ptr %976, i64 %978
  %980 = getelementptr inbounds %struct.cellp, ptr %979, i32 0, i32 0
  %981 = getelementptr inbounds %class.plist, ptr %980, i32 0, i32 1
  store ptr %968, ptr %981, align 8, !tbaa !149
  br label %982

982:                                              ; preds = %949, %941
  %983 = load ptr, ptr %7, align 8, !tbaa !5
  call void @_ZN14spatial_region15delete_particleEP8particleb(ptr noundef nonnull align 8 dereferenceable(608) %46, ptr noundef %983, i1 noundef zeroext false)
  br label %984

984:                                              ; preds = %982, %908
  br label %1254

985:                                              ; preds = %900
  %986 = load ptr, ptr %7, align 8, !tbaa !5
  %987 = getelementptr inbounds %struct.particle, ptr %986, i32 0, i32 8
  %988 = load double, ptr %987, align 8, !tbaa !137
  %989 = fcmp oeq double %988, 1.000000e+00
  br i1 %989, label %990, label %1066

990:                                              ; preds = %985
  %991 = call noundef double @_ZN14spatial_region8get_randEv(ptr noundef nonnull align 8 dereferenceable(608) %46)
  %992 = load ptr, ptr %5, align 8, !tbaa !5
  %993 = getelementptr inbounds double, ptr %992, i64 1
  %994 = load double, ptr %993, align 8, !tbaa !128
  %995 = load ptr, ptr %7, align 8, !tbaa !5
  %996 = getelementptr inbounds %struct.particle, ptr %995, i32 0, i32 7
  %997 = load double, ptr %996, align 8, !tbaa !139
  %998 = load ptr, ptr %26, align 8, !tbaa !5
  %999 = getelementptr inbounds double, ptr %998, i64 1
  %1000 = load double, ptr %999, align 8, !tbaa !128
  %1001 = call noundef double @_ZN14spatial_region4_ppdEdd(ptr noundef nonnull align 8 dereferenceable(608) %46, double noundef %997, double noundef %1000)
  %1002 = fmul double %994, %1001
  %1003 = fcmp olt double %991, %1002
  br i1 %1003, label %1004, label %1065

1004:                                             ; preds = %990
  %1005 = load ptr, ptr %7, align 8, !tbaa !5
  %1006 = getelementptr inbounds %struct.particle, ptr %1005, i32 0, i32 11
  %1007 = load ptr, ptr %1006, align 8, !tbaa !142
  %1008 = icmp ne ptr %1007, null
  br i1 %1008, label %1009, label %1017

1009:                                             ; preds = %1004
  %1010 = load ptr, ptr %7, align 8, !tbaa !5
  %1011 = getelementptr inbounds %struct.particle, ptr %1010, i32 0, i32 12
  %1012 = load ptr, ptr %1011, align 8, !tbaa !148
  %1013 = load ptr, ptr %7, align 8, !tbaa !5
  %1014 = getelementptr inbounds %struct.particle, ptr %1013, i32 0, i32 11
  %1015 = load ptr, ptr %1014, align 8, !tbaa !142
  %1016 = getelementptr inbounds %struct.particle, ptr %1015, i32 0, i32 12
  store ptr %1012, ptr %1016, align 8, !tbaa !148
  br label %1017

1017:                                             ; preds = %1009, %1004
  %1018 = load ptr, ptr %7, align 8, !tbaa !5
  %1019 = getelementptr inbounds %struct.particle, ptr %1018, i32 0, i32 12
  %1020 = load ptr, ptr %1019, align 8, !tbaa !148
  %1021 = icmp ne ptr %1020, null
  br i1 %1021, label %1022, label %1030

1022:                                             ; preds = %1017
  %1023 = load ptr, ptr %7, align 8, !tbaa !5
  %1024 = getelementptr inbounds %struct.particle, ptr %1023, i32 0, i32 11
  %1025 = load ptr, ptr %1024, align 8, !tbaa !142
  %1026 = load ptr, ptr %7, align 8, !tbaa !5
  %1027 = getelementptr inbounds %struct.particle, ptr %1026, i32 0, i32 12
  %1028 = load ptr, ptr %1027, align 8, !tbaa !148
  %1029 = getelementptr inbounds %struct.particle, ptr %1028, i32 0, i32 11
  store ptr %1025, ptr %1029, align 8, !tbaa !142
  br label %1063

1030:                                             ; preds = %1017
  %1031 = load ptr, ptr %7, align 8, !tbaa !5
  %1032 = getelementptr inbounds %struct.particle, ptr %1031, i32 0, i32 11
  %1033 = load ptr, ptr %1032, align 8, !tbaa !142
  %1034 = getelementptr inbounds %class.spatial_region, ptr %46, i32 0, i32 50
  %1035 = load i32, ptr %33, align 4, !tbaa !127
  %1036 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5cellpEixEi(ptr noundef nonnull align 8 dereferenceable(40) %1034, i32 noundef %1035)
  %1037 = load ptr, ptr %1036, align 8, !tbaa !5
  %1038 = load i32, ptr %34, align 4, !tbaa !127
  %1039 = sext i32 %1038 to i64
  %1040 = getelementptr inbounds ptr, ptr %1037, i64 %1039
  %1041 = load ptr, ptr %1040, align 8, !tbaa !5
  %1042 = load i32, ptr %35, align 4, !tbaa !127
  %1043 = sext i32 %1042 to i64
  %1044 = getelementptr inbounds %struct.cellp, ptr %1041, i64 %1043
  %1045 = getelementptr inbounds %struct.cellp, ptr %1044, i32 0, i32 0
  %1046 = getelementptr inbounds %class.plist, ptr %1045, i32 0, i32 0
  store ptr %1033, ptr %1046, align 8, !tbaa !134
  %1047 = load ptr, ptr %7, align 8, !tbaa !5
  %1048 = getelementptr inbounds %struct.particle, ptr %1047, i32 0, i32 11
  %1049 = load ptr, ptr %1048, align 8, !tbaa !142
  %1050 = getelementptr inbounds %class.spatial_region, ptr %46, i32 0, i32 50
  %1051 = load i32, ptr %33, align 4, !tbaa !127
  %1052 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5cellpEixEi(ptr noundef nonnull align 8 dereferenceable(40) %1050, i32 noundef %1051)
  %1053 = load ptr, ptr %1052, align 8, !tbaa !5
  %1054 = load i32, ptr %34, align 4, !tbaa !127
  %1055 = sext i32 %1054 to i64
  %1056 = getelementptr inbounds ptr, ptr %1053, i64 %1055
  %1057 = load ptr, ptr %1056, align 8, !tbaa !5
  %1058 = load i32, ptr %35, align 4, !tbaa !127
  %1059 = sext i32 %1058 to i64
  %1060 = getelementptr inbounds %struct.cellp, ptr %1057, i64 %1059
  %1061 = getelementptr inbounds %struct.cellp, ptr %1060, i32 0, i32 0
  %1062 = getelementptr inbounds %class.plist, ptr %1061, i32 0, i32 1
  store ptr %1049, ptr %1062, align 8, !tbaa !149
  br label %1063

1063:                                             ; preds = %1030, %1022
  %1064 = load ptr, ptr %7, align 8, !tbaa !5
  call void @_ZN14spatial_region15delete_particleEP8particleb(ptr noundef nonnull align 8 dereferenceable(608) %46, ptr noundef %1064, i1 noundef zeroext false)
  br label %1065

1065:                                             ; preds = %1063, %990
  br label %1253

1066:                                             ; preds = %985
  %1067 = load ptr, ptr %7, align 8, !tbaa !5
  %1068 = getelementptr inbounds %struct.particle, ptr %1067, i32 0, i32 8
  %1069 = load double, ptr %1068, align 8, !tbaa !137
  %1070 = fcmp oeq double %1069, 0.000000e+00
  br i1 %1070, label %1071, label %1147

1071:                                             ; preds = %1066
  %1072 = call noundef double @_ZN14spatial_region8get_randEv(ptr noundef nonnull align 8 dereferenceable(608) %46)
  %1073 = load ptr, ptr %5, align 8, !tbaa !5
  %1074 = getelementptr inbounds double, ptr %1073, i64 2
  %1075 = load double, ptr %1074, align 8, !tbaa !128
  %1076 = load ptr, ptr %7, align 8, !tbaa !5
  %1077 = getelementptr inbounds %struct.particle, ptr %1076, i32 0, i32 7
  %1078 = load double, ptr %1077, align 8, !tbaa !139
  %1079 = load ptr, ptr %26, align 8, !tbaa !5
  %1080 = getelementptr inbounds double, ptr %1079, i64 2
  %1081 = load double, ptr %1080, align 8, !tbaa !128
  %1082 = call noundef double @_ZN14spatial_region4_ppdEdd(ptr noundef nonnull align 8 dereferenceable(608) %46, double noundef %1078, double noundef %1081)
  %1083 = fmul double %1075, %1082
  %1084 = fcmp olt double %1072, %1083
  br i1 %1084, label %1085, label %1146

1085:                                             ; preds = %1071
  %1086 = load ptr, ptr %7, align 8, !tbaa !5
  %1087 = getelementptr inbounds %struct.particle, ptr %1086, i32 0, i32 11
  %1088 = load ptr, ptr %1087, align 8, !tbaa !142
  %1089 = icmp ne ptr %1088, null
  br i1 %1089, label %1090, label %1098

1090:                                             ; preds = %1085
  %1091 = load ptr, ptr %7, align 8, !tbaa !5
  %1092 = getelementptr inbounds %struct.particle, ptr %1091, i32 0, i32 12
  %1093 = load ptr, ptr %1092, align 8, !tbaa !148
  %1094 = load ptr, ptr %7, align 8, !tbaa !5
  %1095 = getelementptr inbounds %struct.particle, ptr %1094, i32 0, i32 11
  %1096 = load ptr, ptr %1095, align 8, !tbaa !142
  %1097 = getelementptr inbounds %struct.particle, ptr %1096, i32 0, i32 12
  store ptr %1093, ptr %1097, align 8, !tbaa !148
  br label %1098

1098:                                             ; preds = %1090, %1085
  %1099 = load ptr, ptr %7, align 8, !tbaa !5
  %1100 = getelementptr inbounds %struct.particle, ptr %1099, i32 0, i32 12
  %1101 = load ptr, ptr %1100, align 8, !tbaa !148
  %1102 = icmp ne ptr %1101, null
  br i1 %1102, label %1103, label %1111

1103:                                             ; preds = %1098
  %1104 = load ptr, ptr %7, align 8, !tbaa !5
  %1105 = getelementptr inbounds %struct.particle, ptr %1104, i32 0, i32 11
  %1106 = load ptr, ptr %1105, align 8, !tbaa !142
  %1107 = load ptr, ptr %7, align 8, !tbaa !5
  %1108 = getelementptr inbounds %struct.particle, ptr %1107, i32 0, i32 12
  %1109 = load ptr, ptr %1108, align 8, !tbaa !148
  %1110 = getelementptr inbounds %struct.particle, ptr %1109, i32 0, i32 11
  store ptr %1106, ptr %1110, align 8, !tbaa !142
  br label %1144

1111:                                             ; preds = %1098
  %1112 = load ptr, ptr %7, align 8, !tbaa !5
  %1113 = getelementptr inbounds %struct.particle, ptr %1112, i32 0, i32 11
  %1114 = load ptr, ptr %1113, align 8, !tbaa !142
  %1115 = getelementptr inbounds %class.spatial_region, ptr %46, i32 0, i32 50
  %1116 = load i32, ptr %33, align 4, !tbaa !127
  %1117 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5cellpEixEi(ptr noundef nonnull align 8 dereferenceable(40) %1115, i32 noundef %1116)
  %1118 = load ptr, ptr %1117, align 8, !tbaa !5
  %1119 = load i32, ptr %34, align 4, !tbaa !127
  %1120 = sext i32 %1119 to i64
  %1121 = getelementptr inbounds ptr, ptr %1118, i64 %1120
  %1122 = load ptr, ptr %1121, align 8, !tbaa !5
  %1123 = load i32, ptr %35, align 4, !tbaa !127
  %1124 = sext i32 %1123 to i64
  %1125 = getelementptr inbounds %struct.cellp, ptr %1122, i64 %1124
  %1126 = getelementptr inbounds %struct.cellp, ptr %1125, i32 0, i32 0
  %1127 = getelementptr inbounds %class.plist, ptr %1126, i32 0, i32 0
  store ptr %1114, ptr %1127, align 8, !tbaa !134
  %1128 = load ptr, ptr %7, align 8, !tbaa !5
  %1129 = getelementptr inbounds %struct.particle, ptr %1128, i32 0, i32 11
  %1130 = load ptr, ptr %1129, align 8, !tbaa !142
  %1131 = getelementptr inbounds %class.spatial_region, ptr %46, i32 0, i32 50
  %1132 = load i32, ptr %33, align 4, !tbaa !127
  %1133 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5cellpEixEi(ptr noundef nonnull align 8 dereferenceable(40) %1131, i32 noundef %1132)
  %1134 = load ptr, ptr %1133, align 8, !tbaa !5
  %1135 = load i32, ptr %34, align 4, !tbaa !127
  %1136 = sext i32 %1135 to i64
  %1137 = getelementptr inbounds ptr, ptr %1134, i64 %1136
  %1138 = load ptr, ptr %1137, align 8, !tbaa !5
  %1139 = load i32, ptr %35, align 4, !tbaa !127
  %1140 = sext i32 %1139 to i64
  %1141 = getelementptr inbounds %struct.cellp, ptr %1138, i64 %1140
  %1142 = getelementptr inbounds %struct.cellp, ptr %1141, i32 0, i32 0
  %1143 = getelementptr inbounds %class.plist, ptr %1142, i32 0, i32 1
  store ptr %1130, ptr %1143, align 8, !tbaa !149
  br label %1144

1144:                                             ; preds = %1111, %1103
  %1145 = load ptr, ptr %7, align 8, !tbaa !5
  call void @_ZN14spatial_region15delete_particleEP8particleb(ptr noundef nonnull align 8 dereferenceable(608) %46, ptr noundef %1145, i1 noundef zeroext false)
  br label %1146

1146:                                             ; preds = %1144, %1071
  br label %1252

1147:                                             ; preds = %1066
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #9
  store i32 0, ptr %36, align 4, !tbaa !127
  br label %1148

1148:                                             ; preds = %1248, %1147
  %1149 = load i32, ptr %36, align 4, !tbaa !127
  %1150 = getelementptr inbounds %class.spatial_region, ptr %46, i32 0, i32 14
  %1151 = load i32, ptr %1150, align 8, !tbaa !9
  %1152 = icmp slt i32 %1149, %1151
  br i1 %1152, label %1154, label %1153

1153:                                             ; preds = %1148
  store i32 81, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #9
  br label %1251

1154:                                             ; preds = %1148
  %1155 = load ptr, ptr %7, align 8, !tbaa !5
  %1156 = getelementptr inbounds %struct.particle, ptr %1155, i32 0, i32 8
  %1157 = load double, ptr %1156, align 8, !tbaa !137
  %1158 = getelementptr inbounds %class.spatial_region, ptr %46, i32 0, i32 15
  %1159 = load ptr, ptr %1158, align 8, !tbaa !140
  %1160 = load i32, ptr %36, align 4, !tbaa !127
  %1161 = sext i32 %1160 to i64
  %1162 = getelementptr inbounds double, ptr %1159, i64 %1161
  %1163 = load double, ptr %1162, align 8, !tbaa !128
  %1164 = fcmp oeq double %1157, %1163
  br i1 %1164, label %1165, label %1247

1165:                                             ; preds = %1154
  %1166 = call noundef double @_ZN14spatial_region8get_randEv(ptr noundef nonnull align 8 dereferenceable(608) %46)
  %1167 = load ptr, ptr %5, align 8, !tbaa !5
  %1168 = load i32, ptr %36, align 4, !tbaa !127
  %1169 = add nsw i32 3, %1168
  %1170 = sext i32 %1169 to i64
  %1171 = getelementptr inbounds double, ptr %1167, i64 %1170
  %1172 = load double, ptr %1171, align 8, !tbaa !128
  %1173 = load ptr, ptr %7, align 8, !tbaa !5
  %1174 = getelementptr inbounds %struct.particle, ptr %1173, i32 0, i32 7
  %1175 = load double, ptr %1174, align 8, !tbaa !139
  %1176 = load ptr, ptr %26, align 8, !tbaa !5
  %1177 = load i32, ptr %36, align 4, !tbaa !127
  %1178 = add nsw i32 3, %1177
  %1179 = sext i32 %1178 to i64
  %1180 = getelementptr inbounds double, ptr %1176, i64 %1179
  %1181 = load double, ptr %1180, align 8, !tbaa !128
  %1182 = call noundef double @_ZN14spatial_region4_ppdEdd(ptr noundef nonnull align 8 dereferenceable(608) %46, double noundef %1175, double noundef %1181)
  %1183 = fmul double %1172, %1182
  %1184 = fcmp olt double %1166, %1183
  br i1 %1184, label %1185, label %1246

1185:                                             ; preds = %1165
  %1186 = load ptr, ptr %7, align 8, !tbaa !5
  %1187 = getelementptr inbounds %struct.particle, ptr %1186, i32 0, i32 11
  %1188 = load ptr, ptr %1187, align 8, !tbaa !142
  %1189 = icmp ne ptr %1188, null
  br i1 %1189, label %1190, label %1198

1190:                                             ; preds = %1185
  %1191 = load ptr, ptr %7, align 8, !tbaa !5
  %1192 = getelementptr inbounds %struct.particle, ptr %1191, i32 0, i32 12
  %1193 = load ptr, ptr %1192, align 8, !tbaa !148
  %1194 = load ptr, ptr %7, align 8, !tbaa !5
  %1195 = getelementptr inbounds %struct.particle, ptr %1194, i32 0, i32 11
  %1196 = load ptr, ptr %1195, align 8, !tbaa !142
  %1197 = getelementptr inbounds %struct.particle, ptr %1196, i32 0, i32 12
  store ptr %1193, ptr %1197, align 8, !tbaa !148
  br label %1198

1198:                                             ; preds = %1190, %1185
  %1199 = load ptr, ptr %7, align 8, !tbaa !5
  %1200 = getelementptr inbounds %struct.particle, ptr %1199, i32 0, i32 12
  %1201 = load ptr, ptr %1200, align 8, !tbaa !148
  %1202 = icmp ne ptr %1201, null
  br i1 %1202, label %1203, label %1211

1203:                                             ; preds = %1198
  %1204 = load ptr, ptr %7, align 8, !tbaa !5
  %1205 = getelementptr inbounds %struct.particle, ptr %1204, i32 0, i32 11
  %1206 = load ptr, ptr %1205, align 8, !tbaa !142
  %1207 = load ptr, ptr %7, align 8, !tbaa !5
  %1208 = getelementptr inbounds %struct.particle, ptr %1207, i32 0, i32 12
  %1209 = load ptr, ptr %1208, align 8, !tbaa !148
  %1210 = getelementptr inbounds %struct.particle, ptr %1209, i32 0, i32 11
  store ptr %1206, ptr %1210, align 8, !tbaa !142
  br label %1244

1211:                                             ; preds = %1198
  %1212 = load ptr, ptr %7, align 8, !tbaa !5
  %1213 = getelementptr inbounds %struct.particle, ptr %1212, i32 0, i32 11
  %1214 = load ptr, ptr %1213, align 8, !tbaa !142
  %1215 = getelementptr inbounds %class.spatial_region, ptr %46, i32 0, i32 50
  %1216 = load i32, ptr %33, align 4, !tbaa !127
  %1217 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5cellpEixEi(ptr noundef nonnull align 8 dereferenceable(40) %1215, i32 noundef %1216)
  %1218 = load ptr, ptr %1217, align 8, !tbaa !5
  %1219 = load i32, ptr %34, align 4, !tbaa !127
  %1220 = sext i32 %1219 to i64
  %1221 = getelementptr inbounds ptr, ptr %1218, i64 %1220
  %1222 = load ptr, ptr %1221, align 8, !tbaa !5
  %1223 = load i32, ptr %35, align 4, !tbaa !127
  %1224 = sext i32 %1223 to i64
  %1225 = getelementptr inbounds %struct.cellp, ptr %1222, i64 %1224
  %1226 = getelementptr inbounds %struct.cellp, ptr %1225, i32 0, i32 0
  %1227 = getelementptr inbounds %class.plist, ptr %1226, i32 0, i32 0
  store ptr %1214, ptr %1227, align 8, !tbaa !134
  %1228 = load ptr, ptr %7, align 8, !tbaa !5
  %1229 = getelementptr inbounds %struct.particle, ptr %1228, i32 0, i32 11
  %1230 = load ptr, ptr %1229, align 8, !tbaa !142
  %1231 = getelementptr inbounds %class.spatial_region, ptr %46, i32 0, i32 50
  %1232 = load i32, ptr %33, align 4, !tbaa !127
  %1233 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5cellpEixEi(ptr noundef nonnull align 8 dereferenceable(40) %1231, i32 noundef %1232)
  %1234 = load ptr, ptr %1233, align 8, !tbaa !5
  %1235 = load i32, ptr %34, align 4, !tbaa !127
  %1236 = sext i32 %1235 to i64
  %1237 = getelementptr inbounds ptr, ptr %1234, i64 %1236
  %1238 = load ptr, ptr %1237, align 8, !tbaa !5
  %1239 = load i32, ptr %35, align 4, !tbaa !127
  %1240 = sext i32 %1239 to i64
  %1241 = getelementptr inbounds %struct.cellp, ptr %1238, i64 %1240
  %1242 = getelementptr inbounds %struct.cellp, ptr %1241, i32 0, i32 0
  %1243 = getelementptr inbounds %class.plist, ptr %1242, i32 0, i32 1
  store ptr %1230, ptr %1243, align 8, !tbaa !149
  br label %1244

1244:                                             ; preds = %1211, %1203
  %1245 = load ptr, ptr %7, align 8, !tbaa !5
  call void @_ZN14spatial_region15delete_particleEP8particleb(ptr noundef nonnull align 8 dereferenceable(608) %46, ptr noundef %1245, i1 noundef zeroext false)
  br label %1246

1246:                                             ; preds = %1244, %1165
  br label %1247

1247:                                             ; preds = %1246, %1154
  br label %1248

1248:                                             ; preds = %1247
  %1249 = load i32, ptr %36, align 4, !tbaa !127
  %1250 = add nsw i32 %1249, 1
  store i32 %1250, ptr %36, align 4, !tbaa !127
  br label %1148, !llvm.loop !167

1251:                                             ; preds = %1153
  br label %1252

1252:                                             ; preds = %1251, %1146
  br label %1253

1253:                                             ; preds = %1252, %1065
  br label %1254

1254:                                             ; preds = %1253, %984
  %1255 = load ptr, ptr %8, align 8, !tbaa !5
  store ptr %1255, ptr %7, align 8, !tbaa !5
  br label %897, !llvm.loop !168

1256:                                             ; preds = %897
  br label %1257

1257:                                             ; preds = %1256
  %1258 = load i32, ptr %35, align 4, !tbaa !127
  %1259 = add nsw i32 %1258, 1
  store i32 %1259, ptr %35, align 4, !tbaa !127
  br label %876, !llvm.loop !169

1260:                                             ; preds = %881
  br label %1261

1261:                                             ; preds = %1260
  %1262 = load i32, ptr %34, align 4, !tbaa !127
  %1263 = add nsw i32 %1262, 1
  store i32 %1263, ptr %34, align 4, !tbaa !127
  br label %869, !llvm.loop !170

1264:                                             ; preds = %874
  br label %1265

1265:                                             ; preds = %1264
  %1266 = load i32, ptr %33, align 4, !tbaa !127
  %1267 = add nsw i32 %1266, 1
  store i32 %1267, ptr %33, align 4, !tbaa !127
  br label %862, !llvm.loop !171

1268:                                             ; preds = %867
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #9
  store i32 0, ptr %37, align 4, !tbaa !127
  br label %1269

1269:                                             ; preds = %1474, %1268
  %1270 = load i32, ptr %37, align 4, !tbaa !127
  %1271 = getelementptr inbounds %class.spatial_region, ptr %46, i32 0, i32 0
  %1272 = load i32, ptr %1271, align 8, !tbaa !131
  %1273 = icmp slt i32 %1270, %1272
  br i1 %1273, label %1275, label %1274

1274:                                             ; preds = %1269
  store i32 84, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #9
  br label %1477

1275:                                             ; preds = %1269
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #9
  store i32 0, ptr %38, align 4, !tbaa !127
  br label %1276

1276:                                             ; preds = %1470, %1275
  %1277 = load i32, ptr %38, align 4, !tbaa !127
  %1278 = getelementptr inbounds %class.spatial_region, ptr %46, i32 0, i32 1
  %1279 = load i32, ptr %1278, align 4, !tbaa !132
  %1280 = icmp slt i32 %1277, %1279
  br i1 %1280, label %1282, label %1281

1281:                                             ; preds = %1276
  store i32 87, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #9
  br label %1473

1282:                                             ; preds = %1276
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #9
  store i32 0, ptr %39, align 4, !tbaa !127
  br label %1283

1283:                                             ; preds = %1466, %1282
  %1284 = load i32, ptr %39, align 4, !tbaa !127
  %1285 = getelementptr inbounds %class.spatial_region, ptr %46, i32 0, i32 2
  %1286 = load i32, ptr %1285, align 8, !tbaa !133
  %1287 = icmp slt i32 %1284, %1286
  br i1 %1287, label %1289, label %1288

1288:                                             ; preds = %1283
  store i32 90, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #9
  br label %1469

1289:                                             ; preds = %1283
  %1290 = getelementptr inbounds %class.spatial_region, ptr %46, i32 0, i32 50
  %1291 = load i32, ptr %37, align 4, !tbaa !127
  %1292 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5cellpEixEi(ptr noundef nonnull align 8 dereferenceable(40) %1290, i32 noundef %1291)
  %1293 = load ptr, ptr %1292, align 8, !tbaa !5
  %1294 = load i32, ptr %38, align 4, !tbaa !127
  %1295 = sext i32 %1294 to i64
  %1296 = getelementptr inbounds ptr, ptr %1293, i64 %1295
  %1297 = load ptr, ptr %1296, align 8, !tbaa !5
  %1298 = load i32, ptr %39, align 4, !tbaa !127
  %1299 = sext i32 %1298 to i64
  %1300 = getelementptr inbounds %struct.cellp, ptr %1297, i64 %1299
  %1301 = getelementptr inbounds %struct.cellp, ptr %1300, i32 0, i32 0
  %1302 = getelementptr inbounds %class.plist, ptr %1301, i32 0, i32 0
  %1303 = load ptr, ptr %1302, align 8, !tbaa !134
  store ptr %1303, ptr %7, align 8, !tbaa !5
  br label %1304

1304:                                             ; preds = %1461, %1289
  %1305 = load ptr, ptr %7, align 8, !tbaa !5
  %1306 = icmp ne ptr %1305, null
  br i1 %1306, label %1307, label %1465

1307:                                             ; preds = %1304
  %1308 = load ptr, ptr %7, align 8, !tbaa !5
  %1309 = getelementptr inbounds %struct.particle, ptr %1308, i32 0, i32 8
  %1310 = load double, ptr %1309, align 8, !tbaa !137
  %1311 = fcmp oeq double %1310, -1.000000e+00
  br i1 %1311, label %1312, label %1339

1312:                                             ; preds = %1307
  %1313 = load ptr, ptr %7, align 8, !tbaa !5
  %1314 = getelementptr inbounds %struct.particle, ptr %1313, i32 0, i32 7
  %1315 = load double, ptr %1314, align 8, !tbaa !139
  %1316 = load ptr, ptr %5, align 8, !tbaa !5
  %1317 = getelementptr inbounds double, ptr %1316, i64 0
  %1318 = load double, ptr %1317, align 8, !tbaa !128
  %1319 = load ptr, ptr %7, align 8, !tbaa !5
  %1320 = getelementptr inbounds %struct.particle, ptr %1319, i32 0, i32 7
  %1321 = load double, ptr %1320, align 8, !tbaa !139
  %1322 = fneg double %1321
  %1323 = load ptr, ptr %26, align 8, !tbaa !5
  %1324 = getelementptr inbounds double, ptr %1323, i64 0
  %1325 = load double, ptr %1324, align 8, !tbaa !128
  %1326 = call noundef double @_ZN14spatial_region4_ppdEdd(ptr noundef nonnull align 8 dereferenceable(608) %46, double noundef %1322, double noundef %1325)
  %1327 = fneg double %1318
  %1328 = call double @llvm.fmuladd.f64(double %1327, double %1326, double 1.000000e+00)
  %1329 = fdiv double %1315, %1328
  %1330 = load ptr, ptr %7, align 8, !tbaa !5
  %1331 = getelementptr inbounds %struct.particle, ptr %1330, i32 0, i32 7
  store double %1329, ptr %1331, align 8, !tbaa !139
  %1332 = load ptr, ptr %7, align 8, !tbaa !5
  %1333 = getelementptr inbounds %struct.particle, ptr %1332, i32 0, i32 7
  %1334 = load double, ptr %1333, align 8, !tbaa !139
  %1335 = load ptr, ptr %9, align 8, !tbaa !5
  %1336 = getelementptr inbounds double, ptr %1335, i64 0
  %1337 = load double, ptr %1336, align 8, !tbaa !128
  %1338 = fsub double %1337, %1334
  store double %1338, ptr %1336, align 8, !tbaa !128
  br label %1461

1339:                                             ; preds = %1307
  %1340 = load ptr, ptr %7, align 8, !tbaa !5
  %1341 = getelementptr inbounds %struct.particle, ptr %1340, i32 0, i32 8
  %1342 = load double, ptr %1341, align 8, !tbaa !137
  %1343 = fcmp oeq double %1342, 1.000000e+00
  br i1 %1343, label %1344, label %1370

1344:                                             ; preds = %1339
  %1345 = load ptr, ptr %7, align 8, !tbaa !5
  %1346 = getelementptr inbounds %struct.particle, ptr %1345, i32 0, i32 7
  %1347 = load double, ptr %1346, align 8, !tbaa !139
  %1348 = load ptr, ptr %5, align 8, !tbaa !5
  %1349 = getelementptr inbounds double, ptr %1348, i64 1
  %1350 = load double, ptr %1349, align 8, !tbaa !128
  %1351 = load ptr, ptr %7, align 8, !tbaa !5
  %1352 = getelementptr inbounds %struct.particle, ptr %1351, i32 0, i32 7
  %1353 = load double, ptr %1352, align 8, !tbaa !139
  %1354 = load ptr, ptr %26, align 8, !tbaa !5
  %1355 = getelementptr inbounds double, ptr %1354, i64 1
  %1356 = load double, ptr %1355, align 8, !tbaa !128
  %1357 = call noundef double @_ZN14spatial_region4_ppdEdd(ptr noundef nonnull align 8 dereferenceable(608) %46, double noundef %1353, double noundef %1356)
  %1358 = fneg double %1350
  %1359 = call double @llvm.fmuladd.f64(double %1358, double %1357, double 1.000000e+00)
  %1360 = fdiv double %1347, %1359
  %1361 = load ptr, ptr %7, align 8, !tbaa !5
  %1362 = getelementptr inbounds %struct.particle, ptr %1361, i32 0, i32 7
  store double %1360, ptr %1362, align 8, !tbaa !139
  %1363 = load ptr, ptr %7, align 8, !tbaa !5
  %1364 = getelementptr inbounds %struct.particle, ptr %1363, i32 0, i32 7
  %1365 = load double, ptr %1364, align 8, !tbaa !139
  %1366 = load ptr, ptr %9, align 8, !tbaa !5
  %1367 = getelementptr inbounds double, ptr %1366, i64 1
  %1368 = load double, ptr %1367, align 8, !tbaa !128
  %1369 = fadd double %1368, %1365
  store double %1369, ptr %1367, align 8, !tbaa !128
  br label %1460

1370:                                             ; preds = %1339
  %1371 = load ptr, ptr %7, align 8, !tbaa !5
  %1372 = getelementptr inbounds %struct.particle, ptr %1371, i32 0, i32 8
  %1373 = load double, ptr %1372, align 8, !tbaa !137
  %1374 = fcmp oeq double %1373, 0.000000e+00
  br i1 %1374, label %1375, label %1401

1375:                                             ; preds = %1370
  %1376 = load ptr, ptr %7, align 8, !tbaa !5
  %1377 = getelementptr inbounds %struct.particle, ptr %1376, i32 0, i32 7
  %1378 = load double, ptr %1377, align 8, !tbaa !139
  %1379 = load ptr, ptr %5, align 8, !tbaa !5
  %1380 = getelementptr inbounds double, ptr %1379, i64 2
  %1381 = load double, ptr %1380, align 8, !tbaa !128
  %1382 = load ptr, ptr %7, align 8, !tbaa !5
  %1383 = getelementptr inbounds %struct.particle, ptr %1382, i32 0, i32 7
  %1384 = load double, ptr %1383, align 8, !tbaa !139
  %1385 = load ptr, ptr %26, align 8, !tbaa !5
  %1386 = getelementptr inbounds double, ptr %1385, i64 2
  %1387 = load double, ptr %1386, align 8, !tbaa !128
  %1388 = call noundef double @_ZN14spatial_region4_ppdEdd(ptr noundef nonnull align 8 dereferenceable(608) %46, double noundef %1384, double noundef %1387)
  %1389 = fneg double %1381
  %1390 = call double @llvm.fmuladd.f64(double %1389, double %1388, double 1.000000e+00)
  %1391 = fdiv double %1378, %1390
  %1392 = load ptr, ptr %7, align 8, !tbaa !5
  %1393 = getelementptr inbounds %struct.particle, ptr %1392, i32 0, i32 7
  store double %1391, ptr %1393, align 8, !tbaa !139
  %1394 = load ptr, ptr %7, align 8, !tbaa !5
  %1395 = getelementptr inbounds %struct.particle, ptr %1394, i32 0, i32 7
  %1396 = load double, ptr %1395, align 8, !tbaa !139
  %1397 = load ptr, ptr %9, align 8, !tbaa !5
  %1398 = getelementptr inbounds double, ptr %1397, i64 2
  %1399 = load double, ptr %1398, align 8, !tbaa !128
  %1400 = fadd double %1399, %1396
  store double %1400, ptr %1398, align 8, !tbaa !128
  br label %1459

1401:                                             ; preds = %1370
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #9
  store i32 0, ptr %40, align 4, !tbaa !127
  br label %1402

1402:                                             ; preds = %1455, %1401
  %1403 = load i32, ptr %40, align 4, !tbaa !127
  %1404 = getelementptr inbounds %class.spatial_region, ptr %46, i32 0, i32 14
  %1405 = load i32, ptr %1404, align 8, !tbaa !9
  %1406 = icmp slt i32 %1403, %1405
  br i1 %1406, label %1408, label %1407

1407:                                             ; preds = %1402
  store i32 95, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #9
  br label %1458

1408:                                             ; preds = %1402
  %1409 = load ptr, ptr %7, align 8, !tbaa !5
  %1410 = getelementptr inbounds %struct.particle, ptr %1409, i32 0, i32 8
  %1411 = load double, ptr %1410, align 8, !tbaa !137
  %1412 = getelementptr inbounds %class.spatial_region, ptr %46, i32 0, i32 15
  %1413 = load ptr, ptr %1412, align 8, !tbaa !140
  %1414 = load i32, ptr %40, align 4, !tbaa !127
  %1415 = sext i32 %1414 to i64
  %1416 = getelementptr inbounds double, ptr %1413, i64 %1415
  %1417 = load double, ptr %1416, align 8, !tbaa !128
  %1418 = fcmp oeq double %1411, %1417
  br i1 %1418, label %1419, label %1454

1419:                                             ; preds = %1408
  %1420 = load ptr, ptr %7, align 8, !tbaa !5
  %1421 = getelementptr inbounds %struct.particle, ptr %1420, i32 0, i32 7
  %1422 = load double, ptr %1421, align 8, !tbaa !139
  %1423 = load ptr, ptr %5, align 8, !tbaa !5
  %1424 = load i32, ptr %40, align 4, !tbaa !127
  %1425 = add nsw i32 3, %1424
  %1426 = sext i32 %1425 to i64
  %1427 = getelementptr inbounds double, ptr %1423, i64 %1426
  %1428 = load double, ptr %1427, align 8, !tbaa !128
  %1429 = load ptr, ptr %7, align 8, !tbaa !5
  %1430 = getelementptr inbounds %struct.particle, ptr %1429, i32 0, i32 7
  %1431 = load double, ptr %1430, align 8, !tbaa !139
  %1432 = load ptr, ptr %26, align 8, !tbaa !5
  %1433 = load i32, ptr %40, align 4, !tbaa !127
  %1434 = add nsw i32 3, %1433
  %1435 = sext i32 %1434 to i64
  %1436 = getelementptr inbounds double, ptr %1432, i64 %1435
  %1437 = load double, ptr %1436, align 8, !tbaa !128
  %1438 = call noundef double @_ZN14spatial_region4_ppdEdd(ptr noundef nonnull align 8 dereferenceable(608) %46, double noundef %1431, double noundef %1437)
  %1439 = fneg double %1428
  %1440 = call double @llvm.fmuladd.f64(double %1439, double %1438, double 1.000000e+00)
  %1441 = fdiv double %1422, %1440
  %1442 = load ptr, ptr %7, align 8, !tbaa !5
  %1443 = getelementptr inbounds %struct.particle, ptr %1442, i32 0, i32 7
  store double %1441, ptr %1443, align 8, !tbaa !139
  %1444 = load ptr, ptr %7, align 8, !tbaa !5
  %1445 = getelementptr inbounds %struct.particle, ptr %1444, i32 0, i32 7
  %1446 = load double, ptr %1445, align 8, !tbaa !139
  %1447 = load ptr, ptr %9, align 8, !tbaa !5
  %1448 = load i32, ptr %40, align 4, !tbaa !127
  %1449 = add nsw i32 3, %1448
  %1450 = sext i32 %1449 to i64
  %1451 = getelementptr inbounds double, ptr %1447, i64 %1450
  %1452 = load double, ptr %1451, align 8, !tbaa !128
  %1453 = fadd double %1452, %1446
  store double %1453, ptr %1451, align 8, !tbaa !128
  br label %1454

1454:                                             ; preds = %1419, %1408
  br label %1455

1455:                                             ; preds = %1454
  %1456 = load i32, ptr %40, align 4, !tbaa !127
  %1457 = add nsw i32 %1456, 1
  store i32 %1457, ptr %40, align 4, !tbaa !127
  br label %1402, !llvm.loop !172

1458:                                             ; preds = %1407
  br label %1459

1459:                                             ; preds = %1458, %1375
  br label %1460

1460:                                             ; preds = %1459, %1344
  br label %1461

1461:                                             ; preds = %1460, %1312
  %1462 = load ptr, ptr %7, align 8, !tbaa !5
  %1463 = getelementptr inbounds %struct.particle, ptr %1462, i32 0, i32 11
  %1464 = load ptr, ptr %1463, align 8, !tbaa !142
  store ptr %1464, ptr %7, align 8, !tbaa !5
  br label %1304, !llvm.loop !173

1465:                                             ; preds = %1304
  br label %1466

1466:                                             ; preds = %1465
  %1467 = load i32, ptr %39, align 4, !tbaa !127
  %1468 = add nsw i32 %1467, 1
  store i32 %1468, ptr %39, align 4, !tbaa !127
  br label %1283, !llvm.loop !174

1469:                                             ; preds = %1288
  br label %1470

1470:                                             ; preds = %1469
  %1471 = load i32, ptr %38, align 4, !tbaa !127
  %1472 = add nsw i32 %1471, 1
  store i32 %1472, ptr %38, align 4, !tbaa !127
  br label %1276, !llvm.loop !175

1473:                                             ; preds = %1281
  br label %1474

1474:                                             ; preds = %1473
  %1475 = load i32, ptr %37, align 4, !tbaa !127
  %1476 = add nsw i32 %1475, 1
  store i32 %1476, ptr %37, align 4, !tbaa !127
  br label %1269, !llvm.loop !176

1477:                                             ; preds = %1274
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #9
  store i32 0, ptr %41, align 4, !tbaa !127
  br label %1478

1478:                                             ; preds = %1514, %1477
  %1479 = load i32, ptr %41, align 4, !tbaa !127
  %1480 = getelementptr inbounds %class.spatial_region, ptr %46, i32 0, i32 14
  %1481 = load i32, ptr %1480, align 8, !tbaa !9
  %1482 = add nsw i32 3, %1481
  %1483 = icmp slt i32 %1479, %1482
  br i1 %1483, label %1485, label %1484

1484:                                             ; preds = %1478
  store i32 98, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #9
  br label %1517

1485:                                             ; preds = %1478
  %1486 = load ptr, ptr %9, align 8, !tbaa !5
  %1487 = load i32, ptr %41, align 4, !tbaa !127
  %1488 = sext i32 %1487 to i64
  %1489 = getelementptr inbounds double, ptr %1486, i64 %1488
  %1490 = load double, ptr %1489, align 8, !tbaa !128
  %1491 = fcmp une double %1490, 0.000000e+00
  br i1 %1491, label %1492, label %1508

1492:                                             ; preds = %1485
  %1493 = load ptr, ptr %10, align 8, !tbaa !5
  %1494 = load i32, ptr %41, align 4, !tbaa !127
  %1495 = sext i32 %1494 to i64
  %1496 = getelementptr inbounds double, ptr %1493, i64 %1495
  %1497 = load double, ptr %1496, align 8, !tbaa !128
  %1498 = load ptr, ptr %9, align 8, !tbaa !5
  %1499 = load i32, ptr %41, align 4, !tbaa !127
  %1500 = sext i32 %1499 to i64
  %1501 = getelementptr inbounds double, ptr %1498, i64 %1500
  %1502 = load double, ptr %1501, align 8, !tbaa !128
  %1503 = fdiv double %1497, %1502
  %1504 = load ptr, ptr %10, align 8, !tbaa !5
  %1505 = load i32, ptr %41, align 4, !tbaa !127
  %1506 = sext i32 %1505 to i64
  %1507 = getelementptr inbounds double, ptr %1504, i64 %1506
  store double %1503, ptr %1507, align 8, !tbaa !128
  br label %1513

1508:                                             ; preds = %1485
  %1509 = load ptr, ptr %10, align 8, !tbaa !5
  %1510 = load i32, ptr %41, align 4, !tbaa !127
  %1511 = sext i32 %1510 to i64
  %1512 = getelementptr inbounds double, ptr %1509, i64 %1511
  store double 0.000000e+00, ptr %1512, align 8, !tbaa !128
  br label %1513

1513:                                             ; preds = %1508, %1492
  br label %1514

1514:                                             ; preds = %1513
  %1515 = load i32, ptr %41, align 4, !tbaa !127
  %1516 = add nsw i32 %1515, 1
  store i32 %1516, ptr %41, align 4, !tbaa !127
  br label %1478, !llvm.loop !177

1517:                                             ; preds = %1484
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #9
  store i32 0, ptr %42, align 4, !tbaa !127
  br label %1518

1518:                                             ; preds = %1652, %1517
  %1519 = load i32, ptr %42, align 4, !tbaa !127
  %1520 = getelementptr inbounds %class.spatial_region, ptr %46, i32 0, i32 0
  %1521 = load i32, ptr %1520, align 8, !tbaa !131
  %1522 = icmp slt i32 %1519, %1521
  br i1 %1522, label %1524, label %1523

1523:                                             ; preds = %1518
  store i32 101, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #9
  br label %1655

1524:                                             ; preds = %1518
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #9
  store i32 0, ptr %43, align 4, !tbaa !127
  br label %1525

1525:                                             ; preds = %1648, %1524
  %1526 = load i32, ptr %43, align 4, !tbaa !127
  %1527 = getelementptr inbounds %class.spatial_region, ptr %46, i32 0, i32 1
  %1528 = load i32, ptr %1527, align 4, !tbaa !132
  %1529 = icmp slt i32 %1526, %1528
  br i1 %1529, label %1531, label %1530

1530:                                             ; preds = %1525
  store i32 104, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #9
  br label %1651

1531:                                             ; preds = %1525
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #9
  store i32 0, ptr %44, align 4, !tbaa !127
  br label %1532

1532:                                             ; preds = %1644, %1531
  %1533 = load i32, ptr %44, align 4, !tbaa !127
  %1534 = getelementptr inbounds %class.spatial_region, ptr %46, i32 0, i32 2
  %1535 = load i32, ptr %1534, align 8, !tbaa !133
  %1536 = icmp slt i32 %1533, %1535
  br i1 %1536, label %1538, label %1537

1537:                                             ; preds = %1532
  store i32 107, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #9
  br label %1647

1538:                                             ; preds = %1532
  %1539 = getelementptr inbounds %class.spatial_region, ptr %46, i32 0, i32 50
  %1540 = load i32, ptr %42, align 4, !tbaa !127
  %1541 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5cellpEixEi(ptr noundef nonnull align 8 dereferenceable(40) %1539, i32 noundef %1540)
  %1542 = load ptr, ptr %1541, align 8, !tbaa !5
  %1543 = load i32, ptr %43, align 4, !tbaa !127
  %1544 = sext i32 %1543 to i64
  %1545 = getelementptr inbounds ptr, ptr %1542, i64 %1544
  %1546 = load ptr, ptr %1545, align 8, !tbaa !5
  %1547 = load i32, ptr %44, align 4, !tbaa !127
  %1548 = sext i32 %1547 to i64
  %1549 = getelementptr inbounds %struct.cellp, ptr %1546, i64 %1548
  %1550 = getelementptr inbounds %struct.cellp, ptr %1549, i32 0, i32 0
  %1551 = getelementptr inbounds %class.plist, ptr %1550, i32 0, i32 0
  %1552 = load ptr, ptr %1551, align 8, !tbaa !134
  store ptr %1552, ptr %7, align 8, !tbaa !5
  br label %1553

1553:                                             ; preds = %1639, %1538
  %1554 = load ptr, ptr %7, align 8, !tbaa !5
  %1555 = icmp ne ptr %1554, null
  br i1 %1555, label %1556, label %1643

1556:                                             ; preds = %1553
  %1557 = load ptr, ptr %7, align 8, !tbaa !5
  %1558 = getelementptr inbounds %struct.particle, ptr %1557, i32 0, i32 8
  %1559 = load double, ptr %1558, align 8, !tbaa !137
  %1560 = fcmp oeq double %1559, -1.000000e+00
  br i1 %1560, label %1561, label %1571

1561:                                             ; preds = %1556
  %1562 = load ptr, ptr %10, align 8, !tbaa !5
  %1563 = getelementptr inbounds double, ptr %1562, i64 0
  %1564 = load double, ptr %1563, align 8, !tbaa !128
  %1565 = load ptr, ptr %7, align 8, !tbaa !5
  %1566 = getelementptr inbounds %struct.particle, ptr %1565, i32 0, i32 7
  %1567 = load double, ptr %1566, align 8, !tbaa !139
  %1568 = fmul double %1564, %1567
  %1569 = load ptr, ptr %7, align 8, !tbaa !5
  %1570 = getelementptr inbounds %struct.particle, ptr %1569, i32 0, i32 7
  store double %1568, ptr %1570, align 8, !tbaa !139
  br label %1639

1571:                                             ; preds = %1556
  %1572 = load ptr, ptr %7, align 8, !tbaa !5
  %1573 = getelementptr inbounds %struct.particle, ptr %1572, i32 0, i32 8
  %1574 = load double, ptr %1573, align 8, !tbaa !137
  %1575 = fcmp oeq double %1574, 1.000000e+00
  br i1 %1575, label %1576, label %1586

1576:                                             ; preds = %1571
  %1577 = load ptr, ptr %10, align 8, !tbaa !5
  %1578 = getelementptr inbounds double, ptr %1577, i64 1
  %1579 = load double, ptr %1578, align 8, !tbaa !128
  %1580 = load ptr, ptr %7, align 8, !tbaa !5
  %1581 = getelementptr inbounds %struct.particle, ptr %1580, i32 0, i32 7
  %1582 = load double, ptr %1581, align 8, !tbaa !139
  %1583 = fmul double %1579, %1582
  %1584 = load ptr, ptr %7, align 8, !tbaa !5
  %1585 = getelementptr inbounds %struct.particle, ptr %1584, i32 0, i32 7
  store double %1583, ptr %1585, align 8, !tbaa !139
  br label %1638

1586:                                             ; preds = %1571
  %1587 = load ptr, ptr %7, align 8, !tbaa !5
  %1588 = getelementptr inbounds %struct.particle, ptr %1587, i32 0, i32 8
  %1589 = load double, ptr %1588, align 8, !tbaa !137
  %1590 = fcmp oeq double %1589, 0.000000e+00
  br i1 %1590, label %1591, label %1601

1591:                                             ; preds = %1586
  %1592 = load ptr, ptr %10, align 8, !tbaa !5
  %1593 = getelementptr inbounds double, ptr %1592, i64 2
  %1594 = load double, ptr %1593, align 8, !tbaa !128
  %1595 = load ptr, ptr %7, align 8, !tbaa !5
  %1596 = getelementptr inbounds %struct.particle, ptr %1595, i32 0, i32 7
  %1597 = load double, ptr %1596, align 8, !tbaa !139
  %1598 = fmul double %1594, %1597
  %1599 = load ptr, ptr %7, align 8, !tbaa !5
  %1600 = getelementptr inbounds %struct.particle, ptr %1599, i32 0, i32 7
  store double %1598, ptr %1600, align 8, !tbaa !139
  br label %1637

1601:                                             ; preds = %1586
  call void @llvm.lifetime.start.p0(i64 4, ptr %45) #9
  store i32 0, ptr %45, align 4, !tbaa !127
  br label %1602

1602:                                             ; preds = %1633, %1601
  %1603 = load i32, ptr %45, align 4, !tbaa !127
  %1604 = getelementptr inbounds %class.spatial_region, ptr %46, i32 0, i32 14
  %1605 = load i32, ptr %1604, align 8, !tbaa !9
  %1606 = icmp slt i32 %1603, %1605
  br i1 %1606, label %1608, label %1607

1607:                                             ; preds = %1602
  store i32 112, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #9
  br label %1636

1608:                                             ; preds = %1602
  %1609 = load ptr, ptr %7, align 8, !tbaa !5
  %1610 = getelementptr inbounds %struct.particle, ptr %1609, i32 0, i32 8
  %1611 = load double, ptr %1610, align 8, !tbaa !137
  %1612 = getelementptr inbounds %class.spatial_region, ptr %46, i32 0, i32 15
  %1613 = load ptr, ptr %1612, align 8, !tbaa !140
  %1614 = load i32, ptr %45, align 4, !tbaa !127
  %1615 = sext i32 %1614 to i64
  %1616 = getelementptr inbounds double, ptr %1613, i64 %1615
  %1617 = load double, ptr %1616, align 8, !tbaa !128
  %1618 = fcmp oeq double %1611, %1617
  br i1 %1618, label %1619, label %1632

1619:                                             ; preds = %1608
  %1620 = load ptr, ptr %10, align 8, !tbaa !5
  %1621 = load i32, ptr %45, align 4, !tbaa !127
  %1622 = add nsw i32 3, %1621
  %1623 = sext i32 %1622 to i64
  %1624 = getelementptr inbounds double, ptr %1620, i64 %1623
  %1625 = load double, ptr %1624, align 8, !tbaa !128
  %1626 = load ptr, ptr %7, align 8, !tbaa !5
  %1627 = getelementptr inbounds %struct.particle, ptr %1626, i32 0, i32 7
  %1628 = load double, ptr %1627, align 8, !tbaa !139
  %1629 = fmul double %1625, %1628
  %1630 = load ptr, ptr %7, align 8, !tbaa !5
  %1631 = getelementptr inbounds %struct.particle, ptr %1630, i32 0, i32 7
  store double %1629, ptr %1631, align 8, !tbaa !139
  br label %1632

1632:                                             ; preds = %1619, %1608
  br label %1633

1633:                                             ; preds = %1632
  %1634 = load i32, ptr %45, align 4, !tbaa !127
  %1635 = add nsw i32 %1634, 1
  store i32 %1635, ptr %45, align 4, !tbaa !127
  br label %1602, !llvm.loop !178

1636:                                             ; preds = %1607
  br label %1637

1637:                                             ; preds = %1636, %1591
  br label %1638

1638:                                             ; preds = %1637, %1576
  br label %1639

1639:                                             ; preds = %1638, %1561
  %1640 = load ptr, ptr %7, align 8, !tbaa !5
  %1641 = getelementptr inbounds %struct.particle, ptr %1640, i32 0, i32 11
  %1642 = load ptr, ptr %1641, align 8, !tbaa !142
  store ptr %1642, ptr %7, align 8, !tbaa !5
  br label %1553, !llvm.loop !179

1643:                                             ; preds = %1553
  br label %1644

1644:                                             ; preds = %1643
  %1645 = load i32, ptr %44, align 4, !tbaa !127
  %1646 = add nsw i32 %1645, 1
  store i32 %1646, ptr %44, align 4, !tbaa !127
  br label %1532, !llvm.loop !180

1647:                                             ; preds = %1537
  br label %1648

1648:                                             ; preds = %1647
  %1649 = load i32, ptr %43, align 4, !tbaa !127
  %1650 = add nsw i32 %1649, 1
  store i32 %1650, ptr %43, align 4, !tbaa !127
  br label %1525, !llvm.loop !181

1651:                                             ; preds = %1530
  br label %1652

1652:                                             ; preds = %1651
  %1653 = load i32, ptr %42, align 4, !tbaa !127
  %1654 = add nsw i32 %1653, 1
  store i32 %1654, ptr %42, align 4, !tbaa !127
  br label %1518, !llvm.loop !182

1655:                                             ; preds = %1523
  %1656 = load ptr, ptr %26, align 8, !tbaa !5
  %1657 = icmp eq ptr %1656, null
  br i1 %1657, label %1659, label %1658

1658:                                             ; preds = %1655
  call void @_ZdaPv(ptr noundef %1656) #11
  br label %1659

1659:                                             ; preds = %1658, %1655
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #9
  br label %1660

1660:                                             ; preds = %1659, %689
  br label %1661

1661:                                             ; preds = %1660, %688
  %1662 = load ptr, ptr %9, align 8, !tbaa !5
  %1663 = icmp eq ptr %1662, null
  br i1 %1663, label %1665, label %1664

1664:                                             ; preds = %1661
  call void @_ZdaPv(ptr noundef %1662) #11
  br label %1665

1665:                                             ; preds = %1664, %1661
  %1666 = load ptr, ptr %10, align 8, !tbaa !5
  %1667 = icmp eq ptr %1666, null
  br i1 %1667, label %1669, label %1668

1668:                                             ; preds = %1665
  call void @_ZdaPv(ptr noundef %1666) #11
  br label %1669

1669:                                             ; preds = %1668, %1665
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #9
  ret void
}

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare { i64, i1 } @llvm.umul.with.overflow.i64(i64, i64) #2

; Function Attrs: nobuiltin allocsize(0)
declare noundef nonnull ptr @_Znam(i64 noundef) #5

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZSteqIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef) #6

declare void @_ZN14spatial_region15delete_particleEP8particleb(ptr noundef nonnull align 8 dereferenceable(608), ptr noundef, i1 noundef zeroext) #7

; Function Attrs: nobuiltin nounwind
declare void @_ZdaPv(ptr noundef) #8

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #3 = { 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 #4 = { 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 #5 = { nobuiltin allocsize(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 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 = { "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 = { nobuiltin 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 #9 = { nounwind }
attributes #10 = { builtin allocsize(0) }
attributes #11 = { builtin 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, !11, i64 88}
!10 = !{!"_ZTS14spatial_region", !11, i64 0, !11, i64 4, !11, i64 8, !12, i64 16, !12, i64 24, !12, i64 32, !12, i64 40, !11, i64 48, !11, i64 52, !11, i64 56, !12, i64 64, !6, i64 72, !11, i64 80, !11, i64 84, !11, i64 88, !6, i64 96, !11, i64 104, !11, i64 108, !11, i64 112, !11, i64 116, !11, i64 120, !11, i64 124, !11, i64 128, !13, i64 136, !19, i64 144, !12, i64 176, !12, i64 184, !12, i64 192, !11, i64 200, !11, i64 204, !11, i64 208, !6, i64 216, !12, i64 224, !12, i64 232, !12, i64 240, !12, i64 248, !6, i64 256, !12, i64 264, !12, i64 272, !12, i64 280, !6, i64 288, !21, i64 296, !6, i64 328, !6, i64 336, !6, i64 344, !6, i64 352, !24, i64 360, !43, i64 400, !62, i64 440, !81, i64 480, !100, i64 520, !119, i64 560, !123, i64 584}
!11 = !{!"int", !7, i64 0}
!12 = !{!"double", !7, i64 0}
!13 = !{!"_ZTSSt10unique_ptrI14maxwell_solverSt14default_deleteIS0_EE", !14, i64 0}
!14 = !{!"_ZTSSt15__uniq_ptr_dataI14maxwell_solverSt14default_deleteIS0_ELb1ELb1EE", !15, i64 0}
!15 = !{!"_ZTSSt15__uniq_ptr_implI14maxwell_solverSt14default_deleteIS0_EE", !16, i64 0}
!16 = !{!"_ZTSSt5tupleIJP14maxwell_solverSt14default_deleteIS0_EEE", !17, i64 0}
!17 = !{!"_ZTSSt11_Tuple_implILm0EJP14maxwell_solverSt14default_deleteIS0_EEE", !18, i64 0}
!18 = !{!"_ZTSSt10_Head_baseILm0EP14maxwell_solverLb0EE", !6, i64 0}
!19 = !{!"_ZTSSt8functionIFvR8particleR8vector3dS3_RdEE", !20, i64 0, !6, i64 24}
!20 = !{!"_ZTSSt14_Function_base", !7, i64 0, !6, i64 16}
!21 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !22, i64 0, !23, i64 8, !7, i64 16}
!22 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !6, i64 0}
!23 = !{!"long", !7, i64 0}
!24 = !{!"_ZTS7field3dI5celleE", !11, i64 0, !11, i64 4, !11, i64 8, !25, i64 16, !31, i64 24, !37, i64 32}
!25 = !{!"_ZTSSt10unique_ptrIA_PP5celleSt14default_deleteIS3_EE", !26, i64 0}
!26 = !{!"_ZTSSt15__uniq_ptr_dataIPP5celleSt14default_deleteIA_S2_ELb1ELb1EE", !27, i64 0}
!27 = !{!"_ZTSSt15__uniq_ptr_implIPP5celleSt14default_deleteIA_S2_EE", !28, i64 0}
!28 = !{!"_ZTSSt5tupleIJPPP5celleSt14default_deleteIA_S2_EEE", !29, i64 0}
!29 = !{!"_ZTSSt11_Tuple_implILm0EJPPP5celleSt14default_deleteIA_S2_EEE", !30, i64 0}
!30 = !{!"_ZTSSt10_Head_baseILm0EPPP5celleLb0EE", !6, i64 0}
!31 = !{!"_ZTSSt10unique_ptrIA_P5celleSt14default_deleteIS2_EE", !32, i64 0}
!32 = !{!"_ZTSSt15__uniq_ptr_dataIP5celleSt14default_deleteIA_S1_ELb1ELb1EE", !33, i64 0}
!33 = !{!"_ZTSSt15__uniq_ptr_implIP5celleSt14default_deleteIA_S1_EE", !34, i64 0}
!34 = !{!"_ZTSSt5tupleIJPP5celleSt14default_deleteIA_S1_EEE", !35, i64 0}
!35 = !{!"_ZTSSt11_Tuple_implILm0EJPP5celleSt14default_deleteIA_S1_EEE", !36, i64 0}
!36 = !{!"_ZTSSt10_Head_baseILm0EPP5celleLb0EE", !6, i64 0}
!37 = !{!"_ZTSSt10unique_ptrIA_5celleSt14default_deleteIS1_EE", !38, i64 0}
!38 = !{!"_ZTSSt15__uniq_ptr_dataI5celleSt14default_deleteIA_S0_ELb1ELb1EE", !39, i64 0}
!39 = !{!"_ZTSSt15__uniq_ptr_implI5celleSt14default_deleteIA_S0_EE", !40, i64 0}
!40 = !{!"_ZTSSt5tupleIJP5celleSt14default_deleteIA_S0_EEE", !41, i64 0}
!41 = !{!"_ZTSSt11_Tuple_implILm0EJP5celleSt14default_deleteIA_S0_EEE", !42, i64 0}
!42 = !{!"_ZTSSt10_Head_baseILm0EP5celleLb0EE", !6, i64 0}
!43 = !{!"_ZTS7field3dI5cellbE", !11, i64 0, !11, i64 4, !11, i64 8, !44, i64 16, !50, i64 24, !56, i64 32}
!44 = !{!"_ZTSSt10unique_ptrIA_PP5cellbSt14default_deleteIS3_EE", !45, i64 0}
!45 = !{!"_ZTSSt15__uniq_ptr_dataIPP5cellbSt14default_deleteIA_S2_ELb1ELb1EE", !46, i64 0}
!46 = !{!"_ZTSSt15__uniq_ptr_implIPP5cellbSt14default_deleteIA_S2_EE", !47, i64 0}
!47 = !{!"_ZTSSt5tupleIJPPP5cellbSt14default_deleteIA_S2_EEE", !48, i64 0}
!48 = !{!"_ZTSSt11_Tuple_implILm0EJPPP5cellbSt14default_deleteIA_S2_EEE", !49, i64 0}
!49 = !{!"_ZTSSt10_Head_baseILm0EPPP5cellbLb0EE", !6, i64 0}
!50 = !{!"_ZTSSt10unique_ptrIA_P5cellbSt14default_deleteIS2_EE", !51, i64 0}
!51 = !{!"_ZTSSt15__uniq_ptr_dataIP5cellbSt14default_deleteIA_S1_ELb1ELb1EE", !52, i64 0}
!52 = !{!"_ZTSSt15__uniq_ptr_implIP5cellbSt14default_deleteIA_S1_EE", !53, i64 0}
!53 = !{!"_ZTSSt5tupleIJPP5cellbSt14default_deleteIA_S1_EEE", !54, i64 0}
!54 = !{!"_ZTSSt11_Tuple_implILm0EJPP5cellbSt14default_deleteIA_S1_EEE", !55, i64 0}
!55 = !{!"_ZTSSt10_Head_baseILm0EPP5cellbLb0EE", !6, i64 0}
!56 = !{!"_ZTSSt10unique_ptrIA_5cellbSt14default_deleteIS1_EE", !57, i64 0}
!57 = !{!"_ZTSSt15__uniq_ptr_dataI5cellbSt14default_deleteIA_S0_ELb1ELb1EE", !58, i64 0}
!58 = !{!"_ZTSSt15__uniq_ptr_implI5cellbSt14default_deleteIA_S0_EE", !59, i64 0}
!59 = !{!"_ZTSSt5tupleIJP5cellbSt14default_deleteIA_S0_EEE", !60, i64 0}
!60 = !{!"_ZTSSt11_Tuple_implILm0EJP5cellbSt14default_deleteIA_S0_EEE", !61, i64 0}
!61 = !{!"_ZTSSt10_Head_baseILm0EP5cellbLb0EE", !6, i64 0}
!62 = !{!"_ZTS7field3dI5celljE", !11, i64 0, !11, i64 4, !11, i64 8, !63, i64 16, !69, i64 24, !75, i64 32}
!63 = !{!"_ZTSSt10unique_ptrIA_PP5celljSt14default_deleteIS3_EE", !64, i64 0}
!64 = !{!"_ZTSSt15__uniq_ptr_dataIPP5celljSt14default_deleteIA_S2_ELb1ELb1EE", !65, i64 0}
!65 = !{!"_ZTSSt15__uniq_ptr_implIPP5celljSt14default_deleteIA_S2_EE", !66, i64 0}
!66 = !{!"_ZTSSt5tupleIJPPP5celljSt14default_deleteIA_S2_EEE", !67, i64 0}
!67 = !{!"_ZTSSt11_Tuple_implILm0EJPPP5celljSt14default_deleteIA_S2_EEE", !68, i64 0}
!68 = !{!"_ZTSSt10_Head_baseILm0EPPP5celljLb0EE", !6, i64 0}
!69 = !{!"_ZTSSt10unique_ptrIA_P5celljSt14default_deleteIS2_EE", !70, i64 0}
!70 = !{!"_ZTSSt15__uniq_ptr_dataIP5celljSt14default_deleteIA_S1_ELb1ELb1EE", !71, i64 0}
!71 = !{!"_ZTSSt15__uniq_ptr_implIP5celljSt14default_deleteIA_S1_EE", !72, i64 0}
!72 = !{!"_ZTSSt5tupleIJPP5celljSt14default_deleteIA_S1_EEE", !73, i64 0}
!73 = !{!"_ZTSSt11_Tuple_implILm0EJPP5celljSt14default_deleteIA_S1_EEE", !74, i64 0}
!74 = !{!"_ZTSSt10_Head_baseILm0EPP5celljLb0EE", !6, i64 0}
!75 = !{!"_ZTSSt10unique_ptrIA_5celljSt14default_deleteIS1_EE", !76, i64 0}
!76 = !{!"_ZTSSt15__uniq_ptr_dataI5celljSt14default_deleteIA_S0_ELb1ELb1EE", !77, i64 0}
!77 = !{!"_ZTSSt15__uniq_ptr_implI5celljSt14default_deleteIA_S0_EE", !78, i64 0}
!78 = !{!"_ZTSSt5tupleIJP5celljSt14default_deleteIA_S0_EEE", !79, i64 0}
!79 = !{!"_ZTSSt11_Tuple_implILm0EJP5celljSt14default_deleteIA_S0_EEE", !80, i64 0}
!80 = !{!"_ZTSSt10_Head_baseILm0EP5celljLb0EE", !6, i64 0}
!81 = !{!"_ZTS7field3dI6cellbeE", !11, i64 0, !11, i64 4, !11, i64 8, !82, i64 16, !88, i64 24, !94, i64 32}
!82 = !{!"_ZTSSt10unique_ptrIA_PP6cellbeSt14default_deleteIS3_EE", !83, i64 0}
!83 = !{!"_ZTSSt15__uniq_ptr_dataIPP6cellbeSt14default_deleteIA_S2_ELb1ELb1EE", !84, i64 0}
!84 = !{!"_ZTSSt15__uniq_ptr_implIPP6cellbeSt14default_deleteIA_S2_EE", !85, i64 0}
!85 = !{!"_ZTSSt5tupleIJPPP6cellbeSt14default_deleteIA_S2_EEE", !86, i64 0}
!86 = !{!"_ZTSSt11_Tuple_implILm0EJPPP6cellbeSt14default_deleteIA_S2_EEE", !87, i64 0}
!87 = !{!"_ZTSSt10_Head_baseILm0EPPP6cellbeLb0EE", !6, i64 0}
!88 = !{!"_ZTSSt10unique_ptrIA_P6cellbeSt14default_deleteIS2_EE", !89, i64 0}
!89 = !{!"_ZTSSt15__uniq_ptr_dataIP6cellbeSt14default_deleteIA_S1_ELb1ELb1EE", !90, i64 0}
!90 = !{!"_ZTSSt15__uniq_ptr_implIP6cellbeSt14default_deleteIA_S1_EE", !91, i64 0}
!91 = !{!"_ZTSSt5tupleIJPP6cellbeSt14default_deleteIA_S1_EEE", !92, i64 0}
!92 = !{!"_ZTSSt11_Tuple_implILm0EJPP6cellbeSt14default_deleteIA_S1_EEE", !93, i64 0}
!93 = !{!"_ZTSSt10_Head_baseILm0EPP6cellbeLb0EE", !6, i64 0}
!94 = !{!"_ZTSSt10unique_ptrIA_6cellbeSt14default_deleteIS1_EE", !95, i64 0}
!95 = !{!"_ZTSSt15__uniq_ptr_dataI6cellbeSt14default_deleteIA_S0_ELb1ELb1EE", !96, i64 0}
!96 = !{!"_ZTSSt15__uniq_ptr_implI6cellbeSt14default_deleteIA_S0_EE", !97, i64 0}
!97 = !{!"_ZTSSt5tupleIJP6cellbeSt14default_deleteIA_S0_EEE", !98, i64 0}
!98 = !{!"_ZTSSt11_Tuple_implILm0EJP6cellbeSt14default_deleteIA_S0_EEE", !99, i64 0}
!99 = !{!"_ZTSSt10_Head_baseILm0EP6cellbeLb0EE", !6, i64 0}
!100 = !{!"_ZTS7field3dI5cellpE", !11, i64 0, !11, i64 4, !11, i64 8, !101, i64 16, !107, i64 24, !113, i64 32}
!101 = !{!"_ZTSSt10unique_ptrIA_PP5cellpSt14default_deleteIS3_EE", !102, i64 0}
!102 = !{!"_ZTSSt15__uniq_ptr_dataIPP5cellpSt14default_deleteIA_S2_ELb1ELb1EE", !103, i64 0}
!103 = !{!"_ZTSSt15__uniq_ptr_implIPP5cellpSt14default_deleteIA_S2_EE", !104, i64 0}
!104 = !{!"_ZTSSt5tupleIJPPP5cellpSt14default_deleteIA_S2_EEE", !105, i64 0}
!105 = !{!"_ZTSSt11_Tuple_implILm0EJPPP5cellpSt14default_deleteIA_S2_EEE", !106, i64 0}
!106 = !{!"_ZTSSt10_Head_baseILm0EPPP5cellpLb0EE", !6, i64 0}
!107 = !{!"_ZTSSt10unique_ptrIA_P5cellpSt14default_deleteIS2_EE", !108, i64 0}
!108 = !{!"_ZTSSt15__uniq_ptr_dataIP5cellpSt14default_deleteIA_S1_ELb1ELb1EE", !109, i64 0}
!109 = !{!"_ZTSSt15__uniq_ptr_implIP5cellpSt14default_deleteIA_S1_EE", !110, i64 0}
!110 = !{!"_ZTSSt5tupleIJPP5cellpSt14default_deleteIA_S1_EEE", !111, i64 0}
!111 = !{!"_ZTSSt11_Tuple_implILm0EJPP5cellpSt14default_deleteIA_S1_EEE", !112, i64 0}
!112 = !{!"_ZTSSt10_Head_baseILm0EPP5cellpLb0EE", !6, i64 0}
!113 = !{!"_ZTSSt10unique_ptrIA_5cellpSt14default_deleteIS1_EE", !114, i64 0}
!114 = !{!"_ZTSSt15__uniq_ptr_dataI5cellpSt14default_deleteIA_S0_ELb1ELb1EE", !115, i64 0}
!115 = !{!"_ZTSSt15__uniq_ptr_implI5cellpSt14default_deleteIA_S0_EE", !116, i64 0}
!116 = !{!"_ZTSSt5tupleIJP5cellpSt14default_deleteIA_S0_EEE", !117, i64 0}
!117 = !{!"_ZTSSt11_Tuple_implILm0EJP5cellpSt14default_deleteIA_S0_EEE", !118, i64 0}
!118 = !{!"_ZTSSt10_Head_baseILm0EP5cellpLb0EE", !6, i64 0}
!119 = !{!"_ZTSSt6vectorI7field3dIdESaIS1_EE", !120, i64 0}
!120 = !{!"_ZTSSt12_Vector_baseI7field3dIdESaIS1_EE", !121, i64 0}
!121 = !{!"_ZTSNSt12_Vector_baseI7field3dIdESaIS1_EE12_Vector_implE", !122, i64 0}
!122 = !{!"_ZTSNSt12_Vector_baseI7field3dIdESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!123 = !{!"_ZTSSt6vectorIN14spatial_region16deleted_particleESaIS1_EE", !124, i64 0}
!124 = !{!"_ZTSSt12_Vector_baseIN14spatial_region16deleted_particleESaIS1_EE", !125, i64 0}
!125 = !{!"_ZTSNSt12_Vector_baseIN14spatial_region16deleted_particleESaIS1_EE12_Vector_implE", !126, i64 0}
!126 = !{!"_ZTSNSt12_Vector_baseIN14spatial_region16deleted_particleESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!127 = !{!11, !11, i64 0}
!128 = !{!12, !12, i64 0}
!129 = distinct !{!129, !130}
!130 = !{!"llvm.loop.mustprogress"}
!131 = !{!10, !11, i64 0}
!132 = !{!10, !11, i64 4}
!133 = !{!10, !11, i64 8}
!134 = !{!135, !6, i64 0}
!135 = !{!"_ZTS5cellp", !136, i64 0}
!136 = !{!"_ZTS5plist", !6, i64 0, !6, i64 8}
!137 = !{!138, !12, i64 64}
!138 = !{!"_ZTS8particle", !12, i64 0, !12, i64 8, !12, i64 16, !12, i64 24, !12, i64 32, !12, i64 40, !12, i64 48, !12, i64 56, !12, i64 64, !12, i64 72, !11, i64 80, !6, i64 88, !6, i64 96}
!139 = !{!138, !12, i64 56}
!140 = !{!10, !6, i64 96}
!141 = distinct !{!141, !130}
!142 = !{!138, !6, i64 88}
!143 = distinct !{!143, !130}
!144 = distinct !{!144, !130}
!145 = distinct !{!145, !130}
!146 = distinct !{!146, !130}
!147 = distinct !{!147, !130}
!148 = !{!138, !6, i64 96}
!149 = !{!135, !6, i64 8}
!150 = distinct !{!150, !130}
!151 = distinct !{!151, !130}
!152 = distinct !{!152, !130}
!153 = distinct !{!153, !130}
!154 = distinct !{!154, !130}
!155 = distinct !{!155, !130}
!156 = distinct !{!156, !130}
!157 = distinct !{!157, !130}
!158 = distinct !{!158, !130}
!159 = distinct !{!159, !130}
!160 = distinct !{!160, !130}
!161 = distinct !{!161, !130}
!162 = distinct !{!162, !130}
!163 = distinct !{!163, !130}
!164 = distinct !{!164, !130}
!165 = distinct !{!165, !130}
!166 = distinct !{!166, !130}
!167 = distinct !{!167, !130}
!168 = distinct !{!168, !130}
!169 = distinct !{!169, !130}
!170 = distinct !{!170, !130}
!171 = distinct !{!171, !130}
!172 = distinct !{!172, !130}
!173 = distinct !{!173, !130}
!174 = distinct !{!174, !130}
!175 = distinct !{!175, !130}
!176 = distinct !{!176, !130}
!177 = distinct !{!177, !130}
!178 = distinct !{!178, !130}
!179 = distinct !{!179, !130}
!180 = distinct !{!180, !130}
!181 = distinct !{!181, !130}
!182 = distinct !{!182, !130}


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

%struct.cellp = type { %class.plist }
%class.plist = type { ptr, ptr }

@.str.7 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [3 x i8], align 1

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef double @_ZN14spatial_region8get_randEv(ptr noundef nonnull align 8 dereferenceable(608)) local_unnamed_addr #0 align 2

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5cellpEixEi(ptr noundef nonnull align 8 dereferenceable(40), i32 noundef) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef double @_ZN14spatial_region4_ppdEdd(ptr noundef nonnull align 8 dereferenceable(608), double noundef, double noundef) local_unnamed_addr #3 align 2

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN14spatial_region8pmergingEPdNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(608) %0, ptr nocapture noundef readonly %1, ptr noundef %2) local_unnamed_addr #3 align 2 {
  %4 = getelementptr inbounds i8, ptr %0, i64 88
  %5 = load i32, ptr %4, align 8, !tbaa !5
  %6 = add i32 %5, 3
  %7 = sext i32 %6 to i64
  %8 = icmp slt i32 %5, -3
  %9 = shl nsw i64 %7, 3
  %10 = select i1 %8, i64 -1, i64 %9
  %11 = tail call noalias noundef nonnull ptr @_Znam(i64 noundef %10) #10
  %12 = tail call noalias noundef nonnull ptr @_Znam(i64 noundef %10) #10
  %13 = icmp sgt i32 %5, -3
  br i1 %13, label %.lr.ph.preheader, label %.preheader472

.lr.ph.preheader:                                 ; preds = %3
  %smax = tail call i32 @llvm.smax.i32(i32 %6, i32 1)
  %14 = zext nneg i32 %smax to i64
  %15 = shl nuw nsw i64 %14, 3
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(1) %11, i8 0, i64 %15, i1 false), !tbaa !126
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(1) %12, i8 0, i64 %15, i1 false), !tbaa !126
  br label %.preheader472

.preheader472:                                    ; preds = %.lr.ph.preheader, %3
  %16 = load i32, ptr %0, align 8, !tbaa !127
  %17 = icmp sgt i32 %16, 0
  br i1 %17, label %.preheader471.lr.ph, label %._crit_edge487

.preheader471.lr.ph:                              ; preds = %.preheader472
  %18 = getelementptr inbounds i8, ptr %0, i64 4
  %19 = getelementptr inbounds i8, ptr %0, i64 8
  %20 = getelementptr inbounds i8, ptr %0, i64 520
  %invariant.gep = getelementptr inbounds i8, ptr %12, i64 24
  %21 = getelementptr inbounds i8, ptr %0, i64 96
  %22 = getelementptr inbounds i8, ptr %12, i64 16
  %23 = getelementptr inbounds i8, ptr %12, i64 8
  %24 = load i32, ptr %18, align 4, !tbaa !128
  %25 = icmp sgt i32 %24, 0
  br i1 %25, label %.preheader471, label %._crit_edge487

.preheader471:                                    ; preds = %.preheader471.lr.ph, %._crit_edge484
  %26 = phi i32 [ %44, %._crit_edge484 ], [ %16, %.preheader471.lr.ph ]
  %27 = phi i32 [ %45, %._crit_edge484 ], [ %24, %.preheader471.lr.ph ]
  %28 = phi i32 [ %46, %._crit_edge484 ], [ %24, %.preheader471.lr.ph ]
  %.0397485 = phi i32 [ %47, %._crit_edge484 ], [ 0, %.preheader471.lr.ph ]
  %29 = icmp sgt i32 %28, 0
  %30 = load i32, ptr %19, align 8
  %31 = icmp sgt i32 %30, 0
  %or.cond = select i1 %29, i1 %31, i1 false
  br i1 %or.cond, label %.preheader470, label %._crit_edge484

._crit_edge487:                                   ; preds = %._crit_edge484, %.preheader471.lr.ph, %.preheader472
  %32 = tail call noundef zeroext i1 @_ZSteqIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32) %2, ptr noundef nonnull @.str.7)
  br i1 %32, label %.preheader445, label %378

.preheader445:                                    ; preds = %._crit_edge487
  %33 = load i32, ptr %0, align 8, !tbaa !127
  %34 = icmp sgt i32 %33, 0
  br i1 %34, label %.preheader444.lr.ph, label %._crit_edge576

.preheader444.lr.ph:                              ; preds = %.preheader445
  %35 = getelementptr inbounds i8, ptr %0, i64 4
  %36 = getelementptr inbounds i8, ptr %0, i64 8
  %37 = getelementptr inbounds i8, ptr %0, i64 520
  %invariant.gep561 = getelementptr inbounds i8, ptr %11, i64 24
  %38 = getelementptr inbounds i8, ptr %0, i64 96
  %39 = getelementptr inbounds i8, ptr %11, i64 16
  %40 = getelementptr inbounds i8, ptr %11, i64 8
  %.pre729 = load i32, ptr %35, align 4, !tbaa !128
  br label %.preheader444

.preheader470:                                    ; preds = %.preheader471, %._crit_edge482
  %41 = phi i32 [ %49, %._crit_edge482 ], [ %27, %.preheader471 ]
  %42 = phi i32 [ %50, %._crit_edge482 ], [ %30, %.preheader471 ]
  %indvars.iv622 = phi i64 [ %indvars.iv.next623, %._crit_edge482 ], [ 0, %.preheader471 ]
  %43 = icmp sgt i32 %42, 0
  br i1 %43, label %.lr.ph481, label %._crit_edge482

._crit_edge484.loopexit:                          ; preds = %._crit_edge482
  %.pre708 = load i32, ptr %0, align 8, !tbaa !127
  br label %._crit_edge484

._crit_edge484:                                   ; preds = %._crit_edge484.loopexit, %.preheader471
  %44 = phi i32 [ %.pre708, %._crit_edge484.loopexit ], [ %26, %.preheader471 ]
  %45 = phi i32 [ %49, %._crit_edge484.loopexit ], [ %27, %.preheader471 ]
  %46 = phi i32 [ %49, %._crit_edge484.loopexit ], [ %28, %.preheader471 ]
  %47 = add nuw nsw i32 %.0397485, 1
  %48 = icmp slt i32 %47, %44
  br i1 %48, label %.preheader471, label %._crit_edge487, !llvm.loop !129

._crit_edge482.loopexit:                          ; preds = %._crit_edge
  %.pre = load i32, ptr %18, align 4, !tbaa !128
  br label %._crit_edge482

._crit_edge482:                                   ; preds = %._crit_edge482.loopexit, %.preheader470
  %49 = phi i32 [ %.pre, %._crit_edge482.loopexit ], [ %41, %.preheader470 ]
  %50 = phi i32 [ %130, %._crit_edge482.loopexit ], [ %42, %.preheader470 ]
  %indvars.iv.next623 = add nuw nsw i64 %indvars.iv622, 1
  %51 = sext i32 %49 to i64
  %52 = icmp slt i64 %indvars.iv.next623, %51
  br i1 %52, label %.preheader470, label %._crit_edge484.loopexit, !llvm.loop !132

.lr.ph481:                                        ; preds = %.preheader470, %._crit_edge
  %indvars.iv619 = phi i64 [ %indvars.iv.next620, %._crit_edge ], [ 0, %.preheader470 ]
  %53 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5cellpEixEi(ptr noundef nonnull align 8 dereferenceable(40) %20, i32 noundef %.0397485)
  %54 = load ptr, ptr %53, align 8, !tbaa !133
  %55 = getelementptr inbounds ptr, ptr %54, i64 %indvars.iv622
  %56 = load ptr, ptr %55, align 8, !tbaa !133
  %57 = getelementptr inbounds %struct.cellp, ptr %56, i64 %indvars.iv619
  %.0384476 = load ptr, ptr %57, align 8, !tbaa !133
  %.not436477 = icmp eq ptr %.0384476, null
  br i1 %.not436477, label %._crit_edge, label %.lr.ph479

.lr.ph479:                                        ; preds = %.lr.ph481
  %58 = load i32, ptr %4, align 8
  %.fr598 = freeze i32 %58
  %59 = icmp sgt i32 %.fr598, 0
  %60 = load ptr, ptr %21, align 8
  br i1 %59, label %.lr.ph479.split.us.preheader, label %.lr.ph479.split

.lr.ph479.split.us.preheader:                     ; preds = %.lr.ph479
  %wide.trip.count = zext nneg i32 %.fr598 to i64
  %xtraiter = and i64 %wide.trip.count, 1
  %61 = icmp eq i32 %.fr598, 1
  %unroll_iter = and i64 %wide.trip.count, 2147483646
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br label %.lr.ph479.split.us

.lr.ph479.split.us:                               ; preds = %.lr.ph479.split.us.preheader, %..loopexit469_crit_edge.us
  %.0384478.us = phi ptr [ %.0384.us, %..loopexit469_crit_edge.us ], [ %.0384476, %.lr.ph479.split.us.preheader ]
  %62 = getelementptr inbounds i8, ptr %.0384478.us, i64 64
  %63 = load double, ptr %62, align 8, !tbaa !134
  %64 = fcmp oeq double %63, -1.000000e+00
  br i1 %64, label %94, label %65

65:                                               ; preds = %.lr.ph479.split.us
  %66 = fcmp oeq double %63, 1.000000e+00
  br i1 %66, label %89, label %67

67:                                               ; preds = %65
  %68 = fcmp oeq double %63, 0.000000e+00
  %69 = getelementptr inbounds i8, ptr %.0384478.us, i64 56
  br i1 %68, label %85, label %.preheader468.us.preheader

.preheader468.us.preheader:                       ; preds = %67
  br i1 %61, label %..loopexit469_crit_edge.us.loopexit.unr-lcssa, label %.preheader468.us

.preheader468.us:                                 ; preds = %.preheader468.us.preheader, %84
  %indvars.iv = phi i64 [ %indvars.iv.next.1, %84 ], [ 0, %.preheader468.us.preheader ]
  %niter = phi i64 [ %niter.next.1, %84 ], [ 0, %.preheader468.us.preheader ]
  %70 = getelementptr inbounds double, ptr %60, i64 %indvars.iv
  %71 = load double, ptr %70, align 8, !tbaa !126
  %72 = fcmp oeq double %63, %71
  br i1 %72, label %73, label %.preheader468.us.1

73:                                               ; preds = %.preheader468.us
  %74 = load double, ptr %69, align 8, !tbaa !136
  %gep.us = getelementptr inbounds double, ptr %invariant.gep, i64 %indvars.iv
  %75 = load double, ptr %gep.us, align 8, !tbaa !126
  %76 = fadd double %74, %75
  store double %76, ptr %gep.us, align 8, !tbaa !126
  br label %.preheader468.us.1

.preheader468.us.1:                               ; preds = %73, %.preheader468.us
  %indvars.iv.next = or disjoint i64 %indvars.iv, 1
  %77 = getelementptr inbounds double, ptr %60, i64 %indvars.iv.next
  %78 = load double, ptr %77, align 8, !tbaa !126
  %79 = fcmp oeq double %63, %78
  br i1 %79, label %80, label %84

80:                                               ; preds = %.preheader468.us.1
  %81 = load double, ptr %69, align 8, !tbaa !136
  %gep.us.1 = getelementptr inbounds double, ptr %invariant.gep, i64 %indvars.iv.next
  %82 = load double, ptr %gep.us.1, align 8, !tbaa !126
  %83 = fadd double %81, %82
  store double %83, ptr %gep.us.1, align 8, !tbaa !126
  br label %84

84:                                               ; preds = %80, %.preheader468.us.1
  %indvars.iv.next.1 = add nuw nsw i64 %indvars.iv, 2
  %niter.next.1 = add i64 %niter, 2
  %niter.ncmp.1 = icmp eq i64 %niter.next.1, %unroll_iter
  br i1 %niter.ncmp.1, label %..loopexit469_crit_edge.us.loopexit.unr-lcssa, label %.preheader468.us, !llvm.loop !137

85:                                               ; preds = %67
  %86 = load double, ptr %69, align 8, !tbaa !136
  %87 = load double, ptr %22, align 8, !tbaa !126
  %88 = fadd double %86, %87
  store double %88, ptr %22, align 8, !tbaa !126
  br label %..loopexit469_crit_edge.us

89:                                               ; preds = %65
  %90 = getelementptr inbounds i8, ptr %.0384478.us, i64 56
  %91 = load double, ptr %90, align 8, !tbaa !136
  %92 = load double, ptr %23, align 8, !tbaa !126
  %93 = fadd double %91, %92
  store double %93, ptr %23, align 8, !tbaa !126
  br label %..loopexit469_crit_edge.us

94:                                               ; preds = %.lr.ph479.split.us
  %95 = getelementptr inbounds i8, ptr %.0384478.us, i64 56
  %96 = load double, ptr %95, align 8, !tbaa !136
  %97 = load double, ptr %12, align 8, !tbaa !126
  %98 = fsub double %97, %96
  store double %98, ptr %12, align 8, !tbaa !126
  br label %..loopexit469_crit_edge.us

..loopexit469_crit_edge.us.loopexit.unr-lcssa:    ; preds = %84, %.preheader468.us.preheader
  %indvars.iv.unr = phi i64 [ 0, %.preheader468.us.preheader ], [ %indvars.iv.next.1, %84 ]
  br i1 %lcmp.mod.not, label %..loopexit469_crit_edge.us, label %.preheader468.us.epil

.preheader468.us.epil:                            ; preds = %..loopexit469_crit_edge.us.loopexit.unr-lcssa
  %99 = getelementptr inbounds double, ptr %60, i64 %indvars.iv.unr
  %100 = load double, ptr %99, align 8, !tbaa !126
  %101 = fcmp oeq double %63, %100
  br i1 %101, label %102, label %..loopexit469_crit_edge.us

102:                                              ; preds = %.preheader468.us.epil
  %103 = load double, ptr %69, align 8, !tbaa !136
  %gep.us.epil = getelementptr inbounds double, ptr %invariant.gep, i64 %indvars.iv.unr
  %104 = load double, ptr %gep.us.epil, align 8, !tbaa !126
  %105 = fadd double %103, %104
  store double %105, ptr %gep.us.epil, align 8, !tbaa !126
  br label %..loopexit469_crit_edge.us

..loopexit469_crit_edge.us:                       ; preds = %..loopexit469_crit_edge.us.loopexit.unr-lcssa, %102, %.preheader468.us.epil, %94, %89, %85
  %106 = getelementptr inbounds i8, ptr %.0384478.us, i64 88
  %.0384.us = load ptr, ptr %106, align 8, !tbaa !133
  %.not436.us = icmp eq ptr %.0384.us, null
  br i1 %.not436.us, label %._crit_edge, label %.lr.ph479.split.us, !llvm.loop !138

.lr.ph479.split:                                  ; preds = %.lr.ph479, %.preheader468
  %.0384478 = phi ptr [ %.0384, %.preheader468 ], [ %.0384476, %.lr.ph479 ]
  %107 = getelementptr inbounds i8, ptr %.0384478, i64 64
  %108 = load double, ptr %107, align 8, !tbaa !134
  %109 = fcmp oeq double %108, -1.000000e+00
  br i1 %109, label %110, label %115

110:                                              ; preds = %.lr.ph479.split
  %111 = getelementptr inbounds i8, ptr %.0384478, i64 56
  %112 = load double, ptr %111, align 8, !tbaa !136
  %113 = load double, ptr %12, align 8, !tbaa !126
  %114 = fsub double %113, %112
  store double %114, ptr %12, align 8, !tbaa !126
  br label %.preheader468

115:                                              ; preds = %.lr.ph479.split
  %116 = fcmp oeq double %108, 1.000000e+00
  br i1 %116, label %117, label %122

117:                                              ; preds = %115
  %118 = getelementptr inbounds i8, ptr %.0384478, i64 56
  %119 = load double, ptr %118, align 8, !tbaa !136
  %120 = load double, ptr %23, align 8, !tbaa !126
  %121 = fadd double %119, %120
  store double %121, ptr %23, align 8, !tbaa !126
  br label %.preheader468

122:                                              ; preds = %115
  %123 = fcmp oeq double %108, 0.000000e+00
  br i1 %123, label %124, label %.preheader468

124:                                              ; preds = %122
  %125 = getelementptr inbounds i8, ptr %.0384478, i64 56
  %126 = load double, ptr %125, align 8, !tbaa !136
  %127 = load double, ptr %22, align 8, !tbaa !126
  %128 = fadd double %126, %127
  store double %128, ptr %22, align 8, !tbaa !126
  br label %.preheader468

.preheader468:                                    ; preds = %122, %117, %124, %110
  %129 = getelementptr inbounds i8, ptr %.0384478, i64 88
  %.0384 = load ptr, ptr %129, align 8, !tbaa !133
  %.not436 = icmp eq ptr %.0384, null
  br i1 %.not436, label %._crit_edge, label %.lr.ph479.split, !llvm.loop !138

._crit_edge:                                      ; preds = %.preheader468, %..loopexit469_crit_edge.us, %.lr.ph481
  %indvars.iv.next620 = add nuw nsw i64 %indvars.iv619, 1
  %130 = load i32, ptr %19, align 8, !tbaa !139
  %131 = sext i32 %130 to i64
  %132 = icmp slt i64 %indvars.iv.next620, %131
  br i1 %132, label %.lr.ph481, label %._crit_edge482.loopexit, !llvm.loop !140

.preheader444:                                    ; preds = %.preheader444.lr.ph, %._crit_edge573
  %133 = phi i32 [ %33, %.preheader444.lr.ph ], [ %147, %._crit_edge573 ]
  %134 = phi i32 [ %.pre729, %.preheader444.lr.ph ], [ %148, %._crit_edge573 ]
  %135 = phi i32 [ %.pre729, %.preheader444.lr.ph ], [ %149, %._crit_edge573 ]
  %.0393574 = phi i32 [ 0, %.preheader444.lr.ph ], [ %150, %._crit_edge573 ]
  %136 = icmp sgt i32 %135, 0
  %137 = load i32, ptr %36, align 8
  %138 = icmp sgt i32 %137, 0
  %or.cond791 = select i1 %136, i1 %138, i1 false
  br i1 %or.cond791, label %.preheader443, label %._crit_edge573

._crit_edge576:                                   ; preds = %._crit_edge573, %.preheader445
  %139 = phi i32 [ %33, %.preheader445 ], [ %147, %._crit_edge573 ]
  %140 = load double, ptr %12, align 8, !tbaa !126
  %141 = load double, ptr %11, align 8, !tbaa !126
  %142 = fsub double %140, %141
  %143 = fcmp une double %142, 0.000000e+00
  br i1 %143, label %248, label %250

.preheader443:                                    ; preds = %.preheader444, %._crit_edge571
  %144 = phi i32 [ %152, %._crit_edge571 ], [ %134, %.preheader444 ]
  %145 = phi i32 [ %153, %._crit_edge571 ], [ %137, %.preheader444 ]
  %indvars.iv689 = phi i64 [ %indvars.iv.next690, %._crit_edge571 ], [ 0, %.preheader444 ]
  %146 = icmp sgt i32 %145, 0
  br i1 %146, label %.lr.ph570, label %._crit_edge571

._crit_edge573.loopexit:                          ; preds = %._crit_edge571
  %.pre733 = load i32, ptr %0, align 8, !tbaa !127
  br label %._crit_edge573

._crit_edge573:                                   ; preds = %._crit_edge573.loopexit, %.preheader444
  %147 = phi i32 [ %.pre733, %._crit_edge573.loopexit ], [ %133, %.preheader444 ]
  %148 = phi i32 [ %152, %._crit_edge573.loopexit ], [ %134, %.preheader444 ]
  %149 = phi i32 [ %152, %._crit_edge573.loopexit ], [ %135, %.preheader444 ]
  %150 = add nuw nsw i32 %.0393574, 1
  %151 = icmp slt i32 %150, %147
  br i1 %151, label %.preheader444, label %._crit_edge576, !llvm.loop !141

._crit_edge571.loopexit:                          ; preds = %._crit_edge568
  %.pre732 = load i32, ptr %35, align 4, !tbaa !128
  br label %._crit_edge571

._crit_edge571:                                   ; preds = %._crit_edge571.loopexit, %.preheader443
  %152 = phi i32 [ %.pre732, %._crit_edge571.loopexit ], [ %144, %.preheader443 ]
  %153 = phi i32 [ %245, %._crit_edge571.loopexit ], [ %145, %.preheader443 ]
  %indvars.iv.next690 = add nuw nsw i64 %indvars.iv689, 1
  %154 = sext i32 %152 to i64
  %155 = icmp slt i64 %indvars.iv.next690, %154
  br i1 %155, label %.preheader443, label %._crit_edge573.loopexit, !llvm.loop !142

.lr.ph570:                                        ; preds = %.preheader443, %._crit_edge568
  %indvars.iv686 = phi i64 [ %indvars.iv.next687, %._crit_edge568 ], [ 0, %.preheader443 ]
  %156 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5cellpEixEi(ptr noundef nonnull align 8 dereferenceable(40) %37, i32 noundef %.0393574)
  %157 = load ptr, ptr %156, align 8, !tbaa !133
  %158 = getelementptr inbounds ptr, ptr %157, i64 %indvars.iv689
  %159 = load ptr, ptr %158, align 8, !tbaa !133
  %160 = getelementptr inbounds %struct.cellp, ptr %159, i64 %indvars.iv686
  %161 = load ptr, ptr %160, align 8, !tbaa !143
  %.not433564 = icmp eq ptr %161, null
  br i1 %.not433564, label %._crit_edge568, label %.lr.ph567

.lr.ph567:                                        ; preds = %.lr.ph570, %244
  %.1565 = phi ptr [ %166, %244 ], [ %161, %.lr.ph570 ]
  %162 = tail call noundef double @_ZN14spatial_region8get_randEv(ptr noundef nonnull align 8 dereferenceable(608) %0)
  %163 = load double, ptr %1, align 8, !tbaa !126
  %164 = fcmp olt double %162, %163
  %165 = getelementptr inbounds i8, ptr %.1565, i64 88
  %166 = load ptr, ptr %165, align 8, !tbaa !146
  br i1 %164, label %167, label %244

167:                                              ; preds = %.lr.ph567
  %168 = getelementptr inbounds i8, ptr %.1565, i64 64
  %169 = load double, ptr %168, align 8, !tbaa !134
  %170 = fcmp oeq double %169, -1.000000e+00
  br i1 %170, label %171, label %176

171:                                              ; preds = %167
  %172 = getelementptr inbounds i8, ptr %.1565, i64 56
  %173 = load double, ptr %172, align 8, !tbaa !136
  %174 = load double, ptr %11, align 8, !tbaa !126
  %175 = fsub double %174, %173
  store double %175, ptr %11, align 8, !tbaa !126
  br label %.loopexit442

176:                                              ; preds = %167
  %177 = fcmp oeq double %169, 1.000000e+00
  br i1 %177, label %178, label %183

178:                                              ; preds = %176
  %179 = getelementptr inbounds i8, ptr %.1565, i64 56
  %180 = load double, ptr %179, align 8, !tbaa !136
  %181 = load double, ptr %40, align 8, !tbaa !126
  %182 = fadd double %180, %181
  store double %182, ptr %40, align 8, !tbaa !126
  br label %.loopexit442

183:                                              ; preds = %176
  %184 = fcmp oeq double %169, 0.000000e+00
  br i1 %184, label %190, label %.preheader441

.preheader441:                                    ; preds = %183
  %185 = load i32, ptr %4, align 8, !tbaa !5
  %186 = icmp sgt i32 %185, 0
  br i1 %186, label %.lr.ph563, label %.loopexit442

.lr.ph563:                                        ; preds = %.preheader441
  %187 = load ptr, ptr %38, align 8, !tbaa !147
  %188 = getelementptr inbounds i8, ptr %.1565, i64 56
  %wide.trip.count684 = zext nneg i32 %185 to i64
  %xtraiter875 = and i64 %wide.trip.count684, 1
  %189 = icmp eq i32 %185, 1
  br i1 %189, label %.loopexit442.loopexit.unr-lcssa, label %.lr.ph563.new

.lr.ph563.new:                                    ; preds = %.lr.ph563
  %unroll_iter877 = and i64 %wide.trip.count684, 2147483646
  br label %195

190:                                              ; preds = %183
  %191 = getelementptr inbounds i8, ptr %.1565, i64 56
  %192 = load double, ptr %191, align 8, !tbaa !136
  %193 = load double, ptr %39, align 8, !tbaa !126
  %194 = fadd double %192, %193
  store double %194, ptr %39, align 8, !tbaa !126
  br label %.loopexit442

195:                                              ; preds = %213, %.lr.ph563.new
  %indvars.iv681 = phi i64 [ 0, %.lr.ph563.new ], [ %indvars.iv.next682.1, %213 ]
  %niter878 = phi i64 [ 0, %.lr.ph563.new ], [ %niter878.next.1, %213 ]
  %196 = load double, ptr %168, align 8, !tbaa !134
  %197 = getelementptr inbounds double, ptr %187, i64 %indvars.iv681
  %198 = load double, ptr %197, align 8, !tbaa !126
  %199 = fcmp oeq double %196, %198
  br i1 %199, label %200, label %204

200:                                              ; preds = %195
  %201 = load double, ptr %188, align 8, !tbaa !136
  %gep = getelementptr inbounds double, ptr %invariant.gep561, i64 %indvars.iv681
  %202 = load double, ptr %gep, align 8, !tbaa !126
  %203 = fadd double %201, %202
  store double %203, ptr %gep, align 8, !tbaa !126
  br label %204

204:                                              ; preds = %195, %200
  %indvars.iv.next682 = or disjoint i64 %indvars.iv681, 1
  %205 = load double, ptr %168, align 8, !tbaa !134
  %206 = getelementptr inbounds double, ptr %187, i64 %indvars.iv.next682
  %207 = load double, ptr %206, align 8, !tbaa !126
  %208 = fcmp oeq double %205, %207
  br i1 %208, label %209, label %213

209:                                              ; preds = %204
  %210 = load double, ptr %188, align 8, !tbaa !136
  %gep.1 = getelementptr inbounds double, ptr %invariant.gep561, i64 %indvars.iv.next682
  %211 = load double, ptr %gep.1, align 8, !tbaa !126
  %212 = fadd double %210, %211
  store double %212, ptr %gep.1, align 8, !tbaa !126
  br label %213

213:                                              ; preds = %209, %204
  %indvars.iv.next682.1 = add nuw nsw i64 %indvars.iv681, 2
  %niter878.next.1 = add i64 %niter878, 2
  %niter878.ncmp.1 = icmp eq i64 %niter878.next.1, %unroll_iter877
  br i1 %niter878.ncmp.1, label %.loopexit442.loopexit.unr-lcssa, label %195, !llvm.loop !148

.loopexit442.loopexit.unr-lcssa:                  ; preds = %213, %.lr.ph563
  %indvars.iv681.unr = phi i64 [ 0, %.lr.ph563 ], [ %indvars.iv.next682.1, %213 ]
  %lcmp.mod876.not = icmp eq i64 %xtraiter875, 0
  br i1 %lcmp.mod876.not, label %.loopexit442, label %.epil.preheader874

.epil.preheader874:                               ; preds = %.loopexit442.loopexit.unr-lcssa
  %214 = load double, ptr %168, align 8, !tbaa !134
  %215 = getelementptr inbounds double, ptr %187, i64 %indvars.iv681.unr
  %216 = load double, ptr %215, align 8, !tbaa !126
  %217 = fcmp oeq double %214, %216
  br i1 %217, label %218, label %.loopexit442

218:                                              ; preds = %.epil.preheader874
  %219 = load double, ptr %188, align 8, !tbaa !136
  %gep.epil = getelementptr inbounds double, ptr %invariant.gep561, i64 %indvars.iv681.unr
  %220 = load double, ptr %gep.epil, align 8, !tbaa !126
  %221 = fadd double %219, %220
  store double %221, ptr %gep.epil, align 8, !tbaa !126
  br label %.loopexit442

.loopexit442:                                     ; preds = %.loopexit442.loopexit.unr-lcssa, %218, %.epil.preheader874, %.preheader441, %178, %190, %171
  %.not434 = icmp eq ptr %166, null
  %.phi.trans.insert730 = getelementptr inbounds i8, ptr %.1565, i64 96
  %.pre731 = load ptr, ptr %.phi.trans.insert730, align 8, !tbaa !149
  br i1 %.not434, label %.loopexit442._crit_edge, label %222

222:                                              ; preds = %.loopexit442
  %223 = getelementptr inbounds i8, ptr %166, i64 96
  store ptr %.pre731, ptr %223, align 8, !tbaa !149
  br label %.loopexit442._crit_edge

.loopexit442._crit_edge:                          ; preds = %.loopexit442, %222
  %.not435 = icmp eq ptr %.pre731, null
  br i1 %.not435, label %226, label %224

224:                                              ; preds = %.loopexit442._crit_edge
  %225 = getelementptr inbounds i8, ptr %.pre731, i64 88
  store ptr %166, ptr %225, align 8, !tbaa !146
  br label %243

226:                                              ; preds = %.loopexit442._crit_edge
  %227 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5cellpEixEi(ptr noundef nonnull align 8 dereferenceable(40) %37, i32 noundef %.0393574)
  %228 = load ptr, ptr %227, align 8, !tbaa !133
  %229 = getelementptr inbounds ptr, ptr %228, i64 %indvars.iv689
  %230 = load ptr, ptr %229, align 8, !tbaa !133
  %231 = getelementptr inbounds %struct.cellp, ptr %230, i64 %indvars.iv686
  store ptr %166, ptr %231, align 8, !tbaa !143
  %232 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5cellpEixEi(ptr noundef nonnull align 8 dereferenceable(40) %37, i32 noundef %.0393574)
  %233 = load ptr, ptr %232, align 8, !tbaa !133
  %234 = getelementptr inbounds ptr, ptr %233, i64 %indvars.iv689
  %235 = load ptr, ptr %234, align 8, !tbaa !133
  %236 = getelementptr inbounds %struct.cellp, ptr %235, i64 %indvars.iv686
  %237 = load ptr, ptr %236, align 8, !tbaa !143
  %238 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5cellpEixEi(ptr noundef nonnull align 8 dereferenceable(40) %37, i32 noundef %.0393574)
  %239 = load ptr, ptr %238, align 8, !tbaa !133
  %240 = getelementptr inbounds ptr, ptr %239, i64 %indvars.iv689
  %241 = load ptr, ptr %240, align 8, !tbaa !133
  %242 = getelementptr inbounds %struct.cellp, ptr %241, i64 %indvars.iv686, i32 0, i32 1
  store ptr %237, ptr %242, align 8, !tbaa !150
  br label %243

243:                                              ; preds = %226, %224
  tail call void @_ZN14spatial_region15delete_particleEP8particleb(ptr noundef nonnull align 8 dereferenceable(608) %0, ptr noundef nonnull %.1565, i1 noundef zeroext false)
  br label %244

244:                                              ; preds = %.lr.ph567, %243
  %.not433 = icmp eq ptr %166, null
  br i1 %.not433, label %._crit_edge568, label %.lr.ph567, !llvm.loop !151

._crit_edge568:                                   ; preds = %244, %.lr.ph570
  %indvars.iv.next687 = add nuw nsw i64 %indvars.iv686, 1
  %245 = load i32, ptr %36, align 8, !tbaa !139
  %246 = sext i32 %245 to i64
  %247 = icmp slt i64 %indvars.iv.next687, %246
  br i1 %247, label %.lr.ph570, label %._crit_edge571.loopexit, !llvm.loop !152

248:                                              ; preds = %._crit_edge576
  %249 = fdiv double %140, %142
  store double %249, ptr %12, align 8, !tbaa !126
  br label %250

250:                                              ; preds = %248, %._crit_edge576
  %251 = getelementptr inbounds i8, ptr %12, i64 8
  %252 = load double, ptr %251, align 8, !tbaa !126
  %253 = getelementptr inbounds i8, ptr %11, i64 8
  %254 = load double, ptr %253, align 8, !tbaa !126
  %255 = fsub double %252, %254
  %256 = fcmp une double %255, 0.000000e+00
  br i1 %256, label %257, label %259

257:                                              ; preds = %250
  %258 = fdiv double %252, %255
  store double %258, ptr %251, align 8, !tbaa !126
  br label %259

259:                                              ; preds = %257, %250
  %260 = getelementptr inbounds i8, ptr %12, i64 16
  %261 = load double, ptr %260, align 8, !tbaa !126
  %262 = getelementptr inbounds i8, ptr %11, i64 16
  %263 = load double, ptr %262, align 8, !tbaa !126
  %264 = fsub double %261, %263
  %265 = fcmp une double %264, 0.000000e+00
  br i1 %265, label %266, label %268

266:                                              ; preds = %259
  %267 = fdiv double %261, %264
  store double %267, ptr %260, align 8, !tbaa !126
  br label %268

268:                                              ; preds = %266, %259
  %269 = load i32, ptr %4, align 8, !tbaa !5
  %270 = icmp sgt i32 %269, 0
  br i1 %270, label %.lr.ph579.preheader, label %.preheader439

.lr.ph579.preheader:                              ; preds = %268
  %wide.trip.count695 = zext nneg i32 %269 to i64
  %min.iters.check826 = icmp eq i32 %269, 1
  br i1 %min.iters.check826, label %.lr.ph579.preheader841, label %vector.ph827

.lr.ph579.preheader841:                           ; preds = %middle.block824, %.lr.ph579.preheader
  %indvars.iv692.ph = phi i64 [ 0, %.lr.ph579.preheader ], [ %n.vec829, %middle.block824 ]
  br label %.lr.ph579

vector.ph827:                                     ; preds = %.lr.ph579.preheader
  %n.vec829 = and i64 %wide.trip.count695, 2147483646
  %invariant.gep901 = getelementptr i8, ptr %12, i64 24
  %invariant.gep903 = getelementptr i8, ptr %12, i64 32
  br label %vector.body831

vector.body831:                                   ; preds = %pred.store.continue836, %vector.ph827
  %index832 = phi i64 [ 0, %vector.ph827 ], [ %index.next837, %pred.store.continue836 ]
  %271 = add nuw nsw i64 %index832, 3
  %272 = getelementptr inbounds double, ptr %12, i64 %271
  %wide.load833 = load <2 x double>, ptr %272, align 8, !tbaa !126
  %273 = getelementptr inbounds double, ptr %11, i64 %271
  %wide.load834 = load <2 x double>, ptr %273, align 8, !tbaa !126
  %274 = fsub <2 x double> %wide.load833, %wide.load834
  %275 = fcmp une <2 x double> %274, zeroinitializer
  %276 = extractelement <2 x i1> %275, i64 0
  br i1 %276, label %pred.store.if, label %pred.store.continue

pred.store.if:                                    ; preds = %vector.body831
  %gep902 = getelementptr double, ptr %invariant.gep901, i64 %index832
  %277 = extractelement <2 x double> %wide.load833, i64 0
  %278 = extractelement <2 x double> %274, i64 0
  %279 = fdiv double %277, %278
  store double %279, ptr %gep902, align 8, !tbaa !126
  br label %pred.store.continue

pred.store.continue:                              ; preds = %pred.store.if, %vector.body831
  %280 = extractelement <2 x i1> %275, i64 1
  br i1 %280, label %pred.store.if835, label %pred.store.continue836

pred.store.if835:                                 ; preds = %pred.store.continue
  %gep904 = getelementptr double, ptr %invariant.gep903, i64 %index832
  %281 = extractelement <2 x double> %wide.load833, i64 1
  %282 = extractelement <2 x double> %274, i64 1
  %283 = fdiv double %281, %282
  store double %283, ptr %gep904, align 8, !tbaa !126
  br label %pred.store.continue836

pred.store.continue836:                           ; preds = %pred.store.if835, %pred.store.continue
  %index.next837 = add nuw i64 %index832, 2
  %284 = icmp eq i64 %index.next837, %n.vec829
  br i1 %284, label %middle.block824, label %vector.body831, !llvm.loop !153

middle.block824:                                  ; preds = %pred.store.continue836
  %cmp.n838 = icmp eq i64 %n.vec829, %wide.trip.count695
  br i1 %cmp.n838, label %.preheader439, label %.lr.ph579.preheader841

.preheader439:                                    ; preds = %299, %middle.block824, %268
  %285 = icmp sgt i32 %139, 0
  br i1 %285, label %.preheader438.lr.ph, label %.loopexit440

.preheader438.lr.ph:                              ; preds = %.preheader439
  %286 = getelementptr inbounds i8, ptr %0, i64 4
  %287 = getelementptr inbounds i8, ptr %0, i64 8
  %288 = getelementptr inbounds i8, ptr %0, i64 520
  %invariant.gep580 = getelementptr inbounds i8, ptr %12, i64 24
  %289 = getelementptr inbounds i8, ptr %0, i64 96
  %.pre734 = load i32, ptr %286, align 4, !tbaa !128
  br label %.preheader438

.lr.ph579:                                        ; preds = %.lr.ph579.preheader841, %299
  %indvars.iv692 = phi i64 [ %indvars.iv.next693, %299 ], [ %indvars.iv692.ph, %.lr.ph579.preheader841 ]
  %290 = add nuw nsw i64 %indvars.iv692, 3
  %291 = getelementptr inbounds double, ptr %12, i64 %290
  %292 = load double, ptr %291, align 8, !tbaa !126
  %293 = getelementptr inbounds double, ptr %11, i64 %290
  %294 = load double, ptr %293, align 8, !tbaa !126
  %295 = fsub double %292, %294
  %296 = fcmp une double %295, 0.000000e+00
  br i1 %296, label %297, label %299

297:                                              ; preds = %.lr.ph579
  %298 = fdiv double %292, %295
  store double %298, ptr %291, align 8, !tbaa !126
  br label %299

299:                                              ; preds = %.lr.ph579, %297
  %indvars.iv.next693 = add nuw nsw i64 %indvars.iv692, 1
  %exitcond696.not = icmp eq i64 %indvars.iv.next693, %wide.trip.count695
  br i1 %exitcond696.not, label %.preheader439, label %.lr.ph579, !llvm.loop !156

.preheader438:                                    ; preds = %.preheader438.lr.ph, %._crit_edge595
  %300 = phi i32 [ %139, %.preheader438.lr.ph ], [ %309, %._crit_edge595 ]
  %301 = phi i32 [ %.pre734, %.preheader438.lr.ph ], [ %310, %._crit_edge595 ]
  %302 = phi i32 [ %.pre734, %.preheader438.lr.ph ], [ %311, %._crit_edge595 ]
  %.0388596 = phi i32 [ 0, %.preheader438.lr.ph ], [ %312, %._crit_edge595 ]
  %303 = icmp sgt i32 %302, 0
  %304 = load i32, ptr %287, align 8
  %305 = icmp sgt i32 %304, 0
  %or.cond793 = select i1 %303, i1 %305, i1 false
  br i1 %or.cond793, label %.preheader437, label %._crit_edge595

.preheader437:                                    ; preds = %.preheader438, %._crit_edge593
  %306 = phi i32 [ %314, %._crit_edge593 ], [ %301, %.preheader438 ]
  %307 = phi i32 [ %315, %._crit_edge593 ], [ %304, %.preheader438 ]
  %indvars.iv705 = phi i64 [ %indvars.iv.next706, %._crit_edge593 ], [ 0, %.preheader438 ]
  %308 = icmp sgt i32 %307, 0
  br i1 %308, label %.lr.ph592, label %._crit_edge593

._crit_edge595.loopexit:                          ; preds = %._crit_edge593
  %.pre736 = load i32, ptr %0, align 8, !tbaa !127
  br label %._crit_edge595

._crit_edge595:                                   ; preds = %._crit_edge595.loopexit, %.preheader438
  %309 = phi i32 [ %.pre736, %._crit_edge595.loopexit ], [ %300, %.preheader438 ]
  %310 = phi i32 [ %314, %._crit_edge595.loopexit ], [ %301, %.preheader438 ]
  %311 = phi i32 [ %314, %._crit_edge595.loopexit ], [ %302, %.preheader438 ]
  %312 = add nuw nsw i32 %.0388596, 1
  %313 = icmp slt i32 %312, %309
  br i1 %313, label %.preheader438, label %.loopexit440, !llvm.loop !157

._crit_edge593.loopexit:                          ; preds = %._crit_edge589
  %.pre735 = load i32, ptr %286, align 4, !tbaa !128
  br label %._crit_edge593

._crit_edge593:                                   ; preds = %._crit_edge593.loopexit, %.preheader437
  %314 = phi i32 [ %.pre735, %._crit_edge593.loopexit ], [ %306, %.preheader437 ]
  %315 = phi i32 [ %375, %._crit_edge593.loopexit ], [ %307, %.preheader437 ]
  %indvars.iv.next706 = add nuw nsw i64 %indvars.iv705, 1
  %316 = sext i32 %314 to i64
  %317 = icmp slt i64 %indvars.iv.next706, %316
  br i1 %317, label %.preheader437, label %._crit_edge595.loopexit, !llvm.loop !158

.lr.ph592:                                        ; preds = %.preheader437, %._crit_edge589
  %indvars.iv702 = phi i64 [ %indvars.iv.next703, %._crit_edge589 ], [ 0, %.preheader437 ]
  %318 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5cellpEixEi(ptr noundef nonnull align 8 dereferenceable(40) %288, i32 noundef %.0388596)
  %319 = load ptr, ptr %318, align 8, !tbaa !133
  %320 = getelementptr inbounds ptr, ptr %319, i64 %indvars.iv705
  %321 = load ptr, ptr %320, align 8, !tbaa !133
  %322 = getelementptr inbounds %struct.cellp, ptr %321, i64 %indvars.iv702
  %.3584 = load ptr, ptr %322, align 8, !tbaa !133
  %.not432585 = icmp eq ptr %.3584, null
  br i1 %.not432585, label %._crit_edge589, label %.lr.ph588

.lr.ph588:                                        ; preds = %.lr.ph592
  %323 = load i32, ptr %4, align 8
  %.fr600 = freeze i32 %323
  %324 = icmp sgt i32 %.fr600, 0
  %325 = load ptr, ptr %289, align 8
  br i1 %324, label %.lr.ph588.split.us.preheader, label %.lr.ph588.split

.lr.ph588.split.us.preheader:                     ; preds = %.lr.ph588
  %wide.trip.count700 = zext nneg i32 %.fr600 to i64
  %xtraiter880 = and i64 %wide.trip.count700, 1
  %326 = icmp eq i32 %.fr600, 1
  %unroll_iter882 = and i64 %wide.trip.count700, 2147483646
  %lcmp.mod881.not = icmp eq i64 %xtraiter880, 0
  br label %.lr.ph588.split.us

.lr.ph588.split.us:                               ; preds = %.lr.ph588.split.us.preheader, %..loopexit_crit_edge.us
  %.3586.us = phi ptr [ %.3.us, %..loopexit_crit_edge.us ], [ %.3584, %.lr.ph588.split.us.preheader ]
  %327 = getelementptr inbounds i8, ptr %.3586.us, i64 64
  %328 = load double, ptr %327, align 8, !tbaa !134
  %329 = fcmp oeq double %328, -1.000000e+00
  br i1 %329, label %..loopexit_crit_edge.us.sink.split, label %330

330:                                              ; preds = %.lr.ph588.split.us
  %331 = fcmp oeq double %328, 1.000000e+00
  br i1 %331, label %..loopexit_crit_edge.us.sink.split, label %332

332:                                              ; preds = %330
  %333 = fcmp oeq double %328, 0.000000e+00
  br i1 %333, label %..loopexit_crit_edge.us.sink.split, label %.preheader.us

.preheader.us.new:                                ; preds = %.preheader.us, %349
  %indvars.iv697 = phi i64 [ %indvars.iv.next698.1, %349 ], [ 0, %.preheader.us ]
  %niter883 = phi i64 [ %niter883.next.1, %349 ], [ 0, %.preheader.us ]
  %334 = getelementptr inbounds double, ptr %325, i64 %indvars.iv697
  %335 = load double, ptr %334, align 8, !tbaa !126
  %336 = fcmp oeq double %328, %335
  br i1 %336, label %337, label %341

337:                                              ; preds = %.preheader.us.new
  %gep581.us = getelementptr inbounds double, ptr %invariant.gep580, i64 %indvars.iv697
  %338 = load double, ptr %gep581.us, align 8, !tbaa !126
  %339 = load double, ptr %362, align 8, !tbaa !136
  %340 = fmul double %338, %339
  store double %340, ptr %362, align 8, !tbaa !136
  br label %341

341:                                              ; preds = %337, %.preheader.us.new
  %indvars.iv.next698 = or disjoint i64 %indvars.iv697, 1
  %342 = getelementptr inbounds double, ptr %325, i64 %indvars.iv.next698
  %343 = load double, ptr %342, align 8, !tbaa !126
  %344 = fcmp oeq double %328, %343
  br i1 %344, label %345, label %349

345:                                              ; preds = %341
  %gep581.us.1 = getelementptr inbounds double, ptr %invariant.gep580, i64 %indvars.iv.next698
  %346 = load double, ptr %gep581.us.1, align 8, !tbaa !126
  %347 = load double, ptr %362, align 8, !tbaa !136
  %348 = fmul double %346, %347
  store double %348, ptr %362, align 8, !tbaa !136
  br label %349

349:                                              ; preds = %345, %341
  %indvars.iv.next698.1 = add nuw nsw i64 %indvars.iv697, 2
  %niter883.next.1 = add i64 %niter883, 2
  %niter883.ncmp.1 = icmp eq i64 %niter883.next.1, %unroll_iter882
  br i1 %niter883.ncmp.1, label %..loopexit_crit_edge.us.loopexit.unr-lcssa, label %.preheader.us.new, !llvm.loop !159

..loopexit_crit_edge.us.sink.split:               ; preds = %.lr.ph588.split.us, %330, %332
  %.sink = phi ptr [ %260, %332 ], [ %251, %330 ], [ %12, %.lr.ph588.split.us ]
  %350 = load double, ptr %.sink, align 8, !tbaa !126
  %351 = getelementptr inbounds i8, ptr %.3586.us, i64 56
  %352 = load double, ptr %351, align 8, !tbaa !136
  %353 = fmul double %350, %352
  store double %353, ptr %351, align 8, !tbaa !136
  br label %..loopexit_crit_edge.us

..loopexit_crit_edge.us.loopexit.unr-lcssa:       ; preds = %349, %.preheader.us
  %indvars.iv697.unr = phi i64 [ 0, %.preheader.us ], [ %indvars.iv.next698.1, %349 ]
  br i1 %lcmp.mod881.not, label %..loopexit_crit_edge.us, label %.epil.preheader879

.epil.preheader879:                               ; preds = %..loopexit_crit_edge.us.loopexit.unr-lcssa
  %354 = getelementptr inbounds double, ptr %325, i64 %indvars.iv697.unr
  %355 = load double, ptr %354, align 8, !tbaa !126
  %356 = fcmp oeq double %328, %355
  br i1 %356, label %357, label %..loopexit_crit_edge.us

357:                                              ; preds = %.epil.preheader879
  %gep581.us.epil = getelementptr inbounds double, ptr %invariant.gep580, i64 %indvars.iv697.unr
  %358 = load double, ptr %gep581.us.epil, align 8, !tbaa !126
  %359 = load double, ptr %362, align 8, !tbaa !136
  %360 = fmul double %358, %359
  store double %360, ptr %362, align 8, !tbaa !136
  br label %..loopexit_crit_edge.us

..loopexit_crit_edge.us:                          ; preds = %..loopexit_crit_edge.us.loopexit.unr-lcssa, %357, %.epil.preheader879, %..loopexit_crit_edge.us.sink.split
  %361 = getelementptr inbounds i8, ptr %.3586.us, i64 88
  %.3.us = load ptr, ptr %361, align 8, !tbaa !133
  %.not432.us = icmp eq ptr %.3.us, null
  br i1 %.not432.us, label %._crit_edge589, label %.lr.ph588.split.us, !llvm.loop !160

.preheader.us:                                    ; preds = %332
  %362 = getelementptr inbounds i8, ptr %.3586.us, i64 56
  br i1 %326, label %..loopexit_crit_edge.us.loopexit.unr-lcssa, label %.preheader.us.new

.lr.ph588.split:                                  ; preds = %.lr.ph588, %.preheader
  %.3586 = phi ptr [ %.3, %.preheader ], [ %.3584, %.lr.ph588 ]
  %363 = getelementptr inbounds i8, ptr %.3586, i64 64
  %364 = load double, ptr %363, align 8, !tbaa !134
  %365 = fcmp oeq double %364, -1.000000e+00
  br i1 %365, label %.preheader.sink.split, label %366

366:                                              ; preds = %.lr.ph588.split
  %367 = fcmp oeq double %364, 1.000000e+00
  br i1 %367, label %.preheader.sink.split, label %368

368:                                              ; preds = %366
  %369 = fcmp oeq double %364, 0.000000e+00
  br i1 %369, label %.preheader.sink.split, label %.preheader

.preheader.sink.split:                            ; preds = %368, %366, %.lr.ph588.split
  %.sink767 = phi ptr [ %12, %.lr.ph588.split ], [ %251, %366 ], [ %260, %368 ]
  %370 = load double, ptr %.sink767, align 8, !tbaa !126
  %371 = getelementptr inbounds i8, ptr %.3586, i64 56
  %372 = load double, ptr %371, align 8, !tbaa !136
  %373 = fmul double %370, %372
  store double %373, ptr %371, align 8, !tbaa !136
  br label %.preheader

.preheader:                                       ; preds = %.preheader.sink.split, %368
  %374 = getelementptr inbounds i8, ptr %.3586, i64 88
  %.3 = load ptr, ptr %374, align 8, !tbaa !133
  %.not432 = icmp eq ptr %.3, null
  br i1 %.not432, label %._crit_edge589, label %.lr.ph588.split, !llvm.loop !160

._crit_edge589:                                   ; preds = %.preheader, %..loopexit_crit_edge.us, %.lr.ph592
  %indvars.iv.next703 = add nuw nsw i64 %indvars.iv702, 1
  %375 = load i32, ptr %287, align 8, !tbaa !139
  %376 = sext i32 %375 to i64
  %377 = icmp slt i64 %indvars.iv.next703, %376
  br i1 %377, label %.lr.ph592, label %._crit_edge593.loopexit, !llvm.loop !161

378:                                              ; preds = %._crit_edge487
  %379 = tail call noundef zeroext i1 @_ZSteqIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32) %2, ptr noundef nonnull @.str.8)
  br i1 %379, label %380, label %.loopexit440

380:                                              ; preds = %378
  %381 = load i32, ptr %4, align 8, !tbaa !5
  %382 = add i32 %381, 3
  %383 = sext i32 %382 to i64
  %384 = icmp slt i32 %381, -3
  %385 = shl nsw i64 %383, 3
  %386 = select i1 %384, i64 -1, i64 %385
  %387 = tail call noalias noundef nonnull ptr @_Znam(i64 noundef %386) #10
  %388 = icmp sgt i32 %381, -3
  br i1 %388, label %.lr.ph490.preheader, label %.preheader467

.lr.ph490.preheader:                              ; preds = %380
  %smax625 = tail call i32 @llvm.smax.i32(i32 %382, i32 1)
  %389 = zext nneg i32 %smax625 to i64
  %390 = shl nuw nsw i64 %389, 3
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(1) %387, i8 0, i64 %390, i1 false), !tbaa !126
  br label %.preheader467

.preheader467:                                    ; preds = %.lr.ph490.preheader, %380
  %391 = load i32, ptr %0, align 8, !tbaa !127
  %392 = icmp sgt i32 %391, 0
  br i1 %392, label %.preheader466.lr.ph, label %.preheader462

.preheader466.lr.ph:                              ; preds = %.preheader467
  %393 = getelementptr inbounds i8, ptr %0, i64 4
  %394 = getelementptr inbounds i8, ptr %0, i64 8
  %395 = getelementptr inbounds i8, ptr %0, i64 520
  %invariant.gep491 = getelementptr inbounds i8, ptr %387, i64 24
  %396 = getelementptr inbounds i8, ptr %0, i64 96
  %397 = getelementptr inbounds i8, ptr %387, i64 16
  %398 = getelementptr inbounds i8, ptr %387, i64 8
  %399 = load i32, ptr %393, align 4, !tbaa !128
  %400 = icmp sgt i32 %399, 0
  br i1 %400, label %.preheader466, label %.preheader462

.preheader466:                                    ; preds = %.preheader466.lr.ph, %._crit_edge506
  %401 = phi i32 [ %419, %._crit_edge506 ], [ %391, %.preheader466.lr.ph ]
  %402 = phi i32 [ %420, %._crit_edge506 ], [ %399, %.preheader466.lr.ph ]
  %403 = phi i32 [ %421, %._crit_edge506 ], [ %399, %.preheader466.lr.ph ]
  %.0382507 = phi i32 [ %422, %._crit_edge506 ], [ 0, %.preheader466.lr.ph ]
  %404 = icmp sgt i32 %403, 0
  %405 = load i32, ptr %394, align 8
  %406 = icmp sgt i32 %405, 0
  %or.cond795 = select i1 %404, i1 %406, i1 false
  br i1 %or.cond795, label %.preheader465, label %._crit_edge506

.preheader462.loopexit:                           ; preds = %._crit_edge506
  %.pre711 = load i32, ptr %4, align 8, !tbaa !5
  br label %.preheader462

.preheader462:                                    ; preds = %.preheader466.lr.ph, %.preheader462.loopexit, %.preheader467
  %407 = phi i32 [ %419, %.preheader462.loopexit ], [ %391, %.preheader467 ], [ %391, %.preheader466.lr.ph ]
  %408 = phi i32 [ %.pre711, %.preheader462.loopexit ], [ %381, %.preheader467 ], [ %381, %.preheader466.lr.ph ]
  %409 = icmp sgt i32 %408, -3
  br i1 %409, label %.lr.ph510.preheader, label %.preheader461

.lr.ph510.preheader:                              ; preds = %.preheader462
  %410 = add i32 %408, 2
  %smax643 = tail call i32 @llvm.smax.i32(i32 %410, i32 0)
  %411 = add nuw i32 %smax643, 1
  %wide.trip.count644 = zext i32 %411 to i64
  %min.iters.check = icmp slt i32 %410, 1
  br i1 %min.iters.check, label %.lr.ph510.preheader854, label %vector.ph

.lr.ph510.preheader854:                           ; preds = %middle.block, %.lr.ph510.preheader
  %indvars.iv640.ph = phi i64 [ 0, %.lr.ph510.preheader ], [ %n.vec, %middle.block ]
  br label %.lr.ph510

vector.ph:                                        ; preds = %.lr.ph510.preheader
  %n.vec = and i64 %wide.trip.count644, 4294967294
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %412 = getelementptr inbounds double, ptr %12, i64 %index
  %wide.load = load <2 x double>, ptr %412, align 8, !tbaa !126
  %413 = getelementptr inbounds double, ptr %387, i64 %index
  %wide.load823 = load <2 x double>, ptr %413, align 8, !tbaa !126
  %414 = fdiv <2 x double> %wide.load, %wide.load823
  store <2 x double> %414, ptr %413, align 8, !tbaa !126
  %index.next = add nuw i64 %index, 2
  %415 = icmp eq i64 %index.next, %n.vec
  br i1 %415, label %middle.block, label %vector.body, !llvm.loop !162

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %n.vec, %wide.trip.count644
  br i1 %cmp.n, label %.preheader461, label %.lr.ph510.preheader854

.preheader465:                                    ; preds = %.preheader466, %._crit_edge504
  %416 = phi i32 [ %424, %._crit_edge504 ], [ %402, %.preheader466 ]
  %417 = phi i32 [ %425, %._crit_edge504 ], [ %405, %.preheader466 ]
  %indvars.iv637 = phi i64 [ %indvars.iv.next638, %._crit_edge504 ], [ 0, %.preheader466 ]
  %418 = icmp sgt i32 %417, 0
  br i1 %418, label %.lr.ph503, label %._crit_edge504

._crit_edge506.loopexit:                          ; preds = %._crit_edge504
  %.pre710 = load i32, ptr %0, align 8, !tbaa !127
  br label %._crit_edge506

._crit_edge506:                                   ; preds = %._crit_edge506.loopexit, %.preheader466
  %419 = phi i32 [ %.pre710, %._crit_edge506.loopexit ], [ %401, %.preheader466 ]
  %420 = phi i32 [ %424, %._crit_edge506.loopexit ], [ %402, %.preheader466 ]
  %421 = phi i32 [ %424, %._crit_edge506.loopexit ], [ %403, %.preheader466 ]
  %422 = add nuw nsw i32 %.0382507, 1
  %423 = icmp slt i32 %422, %419
  br i1 %423, label %.preheader466, label %.preheader462.loopexit, !llvm.loop !163

._crit_edge504.loopexit:                          ; preds = %._crit_edge499
  %.pre709 = load i32, ptr %393, align 4, !tbaa !128
  br label %._crit_edge504

._crit_edge504:                                   ; preds = %._crit_edge504.loopexit, %.preheader465
  %424 = phi i32 [ %.pre709, %._crit_edge504.loopexit ], [ %416, %.preheader465 ]
  %425 = phi i32 [ %476, %._crit_edge504.loopexit ], [ %417, %.preheader465 ]
  %indvars.iv.next638 = add nuw nsw i64 %indvars.iv637, 1
  %426 = sext i32 %424 to i64
  %427 = icmp slt i64 %indvars.iv.next638, %426
  br i1 %427, label %.preheader465, label %._crit_edge506.loopexit, !llvm.loop !164

.lr.ph503:                                        ; preds = %.preheader465, %._crit_edge499
  %indvars.iv634 = phi i64 [ %indvars.iv.next635, %._crit_edge499 ], [ 0, %.preheader465 ]
  %428 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5cellpEixEi(ptr noundef nonnull align 8 dereferenceable(40) %395, i32 noundef %.0382507)
  %429 = load ptr, ptr %428, align 8, !tbaa !133
  %430 = getelementptr inbounds ptr, ptr %429, i64 %indvars.iv637
  %431 = load ptr, ptr %430, align 8, !tbaa !133
  %432 = getelementptr inbounds %struct.cellp, ptr %431, i64 %indvars.iv634
  %.4494 = load ptr, ptr %432, align 8, !tbaa !133
  %.not431495 = icmp eq ptr %.4494, null
  br i1 %.not431495, label %._crit_edge499, label %.lr.ph498

.lr.ph498:                                        ; preds = %.lr.ph503
  %433 = load i32, ptr %4, align 8
  %.fr = freeze i32 %433
  %434 = icmp sgt i32 %.fr, 0
  %435 = load ptr, ptr %396, align 8
  br i1 %434, label %.lr.ph498.split.us.preheader, label %.lr.ph498.split

.lr.ph498.split.us.preheader:                     ; preds = %.lr.ph498
  %wide.trip.count632 = zext nneg i32 %.fr to i64
  %xtraiter862 = and i64 %wide.trip.count632, 1
  %436 = icmp eq i32 %.fr, 1
  %unroll_iter864 = and i64 %wide.trip.count632, 2147483646
  %lcmp.mod863.not = icmp eq i64 %xtraiter862, 0
  br label %.lr.ph498.split.us

.lr.ph498.split.us:                               ; preds = %.lr.ph498.split.us.preheader, %..loopexit464_crit_edge.us
  %.4496.us = phi ptr [ %.4.us, %..loopexit464_crit_edge.us ], [ %.4494, %.lr.ph498.split.us.preheader ]
  %437 = getelementptr inbounds i8, ptr %.4496.us, i64 64
  %438 = load double, ptr %437, align 8, !tbaa !134
  %439 = fcmp oeq double %438, -1.000000e+00
  br i1 %439, label %..loopexit464_crit_edge.us.sink.split, label %440

440:                                              ; preds = %.lr.ph498.split.us
  %441 = fcmp oeq double %438, 1.000000e+00
  br i1 %441, label %..loopexit464_crit_edge.us.sink.split, label %442

442:                                              ; preds = %440
  %443 = fcmp oeq double %438, 0.000000e+00
  br i1 %443, label %..loopexit464_crit_edge.us.sink.split, label %.preheader463.us.preheader

.preheader463.us.preheader:                       ; preds = %442
  br i1 %436, label %..loopexit464_crit_edge.us.loopexit.unr-lcssa, label %.preheader463.us

.preheader463.us:                                 ; preds = %.preheader463.us.preheader, %456
  %indvars.iv629 = phi i64 [ %indvars.iv.next630.1, %456 ], [ 0, %.preheader463.us.preheader ]
  %niter865 = phi i64 [ %niter865.next.1, %456 ], [ 0, %.preheader463.us.preheader ]
  %444 = getelementptr inbounds double, ptr %435, i64 %indvars.iv629
  %445 = load double, ptr %444, align 8, !tbaa !126
  %446 = fcmp oeq double %438, %445
  br i1 %446, label %447, label %.preheader463.us.1

447:                                              ; preds = %.preheader463.us
  %gep.us500 = getelementptr inbounds double, ptr %invariant.gep491, i64 %indvars.iv629
  %448 = load double, ptr %gep.us500, align 8, !tbaa !126
  %449 = fadd double %448, 1.000000e+00
  store double %449, ptr %gep.us500, align 8, !tbaa !126
  br label %.preheader463.us.1

.preheader463.us.1:                               ; preds = %447, %.preheader463.us
  %indvars.iv.next630 = or disjoint i64 %indvars.iv629, 1
  %450 = getelementptr inbounds double, ptr %435, i64 %indvars.iv.next630
  %451 = load double, ptr %450, align 8, !tbaa !126
  %452 = fcmp oeq double %438, %451
  br i1 %452, label %453, label %456

453:                                              ; preds = %.preheader463.us.1
  %gep.us500.1 = getelementptr inbounds double, ptr %invariant.gep491, i64 %indvars.iv.next630
  %454 = load double, ptr %gep.us500.1, align 8, !tbaa !126
  %455 = fadd double %454, 1.000000e+00
  store double %455, ptr %gep.us500.1, align 8, !tbaa !126
  br label %456

456:                                              ; preds = %453, %.preheader463.us.1
  %indvars.iv.next630.1 = add nuw nsw i64 %indvars.iv629, 2
  %niter865.next.1 = add i64 %niter865, 2
  %niter865.ncmp.1 = icmp eq i64 %niter865.next.1, %unroll_iter864
  br i1 %niter865.ncmp.1, label %..loopexit464_crit_edge.us.loopexit.unr-lcssa, label %.preheader463.us, !llvm.loop !165

..loopexit464_crit_edge.us.sink.split:            ; preds = %.lr.ph498.split.us, %440, %442
  %.sink771 = phi ptr [ %397, %442 ], [ %398, %440 ], [ %387, %.lr.ph498.split.us ]
  %457 = load double, ptr %.sink771, align 8, !tbaa !126
  %458 = fadd double %457, 1.000000e+00
  store double %458, ptr %.sink771, align 8, !tbaa !126
  br label %..loopexit464_crit_edge.us

..loopexit464_crit_edge.us.loopexit.unr-lcssa:    ; preds = %456, %.preheader463.us.preheader
  %indvars.iv629.unr = phi i64 [ 0, %.preheader463.us.preheader ], [ %indvars.iv.next630.1, %456 ]
  br i1 %lcmp.mod863.not, label %..loopexit464_crit_edge.us, label %.preheader463.us.epil

.preheader463.us.epil:                            ; preds = %..loopexit464_crit_edge.us.loopexit.unr-lcssa
  %459 = getelementptr inbounds double, ptr %435, i64 %indvars.iv629.unr
  %460 = load double, ptr %459, align 8, !tbaa !126
  %461 = fcmp oeq double %438, %460
  br i1 %461, label %462, label %..loopexit464_crit_edge.us

462:                                              ; preds = %.preheader463.us.epil
  %gep.us500.epil = getelementptr inbounds double, ptr %invariant.gep491, i64 %indvars.iv629.unr
  %463 = load double, ptr %gep.us500.epil, align 8, !tbaa !126
  %464 = fadd double %463, 1.000000e+00
  store double %464, ptr %gep.us500.epil, align 8, !tbaa !126
  br label %..loopexit464_crit_edge.us

..loopexit464_crit_edge.us:                       ; preds = %..loopexit464_crit_edge.us.loopexit.unr-lcssa, %462, %.preheader463.us.epil, %..loopexit464_crit_edge.us.sink.split
  %465 = getelementptr inbounds i8, ptr %.4496.us, i64 88
  %.4.us = load ptr, ptr %465, align 8, !tbaa !133
  %.not431.us = icmp eq ptr %.4.us, null
  br i1 %.not431.us, label %._crit_edge499, label %.lr.ph498.split.us, !llvm.loop !166

.lr.ph498.split:                                  ; preds = %.lr.ph498, %.preheader463
  %.4496 = phi ptr [ %.4, %.preheader463 ], [ %.4494, %.lr.ph498 ]
  %466 = getelementptr inbounds i8, ptr %.4496, i64 64
  %467 = load double, ptr %466, align 8, !tbaa !134
  %468 = fcmp oeq double %467, -1.000000e+00
  br i1 %468, label %.preheader463.sink.split, label %469

469:                                              ; preds = %.lr.ph498.split
  %470 = fcmp oeq double %467, 1.000000e+00
  br i1 %470, label %.preheader463.sink.split, label %471

471:                                              ; preds = %469
  %472 = fcmp oeq double %467, 0.000000e+00
  br i1 %472, label %.preheader463.sink.split, label %.preheader463

.preheader463.sink.split:                         ; preds = %471, %469, %.lr.ph498.split
  %.sink775 = phi ptr [ %387, %.lr.ph498.split ], [ %398, %469 ], [ %397, %471 ]
  %473 = load double, ptr %.sink775, align 8, !tbaa !126
  %474 = fadd double %473, 1.000000e+00
  store double %474, ptr %.sink775, align 8, !tbaa !126
  br label %.preheader463

.preheader463:                                    ; preds = %.preheader463.sink.split, %471
  %475 = getelementptr inbounds i8, ptr %.4496, i64 88
  %.4 = load ptr, ptr %475, align 8, !tbaa !133
  %.not431 = icmp eq ptr %.4, null
  br i1 %.not431, label %._crit_edge499, label %.lr.ph498.split, !llvm.loop !166

._crit_edge499:                                   ; preds = %.preheader463, %..loopexit464_crit_edge.us, %.lr.ph503
  %indvars.iv.next635 = add nuw nsw i64 %indvars.iv634, 1
  %476 = load i32, ptr %394, align 8, !tbaa !139
  %477 = sext i32 %476 to i64
  %478 = icmp slt i64 %indvars.iv.next635, %477
  br i1 %478, label %.lr.ph503, label %._crit_edge504.loopexit, !llvm.loop !167

.preheader461:                                    ; preds = %.lr.ph510, %middle.block, %.preheader462
  %479 = icmp sgt i32 %407, 0
  br i1 %479, label %.preheader460.lr.ph, label %.preheader451

.preheader460.lr.ph:                              ; preds = %.preheader461
  %480 = getelementptr inbounds i8, ptr %0, i64 4
  %481 = getelementptr inbounds i8, ptr %0, i64 8
  %482 = getelementptr inbounds i8, ptr %0, i64 520
  %483 = getelementptr inbounds i8, ptr %0, i64 96
  %484 = getelementptr inbounds i8, ptr %1, i64 16
  %485 = getelementptr inbounds i8, ptr %387, i64 16
  %486 = getelementptr inbounds i8, ptr %1, i64 8
  %487 = getelementptr inbounds i8, ptr %387, i64 8
  %488 = load i32, ptr %480, align 4, !tbaa !128
  %489 = icmp sgt i32 %488, 0
  br i1 %489, label %.preheader460, label %.preheader455.lr.ph

.lr.ph510:                                        ; preds = %.lr.ph510.preheader854, %.lr.ph510
  %indvars.iv640 = phi i64 [ %indvars.iv.next641, %.lr.ph510 ], [ %indvars.iv640.ph, %.lr.ph510.preheader854 ]
  %490 = getelementptr inbounds double, ptr %12, i64 %indvars.iv640
  %491 = load double, ptr %490, align 8, !tbaa !126
  %492 = getelementptr inbounds double, ptr %387, i64 %indvars.iv640
  %493 = load double, ptr %492, align 8, !tbaa !126
  %494 = fdiv double %491, %493
  store double %494, ptr %492, align 8, !tbaa !126
  %indvars.iv.next641 = add nuw nsw i64 %indvars.iv640, 1
  %exitcond645.not = icmp eq i64 %indvars.iv.next641, %wide.trip.count644
  br i1 %exitcond645.not, label %.preheader461, label %.lr.ph510, !llvm.loop !168

.preheader460:                                    ; preds = %.preheader460.lr.ph, %._crit_edge522
  %495 = phi i32 [ %518, %._crit_edge522 ], [ %407, %.preheader460.lr.ph ]
  %496 = phi i32 [ %519, %._crit_edge522 ], [ %488, %.preheader460.lr.ph ]
  %497 = phi i32 [ %520, %._crit_edge522 ], [ %488, %.preheader460.lr.ph ]
  %.0377523 = phi i32 [ %521, %._crit_edge522 ], [ 0, %.preheader460.lr.ph ]
  %498 = icmp sgt i32 %497, 0
  %499 = load i32, ptr %481, align 8
  %500 = icmp sgt i32 %499, 0
  %or.cond797 = select i1 %498, i1 %500, i1 false
  br i1 %or.cond797, label %.preheader459, label %._crit_edge522

.preheader456:                                    ; preds = %._crit_edge522
  %501 = icmp sgt i32 %518, 0
  br i1 %501, label %.preheader455.lr.ph, label %.preheader451

.preheader455.lr.ph:                              ; preds = %.preheader460.lr.ph, %.preheader456
  %502 = phi i32 [ %518, %.preheader456 ], [ %407, %.preheader460.lr.ph ]
  %503 = getelementptr inbounds i8, ptr %0, i64 4
  %504 = getelementptr inbounds i8, ptr %0, i64 8
  %505 = getelementptr inbounds i8, ptr %0, i64 520
  %506 = getelementptr inbounds i8, ptr %0, i64 96
  %507 = getelementptr inbounds i8, ptr %1, i64 16
  %508 = getelementptr inbounds i8, ptr %387, i64 16
  %509 = getelementptr inbounds i8, ptr %11, i64 16
  %510 = getelementptr inbounds i8, ptr %1, i64 8
  %511 = getelementptr inbounds i8, ptr %387, i64 8
  %512 = getelementptr inbounds i8, ptr %11, i64 8
  %513 = load i32, ptr %503, align 4, !tbaa !128
  %514 = icmp sgt i32 %513, 0
  br i1 %514, label %.preheader455, label %.preheader451

.preheader459:                                    ; preds = %.preheader460, %._crit_edge520
  %515 = phi i32 [ %523, %._crit_edge520 ], [ %496, %.preheader460 ]
  %516 = phi i32 [ %524, %._crit_edge520 ], [ %499, %.preheader460 ]
  %indvars.iv652 = phi i64 [ %indvars.iv.next653, %._crit_edge520 ], [ 0, %.preheader460 ]
  %517 = icmp sgt i32 %516, 0
  br i1 %517, label %.lr.ph519, label %._crit_edge520

._crit_edge522.loopexit:                          ; preds = %._crit_edge520
  %.pre722 = load i32, ptr %0, align 8, !tbaa !127
  br label %._crit_edge522

._crit_edge522:                                   ; preds = %._crit_edge522.loopexit, %.preheader460
  %518 = phi i32 [ %.pre722, %._crit_edge522.loopexit ], [ %495, %.preheader460 ]
  %519 = phi i32 [ %523, %._crit_edge522.loopexit ], [ %496, %.preheader460 ]
  %520 = phi i32 [ %523, %._crit_edge522.loopexit ], [ %497, %.preheader460 ]
  %521 = add nuw nsw i32 %.0377523, 1
  %522 = icmp slt i32 %521, %518
  br i1 %522, label %.preheader460, label %.preheader456, !llvm.loop !169

._crit_edge520.loopexit:                          ; preds = %._crit_edge517
  %.pre721 = load i32, ptr %480, align 4, !tbaa !128
  br label %._crit_edge520

._crit_edge520:                                   ; preds = %._crit_edge520.loopexit, %.preheader459
  %523 = phi i32 [ %.pre721, %._crit_edge520.loopexit ], [ %515, %.preheader459 ]
  %524 = phi i32 [ %669, %._crit_edge520.loopexit ], [ %516, %.preheader459 ]
  %indvars.iv.next653 = add nuw nsw i64 %indvars.iv652, 1
  %525 = sext i32 %523 to i64
  %526 = icmp slt i64 %indvars.iv.next653, %525
  br i1 %526, label %.preheader459, label %._crit_edge522.loopexit, !llvm.loop !170

.lr.ph519:                                        ; preds = %.preheader459, %._crit_edge517
  %indvars.iv649 = phi i64 [ %indvars.iv.next650, %._crit_edge517 ], [ 0, %.preheader459 ]
  %527 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5cellpEixEi(ptr noundef nonnull align 8 dereferenceable(40) %482, i32 noundef %.0377523)
  %528 = load ptr, ptr %527, align 8, !tbaa !133
  %529 = getelementptr inbounds ptr, ptr %528, i64 %indvars.iv652
  %530 = load ptr, ptr %529, align 8, !tbaa !133
  %531 = getelementptr inbounds %struct.cellp, ptr %530, i64 %indvars.iv649
  %532 = load ptr, ptr %531, align 8, !tbaa !143
  %.not422513 = icmp eq ptr %532, null
  br i1 %.not422513, label %._crit_edge517, label %.lr.ph516

.lr.ph516:                                        ; preds = %.lr.ph519, %.loopexit458
  %.5514 = phi ptr [ %534, %.loopexit458 ], [ %532, %.lr.ph519 ]
  %533 = getelementptr inbounds i8, ptr %.5514, i64 88
  %534 = load ptr, ptr %533, align 8, !tbaa !146
  %535 = getelementptr inbounds i8, ptr %.5514, i64 64
  %536 = load double, ptr %535, align 8, !tbaa !134
  %537 = fcmp oeq double %536, -1.000000e+00
  br i1 %537, label %538, label %566

538:                                              ; preds = %.lr.ph516
  %539 = tail call noundef double @_ZN14spatial_region8get_randEv(ptr noundef nonnull align 8 dereferenceable(608) %0)
  %540 = load double, ptr %1, align 8, !tbaa !126
  %541 = getelementptr inbounds i8, ptr %.5514, i64 56
  %542 = load double, ptr %541, align 8, !tbaa !136
  %543 = fneg double %542
  %544 = load double, ptr %387, align 8, !tbaa !126
  %545 = tail call noundef double @_ZN14spatial_region4_ppdEdd(ptr noundef nonnull align 8 dereferenceable(608) %0, double noundef %543, double noundef %544)
  %546 = fmul double %540, %545
  %547 = fcmp olt double %539, %546
  br i1 %547, label %548, label %.loopexit458

548:                                              ; preds = %538
  %549 = load ptr, ptr %533, align 8, !tbaa !146
  %.not429 = icmp eq ptr %549, null
  %.phi.trans.insert719 = getelementptr inbounds i8, ptr %.5514, i64 96
  %.pre720 = load ptr, ptr %.phi.trans.insert719, align 8, !tbaa !149
  br i1 %.not429, label %._crit_edge718, label %550

550:                                              ; preds = %548
  %551 = getelementptr inbounds i8, ptr %549, i64 96
  store ptr %.pre720, ptr %551, align 8, !tbaa !149
  br label %._crit_edge718

._crit_edge718:                                   ; preds = %548, %550
  %.not430 = icmp eq ptr %.pre720, null
  br i1 %.not430, label %554, label %552

552:                                              ; preds = %._crit_edge718
  %553 = getelementptr inbounds i8, ptr %.pre720, i64 88
  store ptr %549, ptr %553, align 8, !tbaa !146
  br label %.loopexit458.sink.split

554:                                              ; preds = %._crit_edge718
  %555 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5cellpEixEi(ptr noundef nonnull align 8 dereferenceable(40) %482, i32 noundef %.0377523)
  %556 = load ptr, ptr %555, align 8, !tbaa !133
  %557 = getelementptr inbounds ptr, ptr %556, i64 %indvars.iv652
  %558 = load ptr, ptr %557, align 8, !tbaa !133
  %559 = getelementptr inbounds %struct.cellp, ptr %558, i64 %indvars.iv649
  store ptr %549, ptr %559, align 8, !tbaa !143
  %560 = load ptr, ptr %533, align 8, !tbaa !146
  %561 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5cellpEixEi(ptr noundef nonnull align 8 dereferenceable(40) %482, i32 noundef %.0377523)
  %562 = load ptr, ptr %561, align 8, !tbaa !133
  %563 = getelementptr inbounds ptr, ptr %562, i64 %indvars.iv652
  %564 = load ptr, ptr %563, align 8, !tbaa !133
  %565 = getelementptr inbounds %struct.cellp, ptr %564, i64 %indvars.iv649, i32 0, i32 1
  store ptr %560, ptr %565, align 8, !tbaa !150
  br label %.loopexit458.sink.split

566:                                              ; preds = %.lr.ph516
  %567 = fcmp oeq double %536, 1.000000e+00
  br i1 %567, label %568, label %595

568:                                              ; preds = %566
  %569 = tail call noundef double @_ZN14spatial_region8get_randEv(ptr noundef nonnull align 8 dereferenceable(608) %0)
  %570 = load double, ptr %486, align 8, !tbaa !126
  %571 = getelementptr inbounds i8, ptr %.5514, i64 56
  %572 = load double, ptr %571, align 8, !tbaa !136
  %573 = load double, ptr %487, align 8, !tbaa !126
  %574 = tail call noundef double @_ZN14spatial_region4_ppdEdd(ptr noundef nonnull align 8 dereferenceable(608) %0, double noundef %572, double noundef %573)
  %575 = fmul double %570, %574
  %576 = fcmp olt double %569, %575
  br i1 %576, label %577, label %.loopexit458

577:                                              ; preds = %568
  %578 = load ptr, ptr %533, align 8, !tbaa !146
  %.not427 = icmp eq ptr %578, null
  %.phi.trans.insert716 = getelementptr inbounds i8, ptr %.5514, i64 96
  %.pre717 = load ptr, ptr %.phi.trans.insert716, align 8, !tbaa !149
  br i1 %.not427, label %._crit_edge715, label %579

579:                                              ; preds = %577
  %580 = getelementptr inbounds i8, ptr %578, i64 96
  store ptr %.pre717, ptr %580, align 8, !tbaa !149
  br label %._crit_edge715

._crit_edge715:                                   ; preds = %577, %579
  %.not428 = icmp eq ptr %.pre717, null
  br i1 %.not428, label %583, label %581

581:                                              ; preds = %._crit_edge715
  %582 = getelementptr inbounds i8, ptr %.pre717, i64 88
  store ptr %578, ptr %582, align 8, !tbaa !146
  br label %.loopexit458.sink.split

583:                                              ; preds = %._crit_edge715
  %584 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5cellpEixEi(ptr noundef nonnull align 8 dereferenceable(40) %482, i32 noundef %.0377523)
  %585 = load ptr, ptr %584, align 8, !tbaa !133
  %586 = getelementptr inbounds ptr, ptr %585, i64 %indvars.iv652
  %587 = load ptr, ptr %586, align 8, !tbaa !133
  %588 = getelementptr inbounds %struct.cellp, ptr %587, i64 %indvars.iv649
  store ptr %578, ptr %588, align 8, !tbaa !143
  %589 = load ptr, ptr %533, align 8, !tbaa !146
  %590 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5cellpEixEi(ptr noundef nonnull align 8 dereferenceable(40) %482, i32 noundef %.0377523)
  %591 = load ptr, ptr %590, align 8, !tbaa !133
  %592 = getelementptr inbounds ptr, ptr %591, i64 %indvars.iv652
  %593 = load ptr, ptr %592, align 8, !tbaa !133
  %594 = getelementptr inbounds %struct.cellp, ptr %593, i64 %indvars.iv649, i32 0, i32 1
  store ptr %589, ptr %594, align 8, !tbaa !150
  br label %.loopexit458.sink.split

595:                                              ; preds = %566
  %596 = fcmp oeq double %536, 0.000000e+00
  br i1 %596, label %601, label %.preheader457

.preheader457:                                    ; preds = %595
  %597 = load i32, ptr %4, align 8, !tbaa !5
  %598 = icmp sgt i32 %597, 0
  br i1 %598, label %.lr.ph512, label %.loopexit458

.lr.ph512:                                        ; preds = %.preheader457
  %599 = getelementptr inbounds i8, ptr %.5514, i64 56
  %600 = getelementptr inbounds i8, ptr %.5514, i64 96
  br label %628

601:                                              ; preds = %595
  %602 = tail call noundef double @_ZN14spatial_region8get_randEv(ptr noundef nonnull align 8 dereferenceable(608) %0)
  %603 = load double, ptr %484, align 8, !tbaa !126
  %604 = getelementptr inbounds i8, ptr %.5514, i64 56
  %605 = load double, ptr %604, align 8, !tbaa !136
  %606 = load double, ptr %485, align 8, !tbaa !126
  %607 = tail call noundef double @_ZN14spatial_region4_ppdEdd(ptr noundef nonnull align 8 dereferenceable(608) %0, double noundef %605, double noundef %606)
  %608 = fmul double %603, %607
  %609 = fcmp olt double %602, %608
  br i1 %609, label %610, label %.loopexit458

610:                                              ; preds = %601
  %611 = load ptr, ptr %533, align 8, !tbaa !146
  %.not425 = icmp eq ptr %611, null
  %.phi.trans.insert = getelementptr inbounds i8, ptr %.5514, i64 96
  %.pre714 = load ptr, ptr %.phi.trans.insert, align 8, !tbaa !149
  br i1 %.not425, label %._crit_edge713, label %612

612:                                              ; preds = %610
  %613 = getelementptr inbounds i8, ptr %611, i64 96
  store ptr %.pre714, ptr %613, align 8, !tbaa !149
  br label %._crit_edge713

._crit_edge713:                                   ; preds = %610, %612
  %.not426 = icmp eq ptr %.pre714, null
  br i1 %.not426, label %616, label %614

614:                                              ; preds = %._crit_edge713
  %615 = getelementptr inbounds i8, ptr %.pre714, i64 88
  store ptr %611, ptr %615, align 8, !tbaa !146
  br label %.loopexit458.sink.split

616:                                              ; preds = %._crit_edge713
  %617 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5cellpEixEi(ptr noundef nonnull align 8 dereferenceable(40) %482, i32 noundef %.0377523)
  %618 = load ptr, ptr %617, align 8, !tbaa !133
  %619 = getelementptr inbounds ptr, ptr %618, i64 %indvars.iv652
  %620 = load ptr, ptr %619, align 8, !tbaa !133
  %621 = getelementptr inbounds %struct.cellp, ptr %620, i64 %indvars.iv649
  store ptr %611, ptr %621, align 8, !tbaa !143
  %622 = load ptr, ptr %533, align 8, !tbaa !146
  %623 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5cellpEixEi(ptr noundef nonnull align 8 dereferenceable(40) %482, i32 noundef %.0377523)
  %624 = load ptr, ptr %623, align 8, !tbaa !133
  %625 = getelementptr inbounds ptr, ptr %624, i64 %indvars.iv652
  %626 = load ptr, ptr %625, align 8, !tbaa !133
  %627 = getelementptr inbounds %struct.cellp, ptr %626, i64 %indvars.iv649, i32 0, i32 1
  store ptr %622, ptr %627, align 8, !tbaa !150
  br label %.loopexit458.sink.split

628:                                              ; preds = %.lr.ph512, %665
  %indvars.iv646 = phi i64 [ 0, %.lr.ph512 ], [ %indvars.iv.next647, %665 ]
  %629 = load double, ptr %535, align 8, !tbaa !134
  %630 = load ptr, ptr %483, align 8, !tbaa !147
  %631 = getelementptr inbounds double, ptr %630, i64 %indvars.iv646
  %632 = load double, ptr %631, align 8, !tbaa !126
  %633 = fcmp oeq double %629, %632
  br i1 %633, label %634, label %665

634:                                              ; preds = %628
  %635 = tail call noundef double @_ZN14spatial_region8get_randEv(ptr noundef nonnull align 8 dereferenceable(608) %0)
  %636 = add nuw nsw i64 %indvars.iv646, 3
  %637 = getelementptr inbounds double, ptr %1, i64 %636
  %638 = load double, ptr %637, align 8, !tbaa !126
  %639 = load double, ptr %599, align 8, !tbaa !136
  %640 = getelementptr inbounds double, ptr %387, i64 %636
  %641 = load double, ptr %640, align 8, !tbaa !126
  %642 = tail call noundef double @_ZN14spatial_region4_ppdEdd(ptr noundef nonnull align 8 dereferenceable(608) %0, double noundef %639, double noundef %641)
  %643 = fmul double %638, %642
  %644 = fcmp olt double %635, %643
  br i1 %644, label %645, label %665

645:                                              ; preds = %634
  %646 = load ptr, ptr %533, align 8, !tbaa !146
  %.not423 = icmp eq ptr %646, null
  %.pre712 = load ptr, ptr %600, align 8, !tbaa !149
  br i1 %.not423, label %649, label %647

647:                                              ; preds = %645
  %648 = getelementptr inbounds i8, ptr %646, i64 96
  store ptr %.pre712, ptr %648, align 8, !tbaa !149
  br label %649

649:                                              ; preds = %647, %645
  %.not424 = icmp eq ptr %.pre712, null
  br i1 %.not424, label %652, label %650

650:                                              ; preds = %649
  %651 = getelementptr inbounds i8, ptr %.pre712, i64 88
  store ptr %646, ptr %651, align 8, !tbaa !146
  br label %664

652:                                              ; preds = %649
  %653 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5cellpEixEi(ptr noundef nonnull align 8 dereferenceable(40) %482, i32 noundef %.0377523)
  %654 = load ptr, ptr %653, align 8, !tbaa !133
  %655 = getelementptr inbounds ptr, ptr %654, i64 %indvars.iv652
  %656 = load ptr, ptr %655, align 8, !tbaa !133
  %657 = getelementptr inbounds %struct.cellp, ptr %656, i64 %indvars.iv649
  store ptr %646, ptr %657, align 8, !tbaa !143
  %658 = load ptr, ptr %533, align 8, !tbaa !146
  %659 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5cellpEixEi(ptr noundef nonnull align 8 dereferenceable(40) %482, i32 noundef %.0377523)
  %660 = load ptr, ptr %659, align 8, !tbaa !133
  %661 = getelementptr inbounds ptr, ptr %660, i64 %indvars.iv652
  %662 = load ptr, ptr %661, align 8, !tbaa !133
  %663 = getelementptr inbounds %struct.cellp, ptr %662, i64 %indvars.iv649, i32 0, i32 1
  store ptr %658, ptr %663, align 8, !tbaa !150
  br label %664

664:                                              ; preds = %652, %650
  tail call void @_ZN14spatial_region15delete_particleEP8particleb(ptr noundef nonnull align 8 dereferenceable(608) %0, ptr noundef nonnull %.5514, i1 noundef zeroext false)
  br label %665

665:                                              ; preds = %628, %664, %634
  %indvars.iv.next647 = add nuw nsw i64 %indvars.iv646, 1
  %666 = load i32, ptr %4, align 8, !tbaa !5
  %667 = sext i32 %666 to i64
  %668 = icmp slt i64 %indvars.iv.next647, %667
  br i1 %668, label %628, label %.loopexit458, !llvm.loop !171

.loopexit458.sink.split:                          ; preds = %614, %616, %581, %583, %552, %554
  tail call void @_ZN14spatial_region15delete_particleEP8particleb(ptr noundef nonnull align 8 dereferenceable(608) %0, ptr noundef nonnull %.5514, i1 noundef zeroext false)
  br label %.loopexit458

.loopexit458:                                     ; preds = %665, %.loopexit458.sink.split, %.preheader457, %568, %601, %538
  %.not422 = icmp eq ptr %534, null
  br i1 %.not422, label %._crit_edge517, label %.lr.ph516, !llvm.loop !172

._crit_edge517:                                   ; preds = %.loopexit458, %.lr.ph519
  %indvars.iv.next650 = add nuw nsw i64 %indvars.iv649, 1
  %669 = load i32, ptr %481, align 8, !tbaa !139
  %670 = sext i32 %669 to i64
  %671 = icmp slt i64 %indvars.iv.next650, %670
  br i1 %671, label %.lr.ph519, label %._crit_edge520.loopexit, !llvm.loop !173

.preheader455:                                    ; preds = %.preheader455.lr.ph, %._crit_edge537
  %672 = phi i32 [ %687, %._crit_edge537 ], [ %502, %.preheader455.lr.ph ]
  %673 = phi i32 [ %688, %._crit_edge537 ], [ %513, %.preheader455.lr.ph ]
  %674 = phi i32 [ %689, %._crit_edge537 ], [ %513, %.preheader455.lr.ph ]
  %.0373538 = phi i32 [ %690, %._crit_edge537 ], [ 0, %.preheader455.lr.ph ]
  %675 = icmp sgt i32 %674, 0
  %676 = load i32, ptr %504, align 8
  %677 = icmp sgt i32 %676, 0
  %or.cond799 = select i1 %675, i1 %677, i1 false
  br i1 %or.cond799, label %.preheader454, label %._crit_edge537

.preheader451:                                    ; preds = %._crit_edge537, %.preheader461, %.preheader455.lr.ph, %.preheader456
  %678 = phi i32 [ %518, %.preheader456 ], [ %502, %.preheader455.lr.ph ], [ %407, %.preheader461 ], [ %687, %._crit_edge537 ]
  %679 = load i32, ptr %4, align 8, !tbaa !5
  %680 = icmp sgt i32 %679, -3
  br i1 %680, label %.lr.ph541.preheader, label %.preheader450

.lr.ph541.preheader:                              ; preds = %.preheader451
  %681 = add i32 %679, 2
  %smax667 = tail call i32 @llvm.smax.i32(i32 %681, i32 0)
  %682 = add nuw i32 %smax667, 1
  %wide.trip.count668 = zext i32 %682 to i64
  %xtraiter866 = and i64 %wide.trip.count668, 1
  %683 = icmp slt i32 %681, 1
  br i1 %683, label %.preheader450.loopexit.unr-lcssa, label %.lr.ph541.preheader.new

.lr.ph541.preheader.new:                          ; preds = %.lr.ph541.preheader
  %unroll_iter868 = and i64 %wide.trip.count668, 4294967294
  br label %.lr.ph541

.preheader454:                                    ; preds = %.preheader455, %._crit_edge535
  %684 = phi i32 [ %692, %._crit_edge535 ], [ %673, %.preheader455 ]
  %685 = phi i32 [ %693, %._crit_edge535 ], [ %676, %.preheader455 ]
  %indvars.iv661 = phi i64 [ %indvars.iv.next662, %._crit_edge535 ], [ 0, %.preheader455 ]
  %686 = icmp sgt i32 %685, 0
  br i1 %686, label %.lr.ph534, label %._crit_edge535

._crit_edge537.loopexit:                          ; preds = %._crit_edge535
  %.pre725 = load i32, ptr %0, align 8, !tbaa !127
  br label %._crit_edge537

._crit_edge537:                                   ; preds = %._crit_edge537.loopexit, %.preheader455
  %687 = phi i32 [ %.pre725, %._crit_edge537.loopexit ], [ %672, %.preheader455 ]
  %688 = phi i32 [ %692, %._crit_edge537.loopexit ], [ %673, %.preheader455 ]
  %689 = phi i32 [ %692, %._crit_edge537.loopexit ], [ %674, %.preheader455 ]
  %690 = add nuw nsw i32 %.0373538, 1
  %691 = icmp slt i32 %690, %687
  br i1 %691, label %.preheader455, label %.preheader451, !llvm.loop !174

._crit_edge535.loopexit:                          ; preds = %._crit_edge532
  %.pre724 = load i32, ptr %503, align 4, !tbaa !128
  br label %._crit_edge535

._crit_edge535:                                   ; preds = %._crit_edge535.loopexit, %.preheader454
  %692 = phi i32 [ %.pre724, %._crit_edge535.loopexit ], [ %684, %.preheader454 ]
  %693 = phi i32 [ %771, %._crit_edge535.loopexit ], [ %685, %.preheader454 ]
  %indvars.iv.next662 = add nuw nsw i64 %indvars.iv661, 1
  %694 = sext i32 %692 to i64
  %695 = icmp slt i64 %indvars.iv.next662, %694
  br i1 %695, label %.preheader454, label %._crit_edge537.loopexit, !llvm.loop !175

.lr.ph534:                                        ; preds = %.preheader454, %._crit_edge532
  %indvars.iv658 = phi i64 [ %indvars.iv.next659, %._crit_edge532 ], [ 0, %.preheader454 ]
  %696 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5cellpEixEi(ptr noundef nonnull align 8 dereferenceable(40) %505, i32 noundef %.0373538)
  %697 = load ptr, ptr %696, align 8, !tbaa !133
  %698 = getelementptr inbounds ptr, ptr %697, i64 %indvars.iv661
  %699 = load ptr, ptr %698, align 8, !tbaa !133
  %700 = getelementptr inbounds %struct.cellp, ptr %699, i64 %indvars.iv658
  %.6527 = load ptr, ptr %700, align 8, !tbaa !133
  %.not421528 = icmp eq ptr %.6527, null
  br i1 %.not421528, label %._crit_edge532, label %.lr.ph531

.lr.ph531:                                        ; preds = %.lr.ph534, %.loopexit453
  %.6529 = phi ptr [ %.6, %.loopexit453 ], [ %.6527, %.lr.ph534 ]
  %701 = getelementptr inbounds i8, ptr %.6529, i64 64
  %702 = load double, ptr %701, align 8, !tbaa !134
  %703 = fcmp oeq double %702, -1.000000e+00
  br i1 %703, label %704, label %716

704:                                              ; preds = %.lr.ph531
  %705 = getelementptr inbounds i8, ptr %.6529, i64 56
  %706 = load double, ptr %705, align 8, !tbaa !136
  %707 = load double, ptr %1, align 8, !tbaa !126
  %708 = fneg double %706
  %709 = load double, ptr %387, align 8, !tbaa !126
  %710 = tail call noundef double @_ZN14spatial_region4_ppdEdd(ptr noundef nonnull align 8 dereferenceable(608) %0, double noundef %708, double noundef %709)
  %711 = fneg double %707
  %712 = tail call double @llvm.fmuladd.f64(double %711, double %710, double 1.000000e+00)
  %713 = fdiv double %706, %712
  store double %713, ptr %705, align 8, !tbaa !136
  %714 = load double, ptr %11, align 8, !tbaa !126
  %715 = fsub double %714, %713
  store double %715, ptr %11, align 8, !tbaa !126
  br label %.loopexit453

716:                                              ; preds = %.lr.ph531
  %717 = fcmp oeq double %702, 1.000000e+00
  br i1 %717, label %718, label %729

718:                                              ; preds = %716
  %719 = getelementptr inbounds i8, ptr %.6529, i64 56
  %720 = load double, ptr %719, align 8, !tbaa !136
  %721 = load double, ptr %510, align 8, !tbaa !126
  %722 = load double, ptr %511, align 8, !tbaa !126
  %723 = tail call noundef double @_ZN14spatial_region4_ppdEdd(ptr noundef nonnull align 8 dereferenceable(608) %0, double noundef %720, double noundef %722)
  %724 = fneg double %721
  %725 = tail call double @llvm.fmuladd.f64(double %724, double %723, double 1.000000e+00)
  %726 = fdiv double %720, %725
  store double %726, ptr %719, align 8, !tbaa !136
  %727 = load double, ptr %512, align 8, !tbaa !126
  %728 = fadd double %727, %726
  store double %728, ptr %512, align 8, !tbaa !126
  br label %.loopexit453

729:                                              ; preds = %716
  %730 = fcmp oeq double %702, 0.000000e+00
  br i1 %730, label %734, label %.preheader452

.preheader452:                                    ; preds = %729
  %731 = load i32, ptr %4, align 8, !tbaa !5
  %732 = icmp sgt i32 %731, 0
  br i1 %732, label %.lr.ph526, label %.loopexit453

.lr.ph526:                                        ; preds = %.preheader452
  %733 = getelementptr inbounds i8, ptr %.6529, i64 56
  br label %745

734:                                              ; preds = %729
  %735 = getelementptr inbounds i8, ptr %.6529, i64 56
  %736 = load double, ptr %735, align 8, !tbaa !136
  %737 = load double, ptr %507, align 8, !tbaa !126
  %738 = load double, ptr %508, align 8, !tbaa !126
  %739 = tail call noundef double @_ZN14spatial_region4_ppdEdd(ptr noundef nonnull align 8 dereferenceable(608) %0, double noundef %736, double noundef %738)
  %740 = fneg double %737
  %741 = tail call double @llvm.fmuladd.f64(double %740, double %739, double 1.000000e+00)
  %742 = fdiv double %736, %741
  store double %742, ptr %735, align 8, !tbaa !136
  %743 = load double, ptr %509, align 8, !tbaa !126
  %744 = fadd double %743, %742
  store double %744, ptr %509, align 8, !tbaa !126
  br label %.loopexit453

745:                                              ; preds = %.lr.ph526, %766
  %746 = phi i32 [ %731, %.lr.ph526 ], [ %767, %766 ]
  %indvars.iv655 = phi i64 [ 0, %.lr.ph526 ], [ %indvars.iv.next656, %766 ]
  %747 = load double, ptr %701, align 8, !tbaa !134
  %748 = load ptr, ptr %506, align 8, !tbaa !147
  %749 = getelementptr inbounds double, ptr %748, i64 %indvars.iv655
  %750 = load double, ptr %749, align 8, !tbaa !126
  %751 = fcmp oeq double %747, %750
  br i1 %751, label %752, label %766

752:                                              ; preds = %745
  %753 = load double, ptr %733, align 8, !tbaa !136
  %754 = add nuw nsw i64 %indvars.iv655, 3
  %755 = getelementptr inbounds double, ptr %1, i64 %754
  %756 = load double, ptr %755, align 8, !tbaa !126
  %757 = getelementptr inbounds double, ptr %387, i64 %754
  %758 = load double, ptr %757, align 8, !tbaa !126
  %759 = tail call noundef double @_ZN14spatial_region4_ppdEdd(ptr noundef nonnull align 8 dereferenceable(608) %0, double noundef %753, double noundef %758)
  %760 = fneg double %756
  %761 = tail call double @llvm.fmuladd.f64(double %760, double %759, double 1.000000e+00)
  %762 = fdiv double %753, %761
  store double %762, ptr %733, align 8, !tbaa !136
  %763 = getelementptr inbounds double, ptr %11, i64 %754
  %764 = load double, ptr %763, align 8, !tbaa !126
  %765 = fadd double %764, %762
  store double %765, ptr %763, align 8, !tbaa !126
  %.pre723 = load i32, ptr %4, align 8, !tbaa !5
  br label %766

766:                                              ; preds = %745, %752
  %767 = phi i32 [ %746, %745 ], [ %.pre723, %752 ]
  %indvars.iv.next656 = add nuw nsw i64 %indvars.iv655, 1
  %768 = sext i32 %767 to i64
  %769 = icmp slt i64 %indvars.iv.next656, %768
  br i1 %769, label %745, label %.loopexit453, !llvm.loop !176

.loopexit453:                                     ; preds = %766, %.preheader452, %718, %734, %704
  %770 = getelementptr inbounds i8, ptr %.6529, i64 88
  %.6 = load ptr, ptr %770, align 8, !tbaa !133
  %.not421 = icmp eq ptr %.6, null
  br i1 %.not421, label %._crit_edge532, label %.lr.ph531, !llvm.loop !177

._crit_edge532:                                   ; preds = %.loopexit453, %.lr.ph534
  %indvars.iv.next659 = add nuw nsw i64 %indvars.iv658, 1
  %771 = load i32, ptr %504, align 8, !tbaa !139
  %772 = sext i32 %771 to i64
  %773 = icmp slt i64 %indvars.iv.next659, %772
  br i1 %773, label %.lr.ph534, label %._crit_edge535.loopexit, !llvm.loop !178

.preheader450.loopexit.unr-lcssa:                 ; preds = %802, %.lr.ph541.preheader
  %indvars.iv664.unr = phi i64 [ 0, %.lr.ph541.preheader ], [ %indvars.iv.next665.1, %802 ]
  %lcmp.mod867.not = icmp eq i64 %xtraiter866, 0
  br i1 %lcmp.mod867.not, label %.preheader450, label %.lr.ph541.epil

.lr.ph541.epil:                                   ; preds = %.preheader450.loopexit.unr-lcssa
  %774 = getelementptr inbounds double, ptr %11, i64 %indvars.iv664.unr
  %775 = load double, ptr %774, align 8, !tbaa !126
  %776 = fcmp une double %775, 0.000000e+00
  %777 = getelementptr inbounds double, ptr %12, i64 %indvars.iv664.unr
  br i1 %776, label %778, label %.preheader450.loopexit.epilog-lcssa

778:                                              ; preds = %.lr.ph541.epil
  %779 = load double, ptr %777, align 8, !tbaa !126
  %780 = fdiv double %779, %775
  br label %.preheader450.loopexit.epilog-lcssa

.preheader450.loopexit.epilog-lcssa:              ; preds = %778, %.lr.ph541.epil
  %.sink776.epil = phi double [ %780, %778 ], [ 0.000000e+00, %.lr.ph541.epil ]
  store double %.sink776.epil, ptr %777, align 8, !tbaa !126
  br label %.preheader450

.preheader450:                                    ; preds = %.preheader450.loopexit.epilog-lcssa, %.preheader450.loopexit.unr-lcssa, %.preheader451
  %781 = icmp sgt i32 %678, 0
  br i1 %781, label %.preheader449.lr.ph, label %._crit_edge560

.preheader449.lr.ph:                              ; preds = %.preheader450
  %782 = getelementptr inbounds i8, ptr %0, i64 4
  %783 = getelementptr inbounds i8, ptr %0, i64 8
  %784 = getelementptr inbounds i8, ptr %0, i64 520
  %invariant.gep542 = getelementptr inbounds i8, ptr %12, i64 24
  %785 = getelementptr inbounds i8, ptr %0, i64 96
  %786 = getelementptr inbounds i8, ptr %12, i64 16
  %787 = getelementptr inbounds i8, ptr %12, i64 8
  %.pre726 = load i32, ptr %782, align 4, !tbaa !128
  br label %.preheader449

.lr.ph541:                                        ; preds = %802, %.lr.ph541.preheader.new
  %indvars.iv664 = phi i64 [ 0, %.lr.ph541.preheader.new ], [ %indvars.iv.next665.1, %802 ]
  %niter869 = phi i64 [ 0, %.lr.ph541.preheader.new ], [ %niter869.next.1, %802 ]
  %788 = getelementptr inbounds double, ptr %11, i64 %indvars.iv664
  %789 = load double, ptr %788, align 8, !tbaa !126
  %790 = fcmp une double %789, 0.000000e+00
  %791 = getelementptr inbounds double, ptr %12, i64 %indvars.iv664
  br i1 %790, label %792, label %.lr.ph541.1

792:                                              ; preds = %.lr.ph541
  %793 = load double, ptr %791, align 8, !tbaa !126
  %794 = fdiv double %793, %789
  br label %.lr.ph541.1

.lr.ph541.1:                                      ; preds = %.lr.ph541, %792
  %.sink776 = phi double [ %794, %792 ], [ 0.000000e+00, %.lr.ph541 ]
  store double %.sink776, ptr %791, align 8, !tbaa !126
  %indvars.iv.next665 = or disjoint i64 %indvars.iv664, 1
  %795 = getelementptr inbounds double, ptr %11, i64 %indvars.iv.next665
  %796 = load double, ptr %795, align 8, !tbaa !126
  %797 = fcmp une double %796, 0.000000e+00
  %798 = getelementptr inbounds double, ptr %12, i64 %indvars.iv.next665
  br i1 %797, label %799, label %802

799:                                              ; preds = %.lr.ph541.1
  %800 = load double, ptr %798, align 8, !tbaa !126
  %801 = fdiv double %800, %796
  br label %802

802:                                              ; preds = %799, %.lr.ph541.1
  %.sink776.1 = phi double [ %801, %799 ], [ 0.000000e+00, %.lr.ph541.1 ]
  store double %.sink776.1, ptr %798, align 8, !tbaa !126
  %indvars.iv.next665.1 = add nuw nsw i64 %indvars.iv664, 2
  %niter869.next.1 = add i64 %niter869, 2
  %niter869.ncmp.1 = icmp eq i64 %niter869.next.1, %unroll_iter868
  br i1 %niter869.ncmp.1, label %.preheader450.loopexit.unr-lcssa, label %.lr.ph541, !llvm.loop !179

.preheader449:                                    ; preds = %.preheader449.lr.ph, %._crit_edge557
  %803 = phi i32 [ %678, %.preheader449.lr.ph ], [ %812, %._crit_edge557 ]
  %804 = phi i32 [ %.pre726, %.preheader449.lr.ph ], [ %813, %._crit_edge557 ]
  %805 = phi i32 [ %.pre726, %.preheader449.lr.ph ], [ %814, %._crit_edge557 ]
  %.0368558 = phi i32 [ 0, %.preheader449.lr.ph ], [ %815, %._crit_edge557 ]
  %806 = icmp sgt i32 %805, 0
  %807 = load i32, ptr %783, align 8
  %808 = icmp sgt i32 %807, 0
  %or.cond801 = select i1 %806, i1 %808, i1 false
  br i1 %or.cond801, label %.preheader448, label %._crit_edge557

.preheader448:                                    ; preds = %.preheader449, %._crit_edge555
  %809 = phi i32 [ %817, %._crit_edge555 ], [ %804, %.preheader449 ]
  %810 = phi i32 [ %818, %._crit_edge555 ], [ %807, %.preheader449 ]
  %indvars.iv678 = phi i64 [ %indvars.iv.next679, %._crit_edge555 ], [ 0, %.preheader449 ]
  %811 = icmp sgt i32 %810, 0
  br i1 %811, label %.lr.ph554, label %._crit_edge555

._crit_edge557.loopexit:                          ; preds = %._crit_edge555
  %.pre728 = load i32, ptr %0, align 8, !tbaa !127
  br label %._crit_edge557

._crit_edge557:                                   ; preds = %._crit_edge557.loopexit, %.preheader449
  %812 = phi i32 [ %.pre728, %._crit_edge557.loopexit ], [ %803, %.preheader449 ]
  %813 = phi i32 [ %817, %._crit_edge557.loopexit ], [ %804, %.preheader449 ]
  %814 = phi i32 [ %817, %._crit_edge557.loopexit ], [ %805, %.preheader449 ]
  %815 = add nuw nsw i32 %.0368558, 1
  %816 = icmp slt i32 %815, %812
  br i1 %816, label %.preheader449, label %._crit_edge560, !llvm.loop !180

._crit_edge555.loopexit:                          ; preds = %._crit_edge550
  %.pre727 = load i32, ptr %782, align 4, !tbaa !128
  br label %._crit_edge555

._crit_edge555:                                   ; preds = %._crit_edge555.loopexit, %.preheader448
  %817 = phi i32 [ %.pre727, %._crit_edge555.loopexit ], [ %809, %.preheader448 ]
  %818 = phi i32 [ %878, %._crit_edge555.loopexit ], [ %810, %.preheader448 ]
  %indvars.iv.next679 = add nuw nsw i64 %indvars.iv678, 1
  %819 = sext i32 %817 to i64
  %820 = icmp slt i64 %indvars.iv.next679, %819
  br i1 %820, label %.preheader448, label %._crit_edge557.loopexit, !llvm.loop !181

.lr.ph554:                                        ; preds = %.preheader448, %._crit_edge550
  %indvars.iv675 = phi i64 [ %indvars.iv.next676, %._crit_edge550 ], [ 0, %.preheader448 ]
  %821 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5cellpEixEi(ptr noundef nonnull align 8 dereferenceable(40) %784, i32 noundef %.0368558)
  %822 = load ptr, ptr %821, align 8, !tbaa !133
  %823 = getelementptr inbounds ptr, ptr %822, i64 %indvars.iv678
  %824 = load ptr, ptr %823, align 8, !tbaa !133
  %825 = getelementptr inbounds %struct.cellp, ptr %824, i64 %indvars.iv675
  %.7545 = load ptr, ptr %825, align 8, !tbaa !133
  %.not546 = icmp eq ptr %.7545, null
  br i1 %.not546, label %._crit_edge550, label %.lr.ph549

.lr.ph549:                                        ; preds = %.lr.ph554
  %826 = load i32, ptr %4, align 8
  %.fr599 = freeze i32 %826
  %827 = icmp sgt i32 %.fr599, 0
  %828 = load ptr, ptr %785, align 8
  br i1 %827, label %.lr.ph549.split.us.preheader, label %.lr.ph549.split

.lr.ph549.split.us.preheader:                     ; preds = %.lr.ph549
  %wide.trip.count673 = zext nneg i32 %.fr599 to i64
  %xtraiter870 = and i64 %wide.trip.count673, 1
  %829 = icmp eq i32 %.fr599, 1
  %unroll_iter872 = and i64 %wide.trip.count673, 2147483646
  %lcmp.mod871.not = icmp eq i64 %xtraiter870, 0
  br label %.lr.ph549.split.us

.lr.ph549.split.us:                               ; preds = %.lr.ph549.split.us.preheader, %..loopexit447_crit_edge.us
  %.7547.us = phi ptr [ %.7.us, %..loopexit447_crit_edge.us ], [ %.7545, %.lr.ph549.split.us.preheader ]
  %830 = getelementptr inbounds i8, ptr %.7547.us, i64 64
  %831 = load double, ptr %830, align 8, !tbaa !134
  %832 = fcmp oeq double %831, -1.000000e+00
  br i1 %832, label %..loopexit447_crit_edge.us.sink.split, label %833

833:                                              ; preds = %.lr.ph549.split.us
  %834 = fcmp oeq double %831, 1.000000e+00
  br i1 %834, label %..loopexit447_crit_edge.us.sink.split, label %835

835:                                              ; preds = %833
  %836 = fcmp oeq double %831, 0.000000e+00
  br i1 %836, label %..loopexit447_crit_edge.us.sink.split, label %.preheader446.us

.preheader446.us.new:                             ; preds = %.preheader446.us, %852
  %indvars.iv670 = phi i64 [ %indvars.iv.next671.1, %852 ], [ 0, %.preheader446.us ]
  %niter873 = phi i64 [ %niter873.next.1, %852 ], [ 0, %.preheader446.us ]
  %837 = getelementptr inbounds double, ptr %828, i64 %indvars.iv670
  %838 = load double, ptr %837, align 8, !tbaa !126
  %839 = fcmp oeq double %831, %838
  br i1 %839, label %840, label %844

840:                                              ; preds = %.preheader446.us.new
  %gep.us551 = getelementptr inbounds double, ptr %invariant.gep542, i64 %indvars.iv670
  %841 = load double, ptr %gep.us551, align 8, !tbaa !126
  %842 = load double, ptr %865, align 8, !tbaa !136
  %843 = fmul double %841, %842
  store double %843, ptr %865, align 8, !tbaa !136
  br label %844

844:                                              ; preds = %840, %.preheader446.us.new
  %indvars.iv.next671 = or disjoint i64 %indvars.iv670, 1
  %845 = getelementptr inbounds double, ptr %828, i64 %indvars.iv.next671
  %846 = load double, ptr %845, align 8, !tbaa !126
  %847 = fcmp oeq double %831, %846
  br i1 %847, label %848, label %852

848:                                              ; preds = %844
  %gep.us551.1 = getelementptr inbounds double, ptr %invariant.gep542, i64 %indvars.iv.next671
  %849 = load double, ptr %gep.us551.1, align 8, !tbaa !126
  %850 = load double, ptr %865, align 8, !tbaa !136
  %851 = fmul double %849, %850
  store double %851, ptr %865, align 8, !tbaa !136
  br label %852

852:                                              ; preds = %848, %844
  %indvars.iv.next671.1 = add nuw nsw i64 %indvars.iv670, 2
  %niter873.next.1 = add i64 %niter873, 2
  %niter873.ncmp.1 = icmp eq i64 %niter873.next.1, %unroll_iter872
  br i1 %niter873.ncmp.1, label %..loopexit447_crit_edge.us.loopexit.unr-lcssa, label %.preheader446.us.new, !llvm.loop !182

..loopexit447_crit_edge.us.sink.split:            ; preds = %.lr.ph549.split.us, %833, %835
  %.sink782 = phi ptr [ %786, %835 ], [ %787, %833 ], [ %12, %.lr.ph549.split.us ]
  %853 = load double, ptr %.sink782, align 8, !tbaa !126
  %854 = getelementptr inbounds i8, ptr %.7547.us, i64 56
  %855 = load double, ptr %854, align 8, !tbaa !136
  %856 = fmul double %853, %855
  store double %856, ptr %854, align 8, !tbaa !136
  br label %..loopexit447_crit_edge.us

..loopexit447_crit_edge.us.loopexit.unr-lcssa:    ; preds = %852, %.preheader446.us
  %indvars.iv670.unr = phi i64 [ 0, %.preheader446.us ], [ %indvars.iv.next671.1, %852 ]
  br i1 %lcmp.mod871.not, label %..loopexit447_crit_edge.us, label %.epil.preheader

.epil.preheader:                                  ; preds = %..loopexit447_crit_edge.us.loopexit.unr-lcssa
  %857 = getelementptr inbounds double, ptr %828, i64 %indvars.iv670.unr
  %858 = load double, ptr %857, align 8, !tbaa !126
  %859 = fcmp oeq double %831, %858
  br i1 %859, label %860, label %..loopexit447_crit_edge.us

860:                                              ; preds = %.epil.preheader
  %gep.us551.epil = getelementptr inbounds double, ptr %invariant.gep542, i64 %indvars.iv670.unr
  %861 = load double, ptr %gep.us551.epil, align 8, !tbaa !126
  %862 = load double, ptr %865, align 8, !tbaa !136
  %863 = fmul double %861, %862
  store double %863, ptr %865, align 8, !tbaa !136
  br label %..loopexit447_crit_edge.us

..loopexit447_crit_edge.us:                       ; preds = %..loopexit447_crit_edge.us.loopexit.unr-lcssa, %860, %.epil.preheader, %..loopexit447_crit_edge.us.sink.split
  %864 = getelementptr inbounds i8, ptr %.7547.us, i64 88
  %.7.us = load ptr, ptr %864, align 8, !tbaa !133
  %.not.us = icmp eq ptr %.7.us, null
  br i1 %.not.us, label %._crit_edge550, label %.lr.ph549.split.us, !llvm.loop !183

.preheader446.us:                                 ; preds = %835
  %865 = getelementptr inbounds i8, ptr %.7547.us, i64 56
  br i1 %829, label %..loopexit447_crit_edge.us.loopexit.unr-lcssa, label %.preheader446.us.new

.lr.ph549.split:                                  ; preds = %.lr.ph549, %.preheader446
  %.7547 = phi ptr [ %.7, %.preheader446 ], [ %.7545, %.lr.ph549 ]
  %866 = getelementptr inbounds i8, ptr %.7547, i64 64
  %867 = load double, ptr %866, align 8, !tbaa !134
  %868 = fcmp oeq double %867, -1.000000e+00
  br i1 %868, label %.preheader446.sink.split, label %869

869:                                              ; preds = %.lr.ph549.split
  %870 = fcmp oeq double %867, 1.000000e+00
  br i1 %870, label %.preheader446.sink.split, label %871

871:                                              ; preds = %869
  %872 = fcmp oeq double %867, 0.000000e+00
  br i1 %872, label %.preheader446.sink.split, label %.preheader446

.preheader446.sink.split:                         ; preds = %871, %869, %.lr.ph549.split
  %.sink788 = phi ptr [ %12, %.lr.ph549.split ], [ %787, %869 ], [ %786, %871 ]
  %873 = load double, ptr %.sink788, align 8, !tbaa !126
  %874 = getelementptr inbounds i8, ptr %.7547, i64 56
  %875 = load double, ptr %874, align 8, !tbaa !136
  %876 = fmul double %873, %875
  store double %876, ptr %874, align 8, !tbaa !136
  br label %.preheader446

.preheader446:                                    ; preds = %.preheader446.sink.split, %871
  %877 = getelementptr inbounds i8, ptr %.7547, i64 88
  %.7 = load ptr, ptr %877, align 8, !tbaa !133
  %.not = icmp eq ptr %.7, null
  br i1 %.not, label %._crit_edge550, label %.lr.ph549.split, !llvm.loop !183

._crit_edge550:                                   ; preds = %.preheader446, %..loopexit447_crit_edge.us, %.lr.ph554
  %indvars.iv.next676 = add nuw nsw i64 %indvars.iv675, 1
  %878 = load i32, ptr %783, align 8, !tbaa !139
  %879 = sext i32 %878 to i64
  %880 = icmp slt i64 %indvars.iv.next676, %879
  br i1 %880, label %.lr.ph554, label %._crit_edge555.loopexit, !llvm.loop !184

._crit_edge560:                                   ; preds = %._crit_edge557, %.preheader450
  tail call void @_ZdaPv(ptr noundef nonnull %387) #11
  br label %.loopexit440

.loopexit440:                                     ; preds = %._crit_edge595, %.preheader439, %._crit_edge560, %378
  tail call void @_ZdaPv(ptr noundef nonnull %11) #11
  tail call void @_ZdaPv(ptr noundef nonnull %12) #11
  ret void
}

; Function Attrs: nobuiltin allocsize(0)
declare noundef nonnull ptr @_Znam(i64 noundef) local_unnamed_addr #4

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZSteqIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef) local_unnamed_addr #5

declare void @_ZN14spatial_region15delete_particleEP8particleb(ptr noundef nonnull align 8 dereferenceable(608), ptr noundef, i1 noundef zeroext) local_unnamed_addr #6

; Function Attrs: nobuiltin nounwind
declare void @_ZdaPv(ptr noundef) local_unnamed_addr #7

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

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

attributes #0 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #2 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { mustprogress 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 = { nobuiltin allocsize(0) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { 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 = { "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 = { nobuiltin 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 #8 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #9 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #10 = { builtin allocsize(0) }
attributes #11 = { builtin 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, !7, i64 88}
!6 = !{!"_ZTS14spatial_region", !7, i64 0, !7, i64 4, !7, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !10, i64 40, !7, i64 48, !7, i64 52, !7, i64 56, !10, i64 64, !11, i64 72, !7, i64 80, !7, i64 84, !7, i64 88, !11, i64 96, !7, i64 104, !7, i64 108, !7, i64 112, !7, i64 116, !7, i64 120, !7, i64 124, !7, i64 128, !12, i64 136, !18, i64 144, !10, i64 176, !10, i64 184, !10, i64 192, !7, i64 200, !7, i64 204, !7, i64 208, !11, i64 216, !10, i64 224, !10, i64 232, !10, i64 240, !10, i64 248, !11, i64 256, !10, i64 264, !10, i64 272, !10, i64 280, !11, i64 288, !20, i64 296, !11, i64 328, !11, i64 336, !11, i64 344, !11, i64 352, !23, i64 360, !42, i64 400, !61, i64 440, !80, i64 480, !99, i64 520, !118, i64 560, !122, i64 584}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!"double", !8, i64 0}
!11 = !{!"any pointer", !8, i64 0}
!12 = !{!"_ZTSSt10unique_ptrI14maxwell_solverSt14default_deleteIS0_EE", !13, i64 0}
!13 = !{!"_ZTSSt15__uniq_ptr_dataI14maxwell_solverSt14default_deleteIS0_ELb1ELb1EE", !14, i64 0}
!14 = !{!"_ZTSSt15__uniq_ptr_implI14maxwell_solverSt14default_deleteIS0_EE", !15, i64 0}
!15 = !{!"_ZTSSt5tupleIJP14maxwell_solverSt14default_deleteIS0_EEE", !16, i64 0}
!16 = !{!"_ZTSSt11_Tuple_implILm0EJP14maxwell_solverSt14default_deleteIS0_EEE", !17, i64 0}
!17 = !{!"_ZTSSt10_Head_baseILm0EP14maxwell_solverLb0EE", !11, i64 0}
!18 = !{!"_ZTSSt8functionIFvR8particleR8vector3dS3_RdEE", !19, i64 0, !11, i64 24}
!19 = !{!"_ZTSSt14_Function_base", !8, i64 0, !11, i64 16}
!20 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !21, i64 0, !22, i64 8, !8, i64 16}
!21 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !11, i64 0}
!22 = !{!"long", !8, i64 0}
!23 = !{!"_ZTS7field3dI5celleE", !7, i64 0, !7, i64 4, !7, i64 8, !24, i64 16, !30, i64 24, !36, i64 32}
!24 = !{!"_ZTSSt10unique_ptrIA_PP5celleSt14default_deleteIS3_EE", !25, i64 0}
!25 = !{!"_ZTSSt15__uniq_ptr_dataIPP5celleSt14default_deleteIA_S2_ELb1ELb1EE", !26, i64 0}
!26 = !{!"_ZTSSt15__uniq_ptr_implIPP5celleSt14default_deleteIA_S2_EE", !27, i64 0}
!27 = !{!"_ZTSSt5tupleIJPPP5celleSt14default_deleteIA_S2_EEE", !28, i64 0}
!28 = !{!"_ZTSSt11_Tuple_implILm0EJPPP5celleSt14default_deleteIA_S2_EEE", !29, i64 0}
!29 = !{!"_ZTSSt10_Head_baseILm0EPPP5celleLb0EE", !11, i64 0}
!30 = !{!"_ZTSSt10unique_ptrIA_P5celleSt14default_deleteIS2_EE", !31, i64 0}
!31 = !{!"_ZTSSt15__uniq_ptr_dataIP5celleSt14default_deleteIA_S1_ELb1ELb1EE", !32, i64 0}
!32 = !{!"_ZTSSt15__uniq_ptr_implIP5celleSt14default_deleteIA_S1_EE", !33, i64 0}
!33 = !{!"_ZTSSt5tupleIJPP5celleSt14default_deleteIA_S1_EEE", !34, i64 0}
!34 = !{!"_ZTSSt11_Tuple_implILm0EJPP5celleSt14default_deleteIA_S1_EEE", !35, i64 0}
!35 = !{!"_ZTSSt10_Head_baseILm0EPP5celleLb0EE", !11, i64 0}
!36 = !{!"_ZTSSt10unique_ptrIA_5celleSt14default_deleteIS1_EE", !37, i64 0}
!37 = !{!"_ZTSSt15__uniq_ptr_dataI5celleSt14default_deleteIA_S0_ELb1ELb1EE", !38, i64 0}
!38 = !{!"_ZTSSt15__uniq_ptr_implI5celleSt14default_deleteIA_S0_EE", !39, i64 0}
!39 = !{!"_ZTSSt5tupleIJP5celleSt14default_deleteIA_S0_EEE", !40, i64 0}
!40 = !{!"_ZTSSt11_Tuple_implILm0EJP5celleSt14default_deleteIA_S0_EEE", !41, i64 0}
!41 = !{!"_ZTSSt10_Head_baseILm0EP5celleLb0EE", !11, i64 0}
!42 = !{!"_ZTS7field3dI5cellbE", !7, i64 0, !7, i64 4, !7, i64 8, !43, i64 16, !49, i64 24, !55, i64 32}
!43 = !{!"_ZTSSt10unique_ptrIA_PP5cellbSt14default_deleteIS3_EE", !44, i64 0}
!44 = !{!"_ZTSSt15__uniq_ptr_dataIPP5cellbSt14default_deleteIA_S2_ELb1ELb1EE", !45, i64 0}
!45 = !{!"_ZTSSt15__uniq_ptr_implIPP5cellbSt14default_deleteIA_S2_EE", !46, i64 0}
!46 = !{!"_ZTSSt5tupleIJPPP5cellbSt14default_deleteIA_S2_EEE", !47, i64 0}
!47 = !{!"_ZTSSt11_Tuple_implILm0EJPPP5cellbSt14default_deleteIA_S2_EEE", !48, i64 0}
!48 = !{!"_ZTSSt10_Head_baseILm0EPPP5cellbLb0EE", !11, i64 0}
!49 = !{!"_ZTSSt10unique_ptrIA_P5cellbSt14default_deleteIS2_EE", !50, i64 0}
!50 = !{!"_ZTSSt15__uniq_ptr_dataIP5cellbSt14default_deleteIA_S1_ELb1ELb1EE", !51, i64 0}
!51 = !{!"_ZTSSt15__uniq_ptr_implIP5cellbSt14default_deleteIA_S1_EE", !52, i64 0}
!52 = !{!"_ZTSSt5tupleIJPP5cellbSt14default_deleteIA_S1_EEE", !53, i64 0}
!53 = !{!"_ZTSSt11_Tuple_implILm0EJPP5cellbSt14default_deleteIA_S1_EEE", !54, i64 0}
!54 = !{!"_ZTSSt10_Head_baseILm0EPP5cellbLb0EE", !11, i64 0}
!55 = !{!"_ZTSSt10unique_ptrIA_5cellbSt14default_deleteIS1_EE", !56, i64 0}
!56 = !{!"_ZTSSt15__uniq_ptr_dataI5cellbSt14default_deleteIA_S0_ELb1ELb1EE", !57, i64 0}
!57 = !{!"_ZTSSt15__uniq_ptr_implI5cellbSt14default_deleteIA_S0_EE", !58, i64 0}
!58 = !{!"_ZTSSt5tupleIJP5cellbSt14default_deleteIA_S0_EEE", !59, i64 0}
!59 = !{!"_ZTSSt11_Tuple_implILm0EJP5cellbSt14default_deleteIA_S0_EEE", !60, i64 0}
!60 = !{!"_ZTSSt10_Head_baseILm0EP5cellbLb0EE", !11, i64 0}
!61 = !{!"_ZTS7field3dI5celljE", !7, i64 0, !7, i64 4, !7, i64 8, !62, i64 16, !68, i64 24, !74, i64 32}
!62 = !{!"_ZTSSt10unique_ptrIA_PP5celljSt14default_deleteIS3_EE", !63, i64 0}
!63 = !{!"_ZTSSt15__uniq_ptr_dataIPP5celljSt14default_deleteIA_S2_ELb1ELb1EE", !64, i64 0}
!64 = !{!"_ZTSSt15__uniq_ptr_implIPP5celljSt14default_deleteIA_S2_EE", !65, i64 0}
!65 = !{!"_ZTSSt5tupleIJPPP5celljSt14default_deleteIA_S2_EEE", !66, i64 0}
!66 = !{!"_ZTSSt11_Tuple_implILm0EJPPP5celljSt14default_deleteIA_S2_EEE", !67, i64 0}
!67 = !{!"_ZTSSt10_Head_baseILm0EPPP5celljLb0EE", !11, i64 0}
!68 = !{!"_ZTSSt10unique_ptrIA_P5celljSt14default_deleteIS2_EE", !69, i64 0}
!69 = !{!"_ZTSSt15__uniq_ptr_dataIP5celljSt14default_deleteIA_S1_ELb1ELb1EE", !70, i64 0}
!70 = !{!"_ZTSSt15__uniq_ptr_implIP5celljSt14default_deleteIA_S1_EE", !71, i64 0}
!71 = !{!"_ZTSSt5tupleIJPP5celljSt14default_deleteIA_S1_EEE", !72, i64 0}
!72 = !{!"_ZTSSt11_Tuple_implILm0EJPP5celljSt14default_deleteIA_S1_EEE", !73, i64 0}
!73 = !{!"_ZTSSt10_Head_baseILm0EPP5celljLb0EE", !11, i64 0}
!74 = !{!"_ZTSSt10unique_ptrIA_5celljSt14default_deleteIS1_EE", !75, i64 0}
!75 = !{!"_ZTSSt15__uniq_ptr_dataI5celljSt14default_deleteIA_S0_ELb1ELb1EE", !76, i64 0}
!76 = !{!"_ZTSSt15__uniq_ptr_implI5celljSt14default_deleteIA_S0_EE", !77, i64 0}
!77 = !{!"_ZTSSt5tupleIJP5celljSt14default_deleteIA_S0_EEE", !78, i64 0}
!78 = !{!"_ZTSSt11_Tuple_implILm0EJP5celljSt14default_deleteIA_S0_EEE", !79, i64 0}
!79 = !{!"_ZTSSt10_Head_baseILm0EP5celljLb0EE", !11, i64 0}
!80 = !{!"_ZTS7field3dI6cellbeE", !7, i64 0, !7, i64 4, !7, i64 8, !81, i64 16, !87, i64 24, !93, i64 32}
!81 = !{!"_ZTSSt10unique_ptrIA_PP6cellbeSt14default_deleteIS3_EE", !82, i64 0}
!82 = !{!"_ZTSSt15__uniq_ptr_dataIPP6cellbeSt14default_deleteIA_S2_ELb1ELb1EE", !83, i64 0}
!83 = !{!"_ZTSSt15__uniq_ptr_implIPP6cellbeSt14default_deleteIA_S2_EE", !84, i64 0}
!84 = !{!"_ZTSSt5tupleIJPPP6cellbeSt14default_deleteIA_S2_EEE", !85, i64 0}
!85 = !{!"_ZTSSt11_Tuple_implILm0EJPPP6cellbeSt14default_deleteIA_S2_EEE", !86, i64 0}
!86 = !{!"_ZTSSt10_Head_baseILm0EPPP6cellbeLb0EE", !11, i64 0}
!87 = !{!"_ZTSSt10unique_ptrIA_P6cellbeSt14default_deleteIS2_EE", !88, i64 0}
!88 = !{!"_ZTSSt15__uniq_ptr_dataIP6cellbeSt14default_deleteIA_S1_ELb1ELb1EE", !89, i64 0}
!89 = !{!"_ZTSSt15__uniq_ptr_implIP6cellbeSt14default_deleteIA_S1_EE", !90, i64 0}
!90 = !{!"_ZTSSt5tupleIJPP6cellbeSt14default_deleteIA_S1_EEE", !91, i64 0}
!91 = !{!"_ZTSSt11_Tuple_implILm0EJPP6cellbeSt14default_deleteIA_S1_EEE", !92, i64 0}
!92 = !{!"_ZTSSt10_Head_baseILm0EPP6cellbeLb0EE", !11, i64 0}
!93 = !{!"_ZTSSt10unique_ptrIA_6cellbeSt14default_deleteIS1_EE", !94, i64 0}
!94 = !{!"_ZTSSt15__uniq_ptr_dataI6cellbeSt14default_deleteIA_S0_ELb1ELb1EE", !95, i64 0}
!95 = !{!"_ZTSSt15__uniq_ptr_implI6cellbeSt14default_deleteIA_S0_EE", !96, i64 0}
!96 = !{!"_ZTSSt5tupleIJP6cellbeSt14default_deleteIA_S0_EEE", !97, i64 0}
!97 = !{!"_ZTSSt11_Tuple_implILm0EJP6cellbeSt14default_deleteIA_S0_EEE", !98, i64 0}
!98 = !{!"_ZTSSt10_Head_baseILm0EP6cellbeLb0EE", !11, i64 0}
!99 = !{!"_ZTS7field3dI5cellpE", !7, i64 0, !7, i64 4, !7, i64 8, !100, i64 16, !106, i64 24, !112, i64 32}
!100 = !{!"_ZTSSt10unique_ptrIA_PP5cellpSt14default_deleteIS3_EE", !101, i64 0}
!101 = !{!"_ZTSSt15__uniq_ptr_dataIPP5cellpSt14default_deleteIA_S2_ELb1ELb1EE", !102, i64 0}
!102 = !{!"_ZTSSt15__uniq_ptr_implIPP5cellpSt14default_deleteIA_S2_EE", !103, i64 0}
!103 = !{!"_ZTSSt5tupleIJPPP5cellpSt14default_deleteIA_S2_EEE", !104, i64 0}
!104 = !{!"_ZTSSt11_Tuple_implILm0EJPPP5cellpSt14default_deleteIA_S2_EEE", !105, i64 0}
!105 = !{!"_ZTSSt10_Head_baseILm0EPPP5cellpLb0EE", !11, i64 0}
!106 = !{!"_ZTSSt10unique_ptrIA_P5cellpSt14default_deleteIS2_EE", !107, i64 0}
!107 = !{!"_ZTSSt15__uniq_ptr_dataIP5cellpSt14default_deleteIA_S1_ELb1ELb1EE", !108, i64 0}
!108 = !{!"_ZTSSt15__uniq_ptr_implIP5cellpSt14default_deleteIA_S1_EE", !109, i64 0}
!109 = !{!"_ZTSSt5tupleIJPP5cellpSt14default_deleteIA_S1_EEE", !110, i64 0}
!110 = !{!"_ZTSSt11_Tuple_implILm0EJPP5cellpSt14default_deleteIA_S1_EEE", !111, i64 0}
!111 = !{!"_ZTSSt10_Head_baseILm0EPP5cellpLb0EE", !11, i64 0}
!112 = !{!"_ZTSSt10unique_ptrIA_5cellpSt14default_deleteIS1_EE", !113, i64 0}
!113 = !{!"_ZTSSt15__uniq_ptr_dataI5cellpSt14default_deleteIA_S0_ELb1ELb1EE", !114, i64 0}
!114 = !{!"_ZTSSt15__uniq_ptr_implI5cellpSt14default_deleteIA_S0_EE", !115, i64 0}
!115 = !{!"_ZTSSt5tupleIJP5cellpSt14default_deleteIA_S0_EEE", !116, i64 0}
!116 = !{!"_ZTSSt11_Tuple_implILm0EJP5cellpSt14default_deleteIA_S0_EEE", !117, i64 0}
!117 = !{!"_ZTSSt10_Head_baseILm0EP5cellpLb0EE", !11, i64 0}
!118 = !{!"_ZTSSt6vectorI7field3dIdESaIS1_EE", !119, i64 0}
!119 = !{!"_ZTSSt12_Vector_baseI7field3dIdESaIS1_EE", !120, i64 0}
!120 = !{!"_ZTSNSt12_Vector_baseI7field3dIdESaIS1_EE12_Vector_implE", !121, i64 0}
!121 = !{!"_ZTSNSt12_Vector_baseI7field3dIdESaIS1_EE17_Vector_impl_dataE", !11, i64 0, !11, i64 8, !11, i64 16}
!122 = !{!"_ZTSSt6vectorIN14spatial_region16deleted_particleESaIS1_EE", !123, i64 0}
!123 = !{!"_ZTSSt12_Vector_baseIN14spatial_region16deleted_particleESaIS1_EE", !124, i64 0}
!124 = !{!"_ZTSNSt12_Vector_baseIN14spatial_region16deleted_particleESaIS1_EE12_Vector_implE", !125, i64 0}
!125 = !{!"_ZTSNSt12_Vector_baseIN14spatial_region16deleted_particleESaIS1_EE17_Vector_impl_dataE", !11, i64 0, !11, i64 8, !11, i64 16}
!126 = !{!10, !10, i64 0}
!127 = !{!6, !7, i64 0}
!128 = !{!6, !7, i64 4}
!129 = distinct !{!129, !130, !131}
!130 = !{!"llvm.loop.mustprogress"}
!131 = !{!"llvm.loop.unswitch.partial.disable"}
!132 = distinct !{!132, !130, !131}
!133 = !{!11, !11, i64 0}
!134 = !{!135, !10, i64 64}
!135 = !{!"_ZTS8particle", !10, i64 0, !10, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !10, i64 40, !10, i64 48, !10, i64 56, !10, i64 64, !10, i64 72, !7, i64 80, !11, i64 88, !11, i64 96}
!136 = !{!135, !10, i64 56}
!137 = distinct !{!137, !130}
!138 = distinct !{!138, !130}
!139 = !{!6, !7, i64 8}
!140 = distinct !{!140, !130}
!141 = distinct !{!141, !130}
!142 = distinct !{!142, !130, !131}
!143 = !{!144, !11, i64 0}
!144 = !{!"_ZTS5cellp", !145, i64 0}
!145 = !{!"_ZTS5plist", !11, i64 0, !11, i64 8}
!146 = !{!135, !11, i64 88}
!147 = !{!6, !11, i64 96}
!148 = distinct !{!148, !130}
!149 = !{!135, !11, i64 96}
!150 = !{!144, !11, i64 8}
!151 = distinct !{!151, !130}
!152 = distinct !{!152, !130}
!153 = distinct !{!153, !130, !154, !155}
!154 = !{!"llvm.loop.isvectorized", i32 1}
!155 = !{!"llvm.loop.unroll.runtime.disable"}
!156 = distinct !{!156, !130, !155, !154}
!157 = distinct !{!157, !130}
!158 = distinct !{!158, !130, !131}
!159 = distinct !{!159, !130}
!160 = distinct !{!160, !130}
!161 = distinct !{!161, !130}
!162 = distinct !{!162, !130, !154, !155}
!163 = distinct !{!163, !130, !131}
!164 = distinct !{!164, !130, !131}
!165 = distinct !{!165, !130}
!166 = distinct !{!166, !130}
!167 = distinct !{!167, !130}
!168 = distinct !{!168, !130, !155, !154}
!169 = distinct !{!169, !130, !131}
!170 = distinct !{!170, !130, !131}
!171 = distinct !{!171, !130}
!172 = distinct !{!172, !130}
!173 = distinct !{!173, !130}
!174 = distinct !{!174, !130, !131}
!175 = distinct !{!175, !130, !131}
!176 = distinct !{!176, !130}
!177 = distinct !{!177, !130}
!178 = distinct !{!178, !130}
!179 = distinct !{!179, !130}
!180 = distinct !{!180, !130}
!181 = distinct !{!181, !130, !131}
!182 = distinct !{!182, !130}
!183 = distinct !{!183, !130}
!184 = distinct !{!184, !130}


; Effective O3 passes: BDCEPass,CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopIdiomRecognizePass,LoopInstSimplifyPass,LoopLoadEliminationPass,LoopRotatePass,LoopSimplifyCFGPass,LoopSimplifyPass,LoopUnrollPass,LoopVectorizePass,PostOrderFunctionAttrsPass,ReassociatePass,SROAPass,SimpleLoopUnswitchPass,SimplifyCFGPass,TailCallElimPass