; LLVM IR from QUILL-PIC/Quill :: src/init.ll (ZN14spatial_region4filmEddddiddddddddbiiibd)

; 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.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 }

; 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: nounwind
declare double @sqrt(double noundef) #1

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

; Function Attrs: nounwind
declare double @cos(double noundef) #1

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN14spatial_region4filmEddddiddddddddbiiibd(ptr noundef nonnull align 8 dereferenceable(608) %0, double noundef %1, double noundef %2, double noundef %3, double noundef %4, i32 noundef %5, double noundef %6, double noundef %7, double noundef %8, double noundef %9, double noundef %10, double noundef %11, double noundef %12, double noundef %13, i1 noundef zeroext %14, i32 noundef %15, i32 noundef %16, i32 noundef %17, i1 noundef zeroext %18, double noundef %19) #3 align 2 {
  %21 = alloca ptr, align 8
  %22 = alloca double, align 8
  %23 = alloca double, align 8
  %24 = alloca double, align 8
  %25 = alloca double, align 8
  %26 = alloca i32, align 4
  %27 = alloca double, align 8
  %28 = alloca double, align 8
  %29 = alloca double, align 8
  %30 = alloca double, align 8
  %31 = alloca double, align 8
  %32 = alloca double, align 8
  %33 = alloca double, align 8
  %34 = alloca double, align 8
  %35 = alloca i8, align 1
  %36 = alloca i32, align 4
  %37 = alloca i32, align 4
  %38 = alloca i32, align 4
  %39 = alloca i8, align 1
  %40 = alloca double, align 8
  %41 = alloca %struct.int_vector3d, align 4
  %42 = alloca %struct.int_vector3d, align 4
  %43 = alloca i32, align 4
  %44 = alloca i32, align 4
  %45 = alloca double, align 8
  %46 = alloca i32, align 4
  %47 = alloca i32, align 4
  %48 = alloca i32, align 4
  %49 = alloca double, align 8
  %50 = alloca i32, align 4
  %51 = alloca double, align 8
  %52 = alloca double, align 8
  %53 = alloca double, align 8
  store ptr %0, ptr %21, align 8, !tbaa !5
  store double %1, ptr %22, align 8, !tbaa !9
  store double %2, ptr %23, align 8, !tbaa !9
  store double %3, ptr %24, align 8, !tbaa !9
  store double %4, ptr %25, align 8, !tbaa !9
  store i32 %5, ptr %26, align 4, !tbaa !11
  store double %6, ptr %27, align 8, !tbaa !9
  store double %7, ptr %28, align 8, !tbaa !9
  store double %8, ptr %29, align 8, !tbaa !9
  store double %9, ptr %30, align 8, !tbaa !9
  store double %10, ptr %31, align 8, !tbaa !9
  store double %11, ptr %32, align 8, !tbaa !9
  store double %12, ptr %33, align 8, !tbaa !9
  store double %13, ptr %34, align 8, !tbaa !9
  %54 = zext i1 %14 to i8
  store i8 %54, ptr %35, align 1, !tbaa !13
  store i32 %15, ptr %36, align 4, !tbaa !11
  store i32 %16, ptr %37, align 4, !tbaa !11
  store i32 %17, ptr %38, align 4, !tbaa !11
  %55 = zext i1 %18 to i8
  store i8 %55, ptr %39, align 1, !tbaa !13
  store double %19, ptr %40, align 8, !tbaa !9
  %56 = load ptr, ptr %21, align 8
  call void @llvm.lifetime.start.p0(i64 12, ptr %41) #5
  call void @_ZN12int_vector3dC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %41)
  call void @llvm.lifetime.start.p0(i64 12, ptr %42) #5
  call void @_ZN12int_vector3dC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %42)
  %57 = load i32, ptr %36, align 4, !tbaa !11
  %58 = getelementptr inbounds %struct.int_vector3d, ptr %42, i32 0, i32 0
  store i32 %57, ptr %58, align 4, !tbaa !15
  %59 = load i32, ptr %37, align 4, !tbaa !11
  %60 = getelementptr inbounds %struct.int_vector3d, ptr %42, i32 0, i32 1
  store i32 %59, ptr %60, align 4, !tbaa !17
  %61 = load i32, ptr %38, align 4, !tbaa !11
  %62 = getelementptr inbounds %struct.int_vector3d, ptr %42, i32 0, i32 2
  store i32 %61, ptr %62, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #5
  %63 = load double, ptr %22, align 8, !tbaa !9
  %64 = getelementptr inbounds %class.spatial_region, ptr %56, i32 0, i32 3
  %65 = load double, ptr %64, align 8, !tbaa !19
  %66 = fdiv double %63, %65
  %67 = fptosi double %66 to i32
  store i32 %67, ptr %43, align 4, !tbaa !11
  %68 = load double, ptr %23, align 8, !tbaa !9
  %69 = getelementptr inbounds %class.spatial_region, ptr %56, i32 0, i32 3
  %70 = load double, ptr %69, align 8, !tbaa !19
  %71 = fdiv double %68, %70
  %72 = fptosi double %71 to i32
  store i32 %72, ptr %44, align 4, !tbaa !11
  %73 = load i8, ptr %39, align 1, !tbaa !13, !range !135, !noundef !136
  %74 = trunc i8 %73 to i1
  br i1 %74, label %75, label %97

75:                                               ; preds = %20
  %76 = getelementptr inbounds %class.spatial_region, ptr %56, i32 0, i32 0
  %77 = load i32, ptr %76, align 8, !tbaa !137
  %78 = sub nsw i32 %77, 3
  store i32 %78, ptr %43, align 4, !tbaa !11
  %79 = load i32, ptr %43, align 4, !tbaa !11
  %80 = getelementptr inbounds %class.spatial_region, ptr %56, i32 0, i32 0
  %81 = load i32, ptr %80, align 8, !tbaa !137
  %82 = sub nsw i32 %81, 2
  %83 = icmp slt i32 %79, %82
  br i1 %83, label %84, label %94

84:                                               ; preds = %75
  %85 = load i32, ptr %44, align 4, !tbaa !11
  %86 = getelementptr inbounds %class.spatial_region, ptr %56, i32 0, i32 0
  %87 = load i32, ptr %86, align 8, !tbaa !137
  %88 = sub nsw i32 %87, 2
  %89 = icmp sge i32 %85, %88
  br i1 %89, label %90, label %94

90:                                               ; preds = %84
  %91 = getelementptr inbounds %class.spatial_region, ptr %56, i32 0, i32 0
  %92 = load i32, ptr %91, align 8, !tbaa !137
  %93 = sub nsw i32 %92, 2
  store i32 %93, ptr %44, align 4, !tbaa !11
  br label %96

94:                                               ; preds = %84, %75
  %95 = load i32, ptr %43, align 4, !tbaa !11
  store i32 %95, ptr %44, align 4, !tbaa !11
  br label %96

96:                                               ; preds = %94, %90
  br label %122

97:                                               ; preds = %20
  %98 = load i32, ptr %43, align 4, !tbaa !11
  %99 = icmp slt i32 %98, 0
  br i1 %99, label %100, label %101

100:                                              ; preds = %97
  store i32 0, ptr %43, align 4, !tbaa !11
  br label %101

101:                                              ; preds = %100, %97
  %102 = load i32, ptr %44, align 4, !tbaa !11
  %103 = icmp slt i32 %102, 0
  br i1 %103, label %104, label %105

104:                                              ; preds = %101
  store i32 0, ptr %44, align 4, !tbaa !11
  br label %105

105:                                              ; preds = %104, %101
  %106 = load i32, ptr %43, align 4, !tbaa !11
  %107 = getelementptr inbounds %class.spatial_region, ptr %56, i32 0, i32 0
  %108 = load i32, ptr %107, align 8, !tbaa !137
  %109 = icmp sgt i32 %106, %108
  br i1 %109, label %110, label %113

