; LLVM IR from FSmallenburg/EDMD :: Grow (mdgrow)

; 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, double, [24 x ptr], i8, double, double, double, double, i8, i8, i8, i8, i32, i32, i32, ptr, i32, ptr, ptr, i32, i8 }

@maxdt = external dso_local global double, align 8
@shellsize = external dso_local global double, 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
@celllist = external dso_local global [75 x [75 x [75 x ptr]]], align 16
@cx = external dso_local global i32, align 4
@cy = external dso_local global i32, align 4
@cz = external dso_local global i32, align 4
@.str.14 = external hidden unnamed_addr constant [39 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 i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca ptr, align 8
  %12 = alloca double, align 8
  %13 = alloca double, align 8
  %14 = alloca double, align 8
  %15 = alloca double, align 8
  %16 = alloca double, align 8
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  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 4, ptr %8) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #5
  call void @llvm.lifetime.start.p0(i64 4, 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
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #5
  %19 = load ptr, ptr %3, align 8, !tbaa !5
  call void @update(ptr noundef %19)
  %20 = load ptr, ptr %3, align 8, !tbaa !5
  %21 = getelementptr inbounds %struct.sparticle, ptr %20, i32 0, i32 0
  %22 = load double, ptr %21, align 8, !tbaa !11
  %23 = load double, ptr @xsize, align 8, !tbaa !14
  %24 = fcmp oge double %22, %23
  br i1 %24, label %25, label %35

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

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

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

50:                                               ; preds = %40, %35
  br label %51

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

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

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

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

82:                                               ; preds = %72, %67
  br label %83

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

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

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

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

114:                                              ; preds = %104, %99
  br label %115

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

133:                                              ; preds = %186, %115
  %134 = load i32, ptr %17, align 4, !tbaa !9
  %135 = load ptr, ptr %3, align 8, !tbaa !5
  %136 = getelementptr inbounds %struct.sparticle, ptr %135, i32 0, i32 11
  %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 10
  %143 = load i32, ptr %17, 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 %11, align 8, !tbaa !5
  store i32 0, ptr %18, align 4, !tbaa !9
  br label %147

147:                                              ; preds = %182, %140
  %148 = load i32, ptr %18, align 4, !tbaa !9
  %149 = load ptr, ptr %11, align 8, !tbaa !5
  %150 = getelementptr inbounds %struct.sparticle, ptr %149, i32 0, i32 11
  %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 %11, align 8, !tbaa !5
  %156 = getelementptr inbounds %struct.sparticle, ptr %155, i32 0, i32 10
  %157 = load i32, ptr %18, 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 %11, align 8, !tbaa !5
  %165 = getelementptr inbounds %struct.sparticle, ptr %164, i32 0, i32 11
  %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 %11, align 8, !tbaa !5
  %169 = getelementptr inbounds %struct.sparticle, ptr %168, i32 0, i32 10
  %170 = load ptr, ptr %11, align 8, !tbaa !5
  %171 = getelementptr inbounds %struct.sparticle, ptr %170, i32 0, i32 11
  %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 %11, align 8, !tbaa !5
  %177 = getelementptr inbounds %struct.sparticle, ptr %176, i32 0, i32 10
  %178 = load i32, ptr %18, 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 %18, align 4, !tbaa !9
  %184 = add nsw i32 %183, 1
  store i32 %184, ptr %18, align 4, !tbaa !9
  br label %147, !llvm.loop !24

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

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

189:                                              ; preds = %133
  %190 = load ptr, ptr %3, align 8, !tbaa !5
  %191 = getelementptr inbounds %struct.sparticle, ptr %190, i32 0, i32 17
  %192 = load i8, ptr %191, align 1, !tbaa !27
  %193 = zext i8 %192 to i32
  %194 = load i32, ptr @cx, align 4, !tbaa !9
  %195 = add nsw i32 %193, %194
  store i32 %195, ptr %8, align 4, !tbaa !9
  %196 = load ptr, ptr %3, align 8, !tbaa !5
  %197 = getelementptr inbounds %struct.sparticle, ptr %196, i32 0, i32 18
  %198 = load i8, ptr %197, align 2, !tbaa !28
  %199 = zext i8 %198 to i32
  %200 = load i32, ptr @cy, align 4, !tbaa !9
  %201 = add nsw i32 %199, %200
  store i32 %201, ptr %9, align 4, !tbaa !9
  %202 = load ptr, ptr %3, align 8, !tbaa !5
  %203 = getelementptr inbounds %struct.sparticle, ptr %202, i32 0, i32 19
  %204 = load i8, ptr %203, align 1, !tbaa !29
  %205 = zext i8 %204 to i32
  %206 = load i32, ptr @cz, align 4, !tbaa !9
  %207 = add nsw i32 %205, %206
  store i32 %207, ptr %10, align 4, !tbaa !9
  %208 = load ptr, ptr %3, align 8, !tbaa !5
  %209 = getelementptr inbounds %struct.sparticle, ptr %208, i32 0, i32 11
  store i8 0, ptr %209, align 8, !tbaa !23
  %210 = load i32, ptr %8, align 4, !tbaa !9
  %211 = sub nsw i32 %210, 1
  store i32 %211, ptr %5, align 4, !tbaa !9
  br label %212

212:                                              ; preds = %420, %189
  %213 = load i32, ptr %5, align 4, !tbaa !9
  %214 = load i32, ptr %8, align 4, !tbaa !9
  %215 = add nsw i32 %214, 2
  %216 = icmp slt i32 %213, %215
  br i1 %216, label %217, label %423

217:                                              ; preds = %212
  %218 = load i32, ptr %9, align 4, !tbaa !9
  %219 = sub nsw i32 %218, 1
  store i32 %219, ptr %6, align 4, !tbaa !9
  br label %220

220:                                              ; preds = %416, %217
  %221 = load i32, ptr %6, align 4, !tbaa !9
  %222 = load i32, ptr %9, align 4, !tbaa !9
  %223 = add nsw i32 %222, 2
  %224 = icmp slt i32 %221, %223
  br i1 %224, label %225, label %419

225:                                              ; preds = %220
  %226 = load i32, ptr %10, align 4, !tbaa !9
  %227 = sub nsw i32 %226, 1
  store i32 %227, ptr %7, align 4, !tbaa !9
  br label %228

228:                                              ; preds = %412, %225
  %229 = load i32, ptr %7, align 4, !tbaa !9
  %230 = load i32, ptr %10, align 4, !tbaa !9
  %231 = add nsw i32 %230, 2
  %232 = icmp slt i32 %229, %231
  br i1 %232, label %233, label %415

233:                                              ; preds = %228
  %234 = load i32, ptr %5, align 4, !tbaa !9
  %235 = load i32, ptr @cx, align 4, !tbaa !9
  %236 = srem i32 %234, %235
  %237 = sext i32 %236 to i64
  %238 = getelementptr inbounds [75 x [75 x [75 x ptr]]], ptr @celllist, i64 0, i64 %237
  %239 = load i32, ptr %6, align 4, !tbaa !9
  %240 = load i32, ptr @cy, align 4, !tbaa !9
  %241 = srem i32 %239, %240
  %242 = sext i32 %241 to i64
  %243 = getelementptr inbounds [75 x [75 x ptr]], ptr %238, i64 0, i64 %242
  %244 = load i32, ptr %7, align 4, !tbaa !9
  %245 = load i32, ptr @cz, align 4, !tbaa !9
  %246 = srem i32 %244, %245
  %247 = sext i32 %246 to i64
  %248 = getelementptr inbounds [75 x ptr], ptr %243, i64 0, i64 %247
  %249 = load ptr, ptr %248, align 8, !tbaa !5
  store ptr %249, ptr %11, align 8, !tbaa !5
  br label %250

250:                                              ; preds = %407, %233
  %251 = load ptr, ptr %11, align 8, !tbaa !5
  %252 = icmp ne ptr %251, null
  br i1 %252, label %253, label %411

253:                                              ; preds = %250
  %254 = load ptr, ptr %11, align 8, !tbaa !5
  %255 = load ptr, ptr %3, align 8, !tbaa !5
  %256 = icmp ne ptr %254, %255
  br i1 %256, label %257, label %407

257:                                              ; preds = %253
  %258 = load ptr, ptr %11, align 8, !tbaa !5
  call void @update(ptr noundef %258)
  %259 = load ptr, ptr %3, align 8, !tbaa !5
  %260 = getelementptr inbounds %struct.sparticle, ptr %259, i32 0, i32 6
  %261 = load double, ptr %260, align 8, !tbaa !20
  %262 = load ptr, ptr %11, align 8, !tbaa !5
  %263 = getelementptr inbounds %struct.sparticle, ptr %262, i32 0, i32 6
  %264 = load double, ptr %263, align 8, !tbaa !20
  %265 = fsub double %261, %264
  store double %265, ptr %12, align 8, !tbaa !14
  %266 = load ptr, ptr %3, align 8, !tbaa !5
  %267 = getelementptr inbounds %struct.sparticle, ptr %266, i32 0, i32 7
  %268 = load double, ptr %267, align 8, !tbaa !21
  %269 = load ptr, ptr %11, align 8, !tbaa !5
  %270 = getelementptr inbounds %struct.sparticle, ptr %269, i32 0, i32 7
  %271 = load double, ptr %270, align 8, !tbaa !21
  %272 = fsub double %268, %271
  store double %272, ptr %13, align 8, !tbaa !14
  %273 = load ptr, ptr %3, align 8, !tbaa !5
  %274 = getelementptr inbounds %struct.sparticle, ptr %273, i32 0, i32 8
  %275 = load double, ptr %274, align 8, !tbaa !22
  %276 = load ptr, ptr %11, align 8, !tbaa !5
  %277 = getelementptr inbounds %struct.sparticle, ptr %276, i32 0, i32 8
  %278 = load double, ptr %277, align 8, !tbaa !22
  %279 = fsub double %275, %278
  store double %279, ptr %14, align 8, !tbaa !14
  %280 = load ptr, ptr %3, align 8, !tbaa !5
  %281 = getelementptr inbounds %struct.sparticle, ptr %280, i32 0, i32 16
  %282 = load i8, ptr %281, align 8, !tbaa !30
  %283 = icmp ne i8 %282, 0
  br i1 %283, label %284, label %339

284:                                              ; preds = %257
  %285 = load double, ptr %12, align 8, !tbaa !14
  %286 = load double, ptr @hx, align 8, !tbaa !14
  %287 = fcmp ogt double %285, %286
  br i1 %287, label %288, label %292

288:                                              ; preds = %284
  %289 = load double, ptr @xsize, align 8, !tbaa !14
  %290 = load double, ptr %12, align 8, !tbaa !14
  %291 = fsub double %290, %289
  store double %291, ptr %12, align 8, !tbaa !14
  br label %302

292:                                              ; preds = %284
  %293 = load double, ptr %12, align 8, !tbaa !14
  %294 = load double, ptr @hx, align 8, !tbaa !14
  %295 = fneg double %294
  %296 = fcmp olt double %293, %295
  br i1 %296, label %297, label %301

297:                                              ; preds = %292
  %298 = load double, ptr @xsize, align 8, !tbaa !14
  %299 = load double, ptr %12, align 8, !tbaa !14
  %300 = fadd double %299, %298
  store double %300, ptr %12, align 8, !tbaa !14
  br label %301

301:                                              ; preds = %297, %292
  br label %302

302:                                              ; preds = %301, %288
  %303 = load double, ptr %13, align 8, !tbaa !14
  %304 = load double, ptr @hy, align 8, !tbaa !14
  %305 = fcmp ogt double %303, %304
  br i1 %305, label %306, label %310

306:                                              ; preds = %302
  %307 = load double, ptr @ysize, align 8, !tbaa !14
  %308 = load double, ptr %13, align 8, !tbaa !14
  %309 = fsub double %308, %307
  store double %309, ptr %13, align 8, !tbaa !14
  br label %320

310:                                              ; preds = %302
  %311 = load double, ptr %13, align 8, !tbaa !14
  %312 = load double, ptr @hy, align 8, !tbaa !14
  %313 = fneg double %312
  %314 = fcmp olt double %311, %313
  br i1 %314, label %315, label %319

315:                                              ; preds = %310
  %316 = load double, ptr @ysize, align 8, !tbaa !14
  %317 = load double, ptr %13, align 8, !tbaa !14
  %318 = fadd double %317, %316
  store double %318, ptr %13, align 8, !tbaa !14
  br label %319

319:                                              ; preds = %315, %310
  br label %320

320:                                              ; preds = %319, %306
  %321 = load double, ptr %14, align 8, !tbaa !14
  %322 = load double, ptr @hz, align 8, !tbaa !14
  %323 = fcmp ogt double %321, %322
  br i1 %323, label %324, label %328

324:                                              ; preds = %320
  %325 = load double, ptr @zsize, align 8, !tbaa !14
  %326 = load double, ptr %14, align 8, !tbaa !14
  %327 = fsub double %326, %325
  store double %327, ptr %14, align 8, !tbaa !14
  br label %338

328:                                              ; preds = %320
  %329 = load double, ptr %14, align 8, !tbaa !14
  %330 = load double, ptr @hz, align 8, !tbaa !14
  %331 = fneg double %330
  %332 = fcmp olt double %329, %331
  br i1 %332, label %333, label %337

333:                                              ; preds = %328
  %334 = load double, ptr @zsize, align 8, !tbaa !14
  %335 = load double, ptr %14, align 8, !tbaa !14
  %336 = fadd double %335, %334
  store double %336, ptr %14, align 8, !tbaa !14
  br label %337

337:                                              ; preds = %333, %328
  br label %338

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

339:                                              ; preds = %338, %257
  %340 = load double, ptr %12, align 8, !tbaa !14
  %341 = load double, ptr %12, align 8, !tbaa !14
  %342 = load double, ptr %13, align 8, !tbaa !14
  %343 = load double, ptr %13, align 8, !tbaa !14
  %344 = fmul double %342, %343
  %345 = call double @llvm.fmuladd.f64(double %340, double %341, double %344)
  %346 = load double, ptr %14, align 8, !tbaa !14
  %347 = load double, ptr %14, align 8, !tbaa !14
  %348 = call double @llvm.fmuladd.f64(double %346, double %347, double %345)
  store double %348, ptr %15, align 8, !tbaa !14
  %349 = load ptr, ptr %3, align 8, !tbaa !5
  %350 = getelementptr inbounds %struct.sparticle, ptr %349, i32 0, i32 13
  %351 = load double, ptr %350, align 8, !tbaa !31
  %352 = load ptr, ptr %3, align 8, !tbaa !5
  %353 = getelementptr inbounds %struct.sparticle, ptr %352, i32 0, i32 9
  %354 = load double, ptr %353, align 8, !tbaa !32
  %355 = load double, ptr @maxdt, align 8, !tbaa !14
  %356 = call double @llvm.fmuladd.f64(double %354, double %355, double %351)
  %357 = load ptr, ptr %11, align 8, !tbaa !5
  %358 = getelementptr inbounds %struct.sparticle, ptr %357, i32 0, i32 14
  %359 = load double, ptr %358, align 8, !tbaa !33
  %360 = fadd double %356, %359
  %361 = load ptr, ptr %11, align 8, !tbaa !5
  %362 = getelementptr inbounds %struct.sparticle, ptr %361, i32 0, i32 9
  %363 = load double, ptr %362, align 8, !tbaa !32
  %364 = load double, ptr @maxdt, align 8, !tbaa !14
  %365 = call double @llvm.fmuladd.f64(double %363, double %364, double %360)
  %366 = load double, ptr @shellsize, align 8, !tbaa !14
  %367 = fmul double %365, %366
  store double %367, ptr %16, align 8, !tbaa !14
  %368 = load double, ptr %15, align 8, !tbaa !14
  %369 = load double, ptr %16, align 8, !tbaa !14
  %370 = load double, ptr %16, align 8, !tbaa !14
  %371 = fmul double %369, %370
  %372 = fcmp olt double %368, %371
  br i1 %372, label %373, label %406

373:                                              ; preds = %339
  %374 = load ptr, ptr %11, align 8, !tbaa !5
  %375 = load ptr, ptr %3, align 8, !tbaa !5
  %376 = getelementptr inbounds %struct.sparticle, ptr %375, i32 0, i32 10
  %377 = load ptr, ptr %3, align 8, !tbaa !5
  %378 = getelementptr inbounds %struct.sparticle, ptr %377, i32 0, i32 11
  %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 %11, align 8, !tbaa !5
  %385 = getelementptr inbounds %struct.sparticle, ptr %384, i32 0, i32 10
  %386 = load ptr, ptr %11, align 8, !tbaa !5
  %387 = getelementptr inbounds %struct.sparticle, ptr %386, i32 0, i32 11
  %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 11
  %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 %11, align 8, !tbaa !5
  %399 = getelementptr inbounds %struct.sparticle, ptr %398, i32 0, i32 11
  %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.14)
  call void @exit(i32 noundef 3) #6
  unreachable

