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

@xsize = external dso_local global double, align 8
@ysize = external dso_local global double, align 8
@zsize = 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

; 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

; Function Attrs: nounwind uwtable
define dso_local i32 @overlaplist(ptr noundef %0, i32 noundef %1) #2 {
  %3 = alloca i32, align 4
  %4 = alloca ptr, align 8
  %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 i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca ptr, align 8
  %14 = alloca double, align 8
  %15 = alloca double, align 8
  %16 = alloca double, align 8
  %17 = alloca double, align 8
  %18 = alloca double, align 8
  %19 = alloca double, align 8
  %20 = alloca i32, align 4
  store ptr %0, ptr %4, align 8, !tbaa !5
  store i32 %1, ptr %5, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #4
  %21 = load i32, ptr %5, align 4, !tbaa !9
  %22 = sitofp i32 %21 to double
  %23 = call double @pow(double noundef 1.000000e+01, double noundef -1.000000e+01) #4
  %24 = fmul double %22, %23
  store double %24, ptr %19, align 8, !tbaa !11
  %25 = load ptr, ptr %4, align 8, !tbaa !5
  %26 = getelementptr inbounds %struct.sparticle, ptr %25, i32 0, i32 17
  %27 = load i8, ptr %26, align 1, !tbaa !13
  %28 = zext i8 %27 to i32
  %29 = load i32, ptr @cx, align 4, !tbaa !9
  %30 = add nsw i32 %28, %29
  store i32 %30, ptr %9, align 4, !tbaa !9
  %31 = load ptr, ptr %4, align 8, !tbaa !5
  %32 = getelementptr inbounds %struct.sparticle, ptr %31, i32 0, i32 18
  %33 = load i8, ptr %32, align 2, !tbaa !15
  %34 = zext i8 %33 to i32
  %35 = load i32, ptr @cy, align 4, !tbaa !9
  %36 = add nsw i32 %34, %35
  store i32 %36, ptr %10, align 4, !tbaa !9
  %37 = load ptr, ptr %4, align 8, !tbaa !5
  %38 = getelementptr inbounds %struct.sparticle, ptr %37, i32 0, i32 19
  %39 = load i8, ptr %38, align 1, !tbaa !16
  %40 = zext i8 %39 to i32
  %41 = load i32, ptr @cz, align 4, !tbaa !9
  %42 = add nsw i32 %40, %41
  store i32 %42, ptr %11, align 4, !tbaa !9
  %43 = load ptr, ptr %4, align 8, !tbaa !5
  %44 = getelementptr inbounds %struct.sparticle, ptr %43, i32 0, i32 27
  %45 = load i32, ptr %44, align 8, !tbaa !17
  store i32 %45, ptr %12, align 4, !tbaa !9
  %46 = load i32, ptr %9, align 4, !tbaa !9
  %47 = sub nsw i32 %46, 1
  store i32 %47, ptr %6, align 4, !tbaa !9
  br label %48

48:                                               ; preds = %212, %2
  %49 = load i32, ptr %6, align 4, !tbaa !9
  %50 = load i32, ptr %9, align 4, !tbaa !9
  %51 = add nsw i32 %50, 2
  %52 = icmp slt i32 %49, %51
  br i1 %52, label %53, label %215

53:                                               ; preds = %48
  %54 = load i32, ptr %10, align 4, !tbaa !9
  %55 = sub nsw i32 %54, 1
  store i32 %55, ptr %7, align 4, !tbaa !9
  br label %56

56:                                               ; preds = %208, %53
  %57 = load i32, ptr %7, align 4, !tbaa !9
  %58 = load i32, ptr %10, align 4, !tbaa !9
  %59 = add nsw i32 %58, 2
  %60 = icmp slt i32 %57, %59
  br i1 %60, label %61, label %211

61:                                               ; preds = %56
  %62 = load i32, ptr %11, align 4, !tbaa !9
  %63 = sub nsw i32 %62, 1
  store i32 %63, ptr %8, align 4, !tbaa !9
  br label %64

64:                                               ; preds = %204, %61
  %65 = load i32, ptr %8, align 4, !tbaa !9
  %66 = load i32, ptr %11, align 4, !tbaa !9
  %67 = add nsw i32 %66, 2
  %68 = icmp slt i32 %65, %67
  br i1 %68, label %69, label %207

