; LLVM IR from FSmallenburg/EDMD :: Multi (mdMulti)

; 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.sparticle = type { double, double, double, double, double, double, double, double, double, [24 x ptr], i8, double, double, double, i8, i32, i32, i32, i32, ptr, ptr, ptr, i8 }
%struct.sevent = type { double, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i8, i32 }

@celllist = external dso_local global ptr, align 8
@xsize = external dso_local global double, align 8
@ysize = external dso_local global double, align 8
@zsize = external dso_local global double, align 8
@hx = external dso_local global double, align 8
@hy = external dso_local global double, align 8
@hz = external dso_local global double, align 8
@cx = external dso_local global i32, align 4
@cy = external dso_local global i32, align 4
@cz = external dso_local global i32, align 4
@icxsize = external dso_local global double, align 8
@icysize = external dso_local global double, align 8
@iczsize = external dso_local global double, align 8
@.str.23 = external hidden unnamed_addr constant [40 x i8], align 1

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

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

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

declare i32 @printf(ptr noundef, ...) #2

; Function Attrs: nounwind uwtable
define dso_local void @makeneighborlist(ptr noundef %0, i32 noundef %1) #3 {
  %3 = alloca ptr, align 8
  %4 = alloca i32, align 4
  %5 = alloca i32, align 4
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca ptr, align 8
  %9 = alloca double, align 8
  %10 = alloca double, align 8
  %11 = alloca double, align 8
  %12 = alloca double, align 8
  %13 = alloca double, align 8
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca ptr, align 8
  store ptr %0, ptr %3, align 8, !tbaa !5
  store i32 %1, ptr %4, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %5) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #5
  %20 = load ptr, ptr %3, align 8, !tbaa !5
  call void @update(ptr noundef %20)
  %21 = load ptr, ptr %3, align 8, !tbaa !5
  %22 = getelementptr inbounds %struct.sparticle, ptr %21, i32 0, i32 0
  %23 = load double, ptr %22, align 8, !tbaa !11
  %24 = load double, ptr @xsize, align 8, !tbaa !14
  %25 = fcmp oge double %23, %24
  br i1 %25, label %26, label %36

26:                                               ; preds = %2
  %27 = load double, ptr @xsize, align 8, !tbaa !14
  %28 = load ptr, ptr %3, align 8, !tbaa !5
  %29 = getelementptr inbounds %struct.sparticle, ptr %28, i32 0, i32 0
  %30 = load double, ptr %29, align 8, !tbaa !11
  %31 = fsub double %30, %27
  store double %31, ptr %29, align 8, !tbaa !11
  %32 = load ptr, ptr %3, align 8, !tbaa !5
  %33 = getelementptr inbounds %struct.sparticle, ptr %32, i32 0, i32 16
  %34 = load i32, ptr %33, align 8, !tbaa !15
  %35 = add nsw i32 %34, 1
  store i32 %35, ptr %33, align 8, !tbaa !15
  br label %52

36:                                               ; preds = %2
  %37 = load ptr, ptr %3, align 8, !tbaa !5
  %38 = getelementptr inbounds %struct.sparticle, ptr %37, i32 0, i32 0
  %39 = load double, ptr %38, align 8, !tbaa !11
  %40 = fcmp olt double %39, 0.000000e+00
  br i1 %40, label %41, label %51

41:                                               ; preds = %36
  %42 = load double, ptr @xsize, align 8, !tbaa !14
  %43 = load ptr, ptr %3, align 8, !tbaa !5
  %44 = getelementptr inbounds %struct.sparticle, ptr %43, i32 0, i32 0
  %45 = load double, ptr %44, align 8, !tbaa !11
  %46 = fadd double %45, %42
  store double %46, ptr %44, align 8, !tbaa !11
  %47 = load ptr, ptr %3, align 8, !tbaa !5
  %48 = getelementptr inbounds %struct.sparticle, ptr %47, i32 0, i32 16
  %49 = load i32, ptr %48, align 8, !tbaa !15
  %50 = add nsw i32 %49, -1
  store i32 %50, ptr %48, align 8, !tbaa !15
  br label %51

51:                                               ; preds = %41, %36
  br label %52

52:                                               ; preds = %51, %26
  %53 = load ptr, ptr %3, align 8, !tbaa !5
  %54 = getelementptr inbounds %struct.sparticle, ptr %53, i32 0, i32 1
  %55 = load double, ptr %54, align 8, !tbaa !16
  %56 = load double, ptr @ysize, align 8, !tbaa !14
  %57 = fcmp oge double %55, %56
  br i1 %57, label %58, label %68

58:                                               ; preds = %52
  %59 = load double, ptr @ysize, align 8, !tbaa !14
  %60 = load ptr, ptr %3, align 8, !tbaa !5
  %61 = getelementptr inbounds %struct.sparticle, ptr %60, i32 0, i32 1
  %62 = load double, ptr %61, align 8, !tbaa !16
  %63 = fsub double %62, %59
  store double %63, ptr %61, align 8, !tbaa !16
  %64 = load ptr, ptr %3, align 8, !tbaa !5
  %65 = getelementptr inbounds %struct.sparticle, ptr %64, i32 0, i32 17
  %66 = load i32, ptr %65, align 4, !tbaa !17
  %67 = add nsw i32 %66, 1
  store i32 %67, ptr %65, align 4, !tbaa !17
  br label %84

68:                                               ; preds = %52
  %69 = load ptr, ptr %3, align 8, !tbaa !5
  %70 = getelementptr inbounds %struct.sparticle, ptr %69, i32 0, i32 1
  %71 = load double, ptr %70, align 8, !tbaa !16
  %72 = fcmp olt double %71, 0.000000e+00
  br i1 %72, label %73, label %83

73:                                               ; preds = %68
  %74 = load double, ptr @ysize, align 8, !tbaa !14
  %75 = load ptr, ptr %3, align 8, !tbaa !5
  %76 = getelementptr inbounds %struct.sparticle, ptr %75, i32 0, i32 1
  %77 = load double, ptr %76, align 8, !tbaa !16
  %78 = fadd double %77, %74
  store double %78, ptr %76, align 8, !tbaa !16
  %79 = load ptr, ptr %3, align 8, !tbaa !5
  %80 = getelementptr inbounds %struct.sparticle, ptr %79, i32 0, i32 17
  %81 = load i32, ptr %80, align 4, !tbaa !17
  %82 = add nsw i32 %81, -1
  store i32 %82, ptr %80, align 4, !tbaa !17
  br label %83

83:                                               ; preds = %73, %68
  br label %84

84:                                               ; preds = %83, %58
  %85 = load ptr, ptr %3, align 8, !tbaa !5
  %86 = getelementptr inbounds %struct.sparticle, ptr %85, i32 0, i32 2
  %87 = load double, ptr %86, align 8, !tbaa !18
  %88 = load double, ptr @zsize, align 8, !tbaa !14
  %89 = fcmp oge double %87, %88
  br i1 %89, label %90, label %100

90:                                               ; preds = %84
  %91 = load double, ptr @zsize, align 8, !tbaa !14
  %92 = load ptr, ptr %3, align 8, !tbaa !5
  %93 = getelementptr inbounds %struct.sparticle, ptr %92, i32 0, i32 2
  %94 = load double, ptr %93, align 8, !tbaa !18
  %95 = fsub double %94, %91
  store double %95, ptr %93, align 8, !tbaa !18
  %96 = load ptr, ptr %3, align 8, !tbaa !5
  %97 = getelementptr inbounds %struct.sparticle, ptr %96, i32 0, i32 18
  %98 = load i32, ptr %97, align 8, !tbaa !19
  %99 = add nsw i32 %98, 1
  store i32 %99, ptr %97, align 8, !tbaa !19
  br label %116