110:                                              ; preds = %105
  %111 = getelementptr inbounds %class.spatial_region, ptr %56, i32 0, i32 0
  %112 = load i32, ptr %111, align 8, !tbaa !137
  store i32 %112, ptr %43, align 4, !tbaa !11
  br label %113

113:                                              ; preds = %110, %105
  %114 = load i32, ptr %44, align 4, !tbaa !11
  %115 = getelementptr inbounds %class.spatial_region, ptr %56, i32 0, i32 0
  %116 = load i32, ptr %115, align 8, !tbaa !137
  %117 = icmp sgt i32 %114, %116
  br i1 %117, label %118, label %121

118:                                              ; preds = %113
  %119 = getelementptr inbounds %class.spatial_region, ptr %56, i32 0, i32 0
  %120 = load i32, ptr %119, align 8, !tbaa !137
  store i32 %120, ptr %44, align 4, !tbaa !11
  br label %121

121:                                              ; preds = %118, %113
  br label %122

122:                                              ; preds = %121, %96
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #5
  %123 = load double, ptr %30, align 8, !tbaa !9
  %124 = getelementptr inbounds %class.spatial_region, ptr %56, i32 0, i32 4
  %125 = load double, ptr %124, align 8, !tbaa !138
  %126 = fdiv double %123, %125
  %127 = fptosi double %126 to i32
  %128 = load double, ptr %29, align 8, !tbaa !9
  %129 = getelementptr inbounds %class.spatial_region, ptr %56, i32 0, i32 4
  %130 = load double, ptr %129, align 8, !tbaa !138
  %131 = fdiv double %128, %130
  %132 = fptosi double %131 to i32
  %133 = sub nsw i32 %127, %132
  %134 = sub nsw i32 %133, 3
  %135 = sitofp i32 %134 to double
  store double %135, ptr %45, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %46) #5
  %136 = load i32, ptr %43, align 4, !tbaa !11
  store i32 %136, ptr %46, align 4, !tbaa !11
  br label %137

137:                                              ; preds = %548, %122
  %138 = load i32, ptr %46, align 4, !tbaa !11
  %139 = load i32, ptr %44, align 4, !tbaa !11
  %140 = icmp slt i32 %138, %139
  br i1 %140, label %142, label %141

141:                                              ; preds = %137
  store i32 2, ptr %47, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #5
  br label %551

142:                                              ; preds = %137
  call void @llvm.lifetime.start.p0(i64 4, ptr %48) #5
  %143 = load double, ptr %29, align 8, !tbaa !9
  %144 = getelementptr inbounds %class.spatial_region, ptr %56, i32 0, i32 4
  %145 = load double, ptr %144, align 8, !tbaa !138
  %146 = fdiv double %143, %145
  %147 = fptosi double %146 to i32
  %148 = add nsw i32 %147, 1
  store i32 %148, ptr %48, align 4, !tbaa !11
  br label %149

149:                                              ; preds = %544, %142
  %150 = load i32, ptr %48, align 4, !tbaa !11
  %151 = load double, ptr %30, align 8, !tbaa !9
  %152 = getelementptr inbounds %class.spatial_region, ptr %56, i32 0, i32 4
  %153 = load double, ptr %152, align 8, !tbaa !138
  %154 = fdiv double %151, %153
  %155 = fptosi double %154 to i32
  %156 = sub nsw i32 %155, 1
  %157 = icmp slt i32 %150, %156
  br i1 %157, label %159, label %158

158:                                              ; preds = %149
  store i32 5, ptr %47, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #5
  br label %547

159:                                              ; preds = %149
  call void @llvm.lifetime.start.p0(i64 8, ptr %49) #5
  %160 = load double, ptr %25, align 8, !tbaa !9
  %161 = load i32, ptr %48, align 4, !tbaa !11
  %162 = load double, ptr %29, align 8, !tbaa !9
  %163 = getelementptr inbounds %class.spatial_region, ptr %56, i32 0, i32 4
  %164 = load double, ptr %163, align 8, !tbaa !138
  %165 = fdiv double %162, %164
  %166 = fptosi double %165 to i32
  %167 = sub nsw i32 %161, %166
  %168 = sub nsw i32 %167, 1
  %169 = sitofp i32 %168 to double
  %170 = fmul double %160, %169
  %171 = load double, ptr %45, align 8, !tbaa !9
  %172 = fdiv double %170, %171
  %173 = load double, ptr %24, align 8, !tbaa !9
  %174 = load double, ptr %30, align 8, !tbaa !9
  %175 = getelementptr inbounds %class.spatial_region, ptr %56, i32 0, i32 4
  %176 = load double, ptr %175, align 8, !tbaa !138
  %177 = fdiv double %174, %176
  %178 = fptosi double %177 to i32
  %179 = sub nsw i32 %178, 2
  %180 = load i32, ptr %48, align 4, !tbaa !11
  %181 = sub nsw i32 %179, %180
  %182 = sitofp i32 %181 to double
  %183 = fmul double %173, %182
  %184 = load double, ptr %45, align 8, !tbaa !9
  %185 = fdiv double %183, %184
  %186 = fadd double %172, %185
  store double %186, ptr %49, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %50) #5
  %187 = load double, ptr %31, align 8, !tbaa !9
  %188 = getelementptr inbounds %class.spatial_region, ptr %56, i32 0, i32 5
  %189 = load double, ptr %188, align 8, !tbaa !139
  %190 = fdiv double %187, %189
  %191 = fptosi double %190 to i32
  %192 = add nsw i32 %191, 1
  store i32 %192, ptr %50, align 4, !tbaa !11
  br label %193

193:                                              ; preds = %540, %159
  %194 = load i32, ptr %50, align 4, !tbaa !11
  %195 = load double, ptr %32, align 8, !tbaa !9
  %196 = getelementptr inbounds %class.spatial_region, ptr %56, i32 0, i32 5
  %197 = load double, ptr %196, align 8, !tbaa !139
  %198 = fdiv double %195, %197
  %199 = fptosi double %198 to i32
  %200 = sub nsw i32 %199, 1
  %201 = icmp slt i32 %194, %200
  br i1 %201, label %203, label %202

202:                                              ; preds = %193
  store i32 8, ptr %47, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %50) #5
  br label %543

203:                                              ; preds = %193
  %204 = load i8, ptr %35, align 1, !tbaa !13, !range !135, !noundef !136
  %205 = trunc i8 %204 to i1
  %206 = zext i1 %205 to i32
  %207 = icmp eq i32 %206, 1
  br i1 %207, label %208, label %284