69:                                               ; preds = %64
  %70 = load i32, ptr %6, align 4, !tbaa !9
  %71 = load i32, ptr @cx, align 4, !tbaa !9
  %72 = srem i32 %70, %71
  %73 = sext i32 %72 to i64
  %74 = getelementptr inbounds [75 x [75 x [75 x ptr]]], ptr @celllist, i64 0, i64 %73
  %75 = load i32, ptr %7, align 4, !tbaa !9
  %76 = load i32, ptr @cy, align 4, !tbaa !9
  %77 = srem i32 %75, %76
  %78 = sext i32 %77 to i64
  %79 = getelementptr inbounds [75 x [75 x ptr]], ptr %74, i64 0, i64 %78
  %80 = load i32, ptr %8, align 4, !tbaa !9
  %81 = load i32, ptr @cz, align 4, !tbaa !9
  %82 = srem i32 %80, %81
  %83 = sext i32 %82 to i64
  %84 = getelementptr inbounds [75 x ptr], ptr %79, i64 0, i64 %83
  %85 = load ptr, ptr %84, align 8, !tbaa !5
  store ptr %85, ptr %13, align 8, !tbaa !5
  br label %86

86:                                               ; preds = %199, %69
  %87 = load ptr, ptr %13, align 8, !tbaa !5
  %88 = icmp ne ptr %87, null
  br i1 %88, label %89, label %203

89:                                               ; preds = %86
  %90 = load ptr, ptr %13, align 8, !tbaa !5
  %91 = getelementptr inbounds %struct.sparticle, ptr %90, i32 0, i32 27
  %92 = load i32, ptr %91, align 8, !tbaa !17
  %93 = load i32, ptr %12, align 4, !tbaa !9
  %94 = icmp ne i32 %92, %93
  br i1 %94, label %95, label %199

95:                                               ; preds = %89
  %96 = load ptr, ptr %4, align 8, !tbaa !5
  %97 = getelementptr inbounds %struct.sparticle, ptr %96, i32 0, i32 0
  %98 = load double, ptr %97, align 8, !tbaa !18
  %99 = load ptr, ptr %13, align 8, !tbaa !5
  %100 = getelementptr inbounds %struct.sparticle, ptr %99, i32 0, i32 0
  %101 = load double, ptr %100, align 8, !tbaa !18
  %102 = fsub double %98, %101
  store double %102, ptr %14, align 8, !tbaa !11
  %103 = load ptr, ptr %4, align 8, !tbaa !5
  %104 = getelementptr inbounds %struct.sparticle, ptr %103, i32 0, i32 1
  %105 = load double, ptr %104, align 8, !tbaa !19
  %106 = load ptr, ptr %13, align 8, !tbaa !5
  %107 = getelementptr inbounds %struct.sparticle, ptr %106, i32 0, i32 1
  %108 = load double, ptr %107, align 8, !tbaa !19
  %109 = fsub double %105, %108
  store double %109, ptr %15, align 8, !tbaa !11
  %110 = load ptr, ptr %4, align 8, !tbaa !5
  %111 = getelementptr inbounds %struct.sparticle, ptr %110, i32 0, i32 2
  %112 = load double, ptr %111, align 8, !tbaa !20
  %113 = load ptr, ptr %13, align 8, !tbaa !5
  %114 = getelementptr inbounds %struct.sparticle, ptr %113, i32 0, i32 2
  %115 = load double, ptr %114, align 8, !tbaa !20
  %116 = fsub double %112, %115
  store double %116, ptr %16, align 8, !tbaa !11
  %117 = load double, ptr %14, align 8, !tbaa !11
  %118 = load double, ptr @xsize, align 8, !tbaa !11
  %119 = fmul double 5.000000e-01, %118
  %120 = fcmp ogt double %117, %119
  br i1 %120, label %121, label %125

121:                                              ; preds = %95
  %122 = load double, ptr @xsize, align 8, !tbaa !11
  %123 = load double, ptr %14, align 8, !tbaa !11
  %124 = fsub double %123, %122
  store double %124, ptr %14, align 8, !tbaa !11
  br label %135