100:                                              ; preds = %84
  %101 = load ptr, ptr %3, align 8, !tbaa !5
  %102 = getelementptr inbounds %struct.sparticle, ptr %101, i32 0, i32 2
  %103 = load double, ptr %102, align 8, !tbaa !18
  %104 = fcmp olt double %103, 0.000000e+00
  br i1 %104, label %105, label %115

105:                                              ; preds = %100
  %106 = load double, ptr @zsize, align 8, !tbaa !14
  %107 = load ptr, ptr %3, align 8, !tbaa !5
  %108 = getelementptr inbounds %struct.sparticle, ptr %107, i32 0, i32 2
  %109 = load double, ptr %108, align 8, !tbaa !18
  %110 = fadd double %109, %106
  store double %110, ptr %108, align 8, !tbaa !18
  %111 = load ptr, ptr %3, align 8, !tbaa !5
  %112 = getelementptr inbounds %struct.sparticle, ptr %111, i32 0, i32 18
  %113 = load i32, ptr %112, align 8, !tbaa !19
  %114 = add nsw i32 %113, -1
  store i32 %114, ptr %112, align 8, !tbaa !19
  br label %115

115:                                              ; preds = %105, %100
  br label %116

116:                                              ; preds = %115, %90
  %117 = load ptr, ptr %3, align 8, !tbaa !5
  %118 = getelementptr inbounds %struct.sparticle, ptr %117, i32 0, i32 0
  %119 = load double, ptr %118, align 8, !tbaa !11
  %120 = load ptr, ptr %3, align 8, !tbaa !5
  %121 = getelementptr inbounds %struct.sparticle, ptr %120, i32 0, i32 6
  store double %119, ptr %121, align 8, !tbaa !20
  %122 = load ptr, ptr %3, align 8, !tbaa !5
  %123 = getelementptr inbounds %struct.sparticle, ptr %122, i32 0, i32 1
  %124 = load double, ptr %123, align 8, !tbaa !16
  %125 = load ptr, ptr %3, align 8, !tbaa !5
  %126 = getelementptr inbounds %struct.sparticle, ptr %125, i32 0, i32 7
  store double %124, ptr %126, align 8, !tbaa !21
  %127 = load ptr, ptr %3, align 8, !tbaa !5
  %128 = getelementptr inbounds %struct.sparticle, ptr %127, i32 0, i32 2
  %129 = load double, ptr %128, align 8, !tbaa !18
  %130 = load ptr, ptr %3, align 8, !tbaa !5
  %131 = getelementptr inbounds %struct.sparticle, ptr %130, i32 0, i32 8
  store double %129, ptr %131, align 8, !tbaa !22
  %132 = load ptr, ptr %3, align 8, !tbaa !5
  call void @removefromcelllist(ptr noundef %132)
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #5
  store i32 0, ptr %14, align 4, !tbaa !9
  br label %133

133:                                              ; preds = %186, %116
  %134 = load i32, ptr %14, align 4, !tbaa !9
  %135 = load ptr, ptr %3, align 8, !tbaa !5
  %136 = getelementptr inbounds %struct.sparticle, ptr %135, i32 0, i32 10
  %137 = load i8, ptr %136, align 8, !tbaa !23
  %138 = zext i8 %137 to i32
  %139 = icmp slt i32 %134, %138
  br i1 %139, label %140, label %189

140:                                              ; preds = %133
  %141 = load ptr, ptr %3, align 8, !tbaa !5
  %142 = getelementptr inbounds %struct.sparticle, ptr %141, i32 0, i32 9
  %143 = load i32, ptr %14, align 4, !tbaa !9
  %144 = sext i32 %143 to i64
  %145 = getelementptr inbounds [24 x ptr], ptr %142, i64 0, i64 %144
  %146 = load ptr, ptr %145, align 8, !tbaa !5
  store ptr %146, ptr %8, align 8, !tbaa !5
  store i32 0, ptr %15, align 4, !tbaa !9
  br label %147

147:                                              ; preds = %182, %140
  %148 = load i32, ptr %15, align 4, !tbaa !9
  %149 = load ptr, ptr %8, align 8, !tbaa !5
  %150 = getelementptr inbounds %struct.sparticle, ptr %149, i32 0, i32 10
  %151 = load i8, ptr %150, align 8, !tbaa !23
  %152 = zext i8 %151 to i32
  %153 = icmp slt i32 %148, %152
  br i1 %153, label %154, label %185

154:                                              ; preds = %147
  %155 = load ptr, ptr %8, align 8, !tbaa !5
  %156 = getelementptr inbounds %struct.sparticle, ptr %155, i32 0, i32 9
  %157 = load i32, ptr %15, align 4, !tbaa !9
  %158 = sext i32 %157 to i64
  %159 = getelementptr inbounds [24 x ptr], ptr %156, i64 0, i64 %158
  %160 = load ptr, ptr %159, align 8, !tbaa !5
  %161 = load ptr, ptr %3, align 8, !tbaa !5
  %162 = icmp eq ptr %160, %161
  br i1 %162, label %163, label %181

163:                                              ; preds = %154
  %164 = load ptr, ptr %8, align 8, !tbaa !5
  %165 = getelementptr inbounds %struct.sparticle, ptr %164, i32 0, i32 10
  %166 = load i8, ptr %165, align 8, !tbaa !23
  %167 = add i8 %166, -1
  store i8 %167, ptr %165, align 8, !tbaa !23
  %168 = load ptr, ptr %8, align 8, !tbaa !5
  %169 = getelementptr inbounds %struct.sparticle, ptr %168, i32 0, i32 9
  %170 = load ptr, ptr %8, align 8, !tbaa !5
  %171 = getelementptr inbounds %struct.sparticle, ptr %170, i32 0, i32 10
  %172 = load i8, ptr %171, align 8, !tbaa !23
  %173 = zext i8 %172 to i64
  %174 = getelementptr inbounds [24 x ptr], ptr %169, i64 0, i64 %173
  %175 = load ptr, ptr %174, align 8, !tbaa !5
  %176 = load ptr, ptr %8, align 8, !tbaa !5
  %177 = getelementptr inbounds %struct.sparticle, ptr %176, i32 0, i32 9
  %178 = load i32, ptr %15, align 4, !tbaa !9
  %179 = sext i32 %178 to i64
  %180 = getelementptr inbounds [24 x ptr], ptr %177, i64 0, i64 %179
  store ptr %175, ptr %180, align 8, !tbaa !5
  br label %185

181:                                              ; preds = %154
  br label %182

182:                                              ; preds = %181
  %183 = load i32, ptr %15, align 4, !tbaa !9
  %184 = add nsw i32 %183, 1
  store i32 %184, ptr %15, align 4, !tbaa !9
  br label %147, !llvm.loop !24

185:                                              ; preds = %163, %147
  br label %186

186:                                              ; preds = %185
  %187 = load i32, ptr %14, align 4, !tbaa !9
  %188 = add nsw i32 %187, 1
  store i32 %188, ptr %14, align 4, !tbaa !9
  br label %133, !llvm.loop !26

