; LLVM IR from QUILL-PIC/Quill :: src/advance.ll (ZN14spatial_region8padvanceEd)

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

%struct.vector3d = type { double, double, double }
%struct.int_vector3d = type { i32, i32, i32 }
%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.cellj = type { double, double, double }
%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 }

@qed_enabled = external global i8, align 1
@dump_photons = external global 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 uwtable
define dso_local void @_ZN14spatial_region8padvanceEd(ptr noundef nonnull align 8 dereferenceable(608) %0, double noundef %1) #1 align 2 {
  %3 = alloca ptr, align 8
  %4 = alloca double, align 8
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca %struct.vector3d, align 8
  %8 = alloca %struct.vector3d, align 8
  %9 = alloca %struct.vector3d, align 8
  %10 = alloca %struct.vector3d, align 8
  %11 = alloca i8, align 1
  %12 = alloca %struct.vector3d, align 8
  %13 = alloca double, align 8
  %14 = alloca double, align 8
  %15 = alloca double, align 8
  %16 = alloca double, align 8
  %17 = alloca double, align 8
  %18 = alloca ptr, align 8
  %19 = alloca %struct.int_vector3d, 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 i32, align 4
  %27 = alloca %struct.vector3d, align 8
  %28 = alloca %struct.vector3d, align 8
  %29 = alloca %struct.vector3d, align 8
  %30 = alloca %struct.vector3d, align 8
  %31 = alloca %struct.vector3d, align 8
  %32 = alloca %struct.vector3d, align 8
  %33 = alloca %struct.vector3d, align 8
  %34 = alloca %struct.vector3d, align 8
  %35 = alloca %struct.vector3d, align 8
  %36 = alloca %struct.vector3d, align 8
  %37 = alloca i32, align 4
  %38 = alloca i32, align 4
  %39 = alloca i32, align 4
  store ptr %0, ptr %3, align 8, !tbaa !5
  store double %1, ptr %4, align 8, !tbaa !9
  %40 = load ptr, ptr %3, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %5) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %6) #8
  call void @llvm.lifetime.start.p0(i64 24, ptr %7) #8
  call void @_ZN8vector3dC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %7)
  call void @llvm.lifetime.start.p0(i64 24, ptr %8) #8
  call void @_ZN8vector3dC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %8)
  call void @llvm.lifetime.start.p0(i64 24, ptr %9) #8
  call void @_ZN8vector3dC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %9)
  call void @llvm.lifetime.start.p0(i64 24, ptr %10) #8
  call void @_ZN8vector3dC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %10)
  call void @llvm.lifetime.start.p0(i64 1, ptr %11) #8
  call void @llvm.lifetime.start.p0(i64 24, ptr %12) #8
  call void @_ZN8vector3dC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %12)
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #8
  call void @llvm.lifetime.start.p0(i64 12, ptr %19) #8
  call void @_ZN12int_vector3dC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %19)
  call void @_ZN14spatial_region10p_boundaryEv(ptr noundef nonnull align 8 dereferenceable(608) %40)
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #8
  store i32 0, ptr %20, align 4, !tbaa !11
  br label %41

41:                                               ; preds = %106, %2
  %42 = load i32, ptr %20, align 4, !tbaa !11
  %43 = getelementptr inbounds %class.spatial_region, ptr %40, i32 0, i32 0
  %44 = load i32, ptr %43, align 8, !tbaa !13
  %45 = icmp slt i32 %42, %44
  br i1 %45, label %47, label %46

46:                                               ; preds = %41
  store i32 2, ptr %21, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #8
  br label %109

47:                                               ; preds = %41
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #8
  store i32 0, ptr %22, align 4, !tbaa !11
  br label %48

48:                                               ; preds = %102, %47
  %49 = load i32, ptr %22, align 4, !tbaa !11
  %50 = getelementptr inbounds %class.spatial_region, ptr %40, i32 0, i32 1
  %51 = load i32, ptr %50, align 4, !tbaa !129
  %52 = icmp slt i32 %49, %51
  br i1 %52, label %54, label %53

53:                                               ; preds = %48
  store i32 5, ptr %21, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #8
  br label %105

54:                                               ; preds = %48
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #8
  store i32 0, ptr %23, align 4, !tbaa !11
  br label %55

55:                                               ; preds = %98, %54
  %56 = load i32, ptr %23, align 4, !tbaa !11
  %57 = getelementptr inbounds %class.spatial_region, ptr %40, i32 0, i32 2
  %58 = load i32, ptr %57, align 8, !tbaa !130
  %59 = icmp slt i32 %56, %58
  br i1 %59, label %61, label %60

60:                                               ; preds = %55
  store i32 8, ptr %21, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #8
  br label %101

61:                                               ; preds = %55
  %62 = getelementptr inbounds %class.spatial_region, ptr %40, i32 0, i32 48
  %63 = load i32, ptr %20, align 4, !tbaa !11
  %64 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5celljEixEi(ptr noundef nonnull align 8 dereferenceable(40) %62, i32 noundef %63)
  %65 = load ptr, ptr %64, align 8, !tbaa !5
  %66 = load i32, ptr %22, align 4, !tbaa !11
  %67 = sext i32 %66 to i64
  %68 = getelementptr inbounds ptr, ptr %65, i64 %67
  %69 = load ptr, ptr %68, align 8, !tbaa !5
  %70 = load i32, ptr %23, align 4, !tbaa !11
  %71 = sext i32 %70 to i64
  %72 = getelementptr inbounds %struct.cellj, ptr %69, i64 %71
  %73 = getelementptr inbounds %struct.cellj, ptr %72, i32 0, i32 0
  store double 0.000000e+00, ptr %73, align 8, !tbaa !131
  %74 = getelementptr inbounds %class.spatial_region, ptr %40, i32 0, i32 48
  %75 = load i32, ptr %20, align 4, !tbaa !11
  %76 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5celljEixEi(ptr noundef nonnull align 8 dereferenceable(40) %74, i32 noundef %75)
  %77 = load ptr, ptr %76, align 8, !tbaa !5
  %78 = load i32, ptr %22, align 4, !tbaa !11
  %79 = sext i32 %78 to i64
  %80 = getelementptr inbounds ptr, ptr %77, i64 %79
  %81 = load ptr, ptr %80, align 8, !tbaa !5
  %82 = load i32, ptr %23, align 4, !tbaa !11
  %83 = sext i32 %82 to i64
  %84 = getelementptr inbounds %struct.cellj, ptr %81, i64 %83
  %85 = getelementptr inbounds %struct.cellj, ptr %84, i32 0, i32 1
  store double 0.000000e+00, ptr %85, align 8, !tbaa !133
  %86 = getelementptr inbounds %class.spatial_region, ptr %40, i32 0, i32 48
  %87 = load i32, ptr %20, align 4, !tbaa !11
  %88 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5celljEixEi(ptr noundef nonnull align 8 dereferenceable(40) %86, i32 noundef %87)
  %89 = load ptr, ptr %88, align 8, !tbaa !5
  %90 = load i32, ptr %22, align 4, !tbaa !11
  %91 = sext i32 %90 to i64
  %92 = getelementptr inbounds ptr, ptr %89, i64 %91
  %93 = load ptr, ptr %92, align 8, !tbaa !5
  %94 = load i32, ptr %23, align 4, !tbaa !11
  %95 = sext i32 %94 to i64
  %96 = getelementptr inbounds %struct.cellj, ptr %93, i64 %95
  %97 = getelementptr inbounds %struct.cellj, ptr %96, i32 0, i32 2
  store double 0.000000e+00, ptr %97, align 8, !tbaa !134
  br label %98

98:                                               ; preds = %61
  %99 = load i32, ptr %23, align 4, !tbaa !11
  %100 = add nsw i32 %99, 1
  store i32 %100, ptr %23, align 4, !tbaa !11
  br label %55, !llvm.loop !135

101:                                              ; preds = %60
  br label %102

102:                                              ; preds = %101
  %103 = load i32, ptr %22, align 4, !tbaa !11
  %104 = add nsw i32 %103, 1
  store i32 %104, ptr %22, align 4, !tbaa !11
  br label %48, !llvm.loop !137

105:                                              ; preds = %53
  br label %106

106:                                              ; preds = %105
  %107 = load i32, ptr %20, align 4, !tbaa !11
  %108 = add nsw i32 %107, 1
  store i32 %108, ptr %20, align 4, !tbaa !11
  br label %41, !llvm.loop !138

109:                                              ; preds = %46
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #8
  store i32 0, ptr %24, align 4, !tbaa !11
  br label %110

110:                                              ; preds = %1041, %109
  %111 = load i32, ptr %24, align 4, !tbaa !11
  %112 = getelementptr inbounds %class.spatial_region, ptr %40, i32 0, i32 0
  %113 = load i32, ptr %112, align 8, !tbaa !13
  %114 = icmp slt i32 %111, %113
  br i1 %114, label %116, label %115

115:                                              ; preds = %110
  store i32 11, ptr %21, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #8
  br label %1044

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

117:                                              ; preds = %1037, %116
  %118 = load i32, ptr %25, align 4, !tbaa !11
  %119 = getelementptr inbounds %class.spatial_region, ptr %40, i32 0, i32 1
  %120 = load i32, ptr %119, align 4, !tbaa !129
  %121 = icmp slt i32 %118, %120
  br i1 %121, label %123, label %122

122:                                              ; preds = %117
  store i32 14, ptr %21, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #8
  br label %1040

123:                                              ; preds = %117
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #8
  store i32 0, ptr %26, align 4, !tbaa !11
  br label %124

124:                                              ; preds = %1033, %123
  %125 = load i32, ptr %26, align 4, !tbaa !11
  %126 = getelementptr inbounds %class.spatial_region, ptr %40, i32 0, i32 2
  %127 = load i32, ptr %126, align 8, !tbaa !130
  %128 = icmp slt i32 %125, %127
  br i1 %128, label %130, label %129

129:                                              ; preds = %124
  store i32 17, ptr %21, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #8
  br label %1036

130:                                              ; preds = %124
  %131 = getelementptr inbounds %class.spatial_region, ptr %40, i32 0, i32 50
  %132 = load i32, ptr %24, align 4, !tbaa !11
  %133 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5cellpEixEi(ptr noundef nonnull align 8 dereferenceable(40) %131, i32 noundef %132)
  %134 = load ptr, ptr %133, align 8, !tbaa !5
  %135 = load i32, ptr %25, align 4, !tbaa !11
  %136 = sext i32 %135 to i64
  %137 = getelementptr inbounds ptr, ptr %134, i64 %136
  %138 = load ptr, ptr %137, align 8, !tbaa !5
  %139 = load i32, ptr %26, align 4, !tbaa !11
  %140 = sext i32 %139 to i64
  %141 = getelementptr inbounds %struct.cellp, ptr %138, i64 %140
  %142 = getelementptr inbounds %struct.cellp, ptr %141, i32 0, i32 0
  %143 = getelementptr inbounds %class.plist, ptr %142, i32 0, i32 1
  %144 = load ptr, ptr %143, align 8, !tbaa !139
  store ptr %144, ptr %5, align 8, !tbaa !5
  br label %145

145:                                              ; preds = %1031, %130
  %146 = load ptr, ptr %5, align 8, !tbaa !5
  %147 = icmp ne ptr %146, null
  br i1 %147, label %148, label %1032

148:                                              ; preds = %145
  call void @llvm.lifetime.start.p0(i64 24, ptr %27) #8
  %149 = load ptr, ptr %5, align 8, !tbaa !5
  %150 = getelementptr inbounds %struct.particle, ptr %149, i32 0, i32 0
  %151 = load ptr, ptr %5, align 8, !tbaa !5
  %152 = getelementptr inbounds %struct.particle, ptr %151, i32 0, i32 1
  %153 = load ptr, ptr %5, align 8, !tbaa !5
  %154 = getelementptr inbounds %struct.particle, ptr %153, i32 0, i32 2
  call void @_ZN14spatial_region13e_to_particleERdS0_S0_(ptr dead_on_unwind writable sret(%struct.vector3d) align 8 %27, ptr noundef nonnull align 8 dereferenceable(608) %40, ptr noundef nonnull align 8 dereferenceable(8) %150, ptr noundef nonnull align 8 dereferenceable(8) %152, ptr noundef nonnull align 8 dereferenceable(8) %154)
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %8, ptr align 8 %27, i64 24, i1 false), !tbaa.struct !142
  call void @llvm.lifetime.end.p0(i64 24, ptr %27) #8
  call void @llvm.lifetime.start.p0(i64 24, ptr %28) #8
  %155 = load ptr, ptr %5, align 8, !tbaa !5
  %156 = getelementptr inbounds %struct.particle, ptr %155, i32 0, i32 0
  %157 = load ptr, ptr %5, align 8, !tbaa !5
  %158 = getelementptr inbounds %struct.particle, ptr %157, i32 0, i32 1
  %159 = load ptr, ptr %5, align 8, !tbaa !5
  %160 = getelementptr inbounds %struct.particle, ptr %159, i32 0, i32 2
  call void @_ZN14spatial_region13b_to_particleERdS0_S0_(ptr dead_on_unwind writable sret(%struct.vector3d) align 8 %28, ptr noundef nonnull align 8 dereferenceable(608) %40, ptr noundef nonnull align 8 dereferenceable(8) %156, ptr noundef nonnull align 8 dereferenceable(8) %158, ptr noundef nonnull align 8 dereferenceable(8) %160)
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %9, ptr align 8 %28, i64 24, i1 false), !tbaa.struct !142
  call void @llvm.lifetime.end.p0(i64 24, ptr %28) #8
  %161 = load double, ptr %4, align 8, !tbaa !9
  %162 = getelementptr inbounds %struct.vector3d, ptr %9, i32 0, i32 2
  %163 = load double, ptr %162, align 8, !tbaa !143
  %164 = fadd double %163, %161
  store double %164, ptr %162, align 8, !tbaa !143
  %165 = load ptr, ptr %5, align 8, !tbaa !5
  %166 = getelementptr inbounds %struct.particle, ptr %165, i32 0, i32 8
  %167 = load double, ptr %166, align 8, !tbaa !145
  %168 = fcmp oeq double %167, 0.000000e+00
  br i1 %168, label %169, label %514

169:                                              ; preds = %148
  %170 = load i8, ptr @qed_enabled, align 1, !tbaa !147, !range !149, !noundef !150
  %171 = trunc i8 %170 to i1
  br i1 %171, label %172, label %213

172:                                              ; preds = %169
  %173 = load ptr, ptr %5, align 8, !tbaa !5
  %174 = getelementptr inbounds %struct.particle, ptr %173, i32 0, i32 3
  %175 = load double, ptr %174, align 8, !tbaa !151
  %176 = getelementptr inbounds %struct.vector3d, ptr %12, i32 0, i32 0
  store double %175, ptr %176, align 8, !tbaa !152
  %177 = load ptr, ptr %5, align 8, !tbaa !5
  %178 = getelementptr inbounds %struct.particle, ptr %177, i32 0, i32 4
  %179 = load double, ptr %178, align 8, !tbaa !153
  %180 = getelementptr inbounds %struct.vector3d, ptr %12, i32 0, i32 1
  store double %179, ptr %180, align 8, !tbaa !154
  %181 = load ptr, ptr %5, align 8, !tbaa !5
  %182 = getelementptr inbounds %struct.particle, ptr %181, i32 0, i32 5
  %183 = load double, ptr %182, align 8, !tbaa !155
  %184 = getelementptr inbounds %struct.vector3d, ptr %12, i32 0, i32 2
  store double %183, ptr %184, align 8, !tbaa !143
  %185 = load ptr, ptr %5, align 8, !tbaa !5
  %186 = getelementptr inbounds %struct.particle, ptr %185, i32 0, i32 6
  %187 = load double, ptr %186, align 8, !tbaa !156
  store double %187, ptr %13, align 8, !tbaa !9
  %188 = load ptr, ptr %5, align 8, !tbaa !5
  %189 = getelementptr inbounds %struct.particle, ptr %188, i32 0, i32 9
  %190 = load double, ptr %189, align 8, !tbaa !157
  store double %190, ptr %14, align 8, !tbaa !9
  %191 = load ptr, ptr %5, align 8, !tbaa !5
  %192 = getelementptr inbounds %struct.particle, ptr %191, i32 0, i32 6
  %193 = call noundef double @_ZN14spatial_region3chiER8vector3dS1_S1_Rd(ptr noundef nonnull align 8 dereferenceable(608) %40, ptr noundef nonnull align 8 dereferenceable(24) %8, ptr noundef nonnull align 8 dereferenceable(24) %9, ptr noundef nonnull align 8 dereferenceable(24) %12, ptr noundef nonnull align 8 dereferenceable(8) %192)
  %194 = load ptr, ptr %5, align 8, !tbaa !5
  %195 = getelementptr inbounds %struct.particle, ptr %194, i32 0, i32 9
  store double %193, ptr %195, align 8, !tbaa !157
  %196 = load ptr, ptr %5, align 8, !tbaa !5
  %197 = getelementptr inbounds %struct.particle, ptr %196, i32 0, i32 9
  %198 = load double, ptr %197, align 8, !tbaa !157
  %199 = load double, ptr %14, align 8, !tbaa !9
  %200 = fadd double %198, %199
  %201 = fmul double 5.000000e-01, %200
  store double %201, ptr %16, align 8, !tbaa !9
  %202 = call noundef double @_ZN14spatial_region8get_randEv(ptr noundef nonnull align 8 dereferenceable(608) %40)
  store double %202, ptr %17, align 8, !tbaa !9
  %203 = call noundef double @_ZN14spatial_region8get_randEv(ptr noundef nonnull align 8 dereferenceable(608) %40)
  %204 = call noundef double @_ZN14spatial_region7tilde_wERdS0_S0_(ptr noundef nonnull align 8 dereferenceable(608) %40, ptr noundef nonnull align 8 dereferenceable(8) %13, ptr noundef nonnull align 8 dereferenceable(8) %17, ptr noundef nonnull align 8 dereferenceable(8) %16)
  %205 = load double, ptr %13, align 8, !tbaa !9
  %206 = fmul double %204, %205
  %207 = getelementptr inbounds %class.spatial_region, ptr %40, i32 0, i32 6
  %208 = load double, ptr %207, align 8, !tbaa !158
  %209 = fmul double %206, %208
  %210 = fcmp oge double %203, %209
  %211 = xor i1 %210, true
  %212 = zext i1 %211 to i8
  store i8 %212, ptr %11, align 1, !tbaa !147
  br label %214

213:                                              ; preds = %169
  store i8 0, ptr %11, align 1, !tbaa !147
  br label %214

214:                                              ; preds = %213, %172
  %215 = load i8, ptr %11, align 1, !tbaa !147, !range !149, !noundef !150
  %216 = trunc i8 %215 to i1
  br i1 %216, label %245, label %217

217:                                              ; preds = %214
  call void @llvm.lifetime.start.p0(i64 24, ptr %29) #8
  %218 = load ptr, ptr %5, align 8, !tbaa !5
  %219 = getelementptr inbounds %class.spatial_region, ptr %40, i32 0, i32 6
  %220 = load double, ptr %219, align 8, !tbaa !158
  call void @_ZN8particle16get_displacementEd(ptr dead_on_unwind writable sret(%struct.vector3d) align 8 %29, ptr noundef nonnull align 8 dereferenceable(104) %218, double noundef %220)
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %7, ptr align 8 %29, i64 24, i1 false), !tbaa.struct !142
  call void @llvm.lifetime.end.p0(i64 24, ptr %29) #8
  %221 = getelementptr inbounds %struct.vector3d, ptr %7, i32 0, i32 0
  %222 = load double, ptr %221, align 8, !tbaa !152
  %223 = getelementptr inbounds %class.spatial_region, ptr %40, i32 0, i32 3
  %224 = load double, ptr %223, align 8, !tbaa !159
  %225 = fdiv double %222, %224
  %226 = getelementptr inbounds %struct.vector3d, ptr %7, i32 0, i32 0
  store double %225, ptr %226, align 8, !tbaa !152
  %227 = getelementptr inbounds %struct.vector3d, ptr %7, i32 0, i32 1
  %228 = load double, ptr %227, align 8, !tbaa !154
  %229 = getelementptr inbounds %class.spatial_region, ptr %40, i32 0, i32 4
  %230 = load double, ptr %229, align 8, !tbaa !160
  %231 = fdiv double %228, %230
  %232 = getelementptr inbounds %struct.vector3d, ptr %7, i32 0, i32 1
  store double %231, ptr %232, align 8, !tbaa !154
  %233 = getelementptr inbounds %struct.vector3d, ptr %7, i32 0, i32 2
  %234 = load double, ptr %233, align 8, !tbaa !143
  %235 = getelementptr inbounds %class.spatial_region, ptr %40, i32 0, i32 5
  %236 = load double, ptr %235, align 8, !tbaa !161
  %237 = fdiv double %234, %236
  %238 = getelementptr inbounds %struct.vector3d, ptr %7, i32 0, i32 2
  store double %237, ptr %238, align 8, !tbaa !143
  %239 = load ptr, ptr %5, align 8, !tbaa !5
  call void @_ZN8particle18coordinate_advanceER8vector3d(ptr noundef nonnull align 8 dereferenceable(104) %239, ptr noundef nonnull align 8 dereferenceable(24) %7)
  %240 = load ptr, ptr %5, align 8, !tbaa !5
  store ptr %240, ptr %6, align 8, !tbaa !5
  %241 = load ptr, ptr %5, align 8, !tbaa !5
  %242 = getelementptr inbounds %struct.particle, ptr %241, i32 0, i32 11
  %243 = load ptr, ptr %242, align 8, !tbaa !162
  store ptr %243, ptr %5, align 8, !tbaa !5
  %244 = load ptr, ptr %6, align 8, !tbaa !5
  call void @_ZN14spatial_region5placeER8particleRiS2_S2_(ptr noundef nonnull align 8 dereferenceable(608) %40, ptr noundef nonnull align 8 dereferenceable(104) %244, ptr noundef nonnull align 4 dereferenceable(4) %24, ptr noundef nonnull align 4 dereferenceable(4) %25, ptr noundef nonnull align 4 dereferenceable(4) %26)
  br label %513

