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

@cxsize = external dso_local global double, align 8
@cysize = external dso_local global double, align 8
@czsize = 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.35 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.36 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.37 = external hidden unnamed_addr constant [32 x i8], align 1
@.str.38 = external hidden unnamed_addr constant [32 x i8], align 1
@.str.39 = external hidden unnamed_addr constant [32 x i8], align 1
@.str.40 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.41 = external hidden unnamed_addr constant [35 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: noreturn nounwind
declare void @exit(i32 noundef) #3

; Function Attrs: nounwind uwtable
define dso_local void @checkcells() #4 {
  %1 = alloca i32, align 4
  %2 = alloca i32, align 4
  %3 = alloca i32, align 4
  %4 = alloca i32, align 4
  %5 = alloca double, align 8
  %6 = alloca ptr, align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr %1) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %2) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %3) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %4) #5
  store i32 0, ptr %4, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %5) #5
  store double 0x3E7AD7F29ABCAF48, ptr %5, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %6) #5
  store i32 0, ptr %1, align 4, !tbaa !5
  br label %7

7:                                                ; preds = %243, %0
  %8 = load i32, ptr %1, align 4, !tbaa !5
  %9 = load i32, ptr @cx, align 4, !tbaa !5
  %10 = icmp slt i32 %8, %9
  br i1 %10, label %11, label %246

11:                                               ; preds = %7
  store i32 0, ptr %2, align 4, !tbaa !5
  br label %12

12:                                               ; preds = %239, %11
  %13 = load i32, ptr %2, align 4, !tbaa !5
  %14 = load i32, ptr @cy, align 4, !tbaa !5
  %15 = icmp slt i32 %13, %14
  br i1 %15, label %16, label %242

16:                                               ; preds = %12
  store i32 0, ptr %3, align 4, !tbaa !5
  br label %17

17:                                               ; preds = %235, %16
  %18 = load i32, ptr %3, align 4, !tbaa !5
  %19 = load i32, ptr @cz, align 4, !tbaa !5
  %20 = icmp slt i32 %18, %19
  br i1 %20, label %21, label %238

21:                                               ; preds = %17
  %22 = load i32, ptr %1, align 4, !tbaa !5
  %23 = sext i32 %22 to i64
  %24 = getelementptr inbounds [75 x [75 x [75 x ptr]]], ptr @celllist, i64 0, i64 %23
  %25 = load i32, ptr %2, align 4, !tbaa !5
  %26 = sext i32 %25 to i64
  %27 = getelementptr inbounds [75 x [75 x ptr]], ptr %24, i64 0, i64 %26
  %28 = load i32, ptr %3, align 4, !tbaa !5
  %29 = sext i32 %28 to i64
  %30 = getelementptr inbounds [75 x ptr], ptr %27, i64 0, i64 %29
  %31 = load ptr, ptr %30, align 8, !tbaa !11
  store ptr %31, ptr %6, align 8, !tbaa !11
  %32 = load ptr, ptr %6, align 8, !tbaa !11
  %33 = icmp ne ptr %32, null
  br i1 %33, label %34, label %234

34:                                               ; preds = %21
  %35 = load ptr, ptr %6, align 8, !tbaa !11
  %36 = getelementptr inbounds %struct.sparticle, ptr %35, i32 0, i32 25
  %37 = load ptr, ptr %36, align 8, !tbaa !13
  %38 = icmp ne ptr %37, null
  br i1 %38, label %39, label %52

39:                                               ; preds = %34
  %40 = load i32, ptr %1, align 4, !tbaa !5
  %41 = load i32, ptr %2, align 4, !tbaa !5
  %42 = load i32, ptr %3, align 4, !tbaa !5
  %43 = load ptr, ptr %6, align 8, !tbaa !11
  %44 = getelementptr inbounds %struct.sparticle, ptr %43, i32 0, i32 27
  %45 = load i32, ptr %44, align 8, !tbaa !15
  %46 = load ptr, ptr %6, align 8, !tbaa !11
  %47 = getelementptr inbounds %struct.sparticle, ptr %46, i32 0, i32 25
  %48 = load ptr, ptr %47, align 8, !tbaa !13
  %49 = getelementptr inbounds %struct.sparticle, ptr %48, i32 0, i32 27
  %50 = load i32, ptr %49, align 8, !tbaa !15
  %51 = call i32 (ptr, ...) @printf(ptr noundef @.str.35, i32 noundef %40, i32 noundef %41, i32 noundef %42, i32 noundef %45, i32 noundef %50)
  br label %52

52:                                               ; preds = %39, %34
  br label %53

53:                                               ; preds = %229, %52
  %54 = load ptr, ptr %6, align 8, !tbaa !11
  %55 = icmp ne ptr %54, null
  br i1 %55, label %56, label %233