189:                                              ; preds = %133
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #5
  %190 = load ptr, ptr %3, align 8, !tbaa !5
  %191 = getelementptr inbounds %struct.sparticle, ptr %190, i32 0, i32 0
  %192 = load double, ptr %191, align 8, !tbaa !11
  %193 = load double, ptr @icxsize, align 8, !tbaa !14
  %194 = fmul double %192, %193
  %195 = fptosi double %194 to i32
  store i32 %195, ptr %16, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #5
  %196 = load ptr, ptr %3, align 8, !tbaa !5
  %197 = getelementptr inbounds %struct.sparticle, ptr %196, i32 0, i32 1
  %198 = load double, ptr %197, align 8, !tbaa !16
  %199 = load double, ptr @icysize, align 8, !tbaa !14
  %200 = fmul double %198, %199
  %201 = fptosi double %200 to i32
  store i32 %201, ptr %17, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #5
  %202 = load ptr, ptr %3, align 8, !tbaa !5
  %203 = getelementptr inbounds %struct.sparticle, ptr %202, i32 0, i32 2
  %204 = load double, ptr %203, align 8, !tbaa !18
  %205 = load double, ptr @iczsize, align 8, !tbaa !14
  %206 = fmul double %204, %205
  %207 = fptosi double %206 to i32
  store i32 %207, ptr %18, align 4, !tbaa !9
  %208 = load ptr, ptr %3, align 8, !tbaa !5
  %209 = load i32, ptr %16, align 4, !tbaa !9
  %210 = load i32, ptr %17, align 4, !tbaa !9
  %211 = load i32, ptr %18, align 4, !tbaa !9
  call void @addtocelllist(ptr noundef %208, i32 noundef %209, i32 noundef %210, i32 noundef %211)
  %212 = load i32, ptr @cx, align 4, !tbaa !9
  %213 = load i32, ptr %16, align 4, !tbaa !9
  %214 = add nsw i32 %213, %212
  store i32 %214, ptr %16, align 4, !tbaa !9
  %215 = load i32, ptr @cy, align 4, !tbaa !9
  %216 = load i32, ptr %17, align 4, !tbaa !9
  %217 = add nsw i32 %216, %215
  store i32 %217, ptr %17, align 4, !tbaa !9
  %218 = load i32, ptr @cz, align 4, !tbaa !9
  %219 = load i32, ptr %18, align 4, !tbaa !9
  %220 = add nsw i32 %219, %218
  store i32 %220, ptr %18, align 4, !tbaa !9
  %221 = load ptr, ptr %3, align 8, !tbaa !5
  %222 = getelementptr inbounds %struct.sparticle, ptr %221, i32 0, i32 10
  store i8 0, ptr %222, align 8, !tbaa !23
  %223 = load i32, ptr %16, align 4, !tbaa !9
  %224 = sub nsw i32 %223, 1
  store i32 %224, ptr %5, align 4, !tbaa !9
  br label %225

225:                                              ; preds = %420, %189
  %226 = load i32, ptr %5, align 4, !tbaa !9
  %227 = load i32, ptr %16, align 4, !tbaa !9
  %228 = add nsw i32 %227, 2
  %229 = icmp slt i32 %226, %228
  br i1 %229, label %230, label %423

230:                                              ; preds = %225
  %231 = load i32, ptr %17, align 4, !tbaa !9
  %232 = sub nsw i32 %231, 1
  store i32 %232, ptr %6, align 4, !tbaa !9
  br label %233

233:                                              ; preds = %416, %230
  %234 = load i32, ptr %6, align 4, !tbaa !9
  %235 = load i32, ptr %17, align 4, !tbaa !9
  %236 = add nsw i32 %235, 2
  %237 = icmp slt i32 %234, %236
  br i1 %237, label %238, label %419

238:                                              ; preds = %233
  %239 = load i32, ptr %18, align 4, !tbaa !9
  %240 = sub nsw i32 %239, 1
  store i32 %240, ptr %7, align 4, !tbaa !9
  br label %241

241:                                              ; preds = %412, %238
  %242 = load i32, ptr %7, align 4, !tbaa !9
  %243 = load i32, ptr %18, align 4, !tbaa !9
  %244 = add nsw i32 %243, 2
  %245 = icmp slt i32 %242, %244
  br i1 %245, label %246, label %415

246:                                              ; preds = %241
  %247 = load ptr, ptr @celllist, align 8, !tbaa !5
  %248 = load i32, ptr %5, align 4, !tbaa !9
  %249 = load i32, ptr @cx, align 4, !tbaa !9
  %250 = srem i32 %248, %249
  %251 = load i32, ptr %6, align 4, !tbaa !9
  %252 = load i32, ptr @cy, align 4, !tbaa !9
  %253 = srem i32 %251, %252
  %254 = load i32, ptr %7, align 4, !tbaa !9
  %255 = load i32, ptr @cz, align 4, !tbaa !9
  %256 = srem i32 %254, %255
  %257 = call i32 @celloffset(i32 noundef %250, i32 noundef %253, i32 noundef %256)
  %258 = sext i32 %257 to i64
  %259 = getelementptr inbounds ptr, ptr %247, i64 %258
  %260 = load ptr, ptr %259, align 8, !tbaa !5
  store ptr %260, ptr %8, align 8, !tbaa !5
  br label %261

261:                                              ; preds = %407, %246
  %262 = load ptr, ptr %8, align 8, !tbaa !5
  %263 = icmp ne ptr %262, null
  br i1 %263, label %264, label %411

264:                                              ; preds = %261
  %265 = load ptr, ptr %8, align 8, !tbaa !5
  %266 = load ptr, ptr %3, align 8, !tbaa !5
  %267 = icmp ne ptr %265, %266
  br i1 %267, label %268, label %407

268:                                              ; preds = %264
  %269 = load ptr, ptr %8, align 8, !tbaa !5
  call void @update(ptr noundef %269)
  %270 = load ptr, ptr %3, align 8, !tbaa !5
  %271 = getelementptr inbounds %struct.sparticle, ptr %270, i32 0, i32 6
  %272 = load double, ptr %271, align 8, !tbaa !20
  %273 = load ptr, ptr %8, align 8, !tbaa !5
  %274 = getelementptr inbounds %struct.sparticle, ptr %273, i32 0, i32 6
  %275 = load double, ptr %274, align 8, !tbaa !20
  %276 = fsub double %272, %275
  store double %276, ptr %9, align 8, !tbaa !14
  %277 = load ptr, ptr %3, align 8, !tbaa !5
  %278 = getelementptr inbounds %struct.sparticle, ptr %277, i32 0, i32 7
  %279 = load double, ptr %278, align 8, !tbaa !21
  %280 = load ptr, ptr %8, align 8, !tbaa !5
  %281 = getelementptr inbounds %struct.sparticle, ptr %280, i32 0, i32 7
  %282 = load double, ptr %281, align 8, !tbaa !21
  %283 = fsub double %279, %282
  store double %283, ptr %10, align 8, !tbaa !14
  %284 = load ptr, ptr %3, align 8, !tbaa !5
  %285 = getelementptr inbounds %struct.sparticle, ptr %284, i32 0, i32 8
  %286 = load double, ptr %285, align 8, !tbaa !22
  %287 = load ptr, ptr %8, align 8, !tbaa !5
  %288 = getelementptr inbounds %struct.sparticle, ptr %287, i32 0, i32 8
  %289 = load double, ptr %288, align 8, !tbaa !22
  %290 = fsub double %286, %289
  store double %290, ptr %11, align 8, !tbaa !14
  %291 = load ptr, ptr %3, align 8, !tbaa !5
  %292 = getelementptr inbounds %struct.sparticle, ptr %291, i32 0, i32 14
  %293 = load i8, ptr %292, align 8, !tbaa !27
  %294 = icmp ne i8 %293, 0
  br i1 %294, label %295, label %350