245:                                              ; preds = %214
  %246 = load ptr, ptr %5, align 8, !tbaa !5
  %247 = getelementptr inbounds %struct.particle, ptr %246, i32 0, i32 0
  %248 = load double, ptr %247, align 8, !tbaa !163
  %249 = getelementptr inbounds %struct.vector3d, ptr %7, i32 0, i32 0
  store double %248, ptr %249, align 8, !tbaa !152
  %250 = load ptr, ptr %5, align 8, !tbaa !5
  %251 = getelementptr inbounds %struct.particle, ptr %250, i32 0, i32 1
  %252 = load double, ptr %251, align 8, !tbaa !164
  %253 = getelementptr inbounds %struct.vector3d, ptr %7, i32 0, i32 1
  store double %252, ptr %253, align 8, !tbaa !154
  %254 = load ptr, ptr %5, align 8, !tbaa !5
  %255 = getelementptr inbounds %struct.particle, ptr %254, i32 0, i32 2
  %256 = load double, ptr %255, align 8, !tbaa !165
  %257 = getelementptr inbounds %struct.vector3d, ptr %7, i32 0, i32 2
  store double %256, ptr %257, align 8, !tbaa !143
  %258 = load double, ptr %17, align 8, !tbaa !9
  %259 = load double, ptr %13, align 8, !tbaa !9
  %260 = fmul double %258, %259
  %261 = load double, ptr %17, align 8, !tbaa !9
  %262 = load ptr, ptr %5, align 8, !tbaa !5
  %263 = getelementptr inbounds %struct.particle, ptr %262, i32 0, i32 9
  %264 = load double, ptr %263, align 8, !tbaa !157
  %265 = fmul double %261, %264
  %266 = load ptr, ptr %5, align 8, !tbaa !5
  %267 = getelementptr inbounds %struct.particle, ptr %266, i32 0, i32 7
  %268 = load double, ptr %267, align 8, !tbaa !166
  %269 = fneg double %268
  %270 = call noundef ptr @_ZN14spatial_region13bear_particleEdR8vector3dS1_ddd(ptr noundef nonnull align 8 dereferenceable(608) %40, double noundef -1.000000e+00, ptr noundef nonnull align 8 dereferenceable(24) %7, ptr noundef nonnull align 8 dereferenceable(24) %12, double noundef %260, double noundef %265, double noundef %269)
  store ptr %270, ptr %18, align 8, !tbaa !5
  %271 = load ptr, ptr %18, align 8, !tbaa !5
  %272 = getelementptr inbounds %struct.particle, ptr %271, i32 0, i32 3
  %273 = load double, ptr %272, align 8, !tbaa !151
  %274 = getelementptr inbounds %struct.vector3d, ptr %10, i32 0, i32 0
  store double %273, ptr %274, align 8, !tbaa !152
  %275 = load ptr, ptr %18, align 8, !tbaa !5
  %276 = getelementptr inbounds %struct.particle, ptr %275, i32 0, i32 4
  %277 = load double, ptr %276, align 8, !tbaa !153
  %278 = getelementptr inbounds %struct.vector3d, ptr %10, i32 0, i32 1
  store double %277, ptr %278, align 8, !tbaa !154
  %279 = load ptr, ptr %18, align 8, !tbaa !5
  %280 = getelementptr inbounds %struct.particle, ptr %279, i32 0, i32 5
  %281 = load double, ptr %280, align 8, !tbaa !155
  %282 = getelementptr inbounds %struct.vector3d, ptr %10, i32 0, i32 2
  store double %281, ptr %282, align 8, !tbaa !143
  %283 = load ptr, ptr %18, align 8, !tbaa !5
  %284 = getelementptr inbounds %struct.particle, ptr %283, i32 0, i32 6
  %285 = load double, ptr %284, align 8, !tbaa !156
  store double %285, ptr %13, align 8, !tbaa !9
  %286 = load ptr, ptr %18, align 8, !tbaa !5
  %287 = getelementptr inbounds %struct.particle, ptr %286, i32 0, i32 9
  %288 = load double, ptr %287, align 8, !tbaa !157
  store double %288, ptr %14, align 8, !tbaa !9
  %289 = getelementptr inbounds %class.spatial_region, ptr %40, i32 0, i32 24
  %290 = load ptr, ptr %18, align 8, !tbaa !5
  %291 = getelementptr inbounds %class.spatial_region, ptr %40, i32 0, i32 6
  call void @_ZNKSt8functionIFvR8particleR8vector3dS3_RdEEclES1_S3_S3_S4_(ptr noundef nonnull align 8 dereferenceable(32) %289, ptr noundef nonnull align 8 dereferenceable(104) %290, ptr noundef nonnull align 8 dereferenceable(24) %8, ptr noundef nonnull align 8 dereferenceable(24) %9, ptr noundef nonnull align 8 dereferenceable(8) %291)
  %292 = load ptr, ptr %18, align 8, !tbaa !5
  %293 = getelementptr inbounds %struct.particle, ptr %292, i32 0, i32 3
  %294 = load double, ptr %293, align 8, !tbaa !151
  %295 = getelementptr inbounds %struct.vector3d, ptr %10, i32 0, i32 0
  %296 = load double, ptr %295, align 8, !tbaa !152
  %297 = fadd double %294, %296
  %298 = fmul double 5.000000e-01, %297
  %299 = getelementptr inbounds %struct.vector3d, ptr %12, i32 0, i32 0
  store double %298, ptr %299, align 8, !tbaa !152
  %300 = load ptr, ptr %18, align 8, !tbaa !5
  %301 = getelementptr inbounds %struct.particle, ptr %300, i32 0, i32 4
  %302 = load double, ptr %301, align 8, !tbaa !153
  %303 = getelementptr inbounds %struct.vector3d, ptr %10, i32 0, i32 1
  %304 = load double, ptr %303, align 8, !tbaa !154
  %305 = fadd double %302, %304
  %306 = fmul double 5.000000e-01, %305
  %307 = getelementptr inbounds %struct.vector3d, ptr %12, i32 0, i32 1
  store double %306, ptr %307, align 8, !tbaa !154
  %308 = load ptr, ptr %18, align 8, !tbaa !5
  %309 = getelementptr inbounds %struct.particle, ptr %308, i32 0, i32 5
  %310 = load double, ptr %309, align 8, !tbaa !155
  %311 = getelementptr inbounds %struct.vector3d, ptr %10, i32 0, i32 2
  %312 = load double, ptr %311, align 8, !tbaa !143
  %313 = fadd double %310, %312
  %314 = fmul double 5.000000e-01, %313
  %315 = getelementptr inbounds %struct.vector3d, ptr %12, i32 0, i32 2
  store double %314, ptr %315, align 8, !tbaa !143
  %316 = load ptr, ptr %18, align 8, !tbaa !5
  %317 = getelementptr inbounds %struct.particle, ptr %316, i32 0, i32 6
  %318 = load double, ptr %317, align 8, !tbaa !156
  %319 = load double, ptr %13, align 8, !tbaa !9
  %320 = fadd double %318, %319
  %321 = fmul double 5.000000e-01, %320
  store double %321, ptr %15, align 8, !tbaa !9
  %322 = call noundef double @_ZN14spatial_region3chiER8vector3dS1_S1_Rd(ptr noundef nonnull align 8 dereferenceable(608) %40, ptr noundef nonnull align 8 dereferenceable(24) %8, ptr noundef nonnull align 8 dereferenceable(24) %9, ptr noundef nonnull align 8 dereferenceable(24) %12, ptr noundef nonnull align 8 dereferenceable(8) %15)
  %323 = load ptr, ptr %18, align 8, !tbaa !5
  %324 = getelementptr inbounds %struct.particle, ptr %323, i32 0, i32 9
  store double %322, ptr %324, align 8, !tbaa !157
  call void @llvm.lifetime.start.p0(i64 24, ptr %30) #8
  %325 = load ptr, ptr %18, align 8, !tbaa !5
  %326 = getelementptr inbounds %class.spatial_region, ptr %40, i32 0, i32 6
  %327 = load double, ptr %326, align 8, !tbaa !158
  call void @_ZN8particle16get_displacementEd(ptr dead_on_unwind writable sret(%struct.vector3d) align 8 %30, ptr noundef nonnull align 8 dereferenceable(104) %325, double noundef %327)
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %7, ptr align 8 %30, i64 24, i1 false), !tbaa.struct !142
  call void @llvm.lifetime.end.p0(i64 24, ptr %30) #8
  %328 = getelementptr inbounds %struct.vector3d, ptr %7, i32 0, i32 0
  %329 = load double, ptr %328, align 8, !tbaa !152
  %330 = getelementptr inbounds %class.spatial_region, ptr %40, i32 0, i32 3
  %331 = load double, ptr %330, align 8, !tbaa !159
  %332 = fdiv double %329, %331
  %333 = getelementptr inbounds %struct.vector3d, ptr %7, i32 0, i32 0
  store double %332, ptr %333, align 8, !tbaa !152
  %334 = getelementptr inbounds %struct.vector3d, ptr %7, i32 0, i32 1
  %335 = load double, ptr %334, align 8, !tbaa !154
  %336 = getelementptr inbounds %class.spatial_region, ptr %40, i32 0, i32 4
  %337 = load double, ptr %336, align 8, !tbaa !160
  %338 = fdiv double %335, %337
  %339 = getelementptr inbounds %struct.vector3d, ptr %7, i32 0, i32 1
  store double %338, ptr %339, align 8, !tbaa !154
  %340 = getelementptr inbounds %struct.vector3d, ptr %7, i32 0, i32 2
  %341 = load double, ptr %340, align 8, !tbaa !143
  %342 = getelementptr inbounds %class.spatial_region, ptr %40, i32 0, i32 5
  %343 = load double, ptr %342, align 8, !tbaa !161
  %344 = fdiv double %341, %343
  %345 = getelementptr inbounds %struct.vector3d, ptr %7, i32 0, i32 2
  store double %344, ptr %345, align 8, !tbaa !143
  %346 = load ptr, ptr %18, align 8, !tbaa !5
  call void @_ZN14spatial_region11jdepositionER8particleR8vector3d(ptr noundef nonnull align 8 dereferenceable(608) %40, ptr noundef nonnull align 8 dereferenceable(104) %346, ptr noundef nonnull align 8 dereferenceable(24) %7)
  %347 = load ptr, ptr %18, align 8, !tbaa !5
  call void @_ZN14spatial_region5placeER8particle(ptr noundef nonnull align 8 dereferenceable(608) %40, ptr noundef nonnull align 8 dereferenceable(104) %347)
  %348 = load ptr, ptr %5, align 8, !tbaa !5
  %349 = getelementptr inbounds %struct.particle, ptr %348, i32 0, i32 0
  %350 = load double, ptr %349, align 8, !tbaa !163
  %351 = getelementptr inbounds %struct.vector3d, ptr %7, i32 0, i32 0
  store double %350, ptr %351, align 8, !tbaa !152
  %352 = load ptr, ptr %5, align 8, !tbaa !5
  %353 = getelementptr inbounds %struct.particle, ptr %352, i32 0, i32 1
  %354 = load double, ptr %353, align 8, !tbaa !164
  %355 = getelementptr inbounds %struct.vector3d, ptr %7, i32 0, i32 1
  store double %354, ptr %355, align 8, !tbaa !154
  %356 = load ptr, ptr %5, align 8, !tbaa !5
  %357 = getelementptr inbounds %struct.particle, ptr %356, i32 0, i32 2
  %358 = load double, ptr %357, align 8, !tbaa !165
  %359 = getelementptr inbounds %struct.vector3d, ptr %7, i32 0, i32 2
  store double %358, ptr %359, align 8, !tbaa !143
  %360 = load ptr, ptr %5, align 8, !tbaa !5
  %361 = getelementptr inbounds %struct.particle, ptr %360, i32 0, i32 3
  %362 = load double, ptr %361, align 8, !tbaa !151
  %363 = getelementptr inbounds %struct.vector3d, ptr %12, i32 0, i32 0
  store double %362, ptr %363, align 8, !tbaa !152
  %364 = load ptr, ptr %5, align 8, !tbaa !5
  %365 = getelementptr inbounds %struct.particle, ptr %364, i32 0, i32 4
  %366 = load double, ptr %365, align 8, !tbaa !153
  %367 = getelementptr inbounds %struct.vector3d, ptr %12, i32 0, i32 1
  store double %366, ptr %367, align 8, !tbaa !154
  %368 = load ptr, ptr %5, align 8, !tbaa !5
  %369 = getelementptr inbounds %struct.particle, ptr %368, i32 0, i32 5
  %370 = load double, ptr %369, align 8, !tbaa !155
  %371 = getelementptr inbounds %struct.vector3d, ptr %12, i32 0, i32 2
  store double %370, ptr %371, align 8, !tbaa !143
  %372 = load double, ptr %17, align 8, !tbaa !9
  %373 = fsub double 1.000000e+00, %372
  %374 = load ptr, ptr %5, align 8, !tbaa !5
  %375 = getelementptr inbounds %struct.particle, ptr %374, i32 0, i32 6
  %376 = load double, ptr %375, align 8, !tbaa !156
  %377 = fmul double %373, %376
  %378 = load double, ptr %17, align 8, !tbaa !9
  %379 = fsub double 1.000000e+00, %378
  %380 = load ptr, ptr %5, align 8, !tbaa !5
  %381 = getelementptr inbounds %struct.particle, ptr %380, i32 0, i32 9
  %382 = load double, ptr %381, align 8, !tbaa !157
  %383 = fmul double %379, %382
  %384 = load ptr, ptr %5, align 8, !tbaa !5
  %385 = getelementptr inbounds %struct.particle, ptr %384, i32 0, i32 7
  %386 = load double, ptr %385, align 8, !tbaa !166
  %387 = call noundef ptr @_ZN14spatial_region13bear_particleEdR8vector3dS1_ddd(ptr noundef nonnull align 8 dereferenceable(608) %40, double noundef 1.000000e+00, ptr noundef nonnull align 8 dereferenceable(24) %7, ptr noundef nonnull align 8 dereferenceable(24) %12, double noundef %377, double noundef %383, double noundef %386)
  store ptr %387, ptr %18, align 8, !tbaa !5
  %388 = load ptr, ptr %18, align 8, !tbaa !5
  %389 = getelementptr inbounds %struct.particle, ptr %388, i32 0, i32 3
  %390 = load double, ptr %389, align 8, !tbaa !151
  %391 = getelementptr inbounds %struct.vector3d, ptr %10, i32 0, i32 0
  store double %390, ptr %391, align 8, !tbaa !152
  %392 = load ptr, ptr %18, align 8, !tbaa !5
  %393 = getelementptr inbounds %struct.particle, ptr %392, i32 0, i32 4
  %394 = load double, ptr %393, align 8, !tbaa !153
  %395 = getelementptr inbounds %struct.vector3d, ptr %10, i32 0, i32 1
  store double %394, ptr %395, align 8, !tbaa !154
  %396 = load ptr, ptr %18, align 8, !tbaa !5
  %397 = getelementptr inbounds %struct.particle, ptr %396, i32 0, i32 5
  %398 = load double, ptr %397, align 8, !tbaa !155
  %399 = getelementptr inbounds %struct.vector3d, ptr %10, i32 0, i32 2
  store double %398, ptr %399, align 8, !tbaa !143
  %400 = load ptr, ptr %18, align 8, !tbaa !5
  %401 = getelementptr inbounds %struct.particle, ptr %400, i32 0, i32 6
  %402 = load double, ptr %401, align 8, !tbaa !156
  store double %402, ptr %13, align 8, !tbaa !9
  %403 = load ptr, ptr %18, align 8, !tbaa !5
  %404 = getelementptr inbounds %struct.particle, ptr %403, i32 0, i32 9
  %405 = load double, ptr %404, align 8, !tbaa !157
  store double %405, ptr %14, align 8, !tbaa !9
  %406 = getelementptr inbounds %class.spatial_region, ptr %40, i32 0, i32 24
  %407 = load ptr, ptr %18, align 8, !tbaa !5
  %408 = getelementptr inbounds %class.spatial_region, ptr %40, i32 0, i32 6
  call void @_ZNKSt8functionIFvR8particleR8vector3dS3_RdEEclES1_S3_S3_S4_(ptr noundef nonnull align 8 dereferenceable(32) %406, ptr noundef nonnull align 8 dereferenceable(104) %407, ptr noundef nonnull align 8 dereferenceable(24) %8, ptr noundef nonnull align 8 dereferenceable(24) %9, ptr noundef nonnull align 8 dereferenceable(8) %408)
  %409 = load ptr, ptr %18, align 8, !tbaa !5
  %410 = getelementptr inbounds %struct.particle, ptr %409, i32 0, i32 3
  %411 = load double, ptr %410, align 8, !tbaa !151
  %412 = getelementptr inbounds %struct.vector3d, ptr %10, i32 0, i32 0
  %413 = load double, ptr %412, align 8, !tbaa !152
  %414 = fadd double %411, %413
  %415 = fmul double 5.000000e-01, %414
  %416 = getelementptr inbounds %struct.vector3d, ptr %12, i32 0, i32 0
  store double %415, ptr %416, align 8, !tbaa !152
  %417 = load ptr, ptr %18, align 8, !tbaa !5
  %418 = getelementptr inbounds %struct.particle, ptr %417, i32 0, i32 4
  %419 = load double, ptr %418, align 8, !tbaa !153
  %420 = getelementptr inbounds %struct.vector3d, ptr %10, i32 0, i32 1
  %421 = load double, ptr %420, align 8, !tbaa !154
  %422 = fadd double %419, %421
  %423 = fmul double 5.000000e-01, %422
  %424 = getelementptr inbounds %struct.vector3d, ptr %12, i32 0, i32 1
  store double %423, ptr %424, align 8, !tbaa !154
  %425 = load ptr, ptr %18, align 8, !tbaa !5
  %426 = getelementptr inbounds %struct.particle, ptr %425, i32 0, i32 5
  %427 = load double, ptr %426, align 8, !tbaa !155
  %428 = getelementptr inbounds %struct.vector3d, ptr %10, i32 0, i32 2
  %429 = load double, ptr %428, align 8, !tbaa !143
  %430 = fadd double %427, %429
  %431 = fmul double 5.000000e-01, %430
  %432 = getelementptr inbounds %struct.vector3d, ptr %12, i32 0, i32 2
  store double %431, ptr %432, align 8, !tbaa !143
  %433 = load ptr, ptr %18, align 8, !tbaa !5
  %434 = getelementptr inbounds %struct.particle, ptr %433, i32 0, i32 6
  %435 = load double, ptr %434, align 8, !tbaa !156
  %436 = load double, ptr %13, align 8, !tbaa !9
  %437 = fadd double %435, %436
  %438 = fmul double 5.000000e-01, %437
  store double %438, ptr %15, align 8, !tbaa !9
  %439 = call noundef double @_ZN14spatial_region3chiER8vector3dS1_S1_Rd(ptr noundef nonnull align 8 dereferenceable(608) %40, ptr noundef nonnull align 8 dereferenceable(24) %8, ptr noundef nonnull align 8 dereferenceable(24) %9, ptr noundef nonnull align 8 dereferenceable(24) %12, ptr noundef nonnull align 8 dereferenceable(8) %15)
  %440 = load ptr, ptr %18, align 8, !tbaa !5
  %441 = getelementptr inbounds %struct.particle, ptr %440, i32 0, i32 9
  store double %439, ptr %441, align 8, !tbaa !157
  call void @llvm.lifetime.start.p0(i64 24, ptr %31) #8
  %442 = load ptr, ptr %18, align 8, !tbaa !5
  %443 = getelementptr inbounds %class.spatial_region, ptr %40, i32 0, i32 6
  %444 = load double, ptr %443, align 8, !tbaa !158
  call void @_ZN8particle16get_displacementEd(ptr dead_on_unwind writable sret(%struct.vector3d) align 8 %31, ptr noundef nonnull align 8 dereferenceable(104) %442, double noundef %444)
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %7, ptr align 8 %31, i64 24, i1 false), !tbaa.struct !142
  call void @llvm.lifetime.end.p0(i64 24, ptr %31) #8
  %445 = getelementptr inbounds %struct.vector3d, ptr %7, i32 0, i32 0
  %446 = load double, ptr %445, align 8, !tbaa !152
  %447 = getelementptr inbounds %class.spatial_region, ptr %40, i32 0, i32 3
  %448 = load double, ptr %447, align 8, !tbaa !159
  %449 = fdiv double %446, %448
  %450 = getelementptr inbounds %struct.vector3d, ptr %7, i32 0, i32 0
  store double %449, ptr %450, align 8, !tbaa !152
  %451 = getelementptr inbounds %struct.vector3d, ptr %7, i32 0, i32 1
  %452 = load double, ptr %451, align 8, !tbaa !154
  %453 = getelementptr inbounds %class.spatial_region, ptr %40, i32 0, i32 4
  %454 = load double, ptr %453, align 8, !tbaa !160
  %455 = fdiv double %452, %454
  %456 = getelementptr inbounds %struct.vector3d, ptr %7, i32 0, i32 1
  store double %455, ptr %456, align 8, !tbaa !154
  %457 = getelementptr inbounds %struct.vector3d, ptr %7, i32 0, i32 2
  %458 = load double, ptr %457, align 8, !tbaa !143
  %459 = getelementptr inbounds %class.spatial_region, ptr %40, i32 0, i32 5
  %460 = load double, ptr %459, align 8, !tbaa !161
  %461 = fdiv double %458, %460
  %462 = getelementptr inbounds %struct.vector3d, ptr %7, i32 0, i32 2
  store double %461, ptr %462, align 8, !tbaa !143
  %463 = load ptr, ptr %18, align 8, !tbaa !5
  call void @_ZN14spatial_region11jdepositionER8particleR8vector3d(ptr noundef nonnull align 8 dereferenceable(608) %40, ptr noundef nonnull align 8 dereferenceable(104) %463, ptr noundef nonnull align 8 dereferenceable(24) %7)
  %464 = load ptr, ptr %18, align 8, !tbaa !5
  call void @_ZN14spatial_region5placeER8particle(ptr noundef nonnull align 8 dereferenceable(608) %40, ptr noundef nonnull align 8 dereferenceable(104) %464)
  %465 = load ptr, ptr %5, align 8, !tbaa !5
  %466 = getelementptr inbounds %struct.particle, ptr %465, i32 0, i32 11
  %467 = load ptr, ptr %466, align 8, !tbaa !162
  store ptr %467, ptr %6, align 8, !tbaa !5
  %468 = load ptr, ptr %5, align 8, !tbaa !5
  %469 = getelementptr inbounds %struct.particle, ptr %468, i32 0, i32 12
  %470 = load ptr, ptr %469, align 8, !tbaa !167
  %471 = icmp ne ptr %470, null
  br i1 %471, label %472, label %480