56:                                               ; preds = %53
  %57 = load i32, ptr %4, align 4, !tbaa !5
  %58 = add nsw i32 %57, 1
  store i32 %58, ptr %4, align 4, !tbaa !5
  %59 = load ptr, ptr %6, align 8, !tbaa !11
  %60 = getelementptr inbounds %struct.sparticle, ptr %59, i32 0, i32 17
  %61 = load i8, ptr %60, align 1, !tbaa !16
  %62 = zext i8 %61 to i32
  %63 = load i32, ptr %1, align 4, !tbaa !5
  %64 = icmp ne i32 %62, %63
  br i1 %64, label %79, label %65

65:                                               ; preds = %56
  %66 = load ptr, ptr %6, align 8, !tbaa !11
  %67 = getelementptr inbounds %struct.sparticle, ptr %66, i32 0, i32 18
  %68 = load i8, ptr %67, align 2, !tbaa !17
  %69 = zext i8 %68 to i32
  %70 = load i32, ptr %2, align 4, !tbaa !5
  %71 = icmp ne i32 %69, %70
  br i1 %71, label %79, label %72

72:                                               ; preds = %65
  %73 = load ptr, ptr %6, align 8, !tbaa !11
  %74 = getelementptr inbounds %struct.sparticle, ptr %73, i32 0, i32 19
  %75 = load i8, ptr %74, align 1, !tbaa !18
  %76 = zext i8 %75 to i32
  %77 = load i32, ptr %3, align 4, !tbaa !5
  %78 = icmp ne i32 %76, %77
  br i1 %78, label %79, label %96

79:                                               ; preds = %72, %65, %56
  %80 = load i32, ptr %1, align 4, !tbaa !5
  %81 = load i32, ptr %2, align 4, !tbaa !5
  %82 = load i32, ptr %3, align 4, !tbaa !5
  %83 = load ptr, ptr %6, align 8, !tbaa !11
  %84 = getelementptr inbounds %struct.sparticle, ptr %83, i32 0, i32 17
  %85 = load i8, ptr %84, align 1, !tbaa !16
  %86 = zext i8 %85 to i32
  %87 = load ptr, ptr %6, align 8, !tbaa !11
  %88 = getelementptr inbounds %struct.sparticle, ptr %87, i32 0, i32 18
  %89 = load i8, ptr %88, align 2, !tbaa !17
  %90 = zext i8 %89 to i32
  %91 = load ptr, ptr %6, align 8, !tbaa !11
  %92 = getelementptr inbounds %struct.sparticle, ptr %91, i32 0, i32 19
  %93 = load i8, ptr %92, align 1, !tbaa !18
  %94 = zext i8 %93 to i32
  %95 = call i32 (ptr, ...) @printf(ptr noundef @.str.36, i32 noundef %80, i32 noundef %81, i32 noundef %82, i32 noundef %86, i32 noundef %90, i32 noundef %94)
  call void @exit(i32 noundef 3) #6
  unreachable

96:                                               ; preds = %72
  %97 = load ptr, ptr %6, align 8, !tbaa !11
  %98 = getelementptr inbounds %struct.sparticle, ptr %97, i32 0, i32 0
  %99 = load double, ptr %98, align 8, !tbaa !19
  %100 = load double, ptr @cxsize, align 8, !tbaa !9
  %101 = load i32, ptr %1, align 4, !tbaa !5
  %102 = sitofp i32 %101 to double
  %103 = load double, ptr %5, align 8, !tbaa !9
  %104 = fneg double %103
  %105 = call double @llvm.fmuladd.f64(double %100, double %102, double %104)
  %106 = fcmp olt double %99, %105
  br i1 %106, label %118, label %107

107:                                              ; preds = %96
  %108 = load ptr, ptr %6, align 8, !tbaa !11
  %109 = getelementptr inbounds %struct.sparticle, ptr %108, i32 0, i32 0
  %110 = load double, ptr %109, align 8, !tbaa !19
  %111 = load double, ptr @cxsize, align 8, !tbaa !9
  %112 = load i32, ptr %1, align 4, !tbaa !5
  %113 = add nsw i32 %112, 1
  %114 = sitofp i32 %113 to double
  %115 = load double, ptr %5, align 8, !tbaa !9
  %116 = call double @llvm.fmuladd.f64(double %111, double %114, double %115)
  %117 = fcmp ogt double %110, %116
  br i1 %117, label %118, label %130

118:                                              ; preds = %107, %96
  %119 = load ptr, ptr %6, align 8, !tbaa !11
  %120 = getelementptr inbounds %struct.sparticle, ptr %119, i32 0, i32 0
  %121 = load double, ptr %120, align 8, !tbaa !19
  %122 = load i32, ptr %1, align 4, !tbaa !5
  %123 = load ptr, ptr %6, align 8, !tbaa !11
  %124 = getelementptr inbounds %struct.sparticle, ptr %123, i32 0, i32 27
  %125 = load i32, ptr %124, align 8, !tbaa !15
  %126 = load ptr, ptr %6, align 8, !tbaa !11
  %127 = getelementptr inbounds %struct.sparticle, ptr %126, i32 0, i32 3
  %128 = load double, ptr %127, align 8, !tbaa !20
  %129 = call i32 (ptr, ...) @printf(ptr noundef @.str.37, double noundef %121, i32 noundef %122, i32 noundef %125, double noundef %128)
  call void @exit(i32 noundef 3) #6
  unreachable