208:                                              ; preds = %203
  call void @llvm.lifetime.start.p0(i64 8, ptr %51) #5
  %209 = load i32, ptr %48, align 4, !tbaa !11
  %210 = sitofp i32 %209 to double
  %211 = getelementptr inbounds %class.spatial_region, ptr %56, i32 0, i32 4
  %212 = load double, ptr %211, align 8, !tbaa !138
  %213 = getelementptr inbounds %class.spatial_region, ptr %56, i32 0, i32 1
  %214 = load i32, ptr %213, align 4, !tbaa !140
  %215 = sitofp i32 %214 to double
  %216 = getelementptr inbounds %class.spatial_region, ptr %56, i32 0, i32 4
  %217 = load double, ptr %216, align 8, !tbaa !138
  %218 = fmul double %215, %217
  %219 = fdiv double %218, 2.000000e+00
  %220 = fneg double %219
  %221 = call double @llvm.fmuladd.f64(double %210, double %212, double %220)
  %222 = getelementptr inbounds %class.spatial_region, ptr %56, i32 0, i32 1
  %223 = load i32, ptr %222, align 4, !tbaa !140
  %224 = sitofp i32 %223 to double
  %225 = getelementptr inbounds %class.spatial_region, ptr %56, i32 0, i32 4
  %226 = load double, ptr %225, align 8, !tbaa !138
  %227 = fmul double %224, %226
  %228 = fdiv double %227, 2.000000e+00
  %229 = fdiv double %221, %228
  store double %229, ptr %51, align 8, !tbaa !9
  %230 = load double, ptr %51, align 8, !tbaa !9
  %231 = fmul double 0x3FF921FB54442D18, %230
  %232 = load double, ptr %51, align 8, !tbaa !9
  %233 = fmul double %231, %232
  %234 = load double, ptr %51, align 8, !tbaa !9
  %235 = fmul double %233, %234
  %236 = load double, ptr %51, align 8, !tbaa !9
  %237 = fmul double %235, %236
  %238 = load double, ptr %51, align 8, !tbaa !9
  %239 = fmul double %237, %238
  %240 = call double @cos(double noundef %239) #5
  store double %240, ptr %51, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %52) #5
  %241 = load double, ptr %51, align 8, !tbaa !9
  %242 = load double, ptr %51, align 8, !tbaa !9
  %243 = fmul double %241, %242
  store double %243, ptr %52, align 8, !tbaa !9
  %244 = load i32, ptr %50, align 4, !tbaa !11
  %245 = sitofp i32 %244 to double
  %246 = getelementptr inbounds %class.spatial_region, ptr %56, i32 0, i32 5
  %247 = load double, ptr %246, align 8, !tbaa !139
  %248 = getelementptr inbounds %class.spatial_region, ptr %56, i32 0, i32 2
  %249 = load i32, ptr %248, align 8, !tbaa !141
  %250 = sitofp i32 %249 to double
  %251 = getelementptr inbounds %class.spatial_region, ptr %56, i32 0, i32 5
  %252 = load double, ptr %251, align 8, !tbaa !139
  %253 = fmul double %250, %252
  %254 = fdiv double %253, 2.000000e+00
  %255 = fneg double %254
  %256 = call double @llvm.fmuladd.f64(double %245, double %247, double %255)
  %257 = getelementptr inbounds %class.spatial_region, ptr %56, i32 0, i32 2
  %258 = load i32, ptr %257, align 8, !tbaa !141
  %259 = sitofp i32 %258 to double
  %260 = getelementptr inbounds %class.spatial_region, ptr %56, i32 0, i32 5
  %261 = load double, ptr %260, align 8, !tbaa !139
  %262 = fmul double %259, %261
  %263 = fdiv double %262, 2.000000e+00
  %264 = fdiv double %256, %263
  store double %264, ptr %51, align 8, !tbaa !9
  %265 = load double, ptr %51, align 8, !tbaa !9
  %266 = fmul double 0x3FF921FB54442D18, %265
  %267 = load double, ptr %51, align 8, !tbaa !9
  %268 = fmul double %266, %267
  %269 = load double, ptr %51, align 8, !tbaa !9
  %270 = fmul double %268, %269
  %271 = load double, ptr %51, align 8, !tbaa !9
  %272 = fmul double %270, %271
  %273 = load double, ptr %51, align 8, !tbaa !9
  %274 = fmul double %272, %273
  %275 = call double @cos(double noundef %274) #5
  store double %275, ptr %51, align 8, !tbaa !9
  %276 = load double, ptr %51, align 8, !tbaa !9
  %277 = load double, ptr %51, align 8, !tbaa !9
  %278 = fmul double %276, %277
  %279 = load double, ptr %52, align 8, !tbaa !9
  %280 = fmul double %279, %278
  store double %280, ptr %52, align 8, !tbaa !9
  %281 = load double, ptr %52, align 8, !tbaa !9
  %282 = load double, ptr %49, align 8, !tbaa !9
  %283 = fmul double %282, %281
  store double %283, ptr %49, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #5
  br label %284

284:                                              ; preds = %208, %203
  %285 = load double, ptr %40, align 8, !tbaa !9
  %286 = fcmp oge double %285, 0.000000e+00
  br i1 %286, label %287, label %319

287:                                              ; preds = %284
  %288 = load i32, ptr %48, align 4, !tbaa !11
  %289 = load double, ptr %29, align 8, !tbaa !9
  %290 = getelementptr inbounds %class.spatial_region, ptr %56, i32 0, i32 4
  %291 = load double, ptr %290, align 8, !tbaa !138
  %292 = fdiv double %289, %291
  %293 = fptosi double %292 to i32
  %294 = sub nsw i32 %288, %293
  %295 = sub nsw i32 %294, 1
  %296 = sitofp i32 %295 to double
  %297 = load double, ptr %40, align 8, !tbaa !9
  %298 = getelementptr inbounds %class.spatial_region, ptr %56, i32 0, i32 4
  %299 = load double, ptr %298, align 8, !tbaa !138
  %300 = fdiv double %297, %299
  %301 = fcmp olt double %296, %300
  br i1 %301, label %302, label %319

302:                                              ; preds = %287
  %303 = load i32, ptr %48, align 4, !tbaa !11
  %304 = load double, ptr %29, align 8, !tbaa !9
  %305 = getelementptr inbounds %class.spatial_region, ptr %56, i32 0, i32 4
  %306 = load double, ptr %305, align 8, !tbaa !138
  %307 = fdiv double %304, %306
  %308 = fptosi double %307 to i32
  %309 = sub nsw i32 %303, %308
  %310 = sub nsw i32 %309, 1
  %311 = sitofp i32 %310 to double
  %312 = load double, ptr %40, align 8, !tbaa !9
  %313 = getelementptr inbounds %class.spatial_region, ptr %56, i32 0, i32 4
  %314 = load double, ptr %313, align 8, !tbaa !138
  %315 = fdiv double %312, %314
  %316 = fdiv double %311, %315
  %317 = load double, ptr %49, align 8, !tbaa !9
  %318 = fmul double %317, %316
  store double %318, ptr %49, align 8, !tbaa !9
  br label %319

319:                                              ; preds = %302, %287, %284
  %320 = load double, ptr %40, align 8, !tbaa !9
  %321 = fcmp oge double %320, 0.000000e+00
  br i1 %321, label %322, label %354

322:                                              ; preds = %319
  %323 = load double, ptr %30, align 8, !tbaa !9
  %324 = getelementptr inbounds %class.spatial_region, ptr %56, i32 0, i32 4
  %325 = load double, ptr %324, align 8, !tbaa !138
  %326 = fdiv double %323, %325
  %327 = fptosi double %326 to i32
  %328 = sub nsw i32 %327, 2
  %329 = load i32, ptr %48, align 4, !tbaa !11
  %330 = sub nsw i32 %328, %329
  %331 = sitofp i32 %330 to double
  %332 = load double, ptr %40, align 8, !tbaa !9
  %333 = getelementptr inbounds %class.spatial_region, ptr %56, i32 0, i32 4
  %334 = load double, ptr %333, align 8, !tbaa !138
  %335 = fdiv double %332, %334
  %336 = fcmp olt double %331, %335
  br i1 %336, label %337, label %354

337:                                              ; preds = %322
  %338 = load double, ptr %30, align 8, !tbaa !9
  %339 = getelementptr inbounds %class.spatial_region, ptr %56, i32 0, i32 4
  %340 = load double, ptr %339, align 8, !tbaa !138
  %341 = fdiv double %338, %340
  %342 = fptosi double %341 to i32
  %343 = sub nsw i32 %342, 2
  %344 = load i32, ptr %48, align 4, !tbaa !11
  %345 = sub nsw i32 %343, %344
  %346 = sitofp i32 %345 to double
  %347 = load double, ptr %40, align 8, !tbaa !9
  %348 = getelementptr inbounds %class.spatial_region, ptr %56, i32 0, i32 4
  %349 = load double, ptr %348, align 8, !tbaa !138
  %350 = fdiv double %347, %349
  %351 = fdiv double %346, %350
  %352 = load double, ptr %49, align 8, !tbaa !9
  %353 = fmul double %352, %351
  store double %353, ptr %49, align 8, !tbaa !9
  br label %354