472:                                              ; preds = %245
  %473 = load ptr, ptr %5, align 8, !tbaa !5
  %474 = getelementptr inbounds %struct.particle, ptr %473, i32 0, i32 11
  %475 = load ptr, ptr %474, align 8, !tbaa !162
  %476 = load ptr, ptr %5, align 8, !tbaa !5
  %477 = getelementptr inbounds %struct.particle, ptr %476, i32 0, i32 12
  %478 = load ptr, ptr %477, align 8, !tbaa !167
  %479 = getelementptr inbounds %struct.particle, ptr %478, i32 0, i32 11
  store ptr %475, ptr %479, align 8, !tbaa !162
  br label %497

480:                                              ; preds = %245
  %481 = load ptr, ptr %5, align 8, !tbaa !5
  %482 = getelementptr inbounds %struct.particle, ptr %481, i32 0, i32 11
  %483 = load ptr, ptr %482, align 8, !tbaa !162
  %484 = getelementptr inbounds %class.spatial_region, ptr %40, i32 0, i32 50
  %485 = load i32, ptr %24, align 4, !tbaa !11
  %486 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5cellpEixEi(ptr noundef nonnull align 8 dereferenceable(40) %484, i32 noundef %485)
  %487 = load ptr, ptr %486, align 8, !tbaa !5
  %488 = load i32, ptr %25, align 4, !tbaa !11
  %489 = sext i32 %488 to i64
  %490 = getelementptr inbounds ptr, ptr %487, i64 %489
  %491 = load ptr, ptr %490, align 8, !tbaa !5
  %492 = load i32, ptr %26, align 4, !tbaa !11
  %493 = sext i32 %492 to i64
  %494 = getelementptr inbounds %struct.cellp, ptr %491, i64 %493
  %495 = getelementptr inbounds %struct.cellp, ptr %494, i32 0, i32 0
  %496 = getelementptr inbounds %class.plist, ptr %495, i32 0, i32 0
  store ptr %483, ptr %496, align 8, !tbaa !168
  br label %497

497:                                              ; preds = %480, %472
  %498 = load ptr, ptr %5, align 8, !tbaa !5
  %499 = getelementptr inbounds %struct.particle, ptr %498, i32 0, i32 11
  %500 = load ptr, ptr %499, align 8, !tbaa !162
  %501 = icmp ne ptr %500, null
  br i1 %501, label %502, label %510

502:                                              ; preds = %497
  %503 = load ptr, ptr %5, align 8, !tbaa !5
  %504 = getelementptr inbounds %struct.particle, ptr %503, i32 0, i32 12
  %505 = load ptr, ptr %504, align 8, !tbaa !167
  %506 = load ptr, ptr %5, align 8, !tbaa !5
  %507 = getelementptr inbounds %struct.particle, ptr %506, i32 0, i32 11
  %508 = load ptr, ptr %507, align 8, !tbaa !162
  %509 = getelementptr inbounds %struct.particle, ptr %508, i32 0, i32 12
  store ptr %505, ptr %509, align 8, !tbaa !167
  br label %510

510:                                              ; preds = %502, %497
  %511 = load ptr, ptr %5, align 8, !tbaa !5
  call void @_ZN14spatial_region15delete_particleEP8particleb(ptr noundef nonnull align 8 dereferenceable(608) %40, ptr noundef %511, i1 noundef zeroext false)
  %512 = load ptr, ptr %6, align 8, !tbaa !5
  store ptr %512, ptr %5, align 8, !tbaa !5
  br label %513

513:                                              ; preds = %510, %217
  br label %1031

514:                                              ; preds = %148
  %515 = load ptr, ptr %5, align 8, !tbaa !5
  %516 = getelementptr inbounds %struct.particle, ptr %515, i32 0, i32 8
  %517 = load double, ptr %516, align 8, !tbaa !145
  %518 = call double @llvm.fabs.f64(double %517)
  %519 = fcmp oeq double %518, 1.000000e+00
  br i1 %519, label %520, label %999

520:                                              ; preds = %514
  %521 = load i8, ptr @qed_enabled, align 1, !tbaa !147, !range !149, !noundef !150
  %522 = trunc i8 %521 to i1
  br i1 %522, label %523, label %595

523:                                              ; preds = %520
  %524 = load ptr, ptr %5, align 8, !tbaa !5
  %525 = getelementptr inbounds %struct.particle, ptr %524, i32 0, i32 3
  %526 = load double, ptr %525, align 8, !tbaa !151
  %527 = getelementptr inbounds %struct.vector3d, ptr %10, i32 0, i32 0
  store double %526, ptr %527, align 8, !tbaa !152
  %528 = load ptr, ptr %5, align 8, !tbaa !5
  %529 = getelementptr inbounds %struct.particle, ptr %528, i32 0, i32 4
  %530 = load double, ptr %529, align 8, !tbaa !153
  %531 = getelementptr inbounds %struct.vector3d, ptr %10, i32 0, i32 1
  store double %530, ptr %531, align 8, !tbaa !154
  %532 = load ptr, ptr %5, align 8, !tbaa !5
  %533 = getelementptr inbounds %struct.particle, ptr %532, i32 0, i32 5
  %534 = load double, ptr %533, align 8, !tbaa !155
  %535 = getelementptr inbounds %struct.vector3d, ptr %10, i32 0, i32 2
  store double %534, ptr %535, align 8, !tbaa !143
  %536 = load ptr, ptr %5, align 8, !tbaa !5
  %537 = getelementptr inbounds %struct.particle, ptr %536, i32 0, i32 6
  %538 = load double, ptr %537, align 8, !tbaa !156
  store double %538, ptr %13, align 8, !tbaa !9
  %539 = load ptr, ptr %5, align 8, !tbaa !5
  %540 = getelementptr inbounds %struct.particle, ptr %539, i32 0, i32 9
  %541 = load double, ptr %540, align 8, !tbaa !157
  store double %541, ptr %14, align 8, !tbaa !9
  %542 = getelementptr inbounds %class.spatial_region, ptr %40, i32 0, i32 24
  %543 = load ptr, ptr %5, align 8, !tbaa !5
  %544 = getelementptr inbounds %class.spatial_region, ptr %40, i32 0, i32 6
  call void @_ZNKSt8functionIFvR8particleR8vector3dS3_RdEEclES1_S3_S3_S4_(ptr noundef nonnull align 8 dereferenceable(32) %542, ptr noundef nonnull align 8 dereferenceable(104) %543, ptr noundef nonnull align 8 dereferenceable(24) %8, ptr noundef nonnull align 8 dereferenceable(24) %9, ptr noundef nonnull align 8 dereferenceable(8) %544)
  %545 = load ptr, ptr %5, align 8, !tbaa !5
  %546 = getelementptr inbounds %struct.particle, ptr %545, i32 0, i32 3
  %547 = load double, ptr %546, align 8, !tbaa !151
  %548 = getelementptr inbounds %struct.vector3d, ptr %10, i32 0, i32 0
  %549 = load double, ptr %548, align 8, !tbaa !152
  %550 = fadd double %547, %549
  %551 = fmul double 5.000000e-01, %550
  %552 = getelementptr inbounds %struct.vector3d, ptr %12, i32 0, i32 0
  store double %551, ptr %552, align 8, !tbaa !152
  %553 = load ptr, ptr %5, align 8, !tbaa !5
  %554 = getelementptr inbounds %struct.particle, ptr %553, i32 0, i32 4
  %555 = load double, ptr %554, align 8, !tbaa !153
  %556 = getelementptr inbounds %struct.vector3d, ptr %10, i32 0, i32 1
  %557 = load double, ptr %556, align 8, !tbaa !154
  %558 = fadd double %555, %557
  %559 = fmul double 5.000000e-01, %558
  %560 = getelementptr inbounds %struct.vector3d, ptr %12, i32 0, i32 1
  store double %559, ptr %560, align 8, !tbaa !154
  %561 = load ptr, ptr %5, align 8, !tbaa !5
  %562 = getelementptr inbounds %struct.particle, ptr %561, i32 0, i32 5
  %563 = load double, ptr %562, align 8, !tbaa !155
  %564 = getelementptr inbounds %struct.vector3d, ptr %10, i32 0, i32 2
  %565 = load double, ptr %564, align 8, !tbaa !143
  %566 = fadd double %563, %565
  %567 = fmul double 5.000000e-01, %566
  %568 = getelementptr inbounds %struct.vector3d, ptr %12, i32 0, i32 2
  store double %567, ptr %568, align 8, !tbaa !143
  %569 = load ptr, ptr %5, align 8, !tbaa !5
  %570 = getelementptr inbounds %struct.particle, ptr %569, i32 0, i32 6
  %571 = load double, ptr %570, align 8, !tbaa !156
  %572 = load double, ptr %13, align 8, !tbaa !9
  %573 = fadd double %571, %572
  %574 = fmul double 5.000000e-01, %573
  store double %574, ptr %15, align 8, !tbaa !9
  %575 = call noundef double @_ZN14spatial_region3chiER8vector3dS1_S1_Rd(ptr noundef nonnull align 8 dereferenceable(608) %40, ptr noundef nonnull align 8 dereferenceable(24) %8, ptr noundef nonnull align 8 dereferenceable(24) %9, ptr noundef nonnull align 8 dereferenceable(24) %12, ptr noundef nonnull align 8 dereferenceable(8) %15)
  %576 = load ptr, ptr %5, align 8, !tbaa !5
  %577 = getelementptr inbounds %struct.particle, ptr %576, i32 0, i32 9
  store double %575, ptr %577, align 8, !tbaa !157
  %578 = load ptr, ptr %5, align 8, !tbaa !5
  %579 = getelementptr inbounds %struct.particle, ptr %578, i32 0, i32 9
  %580 = load double, ptr %579, align 8, !tbaa !157
  %581 = load double, ptr %14, align 8, !tbaa !9
  %582 = fadd double %580, %581
  %583 = fmul double 5.000000e-01, %582
  store double %583, ptr %16, align 8, !tbaa !9
  %584 = call noundef double @_ZN14spatial_region8get_randEv(ptr noundef nonnull align 8 dereferenceable(608) %40)
  store double %584, ptr %17, align 8, !tbaa !9
  %585 = call noundef double @_ZN14spatial_region8get_randEv(ptr noundef nonnull align 8 dereferenceable(608) %40)
  %586 = call noundef double @_ZN14spatial_region1wERKdRdS1_(ptr noundef nonnull align 8 dereferenceable(608) %40, ptr noundef nonnull align 8 dereferenceable(8) %13, ptr noundef nonnull align 8 dereferenceable(8) %17, ptr noundef nonnull align 8 dereferenceable(8) %16)
  %587 = load double, ptr %13, align 8, !tbaa !9
  %588 = fmul double %586, %587
  %589 = getelementptr inbounds %class.spatial_region, ptr %40, i32 0, i32 6
  %590 = load double, ptr %589, align 8, !tbaa !158
  %591 = fmul double %588, %590
  %592 = fcmp oge double %585, %591
  %593 = xor i1 %592, true
  %594 = zext i1 %593 to i8
  store i8 %594, ptr %11, align 1, !tbaa !147
  br label %599

595:                                              ; preds = %520
  %596 = getelementptr inbounds %class.spatial_region, ptr %40, i32 0, i32 24
  %597 = load ptr, ptr %5, align 8, !tbaa !5
  %598 = getelementptr inbounds %class.spatial_region, ptr %40, i32 0, i32 6
  call void @_ZNKSt8functionIFvR8particleR8vector3dS3_RdEEclES1_S3_S3_S4_(ptr noundef nonnull align 8 dereferenceable(32) %596, ptr noundef nonnull align 8 dereferenceable(104) %597, ptr noundef nonnull align 8 dereferenceable(24) %8, ptr noundef nonnull align 8 dereferenceable(24) %9, ptr noundef nonnull align 8 dereferenceable(8) %598)
  store i8 0, ptr %11, align 1, !tbaa !147
  br label %599

599:                                              ; preds = %595, %523
  %600 = load i8, ptr %11, align 1, !tbaa !147, !range !149, !noundef !150
  %601 = trunc i8 %600 to i1
  br i1 %601, label %630, label %602

602:                                              ; preds = %599
  call void @llvm.lifetime.start.p0(i64 24, ptr %32) #8
  %603 = load ptr, ptr %5, align 8, !tbaa !5
  %604 = getelementptr inbounds %class.spatial_region, ptr %40, i32 0, i32 6
  %605 = load double, ptr %604, align 8, !tbaa !158
  call void @_ZN8particle16get_displacementEd(ptr dead_on_unwind writable sret(%struct.vector3d) align 8 %32, ptr noundef nonnull align 8 dereferenceable(104) %603, double noundef %605)
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %7, ptr align 8 %32, i64 24, i1 false), !tbaa.struct !142
  call void @llvm.lifetime.end.p0(i64 24, ptr %32) #8
  %606 = getelementptr inbounds %struct.vector3d, ptr %7, i32 0, i32 0
  %607 = load double, ptr %606, align 8, !tbaa !152
  %608 = getelementptr inbounds %class.spatial_region, ptr %40, i32 0, i32 3
  %609 = load double, ptr %608, align 8, !tbaa !159
  %610 = fdiv double %607, %609
  %611 = getelementptr inbounds %struct.vector3d, ptr %7, i32 0, i32 0
  store double %610, ptr %611, align 8, !tbaa !152
  %612 = getelementptr inbounds %struct.vector3d, ptr %7, i32 0, i32 1
  %613 = load double, ptr %612, align 8, !tbaa !154
  %614 = getelementptr inbounds %class.spatial_region, ptr %40, i32 0, i32 4
  %615 = load double, ptr %614, align 8, !tbaa !160
  %616 = fdiv double %613, %615
  %617 = getelementptr inbounds %struct.vector3d, ptr %7, i32 0, i32 1
  store double %616, ptr %617, align 8, !tbaa !154
  %618 = getelementptr inbounds %struct.vector3d, ptr %7, i32 0, i32 2
  %619 = load double, ptr %618, align 8, !tbaa !143
  %620 = getelementptr inbounds %class.spatial_region, ptr %40, i32 0, i32 5
  %621 = load double, ptr %620, align 8, !tbaa !161
  %622 = fdiv double %619, %621
  %623 = getelementptr inbounds %struct.vector3d, ptr %7, i32 0, i32 2
  store double %622, ptr %623, align 8, !tbaa !143
  %624 = load ptr, ptr %5, align 8, !tbaa !5
  call void @_ZN14spatial_region11jdepositionER8particleR8vector3d(ptr noundef nonnull align 8 dereferenceable(608) %40, ptr noundef nonnull align 8 dereferenceable(104) %624, ptr noundef nonnull align 8 dereferenceable(24) %7)
  %625 = load ptr, ptr %5, align 8, !tbaa !5
  store ptr %625, ptr %6, align 8, !tbaa !5
  %626 = load ptr, ptr %5, align 8, !tbaa !5
  %627 = getelementptr inbounds %struct.particle, ptr %626, i32 0, i32 11
  %628 = load ptr, ptr %627, align 8, !tbaa !162
  store ptr %628, ptr %5, align 8, !tbaa !5
  %629 = load ptr, ptr %6, align 8, !tbaa !5
  call void @_ZN14spatial_region5placeER8particleRiS2_S2_(ptr noundef nonnull align 8 dereferenceable(608) %40, ptr noundef nonnull align 8 dereferenceable(104) %629, ptr noundef nonnull align 4 dereferenceable(4) %24, ptr noundef nonnull align 4 dereferenceable(4) %25, ptr noundef nonnull align 4 dereferenceable(4) %26)
  br label %998

630:                                              ; preds = %599
  %631 = getelementptr inbounds %class.spatial_region, ptr %40, i32 0, i32 6
  %632 = load double, ptr %631, align 8, !tbaa !158
  %633 = fmul double 5.000000e-01, %632
  %634 = load double, ptr %13, align 8, !tbaa !9
  %635 = fdiv double %633, %634
  store double %635, ptr %16, align 8, !tbaa !9
  %636 = load ptr, ptr %5, align 8, !tbaa !5
  %637 = getelementptr inbounds %struct.particle, ptr %636, i32 0, i32 0
  %638 = load double, ptr %637, align 8, !tbaa !163
  %639 = load double, ptr %16, align 8, !tbaa !9
  %640 = getelementptr inbounds %struct.vector3d, ptr %10, i32 0, i32 0
  %641 = load double, ptr %640, align 8, !tbaa !152
  %642 = fmul double %639, %641
  %643 = getelementptr inbounds %class.spatial_region, ptr %40, i32 0, i32 3
  %644 = load double, ptr %643, align 8, !tbaa !159
  %645 = fdiv double %642, %644
  %646 = fsub double %638, %645
  %647 = getelementptr inbounds %struct.vector3d, ptr %7, i32 0, i32 0
  store double %646, ptr %647, align 8, !tbaa !152
  %648 = load ptr, ptr %5, align 8, !tbaa !5
  %649 = getelementptr inbounds %struct.particle, ptr %648, i32 0, i32 1
  %650 = load double, ptr %649, align 8, !tbaa !164
  %651 = load double, ptr %16, align 8, !tbaa !9
  %652 = getelementptr inbounds %struct.vector3d, ptr %10, i32 0, i32 1
  %653 = load double, ptr %652, align 8, !tbaa !154
  %654 = fmul double %651, %653
  %655 = getelementptr inbounds %class.spatial_region, ptr %40, i32 0, i32 4
  %656 = load double, ptr %655, align 8, !tbaa !160
  %657 = fdiv double %654, %656
  %658 = fsub double %650, %657
  %659 = getelementptr inbounds %struct.vector3d, ptr %7, i32 0, i32 1
  store double %658, ptr %659, align 8, !tbaa !154
  %660 = load ptr, ptr %5, align 8, !tbaa !5
  %661 = getelementptr inbounds %struct.particle, ptr %660, i32 0, i32 2
  %662 = load double, ptr %661, align 8, !tbaa !165
  %663 = load double, ptr %16, align 8, !tbaa !9
  %664 = getelementptr inbounds %struct.vector3d, ptr %10, i32 0, i32 2
  %665 = load double, ptr %664, align 8, !tbaa !143
  %666 = fmul double %663, %665
  %667 = getelementptr inbounds %class.spatial_region, ptr %40, i32 0, i32 5
  %668 = load double, ptr %667, align 8, !tbaa !161
  %669 = fdiv double %666, %668
  %670 = fsub double %662, %669
  %671 = getelementptr inbounds %struct.vector3d, ptr %7, i32 0, i32 2
  store double %670, ptr %671, align 8, !tbaa !143
  %672 = load double, ptr %17, align 8, !tbaa !9
  %673 = load double, ptr %13, align 8, !tbaa !9
  %674 = fmul double %672, %673
  %675 = load double, ptr %17, align 8, !tbaa !9
  %676 = load ptr, ptr %5, align 8, !tbaa !5
  %677 = getelementptr inbounds %struct.particle, ptr %676, i32 0, i32 9
  %678 = load double, ptr %677, align 8, !tbaa !157
  %679 = fmul double %675, %678
  %680 = load ptr, ptr %5, align 8, !tbaa !5
  %681 = getelementptr inbounds %struct.particle, ptr %680, i32 0, i32 7
  %682 = load double, ptr %681, align 8, !tbaa !166
  %683 = call double @llvm.fabs.f64(double %682)
  %684 = call noundef ptr @_ZN14spatial_region13bear_particleEdR8vector3dS1_ddd(ptr noundef nonnull align 8 dereferenceable(608) %40, double noundef 0.000000e+00, ptr noundef nonnull align 8 dereferenceable(24) %7, ptr noundef nonnull align 8 dereferenceable(24) %10, double noundef %674, double noundef %679, double noundef %683)
  store ptr %684, ptr %18, align 8, !tbaa !5
  %685 = load double, ptr %16, align 8, !tbaa !9
  %686 = fmul double 3.000000e+00, %685
  %687 = load double, ptr %13, align 8, !tbaa !9
  %688 = fmul double %686, %687
  %689 = load ptr, ptr %18, align 8, !tbaa !5
  %690 = getelementptr inbounds %struct.particle, ptr %689, i32 0, i32 6
  %691 = load double, ptr %690, align 8, !tbaa !156
  %692 = fdiv double %688, %691
  store double %692, ptr %16, align 8, !tbaa !9
  %693 = load double, ptr %16, align 8, !tbaa !9
  %694 = load ptr, ptr %18, align 8, !tbaa !5
  %695 = getelementptr inbounds %struct.particle, ptr %694, i32 0, i32 3
  %696 = load double, ptr %695, align 8, !tbaa !151
  %697 = fmul double %693, %696
  %698 = getelementptr inbounds %class.spatial_region, ptr %40, i32 0, i32 3
  %699 = load double, ptr %698, align 8, !tbaa !159
  %700 = fdiv double %697, %699
  %701 = load ptr, ptr %18, align 8, !tbaa !5
  %702 = getelementptr inbounds %struct.particle, ptr %701, i32 0, i32 0
  %703 = load double, ptr %702, align 8, !tbaa !163
  %704 = fadd double %703, %700
  store double %704, ptr %702, align 8, !tbaa !163
  %705 = load double, ptr %16, align 8, !tbaa !9
  %706 = load ptr, ptr %18, align 8, !tbaa !5
  %707 = getelementptr inbounds %struct.particle, ptr %706, i32 0, i32 4
  %708 = load double, ptr %707, align 8, !tbaa !153
  %709 = fmul double %705, %708
  %710 = getelementptr inbounds %class.spatial_region, ptr %40, i32 0, i32 4
  %711 = load double, ptr %710, align 8, !tbaa !160
  %712 = fdiv double %709, %711
  %713 = load ptr, ptr %18, align 8, !tbaa !5
  %714 = getelementptr inbounds %struct.particle, ptr %713, i32 0, i32 1
  %715 = load double, ptr %714, align 8, !tbaa !164
  %716 = fadd double %715, %712
  store double %716, ptr %714, align 8, !tbaa !164
  %717 = load double, ptr %16, align 8, !tbaa !9
  %718 = load ptr, ptr %18, align 8, !tbaa !5
  %719 = getelementptr inbounds %struct.particle, ptr %718, i32 0, i32 5
  %720 = load double, ptr %719, align 8, !tbaa !155
  %721 = fmul double %717, %720
  %722 = getelementptr inbounds %class.spatial_region, ptr %40, i32 0, i32 5
  %723 = load double, ptr %722, align 8, !tbaa !161
  %724 = fdiv double %721, %723
  %725 = load ptr, ptr %18, align 8, !tbaa !5
  %726 = getelementptr inbounds %struct.particle, ptr %725, i32 0, i32 2
  %727 = load double, ptr %726, align 8, !tbaa !165
  %728 = fadd double %727, %724
  store double %728, ptr %726, align 8, !tbaa !165
  %729 = load i8, ptr @dump_photons, align 1, !tbaa !147, !range !149, !noundef !150
  %730 = trunc i8 %729 to i1
  br i1 %730, label %731, label %733