125:                                              ; preds = %95
  %126 = load double, ptr %14, align 8, !tbaa !11
  %127 = load double, ptr @xsize, align 8, !tbaa !11
  %128 = fmul double -5.000000e-01, %127
  %129 = fcmp olt double %126, %128
  br i1 %129, label %130, label %134

130:                                              ; preds = %125
  %131 = load double, ptr @xsize, align 8, !tbaa !11
  %132 = load double, ptr %14, align 8, !tbaa !11
  %133 = fadd double %132, %131
  store double %133, ptr %14, align 8, !tbaa !11
  br label %134

134:                                              ; preds = %130, %125
  br label %135

135:                                              ; preds = %134, %121
  %136 = load double, ptr %15, align 8, !tbaa !11
  %137 = load double, ptr @ysize, align 8, !tbaa !11
  %138 = fmul double 5.000000e-01, %137
  %139 = fcmp ogt double %136, %138
  br i1 %139, label %140, label %144

140:                                              ; preds = %135
  %141 = load double, ptr @ysize, align 8, !tbaa !11
  %142 = load double, ptr %15, align 8, !tbaa !11
  %143 = fsub double %142, %141
  store double %143, ptr %15, align 8, !tbaa !11
  br label %154

144:                                              ; preds = %135
  %145 = load double, ptr %15, align 8, !tbaa !11
  %146 = load double, ptr @ysize, align 8, !tbaa !11
  %147 = fmul double -5.000000e-01, %146
  %148 = fcmp olt double %145, %147
  br i1 %148, label %149, label %153

149:                                              ; preds = %144
  %150 = load double, ptr @ysize, align 8, !tbaa !11
  %151 = load double, ptr %15, align 8, !tbaa !11
  %152 = fadd double %151, %150
  store double %152, ptr %15, align 8, !tbaa !11
  br label %153

153:                                              ; preds = %149, %144
  br label %154

154:                                              ; preds = %153, %140
  %155 = load double, ptr %16, align 8, !tbaa !11
  %156 = load double, ptr @zsize, align 8, !tbaa !11
  %157 = fmul double 5.000000e-01, %156
  %158 = fcmp ogt double %155, %157
  br i1 %158, label %159, label %163

159:                                              ; preds = %154
  %160 = load double, ptr @zsize, align 8, !tbaa !11
  %161 = load double, ptr %16, align 8, !tbaa !11
  %162 = fsub double %161, %160
  store double %162, ptr %16, align 8, !tbaa !11
  br label %173

163:                                              ; preds = %154
  %164 = load double, ptr %16, align 8, !tbaa !11
  %165 = load double, ptr @zsize, align 8, !tbaa !11
  %166 = fmul double -5.000000e-01, %165
  %167 = fcmp olt double %164, %166
  br i1 %167, label %168, label %172

168:                                              ; preds = %163
  %169 = load double, ptr @zsize, align 8, !tbaa !11
  %170 = load double, ptr %16, align 8, !tbaa !11
  %171 = fadd double %170, %169
  store double %171, ptr %16, align 8, !tbaa !11
  br label %172

172:                                              ; preds = %168, %163
  br label %173

173:                                              ; preds = %172, %159
  %174 = load double, ptr %14, align 8, !tbaa !11
  %175 = load double, ptr %14, align 8, !tbaa !11
  %176 = load double, ptr %15, align 8, !tbaa !11
  %177 = load double, ptr %15, align 8, !tbaa !11
  %178 = fmul double %176, %177
  %179 = call double @llvm.fmuladd.f64(double %174, double %175, double %178)
  %180 = load double, ptr %16, align 8, !tbaa !11
  %181 = load double, ptr %16, align 8, !tbaa !11
  %182 = call double @llvm.fmuladd.f64(double %180, double %181, double %179)
  store double %182, ptr %17, align 8, !tbaa !11
  %183 = load ptr, ptr %13, align 8, !tbaa !5
  %184 = getelementptr inbounds %struct.sparticle, ptr %183, i32 0, i32 13
  %185 = load double, ptr %184, align 8, !tbaa !21
  %186 = load ptr, ptr %4, align 8, !tbaa !5
  %187 = getelementptr inbounds %struct.sparticle, ptr %186, i32 0, i32 13
  %188 = load double, ptr %187, align 8, !tbaa !21
  %189 = fadd double %185, %188
  store double %189, ptr %18, align 8, !tbaa !11
  %190 = load double, ptr %17, align 8, !tbaa !11
  %191 = load double, ptr %18, align 8, !tbaa !11
  %192 = load double, ptr %18, align 8, !tbaa !11
  %193 = load double, ptr %19, align 8, !tbaa !11
  %194 = fneg double %193
  %195 = call double @llvm.fmuladd.f64(double %191, double %192, double %194)
  %196 = fcmp olt double %190, %195
  br i1 %196, label %197, label %198