405:                                              ; preds = %397
  br label %406

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

407:                                              ; preds = %406, %253
  %408 = load ptr, ptr %11, align 8, !tbaa !5
  %409 = getelementptr inbounds %struct.sparticle, ptr %408, i32 0, i32 26
  %410 = load ptr, ptr %409, align 8, !tbaa !34
  store ptr %410, ptr %11, align 8, !tbaa !5
  br label %250, !llvm.loop !35

411:                                              ; preds = %250
  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 %228, !llvm.loop !36

415:                                              ; preds = %228
  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 %220, !llvm.loop !37

419:                                              ; preds = %220
  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 %212, !llvm.loop !38

423:                                              ; preds = %212
  %424 = load ptr, ptr %3, align 8, !tbaa !5
  call void @findcollisions(ptr noundef %424)
  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 8, ptr %16) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #5
  call void @llvm.lifetime.end.p0(i64 8, 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 4, ptr %10) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #5
  call void @llvm.lifetime.end.p0(i64 4, 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 @update(ptr noundef) #3

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

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

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

; Function Attrs: nounwind uwtable
declare dso_local void @findcollisions(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, !13, i64 72, !7, i64 80, !7, i64 272, !13, i64 280, !13, i64 288, !13, i64 296, !13, i64 304, !7, i64 312, !7, i64 313, !7, i64 314, !7, i64 315, !10, i64 316, !10, i64 320, !10, i64 324, !6, i64 328, !10, i64 336, !6, i64 344, !6, i64 352, !10, i64 360, !7, i64 364}
!13 = !{!"double", !7, i64 0}
!14 = !{!13, !13, i64 0}
!15 = !{!12, !10, i64 316}
!16 = !{!12, !13, i64 8}
!17 = !{!12, !10, i64 320}
!18 = !{!12, !13, i64 16}
!19 = !{!12, !10, i64 324}
!20 = !{!12, !13, i64 48}
!21 = !{!12, !13, i64 56}
!22 = !{!12, !13, i64 64}
!23 = !{!12, !7, i64 272}
!24 = distinct !{!24, !25}
!25 = !{!"llvm.loop.mustprogress"}
!26 = distinct !{!26, !25}
!27 = !{!12, !7, i64 313}
!28 = !{!12, !7, i64 314}
!29 = !{!12, !7, i64 315}
!30 = !{!12, !7, i64 312}
!31 = !{!12, !13, i64 288}
!32 = !{!12, !13, i64 72}
!33 = !{!12, !13, i64 296}
!34 = !{!12, !6, i64 352}
!35 = distinct !{!35, !25}
!36 = distinct !{!36, !25}
!37 = distinct !{!37, !25}
!38 = distinct !{!38, !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"

@maxdt = external dso_local local_unnamed_addr global double, align 8
@shellsize = external dso_local local_unnamed_addr global double, 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
@celllist = external dso_local local_unnamed_addr global [75 x [75 x [75 x ptr]]], align 16
@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
@.str.14 = external hidden unnamed_addr constant [39 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 ]
  %.sink172 = phi i32 [ -1, %10 ], [ 1, %6 ]
  store double %.sink, ptr %0, align 8, !tbaa !5
  %12 = getelementptr inbounds i8, ptr %0, i64 316
  %13 = load i32, ptr %12, align 4, !tbaa !13
  %14 = add nsw i32 %13, %.sink172
  store i32 %14, ptr %12, align 4, !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.split173

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.split173

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

30:                                               ; preds = %.sink.split173, %23
  %31 = phi double [ %18, %23 ], [ %.sink180, %.sink.split173 ]
  %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.split181

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.split181

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

45:                                               ; preds = %.sink.split181, %38
  %46 = phi double [ %33, %38 ], [ %.sink188, %.sink.split181 ]
  %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)
  tail call void @addtocelllist(ptr noundef nonnull %0)
  %50 = getelementptr inbounds i8, ptr %0, i64 272
  %51 = load i8, ptr %50, align 8, !tbaa !21
  %.not159 = icmp eq i8 %51, 0
  br i1 %.not159, label %._crit_edge, label %.lr.ph149

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

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

.lr.ph:                                           ; preds = %53
  %59 = getelementptr inbounds i8, ptr %56, i64 80
  %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.next167 = add nuw nsw i64 %indvars.iv166, 1
  %72 = zext i8 %71 to i64
  %73 = icmp ult i64 %indvars.iv.next167, %72
  br i1 %73, label %53, label %._crit_edge, !llvm.loop !25

._crit_edge:                                      ; preds = %.loopexit, %45
  %74 = getelementptr inbounds i8, ptr %0, i64 313
  %75 = load i8, ptr %74, align 1, !tbaa !26
  %76 = zext i8 %75 to i32
  %77 = load i32, ptr @cx, align 4, !tbaa !27
  %78 = add nsw i32 %77, %76
  %79 = getelementptr inbounds i8, ptr %0, i64 314
  %80 = load i8, ptr %79, align 2, !tbaa !28
  %81 = zext i8 %80 to i32
  %82 = load i32, ptr @cy, align 4, !tbaa !27
  %83 = add nsw i32 %82, %81
  %84 = getelementptr inbounds i8, ptr %0, i64 315
  %85 = load i8, ptr %84, align 1, !tbaa !29
  %86 = zext i8 %85 to i32
  %87 = load i32, ptr @cz, align 4, !tbaa !27
  %88 = add nsw i32 %87, %86
  store i8 0, ptr %50, align 8, !tbaa !21
  %89 = add nsw i32 %78, -1
  %90 = add nsw i32 %83, -1
  %91 = add nsw i32 %88, -1
  %92 = getelementptr inbounds i8, ptr %0, i64 312
  %93 = getelementptr inbounds i8, ptr %0, i64 288
  %94 = getelementptr inbounds i8, ptr %0, i64 72
  %95 = getelementptr inbounds i8, ptr %0, i64 80
  br label %96

96:                                               ; preds = %._crit_edge, %198
  %.0108158 = phi i32 [ %89, %._crit_edge ], [ %199, %198 ]
  br label %97

97:                                               ; preds = %96, %196
  %.0109157 = phi i32 [ %90, %96 ], [ %197, %196 ]
  br label %98

98:                                               ; preds = %97, %._crit_edge155
  %.0115156 = phi i32 [ %91, %97 ], [ %195, %._crit_edge155 ]
  %99 = load i32, ptr @cx, align 4, !tbaa !27
  %100 = srem i32 %.0108158, %99
  %101 = sext i32 %100 to i64
  %102 = load i32, ptr @cy, align 4, !tbaa !27
  %103 = srem i32 %.0109157, %102
  %104 = sext i32 %103 to i64
  %105 = load i32, ptr @cz, align 4, !tbaa !27
  %106 = srem i32 %.0115156, %105
  %107 = sext i32 %106 to i64
  %108 = getelementptr inbounds [75 x [75 x [75 x ptr]]], ptr @celllist, i64 0, i64 %101, i64 %104, i64 %107
  %.0114150 = load ptr, ptr %108, align 8, !tbaa !22
  %.not151 = icmp eq ptr %.0114150, null
  br i1 %.not151, label %._crit_edge155, label %.lr.ph154

.lr.ph154:                                        ; preds = %98, %193
  %.0114152 = phi ptr [ %.0114, %193 ], [ %.0114150, %98 ]
  %.not138 = icmp eq ptr %.0114152, %0
  br i1 %.not138, label %193, label %109

109:                                              ; preds = %.lr.ph154
  tail call void @update(ptr noundef nonnull %.0114152)
  %110 = load double, ptr %47, align 8, !tbaa !18
  %111 = getelementptr inbounds i8, ptr %.0114152, i64 48
  %112 = load double, ptr %111, align 8, !tbaa !18
  %113 = fsub double %110, %112
  %114 = load double, ptr %48, align 8, !tbaa !19
  %115 = getelementptr inbounds i8, ptr %.0114152, i64 56
  %116 = load double, ptr %115, align 8, !tbaa !19
  %117 = fsub double %114, %116
  %118 = load double, ptr %49, align 8, !tbaa !20
  %119 = getelementptr inbounds i8, ptr %.0114152, i64 64
  %120 = load double, ptr %119, align 8, !tbaa !20
  %121 = fsub double %118, %120
  %122 = load i8, ptr %92, align 8, !tbaa !30
  %.not139 = icmp eq i8 %122, 0
  br i1 %.not139, label %159, label %123

123:                                              ; preds = %109
  %124 = load double, ptr @hx, align 8, !tbaa !12
  %125 = fcmp ogt double %113, %124
  br i1 %125, label %126, label %129

126:                                              ; preds = %123
  %127 = load double, ptr @xsize, align 8, !tbaa !12
  %128 = fsub double %113, %127
  br label %135

129:                                              ; preds = %123
  %130 = fneg double %124
  %131 = fcmp olt double %113, %130
  br i1 %131, label %132, label %135

132:                                              ; preds = %129
  %133 = load double, ptr @xsize, align 8, !tbaa !12
  %134 = fadd double %113, %133
  br label %135

135:                                              ; preds = %129, %132, %126
  %.0112 = phi double [ %128, %126 ], [ %134, %132 ], [ %113, %129 ]
  %136 = load double, ptr @hy, align 8, !tbaa !12
  %137 = fcmp ogt double %117, %136
  br i1 %137, label %138, label %141

138:                                              ; preds = %135
  %139 = load double, ptr @ysize, align 8, !tbaa !12
  %140 = fsub double %117, %139
  br label %147

141:                                              ; preds = %135
  %142 = fneg double %136
  %143 = fcmp olt double %117, %142
  br i1 %143, label %144, label %147

144:                                              ; preds = %141
  %145 = load double, ptr @ysize, align 8, !tbaa !12
  %146 = fadd double %117, %145
  br label %147

147:                                              ; preds = %141, %144, %138
  %.0111 = phi double [ %140, %138 ], [ %146, %144 ], [ %117, %141 ]
  %148 = load double, ptr @hz, align 8, !tbaa !12
  %149 = fcmp ogt double %121, %148
  br i1 %149, label %150, label %153

150:                                              ; preds = %147
  %151 = load double, ptr @zsize, align 8, !tbaa !12
  %152 = fsub double %121, %151
  br label %159

153:                                              ; preds = %147
  %154 = fneg double %148
  %155 = fcmp olt double %121, %154
  br i1 %155, label %156, label %159

156:                                              ; preds = %153
  %157 = load double, ptr @zsize, align 8, !tbaa !12
  %158 = fadd double %121, %157
  br label %159

159:                                              ; preds = %150, %156, %153, %109
  %.1113 = phi double [ %.0112, %150 ], [ %.0112, %156 ], [ %.0112, %153 ], [ %113, %109 ]
  %.1 = phi double [ %.0111, %150 ], [ %.0111, %156 ], [ %.0111, %153 ], [ %117, %109 ]
  %.0110 = phi double [ %152, %150 ], [ %158, %156 ], [ %121, %153 ], [ %121, %109 ]
  %160 = fmul double %.1, %.1
  %161 = tail call double @llvm.fmuladd.f64(double %.1113, double %.1113, double %160)
  %162 = tail call double @llvm.fmuladd.f64(double %.0110, double %.0110, double %161)
  %163 = load double, ptr %93, align 8, !tbaa !31
  %164 = load double, ptr %94, align 8, !tbaa !32
  %165 = load double, ptr @maxdt, align 8, !tbaa !12
  %166 = tail call double @llvm.fmuladd.f64(double %164, double %165, double %163)
  %167 = getelementptr inbounds i8, ptr %.0114152, i64 296
  %168 = load double, ptr %167, align 8, !tbaa !33
  %169 = fadd double %166, %168
  %170 = getelementptr inbounds i8, ptr %.0114152, i64 72
  %171 = load double, ptr %170, align 8, !tbaa !32
  %172 = tail call double @llvm.fmuladd.f64(double %171, double %165, double %169)
  %173 = load double, ptr @shellsize, align 8, !tbaa !12
  %174 = fmul double %172, %173
  %175 = fmul double %174, %174
  %176 = fcmp olt double %162, %175
  br i1 %176, label %177, label %193

177:                                              ; preds = %159
  %178 = load i8, ptr %50, align 8, !tbaa !21
  %179 = add i8 %178, 1
  store i8 %179, ptr %50, align 8, !tbaa !21
  %180 = zext i8 %178 to i64
  %181 = getelementptr inbounds [24 x ptr], ptr %95, i64 0, i64 %180
  store ptr %.0114152, ptr %181, align 8, !tbaa !22
  %182 = getelementptr inbounds i8, ptr %.0114152, i64 80
  %183 = getelementptr inbounds i8, ptr %.0114152, i64 272
  %184 = load i8, ptr %183, align 8, !tbaa !21
  %185 = add i8 %184, 1
  store i8 %185, ptr %183, align 8, !tbaa !21
  %186 = zext i8 %184 to i64
  %187 = getelementptr inbounds [24 x ptr], ptr %182, i64 0, i64 %186
  store ptr %0, ptr %187, align 8, !tbaa !22
  %188 = load i8, ptr %50, align 8, !tbaa !21
  %189 = icmp ugt i8 %188, 23
  %190 = icmp ugt i8 %185, 23
  %or.cond = or i1 %190, %189
  br i1 %or.cond, label %191, label %193

191:                                              ; preds = %177
  %192 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.14)
  tail call void @exit(i32 noundef 3) #4
  unreachable