731:                                              ; preds = %630
  %732 = load ptr, ptr %18, align 8, !tbaa !5
  call void @_ZN14spatial_region15delete_particleEP8particleb(ptr noundef nonnull align 8 dereferenceable(608) %40, ptr noundef %732, i1 noundef zeroext true)
  br label %735

733:                                              ; preds = %630
  %734 = load ptr, ptr %18, align 8, !tbaa !5
  call void @_ZN14spatial_region5placeER8particle(ptr noundef nonnull align 8 dereferenceable(608) %40, ptr noundef nonnull align 8 dereferenceable(104) %734)
  br label %735

735:                                              ; preds = %733, %731
  %736 = load double, ptr %17, align 8, !tbaa !9
  %737 = fsub double 1.000000e+00, %736
  %738 = load ptr, ptr %5, align 8, !tbaa !5
  %739 = getelementptr inbounds %struct.particle, ptr %738, i32 0, i32 9
  %740 = load double, ptr %739, align 8, !tbaa !157
  %741 = fmul double %737, %740
  %742 = load ptr, ptr %5, align 8, !tbaa !5
  %743 = getelementptr inbounds %struct.particle, ptr %742, i32 0, i32 9
  store double %741, ptr %743, align 8, !tbaa !157
  %744 = load double, ptr %17, align 8, !tbaa !9
  %745 = fsub double 1.000000e+00, %744
  %746 = load double, ptr %13, align 8, !tbaa !9
  %747 = fmul double %745, %746
  %748 = load ptr, ptr %5, align 8, !tbaa !5
  %749 = getelementptr inbounds %struct.particle, ptr %748, i32 0, i32 6
  store double %747, ptr %749, align 8, !tbaa !156
  %750 = load ptr, ptr %5, align 8, !tbaa !5
  %751 = getelementptr inbounds %struct.particle, ptr %750, i32 0, i32 6
  %752 = load double, ptr %751, align 8, !tbaa !156
  %753 = load ptr, ptr %5, align 8, !tbaa !5
  %754 = getelementptr inbounds %struct.particle, ptr %753, i32 0, i32 6
  %755 = load double, ptr %754, align 8, !tbaa !156
  %756 = call double @llvm.fmuladd.f64(double %752, double %755, double -1.000000e+00)
  %757 = getelementptr inbounds %struct.vector3d, ptr %10, i32 0, i32 0
  %758 = load double, ptr %757, align 8, !tbaa !152
  %759 = getelementptr inbounds %struct.vector3d, ptr %10, i32 0, i32 0
  %760 = load double, ptr %759, align 8, !tbaa !152
  %761 = getelementptr inbounds %struct.vector3d, ptr %10, i32 0, i32 1
  %762 = load double, ptr %761, align 8, !tbaa !154
  %763 = getelementptr inbounds %struct.vector3d, ptr %10, i32 0, i32 1
  %764 = load double, ptr %763, align 8, !tbaa !154
  %765 = fmul double %762, %764
  %766 = call double @llvm.fmuladd.f64(double %758, double %760, double %765)
  %767 = getelementptr inbounds %struct.vector3d, ptr %10, i32 0, i32 2
  %768 = load double, ptr %767, align 8, !tbaa !143
  %769 = getelementptr inbounds %struct.vector3d, ptr %10, i32 0, i32 2
  %770 = load double, ptr %769, align 8, !tbaa !143
  %771 = call double @llvm.fmuladd.f64(double %768, double %770, double %766)
  %772 = fdiv double %756, %771
  %773 = call double @sqrt(double noundef %772) #8
  store double %773, ptr %16, align 8, !tbaa !9
  %774 = getelementptr inbounds %struct.vector3d, ptr %10, i32 0, i32 0
  %775 = load double, ptr %774, align 8, !tbaa !152
  %776 = load double, ptr %16, align 8, !tbaa !9
  %777 = fmul double %775, %776
  %778 = load ptr, ptr %5, align 8, !tbaa !5
  %779 = getelementptr inbounds %struct.particle, ptr %778, i32 0, i32 3
  store double %777, ptr %779, align 8, !tbaa !151
  %780 = getelementptr inbounds %struct.vector3d, ptr %10, i32 0, i32 1
  %781 = load double, ptr %780, align 8, !tbaa !154
  %782 = load double, ptr %16, align 8, !tbaa !9
  %783 = fmul double %781, %782
  %784 = load ptr, ptr %5, align 8, !tbaa !5
  %785 = getelementptr inbounds %struct.particle, ptr %784, i32 0, i32 4
  store double %783, ptr %785, align 8, !tbaa !153
  %786 = getelementptr inbounds %struct.vector3d, ptr %10, i32 0, i32 2
  %787 = load double, ptr %786, align 8, !tbaa !143
  %788 = load double, ptr %16, align 8, !tbaa !9
  %789 = fmul double %787, %788
  %790 = load ptr, ptr %5, align 8, !tbaa !5
  %791 = getelementptr inbounds %struct.particle, ptr %790, i32 0, i32 5
  store double %789, ptr %791, align 8, !tbaa !155
  %792 = getelementptr inbounds %class.spatial_region, ptr %40, i32 0, i32 6
  %793 = load double, ptr %792, align 8, !tbaa !158
  %794 = fmul double 5.000000e-01, %793
  %795 = load double, ptr %13, align 8, !tbaa !9
  %796 = fdiv double %794, %795
  store double %796, ptr %16, align 8, !tbaa !9
  %797 = load double, ptr %16, align 8, !tbaa !9
  %798 = getelementptr inbounds %struct.vector3d, ptr %10, i32 0, i32 0
  %799 = load double, ptr %798, align 8, !tbaa !152
  %800 = fmul double %797, %799
  %801 = getelementptr inbounds %class.spatial_region, ptr %40, i32 0, i32 3
  %802 = load double, ptr %801, align 8, !tbaa !159
  %803 = fdiv double %800, %802
  %804 = load ptr, ptr %5, align 8, !tbaa !5
  %805 = getelementptr inbounds %struct.particle, ptr %804, i32 0, i32 0
  %806 = load double, ptr %805, align 8, !tbaa !163
  %807 = fsub double %806, %803
  store double %807, ptr %805, align 8, !tbaa !163
  %808 = load double, ptr %16, align 8, !tbaa !9
  %809 = getelementptr inbounds %struct.vector3d, ptr %10, i32 0, i32 1
  %810 = load double, ptr %809, align 8, !tbaa !154
  %811 = fmul double %808, %810
  %812 = getelementptr inbounds %class.spatial_region, ptr %40, i32 0, i32 4
  %813 = load double, ptr %812, align 8, !tbaa !160
  %814 = fdiv double %811, %813
  %815 = load ptr, ptr %5, align 8, !tbaa !5
  %816 = getelementptr inbounds %struct.particle, ptr %815, i32 0, i32 1
  %817 = load double, ptr %816, align 8, !tbaa !164
  %818 = fsub double %817, %814
  store double %818, ptr %816, align 8, !tbaa !164
  %819 = load double, ptr %16, align 8, !tbaa !9
  %820 = getelementptr inbounds %struct.vector3d, ptr %10, i32 0, i32 2
  %821 = load double, ptr %820, align 8, !tbaa !143
  %822 = fmul double %819, %821
  %823 = getelementptr inbounds %class.spatial_region, ptr %40, i32 0, i32 5
  %824 = load double, ptr %823, align 8, !tbaa !161
  %825 = fdiv double %822, %824
  %826 = load ptr, ptr %5, align 8, !tbaa !5
  %827 = getelementptr inbounds %struct.particle, ptr %826, i32 0, i32 2
  %828 = load double, ptr %827, align 8, !tbaa !165
  %829 = fsub double %828, %825
  store double %829, ptr %827, align 8, !tbaa !165
  %830 = load double, ptr %16, align 8, !tbaa !9
  %831 = load double, ptr %13, align 8, !tbaa !9
  %832 = fmul double %830, %831
  %833 = load ptr, ptr %5, align 8, !tbaa !5
  %834 = getelementptr inbounds %struct.particle, ptr %833, i32 0, i32 6
  %835 = load double, ptr %834, align 8, !tbaa !156
  %836 = fdiv double %832, %835
  store double %836, ptr %16, align 8, !tbaa !9
  %837 = load double, ptr %16, align 8, !tbaa !9
  %838 = load ptr, ptr %5, align 8, !tbaa !5
  %839 = getelementptr inbounds %struct.particle, ptr %838, i32 0, i32 3
  %840 = load double, ptr %839, align 8, !tbaa !151
  %841 = fmul double %837, %840
  %842 = getelementptr inbounds %class.spatial_region, ptr %40, i32 0, i32 3
  %843 = load double, ptr %842, align 8, !tbaa !159
  %844 = fdiv double %841, %843
  %845 = load ptr, ptr %5, align 8, !tbaa !5
  %846 = getelementptr inbounds %struct.particle, ptr %845, i32 0, i32 0
  %847 = load double, ptr %846, align 8, !tbaa !163
  %848 = fadd double %847, %844
  store double %848, ptr %846, align 8, !tbaa !163
  %849 = load double, ptr %16, align 8, !tbaa !9
  %850 = load ptr, ptr %5, align 8, !tbaa !5
  %851 = getelementptr inbounds %struct.particle, ptr %850, i32 0, i32 4
  %852 = load double, ptr %851, align 8, !tbaa !153
  %853 = fmul double %849, %852
  %854 = getelementptr inbounds %class.spatial_region, ptr %40, i32 0, i32 4
  %855 = load double, ptr %854, align 8, !tbaa !160
  %856 = fdiv double %853, %855
  %857 = load ptr, ptr %5, align 8, !tbaa !5
  %858 = getelementptr inbounds %struct.particle, ptr %857, i32 0, i32 1
  %859 = load double, ptr %858, align 8, !tbaa !164
  %860 = fadd double %859, %856
  store double %860, ptr %858, align 8, !tbaa !164
  %861 = load double, ptr %16, align 8, !tbaa !9
  %862 = load ptr, ptr %5, align 8, !tbaa !5
  %863 = getelementptr inbounds %struct.particle, ptr %862, i32 0, i32 5
  %864 = load double, ptr %863, align 8, !tbaa !155
  %865 = fmul double %861, %864
  %866 = getelementptr inbounds %class.spatial_region, ptr %40, i32 0, i32 5
  %867 = load double, ptr %866, align 8, !tbaa !161
  %868 = fdiv double %865, %867
  %869 = load ptr, ptr %5, align 8, !tbaa !5
  %870 = getelementptr inbounds %struct.particle, ptr %869, i32 0, i32 2
  %871 = load double, ptr %870, align 8, !tbaa !165
  %872 = fadd double %871, %868
  store double %872, ptr %870, align 8, !tbaa !165
  %873 = load ptr, ptr %5, align 8, !tbaa !5
  %874 = getelementptr inbounds %struct.particle, ptr %873, i32 0, i32 11
  %875 = load ptr, ptr %874, align 8, !tbaa !162
  store ptr %875, ptr %6, align 8, !tbaa !5
  %876 = load ptr, ptr %5, align 8, !tbaa !5
  %877 = getelementptr inbounds %struct.particle, ptr %876, i32 0, i32 0
  %878 = load double, ptr %877, align 8, !tbaa !163
  %879 = fptosi double %878 to i32
  %880 = load ptr, ptr %5, align 8, !tbaa !5
  %881 = getelementptr inbounds %struct.particle, ptr %880, i32 0, i32 1
  %882 = load double, ptr %881, align 8, !tbaa !164
  %883 = fptosi double %882 to i32
  %884 = load ptr, ptr %5, align 8, !tbaa !5
  %885 = getelementptr inbounds %struct.particle, ptr %884, i32 0, i32 2
  %886 = load double, ptr %885, align 8, !tbaa !165
  %887 = fptosi double %886 to i32
  %888 = call noundef zeroext i1 @_ZN14spatial_region9is_insideEiii(ptr noundef nonnull align 8 dereferenceable(608) %40, i32 noundef %879, i32 noundef %883, i32 noundef %887)
  br i1 %888, label %889, label %951

889:                                              ; preds = %735
  %890 = load ptr, ptr %5, align 8, !tbaa !5
  call void @_ZN14spatial_region5placeER8particleRiS2_S2_(ptr noundef nonnull align 8 dereferenceable(608) %40, ptr noundef nonnull align 8 dereferenceable(104) %890, ptr noundef nonnull align 4 dereferenceable(4) %24, ptr noundef nonnull align 4 dereferenceable(4) %25, ptr noundef nonnull align 4 dereferenceable(4) %26)
  %891 = load ptr, ptr %5, align 8, !tbaa !5
  %892 = getelementptr inbounds %struct.particle, ptr %891, i32 0, i32 0
  %893 = load double, ptr %892, align 8, !tbaa !163
  %894 = fptosi double %893 to i32
  %895 = getelementptr inbounds %struct.int_vector3d, ptr %19, i32 0, i32 0
  store i32 %894, ptr %895, align 4, !tbaa !169
  %896 = load ptr, ptr %5, align 8, !tbaa !5
  %897 = getelementptr inbounds %struct.particle, ptr %896, i32 0, i32 1
  %898 = load double, ptr %897, align 8, !tbaa !164
  %899 = fptosi double %898 to i32
  %900 = getelementptr inbounds %struct.int_vector3d, ptr %19, i32 0, i32 1
  store i32 %899, ptr %900, align 4, !tbaa !171
  %901 = load ptr, ptr %5, align 8, !tbaa !5
  %902 = getelementptr inbounds %struct.particle, ptr %901, i32 0, i32 2
  %903 = load double, ptr %902, align 8, !tbaa !165
  %904 = fptosi double %903 to i32
  %905 = getelementptr inbounds %struct.int_vector3d, ptr %19, i32 0, i32 2
  store i32 %904, ptr %905, align 4, !tbaa !172
  call void @llvm.lifetime.start.p0(i64 24, ptr %33) #8
  %906 = load ptr, ptr %5, align 8, !tbaa !5
  %907 = getelementptr inbounds %struct.particle, ptr %906, i32 0, i32 0
  %908 = load ptr, ptr %5, align 8, !tbaa !5
  %909 = getelementptr inbounds %struct.particle, ptr %908, i32 0, i32 1
  %910 = load ptr, ptr %5, align 8, !tbaa !5
  %911 = getelementptr inbounds %struct.particle, ptr %910, i32 0, i32 2
  call void @_ZN14spatial_region13e_to_particleERdS0_S0_(ptr dead_on_unwind writable sret(%struct.vector3d) align 8 %33, ptr noundef nonnull align 8 dereferenceable(608) %40, ptr noundef nonnull align 8 dereferenceable(8) %907, ptr noundef nonnull align 8 dereferenceable(8) %909, ptr noundef nonnull align 8 dereferenceable(8) %911)
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %8, ptr align 8 %33, i64 24, i1 false), !tbaa.struct !142
  call void @llvm.lifetime.end.p0(i64 24, ptr %33) #8
  call void @llvm.lifetime.start.p0(i64 24, ptr %34) #8
  %912 = load ptr, ptr %5, align 8, !tbaa !5
  %913 = getelementptr inbounds %struct.particle, ptr %912, i32 0, i32 0
  %914 = load ptr, ptr %5, align 8, !tbaa !5
  %915 = getelementptr inbounds %struct.particle, ptr %914, i32 0, i32 1
  %916 = load ptr, ptr %5, align 8, !tbaa !5
  %917 = getelementptr inbounds %struct.particle, ptr %916, i32 0, i32 2
  call void @_ZN14spatial_region13b_to_particleERdS0_S0_(ptr dead_on_unwind writable sret(%struct.vector3d) align 8 %34, ptr noundef nonnull align 8 dereferenceable(608) %40, ptr noundef nonnull align 8 dereferenceable(8) %913, ptr noundef nonnull align 8 dereferenceable(8) %915, ptr noundef nonnull align 8 dereferenceable(8) %917)
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %9, ptr align 8 %34, i64 24, i1 false), !tbaa.struct !142
  call void @llvm.lifetime.end.p0(i64 24, ptr %34) #8
  %918 = load double, ptr %4, align 8, !tbaa !9
  %919 = getelementptr inbounds %struct.vector3d, ptr %9, i32 0, i32 2
  %920 = load double, ptr %919, align 8, !tbaa !143
  %921 = fadd double %920, %918
  store double %921, ptr %919, align 8, !tbaa !143
  %922 = getelementptr inbounds %class.spatial_region, ptr %40, i32 0, i32 24
  %923 = load ptr, ptr %5, align 8, !tbaa !5
  %924 = getelementptr inbounds %class.spatial_region, ptr %40, i32 0, i32 6
  call void @_ZNKSt8functionIFvR8particleR8vector3dS3_RdEEclES1_S3_S3_S4_(ptr noundef nonnull align 8 dereferenceable(32) %922, ptr noundef nonnull align 8 dereferenceable(104) %923, ptr noundef nonnull align 8 dereferenceable(24) %8, ptr noundef nonnull align 8 dereferenceable(24) %9, ptr noundef nonnull align 8 dereferenceable(8) %924)
  call void @llvm.lifetime.start.p0(i64 24, ptr %35) #8
  %925 = load ptr, ptr %5, align 8, !tbaa !5
  %926 = getelementptr inbounds %class.spatial_region, ptr %40, i32 0, i32 6
  %927 = load double, ptr %926, align 8, !tbaa !158
  call void @_ZN8particle16get_displacementEd(ptr dead_on_unwind writable sret(%struct.vector3d) align 8 %35, ptr noundef nonnull align 8 dereferenceable(104) %925, double noundef %927)
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %7, ptr align 8 %35, i64 24, i1 false), !tbaa.struct !142
  call void @llvm.lifetime.end.p0(i64 24, ptr %35) #8
  %928 = getelementptr inbounds %struct.vector3d, ptr %7, i32 0, i32 0
  %929 = load double, ptr %928, align 8, !tbaa !152
  %930 = getelementptr inbounds %class.spatial_region, ptr %40, i32 0, i32 3
  %931 = load double, ptr %930, align 8, !tbaa !159
  %932 = fdiv double %929, %931
  %933 = getelementptr inbounds %struct.vector3d, ptr %7, i32 0, i32 0
  store double %932, ptr %933, align 8, !tbaa !152
  %934 = getelementptr inbounds %struct.vector3d, ptr %7, i32 0, i32 1
  %935 = load double, ptr %934, align 8, !tbaa !154
  %936 = getelementptr inbounds %class.spatial_region, ptr %40, i32 0, i32 4
  %937 = load double, ptr %936, align 8, !tbaa !160
  %938 = fdiv double %935, %937
  %939 = getelementptr inbounds %struct.vector3d, ptr %7, i32 0, i32 1
  store double %938, ptr %939, align 8, !tbaa !154
  %940 = getelementptr inbounds %struct.vector3d, ptr %7, i32 0, i32 2
  %941 = load double, ptr %940, align 8, !tbaa !143
  %942 = getelementptr inbounds %class.spatial_region, ptr %40, i32 0, i32 5
  %943 = load double, ptr %942, align 8, !tbaa !161
  %944 = fdiv double %941, %943
  %945 = getelementptr inbounds %struct.vector3d, ptr %7, i32 0, i32 2
  store double %944, ptr %945, align 8, !tbaa !143
  %946 = load ptr, ptr %5, align 8, !tbaa !5
  call void @_ZN14spatial_region11jdepositionER8particleR8vector3d(ptr noundef nonnull align 8 dereferenceable(608) %40, ptr noundef nonnull align 8 dereferenceable(104) %946, ptr noundef nonnull align 8 dereferenceable(24) %7)
  %947 = load ptr, ptr %5, align 8, !tbaa !5
  %948 = getelementptr inbounds %struct.int_vector3d, ptr %19, i32 0, i32 0
  %949 = getelementptr inbounds %struct.int_vector3d, ptr %19, i32 0, i32 1
  %950 = getelementptr inbounds %struct.int_vector3d, ptr %19, i32 0, i32 2
  call void @_ZN14spatial_region5placeER8particleRiS2_S2_(ptr noundef nonnull align 8 dereferenceable(608) %40, ptr noundef nonnull align 8 dereferenceable(104) %947, ptr noundef nonnull align 4 dereferenceable(4) %948, ptr noundef nonnull align 4 dereferenceable(4) %949, ptr noundef nonnull align 4 dereferenceable(4) %950)
  br label %996