295:                                              ; preds = %268
  %296 = load double, ptr %9, align 8, !tbaa !14
  %297 = load double, ptr @hx, align 8, !tbaa !14
  %298 = fcmp ogt double %296, %297
  br i1 %298, label %299, label %303

299:                                              ; preds = %295
  %300 = load double, ptr @xsize, align 8, !tbaa !14
  %301 = load double, ptr %9, align 8, !tbaa !14
  %302 = fsub double %301, %300
  store double %302, ptr %9, align 8, !tbaa !14
  br label %313

303:                                              ; preds = %295
  %304 = load double, ptr %9, align 8, !tbaa !14
  %305 = load double, ptr @hx, align 8, !tbaa !14
  %306 = fneg double %305
  %307 = fcmp olt double %304, %306
  br i1 %307, label %308, label %312

308:                                              ; preds = %303
  %309 = load double, ptr @xsize, align 8, !tbaa !14
  %310 = load double, ptr %9, align 8, !tbaa !14
  %311 = fadd double %310, %309
  store double %311, ptr %9, align 8, !tbaa !14
  br label %312

312:                                              ; preds = %308, %303
  br label %313

313:                                              ; preds = %312, %299
  %314 = load double, ptr %10, align 8, !tbaa !14
  %315 = load double, ptr @hy, align 8, !tbaa !14
  %316 = fcmp ogt double %314, %315
  br i1 %316, label %317, label %321

317:                                              ; preds = %313
  %318 = load double, ptr @ysize, align 8, !tbaa !14
  %319 = load double, ptr %10, align 8, !tbaa !14
  %320 = fsub double %319, %318
  store double %320, ptr %10, align 8, !tbaa !14
  br label %331

321:                                              ; preds = %313
  %322 = load double, ptr %10, align 8, !tbaa !14
  %323 = load double, ptr @hy, align 8, !tbaa !14
  %324 = fneg double %323
  %325 = fcmp olt double %322, %324
  br i1 %325, label %326, label %330

326:                                              ; preds = %321
  %327 = load double, ptr @ysize, align 8, !tbaa !14
  %328 = load double, ptr %10, align 8, !tbaa !14
  %329 = fadd double %328, %327
  store double %329, ptr %10, align 8, !tbaa !14
  br label %330

330:                                              ; preds = %326, %321
  br label %331

331:                                              ; preds = %330, %317
  %332 = load double, ptr %11, align 8, !tbaa !14
  %333 = load double, ptr @hz, align 8, !tbaa !14
  %334 = fcmp ogt double %332, %333
  br i1 %334, label %335, label %339

335:                                              ; preds = %331
  %336 = load double, ptr @zsize, align 8, !tbaa !14
  %337 = load double, ptr %11, align 8, !tbaa !14
  %338 = fsub double %337, %336
  store double %338, ptr %11, align 8, !tbaa !14
  br label %349

339:                                              ; preds = %331
  %340 = load double, ptr %11, align 8, !tbaa !14
  %341 = load double, ptr @hz, align 8, !tbaa !14
  %342 = fneg double %341
  %343 = fcmp olt double %340, %342
  br i1 %343, label %344, label %348

344:                                              ; preds = %339
  %345 = load double, ptr @zsize, align 8, !tbaa !14
  %346 = load double, ptr %11, align 8, !tbaa !14
  %347 = fadd double %346, %345
  store double %347, ptr %11, align 8, !tbaa !14
  br label %348

348:                                              ; preds = %344, %339
  br label %349

349:                                              ; preds = %348, %335
  br label %350

350:                                              ; preds = %349, %268
  %351 = load double, ptr %9, align 8, !tbaa !14
  %352 = load double, ptr %9, align 8, !tbaa !14
  %353 = load double, ptr %10, align 8, !tbaa !14
  %354 = load double, ptr %10, align 8, !tbaa !14
  %355 = fmul double %353, %354
  %356 = call double @llvm.fmuladd.f64(double %351, double %352, double %355)
  %357 = load double, ptr %11, align 8, !tbaa !14
  %358 = load double, ptr %11, align 8, !tbaa !14
  %359 = call double @llvm.fmuladd.f64(double %357, double %358, double %356)
  store double %359, ptr %12, align 8, !tbaa !14
  %360 = load ptr, ptr %3, align 8, !tbaa !5
  %361 = getelementptr inbounds %struct.sparticle, ptr %360, i32 0, i32 12
  %362 = load double, ptr %361, align 8, !tbaa !28
  %363 = load ptr, ptr %8, align 8, !tbaa !5
  %364 = getelementptr inbounds %struct.sparticle, ptr %363, i32 0, i32 12
  %365 = load double, ptr %364, align 8, !tbaa !28
  %366 = fadd double %362, %365
  %367 = fmul double %366, 1.500000e+00
  store double %367, ptr %13, align 8, !tbaa !14
  %368 = load double, ptr %12, align 8, !tbaa !14
  %369 = load double, ptr %13, align 8, !tbaa !14
  %370 = load double, ptr %13, align 8, !tbaa !14
  %371 = fmul double %369, %370
  %372 = fcmp olt double %368, %371
  br i1 %372, label %373, label %406

373:                                              ; preds = %350
  %374 = load ptr, ptr %8, align 8, !tbaa !5
  %375 = load ptr, ptr %3, align 8, !tbaa !5
  %376 = getelementptr inbounds %struct.sparticle, ptr %375, i32 0, i32 9
  %377 = load ptr, ptr %3, align 8, !tbaa !5
  %378 = getelementptr inbounds %struct.sparticle, ptr %377, i32 0, i32 10
  %379 = load i8, ptr %378, align 8, !tbaa !23
  %380 = add i8 %379, 1
  store i8 %380, ptr %378, align 8, !tbaa !23
  %381 = zext i8 %379 to i64
  %382 = getelementptr inbounds [24 x ptr], ptr %376, i64 0, i64 %381
  store ptr %374, ptr %382, align 8, !tbaa !5
  %383 = load ptr, ptr %3, align 8, !tbaa !5
  %384 = load ptr, ptr %8, align 8, !tbaa !5
  %385 = getelementptr inbounds %struct.sparticle, ptr %384, i32 0, i32 9
  %386 = load ptr, ptr %8, align 8, !tbaa !5
  %387 = getelementptr inbounds %struct.sparticle, ptr %386, i32 0, i32 10
  %388 = load i8, ptr %387, align 8, !tbaa !23
  %389 = add i8 %388, 1
  store i8 %389, ptr %387, align 8, !tbaa !23
  %390 = zext i8 %388 to i64
  %391 = getelementptr inbounds [24 x ptr], ptr %385, i64 0, i64 %390
  store ptr %383, ptr %391, align 8, !tbaa !5
  %392 = load ptr, ptr %3, align 8, !tbaa !5
  %393 = getelementptr inbounds %struct.sparticle, ptr %392, i32 0, i32 10
  %394 = load i8, ptr %393, align 8, !tbaa !23
  %395 = zext i8 %394 to i32
  %396 = icmp sge i32 %395, 24
  br i1 %396, label %403, label %397

397:                                              ; preds = %373
  %398 = load ptr, ptr %8, align 8, !tbaa !5
  %399 = getelementptr inbounds %struct.sparticle, ptr %398, i32 0, i32 10
  %400 = load i8, ptr %399, align 8, !tbaa !23
  %401 = zext i8 %400 to i32
  %402 = icmp sge i32 %401, 24
  br i1 %402, label %403, label %405