130:                                              ; preds = %107
  %131 = load ptr, ptr %6, align 8, !tbaa !11
  %132 = getelementptr inbounds %struct.sparticle, ptr %131, i32 0, i32 1
  %133 = load double, ptr %132, align 8, !tbaa !21
  %134 = load double, ptr @cysize, align 8, !tbaa !9
  %135 = load i32, ptr %2, align 4, !tbaa !5
  %136 = sitofp i32 %135 to double
  %137 = load double, ptr %5, align 8, !tbaa !9
  %138 = fneg double %137
  %139 = call double @llvm.fmuladd.f64(double %134, double %136, double %138)
  %140 = fcmp olt double %133, %139
  br i1 %140, label %152, label %141

141:                                              ; preds = %130
  %142 = load ptr, ptr %6, align 8, !tbaa !11
  %143 = getelementptr inbounds %struct.sparticle, ptr %142, i32 0, i32 1
  %144 = load double, ptr %143, align 8, !tbaa !21
  %145 = load double, ptr @cysize, align 8, !tbaa !9
  %146 = load i32, ptr %2, align 4, !tbaa !5
  %147 = add nsw i32 %146, 1
  %148 = sitofp i32 %147 to double
  %149 = load double, ptr %5, align 8, !tbaa !9
  %150 = call double @llvm.fmuladd.f64(double %145, double %148, double %149)
  %151 = fcmp ogt double %144, %150
  br i1 %151, label %152, label %164

152:                                              ; preds = %141, %130
  %153 = load ptr, ptr %6, align 8, !tbaa !11
  %154 = getelementptr inbounds %struct.sparticle, ptr %153, i32 0, i32 1
  %155 = load double, ptr %154, align 8, !tbaa !21
  %156 = load i32, ptr %2, align 4, !tbaa !5
  %157 = load ptr, ptr %6, align 8, !tbaa !11
  %158 = getelementptr inbounds %struct.sparticle, ptr %157, i32 0, i32 27
  %159 = load i32, ptr %158, align 8, !tbaa !15
  %160 = load ptr, ptr %6, align 8, !tbaa !11
  %161 = getelementptr inbounds %struct.sparticle, ptr %160, i32 0, i32 4
  %162 = load double, ptr %161, align 8, !tbaa !22
  %163 = call i32 (ptr, ...) @printf(ptr noundef @.str.38, double noundef %155, i32 noundef %156, i32 noundef %159, double noundef %162)
  call void @exit(i32 noundef 3) #6
  unreachable

164:                                              ; preds = %141
  %165 = load ptr, ptr %6, align 8, !tbaa !11
  %166 = getelementptr inbounds %struct.sparticle, ptr %165, i32 0, i32 2
  %167 = load double, ptr %166, align 8, !tbaa !23
  %168 = load double, ptr @czsize, align 8, !tbaa !9
  %169 = load i32, ptr %3, align 4, !tbaa !5
  %170 = sitofp i32 %169 to double
  %171 = load double, ptr %5, align 8, !tbaa !9
  %172 = fneg double %171
  %173 = call double @llvm.fmuladd.f64(double %168, double %170, double %172)
  %174 = fcmp olt double %167, %173
  br i1 %174, label %186, label %175

175:                                              ; preds = %164
  %176 = load ptr, ptr %6, align 8, !tbaa !11
  %177 = getelementptr inbounds %struct.sparticle, ptr %176, i32 0, i32 2
  %178 = load double, ptr %177, align 8, !tbaa !23
  %179 = load double, ptr @czsize, align 8, !tbaa !9
  %180 = load i32, ptr %3, align 4, !tbaa !5
  %181 = add nsw i32 %180, 1
  %182 = sitofp i32 %181 to double
  %183 = load double, ptr %5, align 8, !tbaa !9
  %184 = call double @llvm.fmuladd.f64(double %179, double %182, double %183)
  %185 = fcmp ogt double %178, %184
  br i1 %185, label %186, label %198

186:                                              ; preds = %175, %164
  %187 = load ptr, ptr %6, align 8, !tbaa !11
  %188 = getelementptr inbounds %struct.sparticle, ptr %187, i32 0, i32 2
  %189 = load double, ptr %188, align 8, !tbaa !23
  %190 = load i32, ptr %3, align 4, !tbaa !5
  %191 = load ptr, ptr %6, align 8, !tbaa !11
  %192 = getelementptr inbounds %struct.sparticle, ptr %191, i32 0, i32 27
  %193 = load i32, ptr %192, align 8, !tbaa !15
  %194 = load ptr, ptr %6, align 8, !tbaa !11
  %195 = getelementptr inbounds %struct.sparticle, ptr %194, i32 0, i32 5
  %196 = load double, ptr %195, align 8, !tbaa !24
  %197 = call i32 (ptr, ...) @printf(ptr noundef @.str.39, double noundef %189, i32 noundef %190, i32 noundef %193, double noundef %196)
  call void @exit(i32 noundef 3) #6
  unreachable