354:                                              ; preds = %337, %322, %319
  %355 = load i32, ptr %46, align 4, !tbaa !11
  %356 = getelementptr inbounds %struct.int_vector3d, ptr %41, i32 0, i32 0
  store i32 %355, ptr %356, align 4, !tbaa !15
  %357 = load i32, ptr %48, align 4, !tbaa !11
  %358 = getelementptr inbounds %struct.int_vector3d, ptr %41, i32 0, i32 1
  store i32 %357, ptr %358, align 4, !tbaa !17
  %359 = load i32, ptr %50, align 4, !tbaa !11
  %360 = getelementptr inbounds %struct.int_vector3d, ptr %41, i32 0, i32 2
  store i32 %359, ptr %360, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 8, ptr %53) #5
  %361 = load double, ptr %34, align 8, !tbaa !9
  %362 = load double, ptr %34, align 8, !tbaa !9
  %363 = load double, ptr %34, align 8, !tbaa !9
  %364 = fneg double %362
  %365 = call double @llvm.fmuladd.f64(double %364, double %363, double 1.000000e+00)
  %366 = call double @sqrt(double noundef %365) #5
  %367 = fdiv double %361, %366
  store double %367, ptr %53, align 8, !tbaa !9
  %368 = load double, ptr %28, align 8, !tbaa !9
  %369 = fcmp oge double %368, 0.000000e+00
  br i1 %369, label %370, label %453

370:                                              ; preds = %354
  %371 = load i32, ptr %46, align 4, !tbaa !11
  %372 = load double, ptr %22, align 8, !tbaa !9
  %373 = load double, ptr %28, align 8, !tbaa !9
  %374 = fadd double %372, %373
  %375 = getelementptr inbounds %class.spatial_region, ptr %56, i32 0, i32 3
  %376 = load double, ptr %375, align 8, !tbaa !19
  %377 = fdiv double %374, %376
  %378 = fptosi double %377 to i32
  %379 = icmp sge i32 %371, %378
  br i1 %379, label %380, label %401

380:                                              ; preds = %370
  %381 = load double, ptr %49, align 8, !tbaa !9
  %382 = load double, ptr %53, align 8, !tbaa !9
  %383 = load double, ptr %33, align 8, !tbaa !9
  call void @_ZN14spatial_region22fill_cell_by_particlesEdR12int_vector3dS1_ddddd(ptr noundef nonnull align 8 dereferenceable(608) %56, double noundef -1.000000e+00, ptr noundef nonnull align 4 dereferenceable(12) %41, ptr noundef nonnull align 4 dereferenceable(12) %42, double noundef %381, double noundef %382, double noundef 0.000000e+00, double noundef 0.000000e+00, double noundef %383)
  %384 = load i32, ptr %26, align 4, !tbaa !11
  %385 = icmp eq i32 %384, 1
  br i1 %385, label %386, label %393

386:                                              ; preds = %380
  %387 = load double, ptr %27, align 8, !tbaa !9
  %388 = load double, ptr %49, align 8, !tbaa !9
  %389 = load double, ptr %53, align 8, !tbaa !9
  %390 = load double, ptr %33, align 8, !tbaa !9
  %391 = load double, ptr %27, align 8, !tbaa !9
  %392 = fmul double %390, %391
  call void @_ZN14spatial_region22fill_cell_by_particlesEdR12int_vector3dS1_ddddd(ptr noundef nonnull align 8 dereferenceable(608) %56, double noundef %387, ptr noundef nonnull align 4 dereferenceable(12) %41, ptr noundef nonnull align 4 dereferenceable(12) %42, double noundef %388, double noundef %389, double noundef 0.000000e+00, double noundef 0.000000e+00, double noundef %392)
  br label %393

393:                                              ; preds = %386, %380
  %394 = load i32, ptr %26, align 4, !tbaa !11
  %395 = icmp eq i32 %394, 2
  br i1 %395, label %396, label %400

396:                                              ; preds = %393
  %397 = load double, ptr %49, align 8, !tbaa !9
  %398 = load double, ptr %53, align 8, !tbaa !9
  %399 = load double, ptr %33, align 8, !tbaa !9
  call void @_ZN14spatial_region22fill_cell_by_particlesEdR12int_vector3dS1_ddddd(ptr noundef nonnull align 8 dereferenceable(608) %56, double noundef 1.000000e+00, ptr noundef nonnull align 4 dereferenceable(12) %41, ptr noundef nonnull align 4 dereferenceable(12) %42, double noundef %397, double noundef %398, double noundef 0.000000e+00, double noundef 0.000000e+00, double noundef %399)
  br label %400

400:                                              ; preds = %396, %393
  br label %452

401:                                              ; preds = %370
  %402 = load double, ptr %49, align 8, !tbaa !9
  %403 = load i32, ptr %46, align 4, !tbaa !11
  %404 = sitofp i32 %403 to double
  %405 = getelementptr inbounds %class.spatial_region, ptr %56, i32 0, i32 3
  %406 = load double, ptr %405, align 8, !tbaa !19
  %407 = load double, ptr %22, align 8, !tbaa !9
  %408 = fneg double %407
  %409 = call double @llvm.fmuladd.f64(double %404, double %406, double %408)
  %410 = fmul double %402, %409
  %411 = load double, ptr %28, align 8, !tbaa !9
  %412 = fdiv double %410, %411
  %413 = load double, ptr %53, align 8, !tbaa !9
  %414 = load double, ptr %33, align 8, !tbaa !9
  call void @_ZN14spatial_region22fill_cell_by_particlesEdR12int_vector3dS1_ddddd(ptr noundef nonnull align 8 dereferenceable(608) %56, double noundef -1.000000e+00, ptr noundef nonnull align 4 dereferenceable(12) %41, ptr noundef nonnull align 4 dereferenceable(12) %42, double noundef %412, double noundef %413, double noundef 0.000000e+00, double noundef 0.000000e+00, double noundef %414)
  %415 = load i32, ptr %26, align 4, !tbaa !11
  %416 = icmp eq i32 %415, 1
  br i1 %416, label %417, label %434

417:                                              ; preds = %401
  %418 = load double, ptr %27, align 8, !tbaa !9
  %419 = load double, ptr %49, align 8, !tbaa !9
  %420 = load i32, ptr %46, align 4, !tbaa !11
  %421 = sitofp i32 %420 to double
  %422 = getelementptr inbounds %class.spatial_region, ptr %56, i32 0, i32 3
  %423 = load double, ptr %422, align 8, !tbaa !19
  %424 = load double, ptr %22, align 8, !tbaa !9
  %425 = fneg double %424
  %426 = call double @llvm.fmuladd.f64(double %421, double %423, double %425)
  %427 = fmul double %419, %426
  %428 = load double, ptr %28, align 8, !tbaa !9
  %429 = fdiv double %427, %428
  %430 = load double, ptr %53, align 8, !tbaa !9
  %431 = load double, ptr %33, align 8, !tbaa !9
  %432 = load double, ptr %27, align 8, !tbaa !9
  %433 = fmul double %431, %432
  call void @_ZN14spatial_region22fill_cell_by_particlesEdR12int_vector3dS1_ddddd(ptr noundef nonnull align 8 dereferenceable(608) %56, double noundef %418, ptr noundef nonnull align 4 dereferenceable(12) %41, ptr noundef nonnull align 4 dereferenceable(12) %42, double noundef %429, double noundef %430, double noundef 0.000000e+00, double noundef 0.000000e+00, double noundef %433)
  br label %434

434:                                              ; preds = %417, %401
  %435 = load i32, ptr %26, align 4, !tbaa !11
  %436 = icmp eq i32 %435, 2
  br i1 %436, label %437, label %451