951:                                              ; preds = %735
  %952 = load ptr, ptr %5, align 8, !tbaa !5
  %953 = getelementptr inbounds %struct.particle, ptr %952, i32 0, i32 12
  %954 = load ptr, ptr %953, align 8, !tbaa !167
  %955 = icmp ne ptr %954, null
  br i1 %955, label %956, label %964

956:                                              ; preds = %951
  %957 = load ptr, ptr %5, align 8, !tbaa !5
  %958 = getelementptr inbounds %struct.particle, ptr %957, i32 0, i32 11
  %959 = load ptr, ptr %958, align 8, !tbaa !162
  %960 = load ptr, ptr %5, align 8, !tbaa !5
  %961 = getelementptr inbounds %struct.particle, ptr %960, i32 0, i32 12
  %962 = load ptr, ptr %961, align 8, !tbaa !167
  %963 = getelementptr inbounds %struct.particle, ptr %962, i32 0, i32 11
  store ptr %959, ptr %963, align 8, !tbaa !162
  br label %981

964:                                              ; preds = %951
  %965 = load ptr, ptr %5, align 8, !tbaa !5
  %966 = getelementptr inbounds %struct.particle, ptr %965, i32 0, i32 11
  %967 = load ptr, ptr %966, align 8, !tbaa !162
  %968 = getelementptr inbounds %class.spatial_region, ptr %40, i32 0, i32 50
  %969 = load i32, ptr %24, align 4, !tbaa !11
  %970 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5cellpEixEi(ptr noundef nonnull align 8 dereferenceable(40) %968, i32 noundef %969)
  %971 = load ptr, ptr %970, align 8, !tbaa !5
  %972 = load i32, ptr %25, align 4, !tbaa !11
  %973 = sext i32 %972 to i64
  %974 = getelementptr inbounds ptr, ptr %971, i64 %973
  %975 = load ptr, ptr %974, align 8, !tbaa !5
  %976 = load i32, ptr %26, align 4, !tbaa !11
  %977 = sext i32 %976 to i64
  %978 = getelementptr inbounds %struct.cellp, ptr %975, i64 %977
  %979 = getelementptr inbounds %struct.cellp, ptr %978, i32 0, i32 0
  %980 = getelementptr inbounds %class.plist, ptr %979, i32 0, i32 0
  store ptr %967, ptr %980, align 8, !tbaa !168
  br label %981

981:                                              ; preds = %964, %956
  %982 = load ptr, ptr %5, align 8, !tbaa !5
  %983 = getelementptr inbounds %struct.particle, ptr %982, i32 0, i32 11
  %984 = load ptr, ptr %983, align 8, !tbaa !162
  %985 = icmp ne ptr %984, null
  br i1 %985, label %986, label %994

986:                                              ; preds = %981
  %987 = load ptr, ptr %5, align 8, !tbaa !5
  %988 = getelementptr inbounds %struct.particle, ptr %987, i32 0, i32 12
  %989 = load ptr, ptr %988, align 8, !tbaa !167
  %990 = load ptr, ptr %5, align 8, !tbaa !5
  %991 = getelementptr inbounds %struct.particle, ptr %990, i32 0, i32 11
  %992 = load ptr, ptr %991, align 8, !tbaa !162
  %993 = getelementptr inbounds %struct.particle, ptr %992, i32 0, i32 12
  store ptr %989, ptr %993, align 8, !tbaa !167
  br label %994

994:                                              ; preds = %986, %981
  %995 = load ptr, ptr %5, align 8, !tbaa !5
  call void @_ZN14spatial_region15delete_particleEP8particleb(ptr noundef nonnull align 8 dereferenceable(608) %40, ptr noundef %995, i1 noundef zeroext false)
  br label %996

996:                                              ; preds = %994, %889
  %997 = load ptr, ptr %6, align 8, !tbaa !5
  store ptr %997, ptr %5, align 8, !tbaa !5
  br label %998

998:                                              ; preds = %996, %602
  br label %1030

999:                                              ; preds = %514
  %1000 = getelementptr inbounds %class.spatial_region, ptr %40, i32 0, i32 24
  %1001 = load ptr, ptr %5, align 8, !tbaa !5
  %1002 = getelementptr inbounds %class.spatial_region, ptr %40, i32 0, i32 6
  call void @_ZNKSt8functionIFvR8particleR8vector3dS3_RdEEclES1_S3_S3_S4_(ptr noundef nonnull align 8 dereferenceable(32) %1000, ptr noundef nonnull align 8 dereferenceable(104) %1001, ptr noundef nonnull align 8 dereferenceable(24) %8, ptr noundef nonnull align 8 dereferenceable(24) %9, ptr noundef nonnull align 8 dereferenceable(8) %1002)
  call void @llvm.lifetime.start.p0(i64 24, ptr %36) #8
  %1003 = load ptr, ptr %5, align 8, !tbaa !5
  %1004 = getelementptr inbounds %class.spatial_region, ptr %40, i32 0, i32 6
  %1005 = load double, ptr %1004, align 8, !tbaa !158
  call void @_ZN8particle16get_displacementEd(ptr dead_on_unwind writable sret(%struct.vector3d) align 8 %36, ptr noundef nonnull align 8 dereferenceable(104) %1003, double noundef %1005)
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %7, ptr align 8 %36, i64 24, i1 false), !tbaa.struct !142
  call void @llvm.lifetime.end.p0(i64 24, ptr %36) #8
  %1006 = getelementptr inbounds %struct.vector3d, ptr %7, i32 0, i32 0
  %1007 = load double, ptr %1006, align 8, !tbaa !152
  %1008 = getelementptr inbounds %class.spatial_region, ptr %40, i32 0, i32 3
  %1009 = load double, ptr %1008, align 8, !tbaa !159
  %1010 = fdiv double %1007, %1009
  %1011 = getelementptr inbounds %struct.vector3d, ptr %7, i32 0, i32 0
  store double %1010, ptr %1011, align 8, !tbaa !152
  %1012 = getelementptr inbounds %struct.vector3d, ptr %7, i32 0, i32 1
  %1013 = load double, ptr %1012, align 8, !tbaa !154
  %1014 = getelementptr inbounds %class.spatial_region, ptr %40, i32 0, i32 4
  %1015 = load double, ptr %1014, align 8, !tbaa !160
  %1016 = fdiv double %1013, %1015
  %1017 = getelementptr inbounds %struct.vector3d, ptr %7, i32 0, i32 1
  store double %1016, ptr %1017, align 8, !tbaa !154
  %1018 = getelementptr inbounds %struct.vector3d, ptr %7, i32 0, i32 2
  %1019 = load double, ptr %1018, align 8, !tbaa !143
  %1020 = getelementptr inbounds %class.spatial_region, ptr %40, i32 0, i32 5
  %1021 = load double, ptr %1020, align 8, !tbaa !161
  %1022 = fdiv double %1019, %1021
  %1023 = getelementptr inbounds %struct.vector3d, ptr %7, i32 0, i32 2
  store double %1022, ptr %1023, align 8, !tbaa !143
  %1024 = load ptr, ptr %5, align 8, !tbaa !5
  call void @_ZN14spatial_region11jdepositionER8particleR8vector3d(ptr noundef nonnull align 8 dereferenceable(608) %40, ptr noundef nonnull align 8 dereferenceable(104) %1024, ptr noundef nonnull align 8 dereferenceable(24) %7)
  %1025 = load ptr, ptr %5, align 8, !tbaa !5
  store ptr %1025, ptr %6, align 8, !tbaa !5
  %1026 = load ptr, ptr %5, align 8, !tbaa !5
  %1027 = getelementptr inbounds %struct.particle, ptr %1026, i32 0, i32 11
  %1028 = load ptr, ptr %1027, align 8, !tbaa !162
  store ptr %1028, ptr %5, align 8, !tbaa !5
  %1029 = load ptr, ptr %6, align 8, !tbaa !5
  call void @_ZN14spatial_region5placeER8particleRiS2_S2_(ptr noundef nonnull align 8 dereferenceable(608) %40, ptr noundef nonnull align 8 dereferenceable(104) %1029, ptr noundef nonnull align 4 dereferenceable(4) %24, ptr noundef nonnull align 4 dereferenceable(4) %25, ptr noundef nonnull align 4 dereferenceable(4) %26)
  br label %1030

1030:                                             ; preds = %999, %998
  br label %1031

1031:                                             ; preds = %1030, %513
  br label %145, !llvm.loop !173

1032:                                             ; preds = %145
  br label %1033

1033:                                             ; preds = %1032
  %1034 = load i32, ptr %26, align 4, !tbaa !11
  %1035 = add nsw i32 %1034, 1
  store i32 %1035, ptr %26, align 4, !tbaa !11
  br label %124, !llvm.loop !174

1036:                                             ; preds = %129
  br label %1037

1037:                                             ; preds = %1036
  %1038 = load i32, ptr %25, align 4, !tbaa !11
  %1039 = add nsw i32 %1038, 1
  store i32 %1039, ptr %25, align 4, !tbaa !11
  br label %117, !llvm.loop !175

1040:                                             ; preds = %122
  br label %1041

1041:                                             ; preds = %1040
  %1042 = load i32, ptr %24, align 4, !tbaa !11
  %1043 = add nsw i32 %1042, 1
  store i32 %1043, ptr %24, align 4, !tbaa !11
  br label %110, !llvm.loop !176

1044:                                             ; preds = %115
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #8
  store i32 0, ptr %37, align 4, !tbaa !11
  br label %1045

1045:                                             ; preds = %1101, %1044
  %1046 = load i32, ptr %37, align 4, !tbaa !11
  %1047 = getelementptr inbounds %class.spatial_region, ptr %40, i32 0, i32 0
  %1048 = load i32, ptr %1047, align 8, !tbaa !13
  %1049 = icmp slt i32 %1046, %1048
  br i1 %1049, label %1051, label %1050

1050:                                             ; preds = %1045
  store i32 22, ptr %21, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #8
  br label %1104

1051:                                             ; preds = %1045
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #8
  store i32 0, ptr %38, align 4, !tbaa !11
  br label %1052

1052:                                             ; preds = %1097, %1051
  %1053 = load i32, ptr %38, align 4, !tbaa !11
  %1054 = getelementptr inbounds %class.spatial_region, ptr %40, i32 0, i32 1
  %1055 = load i32, ptr %1054, align 4, !tbaa !129
  %1056 = icmp slt i32 %1053, %1055
  br i1 %1056, label %1058, label %1057

1057:                                             ; preds = %1052
  store i32 25, ptr %21, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #8
  br label %1100

1058:                                             ; preds = %1052
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #8
  store i32 0, ptr %39, align 4, !tbaa !11
  br label %1059

1059:                                             ; preds = %1093, %1058
  %1060 = load i32, ptr %39, align 4, !tbaa !11
  %1061 = getelementptr inbounds %class.spatial_region, ptr %40, i32 0, i32 2
  %1062 = load i32, ptr %1061, align 8, !tbaa !130
  %1063 = icmp slt i32 %1060, %1062
  br i1 %1063, label %1065, label %1064

1064:                                             ; preds = %1059
  store i32 28, ptr %21, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #8
  br label %1096

1065:                                             ; preds = %1059
  %1066 = getelementptr inbounds %class.spatial_region, ptr %40, i32 0, i32 50
  %1067 = load i32, ptr %37, align 4, !tbaa !11
  %1068 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5cellpEixEi(ptr noundef nonnull align 8 dereferenceable(40) %1066, i32 noundef %1067)
  %1069 = load ptr, ptr %1068, align 8, !tbaa !5
  %1070 = load i32, ptr %38, align 4, !tbaa !11
  %1071 = sext i32 %1070 to i64
  %1072 = getelementptr inbounds ptr, ptr %1069, i64 %1071
  %1073 = load ptr, ptr %1072, align 8, !tbaa !5
  %1074 = load i32, ptr %39, align 4, !tbaa !11
  %1075 = sext i32 %1074 to i64
  %1076 = getelementptr inbounds %struct.cellp, ptr %1073, i64 %1075
  %1077 = getelementptr inbounds %struct.cellp, ptr %1076, i32 0, i32 0
  %1078 = getelementptr inbounds %class.plist, ptr %1077, i32 0, i32 0
  %1079 = load ptr, ptr %1078, align 8, !tbaa !168
  %1080 = getelementptr inbounds %class.spatial_region, ptr %40, i32 0, i32 50
  %1081 = load i32, ptr %37, align 4, !tbaa !11
  %1082 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5cellpEixEi(ptr noundef nonnull align 8 dereferenceable(40) %1080, i32 noundef %1081)
  %1083 = load ptr, ptr %1082, align 8, !tbaa !5
  %1084 = load i32, ptr %38, align 4, !tbaa !11
  %1085 = sext i32 %1084 to i64
  %1086 = getelementptr inbounds ptr, ptr %1083, i64 %1085
  %1087 = load ptr, ptr %1086, align 8, !tbaa !5
  %1088 = load i32, ptr %39, align 4, !tbaa !11
  %1089 = sext i32 %1088 to i64
  %1090 = getelementptr inbounds %struct.cellp, ptr %1087, i64 %1089
  %1091 = getelementptr inbounds %struct.cellp, ptr %1090, i32 0, i32 0
  %1092 = getelementptr inbounds %class.plist, ptr %1091, i32 0, i32 1
  store ptr %1079, ptr %1092, align 8, !tbaa !139
  br label %1093

1093:                                             ; preds = %1065
  %1094 = load i32, ptr %39, align 4, !tbaa !11
  %1095 = add nsw i32 %1094, 1
  store i32 %1095, ptr %39, align 4, !tbaa !11
  br label %1059, !llvm.loop !177

1096:                                             ; preds = %1064
  br label %1097

1097:                                             ; preds = %1096
  %1098 = load i32, ptr %38, align 4, !tbaa !11
  %1099 = add nsw i32 %1098, 1
  store i32 %1099, ptr %38, align 4, !tbaa !11
  br label %1052, !llvm.loop !178

1100:                                             ; preds = %1057
  br label %1101

1101:                                             ; preds = %1100
  %1102 = load i32, ptr %37, align 4, !tbaa !11
  %1103 = add nsw i32 %1102, 1
  store i32 %1103, ptr %37, align 4, !tbaa !11
  br label %1045, !llvm.loop !179

1104:                                             ; preds = %1050
  call void @llvm.lifetime.end.p0(i64 12, ptr %19) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr %12) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %11) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr %10) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr %9) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr %8) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr %7) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #8
  ret void
}

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

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

declare void @_ZN14spatial_region10p_boundaryEv(ptr noundef nonnull align 8 dereferenceable(608)) #3

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5celljEixEi(ptr noundef nonnull align 8 dereferenceable(40), i32 noundef) #4 align 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) #4 align 2

declare void @_ZN14spatial_region13e_to_particleERdS0_S0_(ptr dead_on_unwind writable sret(%struct.vector3d) align 8, ptr noundef nonnull align 8 dereferenceable(608), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) #3

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

declare void @_ZN14spatial_region13b_to_particleERdS0_S0_(ptr dead_on_unwind writable sret(%struct.vector3d) align 8, ptr noundef nonnull align 8 dereferenceable(608), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) #3

declare noundef double @_ZN14spatial_region3chiER8vector3dS1_S1_Rd(ptr noundef nonnull align 8 dereferenceable(608), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(8)) #3

declare noundef double @_ZN14spatial_region8get_randEv(ptr noundef nonnull align 8 dereferenceable(608)) #3

declare noundef double @_ZN14spatial_region7tilde_wERdS0_S0_(ptr noundef nonnull align 8 dereferenceable(608), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) #3

declare void @_ZN8particle16get_displacementEd(ptr dead_on_unwind writable sret(%struct.vector3d) align 8, ptr noundef nonnull align 8 dereferenceable(104), double noundef) #3

declare void @_ZN8particle18coordinate_advanceER8vector3d(ptr noundef nonnull align 8 dereferenceable(104), ptr noundef nonnull align 8 dereferenceable(24)) #3

declare void @_ZN14spatial_region5placeER8particleRiS2_S2_(ptr noundef nonnull align 8 dereferenceable(608), ptr noundef nonnull align 8 dereferenceable(104), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4)) #3

declare noundef ptr @_ZN14spatial_region13bear_particleEdR8vector3dS1_ddd(ptr noundef nonnull align 8 dereferenceable(608), double noundef, ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24), double noundef, double noundef, double noundef) #3

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

declare void @_ZN14spatial_region11jdepositionER8particleR8vector3d(ptr noundef nonnull align 8 dereferenceable(608), ptr noundef nonnull align 8 dereferenceable(104), ptr noundef nonnull align 8 dereferenceable(24)) #3

declare void @_ZN14spatial_region5placeER8particle(ptr noundef nonnull align 8 dereferenceable(608), ptr noundef nonnull align 8 dereferenceable(104)) #3

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

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

declare noundef double @_ZN14spatial_region1wERKdRdS1_(ptr noundef nonnull align 8 dereferenceable(608), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) #3

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

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

declare noundef zeroext i1 @_ZN14spatial_region9is_insideEiii(ptr noundef nonnull align 8 dereferenceable(608), i32 noundef, i32 noundef, i32 noundef) #3

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

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

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


; 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.vector3d = type { double, double, double }
%struct.int_vector3d = type { i32, i32, i32 }
%struct.cellj = type { double, double, double }
%struct.cellp = type { %class.plist }
%class.plist = type { ptr, ptr }

@qed_enabled = external local_unnamed_addr global i8, align 1
@dump_photons = external local_unnamed_addr global i8, align 1

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN14spatial_region8padvanceEd(ptr noundef nonnull align 8 dereferenceable(608) %0, double noundef %1) local_unnamed_addr #1 align 2 {
  %3 = alloca %struct.vector3d, align 16
  %4 = alloca %struct.vector3d, align 8
  %5 = alloca %struct.vector3d, align 8
  %6 = alloca %struct.vector3d, align 16
  %7 = alloca %struct.vector3d, align 16
  %8 = alloca double, align 8
  %9 = alloca double, align 8
  %10 = alloca double, align 8
  %11 = alloca double, align 8
  %12 = alloca %struct.int_vector3d, align 8
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca %struct.vector3d, align 8
  %17 = alloca %struct.vector3d, align 8
  %18 = alloca %struct.vector3d, align 8
  %19 = alloca %struct.vector3d, align 8
  %20 = alloca %struct.vector3d, align 8
  %21 = alloca %struct.vector3d, align 8
  %22 = alloca %struct.vector3d, align 8
  %23 = alloca %struct.vector3d, align 8
  %24 = alloca %struct.vector3d, align 8
  %25 = alloca %struct.vector3d, align 8
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %3) #9
  call void @_ZN8vector3dC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %3)
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %4) #9
  call void @_ZN8vector3dC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %4)
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %5) #9
  call void @_ZN8vector3dC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %5)
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %6) #9
  call void @_ZN8vector3dC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %6)
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %7) #9
  call void @_ZN8vector3dC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %7)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %8) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %9) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %10) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %11) #9
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %12) #9
  call void @_ZN12int_vector3dC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %12)
  call void @_ZN14spatial_region10p_boundaryEv(ptr noundef nonnull align 8 dereferenceable(608) %0)
  %26 = load i32, ptr %0, align 8, !tbaa !5
  %27 = icmp sgt i32 %26, 0
  br i1 %27, label %.preheader213.lr.ph, label %._crit_edge219.thread271

._crit_edge219.thread271:                         ; preds = %2
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %13) #9
  br label %._crit_edge233.thread

.preheader213.lr.ph:                              ; preds = %2
  %28 = getelementptr inbounds i8, ptr %0, i64 4
  %29 = getelementptr inbounds i8, ptr %0, i64 8
  %30 = getelementptr inbounds i8, ptr %0, i64 440
  %31 = load i32, ptr %28, align 4, !tbaa !126
  %32 = icmp sgt i32 %31, 0
  br i1 %32, label %.preheader213, label %._crit_edge219.thread