198:                                              ; preds = %175
  %199 = load ptr, ptr %6, align 8, !tbaa !11
  %200 = getelementptr inbounds %struct.sparticle, ptr %199, i32 0, i32 26
  %201 = load ptr, ptr %200, align 8, !tbaa !25
  %202 = icmp ne ptr %201, null
  br i1 %202, label %203, label %229

203:                                              ; preds = %198
  %204 = load ptr, ptr %6, align 8, !tbaa !11
  %205 = getelementptr inbounds %struct.sparticle, ptr %204, i32 0, i32 26
  %206 = load ptr, ptr %205, align 8, !tbaa !25
  %207 = getelementptr inbounds %struct.sparticle, ptr %206, i32 0, i32 25
  %208 = load ptr, ptr %207, align 8, !tbaa !13
  %209 = load ptr, ptr %6, align 8, !tbaa !11
  %210 = icmp ne ptr %208, %209
  br i1 %210, label %211, label %228

211:                                              ; preds = %203
  %212 = load ptr, ptr %6, align 8, !tbaa !11
  %213 = getelementptr inbounds %struct.sparticle, ptr %212, i32 0, i32 27
  %214 = load i32, ptr %213, align 8, !tbaa !15
  %215 = load ptr, ptr %6, align 8, !tbaa !11
  %216 = getelementptr inbounds %struct.sparticle, ptr %215, i32 0, i32 26
  %217 = load ptr, ptr %216, align 8, !tbaa !25
  %218 = getelementptr inbounds %struct.sparticle, ptr %217, i32 0, i32 27
  %219 = load i32, ptr %218, align 8, !tbaa !15
  %220 = load ptr, ptr %6, align 8, !tbaa !11
  %221 = getelementptr inbounds %struct.sparticle, ptr %220, i32 0, i32 26
  %222 = load ptr, ptr %221, align 8, !tbaa !25
  %223 = getelementptr inbounds %struct.sparticle, ptr %222, i32 0, i32 25
  %224 = load ptr, ptr %223, align 8, !tbaa !13
  %225 = getelementptr inbounds %struct.sparticle, ptr %224, i32 0, i32 27
  %226 = load i32, ptr %225, align 8, !tbaa !15
  %227 = call i32 (ptr, ...) @printf(ptr noundef @.str.40, i32 noundef %214, i32 noundef %219, i32 noundef %226)
  br label %228

228:                                              ; preds = %211, %203
  br label %229

229:                                              ; preds = %228, %198
  %230 = load ptr, ptr %6, align 8, !tbaa !11
  %231 = getelementptr inbounds %struct.sparticle, ptr %230, i32 0, i32 26
  %232 = load ptr, ptr %231, align 8, !tbaa !25
  store ptr %232, ptr %6, align 8, !tbaa !11
  br label %53, !llvm.loop !26

233:                                              ; preds = %53
  br label %234

234:                                              ; preds = %233, %21
  br label %235

235:                                              ; preds = %234
  %236 = load i32, ptr %3, align 4, !tbaa !5
  %237 = add nsw i32 %236, 1
  store i32 %237, ptr %3, align 4, !tbaa !5
  br label %17, !llvm.loop !28

238:                                              ; preds = %17
  br label %239

239:                                              ; preds = %238
  %240 = load i32, ptr %2, align 4, !tbaa !5
  %241 = add nsw i32 %240, 1
  store i32 %241, ptr %2, align 4, !tbaa !5
  br label %12, !llvm.loop !29

242:                                              ; preds = %12
  br label %243

243:                                              ; preds = %242
  %244 = load i32, ptr %1, align 4, !tbaa !5
  %245 = add nsw i32 %244, 1
  store i32 %245, ptr %1, align 4, !tbaa !5
  br label %7, !llvm.loop !30

246:                                              ; preds = %7
  %247 = load i32, ptr %4, align 4, !tbaa !5
  %248 = icmp ne i32 %247, 100000
  br i1 %248, label %249, label %252

249:                                              ; preds = %246
  %250 = load i32, ptr %4, align 4, !tbaa !5
  %251 = call i32 (ptr, ...) @printf(ptr noundef @.str.41, i32 noundef %250)
  br label %252