437:                                              ; preds = %434
  %438 = load double, ptr %49, align 8, !tbaa !9
  %439 = load i32, ptr %46, align 4, !tbaa !11
  %440 = sitofp i32 %439 to double
  %441 = getelementptr inbounds %class.spatial_region, ptr %56, i32 0, i32 3
  %442 = load double, ptr %441, align 8, !tbaa !19
  %443 = load double, ptr %22, align 8, !tbaa !9
  %444 = fneg double %443
  %445 = call double @llvm.fmuladd.f64(double %440, double %442, double %444)
  %446 = fmul double %438, %445
  %447 = load double, ptr %28, align 8, !tbaa !9
  %448 = fdiv double %446, %447
  %449 = load double, ptr %53, align 8, !tbaa !9
  %450 = load double, ptr %33, align 8, !tbaa !9
  call void @_ZN14spatial_region22fill_cell_by_particlesEdR12int_vector3dS1_ddddd(ptr noundef nonnull align 8 dereferenceable(608) %56, double noundef 1.000000e+00, ptr noundef nonnull align 4 dereferenceable(12) %41, ptr noundef nonnull align 4 dereferenceable(12) %42, double noundef %448, double noundef %449, double noundef 0.000000e+00, double noundef 0.000000e+00, double noundef %450)
  br label %451

451:                                              ; preds = %437, %434
  br label %452

452:                                              ; preds = %451, %400
  br label %539

453:                                              ; preds = %354
  %454 = load i32, ptr %46, align 4, !tbaa !11
  %455 = load double, ptr %22, align 8, !tbaa !9
  %456 = load double, ptr %28, align 8, !tbaa !9
  %457 = fsub double %455, %456
  %458 = getelementptr inbounds %class.spatial_region, ptr %56, i32 0, i32 3
  %459 = load double, ptr %458, align 8, !tbaa !19
  %460 = fdiv double %457, %459
  %461 = fptosi double %460 to i32
  %462 = icmp sge i32 %454, %461
  br i1 %462, label %463, label %484

463:                                              ; preds = %453
  %464 = load double, ptr %49, align 8, !tbaa !9
  %465 = load double, ptr %53, align 8, !tbaa !9
  %466 = load double, ptr %33, align 8, !tbaa !9
  call void @_ZN14spatial_region22fill_cell_by_particlesEdR12int_vector3dS1_ddddd(ptr noundef nonnull align 8 dereferenceable(608) %56, double noundef -1.000000e+00, ptr noundef nonnull align 4 dereferenceable(12) %41, ptr noundef nonnull align 4 dereferenceable(12) %42, double noundef %464, double noundef %465, double noundef 0.000000e+00, double noundef 0.000000e+00, double noundef %466)
  %467 = load i32, ptr %26, align 4, !tbaa !11
  %468 = icmp eq i32 %467, 1
  br i1 %468, label %469, label %476

469:                                              ; preds = %463
  %470 = load double, ptr %27, align 8, !tbaa !9
  %471 = load double, ptr %49, align 8, !tbaa !9
  %472 = load double, ptr %53, align 8, !tbaa !9
  %473 = load double, ptr %33, align 8, !tbaa !9
  %474 = load double, ptr %27, align 8, !tbaa !9
  %475 = fmul double %473, %474
  call void @_ZN14spatial_region22fill_cell_by_particlesEdR12int_vector3dS1_ddddd(ptr noundef nonnull align 8 dereferenceable(608) %56, double noundef %470, ptr noundef nonnull align 4 dereferenceable(12) %41, ptr noundef nonnull align 4 dereferenceable(12) %42, double noundef %471, double noundef %472, double noundef 0.000000e+00, double noundef 0.000000e+00, double noundef %475)
  br label %476

476:                                              ; preds = %469, %463
  %477 = load i32, ptr %26, align 4, !tbaa !11
  %478 = icmp eq i32 %477, 2
  br i1 %478, label %479, label %483

479:                                              ; preds = %476
  %480 = load double, ptr %49, align 8, !tbaa !9
  %481 = load double, ptr %53, align 8, !tbaa !9
  %482 = load double, ptr %33, align 8, !tbaa !9
  call void @_ZN14spatial_region22fill_cell_by_particlesEdR12int_vector3dS1_ddddd(ptr noundef nonnull align 8 dereferenceable(608) %56, double noundef 1.000000e+00, ptr noundef nonnull align 4 dereferenceable(12) %41, ptr noundef nonnull align 4 dereferenceable(12) %42, double noundef %480, double noundef %481, double noundef 0.000000e+00, double noundef 0.000000e+00, double noundef %482)
  br label %483

483:                                              ; preds = %479, %476
  br label %538

484:                                              ; preds = %453
  %485 = load double, ptr %49, align 8, !tbaa !9
  %486 = load i32, ptr %46, align 4, !tbaa !11
  %487 = sitofp i32 %486 to double
  %488 = getelementptr inbounds %class.spatial_region, ptr %56, i32 0, i32 3
  %489 = load double, ptr %488, align 8, !tbaa !19
  %490 = load double, ptr %22, align 8, !tbaa !9
  %491 = fneg double %490
  %492 = call double @llvm.fmuladd.f64(double %487, double %489, double %491)
  %493 = load double, ptr %28, align 8, !tbaa !9
  %494 = fdiv double %492, %493
  %495 = fadd double 1.000000e+00, %494
  %496 = fmul double %485, %495
  %497 = load double, ptr %53, align 8, !tbaa !9
  %498 = load double, ptr %33, align 8, !tbaa !9
  call void @_ZN14spatial_region22fill_cell_by_particlesEdR12int_vector3dS1_ddddd(ptr noundef nonnull align 8 dereferenceable(608) %56, double noundef -1.000000e+00, ptr noundef nonnull align 4 dereferenceable(12) %41, ptr noundef nonnull align 4 dereferenceable(12) %42, double noundef %496, double noundef %497, double noundef 0.000000e+00, double noundef 0.000000e+00, double noundef %498)
  %499 = load i32, ptr %26, align 4, !tbaa !11
  %500 = icmp eq i32 %499, 1
  br i1 %500, label %501, label %519

501:                                              ; preds = %484
  %502 = load double, ptr %27, align 8, !tbaa !9
  %503 = load double, ptr %49, align 8, !tbaa !9
  %504 = load i32, ptr %46, align 4, !tbaa !11
  %505 = sitofp i32 %504 to double
  %506 = getelementptr inbounds %class.spatial_region, ptr %56, i32 0, i32 3
  %507 = load double, ptr %506, align 8, !tbaa !19
  %508 = load double, ptr %22, align 8, !tbaa !9
  %509 = fneg double %508
  %510 = call double @llvm.fmuladd.f64(double %505, double %507, double %509)
  %511 = load double, ptr %28, align 8, !tbaa !9
  %512 = fdiv double %510, %511
  %513 = fadd double 1.000000e+00, %512
  %514 = fmul double %503, %513
  %515 = load double, ptr %53, align 8, !tbaa !9
  %516 = load double, ptr %33, align 8, !tbaa !9
  %517 = load double, ptr %27, align 8, !tbaa !9
  %518 = fmul double %516, %517
  call void @_ZN14spatial_region22fill_cell_by_particlesEdR12int_vector3dS1_ddddd(ptr noundef nonnull align 8 dereferenceable(608) %56, double noundef %502, ptr noundef nonnull align 4 dereferenceable(12) %41, ptr noundef nonnull align 4 dereferenceable(12) %42, double noundef %514, double noundef %515, double noundef 0.000000e+00, double noundef 0.000000e+00, double noundef %518)
  br label %519

519:                                              ; preds = %501, %484
  %520 = load i32, ptr %26, align 4, !tbaa !11
  %521 = icmp eq i32 %520, 2
  br i1 %521, label %522, label %537