403:                                              ; preds = %397, %373
  %404 = call i32 (ptr, ...) @printf(ptr noundef @.str.23)
  call void @exit(i32 noundef 3) #6
  unreachable

405:                                              ; preds = %397
  br label %406

406:                                              ; preds = %405, %350
  br label %407

407:                                              ; preds = %406, %264
  %408 = load ptr, ptr %8, align 8, !tbaa !5
  %409 = getelementptr inbounds %struct.sparticle, ptr %408, i32 0, i32 21
  %410 = load ptr, ptr %409, align 8, !tbaa !29
  store ptr %410, ptr %8, align 8, !tbaa !5
  br label %261, !llvm.loop !30

411:                                              ; preds = %261
  br label %412

412:                                              ; preds = %411
  %413 = load i32, ptr %7, align 4, !tbaa !9
  %414 = add nsw i32 %413, 1
  store i32 %414, ptr %7, align 4, !tbaa !9
  br label %241, !llvm.loop !31

415:                                              ; preds = %241
  br label %416

416:                                              ; preds = %415
  %417 = load i32, ptr %6, align 4, !tbaa !9
  %418 = add nsw i32 %417, 1
  store i32 %418, ptr %6, align 4, !tbaa !9
  br label %233, !llvm.loop !32

419:                                              ; preds = %233
  br label %420

420:                                              ; preds = %419
  %421 = load i32, ptr %5, align 4, !tbaa !9
  %422 = add nsw i32 %421, 1
  store i32 %422, ptr %5, align 4, !tbaa !9
  br label %225, !llvm.loop !33

423:                                              ; preds = %225
  %424 = load i32, ptr %4, align 4, !tbaa !9
  %425 = icmp ne i32 %424, 0
  br i1 %425, label %455, label %426

426:                                              ; preds = %423
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #5
  %427 = load ptr, ptr %3, align 8, !tbaa !5
  %428 = getelementptr inbounds %struct.sparticle, ptr %427, i32 0, i32 19
  %429 = load ptr, ptr %428, align 8, !tbaa !34
  store ptr %429, ptr %19, align 8, !tbaa !5
  br label %430

430:                                              ; preds = %436, %426
  %431 = load ptr, ptr %19, align 8, !tbaa !5
  %432 = getelementptr inbounds %struct.sevent, ptr %431, i32 0, i32 7
  %433 = load ptr, ptr %432, align 8, !tbaa !35
  %434 = load ptr, ptr %19, align 8, !tbaa !5
  %435 = icmp ne ptr %433, %434
  br i1 %435, label %436, label %440

436:                                              ; preds = %430
  %437 = load ptr, ptr %19, align 8, !tbaa !5
  %438 = getelementptr inbounds %struct.sevent, ptr %437, i32 0, i32 7
  %439 = load ptr, ptr %438, align 8, !tbaa !35
  call void @removeevent(ptr noundef %439)
  br label %430, !llvm.loop !37

440:                                              ; preds = %430
  br label %441

441:                                              ; preds = %447, %440
  %442 = load ptr, ptr %19, align 8, !tbaa !5
  %443 = getelementptr inbounds %struct.sevent, ptr %442, i32 0, i32 9
  %444 = load ptr, ptr %443, align 8, !tbaa !38
  %445 = load ptr, ptr %19, align 8, !tbaa !5
  %446 = icmp ne ptr %444, %445
  br i1 %446, label %447, label %451

447:                                              ; preds = %441
  %448 = load ptr, ptr %19, align 8, !tbaa !5
  %449 = getelementptr inbounds %struct.sevent, ptr %448, i32 0, i32 9
  %450 = load ptr, ptr %449, align 8, !tbaa !38
  call void @removeevent(ptr noundef %450)
  br label %441, !llvm.loop !39

451:                                              ; preds = %441
  %452 = load ptr, ptr %19, align 8, !tbaa !5
  call void @removeevent(ptr noundef %452)
  %453 = load ptr, ptr %3, align 8, !tbaa !5
  call void @findlistupdate(ptr noundef %453)
  %454 = load ptr, ptr %3, align 8, !tbaa !5
  call void @findcollisions(ptr noundef %454, ptr noundef null)
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #5
  br label %455

455:                                              ; preds = %451, %423
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #5
  ret void
}

; Function Attrs: nounwind uwtable
declare dso_local void @findlistupdate(ptr noundef) #3

; Function Attrs: noreturn nounwind
declare void @exit(i32 noundef) #4

; Function Attrs: nounwind uwtable
declare dso_local void @update(ptr noundef) #3

; Function Attrs: nounwind uwtable
declare dso_local void @addtocelllist(ptr noundef, i32 noundef, i32 noundef, i32 noundef) #3

; Function Attrs: nounwind uwtable
declare dso_local i32 @celloffset(i32 noundef, i32 noundef, i32 noundef) #3

; Function Attrs: nounwind uwtable
declare dso_local void @removefromcelllist(ptr noundef) #3

; Function Attrs: nounwind uwtable
declare dso_local void @removeevent(ptr noundef) #3

; Function Attrs: nounwind uwtable
declare dso_local void @findcollisions(ptr noundef, ptr noundef) #3

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #2 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nounwind 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 = { noreturn 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 #5 = { nounwind }
attributes #6 = { noreturn 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/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !13, i64 0}
!12 = !{!"sparticle", !13, i64 0, !13, i64 8, !13, i64 16, !13, i64 24, !13, i64 32, !13, i64 40, !13, i64 48, !13, i64 56, !13, i64 64, !7, i64 72, !7, i64 264, !13, i64 272, !13, i64 280, !13, i64 288, !7, i64 296, !10, i64 300, !10, i64 304, !10, i64 308, !10, i64 312, !6, i64 320, !6, i64 328, !6, i64 336, !7, i64 344}
!13 = !{!"double", !7, i64 0}
!14 = !{!13, !13, i64 0}
!15 = !{!12, !10, i64 304}
!16 = !{!12, !13, i64 8}
!17 = !{!12, !10, i64 308}
!18 = !{!12, !13, i64 16}
!19 = !{!12, !10, i64 312}
!20 = !{!12, !13, i64 48}
!21 = !{!12, !13, i64 56}
!22 = !{!12, !13, i64 64}
!23 = !{!12, !7, i64 264}
!24 = distinct !{!24, !25}
!25 = !{!"llvm.loop.mustprogress"}
!26 = distinct !{!26, !25}
!27 = !{!12, !7, i64 296}
!28 = !{!12, !13, i64 280}
!29 = !{!12, !6, i64 336}
!30 = distinct !{!30, !25}
!31 = distinct !{!31, !25}
!32 = distinct !{!32, !25}
!33 = distinct !{!33, !25}
!34 = !{!12, !6, i64 320}
!35 = !{!36, !6, i64 56}
!36 = !{!"sevent", !13, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !6, i64 56, !6, i64 64, !6, i64 72, !7, i64 80, !10, i64 84}
!37 = distinct !{!37, !25}
!38 = !{!36, !6, i64 72}
!39 = distinct !{!39, !25}


; 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"

@celllist = external dso_local local_unnamed_addr global ptr, align 8
@xsize = external dso_local local_unnamed_addr global double, align 8
@ysize = external dso_local local_unnamed_addr global double, align 8
@zsize = external dso_local local_unnamed_addr global double, align 8
@hx = external dso_local local_unnamed_addr global double, align 8
@hy = external dso_local local_unnamed_addr global double, align 8
@hz = external dso_local local_unnamed_addr global double, align 8
@cx = external dso_local local_unnamed_addr global i32, align 4
@cy = external dso_local local_unnamed_addr global i32, align 4
@cz = external dso_local local_unnamed_addr global i32, align 4
@icxsize = external dso_local local_unnamed_addr global double, align 8
@icysize = external dso_local local_unnamed_addr global double, align 8
@iczsize = external dso_local local_unnamed_addr global double, align 8
@.str.23 = external hidden unnamed_addr constant [40 x i8], align 1

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