252:                                              ; preds = %249, %246
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %4) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %3) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %2) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %1) #5
  ret void
}

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 = { 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 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { nounwind }
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 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"double", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"any pointer", !7, i64 0}
!13 = !{!14, !12, i64 344}
!14 = !{!"sparticle", !10, i64 0, !10, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !10, i64 40, !10, i64 48, !10, i64 56, !10, i64 64, !10, i64 72, !7, i64 80, !7, i64 272, !10, i64 280, !10, i64 288, !10, i64 296, !10, i64 304, !7, i64 312, !7, i64 313, !7, i64 314, !7, i64 315, !6, i64 316, !6, i64 320, !6, i64 324, !12, i64 328, !6, i64 336, !12, i64 344, !12, i64 352, !6, i64 360, !7, i64 364}
!15 = !{!14, !6, i64 360}
!16 = !{!14, !7, i64 313}
!17 = !{!14, !7, i64 314}
!18 = !{!14, !7, i64 315}
!19 = !{!14, !10, i64 0}
!20 = !{!14, !10, i64 24}
!21 = !{!14, !10, i64 8}
!22 = !{!14, !10, i64 32}
!23 = !{!14, !10, i64 16}
!24 = !{!14, !10, i64 40}
!25 = !{!14, !12, i64 352}
!26 = distinct !{!26, !27}
!27 = !{!"llvm.loop.mustprogress"}
!28 = distinct !{!28, !27}
!29 = distinct !{!29, !27}
!30 = distinct !{!30, !27}


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