522:                                              ; preds = %519
  %523 = load double, ptr %49, align 8, !tbaa !9
  %524 = load i32, ptr %46, align 4, !tbaa !11
  %525 = sitofp i32 %524 to double
  %526 = getelementptr inbounds %class.spatial_region, ptr %56, i32 0, i32 3
  %527 = load double, ptr %526, align 8, !tbaa !19
  %528 = load double, ptr %22, align 8, !tbaa !9
  %529 = fneg double %528
  %530 = call double @llvm.fmuladd.f64(double %525, double %527, double %529)
  %531 = load double, ptr %28, align 8, !tbaa !9
  %532 = fdiv double %530, %531
  %533 = fadd double 1.000000e+00, %532
  %534 = fmul double %523, %533
  %535 = load double, ptr %53, align 8, !tbaa !9
  %536 = load double, ptr %33, align 8, !tbaa !9
  call void @_ZN14spatial_region22fill_cell_by_particlesEdR12int_vector3dS1_ddddd(ptr noundef nonnull align 8 dereferenceable(608) %56, double noundef 1.000000e+00, ptr noundef nonnull align 4 dereferenceable(12) %41, ptr noundef nonnull align 4 dereferenceable(12) %42, double noundef %534, double noundef %535, double noundef 0.000000e+00, double noundef 0.000000e+00, double noundef %536)
  br label %537

537:                                              ; preds = %522, %519
  br label %538

538:                                              ; preds = %537, %483
  br label %539

539:                                              ; preds = %538, %452
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #5
  br label %540

540:                                              ; preds = %539
  %541 = load i32, ptr %50, align 4, !tbaa !11
  %542 = add nsw i32 %541, 1
  store i32 %542, ptr %50, align 4, !tbaa !11
  br label %193, !llvm.loop !142

543:                                              ; preds = %202
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #5
  br label %544

544:                                              ; preds = %543
  %545 = load i32, ptr %48, align 4, !tbaa !11
  %546 = add nsw i32 %545, 1
  store i32 %546, ptr %48, align 4, !tbaa !11
  br label %149, !llvm.loop !144

547:                                              ; preds = %158
  br label %548

548:                                              ; preds = %547
  %549 = load i32, ptr %46, align 4, !tbaa !11
  %550 = add nsw i32 %549, 1
  store i32 %550, ptr %46, align 4, !tbaa !11
  br label %137, !llvm.loop !145

551:                                              ; preds = %141
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #5
  call void @llvm.lifetime.end.p0(i64 12, ptr %42) #5
  call void @llvm.lifetime.end.p0(i64 12, ptr %41) #5
  ret void
}

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


; 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.int_vector3d = type { i32, i32, i32 }

; 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 nofree nounwind willreturn memory(write)
declare double @sqrt(double noundef) local_unnamed_addr #1

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN14spatial_region4filmEddddiddddddddbiiibd(ptr noundef nonnull align 8 dereferenceable(608) %0, double noundef %1, double noundef %2, double noundef %3, double noundef %4, i32 noundef %5, double noundef %6, double noundef %7, double noundef %8, double noundef %9, double noundef %10, double noundef %11, double noundef %12, double noundef %13, i1 noundef zeroext %14, i32 noundef %15, i32 noundef %16, i32 noundef %17, i1 noundef zeroext %18, double noundef %19) local_unnamed_addr #3 align 2 {
  %21 = alloca %struct.int_vector3d, align 4
  %22 = alloca %struct.int_vector3d, align 4
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %21) #6
  call void @_ZN12int_vector3dC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %21)
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %22) #6
  call void @_ZN12int_vector3dC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %22)
  store i32 %15, ptr %22, align 4, !tbaa !5
  %23 = getelementptr inbounds i8, ptr %22, i64 4
  store i32 %16, ptr %23, align 4, !tbaa !10
  %24 = getelementptr inbounds i8, ptr %22, i64 8
  store i32 %17, ptr %24, align 4, !tbaa !11
  %25 = getelementptr inbounds i8, ptr %0, i64 16
  %26 = load double, ptr %25, align 8, !tbaa !12
  %27 = fdiv double %2, %26
  %28 = fptosi double %27 to i32
  br i1 %18, label %29, label %33

29:                                               ; preds = %20
  %30 = load i32, ptr %0, align 8, !tbaa !130
  %31 = add nsw i32 %30, -3
  %32 = add nsw i32 %30, -2
  %.not = icmp sgt i32 %32, %28
  %spec.select175 = select i1 %.not, i32 %31, i32 %32
  br label %37

33:                                               ; preds = %20
  %34 = fdiv double %1, %26
  %35 = fptosi double %34 to i32
  %spec.store.select = call i32 @llvm.smax.i32(i32 %35, i32 0)
  %spec.store.select1 = call i32 @llvm.smax.i32(i32 %28, i32 0)
  %36 = load i32, ptr %0, align 8, !tbaa !130
  %spec.select = call i32 @llvm.smin.i32(i32 %spec.store.select, i32 %36)
  %spec.select176 = call i32 @llvm.smin.i32(i32 %spec.store.select1, i32 %36)
  br label %37

37:                                               ; preds = %33, %29
  %.0155 = phi i32 [ %spec.select175, %29 ], [ %spec.select176, %33 ]
  %.1 = phi i32 [ %31, %29 ], [ %spec.select, %33 ]
  %38 = getelementptr inbounds i8, ptr %0, i64 24
  %39 = load double, ptr %38, align 8, !tbaa !131
  %40 = fdiv double %9, %39
  %41 = fptosi double %40 to i32
  %42 = fdiv double %8, %39
  %43 = fptosi double %42 to i32
  %reass.sub = sub i32 %41, %43
  %44 = add i32 %reass.sub, -3
  %45 = sitofp i32 %44 to double
  %46 = icmp slt i32 %.1, %.0155
  br i1 %46, label %.lr.ph190, label %._crit_edge191

.lr.ph190:                                        ; preds = %37
  %47 = getelementptr inbounds i8, ptr %0, i64 32
  %48 = getelementptr inbounds i8, ptr %0, i64 4
  %49 = getelementptr inbounds i8, ptr %0, i64 8
  %50 = fcmp ult double %19, 0.000000e+00
  %51 = getelementptr inbounds i8, ptr %21, i64 4
  %52 = getelementptr inbounds i8, ptr %21, i64 8
  %53 = fneg double %13
  %54 = call double @llvm.fmuladd.f64(double %53, double %13, double 1.000000e+00)
  %55 = fcmp ult double %7, 0.000000e+00
  %56 = fadd double %1, %7
  %57 = fmul double %6, %12
  %58 = fneg double %1
  %59 = fsub double %1, %7
  %60 = insertelement <2 x double> poison, double %8, i64 0
  %61 = insertelement <2 x double> %60, double %9, i64 1
  %62 = insertelement <2 x double> poison, double %4, i64 0
  %63 = insertelement <2 x double> %62, double %3, i64 1
  %64 = insertelement <2 x double> poison, double %45, i64 0
  %65 = shufflevector <2 x double> %64, <2 x double> poison, <2 x i32> zeroinitializer
  %66 = insertelement <2 x double> poison, double %10, i64 0
  %67 = insertelement <2 x double> %66, double %11, i64 1
  br label %68

._crit_edge191:                                   ; preds = %._crit_edge, %37
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %22) #6
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %21) #6
  ret void

68:                                               ; preds = %.lr.ph190, %._crit_edge
  %69 = phi double [ %39, %.lr.ph190 ], [ %88, %._crit_edge ]
  %70 = phi double [ %39, %.lr.ph190 ], [ %89, %._crit_edge ]
  %.0156188 = phi i32 [ %.1, %.lr.ph190 ], [ %90, %._crit_edge ]
  %71 = insertelement <2 x double> poison, double %70, i64 0
  %72 = shufflevector <2 x double> %71, <2 x double> poison, <2 x i32> zeroinitializer
  %73 = fdiv <2 x double> %61, %72
  %74 = fptosi <2 x double> %73 to <2 x i32>
  %75 = add nsw <2 x i32> %74, <i32 1, i32 -1>
  %shift = shufflevector <2 x i32> %75, <2 x i32> poison, <2 x i32> <i32 1, i32 poison>
  %76 = icmp slt <2 x i32> %75, %shift
  %77 = extractelement <2 x i1> %76, i64 0
  br i1 %77, label %.lr.ph187, label %._crit_edge