197:                                              ; preds = %173
  store i32 1, ptr %3, align 4
  store i32 1, ptr %20, align 4
  br label %216

198:                                              ; preds = %173
  br label %199

199:                                              ; preds = %198, %89
  %200 = load ptr, ptr %13, align 8, !tbaa !5
  %201 = getelementptr inbounds %struct.sparticle, ptr %200, i32 0, i32 26
  %202 = load ptr, ptr %201, align 8, !tbaa !22
  store ptr %202, ptr %13, align 8, !tbaa !5
  br label %86, !llvm.loop !23

203:                                              ; preds = %86
  br label %204

204:                                              ; preds = %203
  %205 = load i32, ptr %8, align 4, !tbaa !9
  %206 = add nsw i32 %205, 1
  store i32 %206, ptr %8, align 4, !tbaa !9
  br label %64, !llvm.loop !25

207:                                              ; preds = %64
  br label %208

208:                                              ; preds = %207
  %209 = load i32, ptr %7, align 4, !tbaa !9
  %210 = add nsw i32 %209, 1
  store i32 %210, ptr %7, align 4, !tbaa !9
  br label %56, !llvm.loop !26

211:                                              ; preds = %56
  br label %212

212:                                              ; preds = %211
  %213 = load i32, ptr %6, align 4, !tbaa !9
  %214 = add nsw i32 %213, 1
  store i32 %214, ptr %6, align 4, !tbaa !9
  br label %48, !llvm.loop !27

215:                                              ; preds = %48
  store i32 0, ptr %3, align 4
  store i32 1, ptr %20, align 4
  br label %216

216:                                              ; preds = %215, %197
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #4
  %217 = load i32, ptr %3, align 4
  ret i32 %217
}