; Function Attrs: nofree nounwind
declare noundef i32 @printf(ptr nocapture noundef readonly, ...) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
define dso_local void @makeneighborlist(ptr noundef %0, i32 noundef %1) local_unnamed_addr #2 {
  tail call void @update(ptr noundef %0)
  %3 = load double, ptr %0, align 8, !tbaa !5
  %4 = load double, ptr @xsize, align 8, !tbaa !12
  %5 = fcmp ult double %3, %4
  br i1 %5, label %8, label %6

6:                                                ; preds = %2
  %7 = fsub double %3, %4
  br label %.sink.split

8:                                                ; preds = %2
  %9 = fcmp olt double %3, 0.000000e+00
  br i1 %9, label %10, label %15

10:                                               ; preds = %8
  %11 = fadd double %3, %4
  br label %.sink.split

.sink.split:                                      ; preds = %6, %10
  %.sink = phi double [ %11, %10 ], [ %7, %6 ]
  %.sink198 = phi i32 [ -1, %10 ], [ 1, %6 ]
  store double %.sink, ptr %0, align 8, !tbaa !5
  %12 = getelementptr inbounds i8, ptr %0, i64 304
  %13 = load i32, ptr %12, align 8, !tbaa !13
  %14 = add nsw i32 %13, %.sink198
  store i32 %14, ptr %12, align 8, !tbaa !13
  br label %15

15:                                               ; preds = %.sink.split, %8
  %16 = phi double [ %3, %8 ], [ %.sink, %.sink.split ]
  %17 = getelementptr inbounds i8, ptr %0, i64 8
  %18 = load double, ptr %17, align 8, !tbaa !14
  %19 = load double, ptr @ysize, align 8, !tbaa !12
  %20 = fcmp ult double %18, %19
  br i1 %20, label %23, label %21

21:                                               ; preds = %15
  %22 = fsub double %18, %19
  br label %.sink.split199

23:                                               ; preds = %15
  %24 = fcmp olt double %18, 0.000000e+00
  br i1 %24, label %25, label %30

25:                                               ; preds = %23
  %26 = fadd double %18, %19
  br label %.sink.split199

.sink.split199:                                   ; preds = %21, %25
  %.sink206 = phi double [ %26, %25 ], [ %22, %21 ]
  %.sink204 = phi i32 [ -1, %25 ], [ 1, %21 ]
  store double %.sink206, ptr %17, align 8, !tbaa !14
  %27 = getelementptr inbounds i8, ptr %0, i64 308
  %28 = load i32, ptr %27, align 4, !tbaa !15
  %29 = add nsw i32 %28, %.sink204
  store i32 %29, ptr %27, align 4, !tbaa !15
  br label %30

30:                                               ; preds = %.sink.split199, %23
  %31 = phi double [ %18, %23 ], [ %.sink206, %.sink.split199 ]
  %32 = getelementptr inbounds i8, ptr %0, i64 16
  %33 = load double, ptr %32, align 8, !tbaa !16
  %34 = load double, ptr @zsize, align 8, !tbaa !12
  %35 = fcmp ult double %33, %34
  br i1 %35, label %38, label %36

36:                                               ; preds = %30
  %37 = fsub double %33, %34
  br label %.sink.split207

38:                                               ; preds = %30
  %39 = fcmp olt double %33, 0.000000e+00
  br i1 %39, label %40, label %45

40:                                               ; preds = %38
  %41 = fadd double %33, %34
  br label %.sink.split207

.sink.split207:                                   ; preds = %36, %40
  %.sink214 = phi double [ %41, %40 ], [ %37, %36 ]
  %.sink212 = phi i32 [ -1, %40 ], [ 1, %36 ]
  store double %.sink214, ptr %32, align 8, !tbaa !16
  %42 = getelementptr inbounds i8, ptr %0, i64 312
  %43 = load i32, ptr %42, align 8, !tbaa !17
  %44 = add nsw i32 %43, %.sink212
  store i32 %44, ptr %42, align 8, !tbaa !17
  br label %45

45:                                               ; preds = %.sink.split207, %38
  %46 = phi double [ %33, %38 ], [ %.sink214, %.sink.split207 ]
  %47 = getelementptr inbounds i8, ptr %0, i64 48
  store double %16, ptr %47, align 8, !tbaa !18
  %48 = getelementptr inbounds i8, ptr %0, i64 56
  store double %31, ptr %48, align 8, !tbaa !19
  %49 = getelementptr inbounds i8, ptr %0, i64 64
  store double %46, ptr %49, align 8, !tbaa !20
  tail call void @removefromcelllist(ptr noundef nonnull %0)
  %50 = getelementptr inbounds i8, ptr %0, i64 264
  %51 = load i8, ptr %50, align 8, !tbaa !21
  %.not185 = icmp eq i8 %51, 0
  br i1 %.not185, label %._crit_edge, label %.lr.ph169

.lr.ph169:                                        ; preds = %45
  %52 = getelementptr inbounds i8, ptr %0, i64 72
  br label %53

53:                                               ; preds = %.lr.ph169, %.loopexit
  %54 = phi i8 [ %51, %.lr.ph169 ], [ %71, %.loopexit ]
  %indvars.iv192 = phi i64 [ 0, %.lr.ph169 ], [ %indvars.iv.next193, %.loopexit ]
  %55 = getelementptr inbounds [24 x ptr], ptr %52, i64 0, i64 %indvars.iv192
  %56 = load ptr, ptr %55, align 8, !tbaa !22
  %57 = getelementptr inbounds i8, ptr %56, i64 264
  %58 = load i8, ptr %57, align 8, !tbaa !21
  %.not186 = icmp eq i8 %58, 0
  br i1 %.not186, label %.loopexit, label %.lr.ph

.lr.ph:                                           ; preds = %53
  %59 = getelementptr inbounds i8, ptr %56, i64 72
  %wide.trip.count = zext i8 %58 to i64
  br label %61

60:                                               ; preds = %61
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond.not, label %.loopexit, label %61, !llvm.loop !23

61:                                               ; preds = %.lr.ph, %60
  %indvars.iv = phi i64 [ 0, %.lr.ph ], [ %indvars.iv.next, %60 ]
  %62 = getelementptr inbounds [24 x ptr], ptr %59, i64 0, i64 %indvars.iv
  %63 = load ptr, ptr %62, align 8, !tbaa !22
  %64 = icmp eq ptr %63, %0
  br i1 %64, label %65, label %60

65:                                               ; preds = %61
  %66 = getelementptr inbounds [24 x ptr], ptr %59, i64 0, i64 %indvars.iv
  %67 = add i8 %58, -1
  store i8 %67, ptr %57, align 8, !tbaa !21
  %68 = zext i8 %67 to i64
  %69 = getelementptr inbounds [24 x ptr], ptr %59, i64 0, i64 %68
  %70 = load ptr, ptr %69, align 8, !tbaa !22
  store ptr %70, ptr %66, align 8, !tbaa !22
  %.pre = load i8, ptr %50, align 8, !tbaa !21
  br label %.loopexit