.lr.ph187:                                        ; preds = %68
  %78 = extractelement <2 x i32> %75, i64 0
  %79 = sitofp i32 %.0156188 to double
  %.pre = load double, ptr %47, align 8, !tbaa !132
  %80 = extractelement <2 x i32> %74, i64 0
  %81 = extractelement <2 x i32> %74, i64 1
  br label %91

.loopexit.loopexit:                               ; preds = %217
  %.pre194 = load double, ptr %38, align 8, !tbaa !131
  br label %.loopexit

.loopexit:                                        ; preds = %.loopexit.loopexit, %91
  %82 = phi double [ %.pre194, %.loopexit.loopexit ], [ %92, %91 ]
  %83 = phi double [ %218, %.loopexit.loopexit ], [ %93, %91 ]
  %.0160 = add nsw i32 %.0160185, 1
  %84 = fdiv double %9, %82
  %85 = fptosi double %84 to i32
  %86 = add nsw i32 %85, -1
  %87 = icmp slt i32 %.0160, %86
  br i1 %87, label %91, label %._crit_edge, !llvm.loop !133

._crit_edge:                                      ; preds = %.loopexit, %68
  %88 = phi double [ %69, %68 ], [ %82, %.loopexit ]
  %89 = phi double [ %70, %68 ], [ %82, %.loopexit ]
  %90 = add i32 %.0156188, 1
  %exitcond.not = icmp eq i32 %90, %.0155
  br i1 %exitcond.not, label %._crit_edge191, label %68, !llvm.loop !135

91:                                               ; preds = %.lr.ph187, %.loopexit
  %92 = phi double [ %69, %.lr.ph187 ], [ %82, %.loopexit ]
  %93 = phi double [ %.pre, %.lr.ph187 ], [ %83, %.loopexit ]
  %94 = phi i32 [ %81, %.lr.ph187 ], [ %85, %.loopexit ]
  %95 = phi double [ %70, %.lr.ph187 ], [ %82, %.loopexit ]
  %.0160185 = phi i32 [ %78, %.lr.ph187 ], [ %.0160, %.loopexit ]
  %.0160.in184 = phi i32 [ %80, %.lr.ph187 ], [ %.0160185, %.loopexit ]
  %96 = insertelement <2 x double> poison, double %93, i64 0
  %97 = shufflevector <2 x double> %96, <2 x double> poison, <2 x i32> zeroinitializer
  %98 = fdiv <2 x double> %67, %97
  %99 = fptosi <2 x double> %98 to <2 x i32>
  %100 = add nsw <2 x i32> %99, <i32 1, i32 -1>
  %shift197 = shufflevector <2 x i32> %100, <2 x i32> poison, <2 x i32> <i32 1, i32 poison>
  %101 = icmp slt <2 x i32> %100, %shift197
  %102 = extractelement <2 x i1> %101, i64 0
  br i1 %102, label %.lr.ph, label %.loopexit

.lr.ph:                                           ; preds = %91
  %103 = extractelement <2 x i32> %100, i64 0
  %104 = fdiv double %8, %95
  %105 = fptosi double %104 to i32
  %106 = sub i32 %.0160.in184, %105
  %reass.sub192 = sub i32 %94, %.0160.in184
  %107 = add i32 %reass.sub192, -3
  %108 = insertelement <2 x i32> poison, i32 %106, i64 0
  %109 = insertelement <2 x i32> %108, i32 %107, i64 1
  %110 = sitofp <2 x i32> %109 to <2 x double>
  %111 = fmul <2 x double> %63, %110
  %112 = fdiv <2 x double> %111, %65
  %shift198 = shufflevector <2 x double> %112, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %113 = fadd <2 x double> %112, %shift198
  %114 = extractelement <2 x double> %113, i64 0
  %115 = sitofp i32 %.0160185 to double
  br label %116

116:                                              ; preds = %.lr.ph, %217
  %.0157181 = phi i32 [ %103, %.lr.ph ], [ %.0157, %217 ]
  %.0158180 = phi double [ %114, %.lr.ph ], [ %.3, %217 ]
  br i1 %14, label %117, label %151

117:                                              ; preds = %116
  %118 = load double, ptr %38, align 8, !tbaa !131
  %119 = load i32, ptr %48, align 4, !tbaa !136
  %120 = sitofp i32 %119 to double
  %121 = fmul double %118, %120
  %122 = fmul double %121, 5.000000e-01
  %123 = fneg double %122
  %124 = call double @llvm.fmuladd.f64(double %115, double %118, double %123)
  %125 = fdiv double %124, %122
  %126 = fmul double %125, 0x3FF921FB54442D18
  %127 = fmul double %125, %126
  %128 = fmul double %125, %127
  %129 = fmul double %125, %128
  %130 = fmul double %125, %129
  %131 = call double @cos(double noundef %130) #6
  %132 = fmul double %131, %131
  %133 = sitofp i32 %.0157181 to double
  %134 = load double, ptr %47, align 8, !tbaa !132
  %135 = load i32, ptr %49, align 8, !tbaa !137
  %136 = sitofp i32 %135 to double
  %137 = fmul double %134, %136
  %138 = fmul double %137, 5.000000e-01
  %139 = fneg double %138
  %140 = call double @llvm.fmuladd.f64(double %133, double %134, double %139)
  %141 = fdiv double %140, %138
  %142 = fmul double %141, 0x3FF921FB54442D18
  %143 = fmul double %141, %142
  %144 = fmul double %141, %143
  %145 = fmul double %141, %144
  %146 = fmul double %141, %145
  %147 = call double @cos(double noundef %146) #6
  %148 = fmul double %147, %147
  %149 = fmul double %132, %148
  %150 = fmul double %.0158180, %149
  br label %151

151:                                              ; preds = %117, %116
  %.1159 = phi double [ %150, %117 ], [ %.0158180, %116 ]
  br i1 %50, label %170, label %152

152:                                              ; preds = %151
  %153 = load double, ptr %38, align 8, !tbaa !131
  %154 = fdiv double %8, %153
  %155 = fptosi double %154 to i32
  %156 = sub i32 %.0160.in184, %155
  %157 = sitofp i32 %156 to double
  %158 = fdiv double %19, %153
  %159 = fcmp ogt double %158, %157
  %160 = fdiv double %157, %158
  %161 = fmul double %.1159, %160
  %.2.ph = select i1 %159, double %161, double %.1159
  %162 = fdiv double %9, %153
  %163 = fptosi double %162 to i32
  %reass.sub193 = sub i32 %163, %.0160.in184
  %164 = add i32 %reass.sub193, -3
  %165 = sitofp i32 %164 to double
  %166 = fcmp ogt double %158, %165
  br i1 %166, label %167, label %170

167:                                              ; preds = %152
  %168 = fdiv double %165, %158
  %169 = fmul double %168, %.2.ph
  br label %170

170:                                              ; preds = %151, %167, %152
  %.3 = phi double [ %169, %167 ], [ %.2.ph, %152 ], [ %.1159, %151 ]
  store i32 %.0156188, ptr %21, align 4, !tbaa !5
  store i32 %.0160185, ptr %51, align 4, !tbaa !10
  store i32 %.0157181, ptr %52, align 4, !tbaa !11
  %171 = call double @sqrt(double noundef %54) #6
  %172 = fdiv double %13, %171
  %173 = load double, ptr %25, align 8, !tbaa !12
  br i1 %55, label %194, label %174

174:                                              ; preds = %170
  %175 = fdiv double %56, %173
  %176 = fptosi double %175 to i32
  %.not174 = icmp slt i32 %.0156188, %176
  br i1 %.not174, label %180, label %177

177:                                              ; preds = %174
  call void @_ZN14spatial_region22fill_cell_by_particlesEdR12int_vector3dS1_ddddd(ptr noundef nonnull align 8 dereferenceable(608) %0, double noundef -1.000000e+00, ptr noundef nonnull align 4 dereferenceable(12) %21, ptr noundef nonnull align 4 dereferenceable(12) %22, double noundef %.3, double noundef %172, double noundef 0.000000e+00, double noundef 0.000000e+00, double noundef %12)
  switch i32 %5, label %217 [
    i32 1, label %178
    i32 2, label %179
  ]