._crit_edge219.thread:                            ; preds = %.preheader213.lr.ph
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %13) #9
  store i32 0, ptr %13, align 4, !tbaa !127
  br label %.lr.ph232

.preheader213:                                    ; preds = %.preheader213.lr.ph, %._crit_edge216
  %33 = phi i32 [ %61, %._crit_edge216 ], [ %26, %.preheader213.lr.ph ]
  %34 = phi i32 [ %62, %._crit_edge216 ], [ %31, %.preheader213.lr.ph ]
  %35 = phi i32 [ %63, %._crit_edge216 ], [ %31, %.preheader213.lr.ph ]
  %.0194217 = phi i32 [ %64, %._crit_edge216 ], [ 0, %.preheader213.lr.ph ]
  %36 = icmp sgt i32 %35, 0
  %37 = load i32, ptr %29, align 8
  %38 = icmp sgt i32 %37, 0
  %or.cond = select i1 %36, i1 %38, i1 false
  br i1 %or.cond, label %.preheader212, label %._crit_edge216

._crit_edge219:                                   ; preds = %._crit_edge216
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %13) #9
  store i32 0, ptr %13, align 4, !tbaa !127
  %39 = icmp sgt i32 %61, 0
  br i1 %39, label %.lr.ph232, label %._crit_edge233.thread

.lr.ph232:                                        ; preds = %._crit_edge219.thread, %._crit_edge219
  %40 = phi i32 [ %26, %._crit_edge219.thread ], [ %61, %._crit_edge219 ]
  %41 = getelementptr inbounds i8, ptr %0, i64 4
  %42 = getelementptr inbounds i8, ptr %0, i64 8
  %43 = getelementptr inbounds i8, ptr %0, i64 520
  %44 = getelementptr inbounds i8, ptr %5, i64 16
  %45 = getelementptr inbounds i8, ptr %0, i64 144
  %46 = getelementptr inbounds i8, ptr %0, i64 40
  %47 = getelementptr inbounds i8, ptr %0, i64 16
  %48 = getelementptr inbounds i8, ptr %0, i64 24
  %49 = getelementptr inbounds i8, ptr %3, i64 16
  %50 = getelementptr inbounds i8, ptr %0, i64 32
  %51 = getelementptr inbounds i8, ptr %6, i64 8
  %52 = getelementptr inbounds i8, ptr %6, i64 16
  %53 = getelementptr inbounds i8, ptr %7, i64 16
  %54 = getelementptr inbounds i8, ptr %12, i64 4
  %55 = getelementptr inbounds i8, ptr %12, i64 8
  %56 = load i32, ptr %41, align 4, !tbaa !126
  %57 = icmp sgt i32 %56, 0
  br i1 %57, label %.lr.ph232.split, label %._crit_edge233

.preheader212:                                    ; preds = %.preheader213, %._crit_edge
  %58 = phi i32 [ %66, %._crit_edge ], [ %34, %.preheader213 ]
  %59 = phi i32 [ %67, %._crit_edge ], [ %37, %.preheader213 ]
  %indvars.iv250 = phi i64 [ %indvars.iv.next251, %._crit_edge ], [ 0, %.preheader213 ]
  %60 = icmp sgt i32 %59, 0
  br i1 %60, label %.lr.ph, label %._crit_edge

._crit_edge216.loopexit:                          ; preds = %._crit_edge
  %.pre260 = load i32, ptr %0, align 8, !tbaa !5
  br label %._crit_edge216

._crit_edge216:                                   ; preds = %._crit_edge216.loopexit, %.preheader213
  %61 = phi i32 [ %.pre260, %._crit_edge216.loopexit ], [ %33, %.preheader213 ]
  %62 = phi i32 [ %66, %._crit_edge216.loopexit ], [ %34, %.preheader213 ]
  %63 = phi i32 [ %66, %._crit_edge216.loopexit ], [ %35, %.preheader213 ]
  %64 = add nuw nsw i32 %.0194217, 1
  %65 = icmp slt i32 %64, %61
  br i1 %65, label %.preheader213, label %._crit_edge219, !llvm.loop !128

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

._crit_edge:                                      ; preds = %._crit_edge.loopexit, %.preheader212
  %66 = phi i32 [ %.pre, %._crit_edge.loopexit ], [ %58, %.preheader212 ]
  %67 = phi i32 [ %85, %._crit_edge.loopexit ], [ %59, %.preheader212 ]
  %indvars.iv.next251 = add nuw nsw i64 %indvars.iv250, 1
  %68 = sext i32 %66 to i64
  %69 = icmp slt i64 %indvars.iv.next251, %68
  br i1 %69, label %.preheader212, label %._crit_edge216.loopexit, !llvm.loop !131

.lr.ph:                                           ; preds = %.preheader212, %.lr.ph
  %indvars.iv = phi i64 [ %indvars.iv.next, %.lr.ph ], [ 0, %.preheader212 ]
  %70 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5celljEixEi(ptr noundef nonnull align 8 dereferenceable(40) %30, i32 noundef %.0194217)
  %71 = load ptr, ptr %70, align 8, !tbaa !132
  %72 = getelementptr inbounds ptr, ptr %71, i64 %indvars.iv250
  %73 = load ptr, ptr %72, align 8, !tbaa !132
  %74 = getelementptr inbounds %struct.cellj, ptr %73, i64 %indvars.iv
  store double 0.000000e+00, ptr %74, align 8, !tbaa !133
  %75 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5celljEixEi(ptr noundef nonnull align 8 dereferenceable(40) %30, i32 noundef %.0194217)
  %76 = load ptr, ptr %75, align 8, !tbaa !132
  %77 = getelementptr inbounds ptr, ptr %76, i64 %indvars.iv250
  %78 = load ptr, ptr %77, align 8, !tbaa !132
  %79 = getelementptr inbounds %struct.cellj, ptr %78, i64 %indvars.iv, i32 1
  store double 0.000000e+00, ptr %79, align 8, !tbaa !135
  %80 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5celljEixEi(ptr noundef nonnull align 8 dereferenceable(40) %30, i32 noundef %.0194217)
  %81 = load ptr, ptr %80, align 8, !tbaa !132
  %82 = getelementptr inbounds ptr, ptr %81, i64 %indvars.iv250
  %83 = load ptr, ptr %82, align 8, !tbaa !132
  %84 = getelementptr inbounds %struct.cellj, ptr %83, i64 %indvars.iv, i32 2
  store double 0.000000e+00, ptr %84, align 8, !tbaa !136
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %85 = load i32, ptr %29, align 8, !tbaa !137
  %86 = sext i32 %85 to i64
  %87 = icmp slt i64 %indvars.iv.next, %86
  br i1 %87, label %.lr.ph, label %._crit_edge.loopexit, !llvm.loop !138

._crit_edge233.thread:                            ; preds = %._crit_edge219, %._crit_edge219.thread271
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %13) #9
  br label %._crit_edge243

._crit_edge233:                                   ; preds = %._crit_edge230, %.lr.ph232
  %88 = phi i32 [ %40, %.lr.ph232 ], [ %103, %._crit_edge230 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %13) #9
  %89 = icmp sgt i32 %88, 0
  br i1 %89, label %.preheader211.lr.ph, label %._crit_edge243

.preheader211.lr.ph:                              ; preds = %._crit_edge233
  %90 = getelementptr inbounds i8, ptr %0, i64 4
  %91 = getelementptr inbounds i8, ptr %0, i64 8
  %92 = getelementptr inbounds i8, ptr %0, i64 520
  %93 = load i32, ptr %90, align 4, !tbaa !126
  %94 = icmp sgt i32 %93, 0
  br i1 %94, label %.preheader211, label %._crit_edge243

.lr.ph232.split:                                  ; preds = %.lr.ph232, %._crit_edge230
  %95 = phi i32 [ %103, %._crit_edge230 ], [ %40, %.lr.ph232 ]
  %96 = phi i32 [ %108, %._crit_edge230 ], [ 0, %.lr.ph232 ]
  %97 = phi i32 [ %105, %._crit_edge230 ], [ %56, %.lr.ph232 ]
  %98 = phi i32 [ %106, %._crit_edge230 ], [ %56, %.lr.ph232 ]
  %99 = phi i32 [ %107, %._crit_edge230 ], [ %56, %.lr.ph232 ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %14) #9
  store i32 0, ptr %14, align 4, !tbaa !127
  %100 = icmp sgt i32 %99, 0
  br i1 %100, label %.lr.ph229, label %._crit_edge230

.lr.ph229:                                        ; preds = %.lr.ph232.split
  %101 = load i32, ptr %42, align 8, !tbaa !137
  %102 = icmp sgt i32 %101, 0
  br i1 %102, label %.lr.ph229.split, label %._crit_edge230

._crit_edge230.loopexit:                          ; preds = %._crit_edge227
  %.pre267 = load i32, ptr %13, align 4, !tbaa !127
  %.pre268 = load i32, ptr %0, align 8, !tbaa !5
  br label %._crit_edge230

._crit_edge230:                                   ; preds = %.lr.ph229, %._crit_edge230.loopexit, %.lr.ph232.split
  %103 = phi i32 [ %.pre268, %._crit_edge230.loopexit ], [ %95, %.lr.ph232.split ], [ %95, %.lr.ph229 ]
  %104 = phi i32 [ %.pre267, %._crit_edge230.loopexit ], [ %96, %.lr.ph232.split ], [ %96, %.lr.ph229 ]
  %105 = phi i32 [ %114, %._crit_edge230.loopexit ], [ %97, %.lr.ph232.split ], [ %97, %.lr.ph229 ]
  %106 = phi i32 [ %114, %._crit_edge230.loopexit ], [ %98, %.lr.ph232.split ], [ %98, %.lr.ph229 ]
  %107 = phi i32 [ %114, %._crit_edge230.loopexit ], [ %99, %.lr.ph232.split ], [ %98, %.lr.ph229 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %14) #9
  %108 = add nsw i32 %104, 1
  store i32 %108, ptr %13, align 4, !tbaa !127
  %109 = icmp slt i32 %108, %103
  br i1 %109, label %.lr.ph232.split, label %._crit_edge233, !llvm.loop !139

.lr.ph229.split:                                  ; preds = %.lr.ph229, %._crit_edge227
  %110 = phi i32 [ %114, %._crit_edge227 ], [ %97, %.lr.ph229 ]
  %111 = phi i32 [ %117, %._crit_edge227 ], [ 0, %.lr.ph229 ]
  %112 = phi i32 [ %116, %._crit_edge227 ], [ %101, %.lr.ph229 ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %15) #9
  store i32 0, ptr %15, align 4, !tbaa !127
  %113 = icmp sgt i32 %112, 0
  br i1 %113, label %.lr.ph226, label %._crit_edge227

._crit_edge227.loopexit:                          ; preds = %._crit_edge224
  %.pre265 = load i32, ptr %14, align 4, !tbaa !127
  %.pre266 = load i32, ptr %41, align 4, !tbaa !126
  br label %._crit_edge227

._crit_edge227:                                   ; preds = %._crit_edge227.loopexit, %.lr.ph229.split
  %114 = phi i32 [ %.pre266, %._crit_edge227.loopexit ], [ %110, %.lr.ph229.split ]
  %115 = phi i32 [ %.pre265, %._crit_edge227.loopexit ], [ %111, %.lr.ph229.split ]
  %116 = phi i32 [ %487, %._crit_edge227.loopexit ], [ %112, %.lr.ph229.split ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %15) #9
  %117 = add nsw i32 %115, 1
  store i32 %117, ptr %14, align 4, !tbaa !127
  %118 = icmp slt i32 %117, %114
  br i1 %118, label %.lr.ph229.split, label %._crit_edge230.loopexit, !llvm.loop !140

.lr.ph226:                                        ; preds = %.lr.ph229.split, %._crit_edge224
  %119 = load i32, ptr %13, align 4, !tbaa !127
  %120 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5cellpEixEi(ptr noundef nonnull align 8 dereferenceable(40) %43, i32 noundef %119)
  %121 = load ptr, ptr %120, align 8, !tbaa !132
  %122 = load i32, ptr %14, align 4, !tbaa !127
  %123 = sext i32 %122 to i64
  %124 = getelementptr inbounds ptr, ptr %121, i64 %123
  %125 = load ptr, ptr %124, align 8, !tbaa !132
  %126 = load i32, ptr %15, align 4, !tbaa !127
  %127 = sext i32 %126 to i64
  %128 = getelementptr inbounds %struct.cellp, ptr %125, i64 %127, i32 0, i32 1
  %129 = load ptr, ptr %128, align 8, !tbaa !141
  %.not220 = icmp eq ptr %129, null
  br i1 %.not220, label %._crit_edge224, label %.lr.ph223

.lr.ph223:                                        ; preds = %.lr.ph226, %484
  %.0196221 = phi ptr [ %.1197, %484 ], [ %129, %.lr.ph226 ]
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %16) #9
  %130 = getelementptr inbounds i8, ptr %.0196221, i64 8
  %131 = getelementptr inbounds i8, ptr %.0196221, i64 16
  call void @_ZN14spatial_region13e_to_particleERdS0_S0_(ptr dead_on_unwind nonnull writable sret(%struct.vector3d) align 8 %16, ptr noundef nonnull align 8 dereferenceable(608) %0, ptr noundef nonnull align 8 dereferenceable(8) %.0196221, ptr noundef nonnull align 8 dereferenceable(8) %130, ptr noundef nonnull align 8 dereferenceable(8) %131)
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(24) %16, i64 24, i1 false), !tbaa.struct !144
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %16) #9
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %17) #9
  call void @_ZN14spatial_region13b_to_particleERdS0_S0_(ptr dead_on_unwind nonnull writable sret(%struct.vector3d) align 8 %17, ptr noundef nonnull align 8 dereferenceable(608) %0, ptr noundef nonnull align 8 dereferenceable(8) %.0196221, ptr noundef nonnull align 8 dereferenceable(8) %130, ptr noundef nonnull align 8 dereferenceable(8) %131)
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(24) %17, i64 24, i1 false), !tbaa.struct !144
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %17) #9
  %132 = load double, ptr %44, align 8, !tbaa !146
  %133 = fadd double %132, %1
  store double %133, ptr %44, align 8, !tbaa !146
  %134 = getelementptr inbounds i8, ptr %.0196221, i64 64
  %135 = load double, ptr %134, align 8, !tbaa !148
  %136 = fcmp oeq double %135, 0.000000e+00
  br i1 %136, label %137, label %269

137:                                              ; preds = %.lr.ph223
  %138 = load i8, ptr @qed_enabled, align 1, !tbaa !150, !range !152, !noundef !153
  %139 = trunc nuw i8 %138 to i1
  br i1 %139, label %140, label %..critedge_crit_edge

..critedge_crit_edge:                             ; preds = %137
  %.pre263 = load double, ptr %46, align 8, !tbaa !154
  br label %.critedge

140:                                              ; preds = %137
  %141 = getelementptr inbounds i8, ptr %.0196221, i64 24
  %142 = load <2 x double>, ptr %141, align 8, !tbaa !145
  store <2 x double> %142, ptr %7, align 16, !tbaa !145
  %143 = getelementptr inbounds i8, ptr %.0196221, i64 40
  %144 = load double, ptr %143, align 8, !tbaa !155
  store double %144, ptr %53, align 16, !tbaa !146
  %145 = getelementptr inbounds i8, ptr %.0196221, i64 48
  %146 = load double, ptr %145, align 8, !tbaa !156
  store double %146, ptr %8, align 8, !tbaa !145
  %147 = getelementptr inbounds i8, ptr %.0196221, i64 72
  %148 = load double, ptr %147, align 8, !tbaa !157
  %149 = call noundef double @_ZN14spatial_region3chiER8vector3dS1_S1_Rd(ptr noundef nonnull align 8 dereferenceable(608) %0, ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(24) %7, ptr noundef nonnull align 8 dereferenceable(8) %145)
  store double %149, ptr %147, align 8, !tbaa !157
  %150 = fadd double %148, %149
  %151 = fmul double %150, 5.000000e-01
  store double %151, ptr %10, align 8, !tbaa !145
  %152 = call noundef double @_ZN14spatial_region8get_randEv(ptr noundef nonnull align 8 dereferenceable(608) %0)
  store double %152, ptr %11, align 8, !tbaa !145
  %153 = call noundef double @_ZN14spatial_region8get_randEv(ptr noundef nonnull align 8 dereferenceable(608) %0)
  %154 = call noundef double @_ZN14spatial_region7tilde_wERdS0_S0_(ptr noundef nonnull align 8 dereferenceable(608) %0, ptr noundef nonnull align 8 dereferenceable(8) %8, ptr noundef nonnull align 8 dereferenceable(8) %11, ptr noundef nonnull align 8 dereferenceable(8) %10)
  %155 = load double, ptr %8, align 8, !tbaa !145
  %156 = fmul double %154, %155
  %157 = load double, ptr %46, align 8, !tbaa !154
  %158 = fmul double %156, %157
  %159 = fcmp ult double %153, %158
  br i1 %159, label %169, label %.critedge

.critedge:                                        ; preds = %..critedge_crit_edge, %140
  %160 = phi double [ %.pre263, %..critedge_crit_edge ], [ %157, %140 ]
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %18) #9
  call void @_ZN8particle16get_displacementEd(ptr dead_on_unwind nonnull writable sret(%struct.vector3d) align 8 %18, ptr noundef nonnull align 8 dereferenceable(104) %.0196221, double noundef %160)
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(24) %3, ptr noundef nonnull align 8 dereferenceable(24) %18, i64 24, i1 false), !tbaa.struct !144
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %18) #9
  %161 = load <2 x double>, ptr %3, align 16, !tbaa !145
  %162 = load <2 x double>, ptr %47, align 8, !tbaa !145
  %163 = fdiv <2 x double> %161, %162
  store <2 x double> %163, ptr %3, align 16, !tbaa !145
  %164 = load double, ptr %49, align 16, !tbaa !146
  %165 = load double, ptr %50, align 8, !tbaa !158
  %166 = fdiv double %164, %165
  store double %166, ptr %49, align 16, !tbaa !146
  call void @_ZN8particle18coordinate_advanceER8vector3d(ptr noundef nonnull align 8 dereferenceable(104) %.0196221, ptr noundef nonnull align 8 dereferenceable(24) %3)
  %167 = getelementptr inbounds i8, ptr %.0196221, i64 88
  %168 = load ptr, ptr %167, align 8, !tbaa !159
  call void @_ZN14spatial_region5placeER8particleRiS2_S2_(ptr noundef nonnull align 8 dereferenceable(608) %0, ptr noundef nonnull align 8 dereferenceable(104) %.0196221, ptr noundef nonnull align 4 dereferenceable(4) %13, ptr noundef nonnull align 4 dereferenceable(4) %14, ptr noundef nonnull align 4 dereferenceable(4) %15)
  br label %484