@cxsize = external dso_local local_unnamed_addr global double, align 8
@cysize = external dso_local local_unnamed_addr global double, align 8
@czsize = 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.35 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.36 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.37 = external hidden unnamed_addr constant [32 x i8], align 1
@.str.38 = external hidden unnamed_addr constant [32 x i8], align 1
@.str.39 = external hidden unnamed_addr constant [32 x i8], align 1
@.str.40 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.41 = external hidden unnamed_addr constant [35 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: noreturn nounwind
declare void @exit(i32 noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
define dso_local void @checkcells() local_unnamed_addr #3 {
  %1 = load i32, ptr @cx, align 4, !tbaa !5
  %2 = icmp sgt i32 %1, 0
  %3 = load i32, ptr @cy, align 4
  %4 = icmp sgt i32 %3, 0
  %or.cond256 = select i1 %2, i1 %4, i1 false
  br i1 %or.cond256, label %.preheader87, label %._crit_edge140.thread

.preheader87:                                     ; preds = %0, %._crit_edge135
  %5 = phi i32 [ %126, %._crit_edge135 ], [ %1, %0 ]
  %6 = phi i32 [ %127, %._crit_edge135 ], [ %3, %0 ]
  %7 = phi i32 [ %128, %._crit_edge135 ], [ %3, %0 ]
  %indvars.iv188 = phi i64 [ %indvars.iv.next189.pre-phi, %._crit_edge135 ], [ 0, %0 ]
  %.069137 = phi i32 [ %.1.lcssa, %._crit_edge135 ], [ 0, %0 ]
  %8 = icmp sgt i32 %7, 0
  br i1 %8, label %.preheader.lr.ph, label %.preheader87.._crit_edge135_crit_edge

.preheader87.._crit_edge135_crit_edge:            ; preds = %.preheader87
  %.pre200 = add nuw nsw i64 %indvars.iv188, 1
  br label %._crit_edge135

.preheader.lr.ph:                                 ; preds = %.preheader87
  %9 = trunc nuw nsw i64 %indvars.iv188 to i32
  %10 = uitofp nneg i32 %9 to double
  %11 = add nuw nsw i64 %indvars.iv188, 1
  %12 = trunc nuw nsw i64 %11 to i32
  %13 = uitofp nneg i32 %12 to double
  %14 = load i32, ptr @cz, align 4, !tbaa !5
  %15 = icmp sgt i32 %14, 0
  br i1 %15, label %.preheader, label %._crit_edge135

.preheader:                                       ; preds = %.preheader.lr.ph, %._crit_edge
  %16 = phi i32 [ %121, %._crit_edge ], [ %6, %.preheader.lr.ph ]
  %17 = phi i32 [ %122, %._crit_edge ], [ %14, %.preheader.lr.ph ]
  %18 = phi i32 [ %123, %._crit_edge ], [ %14, %.preheader.lr.ph ]
  %indvars.iv185 = phi i64 [ %indvars.iv.next186.pre-phi, %._crit_edge ], [ 0, %.preheader.lr.ph ]
  %.1134 = phi i32 [ %.2.lcssa, %._crit_edge ], [ %.069137, %.preheader.lr.ph ]
  %19 = icmp sgt i32 %18, 0
  br i1 %19, label %.lr.ph, label %.preheader.._crit_edge_crit_edge

.preheader.._crit_edge_crit_edge:                 ; preds = %.preheader
  %.pre199 = add nuw nsw i64 %indvars.iv185, 1
  br label %._crit_edge

.lr.ph:                                           ; preds = %.preheader
  %20 = trunc nuw nsw i64 %indvars.iv185 to i32
  %21 = uitofp nneg i32 %20 to double
  %22 = add nuw nsw i64 %indvars.iv185, 1
  %23 = trunc nuw nsw i64 %22 to i32
  %24 = uitofp nneg i32 %23 to double
  br label %25

25:                                               ; preds = %.lr.ph, %.loopexit
  %26 = phi i32 [ %17, %.lr.ph ], [ %118, %.loopexit ]
  %indvars.iv = phi i64 [ 0, %.lr.ph ], [ %indvars.iv.next.pre-phi, %.loopexit ]
  %.2132 = phi i32 [ %.1134, %.lr.ph ], [ %.4, %.loopexit ]
  %27 = getelementptr inbounds [75 x [75 x [75 x ptr]]], ptr @celllist, i64 0, i64 %indvars.iv188, i64 %indvars.iv185, i64 %indvars.iv
  %28 = load ptr, ptr %27, align 8, !tbaa !9
  %.not79 = icmp eq ptr %28, null
  br i1 %.not79, label %..loopexit_crit_edge, label %29

..loopexit_crit_edge:                             ; preds = %25
  %.pre198 = add nuw nsw i64 %indvars.iv, 1
  br label %.loopexit

29:                                               ; preds = %25
  %30 = getelementptr inbounds i8, ptr %28, i64 344
  %31 = load ptr, ptr %30, align 8, !tbaa !11
  %.not80 = icmp eq ptr %31, null
  br i1 %.not80, label %._crit_edge197, label %32

._crit_edge197:                                   ; preds = %29
  %.pre201 = trunc nuw nsw i64 %indvars.iv to i32
  br label %39

32:                                               ; preds = %29
  %33 = getelementptr inbounds i8, ptr %28, i64 360
  %34 = load i32, ptr %33, align 8, !tbaa !14
  %35 = getelementptr inbounds i8, ptr %31, i64 360
  %36 = load i32, ptr %35, align 8, !tbaa !14
  %37 = trunc nuw nsw i64 %indvars.iv to i32
  %38 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.35, i32 noundef %9, i32 noundef %20, i32 noundef %37, i32 noundef %34, i32 noundef %36)
  br label %39

39:                                               ; preds = %._crit_edge197, %32
  %.pre-phi202 = phi i32 [ %.pre201, %._crit_edge197 ], [ %37, %32 ]
  %40 = uitofp nneg i32 %.pre-phi202 to double
  %41 = add nuw nsw i64 %indvars.iv, 1
  %42 = trunc nuw nsw i64 %41 to i32
  %43 = uitofp nneg i32 %42 to double
  br label %44

44:                                               ; preds = %39, %116
  %.0130 = phi ptr [ %28, %39 ], [ %117, %116 ]
  %.3129 = phi i32 [ %.2132, %39 ], [ %45, %116 ]
  %45 = add nsw i32 %.3129, 1
  %46 = getelementptr inbounds i8, ptr %.0130, i64 313
  %47 = load i8, ptr %46, align 1, !tbaa !15
  %48 = zext i8 %47 to i64
  %.not82 = icmp eq i64 %indvars.iv188, %48
  %49 = getelementptr inbounds i8, ptr %.0130, i64 314
  %50 = load i8, ptr %49, align 2, !tbaa !16
  %51 = zext i8 %50 to i64
  %.not83 = icmp eq i64 %indvars.iv185, %51
  %or.cond305 = select i1 %.not82, i1 %.not83, i1 false
  br i1 %or.cond305, label %52, label %split

52:                                               ; preds = %44
  %53 = getelementptr inbounds i8, ptr %.0130, i64 315
  %54 = load i8, ptr %53, align 1, !tbaa !17
  %55 = zext i8 %54 to i64
  %.not84 = icmp eq i64 %indvars.iv, %55
  br i1 %.not84, label %61, label %split

split:                                            ; preds = %52, %44
  %.pre-phi = zext i8 %50 to i32
  %56 = zext i8 %47 to i32
  %57 = getelementptr inbounds i8, ptr %.0130, i64 315
  %58 = load i8, ptr %57, align 1, !tbaa !17
  %59 = zext i8 %58 to i32
  %60 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.36, i32 noundef %9, i32 noundef %20, i32 noundef %.pre-phi202, i32 noundef %56, i32 noundef %.pre-phi, i32 noundef %59)
  tail call void @exit(i32 noundef 3) #4
  unreachable

61:                                               ; preds = %52
  %62 = load double, ptr %.0130, align 8, !tbaa !18
  %63 = load double, ptr @cxsize, align 8, !tbaa !19
  %64 = tail call double @llvm.fmuladd.f64(double %63, double %10, double 0xBE7AD7F29ABCAF48)
  %65 = fcmp olt double %62, %64
  %66 = tail call double @llvm.fmuladd.f64(double %63, double %13, double 0x3E7AD7F29ABCAF48)
  %67 = fcmp ogt double %62, %66
  %or.cond = select i1 %65, i1 true, i1 %67
  br i1 %or.cond, label %68, label %74