193:                                              ; preds = %177, %159, %.lr.ph154
  %194 = getelementptr inbounds i8, ptr %.0114152, i64 352
  %.0114 = load ptr, ptr %194, align 8, !tbaa !22
  %.not = icmp eq ptr %.0114, null
  br i1 %.not, label %._crit_edge155, label %.lr.ph154, !llvm.loop !34

._crit_edge155:                                   ; preds = %193, %98
  %195 = add nsw i32 %.0115156, 1
  %.not161 = icmp sgt i32 %.0115156, %88
  br i1 %.not161, label %196, label %98, !llvm.loop !35

196:                                              ; preds = %._crit_edge155
  %197 = add nsw i32 %.0109157, 1
  %.not162 = icmp sgt i32 %.0109157, %83
  br i1 %.not162, label %198, label %97, !llvm.loop !36

198:                                              ; preds = %196
  %199 = add nsw i32 %.0108158, 1
  %.not163 = icmp sgt i32 %.0108158, %78
  br i1 %.not163, label %200, label %96, !llvm.loop !37

200:                                              ; preds = %198
  tail call void @findcollisions(ptr noundef nonnull %0)
  ret void
}

; Function Attrs: nounwind uwtable
declare dso_local void @update(ptr 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 @addtocelllist(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 @findcollisions(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, !7, i64 72, !8, i64 80, !8, i64 272, !7, i64 280, !7, i64 288, !7, i64 296, !7, i64 304, !8, i64 312, !8, i64 313, !8, i64 314, !8, i64 315, !10, i64 316, !10, i64 320, !10, i64 324, !11, i64 328, !10, i64 336, !11, i64 344, !11, i64 352, !10, i64 360, !8, i64 364}
!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 316}
!14 = !{!6, !7, i64 8}
!15 = !{!6, !10, i64 320}
!16 = !{!6, !7, i64 16}
!17 = !{!6, !10, i64 324}
!18 = !{!6, !7, i64 48}
!19 = !{!6, !7, i64 56}
!20 = !{!6, !7, i64 64}
!21 = !{!6, !8, i64 272}
!22 = !{!11, !11, i64 0}
!23 = distinct !{!23, !24}
!24 = !{!"llvm.loop.mustprogress"}
!25 = distinct !{!25, !24}
!26 = !{!6, !8, i64 313}
!27 = !{!10, !10, i64 0}
!28 = !{!6, !8, i64 314}
!29 = !{!6, !8, i64 315}
!30 = !{!6, !8, i64 312}
!31 = !{!6, !7, i64 288}
!32 = !{!6, !7, i64 72}
!33 = !{!6, !7, i64 296}
!34 = distinct !{!34, !24}
!35 = distinct !{!35, !24}
!36 = distinct !{!36, !24}
!37 = distinct !{!37, !24}


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