; Function Attrs: nounwind
declare double @pow(double noundef, double noundef) #3

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
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 = { 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 = { 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, !12, i64 0}
!12 = !{!"double", !7, i64 0}
!13 = !{!14, !7, i64 313}
!14 = !{!"sparticle", !12, i64 0, !12, i64 8, !12, i64 16, !12, i64 24, !12, i64 32, !12, i64 40, !12, i64 48, !12, i64 56, !12, i64 64, !12, i64 72, !7, i64 80, !7, i64 272, !12, i64 280, !12, i64 288, !12, i64 296, !12, 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}
!15 = !{!14, !7, i64 314}
!16 = !{!14, !7, i64 315}
!17 = !{!14, !10, i64 360}
!18 = !{!14, !12, i64 0}
!19 = !{!14, !12, i64 8}
!20 = !{!14, !12, i64 16}
!21 = !{!14, !12, i64 288}
!22 = !{!14, !6, i64 352}
!23 = distinct !{!23, !24}
!24 = !{!"llvm.loop.mustprogress"}
!25 = distinct !{!25, !24}
!26 = distinct !{!26, !24}
!27 = distinct !{!27, !24}


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

@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
@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

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

; Function Attrs: nofree norecurse nosync nounwind memory(read, inaccessiblemem: none) uwtable
define dso_local range(i32 0, 2) i32 @overlaplist(ptr nocapture noundef readonly %0, i32 noundef %1) local_unnamed_addr #1 {
  %3 = sitofp i32 %1 to double
  %4 = getelementptr inbounds i8, ptr %0, i64 313
  %5 = load i8, ptr %4, align 1, !tbaa !5
  %6 = zext i8 %5 to i32
  %7 = load i32, ptr @cx, align 4, !tbaa !12
  %8 = add nsw i32 %7, %6
  %9 = getelementptr inbounds i8, ptr %0, i64 314
  %10 = load i8, ptr %9, align 2, !tbaa !13
  %11 = zext i8 %10 to i32
  %12 = load i32, ptr @cy, align 4, !tbaa !12
  %13 = add nsw i32 %12, %11
  %14 = getelementptr inbounds i8, ptr %0, i64 315
  %15 = load i8, ptr %14, align 1, !tbaa !14
  %16 = zext i8 %15 to i32
  %17 = load i32, ptr @cz, align 4, !tbaa !12
  %18 = add nsw i32 %17, %16
  %19 = getelementptr inbounds i8, ptr %0, i64 360
  %20 = load i32, ptr %19, align 8, !tbaa !15
  %21 = add nsw i32 %8, -1
  %22 = add nsw i32 %13, -1
  %23 = add nsw i32 %18, -1
  %24 = getelementptr inbounds i8, ptr %0, i64 8
  %25 = getelementptr inbounds i8, ptr %0, i64 16
  %26 = load double, ptr @xsize, align 8
  %27 = fmul double %26, 5.000000e-01
  %28 = fmul double %26, -5.000000e-01
  %29 = load double, ptr @ysize, align 8
  %30 = fmul double %29, 5.000000e-01
  %31 = fmul double %29, -5.000000e-01
  %32 = load double, ptr @zsize, align 8
  %33 = fmul double %32, 5.000000e-01
  %34 = fmul double %32, -5.000000e-01
  %35 = getelementptr inbounds i8, ptr %0, i64 288
  %36 = fmul double %3, -1.000000e-10
  br label %37

37:                                               ; preds = %2, %104
  %.05473 = phi i32 [ %21, %2 ], [ %105, %104 ]
  %38 = srem i32 %.05473, %7
  %39 = sext i32 %38 to i64
  br label %40

40:                                               ; preds = %37, %102
  %.05572 = phi i32 [ %22, %37 ], [ %103, %102 ]
  %41 = srem i32 %.05572, %12
  %42 = sext i32 %41 to i64
  br label %43

43:                                               ; preds = %40, %._crit_edge
  %.06071 = phi i32 [ %23, %40 ], [ %101, %._crit_edge ]
  %44 = srem i32 %.06071, %17
  %45 = sext i32 %44 to i64
  %46 = getelementptr inbounds [75 x [75 x [75 x ptr]]], ptr @celllist, i64 0, i64 %39, i64 %42, i64 %45
  %.05968 = load ptr, ptr %46, align 8, !tbaa !16
  %.not69 = icmp eq ptr %.05968, null
  br i1 %.not69, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %43, %99
  %.05970 = phi ptr [ %.059, %99 ], [ %.05968, %43 ]
  %47 = getelementptr inbounds i8, ptr %.05970, i64 360
  %48 = load i32, ptr %47, align 8, !tbaa !15
  %.not66 = icmp eq i32 %48, %20
  br i1 %.not66, label %99, label %49

49:                                               ; preds = %.lr.ph
  %50 = load double, ptr %0, align 8, !tbaa !17
  %51 = load double, ptr %.05970, align 8, !tbaa !17
  %52 = fsub double %50, %51
  %53 = load double, ptr %24, align 8, !tbaa !18
  %54 = getelementptr inbounds i8, ptr %.05970, i64 8
  %55 = load double, ptr %54, align 8, !tbaa !18
  %56 = fsub double %53, %55
  %57 = load double, ptr %25, align 8, !tbaa !19
  %58 = getelementptr inbounds i8, ptr %.05970, i64 16
  %59 = load double, ptr %58, align 8, !tbaa !19
  %60 = fsub double %57, %59
  %61 = fcmp ogt double %52, %27
  br i1 %61, label %62, label %64

62:                                               ; preds = %49
  %63 = fsub double %52, %26
  br label %68

64:                                               ; preds = %49
  %65 = fcmp olt double %52, %28
  br i1 %65, label %66, label %68

66:                                               ; preds = %64
  %67 = fadd double %52, %26
  br label %68

68:                                               ; preds = %64, %66, %62
  %.058 = phi double [ %63, %62 ], [ %67, %66 ], [ %52, %64 ]
  %69 = fcmp ogt double %56, %30
  br i1 %69, label %70, label %72

70:                                               ; preds = %68
  %71 = fsub double %56, %29
  br label %76

72:                                               ; preds = %68
  %73 = fcmp olt double %56, %31
  br i1 %73, label %74, label %76

74:                                               ; preds = %72
  %75 = fadd double %56, %29
  br label %76

76:                                               ; preds = %72, %74, %70
  %.057 = phi double [ %71, %70 ], [ %75, %74 ], [ %56, %72 ]
  %77 = fcmp ogt double %60, %33
  br i1 %77, label %78, label %80

78:                                               ; preds = %76
  %79 = fsub double %60, %32
  br label %84

80:                                               ; preds = %76
  %81 = fcmp olt double %60, %34
  br i1 %81, label %82, label %84

82:                                               ; preds = %80
  %83 = fadd double %60, %32
  br label %84

84:                                               ; preds = %80, %82, %78
  %.056 = phi double [ %79, %78 ], [ %83, %82 ], [ %60, %80 ]
  %85 = fmul double %.057, %.057
  %86 = tail call double @llvm.fmuladd.f64(double %.058, double %.058, double %85)
  %87 = getelementptr inbounds i8, ptr %.05970, i64 288
  %88 = load double, ptr %87, align 8, !tbaa !20
  %89 = load double, ptr %35, align 8, !tbaa !20
  %90 = fadd double %88, %89
  %91 = insertelement <2 x double> poison, double %.056, i64 0
  %92 = insertelement <2 x double> %91, double %90, i64 1
  %93 = insertelement <2 x double> poison, double %86, i64 0
  %94 = insertelement <2 x double> %93, double %36, i64 1
  %95 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %92, <2 x double> %92, <2 x double> %94)
  %96 = extractelement <2 x double> %95, i64 0
  %97 = extractelement <2 x double> %95, i64 1
  %98 = fcmp olt double %96, %97
  br i1 %98, label %.loopexit, label %99