68:                                               ; preds = %61
  %69 = getelementptr inbounds i8, ptr %.0130, i64 360
  %70 = load i32, ptr %69, align 8, !tbaa !14
  %71 = getelementptr inbounds i8, ptr %.0130, i64 24
  %72 = load double, ptr %71, align 8, !tbaa !20
  %73 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.37, double noundef %62, i32 noundef %9, i32 noundef %70, double noundef %72)
  tail call void @exit(i32 noundef 3) #4
  unreachable

74:                                               ; preds = %61
  %75 = getelementptr inbounds i8, ptr %.0130, i64 8
  %76 = load double, ptr %75, align 8, !tbaa !21
  %77 = load double, ptr @cysize, align 8, !tbaa !19
  %78 = tail call double @llvm.fmuladd.f64(double %77, double %21, double 0xBE7AD7F29ABCAF48)
  %79 = fcmp olt double %76, %78
  %80 = tail call double @llvm.fmuladd.f64(double %77, double %24, double 0x3E7AD7F29ABCAF48)
  %81 = fcmp ogt double %76, %80
  %or.cond145 = select i1 %79, i1 true, i1 %81
  br i1 %or.cond145, label %82, label %88

82:                                               ; preds = %74
  %83 = getelementptr inbounds i8, ptr %.0130, i64 360
  %84 = load i32, ptr %83, align 8, !tbaa !14
  %85 = getelementptr inbounds i8, ptr %.0130, i64 32
  %86 = load double, ptr %85, align 8, !tbaa !22
  %87 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.38, double noundef %76, i32 noundef %20, i32 noundef %84, double noundef %86)
  tail call void @exit(i32 noundef 3) #4
  unreachable

88:                                               ; preds = %74
  %89 = getelementptr inbounds i8, ptr %.0130, i64 16
  %90 = load double, ptr %89, align 8, !tbaa !23
  %91 = load double, ptr @czsize, align 8, !tbaa !19
  %92 = tail call double @llvm.fmuladd.f64(double %91, double %40, double 0xBE7AD7F29ABCAF48)
  %93 = fcmp olt double %90, %92
  %94 = tail call double @llvm.fmuladd.f64(double %91, double %43, double 0x3E7AD7F29ABCAF48)
  %95 = fcmp ogt double %90, %94
  %or.cond147 = select i1 %93, i1 true, i1 %95
  br i1 %or.cond147, label %96, label %102

96:                                               ; preds = %88
  %97 = getelementptr inbounds i8, ptr %.0130, i64 360
  %98 = load i32, ptr %97, align 8, !tbaa !14
  %99 = getelementptr inbounds i8, ptr %.0130, i64 40
  %100 = load double, ptr %99, align 8, !tbaa !24
  %101 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.39, double noundef %90, i32 noundef %.pre-phi202, i32 noundef %98, double noundef %100)
  tail call void @exit(i32 noundef 3) #4
  unreachable

102:                                              ; preds = %88
  %103 = getelementptr inbounds i8, ptr %.0130, i64 352
  %104 = load ptr, ptr %103, align 8, !tbaa !25
  %.not85 = icmp eq ptr %104, null
  br i1 %.not85, label %.loopexit.loopexit, label %105

105:                                              ; preds = %102
  %106 = getelementptr inbounds i8, ptr %104, i64 344
  %107 = load ptr, ptr %106, align 8, !tbaa !11
  %.not86 = icmp eq ptr %107, %.0130
  br i1 %.not86, label %116, label %108

108:                                              ; preds = %105
  %109 = getelementptr inbounds i8, ptr %.0130, i64 360
  %110 = load i32, ptr %109, align 8, !tbaa !14
  %111 = getelementptr inbounds i8, ptr %104, i64 360
  %112 = load i32, ptr %111, align 8, !tbaa !14
  %113 = getelementptr inbounds i8, ptr %107, i64 360
  %114 = load i32, ptr %113, align 8, !tbaa !14
  %115 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.40, i32 noundef %110, i32 noundef %112, i32 noundef %114)
  %.pre192 = load ptr, ptr %103, align 8, !tbaa !25
  br label %116

116:                                              ; preds = %105, %108
  %117 = phi ptr [ %104, %105 ], [ %.pre192, %108 ]
  %.not81 = icmp eq ptr %117, null
  br i1 %.not81, label %.loopexit.loopexit, label %44, !llvm.loop !26

.loopexit.loopexit:                               ; preds = %102, %116
  %.pre193 = load i32, ptr @cz, align 4, !tbaa !5
  br label %.loopexit

.loopexit:                                        ; preds = %..loopexit_crit_edge, %.loopexit.loopexit
  %indvars.iv.next.pre-phi = phi i64 [ %.pre198, %..loopexit_crit_edge ], [ %41, %.loopexit.loopexit ]
  %118 = phi i32 [ %26, %..loopexit_crit_edge ], [ %.pre193, %.loopexit.loopexit ]
  %.4 = phi i32 [ %.2132, %..loopexit_crit_edge ], [ %45, %.loopexit.loopexit ]
  %119 = sext i32 %118 to i64
  %120 = icmp slt i64 %indvars.iv.next.pre-phi, %119
  br i1 %120, label %25, label %._crit_edge.loopexit, !llvm.loop !28