178:                                              ; preds = %177
  call void @_ZN14spatial_region22fill_cell_by_particlesEdR12int_vector3dS1_ddddd(ptr noundef nonnull align 8 dereferenceable(608) %0, double noundef %6, ptr noundef nonnull align 4 dereferenceable(12) %21, ptr noundef nonnull align 4 dereferenceable(12) %22, double noundef %.3, double noundef %172, double noundef 0.000000e+00, double noundef 0.000000e+00, double noundef %57)
  br label %217

179:                                              ; preds = %177
  call void @_ZN14spatial_region22fill_cell_by_particlesEdR12int_vector3dS1_ddddd(ptr noundef nonnull align 8 dereferenceable(608) %0, double noundef 1.000000e+00, ptr noundef nonnull align 4 dereferenceable(12) %21, ptr noundef nonnull align 4 dereferenceable(12) %22, double noundef %.3, double noundef %172, double noundef 0.000000e+00, double noundef 0.000000e+00, double noundef %12)
  br label %217

180:                                              ; preds = %174
  %181 = call double @llvm.fmuladd.f64(double %79, double %173, double %58)
  %182 = fmul double %.3, %181
  %183 = fdiv double %182, %7
  call void @_ZN14spatial_region22fill_cell_by_particlesEdR12int_vector3dS1_ddddd(ptr noundef nonnull align 8 dereferenceable(608) %0, double noundef -1.000000e+00, ptr noundef nonnull align 4 dereferenceable(12) %21, ptr noundef nonnull align 4 dereferenceable(12) %22, double noundef %183, double noundef %172, double noundef 0.000000e+00, double noundef 0.000000e+00, double noundef %12)
  switch i32 %5, label %217 [
    i32 1, label %184
    i32 2, label %189
  ]

184:                                              ; preds = %180
  %185 = load double, ptr %25, align 8, !tbaa !12
  %186 = call double @llvm.fmuladd.f64(double %79, double %185, double %58)
  %187 = fmul double %.3, %186
  %188 = fdiv double %187, %7
  call void @_ZN14spatial_region22fill_cell_by_particlesEdR12int_vector3dS1_ddddd(ptr noundef nonnull align 8 dereferenceable(608) %0, double noundef %6, ptr noundef nonnull align 4 dereferenceable(12) %21, ptr noundef nonnull align 4 dereferenceable(12) %22, double noundef %188, double noundef %172, double noundef 0.000000e+00, double noundef 0.000000e+00, double noundef %57)
  br label %217

189:                                              ; preds = %180
  %190 = load double, ptr %25, align 8, !tbaa !12
  %191 = call double @llvm.fmuladd.f64(double %79, double %190, double %58)
  %192 = fmul double %.3, %191
  %193 = fdiv double %192, %7
  call void @_ZN14spatial_region22fill_cell_by_particlesEdR12int_vector3dS1_ddddd(ptr noundef nonnull align 8 dereferenceable(608) %0, double noundef 1.000000e+00, ptr noundef nonnull align 4 dereferenceable(12) %21, ptr noundef nonnull align 4 dereferenceable(12) %22, double noundef %193, double noundef %172, double noundef 0.000000e+00, double noundef 0.000000e+00, double noundef %12)
  br label %217

194:                                              ; preds = %170
  %195 = fdiv double %59, %173
  %196 = fptosi double %195 to i32
  %.not173 = icmp slt i32 %.0156188, %196
  br i1 %.not173, label %200, label %197

197:                                              ; preds = %194
  call void @_ZN14spatial_region22fill_cell_by_particlesEdR12int_vector3dS1_ddddd(ptr noundef nonnull align 8 dereferenceable(608) %0, double noundef -1.000000e+00, ptr noundef nonnull align 4 dereferenceable(12) %21, ptr noundef nonnull align 4 dereferenceable(12) %22, double noundef %.3, double noundef %172, double noundef 0.000000e+00, double noundef 0.000000e+00, double noundef %12)
  switch i32 %5, label %217 [
    i32 1, label %198
    i32 2, label %199
  ]

198:                                              ; preds = %197
  call void @_ZN14spatial_region22fill_cell_by_particlesEdR12int_vector3dS1_ddddd(ptr noundef nonnull align 8 dereferenceable(608) %0, double noundef %6, ptr noundef nonnull align 4 dereferenceable(12) %21, ptr noundef nonnull align 4 dereferenceable(12) %22, double noundef %.3, double noundef %172, double noundef 0.000000e+00, double noundef 0.000000e+00, double noundef %57)
  br label %217

199:                                              ; preds = %197
  call void @_ZN14spatial_region22fill_cell_by_particlesEdR12int_vector3dS1_ddddd(ptr noundef nonnull align 8 dereferenceable(608) %0, double noundef 1.000000e+00, ptr noundef nonnull align 4 dereferenceable(12) %21, ptr noundef nonnull align 4 dereferenceable(12) %22, double noundef %.3, double noundef %172, double noundef 0.000000e+00, double noundef 0.000000e+00, double noundef %12)
  br label %217

200:                                              ; preds = %194
  %201 = call double @llvm.fmuladd.f64(double %79, double %173, double %58)
  %202 = fdiv double %201, %7
  %203 = fadd double %202, 1.000000e+00
  %204 = fmul double %.3, %203
  call void @_ZN14spatial_region22fill_cell_by_particlesEdR12int_vector3dS1_ddddd(ptr noundef nonnull align 8 dereferenceable(608) %0, double noundef -1.000000e+00, ptr noundef nonnull align 4 dereferenceable(12) %21, ptr noundef nonnull align 4 dereferenceable(12) %22, double noundef %204, double noundef %172, double noundef 0.000000e+00, double noundef 0.000000e+00, double noundef %12)
  switch i32 %5, label %217 [
    i32 1, label %205
    i32 2, label %211
  ]

205:                                              ; preds = %200
  %206 = load double, ptr %25, align 8, !tbaa !12
  %207 = call double @llvm.fmuladd.f64(double %79, double %206, double %58)
  %208 = fdiv double %207, %7
  %209 = fadd double %208, 1.000000e+00
  %210 = fmul double %.3, %209
  call void @_ZN14spatial_region22fill_cell_by_particlesEdR12int_vector3dS1_ddddd(ptr noundef nonnull align 8 dereferenceable(608) %0, double noundef %6, ptr noundef nonnull align 4 dereferenceable(12) %21, ptr noundef nonnull align 4 dereferenceable(12) %22, double noundef %210, double noundef %172, double noundef 0.000000e+00, double noundef 0.000000e+00, double noundef %57)
  br label %217

211:                                              ; preds = %200
  %212 = load double, ptr %25, align 8, !tbaa !12
  %213 = call double @llvm.fmuladd.f64(double %79, double %212, double %58)
  %214 = fdiv double %213, %7
  %215 = fadd double %214, 1.000000e+00
  %216 = fmul double %.3, %215
  call void @_ZN14spatial_region22fill_cell_by_particlesEdR12int_vector3dS1_ddddd(ptr noundef nonnull align 8 dereferenceable(608) %0, double noundef 1.000000e+00, ptr noundef nonnull align 4 dereferenceable(12) %21, ptr noundef nonnull align 4 dereferenceable(12) %22, double noundef %216, double noundef %172, double noundef 0.000000e+00, double noundef 0.000000e+00, double noundef %12)
  br label %217

217:                                              ; preds = %205, %198, %184, %178, %200, %197, %180, %177, %199, %211, %179, %189
  %.0157 = add nsw i32 %.0157181, 1
  %218 = load double, ptr %47, align 8, !tbaa !132
  %219 = fdiv double %11, %218
  %220 = fptosi double %219 to i32
  %221 = add nsw i32 %220, -1
  %222 = icmp slt i32 %.0157, %221
  br i1 %222, label %116, label %.loopexit.loopexit, !llvm.loop !138
}

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

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

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

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

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


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