169:                                              ; preds = %140
  %170 = load <2 x double>, ptr %.0196221, align 8, !tbaa !145
  store <2 x double> %170, ptr %3, align 16, !tbaa !145
  %171 = load double, ptr %131, align 8, !tbaa !160
  store double %171, ptr %49, align 16, !tbaa !146
  %172 = load double, ptr %11, align 8, !tbaa !145
  %173 = fmul double %155, %172
  %174 = load double, ptr %147, align 8, !tbaa !157
  %175 = fmul double %172, %174
  %176 = getelementptr inbounds i8, ptr %.0196221, i64 56
  %177 = load double, ptr %176, align 8, !tbaa !161
  %178 = fneg double %177
  %179 = call noundef ptr @_ZN14spatial_region13bear_particleEdR8vector3dS1_ddd(ptr noundef nonnull align 8 dereferenceable(608) %0, double noundef -1.000000e+00, ptr noundef nonnull align 8 dereferenceable(24) %3, ptr noundef nonnull align 8 dereferenceable(24) %7, double noundef %173, double noundef %175, double noundef %178)
  %180 = getelementptr inbounds i8, ptr %179, i64 24
  %181 = load <2 x double>, ptr %180, align 8, !tbaa !145
  store <2 x double> %181, ptr %6, align 16, !tbaa !145
  %182 = getelementptr inbounds i8, ptr %179, i64 40
  %183 = load double, ptr %182, align 8, !tbaa !155
  store double %183, ptr %52, align 16, !tbaa !146
  %184 = getelementptr inbounds i8, ptr %179, i64 48
  %185 = load double, ptr %184, align 8, !tbaa !156
  store double %185, ptr %8, align 8, !tbaa !145
  %186 = getelementptr inbounds i8, ptr %179, i64 72
  call void @_ZNKSt8functionIFvR8particleR8vector3dS3_RdEEclES1_S3_S3_S4_(ptr noundef nonnull align 8 dereferenceable(32) %45, ptr noundef nonnull align 8 dereferenceable(104) %179, ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %46)
  %187 = load <2 x double>, ptr %180, align 8, !tbaa !145
  %188 = load <2 x double>, ptr %6, align 16, !tbaa !145
  %189 = fadd <2 x double> %187, %188
  %190 = fmul <2 x double> %189, <double 5.000000e-01, double 5.000000e-01>
  store <2 x double> %190, ptr %7, align 16, !tbaa !145
  %191 = load double, ptr %182, align 8, !tbaa !155
  %192 = load double, ptr %52, align 16, !tbaa !146
  %193 = fadd double %191, %192
  %194 = fmul double %193, 5.000000e-01
  store double %194, ptr %53, align 16, !tbaa !146
  %195 = load double, ptr %184, align 8, !tbaa !156
  %196 = load double, ptr %8, align 8, !tbaa !145
  %197 = fadd double %195, %196
  %198 = fmul double %197, 5.000000e-01
  store double %198, ptr %9, align 8, !tbaa !145
  %199 = call noundef double @_ZN14spatial_region3chiER8vector3dS1_S1_Rd(ptr noundef nonnull align 8 dereferenceable(608) %0, ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(24) %7, ptr noundef nonnull align 8 dereferenceable(8) %9)
  store double %199, ptr %186, align 8, !tbaa !157
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %19) #9
  %200 = load double, ptr %46, align 8, !tbaa !154
  call void @_ZN8particle16get_displacementEd(ptr dead_on_unwind nonnull writable sret(%struct.vector3d) align 8 %19, ptr noundef nonnull align 8 dereferenceable(104) %179, double noundef %200)
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(24) %3, ptr noundef nonnull align 8 dereferenceable(24) %19, i64 24, i1 false), !tbaa.struct !144
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %19) #9
  %201 = load <2 x double>, ptr %3, align 16, !tbaa !145
  %202 = load <2 x double>, ptr %47, align 8, !tbaa !145
  %203 = fdiv <2 x double> %201, %202
  store <2 x double> %203, ptr %3, align 16, !tbaa !145
  %204 = load double, ptr %49, align 16, !tbaa !146
  %205 = load double, ptr %50, align 8, !tbaa !158
  %206 = fdiv double %204, %205
  store double %206, ptr %49, align 16, !tbaa !146
  call void @_ZN14spatial_region11jdepositionER8particleR8vector3d(ptr noundef nonnull align 8 dereferenceable(608) %0, ptr noundef nonnull align 8 dereferenceable(104) %179, ptr noundef nonnull align 8 dereferenceable(24) %3)
  call void @_ZN14spatial_region5placeER8particle(ptr noundef nonnull align 8 dereferenceable(608) %0, ptr noundef nonnull align 8 dereferenceable(104) %179)
  %207 = load <2 x double>, ptr %.0196221, align 8, !tbaa !145
  store <2 x double> %207, ptr %3, align 16, !tbaa !145
  %208 = load double, ptr %131, align 8, !tbaa !160
  store double %208, ptr %49, align 16, !tbaa !146
  %209 = load <2 x double>, ptr %141, align 8, !tbaa !145
  store <2 x double> %209, ptr %7, align 16, !tbaa !145
  %210 = load double, ptr %143, align 8, !tbaa !155
  store double %210, ptr %53, align 16, !tbaa !146
  %211 = load double, ptr %11, align 8, !tbaa !145
  %212 = fsub double 1.000000e+00, %211
  %213 = load double, ptr %145, align 8, !tbaa !156
  %214 = fmul double %212, %213
  %215 = load double, ptr %147, align 8, !tbaa !157
  %216 = fmul double %212, %215
  %217 = load double, ptr %176, align 8, !tbaa !161
  %218 = call noundef ptr @_ZN14spatial_region13bear_particleEdR8vector3dS1_ddd(ptr noundef nonnull align 8 dereferenceable(608) %0, double noundef 1.000000e+00, ptr noundef nonnull align 8 dereferenceable(24) %3, ptr noundef nonnull align 8 dereferenceable(24) %7, double noundef %214, double noundef %216, double noundef %217)
  %219 = getelementptr inbounds i8, ptr %218, i64 24
  %220 = load <2 x double>, ptr %219, align 8, !tbaa !145
  store <2 x double> %220, ptr %6, align 16, !tbaa !145
  %221 = getelementptr inbounds i8, ptr %218, i64 40
  %222 = load double, ptr %221, align 8, !tbaa !155
  store double %222, ptr %52, align 16, !tbaa !146
  %223 = getelementptr inbounds i8, ptr %218, i64 48
  %224 = load double, ptr %223, align 8, !tbaa !156
  store double %224, ptr %8, align 8, !tbaa !145
  %225 = getelementptr inbounds i8, ptr %218, i64 72
  call void @_ZNKSt8functionIFvR8particleR8vector3dS3_RdEEclES1_S3_S3_S4_(ptr noundef nonnull align 8 dereferenceable(32) %45, ptr noundef nonnull align 8 dereferenceable(104) %218, ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %46)
  %226 = load <2 x double>, ptr %219, align 8, !tbaa !145
  %227 = load <2 x double>, ptr %6, align 16, !tbaa !145
  %228 = fadd <2 x double> %226, %227
  %229 = fmul <2 x double> %228, <double 5.000000e-01, double 5.000000e-01>
  store <2 x double> %229, ptr %7, align 16, !tbaa !145
  %230 = load double, ptr %221, align 8, !tbaa !155
  %231 = load double, ptr %52, align 16, !tbaa !146
  %232 = fadd double %230, %231
  %233 = fmul double %232, 5.000000e-01
  store double %233, ptr %53, align 16, !tbaa !146
  %234 = load double, ptr %223, align 8, !tbaa !156
  %235 = load double, ptr %8, align 8, !tbaa !145
  %236 = fadd double %234, %235
  %237 = fmul double %236, 5.000000e-01
  store double %237, ptr %9, align 8, !tbaa !145
  %238 = call noundef double @_ZN14spatial_region3chiER8vector3dS1_S1_Rd(ptr noundef nonnull align 8 dereferenceable(608) %0, ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(24) %7, ptr noundef nonnull align 8 dereferenceable(8) %9)
  store double %238, ptr %225, align 8, !tbaa !157
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %20) #9
  %239 = load double, ptr %46, align 8, !tbaa !154
  call void @_ZN8particle16get_displacementEd(ptr dead_on_unwind nonnull writable sret(%struct.vector3d) align 8 %20, ptr noundef nonnull align 8 dereferenceable(104) %218, double noundef %239)
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(24) %3, ptr noundef nonnull align 8 dereferenceable(24) %20, i64 24, i1 false), !tbaa.struct !144
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %20) #9
  %240 = load <2 x double>, ptr %3, align 16, !tbaa !145
  %241 = load <2 x double>, ptr %47, align 8, !tbaa !145
  %242 = fdiv <2 x double> %240, %241
  store <2 x double> %242, ptr %3, align 16, !tbaa !145
  %243 = load double, ptr %49, align 16, !tbaa !146
  %244 = load double, ptr %50, align 8, !tbaa !158
  %245 = fdiv double %243, %244
  store double %245, ptr %49, align 16, !tbaa !146
  call void @_ZN14spatial_region11jdepositionER8particleR8vector3d(ptr noundef nonnull align 8 dereferenceable(608) %0, ptr noundef nonnull align 8 dereferenceable(104) %218, ptr noundef nonnull align 8 dereferenceable(24) %3)
  call void @_ZN14spatial_region5placeER8particle(ptr noundef nonnull align 8 dereferenceable(608) %0, ptr noundef nonnull align 8 dereferenceable(104) %218)
  %246 = getelementptr inbounds i8, ptr %.0196221, i64 88
  %247 = load ptr, ptr %246, align 8, !tbaa !159
  %248 = getelementptr inbounds i8, ptr %.0196221, i64 96
  %249 = load ptr, ptr %248, align 8, !tbaa !162
  %.not207 = icmp eq ptr %249, null
  br i1 %.not207, label %252, label %250

250:                                              ; preds = %169
  %251 = getelementptr inbounds i8, ptr %249, i64 88
  br label %263

252:                                              ; preds = %169
  %253 = load i32, ptr %13, align 4, !tbaa !127
  %254 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5cellpEixEi(ptr noundef nonnull align 8 dereferenceable(40) %43, i32 noundef %253)
  %255 = load ptr, ptr %254, align 8, !tbaa !132
  %256 = load i32, ptr %14, align 4, !tbaa !127
  %257 = sext i32 %256 to i64
  %258 = getelementptr inbounds ptr, ptr %255, i64 %257
  %259 = load ptr, ptr %258, align 8, !tbaa !132
  %260 = load i32, ptr %15, align 4, !tbaa !127
  %261 = sext i32 %260 to i64
  %262 = getelementptr inbounds %struct.cellp, ptr %259, i64 %261
  br label %263

263:                                              ; preds = %252, %250
  %.sink = phi ptr [ %262, %252 ], [ %251, %250 ]
  store ptr %247, ptr %.sink, align 8, !tbaa !132
  %264 = load ptr, ptr %246, align 8, !tbaa !159
  %.not208 = icmp eq ptr %264, null
  br i1 %.not208, label %268, label %265

265:                                              ; preds = %263
  %266 = load ptr, ptr %248, align 8, !tbaa !162
  %267 = getelementptr inbounds i8, ptr %264, i64 96
  store ptr %266, ptr %267, align 8, !tbaa !162
  br label %268

268:                                              ; preds = %265, %263
  call void @_ZN14spatial_region15delete_particleEP8particleb(ptr noundef nonnull align 8 dereferenceable(608) %0, ptr noundef nonnull %.0196221, i1 noundef zeroext false)
  br label %484

269:                                              ; preds = %.lr.ph223
  %270 = call double @llvm.fabs.f64(double %135)
  %271 = fcmp oeq double %270, 1.000000e+00
  br i1 %271, label %272, label %474

272:                                              ; preds = %269
  %273 = load i8, ptr @qed_enabled, align 1, !tbaa !150, !range !152, !noundef !153
  %274 = trunc nuw i8 %273 to i1
  br i1 %274, label %275, label %.critedge210

275:                                              ; preds = %272
  %276 = getelementptr inbounds i8, ptr %.0196221, i64 24
  %277 = getelementptr inbounds i8, ptr %.0196221, i64 32
  %278 = load <2 x double>, ptr %276, align 8, !tbaa !145
  store <2 x double> %278, ptr %6, align 16, !tbaa !145
  %279 = getelementptr inbounds i8, ptr %.0196221, i64 40
  %280 = load double, ptr %279, align 8, !tbaa !155
  store double %280, ptr %52, align 16, !tbaa !146
  %281 = getelementptr inbounds i8, ptr %.0196221, i64 48
  %282 = load double, ptr %281, align 8, !tbaa !156
  store double %282, ptr %8, align 8, !tbaa !145
  %283 = getelementptr inbounds i8, ptr %.0196221, i64 72
  %284 = load double, ptr %283, align 8, !tbaa !157
  call void @_ZNKSt8functionIFvR8particleR8vector3dS3_RdEEclES1_S3_S3_S4_(ptr noundef nonnull align 8 dereferenceable(32) %45, ptr noundef nonnull align 8 dereferenceable(104) %.0196221, ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %46)
  %285 = load <2 x double>, ptr %276, align 8, !tbaa !145
  %286 = load <2 x double>, ptr %6, align 16, !tbaa !145
  %287 = fadd <2 x double> %285, %286
  %288 = fmul <2 x double> %287, <double 5.000000e-01, double 5.000000e-01>
  store <2 x double> %288, ptr %7, align 16, !tbaa !145
  %289 = load double, ptr %279, align 8, !tbaa !155
  %290 = load double, ptr %52, align 16, !tbaa !146
  %291 = fadd double %289, %290
  %292 = fmul double %291, 5.000000e-01
  store double %292, ptr %53, align 16, !tbaa !146
  %293 = load double, ptr %281, align 8, !tbaa !156
  %294 = load double, ptr %8, align 8, !tbaa !145
  %295 = fadd double %293, %294
  %296 = fmul double %295, 5.000000e-01
  store double %296, ptr %9, align 8, !tbaa !145
  %297 = call noundef double @_ZN14spatial_region3chiER8vector3dS1_S1_Rd(ptr noundef nonnull align 8 dereferenceable(608) %0, ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(24) %7, ptr noundef nonnull align 8 dereferenceable(8) %9)
  store double %297, ptr %283, align 8, !tbaa !157
  %298 = fadd double %284, %297
  %299 = fmul double %298, 5.000000e-01
  store double %299, ptr %10, align 8, !tbaa !145
  %300 = call noundef double @_ZN14spatial_region8get_randEv(ptr noundef nonnull align 8 dereferenceable(608) %0)
  store double %300, ptr %11, align 8, !tbaa !145
  %301 = call noundef double @_ZN14spatial_region8get_randEv(ptr noundef nonnull align 8 dereferenceable(608) %0)
  %302 = call noundef double @_ZN14spatial_region1wERKdRdS1_(ptr noundef nonnull align 8 dereferenceable(608) %0, ptr noundef nonnull align 8 dereferenceable(8) %8, ptr noundef nonnull align 8 dereferenceable(8) %11, ptr noundef nonnull align 8 dereferenceable(8) %10)
  %303 = load double, ptr %8, align 8, !tbaa !145
  %304 = fmul double %302, %303
  %305 = load double, ptr %46, align 8, !tbaa !154
  %306 = fmul double %304, %305
  %307 = fcmp ult double %301, %306
  br i1 %307, label %318, label %308

.critedge210:                                     ; preds = %272
  call void @_ZNKSt8functionIFvR8particleR8vector3dS3_RdEEclES1_S3_S3_S4_(ptr noundef nonnull align 8 dereferenceable(32) %45, ptr noundef nonnull align 8 dereferenceable(104) %.0196221, ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %46)
  %.pre261 = load double, ptr %46, align 8, !tbaa !154
  br label %308

308:                                              ; preds = %.critedge210, %275
  %309 = phi double [ %.pre261, %.critedge210 ], [ %305, %275 ]
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %21) #9
  call void @_ZN8particle16get_displacementEd(ptr dead_on_unwind nonnull writable sret(%struct.vector3d) align 8 %21, ptr noundef nonnull align 8 dereferenceable(104) %.0196221, double noundef %309)
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(24) %3, ptr noundef nonnull align 8 dereferenceable(24) %21, i64 24, i1 false), !tbaa.struct !144
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %21) #9
  %310 = load <2 x double>, ptr %3, align 16, !tbaa !145
  %311 = load <2 x double>, ptr %47, align 8, !tbaa !145
  %312 = fdiv <2 x double> %310, %311
  store <2 x double> %312, ptr %3, align 16, !tbaa !145
  %313 = load double, ptr %49, align 16, !tbaa !146
  %314 = load double, ptr %50, align 8, !tbaa !158
  %315 = fdiv double %313, %314
  store double %315, ptr %49, align 16, !tbaa !146
  call void @_ZN14spatial_region11jdepositionER8particleR8vector3d(ptr noundef nonnull align 8 dereferenceable(608) %0, ptr noundef nonnull align 8 dereferenceable(104) %.0196221, ptr noundef nonnull align 8 dereferenceable(24) %3)
  %316 = getelementptr inbounds i8, ptr %.0196221, i64 88
  %317 = load ptr, ptr %316, align 8, !tbaa !159
  call void @_ZN14spatial_region5placeER8particleRiS2_S2_(ptr noundef nonnull align 8 dereferenceable(608) %0, ptr noundef nonnull align 8 dereferenceable(104) %.0196221, ptr noundef nonnull align 4 dereferenceable(4) %13, ptr noundef nonnull align 4 dereferenceable(4) %14, ptr noundef nonnull align 4 dereferenceable(4) %15)
  br label %484

318:                                              ; preds = %275
  %319 = fmul double %305, 5.000000e-01
  %320 = fdiv double %319, %303
  store double %320, ptr %10, align 8, !tbaa !145
  %321 = load <2 x double>, ptr %.0196221, align 8, !tbaa !145
  %322 = load <2 x double>, ptr %6, align 16, !tbaa !145
  %323 = insertelement <2 x double> poison, double %320, i64 0
  %324 = shufflevector <2 x double> %323, <2 x double> poison, <2 x i32> zeroinitializer
  %325 = fmul <2 x double> %324, %322
  %326 = load <2 x double>, ptr %47, align 8, !tbaa !145
  %327 = fdiv <2 x double> %325, %326
  %328 = fsub <2 x double> %321, %327
  store <2 x double> %328, ptr %3, align 16, !tbaa !145
  %329 = load double, ptr %131, align 8, !tbaa !160
  %330 = load double, ptr %52, align 16, !tbaa !146
  %331 = fmul double %320, %330
  %332 = load double, ptr %50, align 8, !tbaa !158
  %333 = fdiv double %331, %332
  %334 = fsub double %329, %333
  store double %334, ptr %49, align 16, !tbaa !146
  %335 = load double, ptr %11, align 8, !tbaa !145
  %336 = fmul double %303, %335
  %337 = load double, ptr %283, align 8, !tbaa !157
  %338 = fmul double %335, %337
  %339 = getelementptr inbounds i8, ptr %.0196221, i64 56
  %340 = load double, ptr %339, align 8, !tbaa !161
  %341 = call double @llvm.fabs.f64(double %340)
  %342 = call noundef ptr @_ZN14spatial_region13bear_particleEdR8vector3dS1_ddd(ptr noundef nonnull align 8 dereferenceable(608) %0, double noundef 0.000000e+00, ptr noundef nonnull align 8 dereferenceable(24) %3, ptr noundef nonnull align 8 dereferenceable(24) %6, double noundef %336, double noundef %338, double noundef %341)
  %343 = load double, ptr %10, align 8, !tbaa !145
  %344 = fmul double %343, 3.000000e+00
  %345 = load double, ptr %8, align 8, !tbaa !145
  %346 = fmul double %344, %345
  %347 = getelementptr inbounds i8, ptr %342, i64 48
  %348 = load double, ptr %347, align 8, !tbaa !156
  %349 = fdiv double %346, %348
  store double %349, ptr %10, align 8, !tbaa !145
  %350 = getelementptr inbounds i8, ptr %342, i64 24
  %351 = load double, ptr %350, align 8, !tbaa !163
  %352 = fmul double %349, %351
  %353 = load double, ptr %47, align 8, !tbaa !164
  %354 = fdiv double %352, %353
  %355 = load double, ptr %342, align 8, !tbaa !165
  %356 = fadd double %355, %354
  store double %356, ptr %342, align 8, !tbaa !165
  %357 = load double, ptr %10, align 8, !tbaa !145
  %358 = getelementptr inbounds i8, ptr %342, i64 32
  %359 = getelementptr inbounds i8, ptr %342, i64 8
  %360 = load <2 x double>, ptr %358, align 8, !tbaa !145
  %361 = insertelement <2 x double> poison, double %357, i64 0
  %362 = shufflevector <2 x double> %361, <2 x double> poison, <2 x i32> zeroinitializer
  %363 = fmul <2 x double> %362, %360
  %364 = load <2 x double>, ptr %48, align 8, !tbaa !145
  %365 = fdiv <2 x double> %363, %364
  %366 = load <2 x double>, ptr %359, align 8, !tbaa !145
  %367 = fadd <2 x double> %366, %365
  store <2 x double> %367, ptr %359, align 8, !tbaa !145
  %368 = load i8, ptr @dump_photons, align 1, !tbaa !150, !range !152, !noundef !153
  %369 = trunc nuw i8 %368 to i1
  br i1 %369, label %370, label %371

370:                                              ; preds = %318
  call void @_ZN14spatial_region15delete_particleEP8particleb(ptr noundef nonnull align 8 dereferenceable(608) %0, ptr noundef nonnull %342, i1 noundef zeroext true)
  br label %372

371:                                              ; preds = %318
  call void @_ZN14spatial_region5placeER8particle(ptr noundef nonnull align 8 dereferenceable(608) %0, ptr noundef nonnull align 8 dereferenceable(104) %342)
  br label %372

372:                                              ; preds = %371, %370
  %373 = load double, ptr %11, align 8, !tbaa !145
  %374 = fsub double 1.000000e+00, %373
  %375 = load double, ptr %283, align 8, !tbaa !157
  %376 = fmul double %374, %375
  store double %376, ptr %283, align 8, !tbaa !157
  %377 = load double, ptr %8, align 8, !tbaa !145
  %378 = fmul double %374, %377
  store double %378, ptr %281, align 8, !tbaa !156
  %379 = load double, ptr %6, align 16, !tbaa !166
  %380 = load double, ptr %51, align 8, !tbaa !167
  %381 = fmul double %380, %380
  %382 = call double @llvm.fmuladd.f64(double %379, double %379, double %381)
  %383 = load double, ptr %52, align 16, !tbaa !146
  %384 = insertelement <2 x double> poison, double %378, i64 0
  %385 = insertelement <2 x double> %384, double %383, i64 1
  %386 = insertelement <2 x double> <double -1.000000e+00, double poison>, double %382, i64 1
  %387 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %385, <2 x double> %385, <2 x double> %386)
  %388 = extractelement <2 x double> %387, i64 0
  %389 = extractelement <2 x double> %387, i64 1
  %390 = fdiv double %388, %389
  %391 = call double @sqrt(double noundef %390) #9
  %392 = load double, ptr %6, align 16, !tbaa !166
  %393 = fmul double %391, %392
  store double %393, ptr %276, align 8, !tbaa !163
  %394 = load double, ptr %46, align 8, !tbaa !154
  %395 = fmul double %394, 5.000000e-01
  %396 = load double, ptr %8, align 8, !tbaa !145
  %397 = fdiv double %395, %396
  store double %397, ptr %10, align 8, !tbaa !145
  %398 = fmul double %392, %397
  %399 = load double, ptr %47, align 8, !tbaa !164
  %400 = fdiv double %398, %399
  %401 = load double, ptr %.0196221, align 8, !tbaa !165
  %402 = fsub double %401, %400
  store double %402, ptr %.0196221, align 8, !tbaa !165
  %403 = load double, ptr %10, align 8, !tbaa !145
  %404 = load double, ptr %8, align 8, !tbaa !145
  %405 = fmul double %403, %404
  %406 = load double, ptr %281, align 8, !tbaa !156
  %407 = fdiv double %405, %406
  store double %407, ptr %10, align 8, !tbaa !145
  %408 = fmul double %393, %407
  %409 = fdiv double %408, %399
  %410 = load double, ptr %.0196221, align 8, !tbaa !165
  %411 = fadd double %410, %409
  store double %411, ptr %.0196221, align 8, !tbaa !165
  %412 = load double, ptr %10, align 8, !tbaa !145
  %413 = load <2 x double>, ptr %51, align 8, !tbaa !145
  %414 = insertelement <2 x double> poison, double %391, i64 0
  %415 = shufflevector <2 x double> %414, <2 x double> poison, <2 x i32> zeroinitializer
  %416 = fmul <2 x double> %415, %413
  store <2 x double> %416, ptr %277, align 8, !tbaa !145
  %417 = insertelement <2 x double> poison, double %403, i64 0
  %418 = shufflevector <2 x double> %417, <2 x double> poison, <2 x i32> zeroinitializer
  %419 = fmul <2 x double> %413, %418
  %420 = load <2 x double>, ptr %48, align 8, !tbaa !145
  %421 = fdiv <2 x double> %419, %420
  %422 = load <2 x double>, ptr %130, align 8, !tbaa !145
  %423 = fsub <2 x double> %422, %421
  %424 = insertelement <2 x double> poison, double %412, i64 0
  %425 = shufflevector <2 x double> %424, <2 x double> poison, <2 x i32> zeroinitializer
  %426 = fmul <2 x double> %416, %425
  %427 = fdiv <2 x double> %426, %420
  %428 = fadd <2 x double> %423, %427
  store <2 x double> %428, ptr %130, align 8, !tbaa !145
  %429 = getelementptr inbounds i8, ptr %.0196221, i64 88
  %430 = load ptr, ptr %429, align 8, !tbaa !159
  %431 = fptosi double %411 to i32
  %432 = extractelement <2 x double> %428, i64 0
  %433 = fptosi double %432 to i32
  %434 = extractelement <2 x double> %428, i64 1
  %435 = fptosi double %434 to i32
  %436 = call noundef zeroext i1 @_ZN14spatial_region9is_insideEiii(ptr noundef nonnull align 8 dereferenceable(608) %0, i32 noundef %431, i32 noundef %433, i32 noundef %435)
  br i1 %436, label %437, label %451