._crit_edge.loopexit:                             ; preds = %.loopexit
  %.pre194 = load i32, ptr @cy, align 4, !tbaa !5
  br label %._crit_edge

._crit_edge:                                      ; preds = %.preheader.._crit_edge_crit_edge, %._crit_edge.loopexit
  %indvars.iv.next186.pre-phi = phi i64 [ %.pre199, %.preheader.._crit_edge_crit_edge ], [ %22, %._crit_edge.loopexit ]
  %121 = phi i32 [ %16, %.preheader.._crit_edge_crit_edge ], [ %.pre194, %._crit_edge.loopexit ]
  %122 = phi i32 [ %17, %.preheader.._crit_edge_crit_edge ], [ %118, %._crit_edge.loopexit ]
  %123 = phi i32 [ %18, %.preheader.._crit_edge_crit_edge ], [ %118, %._crit_edge.loopexit ]
  %.2.lcssa = phi i32 [ %.1134, %.preheader.._crit_edge_crit_edge ], [ %.4, %._crit_edge.loopexit ]
  %124 = sext i32 %121 to i64
  %125 = icmp slt i64 %indvars.iv.next186.pre-phi, %124
  br i1 %125, label %.preheader, label %._crit_edge135.loopexit, !llvm.loop !29

._crit_edge135.loopexit:                          ; preds = %._crit_edge
  %.pre195 = load i32, ptr @cx, align 4, !tbaa !5
  br label %._crit_edge135

._crit_edge135:                                   ; preds = %.preheader.lr.ph, %.preheader87.._crit_edge135_crit_edge, %._crit_edge135.loopexit
  %indvars.iv.next189.pre-phi = phi i64 [ %.pre200, %.preheader87.._crit_edge135_crit_edge ], [ %11, %._crit_edge135.loopexit ], [ %11, %.preheader.lr.ph ]
  %126 = phi i32 [ %5, %.preheader87.._crit_edge135_crit_edge ], [ %.pre195, %._crit_edge135.loopexit ], [ %5, %.preheader.lr.ph ]
  %127 = phi i32 [ %6, %.preheader87.._crit_edge135_crit_edge ], [ %121, %._crit_edge135.loopexit ], [ %6, %.preheader.lr.ph ]
  %128 = phi i32 [ %7, %.preheader87.._crit_edge135_crit_edge ], [ %121, %._crit_edge135.loopexit ], [ %7, %.preheader.lr.ph ]
  %.1.lcssa = phi i32 [ %.069137, %.preheader87.._crit_edge135_crit_edge ], [ %.2.lcssa, %._crit_edge135.loopexit ], [ %.069137, %.preheader.lr.ph ]
  %129 = sext i32 %126 to i64
  %130 = icmp slt i64 %indvars.iv.next189.pre-phi, %129
  br i1 %130, label %.preheader87, label %._crit_edge140, !llvm.loop !31

._crit_edge140:                                   ; preds = %._crit_edge135
  %.not = icmp eq i32 %.1.lcssa, 100000
  br i1 %.not, label %132, label %._crit_edge140.thread

._crit_edge140.thread:                            ; preds = %0, %._crit_edge140
  %.069.lcssa206 = phi i32 [ %.1.lcssa, %._crit_edge140 ], [ 0, %0 ]
  %131 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.41, i32 noundef %.069.lcssa206)
  br label %132

132:                                              ; preds = %._crit_edge140.thread, %._crit_edge140
  ret void
}

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 = { 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 #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 }

!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 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"any pointer", !7, i64 0}
!11 = !{!12, !10, i64 344}
!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, !6, i64 316, !6, i64 320, !6, i64 324, !10, i64 328, !6, i64 336, !10, i64 344, !10, i64 352, !6, i64 360, !7, i64 364}
!13 = !{!"double", !7, i64 0}
!14 = !{!12, !6, i64 360}
!15 = !{!12, !7, i64 313}
!16 = !{!12, !7, i64 314}
!17 = !{!12, !7, i64 315}
!18 = !{!12, !13, i64 0}
!19 = !{!13, !13, i64 0}
!20 = !{!12, !13, i64 24}
!21 = !{!12, !13, i64 8}
!22 = !{!12, !13, i64 32}
!23 = !{!12, !13, i64 16}
!24 = !{!12, !13, i64 40}
!25 = !{!12, !10, i64 352}
!26 = distinct !{!26, !27}
!27 = !{!"llvm.loop.mustprogress"}
!28 = distinct !{!28, !27}
!29 = distinct !{!29, !27, !30}
!30 = !{!"llvm.loop.unswitch.partial.disable"}
!31 = distinct !{!31, !27, !30}


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