.loopexit:                                        ; preds = %60, %53, %65
  %71 = phi i8 [ %54, %53 ], [ %.pre, %65 ], [ %54, %60 ]
  %indvars.iv.next193 = add nuw nsw i64 %indvars.iv192, 1
  %72 = zext i8 %71 to i64
  %73 = icmp ult i64 %indvars.iv.next193, %72
  br i1 %73, label %53, label %._crit_edge, !llvm.loop !25

._crit_edge:                                      ; preds = %.loopexit, %45
  %74 = load double, ptr %0, align 8, !tbaa !5
  %75 = load double, ptr @icxsize, align 8, !tbaa !12
  %76 = fmul double %74, %75
  %77 = fptosi double %76 to i32
  %78 = load double, ptr %17, align 8, !tbaa !14
  %79 = load double, ptr @icysize, align 8, !tbaa !12
  %80 = fmul double %78, %79
  %81 = fptosi double %80 to i32
  %82 = load double, ptr %32, align 8, !tbaa !16
  %83 = load double, ptr @iczsize, align 8, !tbaa !12
  %84 = fmul double %82, %83
  %85 = fptosi double %84 to i32
  tail call void @addtocelllist(ptr noundef nonnull %0, i32 noundef %77, i32 noundef %81, i32 noundef %85)
  %86 = load i32, ptr @cx, align 4, !tbaa !26
  %87 = add nsw i32 %86, %77
  %88 = load i32, ptr @cy, align 4, !tbaa !26
  %89 = add nsw i32 %88, %81
  %90 = load i32, ptr @cz, align 4, !tbaa !26
  %91 = add nsw i32 %90, %85
  store i8 0, ptr %50, align 8, !tbaa !21
  %92 = add nsw i32 %87, -1
  %93 = add nsw i32 %89, -1
  %94 = add nsw i32 %91, -1
  %95 = getelementptr inbounds i8, ptr %0, i64 296
  %96 = getelementptr inbounds i8, ptr %0, i64 280
  %97 = getelementptr inbounds i8, ptr %0, i64 72
  br label %98

98:                                               ; preds = %._crit_edge, %193
  %.0178 = phi i32 [ %92, %._crit_edge ], [ %194, %193 ]
  br label %99

99:                                               ; preds = %98, %191
  %.0123177 = phi i32 [ %93, %98 ], [ %192, %191 ]
  br label %100

100:                                              ; preds = %99, %._crit_edge175
  %.0124176 = phi i32 [ %94, %99 ], [ %190, %._crit_edge175 ]
  %101 = load ptr, ptr @celllist, align 8, !tbaa !22
  %102 = load i32, ptr @cx, align 4, !tbaa !26
  %103 = srem i32 %.0178, %102
  %104 = load i32, ptr @cy, align 4, !tbaa !26
  %105 = srem i32 %.0123177, %104
  %106 = load i32, ptr @cz, align 4, !tbaa !26
  %107 = srem i32 %.0124176, %106
  %108 = tail call i32 @celloffset(i32 noundef %103, i32 noundef %105, i32 noundef %107)
  %109 = sext i32 %108 to i64
  %110 = getelementptr inbounds ptr, ptr %101, i64 %109
  %.0129170 = load ptr, ptr %110, align 8, !tbaa !22
  %.not157171 = icmp eq ptr %.0129170, null
  br i1 %.not157171, label %._crit_edge175, label %.lr.ph174

.lr.ph174:                                        ; preds = %100, %188
  %.0129172 = phi ptr [ %.0129, %188 ], [ %.0129170, %100 ]
  %.not158 = icmp eq ptr %.0129172, %0
  br i1 %.not158, label %188, label %111

111:                                              ; preds = %.lr.ph174
  tail call void @update(ptr noundef nonnull %.0129172)
  %112 = load double, ptr %47, align 8, !tbaa !18
  %113 = getelementptr inbounds i8, ptr %.0129172, i64 48
  %114 = load double, ptr %113, align 8, !tbaa !18
  %115 = fsub double %112, %114
  %116 = load double, ptr %48, align 8, !tbaa !19
  %117 = getelementptr inbounds i8, ptr %.0129172, i64 56
  %118 = load double, ptr %117, align 8, !tbaa !19
  %119 = fsub double %116, %118
  %120 = load double, ptr %49, align 8, !tbaa !20
  %121 = getelementptr inbounds i8, ptr %.0129172, i64 64
  %122 = load double, ptr %121, align 8, !tbaa !20
  %123 = fsub double %120, %122
  %124 = load i8, ptr %95, align 8, !tbaa !27
  %.not159 = icmp eq i8 %124, 0
  br i1 %.not159, label %161, label %125

125:                                              ; preds = %111
  %126 = load double, ptr @hx, align 8, !tbaa !12
  %127 = fcmp ogt double %115, %126
  br i1 %127, label %128, label %131

128:                                              ; preds = %125
  %129 = load double, ptr @xsize, align 8, !tbaa !12
  %130 = fsub double %115, %129
  br label %137

131:                                              ; preds = %125
  %132 = fneg double %126
  %133 = fcmp olt double %115, %132
  br i1 %133, label %134, label %137

134:                                              ; preds = %131
  %135 = load double, ptr @xsize, align 8, !tbaa !12
  %136 = fadd double %115, %135
  br label %137

137:                                              ; preds = %131, %134, %128
  %.0127 = phi double [ %130, %128 ], [ %136, %134 ], [ %115, %131 ]
  %138 = load double, ptr @hy, align 8, !tbaa !12
  %139 = fcmp ogt double %119, %138
  br i1 %139, label %140, label %143

140:                                              ; preds = %137
  %141 = load double, ptr @ysize, align 8, !tbaa !12
  %142 = fsub double %119, %141
  br label %149

143:                                              ; preds = %137
  %144 = fneg double %138
  %145 = fcmp olt double %119, %144
  br i1 %145, label %146, label %149

146:                                              ; preds = %143
  %147 = load double, ptr @ysize, align 8, !tbaa !12
  %148 = fadd double %119, %147
  br label %149

149:                                              ; preds = %143, %146, %140
  %.0126 = phi double [ %142, %140 ], [ %148, %146 ], [ %119, %143 ]
  %150 = load double, ptr @hz, align 8, !tbaa !12
  %151 = fcmp ogt double %123, %150
  br i1 %151, label %152, label %155

152:                                              ; preds = %149
  %153 = load double, ptr @zsize, align 8, !tbaa !12
  %154 = fsub double %123, %153
  br label %161

155:                                              ; preds = %149
  %156 = fneg double %150
  %157 = fcmp olt double %123, %156
  br i1 %157, label %158, label %161

158:                                              ; preds = %155
  %159 = load double, ptr @zsize, align 8, !tbaa !12
  %160 = fadd double %123, %159
  br label %161

161:                                              ; preds = %152, %158, %155, %111
  %.1128 = phi double [ %.0127, %152 ], [ %.0127, %158 ], [ %.0127, %155 ], [ %115, %111 ]
  %.1 = phi double [ %.0126, %152 ], [ %.0126, %158 ], [ %.0126, %155 ], [ %119, %111 ]
  %.0125 = phi double [ %154, %152 ], [ %160, %158 ], [ %123, %155 ], [ %123, %111 ]
  %162 = fmul double %.1, %.1
  %163 = tail call double @llvm.fmuladd.f64(double %.1128, double %.1128, double %162)
  %164 = tail call double @llvm.fmuladd.f64(double %.0125, double %.0125, double %163)
  %165 = load double, ptr %96, align 8, !tbaa !28
  %166 = getelementptr inbounds i8, ptr %.0129172, i64 280
  %167 = load double, ptr %166, align 8, !tbaa !28
  %168 = fadd double %165, %167
  %169 = fmul double %168, 1.500000e+00
  %170 = fmul double %169, %169
  %171 = fcmp olt double %164, %170
  br i1 %171, label %172, label %188