99:                                               ; preds = %84, %.lr.ph
  %100 = getelementptr inbounds i8, ptr %.05970, i64 352
  %.059 = load ptr, ptr %100, align 8, !tbaa !16
  %.not = icmp eq ptr %.059, null
  br i1 %.not, label %._crit_edge, label %.lr.ph, !llvm.loop !21

._crit_edge:                                      ; preds = %99, %43
  %101 = add nsw i32 %.06071, 1
  %.not74 = icmp sgt i32 %.06071, %18
  br i1 %.not74, label %102, label %43, !llvm.loop !23

102:                                              ; preds = %._crit_edge
  %103 = add nsw i32 %.05572, 1
  %.not75 = icmp sgt i32 %.05572, %13
  br i1 %.not75, label %104, label %40, !llvm.loop !24

104:                                              ; preds = %102
  %105 = add nsw i32 %.05473, 1
  %.not76 = icmp sgt i32 %.05473, %8
  br i1 %.not76, label %.loopexit, label %37, !llvm.loop !25

.loopexit:                                        ; preds = %104, %84
  %.0 = phi i32 [ 1, %84 ], [ 0, %104 ]
  ret i32 %.0
}

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

attributes #0 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #1 = { nofree norecurse nosync nounwind memory(read, inaccessiblemem: none) uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }

!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, !8, i64 313}
!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 = !{!10, !10, i64 0}
!13 = !{!6, !8, i64 314}
!14 = !{!6, !8, i64 315}
!15 = !{!6, !10, i64 360}
!16 = !{!11, !11, i64 0}
!17 = !{!6, !7, i64 0}
!18 = !{!6, !7, i64 8}
!19 = !{!6, !7, i64 16}
!20 = !{!6, !7, i64 288}
!21 = distinct !{!21, !22}
!22 = !{!"llvm.loop.mustprogress"}
!23 = distinct !{!23, !22}
!24 = distinct !{!24, !22}
!25 = distinct !{!25, !22}


; Effective O3 passes: EarlyCSEPass,GlobalOptPass,IPSCCPPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,LICMPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,PostOrderFunctionAttrsPass,SLPVectorizerPass,SROAPass,SimplifyCFGPass,TailCallElimPass