437:                                              ; preds = %372
  call void @_ZN14spatial_region5placeER8particleRiS2_S2_(ptr noundef nonnull align 8 dereferenceable(608) %0, ptr noundef nonnull align 8 dereferenceable(104) %.0196221, ptr noundef nonnull align 4 dereferenceable(4) %13, ptr noundef nonnull align 4 dereferenceable(4) %14, ptr noundef nonnull align 4 dereferenceable(4) %15)
  %438 = load <2 x double>, ptr %.0196221, align 8, !tbaa !145
  %439 = fptosi <2 x double> %438 to <2 x i32>
  store <2 x i32> %439, ptr %12, align 8, !tbaa !127
  %440 = load double, ptr %131, align 8, !tbaa !160
  %441 = fptosi double %440 to i32
  store i32 %441, ptr %55, align 8, !tbaa !168
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %22) #9
  call void @_ZN14spatial_region13e_to_particleERdS0_S0_(ptr dead_on_unwind nonnull writable sret(%struct.vector3d) align 8 %22, ptr noundef nonnull align 8 dereferenceable(608) %0, ptr noundef nonnull align 8 dereferenceable(8) %.0196221, ptr noundef nonnull align 8 dereferenceable(8) %130, ptr noundef nonnull align 8 dereferenceable(8) %131)
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(24) %22, i64 24, i1 false), !tbaa.struct !144
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %22) #9
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %23) #9
  call void @_ZN14spatial_region13b_to_particleERdS0_S0_(ptr dead_on_unwind nonnull writable sret(%struct.vector3d) align 8 %23, ptr noundef nonnull align 8 dereferenceable(608) %0, ptr noundef nonnull align 8 dereferenceable(8) %.0196221, ptr noundef nonnull align 8 dereferenceable(8) %130, ptr noundef nonnull align 8 dereferenceable(8) %131)
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(24) %23, i64 24, i1 false), !tbaa.struct !144
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %23) #9
  %442 = load double, ptr %44, align 8, !tbaa !146
  %443 = fadd double %442, %1
  store double %443, ptr %44, align 8, !tbaa !146
  call void @_ZNKSt8functionIFvR8particleR8vector3dS3_RdEEclES1_S3_S3_S4_(ptr noundef nonnull align 8 dereferenceable(32) %45, ptr noundef nonnull align 8 dereferenceable(104) %.0196221, ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %46)
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %24) #9
  %444 = load double, ptr %46, align 8, !tbaa !154
  call void @_ZN8particle16get_displacementEd(ptr dead_on_unwind nonnull writable sret(%struct.vector3d) align 8 %24, ptr noundef nonnull align 8 dereferenceable(104) %.0196221, double noundef %444)
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(24) %3, ptr noundef nonnull align 8 dereferenceable(24) %24, i64 24, i1 false), !tbaa.struct !144
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %24) #9
  %445 = load <2 x double>, ptr %3, align 16, !tbaa !145
  %446 = load <2 x double>, ptr %47, align 8, !tbaa !145
  %447 = fdiv <2 x double> %445, %446
  store <2 x double> %447, ptr %3, align 16, !tbaa !145
  %448 = load double, ptr %49, align 16, !tbaa !146
  %449 = load double, ptr %50, align 8, !tbaa !158
  %450 = fdiv double %448, %449
  store double %450, ptr %49, align 16, !tbaa !146
  call void @_ZN14spatial_region11jdepositionER8particleR8vector3d(ptr noundef nonnull align 8 dereferenceable(608) %0, ptr noundef nonnull align 8 dereferenceable(104) %.0196221, ptr noundef nonnull align 8 dereferenceable(24) %3)
  call void @_ZN14spatial_region5placeER8particleRiS2_S2_(ptr noundef nonnull align 8 dereferenceable(608) %0, ptr noundef nonnull align 8 dereferenceable(104) %.0196221, ptr noundef nonnull align 4 dereferenceable(4) %12, ptr noundef nonnull align 4 dereferenceable(4) %54, ptr noundef nonnull align 4 dereferenceable(4) %55)
  br label %484

451:                                              ; preds = %372
  %452 = getelementptr inbounds i8, ptr %.0196221, i64 96
  %453 = load ptr, ptr %452, align 8, !tbaa !162
  %.not205 = icmp eq ptr %453, null
  %454 = load ptr, ptr %429, align 8, !tbaa !159
  br i1 %.not205, label %457, label %455

455:                                              ; preds = %451
  %456 = getelementptr inbounds i8, ptr %453, i64 88
  store ptr %454, ptr %456, align 8, !tbaa !159
  br label %468

457:                                              ; preds = %451
  %458 = load i32, ptr %13, align 4, !tbaa !127
  %459 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5cellpEixEi(ptr noundef nonnull align 8 dereferenceable(40) %43, i32 noundef %458)
  %460 = load ptr, ptr %459, align 8, !tbaa !132
  %461 = load i32, ptr %14, align 4, !tbaa !127
  %462 = sext i32 %461 to i64
  %463 = getelementptr inbounds ptr, ptr %460, i64 %462
  %464 = load ptr, ptr %463, align 8, !tbaa !132
  %465 = load i32, ptr %15, align 4, !tbaa !127
  %466 = sext i32 %465 to i64
  %467 = getelementptr inbounds %struct.cellp, ptr %464, i64 %466
  store ptr %454, ptr %467, align 8, !tbaa !170
  %.pre262 = load ptr, ptr %429, align 8, !tbaa !159
  br label %468

468:                                              ; preds = %457, %455
  %469 = phi ptr [ %.pre262, %457 ], [ %454, %455 ]
  %.not206 = icmp eq ptr %469, null
  br i1 %.not206, label %473, label %470

470:                                              ; preds = %468
  %471 = load ptr, ptr %452, align 8, !tbaa !162
  %472 = getelementptr inbounds i8, ptr %469, i64 96
  store ptr %471, ptr %472, align 8, !tbaa !162
  br label %473

473:                                              ; preds = %470, %468
  call void @_ZN14spatial_region15delete_particleEP8particleb(ptr noundef nonnull align 8 dereferenceable(608) %0, ptr noundef nonnull %.0196221, i1 noundef zeroext false)
  br label %484

474:                                              ; preds = %269
  call void @_ZNKSt8functionIFvR8particleR8vector3dS3_RdEEclES1_S3_S3_S4_(ptr noundef nonnull align 8 dereferenceable(32) %45, ptr noundef nonnull align 8 dereferenceable(104) %.0196221, ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %46)
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %25) #9
  %475 = load double, ptr %46, align 8, !tbaa !154
  call void @_ZN8particle16get_displacementEd(ptr dead_on_unwind nonnull writable sret(%struct.vector3d) align 8 %25, ptr noundef nonnull align 8 dereferenceable(104) %.0196221, double noundef %475)
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(24) %3, ptr noundef nonnull align 8 dereferenceable(24) %25, i64 24, i1 false), !tbaa.struct !144
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %25) #9
  %476 = load <2 x double>, ptr %3, align 16, !tbaa !145
  %477 = load <2 x double>, ptr %47, align 8, !tbaa !145
  %478 = fdiv <2 x double> %476, %477
  store <2 x double> %478, ptr %3, align 16, !tbaa !145
  %479 = load double, ptr %49, align 16, !tbaa !146
  %480 = load double, ptr %50, align 8, !tbaa !158
  %481 = fdiv double %479, %480
  store double %481, ptr %49, align 16, !tbaa !146
  call void @_ZN14spatial_region11jdepositionER8particleR8vector3d(ptr noundef nonnull align 8 dereferenceable(608) %0, ptr noundef nonnull align 8 dereferenceable(104) %.0196221, ptr noundef nonnull align 8 dereferenceable(24) %3)
  %482 = getelementptr inbounds i8, ptr %.0196221, i64 88
  %483 = load ptr, ptr %482, align 8, !tbaa !159
  call void @_ZN14spatial_region5placeER8particleRiS2_S2_(ptr noundef nonnull align 8 dereferenceable(608) %0, ptr noundef nonnull align 8 dereferenceable(104) %.0196221, ptr noundef nonnull align 4 dereferenceable(4) %13, ptr noundef nonnull align 4 dereferenceable(4) %14, ptr noundef nonnull align 4 dereferenceable(4) %15)
  br label %484

484:                                              ; preds = %437, %473, %474, %308, %.critedge, %268
  %.1197 = phi ptr [ %247, %268 ], [ %168, %.critedge ], [ %317, %308 ], [ %483, %474 ], [ %430, %473 ], [ %430, %437 ]
  %.not = icmp eq ptr %.1197, null
  br i1 %.not, label %._crit_edge224.loopexit, label %.lr.ph223, !llvm.loop !171

._crit_edge224.loopexit:                          ; preds = %484
  %.pre264 = load i32, ptr %15, align 4, !tbaa !127
  br label %._crit_edge224

._crit_edge224:                                   ; preds = %._crit_edge224.loopexit, %.lr.ph226
  %485 = phi i32 [ %.pre264, %._crit_edge224.loopexit ], [ %126, %.lr.ph226 ]
  %486 = add nsw i32 %485, 1
  store i32 %486, ptr %15, align 4, !tbaa !127
  %487 = load i32, ptr %42, align 8, !tbaa !137
  %488 = icmp slt i32 %486, %487
  br i1 %488, label %.lr.ph226, label %._crit_edge227.loopexit, !llvm.loop !172

.preheader211:                                    ; preds = %.preheader211.lr.ph, %._crit_edge240
  %489 = phi i32 [ %498, %._crit_edge240 ], [ %88, %.preheader211.lr.ph ]
  %490 = phi i32 [ %499, %._crit_edge240 ], [ %93, %.preheader211.lr.ph ]
  %491 = phi i32 [ %500, %._crit_edge240 ], [ %93, %.preheader211.lr.ph ]
  %.0191241 = phi i32 [ %501, %._crit_edge240 ], [ 0, %.preheader211.lr.ph ]
  %492 = icmp sgt i32 %491, 0
  %493 = load i32, ptr %91, align 8
  %494 = icmp sgt i32 %493, 0
  %or.cond281 = select i1 %492, i1 %494, i1 false
  br i1 %or.cond281, label %.preheader, label %._crit_edge240

._crit_edge243:                                   ; preds = %._crit_edge240, %.preheader211.lr.ph, %._crit_edge233.thread, %._crit_edge233
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %12) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %7) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %6) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %5) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %4) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %3) #9
  ret void

.preheader:                                       ; preds = %.preheader211, %._crit_edge238
  %495 = phi i32 [ %503, %._crit_edge238 ], [ %490, %.preheader211 ]
  %496 = phi i32 [ %504, %._crit_edge238 ], [ %493, %.preheader211 ]
  %indvars.iv257 = phi i64 [ %indvars.iv.next258, %._crit_edge238 ], [ 0, %.preheader211 ]
  %497 = icmp sgt i32 %496, 0
  br i1 %497, label %.lr.ph237, label %._crit_edge238

._crit_edge240.loopexit:                          ; preds = %._crit_edge238
  %.pre270 = load i32, ptr %0, align 8, !tbaa !5
  br label %._crit_edge240

._crit_edge240:                                   ; preds = %._crit_edge240.loopexit, %.preheader211
  %498 = phi i32 [ %.pre270, %._crit_edge240.loopexit ], [ %489, %.preheader211 ]
  %499 = phi i32 [ %503, %._crit_edge240.loopexit ], [ %490, %.preheader211 ]
  %500 = phi i32 [ %503, %._crit_edge240.loopexit ], [ %491, %.preheader211 ]
  %501 = add nuw nsw i32 %.0191241, 1
  %502 = icmp slt i32 %501, %498
  br i1 %502, label %.preheader211, label %._crit_edge243, !llvm.loop !173

._crit_edge238.loopexit:                          ; preds = %.lr.ph237
  %.pre269 = load i32, ptr %90, align 4, !tbaa !126
  br label %._crit_edge238

._crit_edge238:                                   ; preds = %._crit_edge238.loopexit, %.preheader
  %503 = phi i32 [ %.pre269, %._crit_edge238.loopexit ], [ %495, %.preheader ]
  %504 = phi i32 [ %518, %._crit_edge238.loopexit ], [ %496, %.preheader ]
  %indvars.iv.next258 = add nuw nsw i64 %indvars.iv257, 1
  %505 = sext i32 %503 to i64
  %506 = icmp slt i64 %indvars.iv.next258, %505
  br i1 %506, label %.preheader, label %._crit_edge240.loopexit, !llvm.loop !174

.lr.ph237:                                        ; preds = %.preheader, %.lr.ph237
  %indvars.iv254 = phi i64 [ %indvars.iv.next255, %.lr.ph237 ], [ 0, %.preheader ]
  %507 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5cellpEixEi(ptr noundef nonnull align 8 dereferenceable(40) %92, i32 noundef %.0191241)
  %508 = load ptr, ptr %507, align 8, !tbaa !132
  %509 = getelementptr inbounds ptr, ptr %508, i64 %indvars.iv257
  %510 = load ptr, ptr %509, align 8, !tbaa !132
  %511 = getelementptr inbounds %struct.cellp, ptr %510, i64 %indvars.iv254
  %512 = load ptr, ptr %511, align 8, !tbaa !170
  %513 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5cellpEixEi(ptr noundef nonnull align 8 dereferenceable(40) %92, i32 noundef %.0191241)
  %514 = load ptr, ptr %513, align 8, !tbaa !132
  %515 = getelementptr inbounds ptr, ptr %514, i64 %indvars.iv257
  %516 = load ptr, ptr %515, align 8, !tbaa !132
  %517 = getelementptr inbounds %struct.cellp, ptr %516, i64 %indvars.iv254, i32 0, i32 1
  store ptr %512, ptr %517, align 8, !tbaa !141
  %indvars.iv.next255 = add nuw nsw i64 %indvars.iv254, 1
  %518 = load i32, ptr %91, align 8, !tbaa !137
  %519 = sext i32 %518 to i64
  %520 = icmp slt i64 %indvars.iv.next255, %519
  br i1 %520, label %.lr.ph237, label %._crit_edge238.loopexit, !llvm.loop !175
}

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

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

declare void @_ZN14spatial_region10p_boundaryEv(ptr noundef nonnull align 8 dereferenceable(608)) local_unnamed_addr #3

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5celljEixEi(ptr noundef nonnull align 8 dereferenceable(40), i32 noundef) local_unnamed_addr #4 align 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) local_unnamed_addr #4 align 2

declare void @_ZN14spatial_region13e_to_particleERdS0_S0_(ptr dead_on_unwind writable sret(%struct.vector3d) align 8, ptr noundef nonnull align 8 dereferenceable(608), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #3

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

declare void @_ZN14spatial_region13b_to_particleERdS0_S0_(ptr dead_on_unwind writable sret(%struct.vector3d) align 8, ptr noundef nonnull align 8 dereferenceable(608), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #3

declare noundef double @_ZN14spatial_region3chiER8vector3dS1_S1_Rd(ptr noundef nonnull align 8 dereferenceable(608), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #3

declare noundef double @_ZN14spatial_region8get_randEv(ptr noundef nonnull align 8 dereferenceable(608)) local_unnamed_addr #3

declare noundef double @_ZN14spatial_region7tilde_wERdS0_S0_(ptr noundef nonnull align 8 dereferenceable(608), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #3

declare void @_ZN8particle16get_displacementEd(ptr dead_on_unwind writable sret(%struct.vector3d) align 8, ptr noundef nonnull align 8 dereferenceable(104), double noundef) local_unnamed_addr #3

declare void @_ZN8particle18coordinate_advanceER8vector3d(ptr noundef nonnull align 8 dereferenceable(104), ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #3

declare void @_ZN14spatial_region5placeER8particleRiS2_S2_(ptr noundef nonnull align 8 dereferenceable(608), ptr noundef nonnull align 8 dereferenceable(104), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #3

declare noundef ptr @_ZN14spatial_region13bear_particleEdR8vector3dS1_ddd(ptr noundef nonnull align 8 dereferenceable(608), double noundef, ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24), double noundef, double noundef, double noundef) local_unnamed_addr #3

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

declare void @_ZN14spatial_region11jdepositionER8particleR8vector3d(ptr noundef nonnull align 8 dereferenceable(608), ptr noundef nonnull align 8 dereferenceable(104), ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #3

declare void @_ZN14spatial_region5placeER8particle(ptr noundef nonnull align 8 dereferenceable(608), ptr noundef nonnull align 8 dereferenceable(104)) local_unnamed_addr #3

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

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

declare noundef double @_ZN14spatial_region1wERKdRdS1_(ptr noundef nonnull align 8 dereferenceable(608), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #3

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

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

declare noundef zeroext i1 @_ZN14spatial_region9is_insideEiii(ptr noundef nonnull align 8 dereferenceable(608), i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #3

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare <2 x double> @llvm.fmuladd.v2f64(<2 x double>, <2 x double>, <2 x double>) #8

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { inlinehint mustprogress 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 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #6 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #7 = { mustprogress nofree nounwind willreturn memory(write) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #8 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #9 = { 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 0}
!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 = !{!6, !7, i64 4}
!127 = !{!7, !7, i64 0}
!128 = distinct !{!128, !129, !130}
!129 = !{!"llvm.loop.mustprogress"}
!130 = !{!"llvm.loop.unswitch.partial.disable"}
!131 = distinct !{!131, !129, !130}
!132 = !{!11, !11, i64 0}
!133 = !{!134, !10, i64 0}
!134 = !{!"_ZTS5cellj", !10, i64 0, !10, i64 8, !10, i64 16}
!135 = !{!134, !10, i64 8}
!136 = !{!134, !10, i64 16}
!137 = !{!6, !7, i64 8}
!138 = distinct !{!138, !129}
!139 = distinct !{!139, !129, !130}
!140 = distinct !{!140, !129, !130}
!141 = !{!142, !11, i64 8}
!142 = !{!"_ZTS5cellp", !143, i64 0}
!143 = !{!"_ZTS5plist", !11, i64 0, !11, i64 8}
!144 = !{i64 0, i64 8, !145, i64 8, i64 8, !145, i64 16, i64 8, !145}
!145 = !{!10, !10, i64 0}
!146 = !{!147, !10, i64 16}
!147 = !{!"_ZTS8vector3d", !10, i64 0, !10, i64 8, !10, i64 16}
!148 = !{!149, !10, i64 64}
!149 = !{!"_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}
!150 = !{!151, !151, i64 0}
!151 = !{!"bool", !8, i64 0}
!152 = !{i8 0, i8 2}
!153 = !{}
!154 = !{!6, !10, i64 40}
!155 = !{!149, !10, i64 40}
!156 = !{!149, !10, i64 48}
!157 = !{!149, !10, i64 72}
!158 = !{!6, !10, i64 32}
!159 = !{!149, !11, i64 88}
!160 = !{!149, !10, i64 16}
!161 = !{!149, !10, i64 56}
!162 = !{!149, !11, i64 96}
!163 = !{!149, !10, i64 24}
!164 = !{!6, !10, i64 16}
!165 = !{!149, !10, i64 0}
!166 = !{!147, !10, i64 0}
!167 = !{!147, !10, i64 8}
!168 = !{!169, !7, i64 8}
!169 = !{!"_ZTS12int_vector3d", !7, i64 0, !7, i64 4, !7, i64 8}
!170 = !{!142, !11, i64 0}
!171 = distinct !{!171, !129}
!172 = distinct !{!172, !129}
!173 = distinct !{!173, !129, !130}
!174 = distinct !{!174, !129, !130}
!175 = distinct !{!175, !129}


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