172:                                              ; preds = %161
  %173 = load i8, ptr %50, align 8, !tbaa !21
  %174 = add i8 %173, 1
  store i8 %174, ptr %50, align 8, !tbaa !21
  %175 = zext i8 %173 to i64
  %176 = getelementptr inbounds [24 x ptr], ptr %97, i64 0, i64 %175
  store ptr %.0129172, ptr %176, align 8, !tbaa !22
  %177 = getelementptr inbounds i8, ptr %.0129172, i64 72
  %178 = getelementptr inbounds i8, ptr %.0129172, i64 264
  %179 = load i8, ptr %178, align 8, !tbaa !21
  %180 = add i8 %179, 1
  store i8 %180, ptr %178, align 8, !tbaa !21
  %181 = zext i8 %179 to i64
  %182 = getelementptr inbounds [24 x ptr], ptr %177, i64 0, i64 %181
  store ptr %0, ptr %182, align 8, !tbaa !22
  %183 = load i8, ptr %50, align 8, !tbaa !21
  %184 = icmp ugt i8 %183, 23
  %185 = icmp ugt i8 %180, 23
  %or.cond = or i1 %185, %184
  br i1 %or.cond, label %186, label %188

186:                                              ; preds = %172
  %187 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.23)
  tail call void @exit(i32 noundef 3) #4
  unreachable

188:                                              ; preds = %172, %161, %.lr.ph174
  %189 = getelementptr inbounds i8, ptr %.0129172, i64 336
  %.0129 = load ptr, ptr %189, align 8, !tbaa !22
  %.not157 = icmp eq ptr %.0129, null
  br i1 %.not157, label %._crit_edge175, label %.lr.ph174, !llvm.loop !29

._crit_edge175:                                   ; preds = %188, %100
  %190 = add nsw i32 %.0124176, 1
  %.not187 = icmp sgt i32 %.0124176, %91
  br i1 %.not187, label %191, label %100, !llvm.loop !30

191:                                              ; preds = %._crit_edge175
  %192 = add nsw i32 %.0123177, 1
  %.not188 = icmp sgt i32 %.0123177, %89
  br i1 %.not188, label %193, label %99, !llvm.loop !31

193:                                              ; preds = %191
  %194 = add nsw i32 %.0178, 1
  %.not189 = icmp sgt i32 %.0178, %87
  br i1 %.not189, label %195, label %98, !llvm.loop !32

195:                                              ; preds = %193
  %.not = icmp eq i32 %1, 0
  br i1 %.not, label %196, label %207

196:                                              ; preds = %195
  %197 = getelementptr inbounds i8, ptr %0, i64 320
  %198 = load ptr, ptr %197, align 8, !tbaa !33
  %199 = getelementptr inbounds i8, ptr %198, i64 56
  %200 = load ptr, ptr %199, align 8, !tbaa !34
  %.not155179 = icmp eq ptr %200, %198
  br i1 %.not155179, label %.preheader, label %.lr.ph181

.preheader:                                       ; preds = %.lr.ph181, %196
  %201 = getelementptr inbounds i8, ptr %198, i64 72
  %202 = load ptr, ptr %201, align 8, !tbaa !36
  %.not156182 = icmp eq ptr %202, %198
  br i1 %.not156182, label %._crit_edge184, label %.lr.ph183

.lr.ph181:                                        ; preds = %196, %.lr.ph181
  %203 = phi ptr [ %204, %.lr.ph181 ], [ %200, %196 ]
  tail call void @removeevent(ptr noundef %203)
  %204 = load ptr, ptr %199, align 8, !tbaa !34
  %.not155 = icmp eq ptr %204, %198
  br i1 %.not155, label %.preheader, label %.lr.ph181, !llvm.loop !37

.lr.ph183:                                        ; preds = %.preheader, %.lr.ph183
  %205 = phi ptr [ %206, %.lr.ph183 ], [ %202, %.preheader ]
  tail call void @removeevent(ptr noundef %205)
  %206 = load ptr, ptr %201, align 8, !tbaa !36
  %.not156 = icmp eq ptr %206, %198
  br i1 %.not156, label %._crit_edge184, label %.lr.ph183, !llvm.loop !38

._crit_edge184:                                   ; preds = %.lr.ph183, %.preheader
  tail call void @removeevent(ptr noundef nonnull %198)
  tail call void @findlistupdate(ptr noundef nonnull %0)
  tail call void @findcollisions(ptr noundef nonnull %0, ptr noundef null)
  br label %207

207:                                              ; preds = %._crit_edge184, %195
  ret void
}

; Function Attrs: nounwind uwtable
declare dso_local void @findlistupdate(ptr noundef) local_unnamed_addr #2

; Function Attrs: noreturn nounwind
declare void @exit(i32 noundef) local_unnamed_addr #3

; Function Attrs: nounwind uwtable
declare dso_local void @update(ptr noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare dso_local void @addtocelllist(ptr noundef, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare dso_local i32 @celloffset(i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare dso_local void @removefromcelllist(ptr noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare dso_local void @removeevent(ptr noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare dso_local void @findcollisions(ptr noundef, ptr noundef) local_unnamed_addr #2

attributes #0 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #1 = { nofree 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 = { 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 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { noreturn 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 = !{!"sparticle", !7, i64 0, !7, i64 8, !7, i64 16, !7, i64 24, !7, i64 32, !7, i64 40, !7, i64 48, !7, i64 56, !7, i64 64, !8, i64 72, !8, i64 264, !7, i64 272, !7, i64 280, !7, i64 288, !8, i64 296, !10, i64 300, !10, i64 304, !10, i64 308, !10, i64 312, !11, i64 320, !11, i64 328, !11, i64 336, !8, i64 344}
!7 = !{!"double", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"int", !8, i64 0}
!11 = !{!"any pointer", !8, i64 0}
!12 = !{!7, !7, i64 0}
!13 = !{!6, !10, i64 304}
!14 = !{!6, !7, i64 8}
!15 = !{!6, !10, i64 308}
!16 = !{!6, !7, i64 16}
!17 = !{!6, !10, i64 312}
!18 = !{!6, !7, i64 48}
!19 = !{!6, !7, i64 56}
!20 = !{!6, !7, i64 64}
!21 = !{!6, !8, i64 264}
!22 = !{!11, !11, i64 0}
!23 = distinct !{!23, !24}
!24 = !{!"llvm.loop.mustprogress"}
!25 = distinct !{!25, !24}
!26 = !{!10, !10, i64 0}
!27 = !{!6, !8, i64 296}
!28 = !{!6, !7, i64 280}
!29 = distinct !{!29, !24}
!30 = distinct !{!30, !24}
!31 = distinct !{!31, !24}
!32 = distinct !{!32, !24}
!33 = !{!6, !11, i64 320}
!34 = !{!35, !11, i64 56}
!35 = !{!"sevent", !7, i64 0, !11, i64 8, !11, i64 16, !11, i64 24, !11, i64 32, !11, i64 40, !11, i64 48, !11, i64 56, !11, i64 64, !11, i64 72, !8, i64 80, !10, i64 84}
!36 = !{!35, !11, i64 72}
!37 = distinct !{!37, !24}
!38 = distinct !{!38, !24}


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